4.3 LowLevel 数据结构与函数说明

lowlevel.h 文件定义了机器人底层电机控制接口,主要通过共享内存(SHM)实现对机器人电机控制和状态的管理,同时还包括惯性测量单元(IMU)的数据共享。


4.3.1 数据结构

4.3.1.1 关节控制参数

结构体原型

typedef struct joint_control_def {
    float p_des; // 目标位置(单位:弧度)
    float v_des; // 目标速度(单位:弧度/秒)
    float kp;    // 比例增益
    float kd;    // 微分增益
    float t_ff;  // 前馈扭矩(单位:牛·米)
} joint_control_t;

字段说明

字段名

类型

说明

p_des

float

目标位置,单位为弧度

v_des

float

目标速度,单位为弧度/秒

kp

float

比例增益,用于控制器

kd

float

微分增益,用于控制器

t_ff

float

前馈扭矩,单位为牛·米


4.3.1.2 腿部控制参数

结构体原型

typedef struct leg_control_def {
    joint_control_t abad; // 髋关节外展/内收控制
    joint_control_t hip;  // 髋关节俯仰控制
    joint_control_t knee; // 膝关节控制
    joint_control_t foot; // 足部控制
    int32_t flags;        // 标志位,始终设置为 1
} leg_control_t;

字段说明

字段名

类型

说明

abad

joint_control_t

髋关节外展/内收控制参数

hip

joint_control_t

髋关节俯仰控制参数

knee

joint_control_t

膝关节控制参数

foot

joint_control_t

足部控制参数

flags

int32_t

标志位,始终设置为 1


4.3.1.3 关节状态参数

结构体原型

typedef struct joint_state_def {
    int32_t flags; // 状态标志位
    float p;       // 当前角度(单位:弧度)
    float v;       // 当前角速度(单位:弧度/秒)
    float t;       // 当前扭矩(单位:牛·米)
} joint_state_t;

字段说明

字段名

类型

说明

flags

int32_t

状态标志位,包含电机状态信息

p

float

当前角度,单位为弧度

v

float

当前角速度,单位为弧度/秒

t

float

当前扭矩,单位为牛·米

备注

  • flags 的每个位表示不同的状态信息,例如电压、温度、故障标志等。


4.3.1.4 腿部状态参数

结构体原型

typedef struct leg_state_def {
    joint_state_t abad; // 髋关节外展/内收状态
    joint_state_t hip;  // 髋关节俯仰状态
    joint_state_t knee; // 膝关节状态
    joint_state_t foot; // 足部状态
} leg_state_t;

字段说明

字段名

类型

说明

abad

joint_state_t

髋关节外展/内收状态参数

hip

joint_state_t

髋关节俯仰状态参数

knee

joint_state_t

膝关节状态参数

foot

joint_state_t

足部状态参数


4.3.2 函数接口

4.3.2.1 创建腿部控制共享内存

函数原型

static inline spline_data_p create_spline_shm(void);

功能概述 创建用于腿部控制和状态的共享内存。

返回值

返回值

说明

spline_data_p

指向共享内存的指针

备注

  • 共享内存路径为 /spline_shm

  • 共享内存大小为 10 KB。


4.3.2.2 销毁腿部控制共享内存

函数原型

static inline void destroy_spline_shm(spline_data_p ptr);

功能概述 销毁腿部控制和状态的共享内存。

参数说明

参数名

类型

说明

ptr

spline_data_p

指向共享内存的指针

备注

  • 当前实现中无需显式解除映射或删除共享内存。


4.3.2.3 创建 IMU 数据共享内存

函数原型

static inline nav_imu_p create_imu_shm(void);

功能概述 创建用于 IMU 数据的共享内存。

返回值

返回值

说明

nav_imu_p

指向共享内存的指针

备注

  • 共享内存路径为 /imu_shm

  • 共享内存大小为 1 KB。


4.3.2.4 销毁 IMU 数据共享内存

函数原型

static inline void destroy_imu_shm(nav_imu_p ptr);

功能概述 销毁 IMU 数据的共享内存。

参数说明

参数名

类型

说明

ptr

nav_imu_p

指向共享内存的指针

备注

  • 当前实现中无需显式解除映射或删除共享内存。


4.3.3 注意事项

共享内存管理

  • 确保在程序退出时正确销毁共享内存。

  • 多进程访问共享内存时需注意同步问题。

参数范围

  • joint_control_t 中的参数(如 kpkd)需根据具体硬件特性设置合理范围。

  • joint_state_t 中的状态值(如 pvt)可能受硬件限制。

实时性要求

  • 共享内存的更新频率为 1 ms,需确保消费者能够及时处理数据。

数据读写

  • CONSUMER_CONTROL为状态位,

    • 控制时由消费者将状态置为1,由生产者读取数据后将状态置为0。

    • 读取数据时由生产者将状态置为1,由消费者读取数据后将状态置为0。