Python系列15篇全部结束了。从今天开始进入Linux与开发工具系列——机器人软件工程师的基本功。

先说个真实的事。

刚入行的时候,我在Windows上用虚拟机装Ubuntu跑ROS。虚拟机分配了2G内存,跑rviz卡得要死,一开Gazebo直接死机。面试官问我开发环境怎么搭的,我说"用VirtualBox跑的Ubuntu",面试官问了句"为什么不装双系统?虚拟机有什么性能问题?"——我答不上来。

后来才知道,机器人开发对Linux环境有要求。虚拟机方便但性能有损失,双系统性能好但切换麻烦,WSL2是折中方案但也有局限。选哪种,得根据你的实际需求来。

安装方式的选择

虚拟机:最安全的选择。不影响你现有的Windows系统,随时可以快照备份、回滚。缺点是GPU加速支持有限,跑Gazebo仿真会比较卡。如果你的工作主要是写代码、编译、跑简单的ROS节点,虚拟机够用。

推荐VMware Workstation(现在个人免费了)或者VirtualBox。安装时注意:分配至少4G内存、40G硬盘、开启3D加速。Ubuntu 22.04 LTS是目前的最佳选择——ROS2 Humble的官方支持版本。

双系统:性能最好的方案。Linux直接跑在硬件上,GPU、USB设备直通,没有虚拟化的开销。跑Gazebo仿真、调试真实传感器,双系统是最靠谱的。

缺点是切换系统需要重启,而且安装时如果操作不当可能丢失Windows数据。建议用单独的硬盘或分区,不要动Windows的系统盘。

WSL2:Windows 10/11的内置功能,本质上是一个轻量级虚拟机跑Linux内核。优点是集成度高,可以在Windows里直接访问Linux文件系统,VS Code有WSL插件可以无缝远程开发。缺点是对USB设备支持有限——如果你需要接激光雷达、相机等外设,WSL2可能搞不定。

我的建议:学习和写代码用WSL2或虚拟机,需要跑仿真或接硬件时切到双系统或直接在Linux上工作。

安装后的基础配置

装完Ubuntu,先做这几件事。

更新系统

sudo apt update && sudo apt upgrade -y

安装基础工具

sudo apt install -y build-essential cmake git curl wget vim tmux htop

build-essential包含gcc、g++、make等编译工具链,cmake是构建系统,后面装ROS和编译项目都要用。

配置中文环境(可选):设置里把语言改成中文,安装中文输入法。如果你英文阅读没问题,保持英文也行——终端里中文有时候会显示乱码。

调整终端快捷键:Ubuntu默认的终端是GNOME Terminal。可以装一个terminator,支持分屏,调试多个ROS节点时很方便:

sudo apt install terminator

安装ROS2

以Ubuntu 22.04 + ROS2 Humble为例。官方安装步骤是这样的:

# 1. 设置locale
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 2. 添加ROS2软件源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
    -o /usr/share/keyrings/ros-archive-keyring.gpg
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

# 3. 安装ROS2
sudo apt update
sudo apt install -y ros-humble-desktop

# 4. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

装完之后跑个测试:

ros2 run demo_nodes_cpp talker
# 另一个终端
ros2 run demo_nodes_py listener

看到talker发消息、listener收到消息,就说明ROS2装好了。

创建工作空间

ROS2项目用colcon构建系统。创建一个工作空间:

mkdir -p ~/robot_ws/src
cd ~/robot_ws
colcon build
source install/setup.bash

以后你的ROS2包都放在src目录下,用colcon build编译。记得每次打开新终端都要source一下setup.bash(已经加到.bashrc里了就自动的)。

常见问题

网络问题:国内访问ROS官方源可能很慢。可以换成镜像源,比如清华或中科大的ROS镜像。编辑/etc/apt/sources.list.d/ros2.list,把packages.ros.org替换成镜像地址就行。

显卡驱动:如果要跑Gazebo仿真,需要装NVIDIA显卡驱动。Ubuntu的"软件和更新"→"附加驱动"里可以直接选。装完之后跑nvidia-smi验证一下。如果显示GPU信息就说明驱动正常。

虚拟机里的Gazebo:如果Gazebo在虚拟机里黑屏或很卡,试试关闭3D加速或者切换到软件渲染。性能会很差,但至少能跑。长期做仿真的话还是建议双系统。

Python版本冲突:Ubuntu 22.04自带Python 3.10,ROS2 Humble也是基于这个版本。不要随意升级系统Python版本,否则可能破坏ROS2的依赖关系。如果需要其他版本的Python,用pyenv管理。

面试中怎么聊

面试官问开发环境,想看的不是你会不会装系统,而是你对不同方案的trade-off有没有理解。

一个好的回答:先说你用了什么方案,为什么这么选。然后说说你遇到的问题以及怎么解决的。比如"我用虚拟机开发,但发现Gazebo太卡,后来换成了双系统,仿真流畅多了"。

如果你还能聊聊WSL2的使用经验、Docker在开发中的应用——那就是加分项了。

安装配置中的常见坑

Ubuntu安装过程中最容易踩的坑有几个:一是双系统引导问题,UEFI和Legacy BIOS模式搞混了就会启动不了;二是显卡驱动,NVIDIA驱动装不好会导致桌面环境崩溃,这时候要进tty终端用命令行修复;三是ROS安装时依赖冲突,通常是因为sources.list没配对或者忘了执行apt update。面试时如果被问到环境搭建的困难,这些都可以作为真实案例来讲。

还有一个常见坑:VMware虚拟机的网络模式选择。NAT模式简单但不能被外部直接访问,桥接模式更灵活但需要和物理网络在同一网段。做机器人开发时建议用桥接模式,方便和真实硬件通信。

给正在准备面试的你

如果你还在用Windows,建议尽快搭一个Linux开发环境。不用很完美,能跑ROS2、能编译代码就行。面试的时候能说出"我平时在Ubuntu下开发,用VS Code远程连接",比"我在Windows上用虚拟机"听起来专业得多。

下篇聊Linux文件系统结构——/home、/etc、/dev各是干什么的。


如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。

「机器人软件开发面试·从入门到精通」连载系列 上一篇:第80篇 Python面试高频题——机器人岗位常考的Python知识点 下一篇预告:第82篇 Linux文件系统结构——/home /etc /dev各是干什么的

有任何问题欢迎评论区留言,我会尽量回复。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐