ROS学习经历(7)——参数
此章便是讲解参数的应用。除此之外还有Action,但这种通信方式,我们用的比较少,故初期不去学习。
1. 参数
参数是一个可以让我们动态修改的值,在接下来,我们通过l修改i4的小说发布时间来学习
1.1 参数的介绍
我们由class WriterNode(Node)
继承了rclpy.node.Node,所以获得了参数的能力:
函数名称 | 描述 |
---|---|
declare_parameter | 声明和初始化一个参数 |
get_parameter | 通过参数名字获得一个参数 |
我们只需要:1.声明参数;2,获取参数。便可以了
1.2 声明
修改__init__
函数,加入下行代码
# 声明参数,参数名字,默认值
self.declare_parameter("write_timer_period",5)
1.3 获取并设置参数
在timer的回调函数中,对其进行修改:
# 回调之后更新回调周期
timer_period = self.get_parameter('write_timer_period').get_parameter_value().integer_value
# 更新回调周期
self.timer.timer_period_ns = timer_period * (1000*1000*1000)
修改后的代码如下:
def timer_callback(self):
msg = String()
msg.data = '第%d回:潋滟湖 %d 次偶遇胡艳娘' % (self.i,self.i)
self.write.publish(msg) #将小说内容发布出去
self.get_logger().info('李四:我发布了艳娘传奇:"%s"' % msg.data) #打印一下发布的数据,供我们看
self.i += 1 #章节编号+1
# 回调之后更新回调周期
timer_period = self.get_parameter('write_timer_period').get_parameter_value().integer_value
# 更新回调周期
self.timer.timer_period_ns = timer_period * (1000*1000*1000)
最后为什么要用这种方式来更新回调函数,我也不太明白,如果知道的人在评论区讲一下,谢谢。
最后一个是将定时器更新,因为通过前面我们创建了定时器,而只改变timer_period并不能改变定时器的周期,需要对其参数进行修改。
2. 测试
2.1 编译与运行li4节点
colcon build --packages-select village_li
ros2 run village_li li4_node
2.2 参数的命令行测试
- 查看参数列表
ros2 param list
- 查看描述
ros2 param describe /wang2 novel_price
- 获取参数值
ros2 param get /wang2 novel_price
- 设置参数
ros2 param set /li4 write_timer_period 1
3. 总结
这里作者就学习了以ament_python形式来编写ROS,但在实际使用时,C++的编写使得机器人能够运行更快。但作者对C++不是很熟悉,先去学一手语法,再回来继续以C++的形式来继续学习ROS的通讯。