ESC
输入关键词搜索文章标题和内容

VMware虚拟机搭建ROS2开发环境:Ubuntu 24.04 + ROS2 Jazzy完整指南

本文由 linuxROS 整理发布,首发于 linuxros.cn,转载请注明出处。

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年。

flowchart LR A[Windows 10] --> B[VMware Workstation] B --> C[Ubuntu 24.04 LTS] C --> D[ROS2 Jazzy] D --> E[RViz2/Gazebo] D --> F[demo_nodes_cpp]

网络问题:国内源的重要性

ROS2桌面版包含789个软件包,总下载量约538MB。使用官方源(packages.ros.org)在国内下载速度极慢,实测仅39.4 kB/s。本文采用清华TUNA镜像源,下载速度提升数倍,大幅缩短安装时间。


实操步骤

1. VMware虚拟机创建与Ubuntu 24.04安装

虚拟机配置要求:

配置项 最低要求 推荐配置
内存 4GB 8GB
处理器 2核 4核
磁盘 50GB 80GB
网络 NAT NAT/桥接

安装步骤:

  1. 下载Ubuntu 24.04 LTS镜像:Ubuntu官网
  2. VMware中创建新虚拟机,选择「典型」配置
  3. 加载ISO镜像文件,启动虚拟机进入Ubuntu安装界面
  4. 分区选择「整个磁盘」,注意开启SSH服务器
  5. 安装完成后重启,记录用户名密码(本文使用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分钟,取决于网络速度。

来自 linuxros.cn · linuxROS
# 安装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

版权声明

作者linuxROS
协议本作品采用 CC BY-NC-SA 4.0 许可协议:署名-非商业性使用-相同方式共享
关注欢迎关注微信公众号 linuxROS,获取更多机器人 / 嵌入式 / Linux 干货
返回首页