VMware虚拟机搭建ROS2开发环境:Ubuntu 24.04 + ROS2 Jazzy完整指南
导读:本文详细介绍在Windows 10上通过VMware虚拟机安装Ubuntu 24.04并配置ROS2 Jazzy开发环境的完整流程,适合零基础新手按步骤操作。涵盖虚拟机创建、Ubuntu安装、ROS2配置、国内源替换、SSH远程连接等核心技能。
原理简析
为什么选择VMware而非WSL2
Windows开发ROS2有两条主流路线:WSL2和VMware虚拟机。WSL2是Windows原生Linux子系统,资源占用更少、与Windows交互更便捷;VMware是成熟虚拟机方案,隔离性好、可快照、可分配独立IP。经过实际验证,VMware方案更稳定可靠,SSH远程连接配置简单,适合长期开发环境。
ROS2版本选择:为什么是Jazzy而非Humble
ROS2有两个LTS版本值得关注:Humble(Ubuntu 22.04支持)和Jazzy(Ubuntu 24.04支持)。用户虚拟机安装的是Ubuntu 24.04,而Ubuntu 24.04 (Noble) 只被ROS2 Jazzy官方支持,Humble不兼容。ROS2 Jazzy是2024年5月发布的最新LTS版本,官方支持周期至2029年。
网络问题:国内源的重要性
ROS2桌面版包含789个软件包,总下载量约538MB。使用官方源(packages.ros.org)在国内下载速度极慢,实测仅39.4 kB/s。本文采用清华TUNA镜像源,下载速度提升数倍,大幅缩短安装时间。
实操步骤
1. VMware虚拟机创建与Ubuntu 24.04安装
虚拟机配置要求:
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| 内存 | 4GB | 8GB |
| 处理器 | 2核 | 4核 |
| 磁盘 | 50GB | 80GB |
| 网络 | NAT | NAT/桥接 |
安装步骤:
- 下载Ubuntu 24.04 LTS镜像:Ubuntu官网
- VMware中创建新虚拟机,选择「典型」配置
- 加载ISO镜像文件,启动虚拟机进入Ubuntu安装界面
- 分区选择「整个磁盘」,注意开启SSH服务器
- 安装完成后重启,记录用户名密码(本文使用hello/hello)
2. 配置SSH远程连接(可选但推荐)
SSH远程连接让你可以在Windows终端中操作虚拟机,便于复制粘贴命令。
# 在Ubuntu虚拟机终端中安装并启动SSH服务
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
# 查看虚拟机IP地址
hostname -I
Windows端配置公钥免密登录:
# Windows PowerShell中生成SSH密钥
ssh-keygen -t ed25519 -C "hello@ros2-dev"
# 将公钥复制到虚拟机
ssh-copy-id hello@虚拟机IP地址
3. 配置sudo免密码(便于自动化操作)
# 在虚拟机终端中执行
echo "hello ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/hello
4. 清理并更新系统
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock /var/cache/apt/archives/lock
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo apt update
5. 添加ROS2软件源(清华TUNA镜像)
ROS2的GPG密钥和软件源配置是安装的核心步骤,必须严格按顺序执行。
# 创建密钥存放目录
sudo mkdir -p /usr/share/keyrings
# 下载并导入ROS2 GPG密钥(使用batch模式避免交互)
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/ros-archive-keyring.gpg
# 获取系统代号并添加软件源
CODENAME=$(lsb_release -cs)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu ${CODENAME} main" | sudo tee /etc/apt/sources.list.d/ros2.list
# 更新软件包列表
sudo apt update
6. 安装ROS2 Jazzy Desktop
这是安装过程中最耗时的步骤,约需30-60分钟,取决于网络速度。
# 安装ROS2桌面版(含RViz、Gazebo、demo节点等)
sudo apt install -y ros-jazzy-desktop
# 安装完成后清理锁文件(防止后续操作被阻塞)
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
sudo dpkg --configure -a
7. 安装构建工具
sudo apt install -y python3-colcon-common-extensions python3-rosdep
8. 初始化rosdep
rosdep是ROS2的依赖管理工具,用于解析包依赖关系。
sudo rosdep init
rosdep update
9. 创建ROS2工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
10. 配置环境变量(永久生效)
echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc
source ~/.bashrc
代码实现
Talker-CPP示例(发布者节点)
// ros2_ws/src/demo_nodes_cpp/src/talker.cpp
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
using namespace std::chrono_literals;
class Talker : public rclcpp::Node
{
public:
Talker() : Node("talker"), count_(0)
{
publisher_ = this->create_publisher<std_msgs::msg::String>("chatter", 10);
timer_ = this->create_wall_timer(1s, [this]() {
auto msg = std_msgs::msg::String();
msg.data = "Hello ROS2 Jazzy! " + std::to_string(count_++);
RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", msg.data.c_str());
publisher_->publish(msg);
});
}
private:
rclcpp::TimerBase::SharedPtr timer_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
size_t count_;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<Talker>());
rclcpp::shutdown();
return 0;
}
Listener-CPP示例(订阅者节点)
// ros2_ws/src/demo_nodes_cpp/src/listener.cpp
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
using namespace std::chrono_literals;
class Listener : public rclcpp::Node
{
public:
Listener() : Node("listener")
{
subscription_ = this->create_subscription<std_msgs::msg::String>(
"chatter", 10, [this](const std_msgs::msg::String::SharedPtr msg) {
RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
});
}
private:
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<Listener>());
rclcpp::shutdown();
return 0;
}
编译配置(package.xml)
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd"?>
<package format="3">
<name>demo_nodes_cpp</name>
<version>0.1.0</version>
<description>Demo nodes for ROS2</description>
<maintainer email="hello@todo.com">hello</maintainer>
<license>Apache-2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>std_msgs</depend>
<export></export>
</package>
编译运行命令
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select demo_nodes_cpp
source install/setup.bash
# 终端1:运行发布者
ros2 run demo_nodes_cpp talker
# 终端2:运行订阅者
ros2 run demo_nodes_cpp listener
常见问题解决
Q1:apt报错"No Pubkey"或签名验证失败?
这是GPG密钥配置问题。确保使用--batch --yes参数导入密钥,避免交互式提示。如果之前导入失败,先删除旧密钥文件再重新导入:
sudo rm -f /usr/share/keyrings/ros-archive-keyring.gpg
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/ros-archive-keyring.gpg
Q2:dpkg锁定导致安装失败?
旧进程占用锁文件导致。强制清理:
sudo killall apt apt-get dpkg
sudo rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock /var/cache/apt/archives/lock
sudo dpkg --configure -a
Q3:SSH连接虚拟机失败?
检查SSH服务状态并重启:
sudo systemctl status ssh
sudo systemctl restart ssh
sudo ufw allow 22
总结
本文详细介绍了在VMware虚拟机中搭建ROS2 Jazzy开发环境的核心流程,涵盖Ubuntu 24.04系统配置、软件源替换、ROS2安装、SSH远程连接等关键步骤。值得注意的是,Ubuntu 24.04只兼容ROS2 Jazzy版本,安装时需注意版本匹配。国内清华镜像源可大幅提升下载速度,建议优先使用。完成上述配置后,你可以在Windows宿主机上通过SSH远程开发,或者在虚拟机中直接运行RViz、Gazebo等可视化工具进行机器人仿真开发。
(ROS2:我全都要.jpg)
字数:约1800字 | 完成日期:2026-04-26