Gazebo筆記(四)

Chien-lin.Tseng
My learning note
Published in
5 min readJul 22, 2019

2019年7月22日(一)

目錄:

一、參考網站

二、一些小發現、心得

三、建立一個node,其中有發布器與接收器

一、參考網站

(1) gazebo 的 youtube 教學 (可以連過去那邊,一直看下去)

https://www.youtube.com/watch?v=qi2A32WgRqI&list=PLK0b4e05LnzbHiGDGTgE_FIWpOCvndtYx&index=1

(2)

二、一些小發現、心得

(1) 在 ubuntu 寫c 語言

vim try.c
gcc try.c
./a.out

(2) 全域變數測試 (c 語言)

gcc global_variable_test.c
./a.out
------------------------------------
yee
10
5
in call
5
1
in main
1

(3) 全域變數 (python)

python __ 注意事情

三、建立一個node,其中有發布器與接收器

(1) 建立 rrbot_pubsub.py (放在 /catkin_ws/src/my_rrbot/src)

程式功能: 這個程式的節點,
可以發布消息到 /rrbot/joint1_position_controller/command 話題,來控制rrbot joint1的轉動。
也可以訂閱兩個話題,/rrbot/joint1_position_controller/command 和 /rrbot/joint1_position_controller/state 話題,來接收 命令目標位置 joint1現在實際位置

註:之前發布器、訂閱器分開寫,現在把它合在一起寫。

程式:

註:
可以把rospy.loginfo那行改成: (可同時對照 angle和command_data是不是一樣)

rospy.loginfo("angle = %f ,command_data = %f , process_value_data = %f", angle, command_data,  process_value_data)

分析:

(a) 主要的和以前一樣,那些略過

(b) 有一種感覺:訂閱器一直在背景不斷的跑

rospy.Subscriber
rospy.Subscriber
......
rospy.spin()
------------------------------------------------------------
上面這幾行,訂閱各自話題後,靠著 rosoy.spin(),不斷的在背景執行 callback函式。
藉由callback函式,不斷更新 command_data 和 process_value_data ,使我們執行rospy.loginfo 時可以印出最新的command_data和process_value_data。

(c) python的全域變數 (詳細請看上面網站,那裡很詳細)

command_data = 0
process_value_data = 0
def callback(subdata):

global command_data
command_data = subdata.data

(2) 執行 rrbot_pubsub.py

chmod +x rrbot_pubsub.py 

執行所有程式:

roslaunch rrbot_gazebo rrbot_world.launch
roslaunch rrbot_control rrbot_control.launch
rosrun my_rrbot rrbot_pubsub.py

結果圖:

註解:
(a) 可以藉由 rqt_gui 的 pid 調整,來降低 command_data 和 process_value_data 的差異。如果是差6.28左右的,請看上一篇的筆記。
(b) angle 和 command_data 之間,可能會有延遲。

看一下 rqt_graph 圖:

注意左上角。
注意左上角。 (這張圖似乎比較好看?)( 話題名稱只會出現一次)

註解:
我們可以看到,rrbot_command節點 發布了消息到一個話題,訂閱了兩個畫題。

--

--