☰
ROS2机器人开发入门|第3课:ROS2核心概念:Node(节点)
2026/10/24 6:35:55 网站建设 项目流程

1. 前言

上一课我们介绍了ROS2的版本信息,了解到Humble是过去几年和当前的主流版本,存量项目比较大,同时也了解到Jazzy是官方当前主推的版本,在实际应用中,行业里的新项目已采用Jazzy版本。可以预见Jazzy是今后几年主流的版本,基于此,后面的课程我们以Jazzy为基础进行讲解。

2. ROS2五大核心概念

ROS2系统由多个节点组成,节点之间通过不同通信方式交换数据。

2.1准备工作:配置环境

2.1.1执行Source命令,目的是加载ROS2系统级别的环境变量

source/opt/ros/jazzy/setup.bash

2.1.2将source命令加到shell启动脚本,可省去每次执行上面的SOURCE操作

echo"source /opt/ros/jazzy/setup.bash">>~/.bashrc
2.1.3检查环境变量
printenv|grep-iROS

2.2Node 节点

ROS 中的每个节点都应负责单一的模块化功能,例如:控制车轮电机或发布来自激光测距仪的传感器数据。一个节点本质上就是一个进程。每个节点都可以通过主题、服务、动作或参数与其他节点发送和接收数据。
打个比方:整个 ROS2 机器人系统像一个公司,每个节点就是一个员工,员工各司其职,通过消息互相沟通,而不是所有人挤在一个工位干活。


上图中展示了3个节点之间发送和接收数据的方式,通过Service和Topic进行通信。
一个完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中,一个可执行文件(C++ 程序、Python 程序等)可以包含一个或多个节点。

2.2.1Node 相关命令

  • ros2 run

语法:

ros2 run<package_name><executable_name>[--ros-args 节点参数]

我们以官方小海龟为例,启动turtlesim 节点

ros2 run turtlesim turtlesim_node

这里,软件包名称是turtlesim,可执行文件名是turtlesim_node

  • ros2 node list
    新打开一个终端,查看节点列表
ros2nodelist


这里turtlesim就是节点名称

  • 查看节点信息:
    语法:
ros2nodeinfo<node_name>
ros2nodeinfo /turtlesim


ros2 node info返回订阅者、发布者、服务和操作的列表,即与该节点交互的 ROS 图连接。

  • 节点重映射:–ros-args --remap __node:=new_node_name
    重映射 = 运行时 “改名字、改地址”,不改源代码。相当于再“复制”一个具有相同属性的节点,只是名字或所属空间不同,而不用改源码。
ros2 run turtlesim turtlesim_node --ros-args--remap__node:=my_turtle


–remap可以简写为:-r,即:–remap==-r
-r __node:=xxx 用来修改节点名称,即上面的:–remap __node:=my_turtle
还可以修改所属命令空间:-r __ns:=/xxx

再次查看节点列表,新打开一个终端:

重映射的用途:
如果不做重映射,想要改节点名、改话题名,你只能打开 cpp/python 代码、修改字符串、重新 colcon 编译;
remap 是启动时动态修改,运行一次可以换一套名字。
应用场景 1:同一台机器,同时启动多个相同节点
比如:机器人上有两个一模一样的雷达驱动节点,驱动两个同型号激光雷达。驱动包是同一个 pkg、同一个可执行文件,代码里节点名默认叫lidar_driver。直接启动第二个会报错:节点重名。

解决方案:remap 修改节点名,同时重映射话题:
# 雷达1ros2 run lidar_driver pkg_node --ros-args-r__node:=lidar_left-r/scan:=/scan_left# 雷达2ros2 run lidar_driver pkg_node --ros-args-r__node:=lidar_right-r/scan:=/scan_right

应用场景 2:多机器人集群(多机、多车)
两台机器人 robot1、robot2,硬件、软件包完全一样,底盘驱动、IMU、导航包都是同一套。
如果话题都是/cmd_vel、/odom,两台机器人的消息会混在一起,robot1 的速度指令会发给 robot2。

解决方案:使用命名空间重映射隔离:
# robot1底盘节点ros2 run chassis_driver driver_node --ros-args-r__ns:=/robot1# robot2底盘节点ros2 run chassis_driver driver_node --ros-args-r__ns:=/robot2

3.小结:

上面我们介绍了ROS2中节点的概念、基础命令行和一些应用场景,这些是节点的最基础的知识点,关于怎样创建节点我们在后面的课程中介绍。欢迎在欢迎在留言区发表意见。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询