小烏龜turtlesim節(jié)點
啟動節(jié)點
首先打開一個終端窗口,輸入以下命令啟動ROS節(jié)點管理器:
roscore
結(jié)果為:
然后再打開一個終端(不要關(guān)閉當(dāng)前窗口)终蒂,運行以下命令:
rosrun turtlesim turtlesim_node
執(zhí)行輸出類似:
然后會彈出turtlesim的界面如圖:
然后將這幾個終端最小化,記得不要關(guān)閉這兩個終端肄方。
turtlesim節(jié)點
新打開一個終端旷坦,輸入如下命令找出所有的活動節(jié)點:
rosnode list
輸出如下:
這里可以看到我們已經(jīng)成功啟動了 /turtlesim 節(jié)點。
如果需要查看turtlesim節(jié)點發(fā)布的話題敛助、訂閱話題和服務(wù)等內(nèi)容,可以輸入:
rosnode info /turtlesim
結(jié)果如圖:
在publications下面可以看到屋确,/turtlesim 發(fā)布了兩個話題: /turtle1/color_sensor 和 /turtle1/pose, 分別控制了烏龜界面的北京顏色和烏龜在界面上的位置坐標纳击,它們的消息類型分別是 [turtlesim/Color] 和 [turtlesim/Pose] 。
在Subscriptions下面可以看到 /turtlesim 訂閱了一個未知類型的話題 turtle1/cmd_vel
turtlesim 話題與消息
輸入如下命令來查看 /turtlesim 的話題:
rostopic list
輸出結(jié)果為:
查看話題的消息類型
輸入 rostopic type 命令查看話題類型攻臀,例如:
rostopic type /turtle1/color_sensor
輸出結(jié)果為:
turtlesim/Color 為 /turtle1/color_sensor這一話題的消息類型 (ROS消息類型命名格式:[package name]/[message type]
查看消息類型的具體內(nèi)容
剛剛看到話題 /turtle1/color_sensor 的消息類型為 turtlesim/Color 焕数, 可以通過 rosmsg shw命令來查看它的具體內(nèi)容:
rosmsg show turtlesim/Color
輸出結(jié)果為:
也就是說這里使用 unit8 來表示背景的RGB顏色。
查看話題的值
比如說想要查看背景的RGB顏色刨啸,或者小烏龜?shù)奈恢帽づ猓梢杂?rostopic echo 命令,例如:
rostopic echo /turtle1/color_sensor
終端會持續(xù)輸出如圖:
直到按下 Ctrl+C才會停止设联。
改變背景顏色
獲取參數(shù)列表
通過rosparam list 命令獲取 /turtlesim 節(jié)點的參數(shù)列表:
rosparam list
輸出為:
獲取參數(shù)值
通過 rosparam get / 命令獲得參數(shù)服務(wù)器上所有參數(shù)的數(shù)值:
rosparam get /?
輸出結(jié)果為:
注意這里的RGB數(shù)值和之前用 rostopic echo [topic name] 得到的數(shù)值相同善已。
修改顏色
通過 rosparam set 可以修改顏色:
rosparam set turtlesim/background_b 0rosparam set turtlesim/background_g 0rosparam set turtlesim/background_r 255rosservice call /clear
可以看到背景變成了紅色:
控制烏龜運動
紅色的背景感覺有點刺眼,這里我關(guān)閉了之前的 turtlesim節(jié)點并結(jié)束了roscore 節(jié)點管理器离例。這里重新啟動一下:
在終端一中運行:
roscore
在第二個終端中運行:
rosrun turtlesim turtlesim_node
得到:
(每次還都是不一樣的小烏龜)
通過發(fā)布話題控制烏龜運動
之前提到 /turtlesim 節(jié)點訂閱了一個位置類型的話題 turtle1/cmd_vel换团,這里先用 rostopic type來確定一下這個話題的消息類型,在一個新的終端窗口中運行如下命令:
rostopic type /turtle1/cmd_vel
得到:
運行如下命令確定該消息的數(shù)據(jù)格式:
rosmsg show geometry_msgs/Twist
得到輸出:
可以看到我們可以規(guī)定的是烏龜?shù)木€速度和角速度宫蛆,這里要注意在二維空間中艘包,允許的運動是沿 x 方向的直線運動或者是沿 z (垂直于電腦屏幕)的旋轉(zhuǎn)運動。比如說:規(guī)定線速度為 2m/s, 角速度為 1.8 rads/s耀盗,那么命令如下:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
需要一個穩(wěn)定的頻率為1Hz的指令流才能保持移動狀態(tài)辑甜。我們可以使用rostopic pub -r命令來發(fā)布源源不斷的命令,1 代表 1Hz 的 速度指令發(fā)布頻率袍冷×状祝可以看到命令發(fā)布之后小烏龜開始做圓周運動:
通過 Ctrl+C停止圓周運動
通過鍵盤控制烏龜運動
在上面控制烏龜做圓周運動的終端重,輸入以下命令:
rosrun turtlesim turtle_teleop_key
命令執(zhí)行后顯示:
然后就可以通過鍵盤的方向鍵來控制烏龜運動胡诗,方向鍵上下控制前后移動邓线,左右控制移動方向:(注意這里需要活躍界面為這個終端窗口淌友,而不是小烏龜?shù)娘@示界面,如果鼠標電機小烏龜?shù)娘@示界面 turtlesim 窗口骇陈,然后再用鍵盤控制震庭,將不可用。)
結(jié)束后可以按q退出鍵盤控制你雌。
通過服務(wù)控制烏龜?shù)囊苿?/p>
首先通過 /turtle1/Pose 話題來獲得烏龜?shù)奈恢眯畔ⅲ?/p>
執(zhí)行:
rostopic type /turtle1/pose
得到輸出為:
然后執(zhí)行:
rosmsg show turtlesim/Pose
輸出:
然后可以通過以下命令得到烏龜?shù)奈恢米鴺似髁⒎轿唤嵌龋╰heta)和速度參數(shù):
rostopic echo /turtle1/Pose
輸出為:?
這里需要注意這個小烏龜?shù)脑c在 TurtleSim 窗口的左下角。
然后我們就可以實用 rosservice 來移動烏龜婿崭,格式為: rosservice call <service name><service arguments>
比如服務(wù) /turtle1/teleport_absolute 可以控制絕對位置的移動拨拓,這一服務(wù)的 service arguments 包含 x,y 坐標和方位角氓栈。例如將烏龜移動到絕對坐標 [1, 1] 渣磷,方位角為0,那么運行以下命令:
rosservice call /turtle1/teleport_absolute 1 1 0
執(zhí)行結(jié)果如圖:
可以看到烏龜移動到了絕對坐標 [1, 1] 的位置授瘦,并且頭朝向是方位角為0的位置醋界。
服務(wù) /turtle1/teleport_relative 可以控制相對位置的移動,這一服務(wù)的 service arguments 包含移動距離和角度提完。例如將烏龜從絕對坐標 [1, 1] 移動到絕對坐標 [2, 1] 形纺,那么相對位置移動了1,角度為 0 徒欣。運行以下命令:
rosservice call /turtle1/teleport_relative 1 0
運行結(jié)果如下圖:
可以看到完成了相對位置的移動逐样。大家也可以自己改變這兩個服務(wù)的角度或者位移量(坐標值)來看看不同的數(shù)值對小烏龜位置的影響。
參考
原文鏈接:https://blog.csdn.net/liangforcold/article/details/126398244