windows11 + ubuntu2204双系统+ros2 humble安装
为了测试,你可以启动一个简单的 “talker” 和 “listener” 节点,它们是 ROS 2 教程中的示例节点。为了使 ROS 2 的命令和包在你的终端中可用,你需要将 ROS 2 的安装目录添加到你的 PATH 和 LD_LIBRARY_PATH 环境变量中。但是新的系统对新的硬件的支持更好,以及有更长的支持,在后期对新包的支持也会更好一点。(可选) 如果磁盘足够,新版本ubuntu会在
文章目录
写于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 终端执行:
-
驱动管理
- 打开 软件和更新 → 附加驱动(setting->Software update->Addtional drivers),安装推荐显卡/Wi-Fi驱动。
常见问题
国内镜像源
利用软件与更新更换
1、打开“系统设置(右上角的齿轮里或者启动器里)软件和更新”,如果没有更新过软件源,先设置更新软件源。
2、下载自:下拉框里选择 “其他站点” .可以选择右侧的的“选择最佳服务器”(但这样有时会选择国外的站点,所以推荐直接在左侧列表里选择中国的站点,点击china的下三角,就可以选择类似科大等等的源) 然后点击下面的 “选择服务器”。
3、关闭“软件和更新”窗口时,会弹出一个窗口,选择“重新加载”。然后会出现下面的“正在更新缓存”的窗口。等它更新完就行了。
这时候再使用sudo apt update便可以看到源已经更换了。
手动更换
以下是Ubuntu中文软件镜像源的官方网站地址列表,按机构类型分类整理,便于根据地理位置或网络环境选择:
大学教育网镜像源(适合教育网用户或高校环境)
- 清华大学镜像站
- 官网地址:https://mirrors.tuna.tsinghua.edu.cn/
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/给出使用说明。 - 特点:更新及时,覆盖全版本,提供详细配置指南。
- 官网地址:https://mirrors.tuna.tsinghua.edu.cn/
- 中国科学技术大学(USTC)镜像站
- 官网地址:https://mirrors.ustc.edu.cn/
- 特点:专注科研领域,支持IPv6,提供Ubuntu全系列镜像。
- 上海交通大学镜像站
- 官网地址:https://mirror.sjtu.edu.cn/
- 特点:华东地区访问速度快,支持多架构系统。
- 北京理工大学镜像站
- 官网地址:http://mirror.bit.edu.cn/
- 特点:北方用户延迟低,提供稳定服务。
企业云服务镜像源(适合普通用户及开发者)
- 阿里云开源镜像站
- 官网地址:https://mirrors.aliyun.com/
- 特点:CDN加速全国访问,支持自动脚本配置。
- 华为云开源镜像站
- 官网地址:https://mirrors.huaweicloud.com/
- 特点:企业级稳定性,集成容器镜像服务。
- 腾讯云软件源
- 官网地址:https://mirrors.cloud.tencent.com/
- 特点:华南地区优化,适合腾讯云服务器用户。
其他知名中文镜像源
- 网易163镜像站
- 官网地址:http://mirrors.163.com/
- 特点:电信线路优化,历史版本存档完整。
- 兰州大学开源镜像站
- 官网地址:http://mirror.lzu.edu.cn/
- 特点:西北地区节点,支持教育网直连。
配置建议
- 图形界面配置:Ubuntu系统内置“软件和更新”工具(
software-properties-gtk),可可视化切换镜像源。 - 命令行配置:编辑
/etc/apt/sources.list文件,替换为目标镜像源地址后执行sudo apt update生效。 - 验证完整性:下载后需校验ISO文件的SHA256值(官网提供),避免镜像篡改风险。
注:部分镜像站(如南京大学、华中科技大学)未提供独立官网,需通过子目录访问Ubuntu资源(例:南京大学镜像)。完整列表可参考清华大学镜像站帮助页或阿里云开发者社区文档。
各种
-
无法识别 Windows 分区:确保 Windows 为 正常关机(非快速启动)。
-
UEFI/GPT 错误:确认 Rufus 设置与 BIOS 模式匹配(UEFI → GPT)。
-
磁盘空间不足:在 Windows 中压缩更多空间后,用 Ubuntu 安装器的
Something else选项调整分区。 -
try and install Ubuntu 后黑屏可能是由于硬件如显卡比较新,导致驱动不兼容问题。可以选择第三行,使用兼容模式启动,然后安装。
-
中文输入法
安装中文输入法
sudo apt install ibus-libpinyin
然后终端输入ibus-setup打开配置界面->Input Method->Add 中文->智能拼音,add时没有中文智能拼音,重启一下。
系统setting界面(系统右上角,向下箭头->齿轮setting)->Input Sources(或键盘keyboard)点击“+”添加中文智能拼音。
-
ubuntu 打字关闭触摸板
-
使用 syndaemon 命令
syndaemon 是一个命令行工具,可以监控键盘活动并在打字时禁用触摸板。
示例:syndaemon -i 0.8 -K -t -d参数说明: -i 0.8:最后一次按键后等待 0.8 秒再启用触摸板。 -K:忽略修饰键(如 Ctrl、Alt)。 -t:仅禁用点击和滚动,允许鼠标移动。 -d:后台运行为守护进程。
此命令将在后台运行,直到系统重启。如果需要开机自动运行,可将其添加到“启动应用程序”中。
-
安装
Touchpad Indicator工具Touchpad Indicator 是一个图形化工具,支持在打字时禁用触摸板,并提供更多自定义选项。
安装步骤:
打开终端,添加 PPA 并安装:sudo add-apt-repository ppa:atareao/atareao sudo apt update sudo apt install touchpad-indicator安装完成后,从应用程序菜单中打开 Touchpad Indicator,进入设置启用“打字时禁用触摸板”选项。
-
修改配置文件(适用于 Xorg)永久禁用触摸板
如果使用的是 Xorg 会话,可以通过编辑配置文件永久禁用触摸板。
步骤:
# 打开终端,编辑配置文件: sudo vi /usr/share/X11/xorg.conf.d/40-libinput.conf在
libinput touchpad catchall部分添加以下内容:Option "DisableWhileTyping" "True"
保存并重启系统生效。
-
安装后没有wifi
查询网络设备:lshw -C network.如果出现“network UNCLAIMED”,说明没有网卡驱动。
查询网卡型号:lspci | grep -i net
查询具体无线网卡型号:lspci -nn | grep Network
- 手动下载匹配的网卡固件
AX211需要iwlwifi-so-a0-gf-a0-xx.ucode系列固件(xx需77及以上版本),之前下载的ax201固件不匹配,需下载对应固件:
若下载失败,可在另一台有网设备打开链接下载,用U盘复制到Ubuntu的# 进入固件目录 cd /lib/firmware # 下载最新适配的固件(89版本兼容性好) sudo wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/iwlwifi-so-a0-gf-a0-89.ucode/lib/firmware目录。 - 重新加载驱动让固件生效
固件放入后,重启驱动模块加载固件:
若日志出现# 先卸载iwlwifi模块 sudo modprobe -r iwlwifi # 重新加载模块,此时会加载新固件 sudo modprobe iwlwifi # 查看固件加载日志,确认无报错 dmesg | grep iwlwifiDetected Intel(R) Wi-Fi 6 AX211 160MHz等内容,说明固件加载成功。 - 重启网络管理服务调出wifi图标
驱动和固件正常后,重启网络管理服务让系统显示wifi图标:
此时顶部状态栏一般会出现wifi图标。若仍未显示,执行以下命令刷新网络状态:# 重启NetworkManager sudo systemctl restart NetworkManager # 强制开启wifi功能 nmcli radio wifi onnmcli networking off && nmcli networking on - 兜底:安装内核专用iwlwifi模块
若上述步骤无效,安装当前内核对应的专用iwlwifi模块包,确保驱动与内核完全适配:sudo apt install linux-modules-iwlwifi-5.15.0-139-generic -y # 安装完成后重启电脑 sudo reboot
重启后wifi图标通常会正常显示,若想验证,可执行nmcli device wifi list,能列出周边wifi网络即代表问题完全解决。
重复进入grub界面
启动盘有问题,但是还被选择了优先启动
针对Windows系统重复进入GRUB界面的问题,以下是综合解决方案:
在GRUB命令行输入以下命令找到windows分区,并重新启动windows系统(需每次手动操作):
grub> ls # 列出分区,找到Windows所在分区(如(hd0,gpt1))
#分别ls 各个分区,如 grub> ls (hd0,gpt1) 查找windwos启动分区
grub> ls (hd0,gpt1) # 以及其他
#如果看到Filessystem type fat uuid xxx Total size 524288k(文件系统类型 FAT、总大小 524288KB(512MB)),该分区极大概率是 Windows 的启动分区(EFI 系统分区)
grub> set root=(hd0,gpt1)
grub> chainloader /efi/Microsoft/Boot/bootmgfw.efi
grub> boot
系统不能正常启动-使用recovery mode修复
如安装了显卡驱动,更新了内核版本等等,系统不能正常启动。
先不要着急重装,重启,进入grub菜单选择界面(就是选择登陆哪个系统的界面)。
选择“Advanced options for ubuntu” -> 选择带“recovery mode”的内核。
而后弹出修复菜单,选择“root” 可以以登陆root 终端,而后卸载相关的驱动,再重启。
此外,也可以在修复菜单中,选择“dpkg”,来修复破损包。
注意: Xorg Nouveau 与英伟达(NVIDIA)官方闭源驱动存在严重冲突,二者无法共存。
recovery mode失效
有手动boot分区的参考链接
当recovery mode都启动不了时,使用USB启动盘进行系统修复
当更新内核等等,使得recovery 都进不去时,可以使用启动盘来对系统进行修复。避免系统重装数据丢失。
Ubuntu内核损坏可以通过多种方式进行修复,常见方法包括使用Live CD/USB修复、使用GRUB恢复模式、重新安装内核等。
以下是具体的修复方法及操作步骤:
1 准备一个Ubuntu Live CD/USB系统启动盘(直接用rufus做好的启动盘)。
使用启动盘启动计算机,选择“试用Ubuntu”模式进入Live环境。
2 打开终端,查看系统对应的分区
sudo fdisk -l
#或
sudo blkid
#或
df -hT
3 挂载损坏系统的根分区:
注: 以下的/mnt/root也可以直接是/mnt,或者自定义的其他路径。
sudo mkdir /mnt/root
sudo mount /dev/sdXn /mnt/root # 替换/dev/sdXn为实际的根分区设备名
4 挂载其他必要的分区(如/boot、/home等):
# 如果装系统时有单独手动的/boot分区,则需要执行,默认分区不需要执行下边这一步
sudo mount /dev/sdXn /mnt/root/boot
# 挂在
sudo mount --bind /dev /mnt/root/dev
sudo mount --bind /proc /mnt/root/proc
sudo mount --bind /sys /mnt/root/sys
| 操作 | 命令示例 | 本质 |
|---|---|---|
| 挂载设备 | mount /dev/sda1 /mnt |
接入新数据:将一个存储设备的内容添加到文件系统树中。 |
| 绑定挂载 | mount --bind /A /B |
映射现有数据:让同一个份数据(目录A)从两个不同的路径(A和B)都能被访问。 |
简单记忆:
- 想用U盘、新硬盘?用
mount /dev/... /path。 - 想把一个目录“复制”或“映射”到另一个地方?用
mount --bind /old/path /new/path。
5 使用chroot切换到损坏系统的环境:
sudo chroot /mnt/root
6 解决在修复时apt update 时,报temorary failure resolving tuna.tsinghua
修改DNS的步骤:
临时生效:sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
永久生效:编辑/etc/systemd/resolved.conf,添加DNS=8.8.8.8,然后sudo systemctl restart systemd-resolved
DNS(Domain Name System)是互联网的“电话簿”,负责将人类可读的域名(如 www.baidu.com)转换为计算机可识别的 IP 地址(如 220.181.38.148)。若 DNS 配置错误或响应缓慢,会导致网页无法加载或访问延迟。
8.8.8.8是 Google 公共 DNS 服务器 的 IP 地址,提供免费、开放的域名解析服务。
备用服务器为8.8.4.4,用于主服务器故障时的冗余支持
7 修复或重新安装内核:
apt update
apt install --reinstall linux-image-generic linux-headers-generic
更新GRUB引导加载程序:
update-grub
运行update-grub的时候报错:
sourcing file ‘/etc/default/grub’ sourcing file ‘/etc/default/grub.d/init-select.cfg’ /usr/sbin/grub-mkconfig: 275:cannot create /boot/grub/grub.cfg.new: Directory nonexistent和/usr/sbin/grub-probe
检查第4步 挂载如/boot分区是否对不对:
如果装系统时有单独手动的/boot分区,则需要找到/boot的分区,并mount到一个路径。sudo mount /dev/sd<boot> /mnt/root/boot
如果是系统分区,这一步不需要执行。
退出chroot环境并重启计算机:
exit
sudo reboot
最次最次,直接mount 系统盘到一个文件下,就可以对数据进行访问,防止直接重装带来数据丢失。
win11 和 ubuntu互相访问
win11 读 ubuntu文件
关键在于让 Windows 能够识别并读取 Ubuntu 所用的分区格式。Ubuntu 通常采用 Ext4 等 Linux 特有的文件系统,而 Windows 自身并不能直接读写这些分区。
使用软件访问 Ext4 分区(推荐)
Windows 本身不支持直接读取 Linux 的 Ext4 文件系统,因此我们需要借助第三方工具。DiskInternals Linux Reader 是一个免费、易用且可靠的选择,它可以像文件管理器一样浏览 Ext4 分区。
-
下载并安装 DiskInternals Linux Reader
访问 DiskInternals 官网或其他可信的软件下载平台,下载 Linux Reader 的安装程序,并按照提示在 Windows 11 中完成安装。 -
运行软件并定位分区
打开 Linux Reader。软件会自动扫描并列出所有连接到电脑的磁盘分区,包括 Ubuntu 的 Ext4 分区。你需要在这些分区中找到你的 Ubuntu 系统分区(通常需要根据分区大小来判断)。 -
浏览并导出文件
在 Linux Reader 中找到你的 Ubuntu 系统分区,然后依次展开目录,定位到存放的文件夹(例如/home/你的用户名/xxx)。你可以直接预览图片,或者将文件复制(导出)到 Windows 的某个分区(如 NTFS 格式的 D 盘)。之后,你就可以在 Windows 中直接访问这些复制过来的图片了。
使用 DiskInternals Linux Reader 可以像在资源管理器中一样浏览 Ubuntu 分区内的文件。
在进行任何操作之前,请务必注意以下几点:
- 谨慎操作:避免在 Windows 环境下直接修改或删除 Ubuntu 分区上的原始文件,以免误删系统文件或导致 Ubuntu 系统启动问题。
- 优先考虑备份:对于非常重要的图片资料,建议先进入 Ubuntu 系统进行备份,然后再在 Windows 中进行操作。
- 尝试替代方案:
- 使用共享分区:你可以在磁盘上创建一个单独的 NTFS 格式分区。因为 Windows 和 Ubuntu 都支持读写 NTFS 文件系统,所以可以将图片等需要共享的文件存放在这个分区中,这样在两个系统下都能直接访问。
- 通过网络共享:如果在 Ubuntu 中配置 Samba 文件共享服务,就可以在局域网内通过 Windows 的网络邻居直接访问 Ubuntu 系统中的文件,无需额外软件。但这需要一定的网络配置知识。
- 借助第三方云存储或工具:你也可以使用 U 盘、移动硬盘等物理介质中转文件,或者利用云存储服务(如 OneDrive、Dropbox)以及一些跨设备的文件同步工具(如 GCopy)来实现文件共享。
ubuntu文件读win11
安装好系统后,ubuntu2204直接将win下的文件系统到工具栏:
如果是20及以前,可能没有直接显示在工具栏,但是可以通过文件系统的其他位置看到win下的文件盘,然后访问:
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,公钥可能会变,可以查最新官网去拉
#官方地址:https://github.com/ros-infrastructure/ros-apt-source
# 其他人的 - **推荐**
sudo curl -sSL https://gitee.com/tyx6/rosdistro/raw/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
#以下是个人拷贝 不可用了
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不成功,rosdep timeout的问题,以下方法选一个就可以。
-
- 使用
rosdepc
- 使用
sudo apt-get install python3-pip
sudo pip install rosdepc
sudo rosdepc init
rosdepc update
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml
# 后面的参数是为了不跳过ROS版本
rosdep update --include-eol-distros
#建议写环境到bashrc《可选》
echo 'export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc
-
- 参考小鱼的安装,或直接使用他的脚本直接更改。
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 安装完成。
常见问题
error: ‘shared_mutex’ in namespace ‘std’ does not name a type
解决办法:
在 ROS Noetic (Ubuntu 22.04) 等环境中,可能因 log4cxx 头文件与 C++17 冲突:
- 解决方法:
修改sudo vi /usr/include/log4cxx/boost-std-configuration.h:
然后重新编译项目。#define STD_SHARED_MUTEX_FOUND 0 // 禁用 std::shared_mutex #define Boost_SHARED_MUTEX_FOUND 1 // 启用 Boost 版本
gazebo
Ubuntu 22.04 完全可以同时安装两个gazebo版本: Gazebo Classic(11) 和 Gazebo Fortress 。
| 维度 | Gazebo Classic (11) | Gazebo Fortress |
|---|---|---|
| 启动命令 | gazebo / roslaunch gazebo_ros ... |
ign gazebo / gz sim empty.sdf |
| ROS 集成 | 深度绑定 ROS 1,原生支持 | 完全独立,通过 gz_ros2_bridge 支持 ROS 2(无 ROS 1 官方支持) |
| 配置文件 | 依赖 .world + ROS .launch 文件 |
直接用 .sdf 文件,无需 ROS 依赖 |
| 命令工具 | 单一 gazebo 命令 |
模块化 gz 命令族(gz sim/gz model/gz log 等) |
- 架构:Classic 是单体架构(所有功能耦合在一个进程);Fortress 是模块化架构(拆分为仿真、物理、渲染、通信等独立模块,通过 GZ Transport 通信)。
- 核心技术:
- Classic:依赖 ROS 1 通信,物理引擎仅 ODE/Bullet,渲染 OGRE 1.9,支持 SDF 1.6。
- Fortress:自研 GZ Transport(基于 DDS),模块化物理引擎(ODE/Bullet/PhysX 等),渲染 OGRE 2.1(性能提升 30%+),支持 SDF 1.9+。
- 能力:Fortress 性能更高、扩展性更强(可单独替换模块)、支持跨平台(Linux/Windows/macOS)和实时仿真;Classic 仅适合 Linux 下的 ROS 1 软件在环仿真。
- 做 ROS 1 项目 → 用 Classic;
- 做 ROS 2 项目 或 无 ROS 纯仿真 → 用 Fortress(未来趋势)。
- 使用过程中发现,source ros2的setup.sh后,gazebo calssic 加载会出现奇奇怪怪的问题。
参考链接
-
官方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
-
ros-官方-https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
-
小鱼安装-https://blog.csdn.net/weixin_55944949/article/details/140373710
-
ros1ros2 ubuntu20上共存:https://blog.csdn.net/zardforever123/article/details/130510145
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)