12自由度,全肘式四足,每条腿3个无刷电机驱动,肩、髋关节、膝关节
- 仿真环境:pybullet
- 机器人结构参数:URDF
- 正运动学
- 步态 (使用matlab建模验证)
- 步态类别
- 建模 (CPG控制网络)
- 步态切换
- 机体外形设计
- 性能指标
- 驱动
- 无刷电机
- 无刷电机控制器 (STM32,FOC矢量控制)
- 电源
- 供电电路设计
- 主控
- 芯片、平台
- 电路设计
- 系统软件
- 其他
- 步态建模仿真
- 控制理论基础
- 运动学仿真 (环境 pybullet)
- 验证运动学建模
- 验证各种步态
- 验证步态切换
- Python 实现
- 轨迹规划
- 复合摆线
-
$x,y$ : 状态变量 -
$u_1,u_2$ :外部反馈输入 -
$\mu$ : 决定振荡器的幅值$A=\sqrt{\mu}$ $r^2=(x-u_1)^2+(y-u_2)^2$ -
$\omega$ : 振荡器频率 -
$\alpha$ : 用于控制收敛到极限环的速度,为正
机器人参数
-
$l_1$ : 大腿长度 -
$l_2$ : 小腿长度 -
$\theta_{s1}$ : 髋关节站立静态平衡角度 -
$\theta_{s2}$ : 膝关节站立静态平衡角度
步态参数:
-
$\beta$ : 负载因子支撑相时间比例$\beta=\frac{T_{st}}{T}$ -
$T$ : 一个步态周期$T=T_{st}+T_{sw}$ -
$v$ : 运动速度,$v=\frac{S}{T}$ -
$S$ : 步长, 一个步态周期内,支撑腿驱动机体质心相对地面移动的距离 -
$h$ : 一步内足端离地最大高度 -
$\varphi_i$ : 着地时刻相对参考腿的延时与周期的比
典型步态相对相位:$\varphi_{LF}$为参考腿
- 跳跃 pronk:单拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0$ ,$\varphi_{RH}=0$ ,$\varphi_{LH}=0$ - 对角小跑 trot:双拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0.5$ ,$\varphi_{RH}=0$ ,$\varphi_{LH}=0.5$ - 同侧溜步 pace:双拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0.5$ ,$\varphi_{RH}=0.5$ ,$\varphi_{LH}=0$ - 跳跑 bound:双拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0$ ,$\varphi_{RH}=0.5$ ,$\varphi_{LH}=0.5$ - 奔跑 gallop:准双拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0.1$ ,$\varphi_{RH}=0.6$ ,$\varphi_{LH}=0.5$ - 走 walk:四拍,$\varphi_{LF}=0$,
$\varphi_{RF}=0.5$ ,$\varphi_{RH}=0.25$ ,$\varphi_{LH}=0.75$
下降沿:支撑相 上升沿:摆动相
髋关节和膝关节摆动幅值
-
$A_h$ : 髋关节摆动幅值 -
$A_k$ : 膝关节摆动幅值
支撑相阶段,膝关节保持不变,步长由髋关节运动决定
摆动相阶段,足端高度主要由膝关节的运动决定
四足机器人 CPG网络控制
每条腿使用一个振荡器产生髋关节和膝关节信号
-
$\theta_{ji}$ :$i,j$ 振荡器之间的相对相位.$\theta_i^j=\theta_{ji}=2\pi(\varphi_i-\varphi_j)$ -
$\varphi_i$ :$i$ 振荡器的相位 -
$R_{ji}$ : 旋转矩阵,可看成由$j$旋转到$i$ -
$\phi$ : -1为膝式关节,1为肘式关节 -
$\omega_{st}, \omega_{sw}$ : 分别为支撑相和摆动相频率 -
$a$ : 决定$\omega_{sw}, \omega_{st}$ 之间变化速度,为正 -
$\beta$ :为负载因子,支撑相占周期比例
写成矩阵形式
为达到理想的步态,足端轨迹规划需要满足:
- 行进平稳、协调,无明显的上下波动、左右摇晃和前后冲击
- 各关节没有较大冲击,特别是摆动相抬腿和落地瞬间实现零冲击抬腿和落地软着陆
- 摆动腿跨步迅速,足端轨迹圆滑,关节速度和加速度平滑连续无畸点
- 避免足端与地面接触时产生滑动,无摆动腿拖地现象
摆动相
$sgn(\frac{T_{sw}}{2}-t)=\begin{cases}1 & \quad 0 \leq t < \frac{T_{sw}}{2} \ -1 & \quad \frac{T_{sw}}{2} \leq t < T_{sw} \end{cases}$
支撑相
对时间周期化处理
| 名字 | 参数 | 值 |
|---|---|---|
| 机体长 | ||
| 机体宽 | ||
| 肩部长 | ||
| 大腿长 | ||
| 小腿长 | ||
| 机体初始坐标系 | ||
| 机体中心坐标系(相对机体初始坐标系) | ||
| 肩关节坐标系(相对机体中心) | ||
| 髋关节坐标系(相对肩关节) | ||
| 膝关节坐标系(相对肩关节) | ||
| 足底坐标系(相对肩关节) | ||
| 滚转角 roll | ||
| 俯仰角 Pitch | ||
| 偏航角 yaw | ||
| 肩关节角 | ||
| 髋关节仰角 | ||
| 膝关节角 | ||
| 腿编号 | ||
| 腿类别 |
|
|
| 肩类别 |
- 所有的坐标系都是:前
$x$ ,上$z$ ,左$y$ - 腿类别:$1$ 为肘式,$-1$ 为膝式
- 肩类别:$1$ 为腿在肩左边,$-1$ 为腿在肩右边
机体初始坐标系会随着机器人运动而变化。
统一采用指数坐标描述
$R(\hat{\omega}, a)=e^{[\hat{\omega}]\theta}=I+\sin\theta [\hat{\omega}] + (1-\cos\theta) [\hat{\omega}]^2$ $\hat{\omega}_x=[1,0,0]^T,\hat{\omega}_y=[0,1,0]^T,\hat{\omega}_z=[0,0,1]^T$ $R_{sb}=R(\hat{z}, \gamma)R(\hat{y}, \beta)R(\hat{x}, \alpha)$ $P_{sb}=[x_b, y_b, z_b]^T$
$[x_{l_1}, y_{l_1}, z_{l_1}]^T=[d_x, d_y, d_z]^T$ $[x_{l_2}, y_{l_2}, z_{l_2}]^T=[d_x, -d_y, d_z]^T$ $[x_{l_3}, y_{l_3}, z_{l_3}]^T=[-d_x, -d_y, d_z]^T$ $[x_{l_4}, y_{l_4}, z_{l_4}]^T=[-d_x, d_y, d_z]^T$
$S_1=(\hat{\omega}, v)=(1,0,0, 0,0,0)$ $S_2=(\hat{\omega}, v)=(0,1,0, 0,0,0)$ $S_3=(\hat{\omega}, v)=(0,1,0, l_2,0,0)$ $M_1=T(I,0)$ $M_2=T(I, [0,l_1 \cdot sign(shoulder_type), 0]^T)$ $M_3=T(I, [0,l_1 \cdot sign(shoulder_type), -l_2]^T)$ $M_4=T(I, [0,l_1 \cdot sign(shoulder_type), -l_2-l_3]^T)$
已知足部相对于腿部空间的坐标$x,y,z$ 求关节角$\theta_1,\theta_2,\theta_3$
-
使用如下式解
$\lambda=-atan2(-l_3\sin \theta_3, -(l_2+l_3\cos \theta_3))+atan2(x, -\sqrt{z^2+y^2-l_1^2})$ $D=(x^2+y^2+z^2-l_1^2-l_2^2-l_3^2) / (2l_2l_3)$ $\theta_1=atan2(z,y)-atan2(-\sqrt{y^2+z^2-l_1^2},l_1 \cdot sign(shoulder_type))$ $\theta_2=\begin{cases} \lambda+2\pi \cdot sign(leg_type) & \text{if x leg_type < 0} \ \lambda & \text{otherwise} \end{cases}$
$\theta_3=atan2(-\sqrt{1-D^2}\cdot sign(leg_type), D)$ -
以上面解作为初始值,进行数值解(可选)
给定直线运动速度和旋转运动角速度和旋转半径
$v \space \text{m/s}$ $\omega \space \text{rad/s}$ -
$r \space \text{m}$ , 逆时针为$+$ ,顺时针为$-$
旋转运动和直线运动
-
运动开始前位形
$T_{ms}$ ,$R=I$,$p=[0, -r, 0]^T$ 即参考机体初始坐标系${s}$ 选择运动参考坐标系${m}$ -
相对
${m}$ 运动的$x,y,z$ 方向的旋量$S_x=\begin{cases} (1,0,0,\frac{v_x}{\omega_x},0,0) & \text{ if } \omega_x \not = 0 \ (0,0,0,1,0,0) & \text{ otherwise }\end{cases}$
$S_y=\begin{cases} (0,1,0,0,\frac{v_y}{\omega_y},0) & \text{ if } \omega_y \not = 0 \ (0,0,0,0,1,0) & \text{ otherwise }\end{cases}$
$S_z=\begin{cases} (0,0,1,0,0,\frac{v_z}{\omega_z}) & \text{ if } \omega_z \not = 0 \ (0,0,0,0,0,1) & \text{ otherwise }\end{cases}$ -
各轴运动
$\theta_x,\theta_y,\theta_z$ 后$T_{ms^\prime}=TT_{ms}$ -
得到足部运动 (一个周期的)
$T_{f_i f^\prime_i}$ $T_{ss^\prime}=(T_{ms})^{-1}T_{ms^\prime}$ ,同时根据正运动学可知$T_{sf_i}$ ,$T_{s^\prime f^\prime_i}$ ,则$T_{f_i f^\prime_i}=(T_{sf_i})^{-1}T_{ss^\prime}T_{s^\prime f^\prime_i}$
-
站立相
站立相足部和地面会接触,承担机体重量和地面冲击。如果只采用位置控制,很容易给四足机器人的身体带来较大的刚性冲击,不利于稳定的行走或奔跑,还会对结构造成破坏。当腿接触地面时,采用阻抗控制方法来保证腿与地面的灵活接触,有效地减少冲击。
因此,采用位置控制和阻抗控制分别设计站立和摆动相位。
$$S_{st,<x,y>}=V_{desire}t_{st}$$ $$T_{st}=\frac{L}{V_{desire}}$$ -
$L$ 步态周期中的腿跨步长度 -
$T_{st}$ 站立相时间 -
$V_{desire}$ 机器人期望速度
考虑到腿在接触地面时会承受冲击并产生变形,在站立阶段采用阻抗控制来抵抗冲击,因此需要虚拟位移
$\Delta$ 来保证四足机器人的身体稳定性。$$S_{st,z}=-\Delta \cdot \cos \left(\pi(\frac{1}{2}-\frac{V_{desire}t_{st}}{L})\right)-P_0$$ -
-
摆动相
AiDIN-IV 方法
$$B(t)=\sum\limits_{i=0}^n \binom{n}{i}P_i(1-t)^{n-i}t^i$$ $$\binom{n}{i}=\frac{n!}{i! \cdot (n-i)!}$$ $P_i$ 是关键点(fitting point)贝塞尔曲线
- 双重合拟合点确定一个零速度点
- 三重重合拟合点确定一个零加速度点 $$V_{sw,i}|{t{sw}=0}=\frac{(n+1)(P_1-P_0)}{T_{sw}}$$ $$V_{sw,i}|{t{sw}=T_{sw}}=\frac{(n+1)(P_n-P_{n-1})}{T_{sw}}$$
已知一个周期足底坐标变化位形
则可知一个周期内,足部需要移动的目标位移
-
站立相
$x(\varphi_{st})=x_d \cdot (1-\varphi_{st})$
$y(\varphi_{st})=y_d \cdot (1-\varphi_{st})$
$z(\varphi_{st})=z_d \cdot (1-\varphi_{st}) - \Delta \cdot \cos \left(\pi(0.5-\varphi_{st})\right)$ -
摆动相
$x(\varphi_{sw})=x_d \cdot (B(\varphi_{sw})x - (P_0)x) \cdot 10.0$
$y(\varphi{sw})=y_d \cdot (B(\varphi{sw})y - (P_0)y) \cdot 10.0$
$z(\varphi{sw})=z_d \cdot (B(\varphi{sw})_z - (P_0)_z) \cdot 10.0$关键点:生成一条与 x 轴成45度的,位于 z 轴上方的曲线
$P_0=[-0.05, -0.05, 0]^T$
$P_1=[-0.06, -0.06, 0]^T$
$P_2=[-0.07, -0.07, 0.05]^T$
$P_3=[-0.07, -0.07, 0.05]^T$
$P_4=[0, 0, 0.05]^T$
$P_5=[0, 0, 0.06]^T$
$P_6=[0.07, 0.07, 0.06]^T$
$P_7=[0.07, 0.07, 0.06]^T$
$P_8=[0.06, 0.06, 0]^T$
$P_9=[0.05, 0.05, 0]^T$