ROS 12:引入ROS2
一、认识ROS2
ROS在需求量增加之后,需要实现:
- 多机器人系统
- 跨平台
- 实时性
- 网络连接
- 产品化
- 项目管理
ROS2因此出现了。
ROS2有以下几个特点:
ROS1 只支持Linux和MacOS,而 ROS2 支持Linux/Windows/MacOS/RTOS
架构的颠覆:
ROS1的通讯基于TCPROS/UDPROS,所有节点都要经过ROS Master
ROS2使用基于DDS的Discovery机制,自发现后建立稳定的链接,实现真正的分布式架构
- ROS DDS由ROS Middleware中间件定义接口,使用不同厂商的DDS时,只需安装另一个DDS,代码无需再修改
节点模型不同
ROS1:publish/subscribe
ROS2:discovery
进程模型不同
ROS1:Nodelet
ROS2:Intra-process
编译系统升级
ROS1使用rosbuild,catkin管理项目
ROS2使用升级版的ament,colcon
ROS2 支持实时控制
ROS2 广泛使用C++11,和Python3.5以上
在 ROS2 上通过ros_bridge和 ROS1 进行通信
ROS2 使用托管启动:用户可以指定节点启动顺序
ROS2 取消了 nodelet 的概念,支持多节点初始化
ROS2 launch文件使用 python 编写,相比于 xml 拓展了功能性
……
二、安装
以下是按照Ubuntu22.04版本安装
ROS2在Ubuntu只支持22.04与20.04,其中20.04需要源码安装
设置编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
添加源
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
如果添加源出现
Failed to connect to raw.githubusercontent.com
的报错,按照以下步骤即可:登录网站:https://www.ipaddress.com
在打开的网站中将“raw.githubusercontent.com”复制到查询栏中进行搜索,可以看到域名对应的IP地址信息
sudo chmod 777 /etc/hosts
用编辑器打开这个文件,在文末添加你查询到的结果,比如:
151.101.84.133 raw.githubusercontent.com
保存退出,改回权限:
sudo chmod 644 /etc/hosts
即可正常使用
安装
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
环境变量
source /opt/ros/humble/setup.bash
echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc
测试:
测试1
创建一个发布者:
ros2 run demo_nodes_cpp talker
再创建一个监听者:
ros2 run demo_nodes_py listener
看到两个中断可以正常打印数据即可
测试2
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
观察到可以正常运行即可