文章目录
写于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 工具制作启动盘:
准备工作
备份重要数据
- 双系统安装可能涉及磁盘分区操作,建议提前备份 Windows 中的重要文件。
准备工具
- 一个至少 8GB 的空U盘(制作启动盘会清空所有数据)。
- 下载 Ubuntu 22.04 LTS ISO-https://ubuntu.com/download/desktop。
- 国内镜像:
镜像名称 | 镜像地址 | 备注 |
---|---|---|
网易镜像 | 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/ | 上海骨干网接入 |
- 下载 Rufus 工具-https://rufus.ie/)(建议最新版本)。
分配磁盘空间(可选) 如果磁盘足够,新版本ubuntu会在安装时,自行规划,也可自行配置,但一定要保证有足够的空间。
- 在 Windows 中打开 磁盘管理(Win+X → 磁盘管理)。
- 右键点击一个分区(如
C:
),选择 压缩卷,分配至少 50GB 未分配空间(后续安装 Ubuntu 用)。
取消磁盘加密(关闭BitLocker)
常规关闭方法:
- 打开控制面板 → 进入"BitLocker驱动器加密"
- 找到需要解密的驱动器,点击"关闭BitLocker"
- 等待解密完成(时间取决于数据量)
快速关闭方法(Win10/11):
- 按Win+I打开设置 → 隐私和安全性 → 设备加密
- 直接点击"关闭"按钮
命令行方法(管理员权限):
- 以管理员身份运行CMD/PowerShell
- 输入:
manage-bde -off C:
(C:为需要解密的盘符) - 查看进度:
manage-bde -status
步骤 1:使用 Rufus 制作 Ubuntu 启动盘
- 插入U盘,以管理员身份运行 Rufus。
- 设备选择:你的U盘(确认无误,数据会被清空)。
- 镜像选择:点击 选择,找到下载的 Ubuntu 22.04 ISO 文件。
- 分区类型:
- UEFI 电脑:选择
GPT
+FAT32
。 - 传统 Legacy BIOS 电脑:选择
MBR
+FAT32
(现代电脑通常为 UEFI)。
- UEFI 电脑:选择
- 其他选项保持默认,点击 开始 → 确认警告 → 等待完成(约5-10分钟)。
步骤 2:设置 BIOS/UEFI 启动项
- 重启电脑,在启动时狂按 F2/F12/Del(具体键因品牌而异)进入 BIOS。
- 关键设置:
- 关闭 Secure Boot(Ubuntu 支持但可能需额外驱动)。
- 确保 UEFI 模式 开启(如使用 GPT 分区)。
- 保存设置并退出(通常按 F10)。
步骤 3:安装 Ubuntu 22.04
启动安装程序
- 从U盘启动后,选择 Try or Install Ubuntu → 进入试用桌面后双击 Install Ubuntu。
语言和键盘布局
- 选择语言 → 继续 → 键盘布局默认(英语或中文)。
网络连接(可选)
- 可连接Wi-Fi,便于安装更新和第三方驱动。
安装类型
- 重要!选择“安装类型”:
- 双系统共存:勾选
Install Ubuntu alongside Windows Boot Manager
(自动分配空间)。 - 手动分区(推荐高级用户):
- 选择之前分配的 未分配空间 → 点击
+
创建分区:/
(根分区):至少 30GB,类型ext4
。swap
(交换空间):内存大小的 1-2倍(可选)。/home
(用户文件):剩余空间,类型ext4
(可选)。
- 启动引导器位置:选择 EFI 分区(通常为
/dev/sda
或/dev/nvme0n1
的efi
分区)。
- 选择之前分配的 未分配空间 → 点击
- 双系统共存:勾选
- 重要!选择“安装类型”:
时区和用户设置
- 选择时区(如 Shanghai)→ 输入用户名和密码。
开始安装
- 点击 安装 → 等待完成(约15-30分钟)。
重启
- 提示拔出U盘后重启,此时会进入 GRUB 引导菜单,可选择启动 Ubuntu 或 Windows。
步骤 4:后续配置
更新系统
- 打开终端(Ctrl+Alt+T),运行:
sudo apt update && sudo apt upgrade -y
- 打开终端(Ctrl+Alt+T),运行:
修复引导问题(如 Windows 不显示)
- 在 Ubuntu 终端执行:
sudo update-grub
- 在 Ubuntu 终端执行:
驱动管理
- 打开 软件和更新 → 附加驱动,安装推荐显卡/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
一、准备工作
- 系统更新
在开始安装之前,确保你的 Ubuntu 22.04 系统是最新的。打开终端并运行以下命令:
sudo apt update
sudo apt upgrade -y
- 设置密钥和源
为了安装 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安装重复。
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
- 配置 UTF-8 区域设置:
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
- 通过第三方源安装(非官方维护但兼容 Ubuntu 22.04):
终端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 桥接配置
编译 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
- 创建工作空间并克隆扩展仓库(支持更多消息类型):
运行桥接
- 启动核心服务:
# 终端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
- 启动核心服务:
参考链接
- 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
- 官方ROS Bridge-https://carla.readthedocs.io/projects/ros-bridge/en/latest/ros_installation_ros2/
- ros2 humble install-https://blog.csdn.net/weixin_55944949/article/details/140373710
- https://docs.ros.org/en/humble/How-To-Guides/Using-ros1_bridge-Jammy-upstream.html
- 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
- ros-官方-https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
- 小鱼安装-https://blog.csdn.net/weixin_55944949/article/details/140373710
- 简洁版-https://blog.csdn.net/weixin_44197671