前言
本人ROS小白,利用寒假时间学习ROS,在此以笔记的方式记录自己每天的学习过程。争取写满20篇(15/20)。
环境:Ubuntu20.04、ROS1:noetic
环境配置:严格按照下方学习链接的教程配置,基本一次成功。
学习链接:【Autolabor初级教程】ROS机器人入门
对应链接文档:ROS机器人入门课程《ROS理论与实践》
笔记绝大部分代码使用Python语言编写。
本期关键词:cfg文件,rqt
概念
动态参数是一种可以在运行时更新参数而无需重启节点的参数配置策略。
客户端配置
流程如下:
- 创建功能包,添加依赖:
roscpp rospy std_msgs dynamic_reconfigure
- 创建cfg目录,新建并编辑.cfg文件
- 配置CMakeLists.txt并编译
添加.cfg文件
#! /usr/bin/env pythonfrom dynamic_reconfigure.parameter_generator_catkin import *PACKAGE="cfg_demo" # 功能包名,下面会用到gen = ParameterGenerator() # 创建参数生成器# 向参数生成器添加参数:
gen.add("int_param",int_t,0,"整型参数",50,0,100)
gen.add("double_param",double_t,0,"浮点参数",1.57,0,3.14)
gen.add("string_param",str_t,0,"字符串参数","hello world ")
gen.add("bool_param",bool_t,0,"bool参数",True)many_enum = gen.enum([gen.const("small",int_t,0,"a small size"),gen.const("mediun",int_t,1,"a medium size"),gen.const("big",int_t,2,"a big size")],"a car size set")gen.add("list_param",int_t,0,"列表参数",0,0,2, edit_method=many_enum)# 配置节点,并退出
# generate(pkgname,nodename,name)
# 注意:以上第三个参数name,需要和本配置文件名的命名部分相同,这里是“demo.cfg”则name为demo
exit(gen.generate(PACKAGE,"dr_node","demo"))
注意:在编写.cfg文件时,可以先把.cfg文件的后缀改为.py,方便编写配置,编写完之后将.py改回.cfg,再进行编译。
服务端配置
- 示例代码如下:
#! /usr/bin/env python
import rospy
from dynamic_reconfigure.server import Server
from cfg_demo.cfg import demoConfigdef cb(demoConfig,level): # 这个回调函数一定得有两个输入参数,level虽然暂时没用上但是得有,删去会报错rospy.loginfo("python 动态参数服务解析:%d,%.2f,%d,%s,%d",demoConfig.int_param,demoConfig.double_param,demoConfig.bool_param,demoConfig.string_param,demoConfig.list_param)return demoConfig # 这里一定得有一个returnif __name__ == "__main__":rospy.init_node("dr_p")server=Server(demoConfig,cb)# 创建一个服务器,cb会回调函数rospy.spin()
- 使用rosrun运行以上代码后,新开终端运行rqt,即可通过rqt工具实时修改参数值,且服务端节点不用重启即可更新参数配置。
往期内容
- ROS学习笔记1:基础知识
- ROS学习笔记2:话题通信
- ROS学习笔记3:服务通信与参数服务器
- ROS常用命令记录
- ROS学习笔记4:通信机制实操
- ROS学习笔记5:常用API和模块导入
- ROS学习笔记6:launch文件
- ROS学习笔记7:重名解决与名称设置
- ROS学习笔记8:TF坐标变换
- ROS学习笔记9:TF坐标变换实操
- ROS学习笔记10:rosbag与rqt
- ROS学习笔记11:URDF
- ROS学习笔记12:机器人导航实现(理论)
- ROS学习笔记13:导航相关消息
- ROS学习笔记14:Action通信