跳到主要内容

节点(Nodes)

在 ROS 2 中,节点( Node),是 ROS 2 中真正运行的程序单元。

比如机器人系统中可以有很多节点:

摄像头节点 负责读取摄像头图像
激光雷达节点 负责读取雷达数据
键盘控制节点 负责接收键盘输入
电机驱动节点 负责控制电机
导航节点 负责路径规划
语音识别节点 负责识别语音

ROS 2 节点之间常见通信方式有三种:

通信方式说明
Topic 话题发布/订阅,适合连续数据
Service 服务请求/响应,适合一次性任务
Action 动作长时间任务,可反馈、可取消

一、Python 节点流程

1. 创建工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

2. 创建 Python 包

ros2 pkg create demo_py --build-type ament_python --dependencies rclpy

3. 创建节点文件

进入包中的 Python 模块目录:

cd ~/ros2_ws/src/demo_py/demo_py
touch my_node.py

编辑 my_node.py

import rclpy
from rclpy.node import Node

class MyNode(Node):
def __init__(self):
super().__init__('my_node')
self.get_logger().info('Python 节点启动成功')

def main():
rclpy.init()
node = MyNode()
rclpy.spin(node)
rclpy.shutdown()

if __name__ == '__main__':
main()

4.修改 setup.py

打开:

~/ros2_ws/src/demo_py/setup.py

找到:

entry_points={
'console_scripts': [
],
},

改成:

entry_points={
'console_scripts': [
'my_node = demo_py.my_node:main',
],
},

含义:

my_node

ros2 run 使用的可执行名。

5. 编译

回到工作空间根目录:

cd ~/ros2_ws
colcon build

建议调试时使用:

colcon build --symlink-install #--symlink-install表示安装时尽量使用符号链接,而不是直接复制文件。

6. 加载环境

source install/setup.bash

7. 运行节点

ros2 run demo_py my_node

看到类似输出:

[INFO] [my_node]: Python 节点启动成功

8. 查看节点

新开一个终端,先加载环境:

source ~/ros2_ws/install/setup.bash

查看节点:

ros2 node list

输出:

/my_node

查看节点信息:

ros2 node info /my_node

二、C++ 节点流程

1. 创建工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

2. 创建 C++ 包

ros2 pkg create demo_cpp --build-type ament_cmake --dependencies rclcpp

3. 创建节点文件

cd ~/ros2_ws/src/demo_cpp/src
touch my_node.cpp

编辑 my_node.cpp

#include "rclcpp/rclcpp.hpp"

class MyNode : public rclcpp::Node
{
public:
MyNode() : Node("my_node")
{
RCLCPP_INFO(this->get_logger(), "C++ 节点启动成功");
}
};

int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
auto node = std::make_shared<MyNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}

4. 修改 CMakeLists.txt

打开:

~/ros2_ws/src/demo_cpp/CMakeLists.txt

添加:

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

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

一般放在:

find_package(rclcpp REQUIRED)

后面,ament_package() 前面。

5. 编译

cd ~/ros2_ws
colcon build

或只编译这个包:

colcon build --packages-select demo_cpp

6. 加载环境

source install/setup.bash

7. 运行节点

ros2 run demo_cpp my_node

看到:

[INFO] [my_node]: C++ 节点启动成功

8. 查看节点

新开一个终端:

source ~/ros2_ws/install/setup.bash
ros2 node list

输出:

/my_node

最简记忆版

Python 节点

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
ros2 pkg create demo_py --build-type ament_python --dependencies rclpy
cd demo_py/demo_py
touch my_node.py

写节点代码后,修改:

setup.py

添加:

'my_node = demo_py.my_node:main',

然后:

cd ~/ros2_ws
colcon build --symlink-install
source install/setup.bash
ros2 run demo_py my_node

C++ 节点

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
ros2 pkg create demo_cpp --build-type ament_cmake --dependencies rclcpp
cd demo_cpp/src
touch my_node.cpp

写节点代码后,修改:

CMakeLists.txt

添加:

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

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

然后:

cd ~/ros2_ws
colcon build
source install/setup.bash
ros2 run demo_cpp my_node
查看节点列表ros2 node list
查看节点详情ros2 node info /节点名
运行时改节点名--ros-args -r __node:=新名字
加命名空间--ros-args -r __ns:=/命名空间
查看帮助ros2 node --help