文章

我的ROS学习之旅

我的ROS学习之旅

(注意:本站所有博客均是记录本人学习过程中的理解,可能存在错误和不完善之处,请仔细甄别)

ROS1 理解和安装

我没有去找ROS的起源和历史,而是在简单看了一些课程后直接去安装了。ROS意为机器人操作系统,我们使用它主要是与一些机器人相关零部件的产品交互。它和我们计算机的操作系统一样,主要是方便我们管理进程的运行(ROS下称作节点)。学会了它以后我们就学会了如何在我们的机器人上部署代码,连接我们的机械臂、摄像头等设备。现存的ROS系统有ROS1和ROS2,前者的生态更为完善,但都有向ROS2更新的态势。笔者没接触过ROS2,也是为了和实验室的设备接轨,先学ROS1。

下面介绍ROS1的安装:

这里按 Ubuntu 环境来安装 ROS1。对于 Windows 用户,可以使用 WSL2 中的 Ubuntu,或者单独准备 Ubuntu 虚拟机。我使用的版本是Ubuntu 20.04。注意我最开始安装在Ubuntu 24.04上,但是发现版本不对。最好是使用Ubuntu 20.xx版本,比较稳定。Ubuntu的安装不再赘述。

我们打开Ubuntu 20.04的终端如下:

ubuntu1

输入以下指令:

设置软件源:

1
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

添加密钥:

1
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新软件包:

1
sudo apt update

接下来是安装指令(Desktop-Full version):

1
sudo apt install ros-noetic-desktop-full

设置环境变量:

1
2
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

此外,我们还可以安装一些额外的工具,用来管理工作空间:

1
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

还需要初始化 rosdep。rosdep 主要用来解析并安装 ROS 软件包依赖的系统组件,后面编译和使用第三方 ROS 包时经常会用到它。

1
2
sudo rosdep init
rosdep update

这一步如果因为网络问题而失败或者出现版本问题,可以改用国内的小鱼ROS:

1
2
3
4
5
6
7
# 安装 pip3 以便管理 Python 3 包
sudo apt install python3-pip
# 安装国内版 rosdepc
sudo pip3 install rosdepc
# 初始化并更新
sudo rosdepc init
rosdepc update

至此就安装完成了。

安装验证和第一个ROS节点

ROS1 内置了一个小海龟节点,我们一般用它来验证安装是否成功。

打开一个Ubuntu终端,输入

1
roscore

会输出以下信息:

roscore

这代表我们的master成功启动了。这个节点相当于一个总控制台,其它节点的运行都需要先启动roscore。

再打开另一个终端,输入以下指令:

1
rosrun turtlesim turtlesim_node

会看到一个小海龟出现在屏幕上:

turtle

它的图像可能会有区别,会随机展示一张小海龟的照片。

再打开第三个终端,输入:

1
rosrun turtlesim turtle_teleop_key

这个是用键盘控制小海龟的节点。打开后,我们就可以用键盘上的方向键控制小海龟的移动了。

debug

我在安装后启动roscore后遇到了如下问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
lori@LAPTOP-ETP28CAA:/mnt/c/Users/lenovo$ roscore
... logging to /home/lori/.ros/log/75c13160-78d6-11f0-8df8-e02e0be00646/roslaunch-LAPTOP-ETP28CAA-43.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

RLException: Unable to contact my own server at [http://localhost:33593/].
This usually means that the network is not configured properly.

A common cause is that the machine cannot connect to itself.  Please check
for errors by running:

codeCode

```
ping localhost
```

For more tips, please see

codeCode

```
http://wiki.ros.org/ROS/NetworkSetup
```

The traceback for the exception was written to the log file

这个是WSL上ROS网络问题。解决方案是放弃模糊的localhost,明确告诉ROS使用WSL自己的IP地址。具体流程如下:

第一步:找到你的WSL的IP地址

  1. 在崭新的终端里,输入以下命令:

    1
    
    hostname -I
    
  2. 这个命令会输出一个或多个IP地址,我们只需要第一个。它看起来应该像 172.20.145.132 这样的。请复制这个IP地址,我们下面会用到它。

第二步:配置环境变量并永久保存

  1. 我们将把这个IP地址设置成ROS的专用网络地址。**请把下面命令中的 替换成你上一步得到的真实IP地址。**

    1
    2
    
    echo "export ROS_MASTER_URI=http://<YOUR_WSL_IP_ADDRESS>:11311" >> ~/.bashrc
    echo "export ROS_IP=<YOUR_WSL_IP_ADDRESS>" >> ~/.bashrc
    
    • 例如,如果你的IP是 172.20.145.132,你应该运行:

      1
      2
      
      echo "export ROS_MASTER_URI=http://172.20.145.132:11311" >> ~/.bashrc
      echo "export ROS_IP=172.20.145.132" >> ~/.bashrc
      
  2. 运行以下命令,让这个新的配置立刻生效:

    1
    
    source ~/.bashrc
    

这样后再次运行roscore,就可以得到之前图示的结果了

本文由作者按照 CC BY 4.0 进行授权

热门标签