ROS2- 构建-通信-域ID-中间件ZMQ-06

1.构建系统与构建工具

构建系统:只针对一个单独的包进行构建,例如:CMake、Python setuptools、ament_cmake、catkin
构建工具:根据功能包的依赖关系 完成一系列功能包的构建,例如:colcon、catkin_make、catkin_make_isolated

colcon作为构建工具,通过调用CMake、Python setuptools完成C++ python包的构建。

CMake 是一个跨平台构建系统生成器。项目使用独立于平台的文件指定其生成过程。用户通过使用CMake为其平台上的本机工具生成构建系统来构建项目。
通常用法有:cmake、make、make intsall

python setuptools是Python包的打包常用工具。Python 包使用文件来描述依赖项,以及如何构建和安装内容。在ROS2中,功能包可以是“普通”Python包,而在ROS1中,任何Python功能都是从CMake文件触发setup.py进行打包。
通常的用法有:python setup.py

2.ROS2节点发现与多机通信

ROS2用于通讯的默认中间件是DDS,
DDS中,不同逻辑网络共享物理网络的主要机制称为域(Domain) ID
同一域上的ROS 2节点可以自由地相互发现并发送消息
不同域上的ROS 2节点则不能。

所有ROS 2节点默认使用域ID为0
为了避免在同一网络上运行ROS 2的不同计算机组之间互相干扰,应为每组设置不同的域ID。

选择域ID(短)
选择一个介于0和101之间的安全的域ID (包括0和101)
选择域ID(长)
这意味着可以分配的最高域账号是232,而可以分配的最低域账号是0。
UDP端口是 无符号16位整型 。因此可以分配的最大端口号是65535。

域账号的选择
避免使用临时端口

计算机上运行的每个ROS 2进程,将创建一个DDS 参与者(participant)
每个DDS参与者占用计算机上的两个端口,因此在一台计算机上运行120个以上的ROS 2进程可能会溢出到其他域ID或临时端口。

域ID到UDP端口号计算器
http://dev.ros2.fishros.com/doc/Concepts/About-Domain-ID.html#domain-id-to-udp-port-calculator

3. 通信

通信的目的是在计算机系统中实现不同组件、进程或设备之间的信息和数据传递,

基于TCP/UDP的网络通信方式
使用ping命令进行基于UDP的网络通信:
ping 192.168.0.1
使用nc命令进行基于TCP的网络通信:
nc -l 1234
echo "Hello, TCP!" | nc 127.0.0.1 1234

基于共享内存的IPC方式
在同一计算机系统内的不同进程之间进行通信

autel@ubuntu-16:~$ ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 8 autel 600 16384 1 dest
0x00000000 11 autel 600 3145728 2 dest
0x00000000 34 autel 600 524288 2 dest
0x00000000 41 autel 600 524288 2 dest
0x00000000 44 autel 600 4194304 2 dest
0x00000000 45 autel 600 524288 2 dest
0x00000000 32814 autel 600 4194304 2 dest
0x00000000 48 autel 600 4194304 2 dest
0x00000000 51 autel 600 4194304 2 dest
0x00000000 55 autel 600 4194304 2 dest
0x00000000 58 autel 600 4194304 2 dest
0x00000000 61 autel 600 4194304 2 dest

ipcrm -m 删除不再需要的共享内存段

4.通信中间件ZMQ

FastDDS是ROS2的通信中间件
FastDDS比ZeroMQ性能好,但是ZeroMQ非常的轻量,小巧,占用资源少,Zero Message Queue,零消息队列。
ZeroMQ提供了各种(如进程内、进程间、TCP 和多播)消息传输的套接字

PyZmq官网
pyzmq也提供了类似于订阅发布的方式来传递消息

如果需要去掉ROS,需要找一个高效的消息中间件,ZMQ应该比较适合你,
当然也可以根据机器人的处理器和性能试试ROS2的FastDDS

posted @ 2025-06-09 16:58  jack-chen666  阅读(145)  评论(0)    收藏  举报