ros笔记05--从零体验ros2中参数的使用

介绍

ROS2中的参数是单个节点相关联的,当我们新建一个节点的时候,通常需要在启动文件中为该节点添加参数。通过配置参数,我们在启动节点的时候可以无需更改节点代码。
通过本文可以快速了解ros2中的参数相关功能,从零在python类中创建ros2参数,并在启动文件中设置该参数。

创建步骤

体验官方案例

  1. 运行节点
    $ ros2 run turtlesim turtlesim_node
    $ ros2 run turtlesim turtle_teleop_key
    
  2. 通过 param list 查看节点的参数
    /teleop_turtle:
      qos_overrides./parameter_events.publisher.depth
      qos_overrides./parameter_events.publisher.durability
      qos_overrides./parameter_events.publisher.history
      qos_overrides./parameter_events.publisher.reliability
      scale_angular
      scale_linear
      start_type_description_service
      use_sim_time
    /turtlesim:
      background_b
      background_g
      background_r
      holonomic
      qos_overrides./parameter_events.publisher.depth
      qos_overrides./parameter_events.publisher.durability
      qos_overrides./parameter_events.publisher.history
      qos_overrides./parameter_events.publisher.reliability
      start_type_description_service
      use_sim_time
    
    从结果可以参考背景色的 r g b可以通过参数来设置。
  3. 获取、设置参数
    $ ros2 param get /turtlesim background_g
    Integer value is: 86
    
    $ ros2 param set /turtlesim background_g 150
    Set parameter successful
    
    background_g=86background_g=150
    在这里插入图片描述在这里插入图片描述
  4. 保存、加载节点参数
    保存参数:
    $ ros2 param dump /turtlesim > turtlesim.yaml
    加载参数:
    $ ros2 param load /turtlesim turtlesim.yaml
    

基于python开发参数案例

  1. 创建python_parameters包
    继续前几篇ros2博文,当前工作目录依旧为dev_ws
    $ cd dev_ws/src
    $ ros2 pkg create --build-type ament_python --license Apache-2.0 python_parameters --dependencies rclpy
    
    注意: 此处使用了 --dependencies rclpy ,因此不需要在 package.xml 中单独增加依赖
    
  2. 在dev_ws/src/python_parameters/python_parameters中新增参数节点python文件
    vim python_parameters_node
    import rclpy
    import rclpy.node
    
    class MinimalParam(rclpy.node.Node):
        def __init__(self):
            super().__init__('minimal_param_node')
    
            self.declare_parameter('my_parameter', 'world')
    
            self.timer = self.create_timer(1, self.timer_callback)
    
        def timer_callback(self):
            my_param = self.get_parameter('my_parameter').get_parameter_value().string_value
    
            self.get_logger().info('Hello %s!' % my_param)
    
            my_new_param = rclpy.parameter.Parameter(
                'my_parameter',
                rclpy.Parameter.Type.STRING,
                'world'
            )
            all_new_parameters = [my_new_param]
            self.set_parameters(all_new_parameters)
    
    def main():
        rclpy.init()
        node = MinimalParam()
        rclpy.spin(node)
    
    if __name__ == '__main__':
        main()
    
  3. 在 setup.py中新增 entry point
        entry_points={
            'console_scripts': [
                'minimal_param_node = python_parameters.python_parameters_node:main',
            ],
        },
    
  4. 在dev_ws/src/python_parameters/launch 中新增节点启动python文件
    vim python_parameters_launch.py
    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(
                package='python_parameters',
                executable='minimal_param_node',
                name='custom_minimal_param_node',
                output='screen',
                emulate_tty=True,
                parameters=[
                    {'my_parameter': 'earth'}
                ]
            )
        ])
    
    在 setup.py 中 data_files 新增如下内容,使其能够包括所有的启动文件
    import os
    from glob import glob
    # ...
    setup(
      # ...
      data_files=[
          # ...
          (os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*')),
        ]
      )
    
  5. 构建 & 运行
    构建
    $ cd dev_ws
    $ colcon build --packages-select python_parameters
    运行
    $ source install/setup.bash
    $ ros2 run python_parameters minimal_param_node
    $ ros2 param set /minimal_param_node my_parameter earth
    也可以通过launch脚本启动
    $ ros2 launch python_parameters python_parameters_launch.py
    
    输出结果:
    默认输出 Hello world, 设置my_parameter earth后输出 Hello earth ,随后定时任务又将其更新为 Hello world,符合预期
    在这里插入图片描述
    launch 脚本启动:
    在这里插入图片描述

注意事项

  1. 待添加

说明

软件版本
ubuntu24.04 Desktop
ros2 jazzy
python 3.12.4(conda)
参考文档
ros官方文档 Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python
ros官方文档 jazzy/Concepts/Basic/About-Parameters

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值