ROS2 参数(Python)

实验目的:

        参数相关API函数使用;

        服务端实现对参数的增、查、改、删操作

1、创建工作空间

        请参考:ROS2 话题通信——自定义消息类型(Python)-CSDN博客

2、创建功能包

        创建服务功能包param_pkg,新建参数API使用节点param_api.py

cd text_ws/src/
ros2 pkg create param_pkg --build-type ament_python --dependencies rclpy --node-name param_api

3、编写param_api节点并测试

import rclpy #导入包
from rclpy.node import Node


class ParamNode(Node):
    def __init__(self):
        super().__init__("param_node")
        self.get_logger().info("参数API使用!")

        #创建参数
        p1 = rclpy.Parameter("car_name",value="tiger")
        p2 = rclpy.Parameter("widht",value=1.5)
        p3 = rclpy.Parameter("wheels",value=2)
        
        #解析参数
        self.get_logger().info("car_name = %s" % p1.value)
        self.get_logger().info("widht = %s" % p2.value)
        self.get_logger().info("wheels = %s" % p3.value)

        self.get_logger().info("key = %s" % p1.name)



def main():
    #初始化ROS2客户端
    rclpy.init()     

    #创建对象
    node = ParamNode()
          
    #释放资源
    rclpy.shutdown()   

if __name__ == '__main__':
    main()

        编译测试一下

cd ..
colcon build --packages-select param_pkg
source install/setup.bash 
ros2 run param_pkg param_api 

          测试成功

4、参数服务端和参数客户端实现

        新建param_server.py文件,并修改setup.py文件 

from setuptools import find_packages, setup

package_name = 'param_pkg'

setup(
    name=package_name,
    version='0.0.0',
    packages=find_packages(exclude=['test']),
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='saw',
    maintainer_email='saw@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'param_api = param_pkg.param_api:main',
            'param_server = param_pkg.param_server:main'
        ],
    },
)

        编写参数服务端

import rclpy #导入包
from rclpy.node import Node


class ParamServer(Node):
    def __init__(self):
        #如果需要删除参数,需要提前声明allow_undeclared_parameters
        super().__init__("param_server_node",allow_undeclared_parameters=True)
        self.get_logger().info("参数服务端")

    #增
    def declare_param(self):
        self.get_logger().info("------------------增-------------------")
        self.declare_parameter("car_name","tiger")
        self.declare_parameter("width",1.5)
        self.declare_parameter("wheels",5)


    #查
    def get_param(self):
        self.get_logger().info("------------------查-------------------")

        #获取指定参数
        car_name = self.get_parameter("car_name")
        self.get_logger().info("%s = %s "%(car_name.name,car_name.value))

        #获取多个参数
        params = self.get_parameters(["car_name","width","wheels"])
        for param in params:
            self.get_logger().info("%s ===== %s "%(param.name,param.value))

        #判断是否包含
        self.get_logger().info("是否包含 car_name : %d "%self.has_parameter("car_name"))
        self.get_logger().info("是否包含 height : %d "%self.has_parameter("height"))

    #改
    def update_param(self):
        self.get_logger().info("------------------改-------------------")
        self.set_parameters([rclpy.Parameter("car_name",value="pig")])
        car_name = self.get_parameter("car_name")
        self.get_logger().info("修改后 %s = %s "%(car_name.name,car_name.value))

    #删
    def del_param(self):
        self.get_logger().info("------------------删-------------------")
        self.undeclare_parameter("car_name")
        self.get_logger().info("删除后是否包含 car_name : %d "%self.has_parameter("car_name"))




def main():
    #初始化ROS2客户端
    rclpy.init()     

    #创建对象
    node = ParamServer()

    #增查改删
    node.declare_param()
    node.get_param()
    node.update_param()
    node.del_param()

    rclpy.spin(node)
          
    #释放资源
    rclpy.shutdown()   

if __name__ == '__main__':
    main()

        由于ROS2没有封装Python的参数相关类,所以这里不编写参数客户端

5、测试

         在终端编译并测试一下

colcon build --packages-select param_pkg
source install/setup.bash 
ros2 run param_pkg param_server 

        测试成功。 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值