task for ROS2
请严格按照顺序安装, 为了防止出错, 本人操作均在root用户, 因此建议纯小白在 root 用户下进行安装, 避免出现不必要的问题
下面所有在 Terminal 的操作应该遵守:
必须启用 root 用户操作(见8.1节), 否则应该将用户加入 sudo 组(见8.4节).
Linux 中在 Terminal 的复制操作为
CTRL + SHIFT + C, 粘贴为CTRL + SHIFT + V(宿主机之间要想能够复制粘贴得另外操作详见8.6节).文档操作可访问 http://47.108.130.26:4000/2025/06/30/task-for-ROS2/, 在虚拟机内也可以访问, 但是要想使用汉字(见8.8节)或者搜索其他内容需要设置搜索引擎(详细见8.7节).
操作过程中记得同步宿主机和虚拟机时间, 否则可能会造成一些安装问题(见8.9节).
安装后使用期间可能遇到闪屏问题(见8.10节)
本文档安装的软件版本如下.
生产环境: Intel Core i5-10210U CPU (Windows10)
Ubuntu: 22.04.5 LTS
VirtualBox: 7.0.4r154605
ROS2: Humble Hawksbill
Yolov5
conda: 24.1.2
- python: 3.10
1. 虚拟机安装
主流的 Virtual Box, Vmware 都可以, 这里我选择Virtual Box. 理由是Virtual Box 开源, 安装简单.
Vmware功能虽然全面但是太冗杂了, VBox较为轻量方便, 足够支撑整个测试, 实际上用Ubuntu的实机效果更好.
下载网址, https://www.virtualbox.org/ .

点击Download.

根据系统进行安装, 以下默认用户是windows系统.
2. Ubuntu 安装
2.1 系统安装
为了便于小白学习, 另外为了后续查看图片, 我们选择安装桌面版的linux(桌面默认环境为GNOME, 如果桌面环境选择不一样可能在一些安装上会存在问题).
目前Humble版本的ROS2支持有22.04及其之前的一些版本, 这里我们推荐安装22.04(稳定并长期支持, 包括很多云厂商的服务器都选择采用22.04).
ROS2 与对应发行版关系如下.
| ROS2版本 | 发布时间 | 维护截止时间 | Ubuntu版本 |
|---|---|---|---|
| Ardent Apalone | 2017.12 | 2018.12 | Ubuntu 16.04(Xenial Xerus) |
| Bouncy Bolson | 2018.7 | 2019.7 | Ubuntu 16.04(Xenial Xerus)、18.04(Bionic Beaver) |
| Crystal Clemmys | 2018.12 | 2019.12 | Ubuntu 18.04(Bionic Beaver) |
| Dashing Diademata | 2019.5 | 2021.5 | Ubuntu 18.04(Bionic Beaver) |
| Eloquent Elusor | 2019.11 | 2020.11 | Ubuntu 18.04(Bionic Beaver) |
| Foxy Fitzroy | 2020.6 | 2023.5 | Ubuntu 20.04(Focal Fossa) |
| Galactic Geochelone | 2021.5 | 2022.11 | Ubuntu 20.04(Focal Fossa) |
| Humble Hawksbill | 2022.5 | 2027.5 | Ubuntu 22.04(Jammy Jellyfish) |
| Iron Irwini | 2023.5 | 2024.11 | Ubuntu 22.04(Jammy Jellyfish) |
| Jazzy Jalisco | 2024.5 | 2029.5 | Ubuntu 24.04(Noble Numbat) |
从 https://www.releases.ubuntu.com/22.04/ 下载
step 1
选择 ubuntu-22.04.5-desktop-amd64.iso, 这里大概是4.4GiB.
这里如果是 windows 且电脑架构为 x86_64 选择 amd64 版本. MacOS 可以参考 https://blog.csdn.net/davidson1471/article/details/146910376.
step 2
导入刚刚下载的镜像.

step 3
设置密码, 注意右侧不能有’_’等特殊的符号.

step 4
分配资源,上面是内存, 下面是CPU, 内存不要太小4GB应该足够了, CPU分配的越多越好, 但是不要占满自己的核心, 否则电脑会卡顿.

step 5
分配硬盘,40GiB应该足够测试, 20GiB可能会不够, 如果不够后续可以拓展.

2.2 系统启动
step 1
可以看到我们注册好的系统已经出现, 双击进行启动.

step 2
初次启动需要进行一系列初始化, 首先我们键入账号密码.

step 3
等待一系列初始化过程之后, 正式进入系统, 跟着操作即可, 一系列操作主要是涉及一些内容推送,不太重要.





到了下面的页面就算安装成功了.

3. ROS2 安装
首先键入命令行查看 ubuntu 版本
1 | lsb_release -a |
我的结果如下(确定 Release 是不是 22.04,如果不是很可能无法安装成功).
1 | No LSB modules are available. |
后面跟着下面一路启航, 应该没有报错,下面的安装过程中可能会出现网络延迟严重的现象, 要解决我们需要换源(见8.2节).
3.1 设置语言环境
1 | sudo apt install -y locales |
3.2 添加 ROS 2 的 APT 软件源
1 | sudo apt install -y software-properties-common |
3.3 添加GPG Key
1 | sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg |
如果发现上面的操作有死机,还有一个方法.
1 | cd /usr/share/keyrings/ |
3.4 添加 ROS 软件源
1 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \ |
3.5 更新系统
1 | sudo apt update |
3.6 安装完整桌面版
1 | sudo apt install -y ros-humble-desktop |
3.7 设置ROS环境变量
1 | echo "source /opt/ros/humble/setup.bash" | sudo tee -a /etc/profile |
3.8 验证安装
我们可以打开两个Terminal也可以用tmux, 这里案例用前者.
1 | # 打开两个Terminal |

4. conda 安装
4.1 完整 Anconda 安装
我们安装完整的anconda会比较大, 可以选择轻量的安装, 这里先贴一下完整的流程.
1 | wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh |
4.2 轻量安装(可选)
安装完整版之后这里就不用安装了.
1 | wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh |

5. YOLO 安装
这里目标检测我们使用YOLO,v5和v8都适用于目标检测.
这里使用v5, 理由是v5更稳定简单.
这里先找到一个目录,我们用来存放整个 demo 相关文件.
1 | mkdir -p ~/demo |
然后安装yolov5.
1 | # Python >= 3.8 and <= 3.11 |
验证 yolo 安装情况
我们使用 yolo -v
1 | (py310env) root@ROS:~/demo# yolo -v |
会发现安装了v8, 原因是:requirements.txt 中 会自动从 PyPI 安装 YOLOv8 的 ultralytics 包,并注册命令 yolo.
1 | (py310env) root@ROS:~/demo# grep -Irn ultralytics yolov5/requirements.txt |
因此实际上我们的项目目录中安装了v5, 但是全局上安装了v8.
验证v5是否安装
1 | # 在 yolov5 的根目录下执行相关脚本, 判断是否能够有相应的产出 |
看到这里有把结果保存到 yolov5安装目录下的 runs/detect/exp 目录.

在当前目录下打开文件夹查看图片.
1 | xdg-open . |
我们找到对应的目录, 发现可以看到结果图片.

6. 任务流程
step 1
首先, 构建初始化工作空间.
1 | cd ~/demo |
之后创建通信包.
1 | cd src |
查看当前目录情况。
1 | sudo apt install -y tree |
目录结构如下.
1 | ├── build |
step 2
现在我们开始编写代码, 以及将运行时需要的图片文件插入进去.
首先插入图片文件.
1 | mkdir -p ~/demo/images |
当然我们可以加入自己的图片.
1 | # 我自己经常会用的 vim 模板 https://gitee.com/jvle/works/blob/master/general/vimrc.template (可选) |
编写主机的代码, 这里说一下 vim 的操作, a 或者 i 进行插入, 然后可以复制粘贴, 退出 SHIFT + : 然后键入 w 保存, q 退出, wq 保存并退出, 有问题使用 q! 强制退出而不保存(小白切勿同时对一个文件使用 vim, 不然可能会遇到缓存和覆盖的问题).
1 | cd ~/demo |
将变量加入 setup.py
1 | vim image_yolo/setup.py |
脚本内容应该加入两个节点信息.
1 | ... |
编译工作区.
1 | cd ~/demo |
step 3
1 | # 这里可能是我前面的安装问题, 一些软件的版本存在兼容的情况, 这里可以人为手动解决一下, 或者切换不同的python环境进行尝试. |
运行程序.
Terminal 1 运行.
1 | conda activate py310env # 确保在conda的环境 |
Terminal 2 运行.
1 | conda activate py310env |
效果如下.
7. 代码
Thinking
发布者定时读取图片(本地或摄像头), 将读取的图像结果发布, 由对同一话题感兴趣的订阅者接受, 订阅者将接收到的消息喂给模型进行处理, 最后输出结果.
Results
读取图片版
publisher_node.py
1 | import rclpy |
获取摄像头版
下载 Virtual Box 的拓展包
地址在: https://download.virtualbox.org/virtualbox/, 主要要根据自己的版本决定安装对应版本的拓展包
在软件根目录下执行
1 | VBoxManage.exe --version |
下载直接安装即可.


之后我们需要启动摄像头.

之后查看摄像头是否能够驱动.
1 | jvle@ROS:~/Desktop$ ls /dev/video* |
代码
publisher_node.py
1 | import rclpy |
subscriber_node.py
1 | import rclpy |
Result 1

Result 2

8. Notice
8.1 权限问题的解决.
为了解决权限问题.
给自己设置的用户授予sudo权限.
直接使用 root 用户.
这里只是写demo, 我们直接使用 root 用户好了.
操作如下.
1 | # 之后输入root用户的密码即可 |

如果没有给用户授权.
我们的所有操作都在root用户下进行!!!
我们的所有操作都在root用户下进行!!!
我们的所有操作都在root用户下进行!!!
8.2 换源(可选, 如果发现后续软件包安装速度太慢可以跟着操作)
我们知道linux系统中的安装方式常常采用一些包管理器, 在Ubuntu这个发行版下常用的管理器是apt(软件包以.deb结尾), 我们通过管理器从远程的服务器拉取软件包进行安装, 但遗憾的是, 存储软件包的管理器在国外, 下载速度非常慢, 于是国内一些高校和厂商决定将软件包搬运到国内(或者使用代理), 这里我们把软件包的安装源切换到国内, 方便后续操作.
为了方便换源, 这里我把要复制的已经放到网页上了.
在ubuntu访问 http://47.108.130.26:4000/2025/06/30/Source-about-Ubuntu/ 即可(为什么在虚拟机上访问是因为,暂时不能把复制粘贴的内容在主机和虚拟机之间来回交互, 这里不需要就不演示如何更改配置了, 更为方便的实际上是用ssh或者vnc连接虚拟机).
step 1
打开火狐.

step 2
按照步骤复制粘贴到Terminal就可以了.

如果想探索更多源的话,可以根据下面的网站进行配置.
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
8.3 无法打开Terminal(可能遇到的问题)
Ubuntu 安装之后我们打开中端会发现Terminal在左上角转圈, 随后消失的情况, 解决方法如下.
尝试按下 CTRL + ALT + F3(如果发现误触音量键请按下CTRL + FN + ALT + F3). 之后会进入命令行模式, 根据之前注册的账户登录即可.

之后输入以下命令进行修复.
1 | cd /etc/default # 切换到 `/etc/default` 目录 |
之后将第一行 LANG="en_US" 改成 LANG="en_US.UTF-8".

之后 CTRL + X 退出 Nano(会问Y/N, 输入Y即可保存并退出).
之后输入下面指令.
1 | # 生成并清理本地化(locale)设置 |

之后重启.
1 | sudo reboot |
8.4 赋予初始用户sudo权限(可选)
先切换到 root 用户.
1 | # 要输入 root 密码 |
给用户赋予 sudo 权限.
1 | # <youruser> 是你的用户名 |
之后如果出现权限不够就可以在前面加上 sudo 权限啦.
8.5 磁盘镜像扩容(可选)
如果一开始分配的磁盘空间是 20GiB 可能会不足够, 这个时候可以对磁盘空间进行扩容, 具体可以用到 Virtual Box 自带的工具 V.
打开命令行工具, 然后 cd <VirtualBox 安装路径>.
1 | # 在Virtual Box根目录下执行 |
8.6 宿主机和虚拟机共享粘贴板(可选)
step 1
操作过程中我们可能需要在主机和虚拟机之间交互粘贴的内容.
右键打开对应镜像的设置, 这里必须先停止运行, 否则不会生效.

选择双向即可.

step 2
打开固态驱动器和IO(关闭虚拟机情况下设置, 否则会显示灰色).


step 3
1 | sudo apt install -y virtualbox-guest-x11 |
显示一些输出即为成功, 如下.
1 | jvle@ROS:~/Desktop$ VBoxClient --clipboard |
step4(上面无法解决再看这里)
打开安装 Guest Addition 和 功能增强.

8.7 虚拟机内使用搜索引擎(可选)
因为引擎默认是 google 的, 我们要设置成可用的引擎.

这里选择必应的引擎即可.

8.8 虚拟机安装汉字输入法(可选)
step 1
选择 language 汉语.


step 2
安装中文语言包.


之后重启系统.
1 | sudo reboot |
step 3
安装中文输入法.
1 | sudo apt install -y ibus |
step 4
选择中文输入源.

点击 “+” 添加.

右上角出现中文标志, 即可切换.

8.9 同步时间(可选)
1 | # 查看系统时间 |
8.10 闪屏问题(可选)
闪烁的本质原因是因为显存不足导致的.
step 1
拉高显存, 适用即可.

step 2
打开3D加速.

References
修复virtual Box无法打开Terminal问题: https://zhuanlan.zhihu.com/p/685438687