4.2 LowLevel函数介绍 ============================================= **class lowlevel** 该类用于与电机进行交互,包括发送电机命令和获取电机状态。 --- 4.2.1 创建连接 --------------------------------------------- **函数原型** ```cpp 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 检查通讯状态 --------------------------------------------- **函数原型** ```cpp checkConnection() ``` **功能概述** 检查机器人通讯状态 **参数说明** 无 **返回值类型:bool** | 返回值 | 说明 | |------|------| | true | 连接正常 | | false | 连接失败 | **备注** 可做心跳检测 --- 4.2.3 发送电机指令 --------------------------------------------- **函数原型** ```cpp sendMotorCmd(motorCmd& cmd) ``` **功能概述** 发布电机控制命令 **参数说明** | 参数名 | 类型 | 说明 | 选项 | 备注 | |--------|------|------|---------|-------| | cmd | motorCmd | 电机控制命令结构体 | 必选项 | - | **返回值类型:int** | 返回值 | 说明 | |------|------| | 0 | 发送成功 | | -1 | 发送失败 | **备注** 腿部顺序:右前腿为1号腿,左前腿为2号腿,右后腿为3号腿,左后腿为4号腿;控制命令坐标系为机器狗朝前为X,左侧为Y,垂直向上为Z **Cmd 数据协议** ```C++ 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 获取姿态四元数 --------------------------------------------- **函数原型** ```cpp getQuaternion() ``` **功能概述** 获取机器狗当前姿态四元数 **参数说明** 无 **返回值类型:vector** | 返回值 | 说明 | |------|------| | [w, x, y, z] | 包含4个元素的向量,分别对应四元数的四个分量 | **备注** 机器狗朝前为X,左侧为Y,垂直向上为Z --- 4.2.5 获取姿态欧拉角 --------------------------------------------- **函数原型** ```cpp getRPY() ``` **功能概述** 获取机器狗当前姿态的欧拉角(滚转角、俯仰角、偏航角) **参数说明** 无 **返回值类型:vector** | 返回值 | 说明 | |------|------| | [roll, pitch, yaw] | 包含 3 个元素的向量,单位为弧度(rad),分别对应绕 X、Y、Z 轴的旋转角 | **备注** 机器狗朝前为X,左侧为Y,垂直向上为Z --- 4.2.6 获取加速度 --------------------------------------------- **函数原型** ```cpp getBodyAcc() ``` **功能概述** 获取机器狗身体的加速度数据(机体坐标系) **参数说明** 无 **返回值类型:vector** | 返回值 | 说明 | |------|------| | [ax, ay, az] | 包含 3 个元素的向量,单位为 m/s²,分别对应 X、Y、Z 轴方向的加速度 | **备注** 机器狗朝前为X,左侧为Y,垂直向上为Z --- 4.2.7 获取角速度 --------------------------------------------- **函数原型** ```cpp getBodyGyro() ``` **功能概述** 获取机器狗身体的角速度数据(机体坐标系) **参数说明** 无 **返回值类型:vector** | 返回值 | 说明 | |------|------| | [gx, gy, gz] | 包含 3 个元素的向量,单位为 rad/s,分别对应 X、Y、Z 轴方向的角速度 | **备注** 机器狗朝前为X,左侧为Y,垂直向上为Z --- 4.2.8 获取电机数据 --------------------------------------------- **函数原型** ```cpp getMotorState() ``` **功能概述** 获取机器狗电机数据 **参数说明** 无 **返回值类型:motorState** | 返回值 | 说明 | |------|------| | motorState | 返回各电机数据 | **备注** 单位rad **MotorState 数据协议** ```C++ 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 电机是否存在数据 --------------------------------------------- **函数原型** ```cpp haveMotorData() ``` **功能概述** 判断是否获取到电机数据 **参数说明** 无 **返回值类型:bool** | 返回值 | 说明 | |------|------| | true | 存在电机数据 | | false | 不存在电机数据 | **备注** 在下发电机命令之前先判断是否收到电机数据