4.2 LowLevel函数介绍

class lowlevel

该类用于与电机进行交互,包括发送电机命令和获取电机状态。


4.2.1 创建连接

函数原型

initRobot(const std::string &local_ip, const int local_port, const std::string &dog_ip = "192.168.234.1")

功能概述 与机器狗建立通信,机器狗端ip默认"192.168.234.1", 如更改机器人ip,需从该接口传入新ip

参数说明

参数名

类型

说明

选项

备注

local_ip

string&

用户主机IP地址

必选项

-

local_port

int

用户主机端口

必选项

-

dog_ip

string&

机器狗IP地址

可选项

默认"192.168.234.1")

返回值

备注 通信建立失败时,终端输出失败日志


4.2.2 检查通讯状态

函数原型

checkConnection()

功能概述 检查机器人通讯状态

参数说明

返回值类型:bool

返回值

说明

true

连接正常

false

连接失败

备注 可做心跳检测


4.2.3 发送电机指令

函数原型

sendMotorCmd(motorCmd& cmd)

功能概述 发布电机控制命令

参数说明

参数名

类型

说明

选项

备注

cmd

motorCmd

电机控制命令结构体

必选项

-

返回值类型:int

返回值

说明

0

发送成功

-1

发送失败

备注 腿部顺序:右前腿为1号腿,左前腿为2号腿,右后腿为3号腿,左后腿为4号腿;控制命令坐标系为机器狗朝前为X,左侧为Y,垂直向上为Z

Cmd 数据协议

struct alignas(4) motorCmd  {

  float q_des_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节角度指令
  float q_des_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节角度指令
  float q_des_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节角度指令

  float qd_des_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节角速度指令
  float qd_des_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节角速度指令
  float qd_des_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节角速度指令

  float kp_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节Kp值
  float kp_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节Kp值
  float kp_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节Kp值

  float kd_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节Kd值
  float kd_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节Kd值
  float kd_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节Kd值

  float tau_abad_ff[4] = {0.0, 0.0, 0.0, 0.0}; // A关节扭矩指令
  float tau_hip_ff[4] = {0.0, 0.0, 0.0, 0.0};  // H关节扭矩指令
  float tau_knee_ff[4] = {0.0, 0.0, 0.0, 0.0}; // K关节扭矩指令

};

4.2.4 获取姿态四元数

函数原型

getQuaternion()

功能概述 获取机器狗当前姿态四元数

参数说明

返回值类型:vector

返回值

说明

[w, x, y, z]

包含4个元素的向量,分别对应四元数的四个分量

备注 机器狗朝前为X,左侧为Y,垂直向上为Z


4.2.5 获取姿态欧拉角

函数原型

getRPY()

功能概述 获取机器狗当前姿态的欧拉角(滚转角、俯仰角、偏航角)

参数说明

返回值类型:vector

返回值

说明

[roll, pitch, yaw]

包含 3 个元素的向量,单位为弧度(rad),分别对应绕 X、Y、Z 轴的旋转角

备注 机器狗朝前为X,左侧为Y,垂直向上为Z


4.2.6 获取加速度

函数原型

getBodyAcc()

功能概述 获取机器狗身体的加速度数据(机体坐标系)

参数说明

返回值类型:vector

返回值

说明

[ax, ay, az]

包含 3 个元素的向量,单位为 m/s²,分别对应 X、Y、Z 轴方向的加速度

备注 机器狗朝前为X,左侧为Y,垂直向上为Z


4.2.7 获取角速度

函数原型

getBodyGyro()

功能概述 获取机器狗身体的角速度数据(机体坐标系)

参数说明

返回值类型:vector

返回值

说明

[gx, gy, gz]

包含 3 个元素的向量,单位为 rad/s,分别对应 X、Y、Z 轴方向的角速度

备注 机器狗朝前为X,左侧为Y,垂直向上为Z


4.2.8 获取电机数据

函数原型

getMotorState()

功能概述 获取机器狗电机数据

参数说明

返回值类型:motorState

返回值

说明

motorState

返回各电机数据

备注 单位rad

MotorState 数据协议

struct alignas(4) motorState {
  // 关节顺序 FR,FL,RR,RL 
  float q_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节角度
  float q_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节角度
  float q_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节角度

  float qd_abad[4] = {0.0, 0.0, 0.0, 0.0}; // A关节角速度
  float qd_hip[4] = {0.0, 0.0, 0.0, 0.0};  // H关节角速度
  float qd_knee[4] = {0.0, 0.0, 0.0, 0.0}; // K关节角速度

  float tau_abad_fb[4] = {0.0, 0.0, 0.0, 0.0};// A关节扭矩反馈
  float tau_hip_fb[4] = {0.0, 0.0, 0.0, 0.0};  // H关节扭矩反馈
  float tau_knee_fb[4] = {0.0, 0.0, 0.0, 0.0}; // K关节扭矩反馈
};

4.2.9 电机是否存在数据

函数原型

haveMotorData()

功能概述 判断是否获取到电机数据

参数说明

返回值类型:bool

返回值

说明

true

存在电机数据

false

不存在电机数据

备注

在下发电机命令之前先判断是否收到电机数据