ROS2 VS ROS1
系统架构
比较明显的变化:
移除了Master节点管理控制,不再需要roscore了,ROS1Master节点管理器崩溃,系统就会无法订阅和发布
增加了DDS系统,网络安全,实时性提高
ROS1原来基于TCP/UDP通信系统,频繁诟病于延迟、丢数据、无法加密等问题
跨平台
DDS系统
DDS(Data Distribution Service, 数据分发服务)是物联网中广泛应用的一种通信协议,是一个国际标准
https://zhuanlan.zhihu.com/p/192981171
因此DDS系统并不唯一,不同厂家可以根据需要实现不同的DDS系统
例如 OpenSplice、FastRTPS等
但不同DDS厂家设计的DDS软件接口并不相同
为了解决这个问题,ROS2设计了一个ROS Middleware,简称RMW,如果DDS厂家想要接入ROS2系统,就需要自行编写一下适配的接口,将自家DDS移植过来。
在开发和使用过程中,我们不会涉及DDS系统,上层软件
但需要注意DDS一个通用特性QoS(质量服务策略)
QoS是一种网络传输策略,应用程序指定所需要的网络传输质量行为,QoS服务实现这种行为要求,尽可能地满足客户对通信质量的需求,可以理解为数据提供者和接收者之间的合约
我们在开发设计发布者以及使用一些命令行时,会遇到Qos的配置,比如缓冲队列长度,策略等
ros2 topic echo /xxx --qos-reliability reliable
实际使用过程中,我们只需要安装相应的包,声明我们需要使用的rmw就可以切换不同的DDS
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
核心概念
与ROS1类似,不再过多赘述
https://innovusioncn.atlassian.net/l/cp/XuvXpq5S
https://innovusioncn.atlassian.net/l/cp/w0up4kn0
安装
一键安装(推荐)
wget http://fishros.com/install -O fishros && . fishros
// 支持noetic(ROS1) foxy(ROS2) galactic(ROS2) rolling(ROS2) iron(ROS2) humble(ROS2)
官网教程安装
https://docs.ros.org/
使用
设置环境变量
source /opt/ros/<ros_version>/setup.bash
ROS2常用命令
//可视化工具
rviz2
ros2 pkg list //查看系统中功能包列表
ros2 pkg executables <package_name> //查看包内可执行文件列表
ros2 pkg executables innovusion
ros2 run <package_name> <node_name> //节点运行
ros2 run innovusion publisher --ros-args -p device_ip:=172.168.1.10 -p port:=8010 -p udp_port:=8010
ros2 run rqt_reconfigure rqt_reconfigure //rqt参数配置工具
ros2 node list //查看当前域活动的节点列表
ros2 node info <node_name> //查看节点详细信息、包括订阅、发布的消息,开启的服务和动作等
ros2 topic list //列出可使用的主题列表
ros2 topic info <topic_name> //显示主题消息类型,订阅者数量,发布者数量等
ros2 topic hz <topic_name> //显示主题的发布频率
ros2 topic bw <topic_name> //显示主题的带宽
ros2 topic delay <topic_name> //通过header时间戳计算消息延迟
ros2 topic echo <topic_name> //控制台显示主题消息 --field header.stamp --qos-reliability reliable
ros2 topic pub <topic_name> <message_type> <message_content>
ros2 launch <package_name> <launchfile>
ros2 launch innovusion ivu_pc2.py device_ip:=172.168.1.10 // 通过launch文件运行
ros2 bag info <bag_file> //显示bag包信息
ros2 bag record <topic_name> //录制指定topic, 多个topic用空格隔开
ros2 bag record <topic_name> -o <floder_name> //录制topic, 到一个文件夹中存储
ros2 bag record -a //录制当前所有的topic, 以时间戳命名文件夹
ros2 bag play <bag_file> //回放bag_file