前提:所需环境及安装版本环境: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八、软件界面操作