ros param與網域名稱的使用

2021-10-08 01:15:30 字數 3596 閱讀 4488

3. param 在launch中的表現

4. rosparam load

imu_node

ros::nodehandle n;

ros::nodehandle nh("~");//相對網域名稱, 相對於在啟動起來的節點node網域名稱下

引數的網域名稱只能由nodehandle來控制管理, 節點程式中引數定義只由名稱決定。全域性nodehandle n下帶不帶「/」開頭都可以;相對nodehandle nh下不要帶「/」開頭,帶了會有問題;

ros::nodehandle n;

n.param("serial_port_name", serial_port_name_, "/dev/ttyusb0");

n.param("/imu_topic", imu_topic_, "/imu");

ros::nodehandle nh("~");

nh.param("publish_rate", publish_rate_, 200);

nh.param("debug_raw_data", debug_raw_data_, false);

ros::init(argc, ar**, "imu_node");
每個節點是乙個程序, 初始化的時候會指定乙個預設的節點名稱「imu_node」

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosrun  imu_node imu_node

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosparam list

/rosdistro

/roslaunch/uris/host_localhost__43741

/rosversion

/run_id

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosnode list

/imu_node

/rosout

引數服務沒被呼叫,命令rosparam list看不到相應的引數列表, 只要呼叫過 rosparam set 才會可見引數; 並且該引數的生存週期同引數伺服器的週期一致,也就是roscore的週期一致;

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosparam  set  /imu_frame /imu_frame1

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosparam list

/imu_frame

/rosdistro

/roslaunch/uris/host_localhost__45945

/rosversion

/run_id

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosparam get /imu_frame

/imu_frame1

yhzhao@yhzhao:~/ys_design/ysimu_ws$ roslaunch imu_node imu.launch

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosnode list

/imu_node_xx

/rosout

launch中param的name不要以「/」開頭,完全以xml的格式控制其網域名稱的相對性;launch的param name="imu_frame"有沒有「/」開頭都可以, 那就不要了;

ros::nodehandle n;//絕對網域名稱

ros::nodehandle nh("~");//相對網域名稱

n.param("serial_port_name", serial_port_name_, "/dev/ttyusb0");

n.param("imu_topic", imu_topic_, "/imu");

n.param("imu_frame", imu_frame_, "/imu_frame");

nh.param("publish_rate", publish_rate_, 200);

引數依據nodehandle的命名空間確定; serial_port_name_ imu_topic_ imu_frame_ 對應絕對網域名稱下; publish_rate_為相對網域名稱下; 其中相對網域名稱「~」為節點對應的網域名稱,如果節點名稱發生變化,網域名稱也會變化;

依據launc**件修改對應的節點引數;絕對引數放外面,相對引數放節點node裡面; 也可以寫全相對網域名稱引數在node外設定;

pkg=

"imu_node"

type

="imu_node"

name

="imu_node_xx"

output

="screen"

>

node

>

yhzhao@yhzhao:~/ys_design/ysimu_ws$ roslaunch imu_node imu.launch

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosnode list

/imu_node_xx

/rosout

yhzhao@yhzhao:~/ys_design/ysimu_ws$ rosparam list

/imu_frame

/imu_node_xx/publish_rate

/imu_topic

/rosdistro

/roslaunch/uris/host_localhost__45587

/rosversion

/run_id

/serial_port_name

對應的yaml檔案 :前面的為一層網域名稱; : 後面具體值為引數對應的值; 格式對齊對應網域名稱作用域

imu_port_name: /dev/ttyusb0

publish_tf: true

cmd_time_out: 1000 #ms

global_planner_params.yaml

globalplanner:

use_dijkstra: false

use_quadratic: true

use_grid_path: false

cost_factor: 5.0

引數會在外層套上網域名稱ns對應的global_costmap

global_planner_params.yaml

use_dijkstra: false

use_quadratic: true

use_grid_path: false

cost_factor: 5.0

rosparam簡單使用

我主要是想知道程式如何獲取yaml檔案的引數,於是簡單記錄了一下學習過程。寫乙個簡單的yaml檔案,比如kinect.yaml,檔案的名字其實沒有什麼影響,載入進去的還是引數的名字!kincet2 11 儲存好了之後就可以載入了 roscore rosparam load src learning ...

ROS使用教程 關於rosparam

launch時roslaunch首先檢查roscore是否已經啟動,如果沒有則啟動roscore。roscore會做三件事 啟動master節點,該節點是隱藏的,用於通過訊息名查詢目標節點,實現訊息 服務在各個節點之間的連線 啟動parameter server,用於設定與查詢引數 啟動日誌節點,記...

網域名稱收斂與網域名稱發散

dns 通常 internet 主機網域名稱的一般結構為 主機名.網域名稱.二級網域名稱.頂級網域名稱。tables scheme 值 含義scheme 定義英特網服務的型別 通常為http host 定義域主機 http的主機為www domain 定義網際網路網域名稱,比如 w3school.c...