Go1机器狗unitree_ros_to_real包example_walking代码分析

这段代码展示了如何使用ROS接口控制Unitree机器人的高阶行为。程序依次设置了不同的运动模式,包括头部转动、身体倾斜、升降、卧倒、起立、前进和旋转等,通过调整模式、速度和姿态参数来实现各种动作。
该文章已生成可运行项目,
#include <ros/ros.h>
#include <unitree_legged_msgs/HighCmd.h>
#include <unitree_legged_msgs/HighState.h>
#include "unitree_legged_sdk/unitree_legged_sdk.h"
#include "convert.h"

using namespace UNITREE_LEGGED_SDK;

int main(int argc, char **argv)
{
    ros::init(argc, argv, "example_walk_without_lcm");

    std::cout << "WARNING: Control level is set to HIGH-level." << std::endl
              << "Make sure the robot is standing on the ground." << std::endl
              << "Press Enter to continue..." << std::endl;
    std::cin.ignore();

    ros::NodeHandle nh;

    ros::Rate loop_rate(500);

    long motiontime = 0;

    unitree_legged_msgs::HighCmd high_cmd_ros;

    ros::Publisher pub = nh.advertise<unitree_legged_msgs::HighCmd>("high_cmd", 1000);

    while (ros::ok())
    {

        motiontime += 2;

        high_cmd_ros.head[0] = 0xFE;
        high_cmd_ros.head[1] = 0xEF;
        high_cmd_ros.levelFlag = HIGHLEVEL;
        high_cmd_ros.mode = 0;
        high_cmd_ros.gaitType = 0;
        high_cmd_ros.speedLevel = 0;
        high_cmd_ros.footRaiseHeight = 0;
        high_cmd_ros.bodyHeight = 0;
        high_cmd_ros.euler[0] = 0;
        high_cmd_ros.euler[1] = 0;
        high_cmd_ros.euler[2] = 0;
        high_cmd_ros.velocity[0] = 0.0f;
        high_cmd_ros.velocity[1] = 0.0f;
        high_cmd_ros.yawSpeed = 0.0f;
        high_cmd_ros.reserve = 0;

        if (motiontime > 0 && motiontime < 1000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[0] = -0.3; 
        }
        if (motiontime > 1000 && motiontime < 2000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[0] = 0.3; //躯体头部向下,尾部向上
        }
        if (motiontime > 2000 && motiontime < 3000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[1] = -0.2;
        }
        if (motiontime > 3000 && motiontime < 4000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[1] = 0.2; //躯体向左
        }
        if (motiontime > 4000 && motiontime < 5000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[2] = -0.2;
        }
        if (motiontime > 5000 && motiontime < 6000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.euler[2] = 0.2;
        }
        if (motiontime > 6000 && motiontime < 7000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.bodyHeight = -0.2;
        }
        if (motiontime > 7000 && motiontime < 8000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.bodyHeight = 0.1;
        }
        if (motiontime > 8000 && motiontime < 9000)
        {
            high_cmd_ros.mode = 1;
            high_cmd_ros.bodyHeight = 0.0;
        }


        # 卧倒模式
        if (motiontime > 9000 && motiontime < 11000)
        {
            high_cmd_ros.mode = 5;
        }

        # 起立模式
        if (motiontime > 11000 && motiontime < 13000)
        {
            high_cmd_ros.mode = 6;
        }

        // 空置模式
        if (motiontime > 13000 && motiontime < 14000)
        {
            high_cmd_ros.mode = 0;
        }

        // 前进模式+旋转
        if (motiontime > 14000 && motiontime < 18000)
        {
            high_cmd_ros.mode = 2;
            high_cmd_ros.gaitType = 2;
            high_cmd_ros.velocity[0] = 0.4f; // -1  ~ +1  前进速度
            high_cmd_ros.yawSpeed = 2;       //旋转速度
            high_cmd_ros.footRaiseHeight = 0.1;
            // printf("walk\n");
        }
        if (motiontime > 18000 && motiontime < 20000)
        {
            high_cmd_ros.mode = 0;
            high_cmd_ros.velocity[0] = 0;
        }

        // 单纯的前进模式
        if (motiontime > 20000 && motiontime < 24000)
        {
            high_cmd_ros.mode = 2;
            high_cmd_ros.gaitType = 1;
            high_cmd_ros.velocity[0] = 0.2f; // -1  ~ +1
            high_cmd_ros.bodyHeight = 0.1;  
            // printf("walk\n");
        }
        if (motiontime > 24000)
        {
            high_cmd_ros.mode = 1;
        }

        pub.publish(high_cmd_ros);

        ros::spinOnce();
        loop_rate.sleep();
    }

    return 0;
}

本文章已经生成可运行项目
<think>好的,用户想了解如何运行Unitree ROS的环境配置、使用说明和相关教程。首先,我需要整理现有的引用信息,看看里面有没有相关的步骤。 根据引用[2],用户需要安装Ubuntu和ROS,然后下载unitree_ros、aliengo_sdk和unitree_legged_sdk这些软件。接着为SDK安装依赖并编译,之后配置unitree_ros的环境并编译。引用[3]提到需要将unitree_ros克隆到工作空间的src目录下,并进行编译。引用[4]则涉及修改CMakeLists.txt文件中的设置,比如将MOVE_BASE设为ON。这些步骤看起来是配置和编译的关键。 用户可能需要详细的步骤指南,所以应该分步骤说明。首先安装Ubuntu和ROS,确保版本兼容。然后下载必要的软件,处理依赖项,编译SDK和unitree_ros。环境变量的配置也很重要,比如source setup.bash。最后,运行仿真和测试节点,可能需要使用Gazebo和ROS命令。 用户可能遇到的问题括环境变量未正确设置,依赖项缺失,或者编译错误。常见问题如找不到、编译失败,应该给出解决建议,比如检查路径、安装依赖、重新编译等。 另外,参考引用[4]中的教程,可能需要启用导航功能,所以提醒用户修改CMakeLists中的相关选项。最后,生成相关问题,帮助用户深入解决可能遇到的后续问题,比如仿真启动失败、如何添加新功能等。</think>### 运行 Unitree ROS 环境配置与使用教程 #### **步骤一:系统与ROS环境安装** 1. **安装 Ubuntu 系统** 推荐使用 Ubuntu 18.04 (对应 ROS Melodic) 或 Ubuntu 20.04 (对应 ROS Noetic)[^2]。 2. **安装 ROS 操作系统** 根据 Ubuntu 版本选择对应的 ROS 发行版,并按照官方文档完成基础安装: ```bash # 示例:ROS Melodic安装命令 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-melodic-desktop-full ``` --- #### **步骤二:下载源码与依赖安装** 1. **克隆仓库** 创建 ROS 工作空间并下载 `unitree_ros` 及相关 SDK: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/unitreerobotics/unitree_ros.git git clone https://github.com/unitreerobotics/aliengo_sdk.git git clone https://github.com/unitreerobotics/unitree_legged_sdk.git ``` 2. **安装依赖** 进入 SDK 目录安装依赖: ```bash cd unitree_legged_sdk sudo apt install build-essential cmake libboost-system-dev ``` --- #### **步骤三:编译与配置** 1. **编译 SDK** ```bash mkdir build && cd build cmake .. make ``` 2. **配置 `unitree_ros`** - 将 `.vscode` 配置文件复制到工作空间根目录(若有)[^2] - 修改 `unitree_guide` 中的 `CMakeLists.txt`,启用导航功能(如需要): ```cmake set(MOVE_BASE ON) # 修改为ON以支持自主导航[^4] ``` 3. **编译 ROS ** ```bash cd ~/catkin_ws catkin_make source devel/setup.bash ``` --- #### **步骤四:运行仿真与测试** 1. **启动 Gazebo 仿真** ```bash roslaunch unitree_gazebo normal.launch ``` 2. **运行控制节点** 新终端中执行: ```bash rosrun unitree_controller unitree_controller_node ``` --- ### **常见问题解决** 1. **编译错误:找不到依赖项** - 检查是否遗漏 `sudo apt install` 安装步骤 - 确认 ROS 环境变量已生效:`source /opt/ros/[版本]/setup.bash` 2. **仿真启动失败** - 确认 Gazebo 模型路径已配置: ```bash echo "export GAZEBO_MODEL_PATH=~/catkin_ws/src/unitree_ros/models:$GAZEBO_MODEL_PATH" >> ~/.bashrc ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值