操作演示,對參數服務器的理解:點擊打開鏈接
rosparam使得我們能夠存儲並操作ROS 參數服務器(Parameter Server)上的數據。參數服務器能夠存儲整型、浮點、布爾、字符串、字典和列表等數據類型。rosparam使用YAML標記語言的語法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮點型, one是字符串, true是布爾, [1, 2, 3]是整型列表, {a: b, c: d}是字典.
1. 使用 rosparam
1.1 rosparam list
啟動 master,開啟終端,輸入 roscore,運行 turtle 節點,rosrun turtlesim turtlesim_node,新開啟一個終端,輸入
rosparam list
看到如下結果:
發現其中有三個參數是修改背景顏色的。
1.2 rosparam 設置 and rosparam 獲取
在終端中輸入:
rosparam set background_r 150
然后繼續輸入:
rosservice call clear
發現背景顏色由
變為
獲取背景綠色通道的值
rosparam get background_g
利用
rosparam get /
獲取所有參數的值
1.3 rosparam dump
將所有的參數寫入 params.yaml 文件
在終端輸入:
rosparam dump params.yaml
將yaml文件重載入新的命名空間,比如說copy空間:
rosparam load params.yaml copy
rosparam get copy/
運行結果:
2. 使用 rqt_console 和 roslaunch
2.1 使用 rqt_console
先運行:
sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
確保已經安裝了所需要的包。
rqt_console 屬於ROS日志框架(logging framework)的一部分,用來顯示節點的輸出信息。rqt_logger_level 允許修改節點運行時輸出信息的日志等級(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。
繼續運行小烏龜節點,輸入:
rosrun rqt_console rqt_console
得到:
新開一個終端:輸入:
rosrun rqt_console rqt_console
得到:
再次啟動:
rosrun turtlesim turtlesim_node
然后 refresh 一下 rqt_logger_level 窗口 並將日志等級修改為 warn
再開啟一個終端,運行:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]'
可見:
2.2 日志等級說明
Fatal是最高優先級,Debug 是最低優先級。通過設置日志等級可以獲取該等級及其以上優先等級的所有日志消息。比如,將日志等級設為Warn時,會得到 Warn、Error和 Fatal 這三個等級的所有日志消息
2.3 使用roslaunch
關閉 turtlesim 節點。
進入
cd ~/catkin_ws/src/beginner_tutorials/ mkdir launch cd launch/ vim turtlemimic.launch
將以下代碼寫入:
<launch> <group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node> </launch>
運行:
roslaunch beginner_tutorials
下面對 launch 文件進行介紹:
<launch>
以launch標簽開頭以表明這是一個launch文件
<group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group>
創建了兩個節點分組並以'命名空間(namespace)'標簽來區分,其中一個名為turtulesim1,另一個名為turtlesim2,兩個組里面都使用相同的turtlesim節點並命名為'sim'。這樣可以同時啟動兩個turtlesim模擬器而不會產生命名沖突
<node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node>
在這里啟動模仿節點,並將所有話題的輸入和輸出分別重命名為turtlesim1和turtlesim2,這樣就會使turtlesim2模仿turtlesim1
</launch>
結束標簽
在一個新終端中輸入:
rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
雖然發布命令只是給turtlesim1發送了速度設定消息,會看到兩個turtlesims會同時開始移動