ROS学习经历(7)——参数

文章介绍了ROS中参数的使用,包括如何声明和获取参数,通过修改回调函数的周期来动态调整程序行为。还提到了Action通信方式,但由于不常用,初期不作深入学习。在实践中,作者通过设置和获取参数`write_timer_period`来调整定时器的周期。文章末尾提到,虽然以Python编写便于理解,但C++在实际应用中能提供更好的性能,作者计划学习C++语法后继续ROS的通讯学习。
摘要由CSDN通过智能技术生成

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 参数的命令行测试

  1. 查看参数列表
ros2 param list
  1. 查看描述
ros2 param describe /wang2 novel_price
  1. 获取参数值
ros2 param get /wang2 novel_price
  1. 设置参数
ros2 param set /li4 write_timer_period 1

3. 总结

这里作者就学习了以ament_python形式来编写ROS,但在实际使用时,C++的编写使得机器人能够运行更快。但作者对C++不是很熟悉,先去学一手语法,再回来继续以C++的形式来继续学习ROS的通讯。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值