Gazebo筆記(四)
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 = 0def 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節點 發布了消息到一個話題,訂閱了兩個畫題。