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, argv, "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_为相对域名下; 其中相对域名“~”为节点对应的域名,如果节点名称发生变化,域名也会变化;
依据launch文件修改对应的节点参数;绝对参数放外面,相对参数放节点node里面; 也可以写全相对域名参数在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