ROS1 环境搭建
主要介绍搭建 ROS1 Noetic 版本的环境。
- 建议以下操作基于 VNC 远程桌面或者连接显示器进行操作。
- ROS 环境是搭建在 Docker 容器中的,建议先安装和学习 Docker 的使用。
- Ubuntu 是 ROS 官方首选和主要支持的发行版,我们会基于 Docker 的 Ubuntu 镜像来搭建 ROS 环境。
拉取 Docker 镜像
使用 docker pull
命令拉取 Ubuntu20.04 的 Docker 镜像。
docker pull ubuntu:20.04
编写 Docker 脚本
使用脚本启动 Ubuntu20.04 的 Docker 容器。
您需要编写一个启动脚本 ros_noetic.sh
:
vi ros_noetic.sh
添加以下内容到 ros_noetic.sh
脚本内:
#!/bin/bash
xhost +
docker run -it \
--net=host \
--env="DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
ubuntu:20.04 /bin/bash
参数说明:
xhost +
: 允许 Docker 容器访问 X11 服务器-it
: 以交互模式运行容器--net=host
: 使用主机的网络栈--env="DISPLAY"
: 设置环境变量,用于显示 X11 图形界面--env="QT_X11_NO_MITSHM=1"
: 设置环境变量,用于 Qt 应用程序的显示-v /tmp/.X11-unix:/tmp/.X11-unix
: 挂载 X11 Unix 域套接字,用于显示 X11 图形界面ubuntu:20.04
: 使用 Ubuntu 20.04 镜像/bin/bash
: 在容器内启动 Bash shell
启动 Docker 容器
使用 bash
命令启动脚本。
bash ros_noetic.sh
安装 Noetic
编码环境检查
确保安装 Noetic 的环境支持 UTF-8 编码。
locale
若系统编码格式是 UTF-8,你可以在终端看到类似以下信息输出:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
若终端输出的信息不是 UTF-8 编码,你可以在终端输入以下命令来安装和修改编码环境:
apt update && apt install locales
locale-gen en_US en_US.UTF-8
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
source ~/.bashrc
设置软件源和密钥
确保系统处于最新的环境,然后添加清华软件源和密钥。
apt update && apt upgrade
apt install lsb-core
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'
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
安装 Noetic
使用以下命令安装 Noetic 完整桌面版。
apt update && apt upgrade
apt install ros-noetic-desktop-full -y
安装依赖
使用以下命令安装 Noetic 的依赖包。
apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y
初始化 rosdep
使用以下命令初始化 rosdep。
rosdep init
rosdep update
若 rosdep init 出现 ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list Website may be down.
错误提示,访问 https://www.ipaddress.com/
搜索 raw.githubusercontent.com
域名,并将搜索得到的 IP 地址填写进 /etc/hosts 文件。
vi /etc/hosts
添加以下内容:
185.199.110.133 raw.githubusercontent.com
然后重新运行初始化 rosdep 命令。
设置环境变量
使用以下命令设置环境变量:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证 ROS 环境
在终端输入以下命令验证 ROS 环境是否安装成功。
roscore
若安装成功,你会看到类似以下信息输出:
... logging to /root/.ros/log/a9473172-5731-11f0-9a87-5acb6b3cedae/roslaunch-rock-4d-spi-27211.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.
started roslaunch server http://rock-4d-spi:34861/
ros_comm version 1.17.4
# SUMMARY
PARAMETERS
- /rosdistro: noetic
- /rosversion: 1.17.4
NODES
auto-starting new master
process[master]: started with pid [27219]
ROS_MASTER_URI=http://rock-4d-spi:11311/
setting /run_id to a9473172-5731-11f0-9a87-5acb6b3cedae
process[rosout-1]: started with pid [27229]
started core service [/rosout]
使用 Ctrl + C
可以停止 roscore。
保存 Docker 镜像
目前我们的修改都是基于 Ubuntu20.04 的 Docker 容器,我们需要把这个修改的容器保存为镜像,以便下次直接使用。
注意:若没有保存为镜像,下次启动容器时需要重新安装 ROS 环境。
查看正在运行的容器
在 Cubie A7A 的另一个没有进入 Docker 容器的终端输入以下命令查看正在运行的容器。
docker ps
提交容器为镜像
在 Cubie A7A 的另一个没有进入 Docker 容器的终端输入以下命令提交容器为镜像。
需要根据 docker ps
命令输出的容器 ID进行命令的修改。
docker commit [CONTAINER ID] [NEW NAME]
# 示例
docker commit e5c795d8ca66 ros_noetic:1.0
等待提交完成,完成后会输出类似以下信息输出:
sha256:43b559a4d879c83477764730e0af90e8904e8fb8aeeeb9b653967e665bb7a7ca
修改启动脚本
将启动脚本 ros_noetic.sh
内的启动镜像修改为刚才保存的镜像名称:
#!/bin/bash
xhost +
docker run -it \
--net=host \
--env="DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
ros_noetic:1.0 /bin/bash