rosparam
该功能能方便开发者进行参数的快速读取与修改(在不另行编译的情况下)
注:该文章是对他人的方法进行归纳总结,方便进行ROS相关的快速开发
参考网站:
https://blog.csdn.net/u014695839/article/details/78348600(写得很详细,推荐看看)
https://blog.csdn.net/wengge987/article/details/50620121(作为补充)
https://www.cnblogs.com/lvchaoshun/p/6873142.html(补充)
使用方式1(工具)
Commands:
rosparam set set parameter 设置参数
rosparam get get parameter 获得参数值
rosparam load load parameters from file 从文件中加载参数到参数服务器
rosparam dump dump parameters to file 将参数服务器中的参数写入到文件
rosparam delete delete parameter 删除参数
rosparam list list parameter names 列出参数服务器中的参数
$ rosparam load param.yaml
- 效果同上
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="$(find turtlebot_navigation)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find turtlebot_navigation)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find turtlebot_navigation)/param/local_costmap_params.yaml" command="load" />
<rosparam file="$(find turtlebot_navigation)/param/global_costmap_params.yaml" command="load" />
<rosparam file="$(find turtlebot_navigation)/param/dwa_local_planner_params.yaml" command="load" />
<rosparam file="$(find turtlebot_navigation)/param/move_base_params.yaml" command="load" />
<rosparam file="$(find turtlebot_navigation)/param/global_planner_params.yaml" command="load" />
<rosparam file="$(find turtlebot_navigation)/param/navfn_global_planner_params.yaml" command="load" />
<!-- external params file that could be loaded into the move_base namespace -->
<rosparam file="$(arg custom_param_file)" command="load" />
<!-- reset frame_id parameters using user input data -->
<param name="global_costmap/global_frame" value="$(arg global_frame_id)"/>
<param name="global_costmap/robot_base_frame" value="$(arg base_frame_id)"/>
<param name="local_costmap/global_frame" value="$(arg odom_frame_id)"/>
<param name="local_costmap/robot_base_frame" value="$(arg base_frame_id)"/>
<param name="DWAPlannerROS/global_frame_id" value="$(arg odom_frame_id)"/>
<remap from="cmd_vel" to="navigation_velocity_smoother/raw_cmd_vel"/>
<remap from="odom" to="$(arg odom_topic)"/>
<remap from="scan" to="$(arg laser_topic)"/>
</node>
使用方式2(代码)
#include <ros/ros.h>
int main(int argc,char** argv)
{
ros::init(argc, argv, "param_demo");
ros::NodeHandle n;
ros::NodeHandle pn("~");//roslaunch里面的param自带命名空间,这个"~"使两者对应,从而能改
std::string s;
int num;
//个人比较喜欢的一种通过roslaunch来传递到常有变量值的方法
n.param<std::string>("string_param", s, "haha");
pn.param<int>("int_param", num, 666);
//输出被初始化后的变量值
ROS_INFO("string_param_init: %s", s.c_str());
ROS_INFO("int_param_init: %d", num);
//设置参数的值
n.setParam("string_param", "hehe");
pn.setParam("int_param", 222);
//设置循环的频率为1Hz
ros::Rate loop_rate(1);
while(ros::ok())
{
//获取参数的值
n.getParam("string_param", s);
pn.getParam("int_param", num);
//输出参数
ROS_INFO("string_param: %s", s.c_str());
ROS_INFO("int_param: %d", num);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
- 总结:
- 注意命名空间,即需要修改对应的参数才可以修改,可以通过rosparam list和roslaunch一开始运行的时候查看到对应参数的名字(ns就是在前缀加东西,可以测试看看)
demo在以下网站:
- https://github.com/SwordSS/ros_demo