ROS初學(xué)之小烏龜

小烏龜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, 分別控制了烏龜界面的北京顏色和烏龜在界面上的位置坐標(biāo),它們的消息類型分別是 [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ā)布頻率??梢钥吹矫畎l(fā)布之后小烏龜開始做圓周運動:

通過 Ctrl+C停止圓周運動

通過鍵盤控制烏龜運動

在上面控制烏龜做圓周運動的終端重,輸入以下命令:

rosrun turtlesim turtle_teleop_key

命令執(zhí)行后顯示:

然后就可以通過鍵盤的方向鍵來控制烏龜運動,方向鍵上下控制前后移動,左右控制移動方向:(注意這里需要活躍界面為這個終端窗口,而不是小烏龜?shù)娘@示界面,如果鼠標(biāo)電機(jī)小烏龜?shù)娘@示界面 turtlesim 窗口,然后再用鍵盤控制,將不可用。)


結(jié)束后可以按q退出鍵盤控制。

通過服務(wù)控制烏龜?shù)囊苿?/p>

首先通過 /turtle1/Pose 話題來獲得烏龜?shù)奈恢眯畔ⅲ?/p>

執(zhí)行:

rostopic type /turtle1/pose

得到輸出為:

然后執(zhí)行:

rosmsg show turtlesim/Pose

輸出:

然后可以通過以下命令得到烏龜?shù)奈恢米鴺?biāo)、方位角度(theta)和速度參數(shù):

rostopic echo /turtle1/Pose

輸出為:?


這里需要注意這個小烏龜?shù)脑c在 TurtleSim 窗口的左下角。

然后我們就可以實用 rosservice 來移動烏龜,格式為: rosservice call <service name><service arguments>

比如服務(wù) /turtle1/teleport_absolute 可以控制絕對位置的移動,這一服務(wù)的 service arguments 包含 x,y 坐標(biāo)和方位角。例如將烏龜移動到絕對坐標(biāo) [1, 1] ,方位角為0,那么運行以下命令:

rosservice call /turtle1/teleport_absolute 1 1 0

執(zhí)行結(jié)果如圖:

可以看到烏龜移動到了絕對坐標(biāo) [1, 1] 的位置,并且頭朝向是方位角為0的位置。

服務(wù) /turtle1/teleport_relative 可以控制相對位置的移動,這一服務(wù)的 service arguments 包含移動距離和角度。例如將烏龜從絕對坐標(biāo) [1, 1] 移動到絕對坐標(biāo) [2, 1] ,那么相對位置移動了1,角度為 0 。運行以下命令:

rosservice call /turtle1/teleport_relative 1 0

運行結(jié)果如下圖:


可以看到完成了相對位置的移動。大家也可以自己改變這兩個服務(wù)的角度或者位移量(坐標(biāo)值)來看看不同的數(shù)值對小烏龜位置的影響。

參考

原文鏈接:https://blog.csdn.net/liangforcold/article/details/126398244

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容