我的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的终端如下:
输入以下指令:
设置软件源:
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
会输出以下信息:
这代表我们的master成功启动了。这个节点相当于一个总控制台,其它节点的运行都需要先启动roscore。
再打开另一个终端,输入以下指令:
1
rosrun turtlesim turtlesim_node
会看到一个小海龟出现在屏幕上:
它的图像可能会有区别,会随机展示一张小海龟的照片。
再打开第三个终端,输入:
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
hostname -I
这个命令会输出一个或多个IP地址,我们只需要第一个。它看起来应该像 172.20.145.132 这样的。请复制这个IP地址,我们下面会用到它。
第二步:配置环境变量并永久保存
我们将把这个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
运行以下命令,让这个新的配置立刻生效:
1
source ~/.bashrc
这样后再次运行roscore,就可以得到之前图示的结果了


