官方指导地址:http://docs.ros.org/
笔者是2023年4月初开始学习ROS,本文为当时的过程记录。其他情况不在此文中表述。
上图是官方文档首页,秉持“要学就学新的”和“接受官方推荐” 原则。故选择Humble版本。
在安装指导说明中,Linux系统支持Ubuntu 22.04。为了轻量级学习该内容,避免对其他系统产生干扰,选择VMware虚拟机作为操作系统的载体。关于VMware和Ubuntu系统的安装有大量参考文档,本文不再记录。
完全按照官方指导进行操作,官方链接为:http://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
首先确保Ubuntu Universe存储库已启用:
sudo apt install software-properties-common
sudo add-apt-repository universe
接着增加ROS2 GPG Key:
sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
最后将仓库添加到sources list中:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
更新仓库:
sudo apt update
sudo apt upgrade
安装ROS(包括:ROS、RViz、demos、tutorials):
sudo apt install ros-humble-desktop
安装ROS-Base(通讯库、消息包、命令行工具等非图像化工具):
sudo apt install ros-humble-ros-base
安装开发工具(编译器和其他构建ROS包的工具):
sudo apt install ros-dev-tools
设置环境变量:
source /opt/ros/humble/setup.bash
echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc
上述操作完成后,重启系统后开始进行测试。
首先启动一个终端,打开一个C++ talker:
ros2 run demo_nodes_cpp talker
再启动一个终端,打开一个Python listener:
ros2 run demo_nodes_py listener
运行结果为:
至此,测试安装完成ROS2 Humble。
# 卸载ROS2
sudo apt remove ~nros-humble-* && sudo apt autoremove
# 移除仓库
sudo rm /etc/apt/sources.list.d/ros2.list
sudo apt update
sudo apt autoremove
# Consider upgrading for packages previously shadowed.
sudo apt upgrade
该部分内容参考:Configuring environment — ROS 2 Documentation: Humble documentation
主要是一些与环境变量相关的概念说明,可以作为了解内容(有特殊需求的时候也需要用到)。
ROS 2的核心工作空间称作底层,后续的本地工作空间称为覆盖层。当使用ROS 2进行开发时,通常会有多个工作空间处于活动状态。
工作空间的应用使得同一个系统可以安装不同版本的ROS 2,或者不同版本的package。
ROS_DOMAIN_ID
The ROS_DOMAIN_ID — ROS 2 Documentation: Humble documentation
ROS 2的通讯中间件使用的是DDS,DDS使不同逻辑网络共享物理网络的主要机制被称为域ID。
同一域上的ROS 2节点可以自由发现并相互发送消息,而不同域上的ROS 2节点则不能。默认情况下,所有ROS 2节点都使用域ID 0。为了避免在同一网络上运行ROS 2的不同计算机组之间的干扰,应为每个组设置不同的域ID。域ID可以选择一个 [0,101] 内的一个整数作为特定域ID。
例如,将主机的域ID设置为77,使用如下指令:
echo "export ROS_DOMAIN_ID=77" >> ~/.bashrc
则同一个局域网下的域ID为77的主机可以与该主机进行通讯。
5.3.ROS_LOCALHOST_ONLY
默认情况下,ROS 2通信不局限仅本地主机。ROS_LOCALHOST_ONLY环境变量允许将ROS 2通信限制为仅本地主机。这是针对有特定应用,避免外部系统干扰时设置的变量。
如果需要打开限制仅本地主机,使用如下指令:
echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc