【ROS2】快速创建一个包
1、创建包
创建使用python语言的包
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python my_package
如果希望创建包时也创建节点
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python --node-name my_node my_package
2、创建节点
import rclpy
from rclpy.node import Node
from std_msgs.msg import Stringclass MyNode(Node):def __init__(self):super().__init__('my_node')self.publisher_ = self.create_publisher(String, 'topic', 10)self.timer = self.create_timer(0.5, self.publish_message)def publish_message(self):msg = String()msg.data = f"Hello ROS2 at {self.get_clock().now()}"self.publisher_.publish(msg)self.get_logger().info(f"Published: {msg.data}")def main(args=None):rclpy.init(args=args)node = MyNode()rclpy.spin(node)rclpy.shutdown()if __name__ == '__main__':main()
3、创建目录结构
创建需要的目录结构,示例如下:
ros2_ws/src/robot_arm/
├── config/ # 配置文件(如 YAML 参数、控制器配置)
├── launch/ # Launch 文件(.launch.py 或 .xml)
├── rviz/ # RViz 配置文件(.rviz)
├── urdf/ # URDF/XACRO 机器人模型文件
├── robot_arm/ # Python 模块目录(核心代码)
│ ├── __init__.py
│ └── robot_arm.py # 主节点
├── package.xml
├── setup.py
└── ... # 其他默认文件
创建文件夹
cd ~/ros_ws/src/my_package/
mkdir my_folder
4、配置包依赖与入口点
修改package.xml
:添加依赖项(如rclpy
、std_msgs
):
<exec_depend>rclpy</exec_depend>
<exec_depend>std_msgs</exec_depend>
配置setup.py
:
from setuptools import find_packages, setup
import os
from glob import globpackage_name = 'robot_arm'setup(name=package_name,version='0.0.0',packages=find_packages(exclude=['test']),data_files=[# 安装到 share 目录下的资源文件(ROS 2 推荐方式)('share/ament_index/resource_index/packages', ['resource/' + package_name]),('share/' + package_name, ['package.xml']),(os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),(os.path.join('share', package_name, 'urdf'), glob('urdf/*.xacro')),(os.path.join('share', package_name, 'urdf'), glob('urdf/*.urdf')),(os.path.join('share', package_name, 'rviz'), glob('rviz/*.rviz')),(os.path.join('share', package_name, 'meshes'), glob('meshes/*.stl') + glob('meshes/*.STL')),],install_requires=['setuptools'],zip_safe=False, # 禁用 ZIP 安装maintainer='yourname',maintainer_email='yourname@todo.todo',description='ROS 2 package for robot arm control',license='Apache License 2.0', # 建议明确许可证tests_require=['pytest'],entry_points={'console_scripts': [# 注册 Python 节点'my_node = my_package.my_node:main', # 映射节点到可执行命令'robot_arm_node = robot_arm.robot_arm_node:main',],},
)
5、编译与运行
编译包
cd ~/ros2_ws
colcon build --packages-select my_package
加载环境
source install/setup.bash
运行
ros2 run my_package my_node