当前位置: 首页 > news >正文

宇树go2 gazebo仿真

文章目录

  • 宇树go2 仿真
    • ROS1下的仿真
      • 安装
        • 1.1 安装ROS Noetic
        • 1.2 安装依赖
        • 1.3 创建工作空间与下载源码
      • 2 启动仿真与基础运动测试
        • 2.1 启动Gazebo仿真环境
        • 2.2 基础运动控制
      • 3 避障(move_base)启动
        • 3.1 修改导航配置文件
        • 3.2 修改或编写导航launch文件
        • 3.3 避障执行步骤
      • 导航配置文件说明
      • go2 仿真相关库功能说明
      • 常见问题与解决
    • ROS2 的go2
      • 1.安装ros2 humble
      • 2.安装依赖
      • 3.克隆代码
      • 参考链接

宇树go2 仿真

ROS1下的仿真

安装

1.1 安装ROS Noetic

宇树Go1/Go2的官方仿真环境推荐使用ROS Noetic(对应Ubuntu 20.04)。
参考安装链接https://blog.csdn.net/zardforever123/article/details/130510145

# 安装ROS Noetic桌面完整版
sudo apt-get install ros-noetic-desktop-full
# 初始化rosdep
sudo rosdep init
rosdep update
1.2 安装依赖

安装仿真和导航所需的ROS控制器和插件:

# 安装Gazebo相关控制插件、关节状态控制器等
sudo apt-get install ros-noetic-controller-interface \
ros-noetic-gazebo-ros-control \
ros-noetic-joint-state-controller \
ros-noetic-effort-controllers \
ros-noetic-joint-trajectory-controller

其他依赖:

sudo apt install libmsgpack-dev liblcm-dev 
# 导航栈
sudo apt-get install ros-noetic-navigation
1.3 创建工作空间与下载源码
  1. 创建工作空间
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    catkin_init_workspace
    
  2. 克隆必要的代码库(通常包含以下核心包):
    cd ~/catkin_ws/src
    # 克隆宇树官方SDK
    git clone https://github.com/unitreerobotics/unitree_legged_sdk.git
    # 克隆ROS到实机的接口包
    git clone https://github.com/unitreerobotics/unitree_ros_to_real.git
    # 克隆主要的ROS仿真包,内含启动文件、模型和配置
    git clone https://github.com/unitreerobotics/unitree_ros.git
    # 对于Go2,可能还需要guide包
    git clone https://github.com/unitreerobotics/unitree_guide.git
    
  3. 编译:先编译unitree_legged_sdk,再编译ros包,打开move_base编译项
  • 编译 unitree_legged_sdk
    cd unitree_legged_sdk && mkdir build
    
  • 修改unitree_guide/unitree_guide下的CMakeLists.txt
    将:SET(MOVE_BASE OFF)
    改为:SET(MOVE_BASE ON)
  • 编译ROS1 包:
    cd ~/catkin_ws
    catkin_make
    
    编译成功后,记得执行 source devel/setup.bash,或者将这句命令添加到你的 ~/.bashrc 文件中以便每次终端启动时自动生效。

2 启动仿真与基础运动测试

2.1 启动Gazebo仿真环境

使用以下命令启动Gazebo仿真环境并加载机器人模型(以Go2为例):

# 启动Gazebo仿真,rname参数指定机器人型号(a1, go1, go2等),wname指定世界环境
# roslaunch unitree_gazebo normal.launch rname:=go2 wname:=stairs
# 或者使用unitree_guide包中的启动文件(针对Go2)
roslaunch unitree_guide gazeboSim.launch rname:=go2
# 或者使用unitree_guide包中的启动文件(针对Go1)
roslaunch unitree_guide gazeboSim.launch rname:=go1

在这里插入图片描述
如果启动的机器人模型显示不完整(例如缺少躯干),请检查并确保相关模型文件(如 trunk.dae)路径正确。
在这里插入图片描述

检查src/unitree_ros/robots/go2_description/xacro/robot.xacro文件
link name="trunk"
<mesh filename="package://go2_description/meshes/trunk.dae" scale="1 1 1"/>
改成:
<mesh filename="package://go2_description/meshes/base.dae" scale="1 1 1"/>
对应查看go2_description/meshes/下有这个base.dae

2.2 基础运动控制

启动仿真后,通常需要运行以下节点来初始化机器人位姿并启用运动控制:

  1. 初始化位姿
    # 让机器人伸展腿部,做好站立准备
    rosrun unitree_controller unitree_servo
    # 或     cd ~/catkin_ws
    ./devel/lib/unitree_guide/junior_ctrl
    
  • 键盘控制测试
    官方的 unitree_controller 包通常提供了一些基础的运动控制节点。你可能需要通过键盘指令来控制机器狗移动,以验证仿真环境是否正常工作。
    • 例如,运行 rosrun unitree_controller unitree_move_kinetic 可能让机器狗做圆周运动。
    • 对于Go2,编译后运行 ./devel/lib/unitree_guide/junior_ctrl,然后根据提示(如按键2站立,按键4进入行走模式,按下4键后就可以使用方向wasd键进行运动控制了,jl进行转向控制;5进入move_base模式)进行测试。
      在这里插入图片描述

3 避障(move_base)启动


  • 插播
    如果启动的是go1,通过执行以下命令,则可以直接避障仿真。
    roslaunch unitree_move_base rvizMoveBase.launch 
    

在这里插入图片描述


ROS中的导航和避障功能核心由 move_base 节点完成,它依赖全局和本地代价地图以及规划器。确保已安装ROS导航栈:

sudo apt-get install ros-noetic-navigation
3.1 修改导航配置文件

注释掉unitree_guide/unitree_move_base/config下的costmap_common_params.yaml的配置文件中与laser相关的项,如下:

obstacle_range: 1.0         ##
raytrace_range: 1.5         ##
footprint: [[0.3, 0.15], [0.3, -0.15], [-0.35, -0.15], [-0.35, 0.15]]
# robot_radius: 0.3
inflation_radius: 0.03
max_obstacle_height: 1.0
min_obstacle_height: 0.0
observation_sources: scan
scan: {data_type: LaserScan, topic: /merged_laserscan, marking: true, clearing: true, expected_update_rate: 3.3}
#observation_sources: faceLaserScan leftLaserScan rightLaserScan
#faceLaserScan: {data_type: LaserScan, topic: /faceLaserScan, marking: true, clearing: true, expected_update_rate: 3.3}
#leftLaserScan: {data_type: LaserScan, topic: /leftLaserScan, marking: true, clearing: true, expected_update_rate: 3.3}
#rightLaserScan: {data_type: LaserScan, topic: /rightLaserScan, marking: true, clearing: true, expected_update_rate: 3.3}
1.gazebo仿真启动
3.2 修改或编写导航launch文件

修改或者创建move base launch文件,以下二选一。
修改launch文件
注释掉unitree_guide/unitree_move_base/launch下的rvizMoveBase.launch文件中与laser相关的项,如下:
在这里插入图片描述

<!--<include file="$(find unitree_move_base)/launch/pointCloud2LaserScan.launch"/>-->

创建launch文件
创建一个你的导航启动文件(例如 my_go_navigation.launch),用于一次性启动所有必要的节点,包括 move_base、地图服务器(如果使用静态地图)、AMCL定位节点等。

<launch><!-- 启动Gazebo仿真环境 (假设已单独启动) --><!-- <include file="$(find unitree_gazebo)/launch/normal.launch"> ... </include> --><!-- 启动MoveBase导航节点 --><node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"><rosparam file="$(find your_pkg_name)/config/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find your_pkg_name)/config/costmap_common_params.yaml" command="load" ns="local_costmap" /><rosparam file="$(find your_pkg_name)/config/global_costmap_params.yaml" command="load" /><rosparam file="$(find your_pkg_name)/config/local_costmap_params.yaml" command="load" /><rosparam file="$(find your_pkg_name)/config/teb_local_planner_params.yaml" command="load" /><!-- 设置规划器插件参数 (TEB) --><param name="base_global_planner" value="global_planner/GlobalPlanner"/><param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS"/></node><!-- 如果需要,启动AMCL定位节点 --><!-- <include file="$(find your_pkg_name)/launch/amcl.launch" /> --><!-- 启动Rviz --><node type="rviz" name="rviz" pkg="rviz" args="-d $(find your_pkg_name)/rviz/nav.rviz" /></launch>
3.3 避障执行步骤
# gazebo加载世界与模型
roslaunch unitree_guide gazeboSim.launch rname:=go2
# 打开键盘控制终端:2站立,4行走,按下4键后使用方向wasd键进行操纵,jl进行转向控制;5move_base
rosrun unitree_controller unitree_servo
# 打开move base节点及rviz
roslaunch unitree_move_base rvizMoveBase.launch 
# 或自己的launch文件,跟以上的二选一
roslaunch your_package_name my_go_navigation.launch

在Rviz中设置目标点:在rviz界面中点击上方2D Nav Goal,而后左键rviz中央地图显示界面的任意位置,摁住左键拖动鼠标可以为狗设定朝向。
在这里插入图片描述

之后就可以看到狗自己走了。

观察避障行为

机器狗应开始规划一条从当前位置到目标点的全局路径(通常显示为一条浅色实线)。
当Gazebo仿真环境中出现(虚拟)障碍物,或者在本地代价地图的感知范围内出现障碍物时,本地规划器会尝试实时避开这些障碍物,并生成一条局部路径(可能显示为另一种颜色的线)。
观察机器狗是否会绕开障碍物并继续向目标点前进。

在这里插入图片描述

导航配置文件说明

unitree_guide/unitree_move_base/config下的配置文件告诉 move_base 如何感知障碍物、规划路径以及控制机器狗运动。需要为go2配置参数文件,主要配置文件包括:

配置文件名称主要作用
costmap_common_params.yaml定义全局和本地代价地图共享的参数,例如障碍物层、膨胀层参数、机器人本体 footprint(轮廓)等。
global_costmap_params.yaml配置全局代价地图,用于全局路径规划(如从A点到B点的总体路线)。
local_costmap_params.yaml配置本地代价地图,用于本地实时避障和局部路径规划(如避开突然出现的障碍物)。
teb_local_planner_params.yamlTEB局部规划器的参数文件,详细控制机器人在局部路径上的速度、加速度、与障碍物距离等运动行为。

以下是关键配置项的说明:

  1. costmap_common_params.yaml (机器人和传感器通用设置):

    obstacle_range: 2.5        # 最大障碍物探测范围(单位:米)
    raytrace_range: 3.0         # 最大清除障碍物光线投射范围
    footprint: [[-0.2, -0.1], [-0.2, 0.1], [0.2, 0.1], [0.2, -0.1]] # 根据机器狗实际尺寸修改轮廓
    inflation_radius: 0.3       # 障碍物膨胀半径,防止机器人太靠近# 定义传感器信息来源,例如激光雷达
    observation_sources: scan
    scan: {sensor_frame: base_laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}
    
  2. global_costmap_params.yaml (全局地图设置):

    global_frame: map           # 全局坐标系
    robot_base_frame: base_footprint # 机器人基座坐标系
    update_frequency: 5.0       # 地图更新频率(Hz)
    publish_frequency: 2.0
    static_map: true            # 使用静态地图(如SLAM建好的地图)
    
  3. local_costmap_params.yaml (局部地图设置):

    global_frame: odom          # 局部规划使用odom坐标系
    robot_base_frame: base_footprint
    update_frequency: 10.0      # 本地图需要更高更新频率
    publish_frequency: 10.0
    static_map: false           # 不使用静态地图,动态更新
    rolling_window: true        # 滚动窗口,始终以机器人为中心
    
  4. 规划器参数 (例如DWA或TEB):

    • DWA (dwa_local_planner_params.yaml): 常用差分轮式机器人。
    • TEB (teb_local_planner_params.yaml): 更适用于差动、全向或阿克曼转向模型,能处理时间最优轨迹。你需要根据机器狗模型调整参数,例如:
      max_vel_x: 0.5         # 最大前进速度 (m/s)
      max_vel_theta: 1.0     # 最大旋转速度 (rad/s)
      acc_lim_theta: 1.0     # 旋转加速度限制
      footprint_model: {type: "points", vertices: "{{-0.2, -0.1}, {-0.2, 0.1}, {0.2, 0.1}, {0.2, -0.1}}"} # 轮廓模型
      min_obstacle_dist: 0.2 # 与障碍物最小允许距离
      

go2 仿真相关库功能说明

在这里插入图片描述

1. unitree_legged_sdk - 核心底层 C++ SDK

这是最基础、最重要的库,是所有其他软件包与机器狗硬件通信的桥梁。

  • 功能:
    • 提供了通过 UDP串口 与机器狗主板(主控)进行底层通信的 C++ API。
    • 定义了机器狗的状态数据结构(如关节位置、速度、力矩、IMU数据等)和控制指令数据结构(如位置、速度、扭矩控制模式)。
    • 实现了高频率、低延迟的数据交换,用于实时控制。
  • 用途:
    • 如果你想完全从零开始开发控制算法,不依赖ROS,或者需要极高的控制频率(如1kHz),你会直接使用这个SDK。
    • 它是 unitree_ros_to_real 的基础依赖。
  • 类比: 就像是电脑的主板驱动,让操作系统能识别和控制硬件。

2. unitree_ros_to_real - ROS ↔ 真实机器狗的接口包

这个包的作用是将底层SDK的功能封装成ROS的话题(Topic)和服务(Service),让ROS生态系统能够方便地与真实机器狗进行通信。

  • 功能:
    • 它内部调用 unitree_legged_sdk 的API。
    • 创建ROS节点,将机器狗的状态数据(如关节状态、IMU、足端接触力)发布到相应的话题上(如 /joint_states, /imu, /foot_force)。
    • 订阅来自其他ROS节点的控制指令话题(如 /cmd_vel 用于速度控制),并将其转换并发送给底层SDK,最终控制机器狗运动。
  • 用途:
    • 当你想要用ROS来控制一台真实的宇树机器狗时,必须运行这个包里的节点。
    • 它实现了ROS控制框架(ros_control)的 hardware_interface,使得可以通过标准的ROS控制方式来控制机器狗。
  • 类比: 就像一个翻译官,一边听ROS用“ROS语言”发出的指令,另一边用“机器狗SDK语言”指挥机器狗动作,并反过来把机器狗的“感受”翻译成“ROS语言”汇报回去。

3. unitree_ros - ROS仿真与通用功能包

这个包是在ROS中进行仿真和开发的核心,它主要面向Gazebo仿真环境,但也包含一些通用功能。

  • 功能:
    • URDF模型: 包含机器狗(Go1, Go2, A1等)的精确三维模型文件,用于在Rviz和Gazebo中显示。
    • Gazebo仿真:
      • Gazebo的世界文件(如 .world)。
      • 启动文件(.launch),用于一键启动Gazebo仿真环境并加载机器狗模型。
      • Gazebo插件,用于模拟机器狗的物理特性、传感器(如IMU、接触传感器)。
    • 通用启动与配置: 包含一些在仿真和实机上都可以用的通用配置文件(如参数服务器上的参数)和启动文件。
    • MoveIt!配置: 用于运动规划(如跳舞、复杂步态)的MoveIt!配置文件。
  • 用途:
    • 主要用于在Gazebo中进行算法仿真和测试,而无需使用昂贵的真实机器狗,避免操作失误导致损坏。
    • 提供标准的机器人模型,用于在Rviz中进行可视化。
  • 类比: 就像一个虚拟训练场,你可以在电脑里创建一个和真实机器狗一模一样的虚拟狗,在上面测试代码,确认无误后再部署到真狗上。

4. unitree_guide - 高级功能与示例包 (特别是Go2)

这个包包含了宇树官方提供的一系列高级应用功能的示例和实现,主要用于 Go2 型号,展示了如何利用上述基础包来实现复杂任务。

  • 功能:
    • 高级示例代码: 如自主导航(SLAM+避障)视觉跟随人体姿态识别跟随等功能的实现代码。
    • 上层应用逻辑: 包含了如何将感知、规划、控制等模块组合起来完成一个具体任务的逻辑。
    • 可能包含一些机器狗自带的演示功能的源代码或接口。
  • 用途:
    • 学习和参考如何开发机器狗的高级应用。
    • 直接运行官方提供的高级功能。
    • 对于Go2用户,这个包尤其重要,因为它提供了与Go2配套的许多新功能。
  • 类比: 就像是买手机时预装的各种App(如地图、相机、语音助手),它们利用手机的“操作系统”(即前面的几个基础包)来实现各种炫酷的功能。

总结与工作流程

一个典型的开发和工作流程是:

  1. 仿真阶段:

    • 使用 unitree_ros 启动 Gazebo 仿真。
    • 你的算法节点发布控制指令到 /cmd_vel 等话题。
    • unitree_ros 中的仿真节点接收指令,驱动Gazebo中的虚拟机器狗运动。
    • 在仿真中调试和完善你的代码。
  2. 部署到实机阶段:

    • 在连接真实机器狗的电脑上,运行 unitree_ros_to_real 节点。
    • 同样是你算法节点发布控制指令到 /cmd_vel
    • unitree_ros_to_real 节点接收指令,通过内部的 unitree_legged_sdk 将指令发送给机器狗主板,控制真狗运动。
    • unitree_ros_to_real 同时从真狗读取状态数据,并发布回ROS网络,供你的算法节点使用。

简单来说:

  • 想玩真狗:你需要 sdk + ros_to_real
  • 想在电脑里仿真:你需要 ros
  • 想实现更酷炫的智能功能:你需要参考 guide

常见问题与解决

  • Gazebo中机器人模型显示异常(如只有四肢没有躯干):检查URDF模型文件中的mesh文件路径是否正确,特别是 trunk.dae 等文件。

修改:src/unitree_ros/robots/go2_description/xacro/robot.xacro
<mesh filename="package://go2_description/meshes/trunk.dae" scale="1 1 1"/>
改成
<mesh filename="package://go2_description/meshes/base.dae" scale="1 1 1"/>

  • 编译错误:注意第三方库(如 osqp, osqp-eigen)的版本匹配问题,这是导致编译失败的常见原因。

  • Could not load controller 'joint_state_controller':这通常是ROS控制器插件未正确安装或版本不匹配导致的。请确保已安装所有必要的依赖包。

  • 避障不生效:首先检查Rviz中的本地代价地图是否正确显示了障碍物。如果没显示,检查传感器数据(如激光雷达话题 scan)是否成功连接到 move_base;如果显示了但机器人仍撞上,尝试减小 min_obstacle_dist增大 inflation_radius

  • No module named ‘defusedxml’
    运行 roslaunch unitree_guide gazeboSim.launch rname:=go2 报错:
    substitution args not supported: No module named ‘defusedxml’

第一步:执行:ls -n /usr/bin/python
发现python软链接到了python3.7
第二步删除软链接:sudo rm -rf /usr/bin/python
第三步:然后再重新建立到python2.7的软链接:
sudo ln -s /usr/bin/python2.7 /usr/bin/python
第四步:问题解决。
参考:https://blog.csdn.net/endurance2017/article/details/102997280
https://www.it610.com/article/1291998390648905728.htm

OR:本人使用:

pip install defusedxml

ROS2 的go2

小鱼的go2 git库地址:https://github.com/fishros/simdog
在Gazebo中为宇树Go2机器人添加Velodyne雷达和D435i深度相机。
照git readme的说明一步步来就可以。

  • 推荐环境:Ubuntu22.04,ROS2 humble

1.安装ros2 humble

已安装的忽略:以下是小鱼一键安装步骤:

wget http://fishros.com/install -O fishros && . fishros

2.安装依赖

sudo apt install ros-humble-gazebo-ros2-control
sudo apt install ros-humble-xacro
sudo apt install ros-humble-robot-localization
sudo apt install ros-humble-ros2-controllers
sudo apt install ros-humble-ros2-control
sudo apt install ros-humble-velodyne
sudo apt install ros-humble-velodyne-gazebo-plugins
sudo apt-get install ros-humble-velodyne-description

安装liosam依赖(可选)

sudo apt install ros-humble-perception-pcl \ros-humble-pcl-msgs \ros-humble-vision-opencv \ros-humble-xacro
# Add GTSAM-PPA(可选)
sudo add-apt-repository ppa:borglab/gtsam-release-4.1
sudo apt install libgtsam-dev libgtsam-unstable-dev

3.克隆代码

git clone https://github.com/fishros/simdog.git -b main -o go2_ws
sudo rosdepc init
rosdepc update
rosdepc install --from-paths src --ignore-src -r -y
colcon build --symlink-install 

构建好工程之后,然后启动文件

bash start.sh

参考链接

https://www.guyuehome.com/detail?id=1895645225580285954
https://www.guyuehome.com/detail?id=1880175119840628737
https://github.com/fishros/simdog

http://www.dtcms.com/a/395623.html

相关文章:

  • Golang 赋值运算符与短声明 (= 与 :=)使用场景
  • 数据库造神计划第二十天---视图
  • Java 异步支付的 “不安全” 风险点控制
  • 百饮X 北森 | 康师傅百饮事业AI领导力教练Mr. Sen落地实践分享
  • 第十四章:数据分析基础库NumPy(二)
  • AI 算力加速指南:让短视频去水印更加方便
  • 神经网络架构搜索(NAS)概述:如何让AI自动设计AI模型?
  • LoRA微调技术:大模型时代的“乐高式“参数改造指南
  • 数据建模和设计章节考试考点及关系梳理
  • pytorch工具箱
  • Spark源码中的CAS思想
  • webpack-dev-server使用
  • 现有项目添加CMake
  • c语言学习_数组使用_扫雷2
  • 轻量级KVM管理工具 —— 筑梦之路
  • 第十四章:数据分析基础库NumPy(一)
  • 课题学习——SimCSE
  • gitee.com 有raw.githubusercontent.com一样的机制吗?
  • AI原生未来:新商业机会全景洞察与商业模式深度解构
  • Spark源码中的volatile
  • IDEA运行/调试配置找不到对应脚本的命令
  • 测试duckdb的C插件模板的编译加工和加载
  • 如何用AI工具开发一个轻量化CRM系统(二):需求分析
  • ARM架构学习9——LM75温度传感器+ADC转换器
  • 再见,Windows 10:升级 Windows 11 的必要性!
  • 数据结构从入门到实战——算法的时间复杂度
  • Rust字符串
  • 【图文详解】强化学习最新进展以及核心技术突破方向、核心技术架构
  • Linux SSH 安全加固与批量管理:密钥认证 + 自动化脚本 + OpenSSH 升级
  • 一个可以直接跑满本地带宽文件分享工具 开箱即用,可用于局域网内分享文件和文件夹