首页 / 资讯中心 / 文章详情

VMware搭建Ubuntu 20.04+ROS2 Foxy环境完整指南

VMware搭建Ubuntu 20.04+ROS2 Foxy环境完整指南 ★ FEATURED ARTICLE
机器人开发这几年绕不开 ROS2而很多入门教程默认你用的是原生 Linux。可实际情况是不少同学的工作机就是 Windows想装一套 Ubuntu 20.04 ROS2 又不想把整个电脑搞成双系统那就只能在 VMware 里先搭一个虚拟机。我折腾过好几次这种环境从早期的 VMware Player 一路用到现在的 Workstation踩过的坑不少但最终跑通一套 Ubuntu 20.04 ROS2 的开发环境其实并不复杂只要把版本、网络和安装源这三点搞明白后面就很顺。这篇文章就围绕“VMware 上搭建 Ubuntu 20.04 ROS2”完整讲一遍包含虚拟机参数怎么给、Ubuntu 分区怎么划、ROS2 装哪个发行版、环境变量怎么配、turtlesim 怎么验证以及几个特别容易让人卡住的网络和显示问题。适合刚接触 Ubuntu 的机器人方向学生也适合之前只装过 ROS1、想转到 ROS2 的开发者。1. 版本选型Ubuntu 20.04 该配哪个 ROS21.1 Ubuntu 20.04 官方支持 ROS2 FoxyROS2 的版本号和 Ubuntu 的版本号是严格对应的不能随便组合。Ubuntu 20.04 的代号是 Focal FossaROS2 官方明确支持并长期维护的发行版是 Foxy Fitzroy它属于 LTS 长期支持版本官方维护到 2023 年 5 月左右。虽然我们现在讨论的是在虚拟机上搭建版本选择原则上应该和真实机器保持一致因为后面你编译自己写的功能包、装驱动、跑仿真依赖的都是这个发行版的二进制包。ROS2 官方为 Ubuntu 20.04 提供二进制包的发行版不只是 Foxy比如后续的 Galactic 也能装在 20.04 上但它不是 LTS生命周期短资料相对少。对初学者来说Foxy 是整个 ROS2 生态里最稳的一代教程多、报错方案全需要 ROS1 和 ROS2 通信时也有比较成熟的 ros1_bridge 方案。所以把 Foxy 作为虚拟机里的首选是一个稳扎稳打的选择。1.2 为什么不建议硬上最新版有的同学喜欢装最新版比如 Ubuntu 22.04 对应 ROS2 Humble甚至 Ubuntu 24.04 对应 Jazzy。听起来新版本功能更多但在虚拟机场景下新版本往往带来三个问题第一是 ROS2 的二进制包更新节奏变快很多第三方驱动和教学代码还没跟上第二是 Ubuntu 新版本的内核和桌面环境对 VMware 的虚拟机显卡驱动要求更高偶尔会出现黑屏或者显示分辨率异常第三是你在网上搜“vmware Ubuntu ROS2 教程”时大量帖子都是基于 20.04 Foxy 写的遇到问题能搜到的解决方案最多。我不是说新版本不能用而是强调“搭建开发环境”这件事求稳比求新重要。先把 20.04 Foxy 这套经典组合跑起来以后想升级再另开一个虚拟机和 workspace 也不迟。虚拟机的好处就是可以同时存在多套环境互不干扰这也是我推荐用虚拟机做 ROS2 入门的重要原因之一。2. 创建 VMware 虚拟机硬件参数和镜像准备2.1 镜像下载与校验去 Ubuntu 官网下载 20.04 的桌面版 ISO建议选 20.04.6 这个最后维护版本它包含到 2023 年为止的累积更新安装完之后不用打一大堆补丁。如果你所在网络访问官网速度不稳也可以用你熟悉的国内镜像站下载原理都一样记得选择ubuntu-20.04.6-desktop-amd64.iso这种桌面版文件。下载完成后不要急着安装最好校验一下 SHA256 值。镜像文件体积在 2GB 以上如果下载中途损坏安装到一半会出现各种诡异问题比如安装器报错、启动后内核 panic。Linux 系统里可以用sha256sum命令Windows 里可以用 PowerShell 的Get-FileHash。校验标准就是看你下载页上给出的哈希值是否完全匹配。2.2 虚拟机创建向导设置打开 VMware Workstation选择“新建虚拟机”这里我习惯选“稍后安装操作系统”而不是直接用 ISO 引导。这样做的好处是后面可以随时调整 ISO 路径也可以修改硬件参数不会因为向导里的一步选错而整体重建。操作系统类型选择“Linux”版本选“Ubuntu 64 位”。千万别选成 Ubuntu 32 位不然装 20.04 会直接提示不支持。处理器方面建议至少分配 2 核如果你的宿主机 CPU 核心数较多给 4 核会让编译 ROS2 包时快很多。内存至少 4GB8GB 最舒服。Foxy Desktop 装完大概占 3GB 磁盘后面再加上编译缓存、仿真工具、日志我建议虚拟机磁盘直接给 60GB不要给 30GB 以下否则过两个月你就会发现自己天天在删东西。磁盘格式按 VMware 默认的 VMDK 就行如果宿主机硬盘空间充裕可以选“立即分配所有磁盘空间”性能稍微好一点但如果你只是临时用默认动态扩展更省空间。网络模式先保持 NAT后面 ROS2 通信需要改的时候再改。固件类型大多数情况用默认就行不用刻意改成 BIOS 或者 UEFI。2.3 显示与内存预配置虚拟机创建完先不要急着启动进入“虚拟机设置”把显示器里的“加速 3D 图形”勾上。这个选项对 Ubuntu 桌面动画和后面 RViz、RQt 的渲染有一定帮助但不勾的话也不影响基本使用。内存这里需要注意如果你给虚拟机分配了 8GB最好保证宿主机还有富余内存否则 VMware 会把一部分内存换到磁盘上虚拟机跑起来反而更慢。有一点要提前说明VMware 的“处理器配置”里有个“虚拟化 Intel VT-x/AMD-V”选项不是所有 CPU 都默认开启。如果你 CPU 的虚拟化技术在 BIOS 里没打开创建虚拟机时会直接报错。遇到这种问题先重启进入 BIOS找到 Intel Virtualization Technology 或 SVM Mode 选项打开再进系统重新创建虚拟机。3. Ubuntu 20.04 安装与磁盘规划3.1 安装引导前几个选择虚拟机创建好以后挂载 ISO 并启动界面会进入 Ubuntu 安装引导。选择语言时建议直接用中文或者 English 都可以ROS2 的终端输出默认是英文用英文环境反而会少一些编码问题。安装到“键盘布局”时保持默认即可。到“更新和其他软件”这一步推荐选择“最小安装”同时不要勾选“安装更新”。最小安装可以省掉 LibreOffice 等一堆用不到的程序安装时间短不勾选安装更新的原因是安装器检测更新会额外花很多时间而且可能在虚拟机网络还没稳定时拖慢整体进度。这些东西完全可以在系统装好以后用apt自己补。3.2 分区方案怎么选Ubuntu 安装器默认会让你选“清除整个磁盘并安装 Ubuntu”在这个虚拟机里选它完全没问题。物理机一般不建议直接清除全盘但虚拟机磁盘本身就是虚拟出来的一个文件清掉重来也无所谓就算装坏了重新建一台就好。如果你想自己手动分区我建议这样做/根分区 30GB 左右/home分 30GB 左右swap 给 2GB 就行。根分区放系统、ROS2、各种依赖home 分区放你的代码和下载。如果根分区只有 20GB装完 ROS2 后编译几个大型仿真包很容易就没空间了。不要给 swap 太多虚拟机本身靠物理内存swap 设太大反而会频繁读写宿主机磁盘影响性能。3.3 安装完成后第一件事装完系统重启进入 Ubuntu 桌面第一件事就是打开终端执行sudo apt update sudo apt upgrade。这步会把系统所有软件包升级到最新版包括内核。虚拟机里升级内核之后可能需要重启才能保证 VMware Tools 和图形驱动正常工作所以升级完再重启一次。很多新手跳过系统更新直接装 ROS2结果经常遇到依赖版本不匹配的问题比如libpython3.8版本不对、udev规则不兼容。先做完系统更新ROS2 源的依赖关系会更容易满足。更新完系统再把宿主机和虚拟机之间的 VMware Tools 处理好这步比想象中更重要我单独用一章来说。4. 装好系统先别急VMware Tools 和虚拟机体验4.1 用 open-vm-tools-desktop 替代老式工具以前在 VMware 里装 Linux很多人会去挂载 VMware Tools 安装包手动编译安装。但在 Ubuntu 20.04 上强烈建议直接用包里自带的open-vm-tools-desktop它和 VMware 的兼容性反而更好而且会随着系统更新一并升级。安装命令很简单sudo apt install open-vm-tools-desktop -y安装完重启你会发现虚拟机的分辨率能自动跟随窗口大小变化了剪贴板也能和宿主机互拷贝。如果你在 VMware 的“虚拟机设置”里看到“VMware Tools 已过期”的提示别急着去 VMware 软件菜单里的“安装 VMware Tools”直接在 Ubuntu 里用上面这条命令把 open-vm-tools-desktop 装好问题就能解决。记住一个判断原则在 Ubuntu 20.04 里优先用发行版自带的开源版工具不要用老式的vmware-install.pl安装包。4.2 共享文件夹与双向拖拽打开 VMware 虚拟机的“虚拟机设置”-“选项”-“共享文件夹”启用共享文件夹选择你希望双方都能访问的目录比如宿主机上的一个vm_share文件夹。然后在 Ubuntu 里挂载它。挂载前先检查是否已经有/mnt/hgfs目录如果没有就创建sudo mkdir -p /mnt/hgfs再通过vmhgfs-fuse挂载共享目录sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other这样宿主机共享出来的所有目录会出现在/mnt/hgfs里。如果你想开机自动挂载可以编辑/etc/fstab加入下面这一行vmhgfs-fuse /mnt/hgfs fuse defaults,allow_other 0 0如果发现剪贴板复制粘贴不生效优先检查“虚拟机设置”里的“客户机隔离”两个选项是否勾选启用复制粘贴、启用拖放。另外Ubuntu 桌面有时候会让剪贴板服务没启动重启一次通常就正常了。4.3 性能调优三连虚拟机毕竟是共享宿主机资源想让 Ubuntu 20.04 ROS2 用起来更顺手可以做几个小调优。第一关闭 Ubuntu 里不必要的动画特效。打开“设置”-“外观”把动画关闭或者安装 gnome-tweaks 后再做调整。虚拟机里的 GPU 能力本来就弱动画会白白消耗 CPU。第二CPU 分配不要超过物理机逻辑核心的一半。很多人直接给虚拟机分配 8 核而宿主机一共 8 核结果 VMware 在不断调度切换编译时反而慢得像蜗牛。一般 4 核就够用。第三点击 VMware 菜单里的“虚拟机”-“设置”-“内存”如果你的宿主机内存足够可以勾选“预留所有客户机内存”。这样做虽然会立刻占掉宿主机对应内存但虚拟机运行时不至于因为动态收缩导致卡顿。5. ROS2 Foxy 安装实录5.1 更新基础依赖与语言环境系统摆弄好后开始正式安装 ROS2。先把基础工具装上sudo apt update sudo apt install curl gnupg lsb-release -yROS2 对 locale 环境很敏感建议把它改成 UTF-8避免后面启动节点时出现奇怪的中文字符乱码。执行sudo apt install locales -y sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8改完以后退出终端重新打开运行locale确认输出里LANGen_US.UTF-8。这一步在中文版 Ubuntu 里尤其重要有时候不设置 UTF-8rclpy 打印日志会报 UnicodeEncodeError。5.2 添加 ROS2 源和密钥ROS2 官方源需要手动添加 GPG 密钥和 apt 源。注意这里不能省略密钥这一步否则后面apt update会报Since this repository was provided by ... no keyring之类的错误。sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg接着把 ROS2 源写入 apt 源列表echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null这里用了$(lsb_release -cs)它会自动替换成focal所以你不需要手动改动命令。如果你所在的网络访问raw.githubusercontent.com或packages.ros.org比较慢可以换成速度更好的镜像站关键是整个源地址要保持一致。更新列表之后执行sudo apt update如果这一步出现Release file ... is not valid yet或者 GPG 相关报错多半是系统时间不对。虚拟机如果没有设置时间同步时间漂移会导致 apt 验证失败下一章会有排查方法。5.3 安装 ros-foxy-desktop更新源成功后安装 ROS2 桌面版sudo apt install ros-foxy-desktop python3-argcomplete -yros-foxy-desktop是一个元软件包它包含 ROS2 基础通信库、rclcpp、rclpy、turtlesim、RViz、演示包等能满足绝大多数学习和开发需求。如果你只是想测试底层通信也可以选ros-foxy-base但桌面版更适合做机器人仿真和可视化。安装过程会下载大约 1GB 多的包速度取决于网络和 apt 源。装完以后可以顺手安装 RViz、RQt 相关的附加包但桌面版里已经带了一部分暂时不急。接着把命令自动补全启用sudo activate-global-python-argcomplete这样在终端里执行ros2之后按 Tab就能自动补全节点名、话题名。5.4 配置环境变量和命令补齐ROS2 不是装完就能直接在终端里用的你必须先 source 它的环境设置脚本source /opt/ros/foxy/setup.bash这个脚本会把 ROS2 的可执行文件目录、Python 模块路径、共享库路径全部加进当前终端的 PATH 和 PYTHONPATH。但每次开新终端都要手动 source 一遍很麻烦所以把它写进~/.bashrcecho source /opt/ros/foxy/setup.bash ~/.bashrc source ~/.bashrc验证是否成功可以执行printenv ROS_DISTRO如果输出foxy说明环境正确。如果输出为空基本就是没 source 成功或者~/.bashrc里的路径写错了。6. 跑第一个 ROS2 例程的完整验证6.1 turtlesim 双终端验证环境配好以后最直观的验证方式是跑官方自带的小乌龟例程。打开两个终端都先确认能正常使用ros2命令。第一个终端启动小乌龟窗口ros2 run turtlesim turtlesim_node第二个终端运行键盘控制ros2 run turtlesim turtle_teleop_key然后鼠标点一下第二个终端窗口用键盘方向键移动小乌龟。如果窗口正常弹出、方向键能控制说明 ROS2 的节点发现、话题通信、消息序列化这些核心链路都已经跑通了。在 VMware 虚拟机里偶尔会出现小乌龟窗口弹不出来或者窗口显示但无法刷新。先别怀疑 ROS2 装坏了多半是虚拟机 3D 加速和 OpenGL 渲染问题。可以尝试把 3D 加速关掉再看也可以降低 Ubuntu 桌面的硬件加速阈值。6.2 用命令行理解 ROS2 三大件ROS2 相对于 ROS1一个非常重要的变化是它去掉了 ros master节点发现靠 DDS 协议自动完成。理解这一点最好的办法是在运行小乌龟时开一个新终端执行ros2 node list你会看到/teleop_turtle和/turtlesim两个节点。再执行ros2 topic list能看到/turtle1/cmd_vel、/turtle1/pose、/rosout等话题。如果想查看命令是否真的在小乌龟身上产生了速度指令执行ros2 topic echo /turtle1/cmd_vel这时候在键盘控制终端按一次方向键echo 窗口就会输出一条 geometry_msgs/msg/Twist 消息。看得多了你就会明白 ROS2 里“节点之间通过话题而不是直接函数调用”这个设计逻辑。你甚至可以不通过键盘直接往话题里发速度命令ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist {linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {z: 1.8}} --once小乌龟会朝右前方走出一条弧线。到这里安装验证就算非常完整了。7. 网络模式别踩坑NAT、桥接与 ROS2 发现机制7.1 NAT 默认够用但有限制新建虚拟机时默认用 NAT 模式。在 NAT 模式下虚拟机通过宿主机共享的 IP 访问外网对外部网络来说虚拟机相当于躲在宿主机后面。如果你只是想在 Ubuntu 虚拟机内部跑 ROS2 的节点、开 RViz、和小乌龟玩NAT 模式完全没问题因为所有节点都跑在同一个操作系统里DDS 多播发现也局限在虚拟网卡内部能正常找到彼此。但有一天你想跟宿主机上的另一个 ROS2 进程通信或者有两个虚拟机之间要协作NAT 模式就开始尴尬了。ROS2 的 DDS 默认依赖 UDP 多播做节点发现虚拟网络里的多播包是否能被宿主机和外部设备正确转发取决于 VMware 的虚拟网络实现和防火墙策略。我在实践中发现很多网络环境里 NAT 模式会造成两个虚拟机之间偶尔发现不了对方表现为ros2 node list只能看到自己。7.2 桥接模式设置让 ROS2 在多台设备之间正常通信更直接的方案是把虚拟机网络改成桥接模式。在 VMware 虚拟机设置里把网络连接从 NAT 改成“桥接模式”然后把虚拟网络编辑器中需要桥接的物理网卡选对。如果你宿主机用的是 Wi-Fi有些网卡驱动在桥接时会有丢包或延迟这时候可以试试在虚拟网络编辑器里重新绑定网卡或者换以太网口。改完网络后在 Ubuntu 里执行ip addr看到虚拟机和宿主机处于同一网段比如宿主机是 192.168.1.100虚拟机是 192.168.1.101。这样局域网内的其他机器就能和虚拟机通信了。ROS2 的多播发现通常也能工作但前提是网络里有交换机和防火墙允许 UDP 组播包通过。7.3 防火墙与组播放行ROS2 默认使用 Fast DDS 作为 DDS 实现基于 RTPS 协议UDP 端口默认从 7400 开始。如果虚拟机ufw防火墙开着可能阻挡 UDP 发现包。可以先查看状态sudo ufw status如果网络环境和 ROS2 节点之间通信失败可以尝试放行 UDP 端口或者临时关闭防火墙定位问题。需要说明的是这只适合在可控的局域网或虚拟机网络里操作真实机器人部署时你还是应该按安全规范配置防火墙白名单而不是直接关闭防火墙。ROS_DOMAIN_ID 也是一个重要的隔离变量。如果你同时跑多个 ROS2 系统在不同房间的机器人上设置不同的 ROS_DOMAIN_ID可以避免节点被错误发现。但要注意修改 domain id 会改变 DDS 使用的端口段跨 domain 的节点无法通信。我在虚拟机上做多机器人仿真时通常会为不同虚拟机设置不同 domain id同时用桥接网络连到同一个局域网这样既能隔离又能互通。8. 搭建 colcon 工作空间开始写第一个节点8.1 安装编译工具ROS2 的官方构建工具是 colcon类似 ROS1 里的 catkin。安装它sudo apt install python3-colcon-common-extensions -y然后创建你自己的开发工作空间mkdir -p ~/ros2_ws/src以后你的所有功能包都放在~/ros2_ws/src下编译在~/ros2_ws目录执行。为什么不直接在工作空间根目录放代码因为 colcon 的约定就是源码必须放在src子目录编译产物会生成到build和install两个目录里。这样的结构能让你轻松清理编译缓存也能通过install/setup.bash单独加载某个工作空间的编译结果。8.2 创建 ament_python 包并编译进入src目录创建一个 Python 类型的 ROS2 功能包cd ~/ros2_ws/src ros2 pkg create py_pubsub --build-type ament_python --dependencies rclpy std_msgs这会生成一个标准的包结构。在py_pubsub/py_pubsub目录里新建一个talker.py写入一个最简单的话题发布节点import rclpy from rclpy.node import Node from std_msgs.msg import String class Talker(Node): def __init__(self): super().__init__(talker) self.publisher_ self.create_publisher(String, chatter, 10) self.timer self.create_timer(1.0, self.timer_callback) self.count 0 def timer_callback(self): msg String() msg.data Hello ROS2: %d % self.count self.publisher_.publish(msg) self.count 1 def main(argsNone): rclpy.init(argsargs) node Talker() rclpy.spin(node) rclpy.shutdown()记得在setup.py的entry_points里加入控制台脚本入口entry_points{ console_scripts: [ talker py_pubsub.talker:main, ], },之后回到工作空间根目录编译cd ~/ros2_ws colcon build编译完成后source 编译结果source install/setup.bash运行你的节点ros2 run py_pubsub talker如果看到节点每秒打印一条 Hello ROS2 消息你的 ROS2 开发闭环就真正建立起来了。以后每开一个新终端都需要先source /opt/ros/foxy/setup.bash再source ~/ros2_ws/install/setup.bash。两个脚本的顺序不能反否则工作空间的包可能覆盖不了系统自带的同名包。9. 常见问题与排查实录9.1 apt 源报 GPG 错误现象执行sudo apt update时出现The following signatures couldnt be verified或者提示ros-archive-keyring.gpg找不到。原因一ros.key 没有成功下载或者下载到了错误位置。重试一下安装密钥那一步确保/usr/share/keyrings/ros-archive-keyring.gpg文件存在并且不属于 root 以外用户可写。原因二系统时间不对。虚拟机常见的是挂起恢复以后时间漂移执行date检查时间如果偏差太大可以先手动校时也可以安装systemd-timesyncd自动同步。9.2 虚拟机启动后黑屏或卡在登录界面原因多半在显卡和显示驱动。先在 VMware 设置里取消“加速 3D 图形”再把虚拟机的显示分辨率调低比如 1024x768然后重启。如果仍黑屏开机时进入 GRUB 菜单在 Ubuntu 内核命令行里加上nomodeset参数先禁用内核模式设置。这套组合拳能解决大部分 VMware 下的 Ubuntu 20.04 显示问题。9.3 共享文件夹在 /mnt/hgfs 里看不到先执行vmware-hgfsclient看宿主机已经共享了哪些目录。如果输出为空说明共享没配置好回到 VMware 虚拟机设置确保共享文件夹设置为“总是启用”。如果输出有目录名但/mnt/hgfs为空多半是 fuse 模块没挂载成功重新执行sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other。另外不要漏装open-vm-tools-desktop缺少工具时共享文件夹是不会自动出现的。9.4 ros2 节点互相发现不了先确认所有节点是否真的运行在同一网络域名和 DDS 域下。在两个终端分别执行echo $ROS_DOMAIN_ID如果不一致它们互相看不到。再确认网络是否桥接、防火墙是否放行 UDP 7400 端口。如果同一台虚拟机内部节点没问题但和其他设备通信失败优先查多播。某些交换机默认禁止组播或者宿主机 Wi-Fi 的 AP 隔离功能开启了也会导致 ROS2 节点发现失败。最简单的临时判断方法把防火墙关闭再跑一次ros2 node list如果通了就说明是防火墙策略问题回到白名单配置方向。9.5 磁盘空间不足我在虚拟机里装完 ROS2 desktop 加 RViz再加几个仿真包根分区很容易突破 30GB。当发现df -h显示/已经用了 90% 以上需要扩容。过程分两步先在 VMware 虚拟机设置里增大磁盘大小注意这个操作需要虚拟机关机然后进入 Ubuntu确认磁盘分区和逻辑卷是否自动扩展。Ubuntu 桌面版默认安装如果用了 LVM扩展逻辑卷和文件系统的命令不太一样建议先执行sudo pvs和sudo lvs看当前状态。如果是传统分区用growpart配合resize2fs来扩展分区。这个操作有一定风险操作前一定做好虚拟机快照。9.6 升级内核后 VMware Tools 失效Ubuntu 每次更新内核open-vm-tools 通常会自动适配但也有极少数情况会因为 DKMS 模块和内核头文件不一致导致共享文件夹失败。这时候执行sudo apt install --reinstall open-vm-tools-desktop如果还不行安装对应版本的内核头文件sudo apt install linux-headers-$(uname -r)然后重新安装一遍 open-vm-tools-desktop。绝大多数 VMware Tools 问题都能靠这一个组合解决。9.7 ros2 命令找不到如果ros2: command not found先查/opt/ros下面有没有foxy目录。如果没有说明安装没成功返回第 5 章检查源和密钥。如果有但命令找不到说明当前终端没有 source 环境执行source /opt/ros/foxy/setup.bash设置好~/.bashrc后新打开的终端里应该就已经有ros2命令。如果你的终端用 zsh记得也要在~/.zshrc里加对应的 source 行不要只改.bashrc。10. 最后分享一点实际体会我在虚拟机里折腾 ROS2 的这些年最大的感触是快照是虚拟机最值得依赖的功能。每次在干净的环境里装好系统、配上 open-vm-tools先做一个“基础系统”快照装好 ROS2 并验证 turtlesim 跑通后再做第二个“ROS2 Foxy 干净环境”快照。之后不管你怎么编译、怎么改工作空间只要环境被搞乱了一两分钟就能回到可用的状态这种容错率是物理机完全给不了的。另外还有一个小习惯把~/ros2_ws/src单独共享到宿主机用 Git 管理。这样虚拟机的磁盘坏了、快照丢了你的代码依然还在而且可以随时随地用另一台电脑继续开发。ROS2 环境本身不值钱重装一遍顶多一小时但你写了几周的功能包才是真正有价值的东西别让它们只留在虚拟机里。
阅读完成 · 觉得有帮助?
咨询建站