个人笔记-WSL2上搭建及使用ROS 2 Humble版本
前提:所需环境及安装版本环境:WSL2 Ubuntu 22.04.5 LTS由于博主使用的Ubuntu 版本为22.04.5致使Ros Noetic版本无法进行适配使用所以ros需选择Humble版本一、安装ROS 2 Humble详细步骤1. 配置系统环境# 更新系统包列表 sudo apt update sudo apt upgrade -y # 安装locales包并生成UTF-8语言环境 sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 # 确保Universe仓库已启用 sudo apt install software-properties-common sudo add-apt-repository universe2. 添加ROS 2软件源# 安装curl等工具 sudo apt install curl gnupg lsb-release # 下载并添加ROS 2的GPG密钥确保软件包来源可信 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 将ROS 2仓库添加到软件源列表 echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 更新软件包列表 sudo apt update3. 安装ROS 2软件包# 安装桌面完整版推荐 sudo apt install ros-humble-desktop4. 配置环境变量永久生效echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc # 使更改立即在当前终端生效5. 安装额外开发工具sudo apt install python3-colcon-common-extensions python3-rosdep python3-argcomplete sudo apt install ros-humble-joint-state-publisher-gui sudo rosdep init rosdep update6. 验证安装1.启动发布者节点在一个终端中运行以下命令它会开始发布简单的消息。source /opt/ros/humble/setup.bash # 如果已永久配置则可省略 ros2 run demo_nodes_cpp talker2.启动订阅者节点打开另一个终端运行以下命令来监听这些消息。source /opt/ros/humble/setup.bash # 如果已永久配置则可省略 ros2 run demo_nodes_py listener如果安装成功这个终端会开始输出类似[INFO] [listener]: I heard: Hello World: X的信息。二、安装 Gazebo 111. 更新系统包列表sudo apt update2. 安装必要的工具sudo apt install -y lsb-release gnupg curl sudo apt install curl gpg3. 添加Gazebo软件源和密钥# 添加Gazebo官方仓库 sudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main /etc/apt/sources.list.d/gazebo-stable.list # 添加官方GPG密钥 curl -sSL https://packages.osrfoundation.org/gazebo.key | sudo gpg --dearmor -o /etc/apt/keyrings/gazebo.gpg sudo chmod ar /etc/apt/keyrings/gazebo.gpg echo deb [signed-by/etc/apt/keyrings/gazebo.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main | sudo tee /etc/apt/sources.list.d/gazebo-stable.list # 额外添加针对Ubuntu 22.04的PPA以提高成功率 sudo add-apt-repository ppa:openrobotics/gazebo11-gz-cli sudo apt update4. 安装Gazebo 11及相关开发包sudo apt install -y gazebo11 libgazebo11-dev # 如果遇到依赖问题可以尝试使用 aptitude来自动解决 sudo apt install aptitude sudo aptitude install gazebo11 libgazebo11-dev5. 验证安装gazebo --version三、安装 Graphviz1.安装sudo apt update sudo apt install graphviz2.验证安装dot -version四、安装urdfdom工具包1. 安装urdfdomsudo apt install liburdfdom-dev liburdfdom-tools # 文档中列出的包名2. Gazebo集成sudo apt install gazebo # 文档中Gazebo包名如gazebo11 sudo apt install ros-humble-gazebo-ros-pkgs # 这里humble指的是ros2的版本3. RViz集成RViz2通常随ROS2桌面版安装。如果未安装可安装sudo apt install ros-humble-rviz2 # 文档未直接列出但这是ROS2标准包4. 验证URDF文件准确性check_urdf your_robot.urdf # 替换your_robot.urdf为你的文件路径五、构建ROS 2工作空间工作空间结构工作空间 (例如: ~/ros2_ws/)└── src/└── 你的功能包名称 (例如: my_robot_description)/├── CMakeLists.txt├── package.xml├── launch/ # 推荐位置存放所有启动文件│ └── display.launch # 你的启动文件放在这里├── urdf/ # 存放你的 .urdf 或 .xacro 模型文件├── meshes/ # 存放机器人模型的3D网格文件├── config/ # 存放RViz配置文件 (.rviz)└── ...1. 创建目录和文件mkdir -p ~/ros2_ws/src # 创建主工作空间目录和src子目录用于存放包代码 cd ~/ros2_ws # 进入工作空间根目录2. 安装依赖cd ~/ros2_ws # 返回工作空间根目录 rosdep install -i --from-path src --rosdistro 您的ROS2发行版 -y # 如 rosdep install -i --from-path src --rosdistro humble -y3. 构建工作空间cd ~/ros2_ws colcon build # 在工作空间根目录执行4. 配置环境变量source install/setup.bash # 使当前终端识别工作空间中的包 # echo source ~/ros2_ws/install/setup.bash ~/.bashrc永久生效5. 验证工作空间ros2 pkg list # 应显示工作空间中的包 ros2 run 包名 可执行文件 # 运行包中的节点如示例包六、示例文件参考CMakeLists.txt文件cmake_minimum_required(VERSION 3.8) project(irb_120) # 默认使用C14 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES Clang) add_compile_options(-Wall -Wextra -Wpedantic) endif() # 查找依赖 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) # 安装launch文件 install(DIRECTORY launch DESTINATION share/${PROJECT_NAME} ) # 安装URDF和mesh文件 install(DIRECTORY urdf meshes DESTINATION share/${PROJECT_NAME} ) ament_package()package.xml文件?xml version1.0? ?xml-model hrefhttp://download.ros.org/schema/package_format3.xsd schematypenshttp://www.w3.org/2001/XMLSchema? package format3 nameirb_120/name version0.0.0/version descriptionTODO: Package description/description maintainer emailfugodtodo.todofugod/maintainer licenseTODO: License declaration/license dependrclpy/depend dependgazebo_ros_pkgs/depend dependurdf/depend dependlaunch_ros/depend exec_dependgazebo_ros/exec_depend exec_dependrobot_state_publisher/exec_depend exec_dependjoint_state_publisher/exec_depend test_dependament_copyright/test_depend test_dependament_flake8/test_depend test_dependament_pep257/test_depend test_dependpython3-pytest/test_depend export build_typeament_python/build_type /export /packageurdf文件?xml version1.0 encodingutf-8? !-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawnergmail.com) Commit Version: 1.6.0-1-g15f4949 Build Version: 1.6.7594.29634 For more information, please see http://wiki.ros.org/sw_urdf_exporter -- robot nameirb_120_3_58 link namebase_Link inertial origin xyz0.0420245331166546 0.00111743465258153 0.0796414088455581 rpy0 0 0 / mass value6.21502173387641 / inertia ixx0.0246216765868442 ixy-4.27710718984868E-05 ixz0.000231778877602731 iyy0.0270336000671886 iyz9.44303105351339E-07 izz0.0251985414953437 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link link nameLink_1 inertial origin xyz9.77932429262615E-05 -0.000122685571457374 0.0834117685584202 rpy0 0 0 / mass value3.06699164816983 / inertia ixx0.0122690213682019 ixy-6.60184588363838E-08 ixz4.62263666832163E-08 iyy0.0124354975047045 iyz-1.02333072919124E-05 izz0.0104204705725363 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_1 typerevolute origin xyz0 0 0.29 rpy0 0 0 / parent linkbase_Link / child linkLink_1 / axis xyz0 0 1 / limit lower-2.87979 upper2.87979 effort0 velocity4.3633 / /joint link nameLink_2 inertial origin xyz0.000778324541172413 -0.00212034442756664 0.101243016335719 rpy0 0 0 / mass value3.90868062433509 / inertia ixx0.0381251778120323 ixy6.65672207923572E-07 ixz-2.27102056131581E-07 iyy0.0405765895913778 iyz-2.44766772291583E-05 izz0.00472642905936869 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_2 typerevolute origin xyz0 0 0 rpy0 -1.570796 -1.570796 / parent linkLink_1 / child linkLink_2 / axis xyz0 0 1 / limit lower-1.9199 upper1.9199 effort0 velocity4.3633 / /joint link nameLink_3 inertial origin xyz0.0228087857373795 -0.00843224001043544 0.0579096585789919 rpy0 0 0 / mass value2.9436868385554 / inertia ixx0.00563959730593227 ixy0.000121370261921319 ixz-0.00319916573339092 iyy0.0122022818487513 iyz0.000112948070249809 izz0.0109003422333657 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_3 typerevolute origin xyz0.27 0 0 rpy0 0 0 / parent linkLink_2 / child linkLink_3 / axis xyz0 0 1 / limit lower-1.919862 upper1.22173 effort0 velocity4.3633 / /joint link nameLink_4 inertial origin xyz0.0789988429336339 -0.00456828786606177 0.000371997685976955 rpy0 0 0 / mass value1.44756660276692 / inertia ixx0.00109886706912968 ixy-4.66295206038879E-05 ixz5.69434991495757E-06 iyy0.00422296926730957 iyz8.38062482329363E-07 izz0.00364169508861026 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_4 typerevolute origin xyz0.07 0 0 rpy-1.570796 0 0 / parent linkLink_3 / child linkLink_4 / axis xyz0 0 1 / limit lower-2.79252 upper2.79252 effort0 velocity5.585 / /joint link nameLink_5 inertial origin xyz-0.00109479642831722 3.68489337597006E-05 6.22164507922962E-05 rpy0 0 0 / mass value0.546626875873846 / inertia ixx0.000404579284571587 ixy-1.84462985422124E-06 ixz-4.25573377674597E-07 iyy0.00036747936118293 iyz8.55930759951138E-09 izz0.000290010351157431 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_5 typerevolute origin xyz0 0 0.302 rpy1.570796 0 0 / parent linkLink_4 / child linkLink_5 / axis xyz0 0 1 / limit lower-2.09439 upper2.09439 effort0 velocity5.585 / /joint link nameLink_6 inertial origin xyz-1.32366923055738E-06 -0.00741540976927257 0.000169581014406381 rpy0 0 0 / mass value0.0136784203905943 / inertia ixx1.65769997950547E-06 ixy-8.91499529477134E-11 ixz-3.06372566428325E-12 iyy2.97681416608022E-06 iyz7.66250297115475E-09 izz1.69426726307093E-06 / /inertial visual origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry material name color rgba1 1 1 1 / /material /visual collision origin xyz0 0 0 rpy0 0 0 / geometry mesh filenamepackage://irb_120/meshes/Frame.STL / /geometry /collision /link joint nameJ_6 typerevolute origin xyz0 0.072 0 rpy-1.570796 0 0 / parent linkLink_5 / child linkLink_6 / axis xyz0 0 1 / limit lower-6.98131 upper6.98131 effort0 velocity7.3304 / /joint /robotdisplay.launch.py文件import os from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node def generate_launch_description(): # 获取包的共享目录路径 pkg_share get_package_share_directory(irb_120) # 定义URDF文件路径 urdf_file os.path.join(pkg_share, urdf, irb_120_3_58.urdf) # 读取URDF文件内容 with open(urdf_file, r) as infp: robot_desc infp.read() # 启动参数允许在启动时指定URDF文件 use_sim_time LaunchConfiguration(use_sim_time, defaultfalse) urdf_path LaunchConfiguration(urdf_path, defaulturdf_file) return LaunchDescription([ DeclareLaunchArgument( use_sim_time, default_valuefalse, descriptionUse simulation (Gazebo) clock if true), DeclareLaunchArgument( urdf_path, default_valueurdf_path, descriptionPath to robot urdf file), # 启动 robot_state_publisher 节点发布机器人状态和TF变换 Node( packagerobot_state_publisher, executablerobot_state_publisher, namerobot_state_publisher, outputscreen, parameters[{robot_description: robot_desc, use_sim_time: use_sim_time}], arguments[urdf_path]), # 启动 joint_state_publisher_gui 节点提供图形界面控制关节状态 Node( packagejoint_state_publisher_gui, executablejoint_state_publisher_gui, namejoint_state_publisher_gui, outputscreen), # 启动 RViz2 Node( packagerviz2, executablerviz2, namerviz2, outputscreen), ])七、运行工作空间运行启动文件首次运行cd ~/your_workspace colcon build --packages-select irb_120_ros2 source install/setup.bash ros2 launch irb_120_ros2 display.launch.py重新运行# 清理之前的构建 cd ~/your_workspace rm -rf build install log # 重新构建 colcon build --packages-select irb_120 source install/setup.bash ros2 launch irb_120_ros2 display.launch.py八、软件界面操作

相关新闻

【26.3持续更新中】Leetcode算法笔记(代码随想录)

【26.3持续更新中】Leetcode算法笔记(代码随想录)

想成为算法高手 2026.3 数组 lc704.二分查找 https://leetcode.cn/problems/binary-search/ 设一个区间来框住待查数组 这个框可以是闭区间/左闭右开区间。 记住:middle的计算公式永远不变 是 left (right-left) / 2 lc27.移除元素 https://leetcode.cn/proble…

2026/7/5 1:57:35 阅读更多 →
神器claude code安装

神器claude code安装

前提条件: 您需要安装 Node.js 18 或更新版本环境 MacOS 用户推荐使用 nvm 方式安装 Nodejs 或 Homebrew 方式。不推荐直接安装包安装(后续可能会遇到权限问题) Windows 用户还需安装 Git for Windows 进入命令行界面,安装 Claude Code npm install -g …

2026/5/17 12:20:35 阅读更多 →
ESP32开发环境搭建:PlatformIO+Arduino实战指南

ESP32开发环境搭建:PlatformIO+Arduino实战指南

1. ESP32开发环境搭建:PlatformIO Arduino框架实战指南ESP32自2016年发布以来,已成为物联网嵌入式开发的事实标准之一。其双核Xtensa LX6处理器、集成WiFi 802.11 b/g/n与BLE 4.2/5.0、丰富的外设接口(SPI/I2C/UART/ADC/DAC/PWM)…

2026/5/17 12:20:31 阅读更多 →

最新新闻

一套方案跑通三大平台:YOLO全场景部署实战指南,附一键环境配置脚本

一套方案跑通三大平台:YOLO全场景部署实战指南,附一键环境配置脚本

做工业视觉落地的同行应该都有同感:训模型只是第一步,部署才是磨死人的开始。同一份YOLO权重,既要跑Windows产线上位机,又要部署Linux后台服务器,还要塞进Jetson边缘盒子,每个平台环境依赖不一样、推理引擎…

2026/7/5 17:03:07 阅读更多 →
MarkItDown:如何用Python统一处理数十种文档格式

MarkItDown:如何用Python统一处理数十种文档格式

MarkItDown:如何用Python统一处理数十种文档格式 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 想象一下这样的场景:你的桌面…

2026/7/5 17:03:07 阅读更多 →
NVC多平台部署指南:Linux、macOS和Windows下的安装与配置

NVC多平台部署指南:Linux、macOS和Windows下的安装与配置

NVC多平台部署指南:Linux、macOS和Windows下的安装与配置 【免费下载链接】nvc VHDL compiler and simulator 项目地址: https://gitcode.com/gh_mirrors/nv/nvc NVC是一款开源的VHDL编译器和模拟器,支持VHDL-2008标准并具有出色的模拟性能。本指…

2026/7/5 17:03:07 阅读更多 →
3步掌握MinerU:构建智能文档解析系统的实战指南

3步掌握MinerU:构建智能文档解析系统的实战指南

3步掌握MinerU:构建智能文档解析系统的实战指南 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub_Trending/mi/MinerU Mi…

2026/7/5 17:03:07 阅读更多 →
Thrift接口测试与性能分析:Team IDE的高级功能详解

Thrift接口测试与性能分析:Team IDE的高级功能详解

Thrift接口测试与性能分析:Team IDE的高级功能详解 【免费下载链接】teamide Team IDE 集成MySql、Oracle、金仓、达梦、神通等数据库、SSH、FTP、Redis、Zookeeper、Kafka、Elasticsearch、Mongodb、小工具等管理工具 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/5 17:01:06 阅读更多 →
BTTV安卓版性能优化指南:提升应用流畅度的10个技巧

BTTV安卓版性能优化指南:提升应用流畅度的10个技巧

BTTV安卓版性能优化指南:提升应用流畅度的10个技巧 【免费下载链接】bttv A mod of the Twitch Android Mobile App adding BetterTTV, FrankerFaceZ and 7TV emotes 项目地址: https://gitcode.com/gh_mirrors/bt/bttv BTTV安卓版是一款为Twitch移动应用添加…

2026/7/5 16:59:06 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻