ROS2 基础概念 节点
- 1. Nodes
- 2. 重映射
- 3. 环境设置
- 3.1. ROS_DOMAIN_ID
- 3.2. ROS_LOCALHOST_ONLY
1. Nodes
每个节点应负责单个模块用途(例如,一个节点用于控制车轮电机,一个用于控制激光测距仪等)
可以通过话题、服务、操作或参数向其他节点发送和接收数据
启动海龟及其遥控节点:
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
现在查阅
ros2 node list
将看到两个活动节点的名称:/teleop_turtle
和 /turtlesim
2. 重映射
重映射允许将默认节点属性(如节点名称、话题名称、服务名称等)重新分配给自定义值
现在来对turtlesim_node
的重映射来更改默认海龟节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
现在将看到三个节点名称:/my_turtle
、/teleop_turtle
和 /turtlesim
3. 环境设置
可以使用以下命令正确查阅ROS2相关的环境变量:
printenv | grep -i ROS
可以看到
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=humble
3.1. ROS_DOMAIN_ID
正如其他地方所解释的,ROS2用于通信的默认中间件是DDS
在DDS中,使不同逻辑网络共享物理网络的主要机制称为域ID
同一域上的ROS2节点可以自由地发现并向彼此发送消息,而不同域上的ROS 2节点则不能
默认情况下,所有ROS2节点都使用域ID 0
为了避免同一网络上运行ROS 2的不同计算机组之间的干扰,应为每个组设置不同的域ID
echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
3.2. ROS_LOCALHOST_ONLY
默认情况下,ROS2通信不限于本地主机
ROS_LOCALHOST_ONLY
环境变量允许您将ROS 2通信仅限于本地主机
这意味着您的ROS 2系统及其主题、服务和操作对本地网络上的其他计算机不可见
例如在教室中,多个机器人可能会发布同一主题,从而导致奇怪的行为
可以使用以下命令设置环境变量:
echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc
谢谢