[release] 发布8DOF串联足中期检查版本

This commit is contained in:
2026-07-21 12:18:00 +08:00
commit 0b91dfffe6
265 changed files with 170023 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
# 机器人趴下动作实现大纲
## 1. 目标
实现四足机器人从站立状态平滑过渡到趴下状态(降低机身高度至最低)。
## 2. 硬件与运动学基础
* **腿部结构**:双连杆结构(大腿 L1=250mm, 小腿 L2=227mm)。
* **电机配置**:每条腿2个电机,共8个电机(CAN1/CAN2 ID 1-4, 5-8)。
* **坐标系**:基于 `leg.c``Inverse_Calculation`,输入为 (X, Y)。
* 根据代码推测,Y 为垂直方向距离(机身到足端),X 为水平方向偏移。
* L = sqrt(X^2 + Y^2) 为髋关节到足端的直线距离。
* 趴下即减小 Y 值,使机身贴近地面。
## 3. 实现方案
### 3.1 定义趴下姿态
* **目标足端坐标**
* `Target_X = 0`:足端保持在髋关节垂直投影线上(或根据需要微调)。
* `Target_Y = H_min`:最小支撑高度。需根据机械结构测量,例如 100mm - 150mm,确保大腿和小腿折叠时不发生机械干涉。
* **目标关节角度**
* 通过 `Inverse_Calculation(0, H_min, ...)` 计算出对应的电机目标角度 `range1``range2`
### 3.2 动作流程设计
1. **初始化/获取状态**
* 确认当前机器人处于站立或可控状态。
* 记录当前的设定高度 `Current_Y`
2. **轨迹规划(平滑过渡)**
* **目的**:防止机器人直接“摔”在地上,保护机械结构和电机。
* **方法**:使用插值算法(线性插值或 S 曲线插值)。
* 在时间 `T`(如 2秒)内,将高度指令从 `Current_Y` 逐步减小到 `Target_Y`
3. **控制循环执行**
* 在循环中(如 1ms 或 5ms 周期):
1. 计算当前时刻的目标高度 `h(t)`
2. 调用 `Inverse_Calculation(0, h(t), ...)` 解算四条腿的关节角度。
3. 调用 `Posture()` 函数向 8 个电机发送位置控制指令(Position Mode 或 MIT Mode)。
4. **到位处理**
* 当达到 `Target_Y` 后,机器人应已趴在地上。
* **节能模式**:如果机身已由地面完全支撑,可以将电机的 `Kp`, `Kd``Torque` 设为 0,进入阻尼模式或空闲模式,防止电机持续堵转过热。
## 4. 伪代码示例
```c
// 定义在 User/app/execute_task.c 或类似文件中
void Robot_LieDown(void) {
RobotGeometry geom = { .L1 = 250.0f, .L2 = 227.0f };
float current_h = 300.0f; // 假设初始站立高度
float target_h = 120.0f; // 趴下时的目标高度(需实测)
float duration = 2000.0f; // 动作耗时 2000ms
float dt = 5.0f; // 控制周期 5ms
float t = 0;
while (t <= duration) {
// 1. 计算当前高度 (线性插值)
float h = current_h + (target_h - current_h) * (t / duration);
// 2. 运动学解算 (假设 X=0)
float angle1, angle2;
Inverse_Calculation(0, h, &angle1, &angle2, &geom);
// 3. 发送指令给四条腿 (假设腿的电机ID映射如下)
// Leg 1 (FL)
Posture(1, angle1, 0, 4.0f, 1.0f, 0);
Posture(2, angle2, 0, 4.0f, 1.0f, 0);
// Leg 2 (FR)
Posture(3, angle1, 0, 4.0f, 1.0f, 0);
Posture(4, angle2, 0, 4.0f, 1.0f, 0);
// ... Leg 3 & 4
t += dt;
osDelay((uint32_t)dt);
}
// 4. 趴下后处理 (可选:关闭力矩输出)
// Disable_Motor_Torque();
}
```
## 5. 验证与调试
1. **静态测试**:将机器人架空,运行趴下程序,观察腿部是否缓慢收缩,角度方向是否正确。
2. **落地测试**:在软垫上测试,观察趴下过程是否平稳,是否有冲击。
3. **干涉检查**:确认趴到底时,机械结构不会互相碰撞或卡死(特别注意皮带传动部分是否受压或过度弯曲)。