ROS 2 节点介绍与实现(Python & C++)

ROS 2 节点介绍与实现(Python & C++)

1. 什么是 ROS 2 节点?

在 ROS 2 中,节点(Node) 是程序中执行特定任务的最小单元。

  • 每个节点一般只做一件事,例如:
    • 传感器数据采集
    • 电机控制
    • 数据处理与发布
  • 多个节点之间通过 话题(Topic)服务(Service)动作(Action)参数(Parameter) 进行通信。

2. 节点生命周期

典型流程:

  1. 初始化 ROS 2 环境
  2. 创建节点对象并命名
  3. 执行节点逻辑(发布、订阅等)
  4. 保持运行(事件循环)
  5. 程序退出时销毁节点

3. 创建功能包

3.1 创建 Python 功能包

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 my_first_node_py

3.2 创建 C++ 功能包

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake --license Apache-2.0 my_first_node_cpp

4. Python 节点实现

4.1 文件结构

my_first_node_py/
  ├── package.xml
  ├── setup.py
  ├── my_first_node_py/
  │   └── simple_node.py
  └── resource/

4.2 代码示例

文件:my_first_node_py/my_first_node_py/simple_node.py

import rclpy
from rclpy.node import Node

class SimpleNode(Node):
    def __init__(self):
        super().__init__('simple_node_py')
        self.get_logger().info('Python 简单节点已启动!')

def main(args=None):
    rclpy.init(args=args)
    node = SimpleNode()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

4.3 修改 setup.py

entry_points={
    'console_scripts': [
        'simple_node = my_first_node_py.simple_node:main'
    ],
},

5. C++ 节点实现

5.1 文件结构

my_first_node_cpp/
  ├── package.xml
  ├── CMakeLists.txt
  └── src/
      └── simple_node.cpp

5.2 代码示例

文件:my_first_node_cpp/src/simple_node.cpp

#include "rclcpp/rclcpp.hpp"

class SimpleNode : public rclcpp::Node
{
public:
    SimpleNode() : Node("simple_node_cpp")
    {
        RCLCPP_INFO(this->get_logger(), "C++ 简单节点已启动!");
    }
};

int main(int argc, char * argv[])
{
    rclcpp::init(argc, argv);
    rclcpp::spin(std::make_shared());
    rclcpp::shutdown();
    return 0;
}

5.3 修改 CMakeLists.txt

add_executableament_target_dependenciesinstall 中添加:

add_executable(simple_node src/simple_node.cpp)
ament_target_dependencies(simple_node rclcpp)

install(TARGETS
  simple_node
  DESTINATION lib/${PROJECT_NAME}
)

6. 编译与运行

6.1 编译

cd ~/ros2_ws
colcon build

6.2 运行 Python 节点

source install/setup.bash
ros2 run my_first_node_py simple_node

6.3 运行 C++ 节点

source install/setup.bash
ros2 run my_first_node_cpp simple_node

你可能感兴趣的:(机器人,c++,python,python,c++,机器人)