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 |
不存在电机数据 |
备注
在下发电机命令之前先判断是否收到电机数据