windows11 + ubuntu2204双系统+ros2 humble安装

发布于:2025-06-22 ⋅ 阅读:(22) ⋅ 点赞:(0)


写于2025.06,当前ubuntu 20.04的各方面支持更加全面一点,如对ROS1和2都有良好的兼容性。如从ros bridge便能够表现出系统对包的支持。但是新的系统对新的硬件的支持更好,以及有更长的支持,在后期对新包的支持也会更好一点。

Ubuntu Version Supported ROS 1 Versions Supported ROS 2 Versions ros1_bridge Support
20.04 (Focal) Noetic Ninjemys Foxy Fitzroy (EOL), Galactic Geochelone (EOL), Humble Hawksbill ✅ Full support
22.04 (Jammy) ⚠️ Partial (unsupported officially) Humble Hawksbill, Iron Irwini ⚠️ Requires building from source
24.04 (Noble) ❌ Not available Jazzy Jalisco, Kilted Kaiju ❌ Not supported

本文将介绍ubuntu 2204的安装及ROS2 Humble版本的安装。


win11 + ubuntu22 双系统

以下是在 Windows 11 基础上安装 Ubuntu 22.04 LTS 的双系统详细指南,使用 Rufus 工具制作启动盘:


准备工作

  1. 备份重要数据

    • 双系统安装可能涉及磁盘分区操作,建议提前备份 Windows 中的重要文件。
  2. 准备工具

镜像名称 镜像地址 备注
网易镜像 http://mirrors.163.com/ubuntu-releases/ 覆盖主流版本
中科大镜像 http://mirrors.ustc.edu.cn/ubuntu-releases/ 更新及时,支持IPv6
阿里云镜像 http://mirrors.aliyun.com/ubuntu-releases/ 企业级CDN加速
清华大学镜像 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 教育网优化
北京理工大学镜像 http://mirror.bit.edu.cn/ubuntu-releases/ 北方用户推荐
浙江大学镜像 http://mirrors.zju.edu.cn/ubuntu-releases/ 华东地区节点
南京大学镜像 https://mirror.nju.edu.cn/ubuntu-releases/ 新增科学中心节点
上海交通大学镜像 http://ftp.sjtu.edu.cn/ubuntu-releases/ 上海骨干网接入
  1. 分配磁盘空间(可选) 如果磁盘足够,新版本ubuntu会在安装时,自行规划,也可自行配置,但一定要保证有足够的空间。

    • 在 Windows 中打开 磁盘管理(Win+X → 磁盘管理)。
    • 右键点击一个分区(如 C:),选择 压缩卷,分配至少 50GB 未分配空间(后续安装 Ubuntu 用)。
  2. 取消磁盘加密(关闭BitLocker)

  • 常规关闭方法

    • 打开控制面板 → 进入"BitLocker驱动器加密"
    • 找到需要解密的驱动器,点击"关闭BitLocker"
    • 等待解密完成(时间取决于数据量)
  • 快速关闭方法(Win10/11)

    • 按Win+I打开设置 → 隐私和安全性 → 设备加密
    • 直接点击"关闭"按钮
  • 命令行方法(管理员权限)

    • 以管理员身份运行CMD/PowerShell
    • 输入:manage-bde -off C:(C:为需要解密的盘符)
    • 查看进度:manage-bde -status

步骤 1:使用 Rufus 制作 Ubuntu 启动盘

  1. 插入U盘,以管理员身份运行 Rufus
  2. 设备选择:你的U盘(确认无误,数据会被清空)。
  3. 镜像选择:点击 选择,找到下载的 Ubuntu 22.04 ISO 文件。
  4. 分区类型:
    • UEFI 电脑:选择 GPT + FAT32
    • 传统 Legacy BIOS 电脑:选择 MBR + FAT32(现代电脑通常为 UEFI)。
  5. 其他选项保持默认,点击 开始 → 确认警告 → 等待完成(约5-10分钟)。

步骤 2:设置 BIOS/UEFI 启动项

  1. 重启电脑,在启动时狂按 F2/F12/Del(具体键因品牌而异)进入 BIOS。
  2. 关键设置:
    • 关闭 Secure Boot(Ubuntu 支持但可能需额外驱动)。
    • 确保 UEFI 模式 开启(如使用 GPT 分区)。
  3. 保存设置并退出(通常按 F10)。

步骤 3:安装 Ubuntu 22.04

  1. 启动安装程序

    • 从U盘启动后,选择 Try or Install Ubuntu → 进入试用桌面后双击 Install Ubuntu
  2. 语言和键盘布局

    • 选择语言 → 继续 → 键盘布局默认(英语或中文)。
  3. 网络连接(可选)

    • 可连接Wi-Fi,便于安装更新和第三方驱动。
  4. 安装类型

    • 重要!选择“安装类型”
      • 双系统共存:勾选 Install Ubuntu alongside Windows Boot Manager(自动分配空间)。
      • 手动分区(推荐高级用户):
        • 选择之前分配的 未分配空间 → 点击 + 创建分区:
          • /(根分区):至少 30GB,类型 ext4
          • swap(交换空间):内存大小的 1-2倍(可选)。
          • /home(用户文件):剩余空间,类型 ext4(可选)。
        • 启动引导器位置:选择 EFI 分区(通常为 /dev/sda/dev/nvme0n1efi 分区)。
  5. 时区和用户设置

    • 选择时区(如 Shanghai)→ 输入用户名和密码。
  6. 开始安装

    • 点击 安装 → 等待完成(约15-30分钟)。
  7. 重启

    • 提示拔出U盘后重启,此时会进入 GRUB 引导菜单,可选择启动 Ubuntu 或 Windows。

步骤 4:后续配置

  1. 更新系统

    • 打开终端(Ctrl+Alt+T),运行:
      sudo apt update && sudo apt upgrade -y
      
  2. 修复引导问题(如 Windows 不显示)

    • 在 Ubuntu 终端执行:
      sudo update-grub
      
  3. 驱动管理

    • 打开 软件和更新附加驱动,安装推荐显卡/Wi-Fi驱动。

常见问题

  • 无法识别 Windows 分区:确保 Windows 为 正常关机(非快速启动)。
  • UEFI/GPT 错误:确认 Rufus 设置与 BIOS 模式匹配(UEFI → GPT)。
  • 磁盘空间不足:在 Windows 中压缩更多空间后,用 Ubuntu 安装器的 Something else 选项调整分区。
  • try and install Ubuntu 后黑屏可能是由于硬件如显卡比较新,导致驱动不兼容问题。可以选择第三行,使用兼容模式启动,然后安装。

ROS2 Humble 安装

确保系统区域支持UTF-8编码:

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.

确保系统安装了ubuntu的官方源

sudo apt install software-properties-common
sudo add-apt-repository universe

一、准备工作

  1. 系统更新

在开始安装之前,确保你的 Ubuntu 22.04 系统是最新的。打开终端并运行以下命令:

sudo apt update
sudo apt upgrade -y
  1. 设置密钥和源

为了安装 ROS 2 Humble,首先,导入 ROS 2 的 GPG 密钥:

#官方key,公钥可能会变,可以查最新官网去拉
#官方地址:ttps://github.com/ros-infrastructure/ros-apt-source
#以下是个人拷贝
sudo curl -sSL https://gitee.com/nie_xun/ros-apt-source/tree/1.1.0/ros-apt-source/keys/ros-archive-keyring.gpg 
-o /usr/share/keyrings/ros-archive-keyring.gpg

然后,添加 ROS 2 Humble 存储库到你的 sources.list.d 目录:以下二者选其一。

#官方
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

#清华:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

二、安装 ROS 2

1. 安装依赖项

在安装 ROS 2 之前,你需要安装一些依赖项:

sudo apt update
sudo apt install -y curl python3-rosdep python3-rosinstall python3-rosinstall-generator python3-vcstool build-essential cmake git

2. 初始化 rosdep

rosdep 是一个工具,它可以帮助你安装 ROS 包所依赖的系统库。初始化 rosdep:

sudo rosdep init
rosdep update

如果rosdep不成功,则需要对应修改:参考小鱼的安装,或直接使用他的脚本直接更改。

sudo gedit /usr/lib/python3/dist-packages/rosdep2/sources_list.py
# 在大概64行 修改 DEFAULT_SOURCES_LIST_URL = 'https://gitee.com/tyx6/mytools/raw/main/ros/20-default.list'

sudo gedit /usr/lib/python3/dist-packages/rosdistro/__init__.py
# 大概在68行的地址

sudo gedit /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
# 大概在34行的地址
 
sudo gedit /usr/lib/python3/dist-packages/rosdep2/rep3.py
# 大概在36行的地址

使用如下脚本内容更改:

#!/usr/bin/python3 python3
# -*- coding:utf-8 -*-
# @FileName  :Mrosdep.py
# @Author    :TFly
import os
import subprocess
from colorama import Fore,Style

url = "https://gitee.com/tyx6/rosdistro/raw/master"
url_list = "https://gitee.com/tyx6/mytools/raw/main/ros/20-default.list" 
ros_distros = ['kinetic', 'melodic', 'noetic', 'foxy', 'galactic', 'humble', 'iron', 'rolling']

def find_ros_setup_script():
    #ros_distros = ['melodic', 'noetic']
    for distro in ros_distros:
        setup_script = f"/opt/ros/{distro}/setup.bash"
        if os.path.exists(setup_script):
            return setup_script
    return None

def get_ros_version():
    try:
        ros_setup_script = find_ros_setup_script()
        if not ros_setup_script:
            print("ROS setup script not found.")
            return None

        command = f"source {ros_setup_script} && echo $ROS_DISTRO"
        ros_version = subprocess.check_output(['bash', '-c', command], universal_newlines=True).strip()
        return ros_version
    except subprocess.CalledProcessError as e:
        print(f"An error occurred while getting ROS version: {e}")
        return None

def rep(data):
    flag_list = data.find("https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list")
    if flag_list != -1:
        data = data.replace("https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list",url_list)

    flag = data.find("https://raw.githubusercontent.com/ros/rosdistro/master")
    flag1 = data.find("FUERTE_GBPDISTRO_URL = \'https://raw.githubusercontent.com/ros/rosdistro")
    flag2 = data.find("master/releases/fuerte.yaml")
    if flag != -1:
        data = data.replace("https://raw.githubusercontent.com/ros/rosdistro/master", url)
    if flag1 != -1:
        data = data.replace("https://raw.githubusercontent.com/ros/rosdistro",url)
    if flag2 != -1:
        data = data.replace("master/releases/fuerte.yaml","releases/fuerte.yaml")
    
    return data

def re_files(fileName):
    try:
        con = ""
        with open(fileName,'r') as fp:
            con = fp.readlines()
            for i in range(0,len(con)):
                con[i] = rep(con[i])

        with open(fileName,'w+') as fp:
            for str1 in con:
                fp.write(str1)
    except FileNotFoundError:
        print(fileName+'not found')
    else:
        print(fileName+' is ok')


if __name__ == '__main__':
    print(Fore.GREEN + '欢迎使用脚本,本脚本适用于ROS1、ROS2.\n'+
            'Test: ROS1 Melodic、ROS2 Noetic、ROS2 Humble' + Style.RESET_ALL)
    version = get_ros_version()

    if version not in ros_distros :
        print(Fore.RED + "不支持此版本、或版本获取失败!"+ Style.RESET_ALL)
    else:
        print(Fore.GREEN + "The ROS version is: " + version + Style.RESET_ALL)
        fileName = []

        if version == 'melodic' :
            fileName = ['/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py',
                    '/usr/lib/python2.7/dist-packages/rosdistro/__init__.py',
                    '/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py',
                    '/usr/lib/python2.7/dist-packages/rosdep2/rep3.py']
        else:
            fileName = ['/usr/lib/python3/dist-packages/rosdep2/sources_list.py',
                    '/usr/lib/python3/dist-packages/rosdistro/__init__.py',
                    '/usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py',
                    '/usr/lib/python3/dist-packages/rosdep2/rep3.py']

            

        for name in fileName:
            re_files(name)

        print("修改成功!请执行下面命令:\n"+
                "sudo rosdep init\n"+
                "rosdep update")

3. 安装 ROS 2 核心包

现在,你可以安装 ROS 2 Humble 的核心包了:

sudo apt install -y ros-humble-desktop

这将安装 ROS 2 的核心功能,包括 RCL、RMW 实现、各种工具和示例节点。

三、设置环境变量

为了使 ROS 2 的命令和包在你的终端中可用,你需要将 ROS 2 的安装目录添加到你的 PATH 和 LD_LIBRARY_PATH 环境变量中。这通常通过在你的 shell 配置文件中添加以下行来完成(例如,~/.bashrc 或 ~/.zshrc):

source /opt/ros/humble/setup.bash

添加后,运行以下命令使更改生效:

source ~/.bashrc  # 或者 ~/.zshrc,取决于你使用的 shell

四、验证安装

为了验证 ROS 2 是否正确安装,你可以运行以下命令来检查 ROS 2 版本并启动一个简单的示例节点:

ros2 --version
ros2 node list  # 在另一个终端中运行一个 ROS 2 节点后再检查这个命令的输出

如果你还没有运行任何 ROS 2 节点,ros2 node list 命令可能不会返回任何内容。为了测试,你可以启动一个简单的 “talker” 和 “listener” 节点,它们是 ROS 2 教程中的示例节点。首先,确保你已经安装了 ros2-examples 包:

sudo apt install -y ros-humble-examples-rclcpp-minimal

然后,在两个不同的终端中分别运行以下命令:

# 在第一个终端中运行 talker 节点
ros2 run examples_rclcpp_minimal_talker talker
# 在第二个终端中运行 listener 节点
ros2 run examples_rclcpp_minimal_listener listener

自此,ROS2 Humble 安装完成。


ROS2 humble & ROS1 noetic

以下是针对 Ubuntu 22.04 Jammy Jellyfish 系统实现 ROS 2 Humble 与 ROS 1 通信部署:

ROS 1 & 2 安装

与前文humble安装重复。

  1. ROS 2 Humble 安装

    • 配置 UTF-8 区域设置:
      sudo apt update && sudo apt install locales && sudo locale-gen en_US en_US.UTF-8
    • 添加 ROS 2 仓库与 GPG 密钥(推荐国内镜像加速):
      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] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
      sudo apt update
      sudo apt install ros-humble-desktop  # 或 ros-humble-ros-base
      
  2. ROS 1 Noetic 安装

    • 通过第三方源安装(非官方维护但兼容 Ubuntu 22.04):
      echo "deb [trusted=yes arch=amd64] http://deb.repo.autolabor.com.cn jammy main" | sudo tee /etc/apt/sources.list.d/autolabor.list
      sudo apt update && sudo apt install ros-noetic-autolabor
      
      验证:source /opt/ros/noetic/setup.bash && roscore
  3. 终端ROS环境配置
    可以使用如下配置,打开终端,输入1则配置ROS1环境,输入2则配置ROS2环境。其他数字,则先source ROS1 后source ROS2。
    vim/gedit 添加到~/.bashrc最后。

    echo "ros noetic(1) or ros2 humble(2) or ros12(Other number)?"
    read edition
    if [ "$edition" -eq "1" ]; then
        source /opt/ros/noetic/setup.bash
    else if [ "$edition" -eq "2" ]; then
        source /opt/ros/humble/setup.bash
    else
        source /opt/ros/noetic/setup.bash
        source /opt/ros/humble/setup.bash
    fi
    

ROS 2 ↔ ROS 1 桥接配置

  1. 编译 ros1_bridge

    • 创建工作空间并克隆扩展仓库(支持更多消息类型):
      mkdir -p ros_bridge_ws/src && cd ros_bridge_ws/src
      git clone https://github.com/smith-doug/ros1_bridge.git # 社区维护版本
      
    • 关键编译步骤
      cd .. && colcon build --symlink-install --packages-skip ros1_bridge
      source /opt/ros/noetic/setup.sh     # 加载 ROS1 环境
      source /opt/ros/humble/setup.sh     # 加载 ROS2 环境
      #colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure
      colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Releas
      
      注意:必须先单独编译其他包,再加载双环境编译桥接包
  2. 运行桥接

    • 启动核心服务:
      # 终端1: 启动 ROS1 roscore
      source /opt/ros/noetic/setup.sh && roscore
      # 终端2: 启动 ROS2 守护进程
      source /opt/ros/humble/setup.sh && ros2 daemon start
      # 终端3: 运行桥接
      source ros_bridge_ws/install/setup.sh
      ros2 run ros1_bridge dynamic_bridge
      
    • 验证通信:
      • ROS1终端1 发布话题:
      rosrun rospy_tutorials talker
      
      • ROS2终端2 接收:
      ros2 run demo_nodes_cpp listener
      

参考链接

  1. fishros-ROS1&ROS2共存-https://fishros.org.cn/forum/topic/3943/ubuntu22-04%E4%B8%8B%E5%A6%82%E4%BD%95ros2-humble%E5%92%8C-ros1-%E5%85%B1%E5%AD%98/2
  2. 官方ROS Bridge-https://carla.readthedocs.io/projects/ros-bridge/en/latest/ros_installation_ros2/
  3. ros2 humble install-https://blog.csdn.net/weixin_55944949/article/details/140373710
  4. https://docs.ros.org/en/humble/How-To-Guides/Using-ros1_bridge-Jammy-upstream.html
  5. fishros-端口映射https://fishros.org.cn/forum/topic/2811/ros2-humble-docker-%E7%9A%84%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84%E9%97%AE%E9%A2%98
  6. ros-官方-https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
  7. 小鱼安装-https://blog.csdn.net/weixin_55944949/article/details/140373710
  8. 简洁版-https://blog.csdn.net/weixin_44197671