📜  创建 python 包 ros 2 - Python (1)

📅  最后修改于: 2023-12-03 15:36:52.620000             🧑  作者: Mango

创建 python 包 ros 2 - Python

在 ROS 2 中,Python 包的创建需要遵循一些步骤和约定。这些步骤包括创建一个工作区(workspace)、一个包(package)、一个节点(node)等。本文将详细介绍如何创建一个 Python 包。

步骤:
  1. 创建 ROS 2 工作区(workspace)

    在终端中输入以下命令创建工作区:

    mkdir -p ~/ros2_ws/src
    cd ~/ros2_ws/
    colcon build
    
  2. 创建 ROS 2 包(package)

    在工作区的 src 目录下创建一个新的 ROS 2 包:

    cd ~/ros2_ws/src
    ros2 pkg create --build-type ament_python my_package
    

    其中,my_package 是您的包名称。这将在 ~/ros2_ws/src 目录下创建一个名为 my_package 的文件夹,并且包含如下文件:

    my_package/
        package.xml
        setup.py
        my_package/
            __init__.py
            main.py
    

    package.xmlsetup.py 是包元数据和构建规则(build rules),my_package/__init__.py 是导入 my_package 的默认模块,my_package/main.py 是示例节点文件。

    您可以根据需要自定义 package.xml 文件中的信息以及其他配置。

  3. 修改 my_package/main.py

    您可以根据需要创建一个节点(node),并在其 main 函数中添加所需的代码。例如,以下示例创建一个节点并发布 ROS 2 消息:

    import rclpy
    from std_msgs.msg import String
    
    def main(args=None):
        rclpy.init(args=args)
    
        node = rclpy.create_node('my_node')
    
        publisher = node.create_publisher(String, 'my_topic')
        msg = String()
        msg.data = 'Hello, ROS 2!'
    
        while rclpy.ok():
            publisher.publish(msg)
            node.get_logger().info('Published: "%s"' % msg.data)
            rclpy.spin_once(node)
    
        node.destroy_node()
        rclpy.shutdown()
    

    注意,为了发布标准消息(如 std_msgs/String),您需要根据需要导入相应的消息类型。

  4. 编写 setup.py 文件

    setup.py 文件规定了 Python 包构建的规则。以下是一个示例:

    from setuptools import setup
    
    package_name = 'my_package'
    
    setup(
        name=package_name,
        version='0.0.0',
        packages=[package_name],
        install_requires=[
            'setuptools',
            'numpy',
            'rospkg',
            'setuptools_scm'
        ],
        zip_safe=True,
        author='Your Name',
        author_email='you@example.com',
        maintainer='Your Name',
        maintainer_email='you@example.com',
        keywords=['ROS'],
        classifiers=[
            'Intended Audience :: Developers',
            'License :: OSI Approved :: Apache Software License',
            'Programming Language :: Python',
            'Programming Language :: Python :: 3',
            'Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator'
        ],
        description='A package for ROS 2',
        license='Apache License, Version 2.0',
        tests_require=['pytest'],
        entry_points={
            'console_scripts': [
                'my_node = my_package.main:main'
            ],
        },
    )
    

    在此示例中,my_package 是包名称。您需要根据实际情况自定义其他信息。

  5. 测试

    您可以使用以下命令构建并安装您的包:

    cd ~/ros2_ws/
    colcon build --packages-select my_package
    source install/setup.bash
    

    然后,您可以使用以下命令运行您的节点:

    ros2 run my_package my_node
    
  6. 发布和分享您的包

    要发布您的包,您可以将其上传到 ROS 包索引(ROS packages index)。有关如何执行此操作的详细信息,请参见 ROS 包索引文档。

    您可以在 ROS 2 社区中分享您的包,并从其他人的包中受益。

结论

通过遵循上述步骤,您可以轻松地创建和发布 ROS 2 包。始终记住最佳实践和约定,并使您的包易于维护和共享。

参考
  1. ROS 2 Python 官方文档:https://docs.ros.org/en/foxy/Tutorials/Writing-A-Simple-Py-Publisher-And-Subscriber.html
  2. ROS 包索引文档:https://index.ros.org/doc/ros2/Tutorials/Rosbag/Recording-And-Playing-Back-Data/