虚拟机开发ROS完全可行,关键是选对虚拟机配置、装对Ubuntu和ROS版本,再处理透传与网络问题,就能稳定跑完大部分入门到中级项目。
很多人纠结要不要为了ROS装双系统,其实虚拟机在Windows上开发ROS已经很成熟,下面按实操顺序,把关键步骤和坑点一次说清。
虚拟机开发ROS需要什么配置?
虚拟机开发ROS不是随便一台电脑就能流畅跑的,ROS本身吃内存,编译过程吃CPU,而虚拟机还要额外分配资源给宿主机,配置不够,光启动Ubuntu都卡。
CPU与内存底线
- CPU:必须支持虚拟化技术,开机进入BIOS打开Intel VT-x或AMD-V,没有这个开关,VMware直接拒绝安装64位系统。
- 内存:宿主机至少16GB,虚拟机分配8GB以上,编译ROS包时内存吃紧,swap会狂写,导致系统接近假死。
- 磁盘:建议预留80GB以上空间,优先用固态硬盘,ROS安装加依赖,再加上编译缓存,20GB根本不够用。
显卡与3D加速
默认的虚拟机显卡只能提供基础显示能力,运行RViz时帧率很低,解决办法是VMware虚拟机设置里开启“加速3D图形”,Ubuntu安装open-vm-tools-desktop包,即便如此,复杂点云可视化依然吃力,这一步要心里有数。
虚拟机ROS开发环境搭建教程
整个搭建流程分四步:装虚拟机、装Ubuntu、装VMware Tools、装ROS,每一步都有容易踩的坑。
第一步:创建虚拟机
- 下载VMware Workstation Pro,装好后新建虚拟机。
- 选择“典型”安装,镜像文件选Ubuntu 20.04或22.04的ISO。
- 客户机操作系统选“Ubuntu 64位”。
- 内存设置8GB,处理器数量2,每个处理器核心数2。
- 磁盘设80GB,选择“将虚拟磁盘拆分成多个文件”,方便迁移备份。
第二步:安装Ubuntu最小系统
启动虚拟机,进入Ubuntu安装界面,分区时直接用“清除整个磁盘”方案,不用手动分区,安装过程中不要联网更新,否则耗时极长,装完进入系统后,先执行:
sudo apt update && sudo apt upgrade -y
第三步:安装VMware Tools
新版本VMware集成的是open-vm-tools,在Ubuntu终端执行:
sudo apt install open-vm-tools open-vm-tools-desktop -y
装完重启,共享文件夹、剪贴板、自适应分辨率才能用,不装这一步,虚拟机和Windows之间复制文件都费劲。
第四步:安装ROS
Ubuntu 20.04对应ROS Noetic,Ubuntu 22.04对应ROS Humble,以Noetic为例:
添加源和密钥:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update
安装完整桌面版:
sudo apt install ros-noetic-desktop-full -y
配置环境变量:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
测试ROS:
roscore
看到日志输出正常,环境就搭好了。
虚拟机装ROS和双系统哪个好?
这是新手问得最多的问题,两者各有优势,取决于你打算拿ROS做什么。
| 对比项 | 虚拟机开发ROS | 双系统开发ROS |
|---|---|---|
| 安装难度 | 低,全程鼠标操作 | 中,需要分区和引导配置 |
| 系统资源 | 共享宿主机,性能损失较大 | 独占硬件,性能接近原生 |
| 使用场景 | 同时用Windows和Linux | 专注Linux开发,不切换 |
| 图形性能 | RViz和Gazebo卡顿明显 | 可流畅运行3D仿真 |
| 硬件访问 | USB和串口透传麻烦 | 直接访问所有硬件 |
| 开发成本 | 无需额外硬件 | 需要单独磁盘空间 |
如果你想一边查资料一边写代码,或者主要做ROS功能包开发和算法验证,虚拟机更省心,但如果你要做激光雷达、深度相机、MoveIt机械臂仿真,双系统优势明显,虚拟机容易卡到你怀疑人生。
行业共识认为,初学者先用虚拟机跑通ROS的发布订阅、服务、TF坐标变换这些基础,之后再根据实机需求切换到双系统,学习曲线最平滑。
虚拟机开发ROS性能怎么样?
性能是虚拟机最大的短板,但并非无解,多数情况下,CPU密集型测试在虚拟机上会损失20%到40%性能,编译大型工程时尤其明显,不过对于ROS入门和中小型项目,这个损失完全能接受。
常见的性能瓶颈
- 编译慢:catkin_make或colcon build时CPU占用高,虚拟机调度开销大。
- 图形卡顿:RViz显示PointCloud2时帧率个位数。
- 实时性差:虚拟机不能保证实时时钟,跑cartographer建图会出现漂移。
缓解方案
- 使用
catkin build替代catkin_make,支持并行编译,快不少。 - 将虚拟机处理器核数设为宿主机一半,避免资源抢占。
- 关闭Ubuntu动画特效,减少显卡负担。
- 把Gazebo的
~/.gazebo目录放到固态硬盘上的虚拟磁盘中。
业内专家指出,虚拟机性能损失主要集中在存储和GPU,纯计算任务只要分配足够资源,差距并不大,很多老玩家直接拿虚拟机跑室内小范围建图,效果照样不错。
虚拟机开发ROS的注意事项
除了性能,还有三个高频坑,不注意的话,等插上设备才发现不能用,会很崩溃。
USB相机和激光雷达透传
虚拟机默认不识别宿主机上的USB设备,需要先安装open-vm-tools,然后在VMware菜单栏选“虚拟机”->“可移动设备”,把相机或雷达从Windows“断开”连接到Ubuntu,这一步经常出现设备占用,先在Windows端退出所有访问该设备的软件。
对于串口设备,连接后执行:
ls /dev/ttyUSB
如果出现设备节点,配置权限:
sudo usermod -aG dialout $USER
注销重新登录后,才能用serial包读取数据。
网络模式选择
VMware有三种网络模式,ROS开发中常用桥接和NAT。
- 桥接模式:虚拟机拥有局域网独立IP,宿主机和虚拟机可以互访,也能连接局域网内的ROS机器人,需要与机器人同一网段。
- NAT模式:虚拟机共享宿主机IP,能联网但外部设备无法主动连接它,适合单机测试。
做ROS多机通信时,必须在桥接模式下,且两台机器的ROS_MASTER_URI要指向同一主机,检查命令:
ifconfig
确认IP不是10.0.2.x开头,否则就是NAT模式。
共享文件夹和代码同步
用VMware共享文件夹功能,把Windows代码目录映射到Ubuntu的/mnt/hgfs下,但有一个坑:直接在共享文件夹里编译ROS工程,文件锁和符号链接可能报错,正确做法是复制到虚拟机内部路径再编译。
cp -r /mnt/hgfs/catkin_ws ~/catkin_ws cd ~/catkin_ws catkin_make
或者干脆用Git进行代码管理,在Windows写代码,在Ubuntu拉取镜像,避免同步问题。
虚拟机开发ROS常见问题解答
-
虚拟机里RViz卡顿很严重,怎么优化?
先确认虚拟机设置中已启用3D加速,Ubuntu安装open-vm-tools-desktop,然后降低RViz中的点云显示质量,比如减少点数、关闭网格,如果还是卡,只能减少仿真数据量,或者改用双系统。 -
虚拟机里为什么无法识别USB摄像头?
先检查VMware中是否将摄像头连接到虚拟机,再确认Ubuntu终端执行lsusb能否看到设备,如果看到设备但节点不存在,安装v4l2loopback驱动,部分老旧摄像头在虚拟机下不兼容,需要换主机测试。 -
ROS版本选择Noetic还是Humble?
如果你的Ubuntu版本是20.04,装Noetic;是22.04,装Humble,Noetic是最后一个支持Python2的ROS1版本,教程最多,适合学习,Humble是长期支持版ROS2,功能更强,适合准备做产品开发,虚拟机配置不高的话,建议先选Noetic,资源占用更低。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/928808.html


评论列表(3条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是虚拟机开发部分,给了我很多新的思路。感谢分享这么好的内容!
@brave306man:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是虚拟机开发部分,给了我很多新的思路。感谢分享这么好的内容!
@brave306man:读了这篇文章,我深有感触。作者对虚拟机开发的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!