本文主要是介绍第十四弹 参数的使用与编程方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.参数模型(全局字典)
各个节点都可以进行访问。可以理解参数是全局变量的一个存储空间。
2.创建功能包
在~/catkin_ws/src的目录下:
打开终端,输入指令:
catkin_create_pkg learning_parameter roscpp rospy std_srvs
3. rosparam的用法
ros在运行时,参数存储在rosparam中
wood@wood:~$ rosparam
rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.Commands:rosparam set set parameterrosparam get get parameterrosparam load load parameters from filerosparam dump dump parameters to filerosparam delete delete parameterrosparam list list parameter names
以小海龟程序为例,启动小海龟:
roscorerosrun turtlesim turtlesim_node
3.1 查看参数(list)
启动小海龟后,再新终端输入rosparam list查看参数
rosparam list
wood@wood:~$ rosparam list
/rosdistro
/roslaunch/uris/host_wood__37517
/rosversion
/run_id
/turtlesim/background_b //RGB表示背景的颜色
/turtlesim/background_g
/turtlesim/background_r
3.2 获得参数值 (get)
获得参数的值可以通过rosparam get来获得:
例如: rosparam get /turtlesim/background_b 获得背景颜色RGB的B值。
wood@wood:~$ rosparam get /turtlesim/background_b
255
wood@wood:~$ rosparam get /turtlesim/background_g
86
wood@wood:~$ rosparam get /turtlesim/background_r
69
3.3 设置参数(set)
设置参数使用set,例如来修改小海龟的背景颜色:
wood@wood:~$ rosparam set /turtlesim/background_b 100
wood@wood:~$ rosparam get /turtlesim/background_b
100
改变了参数的值,但是为何背景的颜色没有变?
这是因为不是实时更新的,需要发送一个请求之后,小海龟仿真器会刷新自己的参数。
rosservice call /clear "{}"
把RGB三个数都换成255之后,背景将变成白色:
rosparam set /turtlesim/background_b 255
rosparam set /turtlesim/background_r 255
rosparam set /turtlesim/background_g 255
rosservice call /clear "{}"
3.4 保存参数的值(dump)
dump命令:
rosparam dump param.yaml
运行后完全没有什么提示,但是刚刚设置的参数数值(未设置的就是原来的,3.1中列出来的)已经保存到param.yaml文件中,路径与当前终端的位置保持一致,即主目录下。
3.5 加载参数文件 (load)
在3.4中保存了参数,亦可以直接在文件中修改参数。例如把背景RGB都改成0:
保存后退出。
加载参数文件:
wood@wood:~$ rosparam load param.yaml
wood@wood:~$
wood@wood:~$ rosparam get /turtlesim/background_b
0
wood@wood:~$ rosparam get /turtlesim/background_g
0
wood@wood:~$ rosparam get /turtlesim/background_r
0
wood@wood:~$
wood@wood:~$ rosservice call /clear "{}" wood@wood:~$
3.6 删除一个参数(delete)
例如删除g颜色:rosparam delete /turtlesim/background_g
刷新之后,颜色是变了的:
4. C++代码实现
/*** 该例程设置/读取海龟例程中的参数*/
#include <string>
#include <ros/ros.h>
#include <std_srvs/Empty.h>int main(int argc, char **argv)
{int red, green, blue;// ROS节点初始化ros::init(argc, argv, "parameter_config");// 创建节点句柄ros::NodeHandle node;//修改之前的参数值// 读取背景颜色参数ros::param::get("/background_r", red);ros::param::get("/background_g", green);ros::param::get("/background_b", blue);ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue); //修改之后的参数值// 设置背景颜色参数ros::param::set("/background_r", 255);ros::param::set("/background_g", 255);ros::param::set("/background_b", 255);ROS_INFO("Set Backgroud Color[255, 255, 255]");// 读取背景颜色参数ros::param::get("/background_r", red);ros::param::get("/background_g", green);ros::param::get("/background_b", blue);ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);// 调用服务,刷新背景颜色ros::service::waitForService("/clear");ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");//刷新海龟仿真器的背景颜色std_srvs::Empty srv;clear_background.call(srv);sleep(1);return 0;
}
5.设置编译规则
千万不要写错字母什么的,大小写,拼写。第二行打错了会有满屏的“未定义的引用”。
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})
6.编译和运行
在~/catkin_ws目录下打开终端,运行 catkin_make
编译成功:
运行小海龟:
roscorerosrun turtlesim turtlesim_noderosrun learning_parameter parameter_config
这篇关于第十四弹 参数的使用与编程方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!