iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

一個營建系學生的韌體之路-自走車篇系列 第 16

【AMR_Day16】ROS2 基本功-Parameter

  • 分享至 

  • xImage
  •  

parameters、arguments傻傻分不清楚

DAY15的最後提到了launch文件中的節點設定,有兩個中文都是『參數』的參數(繞口令XD),分別是parameters與arguments,在xml格式是<param><arg>,我自己依然在努力搞懂它們的差異...那我第一次同時發現它們的存在,是因為在使用兩個不同的人寫的package,同樣都是開啟robot_state_publisher節點,但用法卻不太一樣?

# AMR_DAY15(我自己的package)
    start_rviz_cmd = Node(
        #...
        # arguments=[-d,""]
    )
        pcl_node = Node(
        # ...
        parameters=[
                {'KS': 50},
                {'RS':0.1},
                {'AT':1.2}
                ]
    )
    
# 當初發現兩個不同的package,使用robot_state_publisher的方式不太一樣
# robot_state_publisher未來天數會提到
    package_1_robot_publisher = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        arguments=[robot.urdf]
    )

    package_2_robot_publisher = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        parameters=[{'robot_description': 『robot.urdf的內容』}]
    )

我自己最後得到的結論是parameters是『ROS2中的參數服務系統』,arguments只是『launch文件中的其中一組參數』,更具體的介紹arguments應該是給c++的主程式main(int argc, char **argv)使用的參數。在python應該就是sys.argv[]?我和python沒那麼熟...

p.s.如果有錯誤理解的話請糾正我!

接下來,今天來看看『ROS2中的參數服務系統』教學吧~~

parameters 參數

剛提到在ROS2中parameters是相當重要的一環,也就是參數服務系統,可以預設節點參數,免去掉每次修改完cpp的中一個變數,就要重新colcon build的時間。
舉我自己的例子,pcl_node中會用到歐幾里得距離分群,簡單來說需要設定一個距離變數D,在這範圍內(<D)的點都算同一群,那我不想每次為了只修改這個距離D就要重新編譯整個package,我就可以把D設為para,然後在terminal時下指令

ros2 run <package_name> <node_name> --ros-args -p D:=5

那這樣就是用參數服務系統作修改預設參數這件事了
cpp的寫法未來天數會提到,今天專注在基本的parameters命令~~

ros2 param list

繼續用turtlesim做範例
先啟動兩個不同的terminal,並且分別ros2 run

# terminal1 小烏龜節點
ros2 run turtlesim turtlesim_node

# terminal2 鍵盤控制節點
ros2 run turtlesim turtle_teleop_key

再開一個新的terminal 來列出所有parameters

ros2 param list #列出所有可以使用的參數

https://ithelp.ithome.com.tw/upload/images/20231001/20140433AC0nge8qfY.png

ros2 param get

ros2 param get <node_name> <parameter_name> #取得參數的值

ros2 param get /turtlesim background_g 

https://ithelp.ithome.com.tw/upload/images/20231001/201404339YAiJRsSq7.png

ros2 param set

ros2 param set <node_name> <parameter_name> <value> #設定參數的值

ros2 param set /turtlesim background_r 255

https://ithelp.ithome.com.tw/upload/images/20231001/20140433XcCL7uYqDR.png

ros2 param dump

ros2 param dump <node_name> #列出該節點的所有參數與值,並存為yaml檔
ros2 param dump /turtlesim
        Saving to:  ./turtlesim.yaml
# ./turtlesim.yaml
/turtlesim:
  ros__parameters:
    background_b: 255
    background_g: 86
    background_r: 255
    use_sim_time: false

p.s.這是ROS2 parameters參數檔個固定格式!!

/<node_name>:
  ros__parameters:
      # parameter1: 0

https://ithelp.ithome.com.tw/upload/images/20231001/20140433rqiFJvLmnC.png

ros2 param load

修改turtlesim.yaml並存檔

/turtlesim:
  ros__parameters:
    background_b: 10
    background_g: 255
    background_r: 10
    use_sim_time: false
ros2 param load <node_name> <parameter_file> #修改yaml檔,並重新載入給節點
ros2 param load /turtlesim turtlesim.yaml

https://ithelp.ithome.com.tw/upload/images/20231001/20140433Z5hbcPyyJC.png

ros2 run --ros-args --params-file

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name> #在啟動節點時,直接帶入參數檔
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml

https://ithelp.ithome.com.tw/upload/images/20231001/20140433bNw4bbIG9q.png


上一篇
【AMR_Day15】 關於Launch的歪路
下一篇
【AMR_Day17】ROS2 基本功- 用c++寫個綜合練習(上)
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言