Unitree SDK2底层数据结构

一、unitree SDK2的下载与安装

地址:https://github.com/unitreerobotics/unitree_sdk2
文件结构:
unitree_sdk2
   ---example:应用示例
   ---lib:静态库文件(.a)
   ---thirdparty:第三方头文件及库文件
   ---include:
         ---unitree: 
               ---common:通用函数的头文件
               ---idl:底层服务接口的头文件
               ---robot:上层应用相关的头文件

二、电机控制接口与状态接口

1、电机控制接口

文件位置:unitree_sdk2/include/unitree/idl/go2/MotorCmd_.hpp

namespace unitree_go
{
namespace msg
{
namespace dds_
{
class MotorCmd_
{
private:
 uint8_t mode_ = 0; //电机控制模式(Foc模式(工作模式)-> 0x01 ,stop模式(待机模式)-> 0x00。)
 float q_ = 0.0f;   //关节目标位置
 float dq_ = 0.0f;  //关节目标速度
 float tau_ = 0.0f; //关节目标力矩
 float kp_ = 0.0f;  //关节刚度系数
 float kd_ = 0.0f;  //关节阻尼系数
 std::array<uint32_t, 3> reserve_ = { };  //保留位

};
}
}
}
DDS话题通讯中信号类型:unitree_go::msg::dds_::MotorCmd_rt

rt表示realtime

2、电机状态接口

文件位置:unitree_sdk2/include/unitree/idl/go2/MotorState_.hpp
namespace unitree_go
{
namespace msg
{
namespace dds_
{
class MotorState_
{
private:
 uint8_t mode_ = 0; //电机所处控制模式(Foc模式(工作模式)-> 0x01 ,
                                     stop模式(待机模式)-> 0x00。)
 float q_ = 0.0f;   //关机反馈位置信息:默认为弧度值(可按照实际情况改为角度值), 
                      可按照实际数值显示(弧度值范围:-7 - +7,显示3位小数)
 float dq_ = 0.0f;  //关节反馈速度
 float ddq_ = 0.0f; //关节反馈加速度
 float tau_est_ = 0.0f; //关节反馈力矩

 float q_raw_ = 0.0f;  //沿用的,但是目前不用
 float dq_raw_ = 0.0f;  //沿用的,但是目前不用
 float ddq_raw_ = 0.0f; //沿用的,但是目前不用

 uint8_t temperature_ = 0;  //电机温度信息,可按照实际数值显示(范围:-100 - 150)
 uint32_t lost_ = 0;  //电机丢包信息:可按照实际数值显示(范围:0-9999999999)
 std::array<uint32_t, 2> reserve_ = { };  //当前电机通信频率+电机错误标志位:
                             (数组:0-电机错误标志位(范围:0-255,可按照实际数值显 示),                                       1-当前电机通信频率(范围:0-800,可按照实际数值显示))


};
}
}
}
DDS话题通讯中信号类型:unitree_go::msg::dds_::MotorState_

三、电池控制接口与状态接口

1、电池控制接口

文件位置:unitree_sdk2/include/unitree/idl/go2/BmsCmd_.hpp
namespace unitree_go
{
namespace msg
{
namespace dds_
{
class BmsCmd_
{
private:
 uint8_t off_ = 0;    //关闭电池:(命令:0xA5)
 std::array<uint8_t, 3> reserve_ = { };    //保留

};
}
}
}
DDS话题通讯中信号类型:unitree_go::msg::dds_::BmsCmd_

2、电池状态接口

文件位置:unitree_sdk2/include/unitree/idl/go2/BmsState_.hpp
namespace unitree_go
{
namespace msg
{
namespace dds_
{
class BmsState_
{
private:
 uint8_t version_high_ = 0;
 uint8_t version_low_ = 0;    // version_high和version_low:组成电池版本信息。
 uint8_t status_ = 0;   // 显示未开启电池、唤醒事件、电池预充电中、电池正常充电中、电池正常放电中、                                          电池自放电中、电池存在警告、等待按键复位警告中、复位中这些状态
 uint8_t soc_ = 0;     //电池电量信息(1%-100%)
 int32_t current_ = 0;  //充放电信息(正:代表充电,负:代表放电)
 uint16_t cycle_ = 0;  //充电循环次数
 std::array<uint8_t, 2> bq_ntc_ = { };  //电池内部两个NTC的温度(0-BAT1,1-BAT2)
 std::array<uint8_t, 2> mcu_ntc_ = { };  //电池NTC数组(0-RES,1-MOS)
 std::array<uint16_t, 15> cell_vol_ = { };  //单节电压

};
}
}
}
DDS话题通讯中信号类型:unitree_go::msg::dds_::BmsState_

四、传感器状态接口

1、IMU状态接口

文件位置:unitree_sdk2/include/unitree/idl/go2/IMUState_.hpp

 

namespace unitree_go
{
namespace msg
{
namespace dds_
{
class WirelessController_
{
private:
 float lx_ = 0.0f;  //获取左摇杆x数据,范围[-1.0~1.0],左右方向,+:往右,-:往左
 float ly_ = 0.0f;  //获取左摇杆y数据,范围[-1.0~1.0],前后方向,+:往前,-:往后
 float rx_ = 0.0f;  //获取右摇杆x数据,范围[-1.0~1.0], 左右方向,+:顺时针旋转,-:逆时针
 float ry_ = 0.0f;  //获取右摇杆y数据,范围[-1.0~1.0], 前后方向,+:低头,-:抬头
 uint16_t keys_ = 0;  //获取遥控器键值

};
}
}
}
DDS话题通讯中话题·名为:“rt/wirelesscontroller”,信号类型:unitree_go::msg::dds_::WirelessController_
遥控器键值和按钮之间的对应关系由以下联合体定义。将获取到的键值赋给联合体中的value变量,
再通过判断components中的成员变量是否为1,可判断对应的按键是否被按下
typedef union
    {
        struct
        {
            uint8_t R1 : 1;
            uint8_t L1 : 1;
            uint8_t start : 1;
            uint8_t select : 1;
            uint8_t R2 : 1;
            uint8_t L2 : 1;
            uint8_t F1 : 1;
            uint8_t F2 : 1;
            uint8_t A : 1;
            uint8_t B : 1;
            uint8_t X : 1;
            uint8_t Y : 1;
            uint8_t up : 1;
            uint8_t right : 1;
            uint8_t down : 1;
            uint8_t left : 1;
        } components;
        uint16_t value;
    } xKeySwitchUnion;

五、底层控制指令接口与状态接口

1、底层控制指令接口

文件位置:unitree_sdk2/include/unitree/idl/go2/LowCmd_.hpp
namespace unitree_go
{
namespace msg
{
namespace dds_
{
class LowCmd_
{
private:
 std::array<uint8_t, 2> head_ = { };   //帧头,数据校验用(0xFE,0xEF)
//保留,目前不用。
 uint8_t level_flag_ = 0;  
 uint8_t frame_reserve_ = 0;
 std::array<uint32_t, 2> sn_ = { };
 std::array<uint32_t, 2> version_ = { };
 uint16_t bandwidth_ = 0;
// FR_0(髋) -> 0 , FR_1(大腿)-> 1  , FR_2(小腿)-> 2   电机控制顺序,目前只用12电机,后面保留。
// FL_0 -> 3 , FL_1 -> 4  , FL_2 -> 5
// RR_0 -> 6 , RR_1 -> 7  , RR_2 -> 8
// RL_0 -> 9 , RL_1 -> 10 , RL_2 -> 11
 std::array<::unitree_go::msg::dds_::MotorCmd_, 20> motor_cmd_ = { };  //电机控制命令数据
 ::unitree_go::msg::dds_::BmsCmd_ bms_cmd_;  //电池控制命令数据
 std::array<uint8_t, 40> wireless_remote_ = { };  //保留,目前不用
 std::array<uint8_t, 12> led_ = { };  //已经改为内部控制,目前不用
 std::array<uint8_t, 2> fan_ = { };   //已经改为内部控制,目前不用

// &0xFE          自动充电打开              ,  |0x01       自动充电关闭
// &0xFD          12个电机的电源开关打开    ,  |0x02       12个电机的电源开关关闭
 uint8_t gpio_ = 0;
 uint32_t reserve_ = 0;  //保留位
 uint32_t crc_ = 0;    //数据CRC校验用,为32crc校验用

};
}
}
}
DDS话题通讯中话题名为:“rt/lowcmd”,信号类型:unitree_go::msg::dds_::LowCmd_

2、底层状态接口

文件位置:unitree_sdk2/include/unitree/idl/go2/LowState_.hpp
namespace unitree_go
{
namespace msg
{
namespace dds_
{
class LowState_
{
private:
 std::array<uint8_t, 2> head_ = { }; //帧头,数据校验用(0xFE,0xEF)。
//沿用的,但是目前不用。
 uint8_t level_flag_ = 0;
 uint8_t frame_reserve_ = 0;
 std::array<uint32_t, 2> sn_ = { };
 std::array<uint32_t, 2> version_ = { };
 uint16_t bandwidth_ = 0;
 ::unitree_go::msg::dds_::IMUState_ imu_state_; //IMU数据信息。
// FR_0 -> 0 , FR_1 -> 1  , FR_2 -> 2   电机顺序,目前只用12电机,后面保留。
// FL_0 -> 3 , FL_1 -> 4  , FL_2 -> 5
// RR_0 -> 6 , RR_1 -> 7  , RR_2 -> 8
// RL_0 -> 9 , RL_1 -> 10 , RL_2 -> 11
 std::array<::unitree_go::msg::dds_::MotorState_, 20> motor_state_ = { };  //电机总数据
 ::unitree_go::msg::dds_::BmsState_ bms_state_;  //电池总数据
 std::array<int16_t, 4> foot_force_ = { };  //足端力(范围0-4095),可按照实际数值显示。
                                   (数组:0-FR,1-FL,2-RR, 3-RL)
 std::array<int16_t, 4> foot_force_est_ = { }; //沿用的,但是目前不用。
 uint32_t tick_ = 0;  //1ms计时用,按照1ms递增
 std::array<uint8_t, 40> wireless_remote_ = { };  //遥控器原始数据
//&0x80 -  电机               超时标志          1-超时   0-正常
//&0x40 -  小Mcu           超时标志          1-超时   0-正常
//&0x20 -  遥控器             超时标志          1-超时   0-正常
//&0x10 -  电池               超时标志          1-超时   0-正常

//&0x04 -  自动充电           自动充电状态标志  1-不充电           0-充电
//&0x02 -  板载电流错误标志   错误标志          1-板载电流异常     0-正常
//&0x01 -  运控命令超时       超时标志          1-超时             0-正常
 uint8_t bit_flag_ = 0;  //各个组件状态显示
 float adc_reel_ = 0.0f;  //卷线器电流(范围:0 - 3A)
 uint8_t temperature_ntc1_ = 0;  //主板中心温度值(范围:-20 - 100℃)
 uint8_t temperature_ntc2_ = 0;  //自动充电温度(范围:-20 - 100℃)
 float power_v_ = 0.0f;  //此电压值为主板电压 -> 电池电压 
 float power_a_ = 0.0f;  //此电流值为主板电流值 -> 电机电流
 std::array<uint16_t, 4> fan_frequency_ = { };//风扇转速(目前可按照实际数值显示0-10000)。
                                    (0-左后转速 , 1-右后转速,2-前转速,单位转/分钟)
                       (堵转检测:3-&0x01:左后堵转 , &0x02:右后堵转,&0x04:前堵转)
 uint32_t reserve_ = 0;  //保留位
 uint32_t crc_ = 0;  //数据CRC校验用
};
}
}
}
DDS话题通讯中话题名为:“rt/loestate”,信号类型:unitree_go::msg::dds_::LowState_

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值