舵机接口(Python)

概要

小龟主控板设计了一套基于舵机并行的运动模型。基于这个接口,可以快速实现多个舵机的并行联动。

小龟主控板的舵机接口是并行执行接口,也就是同时提交两行舵机指令,会同步执行。

而不是象传统的串行代码那样,先等待第一行舵机指令结束,再执行第二行舵机指令。



基础概念

管脚集

在机器人结构中,通常每个结构单元都会由多个舵机组成,我们将这些多个舵机对应的管脚集,称为管脚集。

如:机械臂是由S1、S2、S3三个舵机组成,那么机械臂的管脚集是 [S1, S2, S3];

如:机器狗尾巴是由A1、S7两个舵机组成,那么尾巴的管脚集是 [A1, S7];



动作节点集

我们知道一个动作(比如:抬腿)可以分解成多个节点,比如先抬膝盖到指定高度,然后再抬小腿到指定高度两个阶段组成。

我们将这两个阶段称为两个节点,一组节点组成了一个完整的动作。

单独每个节点的格式如:

[节点耗时, 节点停留, 舵机1的目标角度,舵机2的目标角度, ......]

分别意义如下:

节点耗时:代表期望用多少秒,将所有舵机旋转到目标角度。如果本节点内有多个舵机,则多个舵机都会消耗相同的时间到达指定角度;

节点停留:代表所有舵机到达本节点目标角度后,保持现有角度停留多少秒;

舵机N的目标角度:和管脚集对应的每个舵机期望旋转到的目标角度;


节点集则是由多个单一节点组合而成的数组集合:

[[节点1耗时, 节点1停留, 舵机1的目标角度1,舵机2的目标角度1, ......],

[节点2耗时, 节点2停留, 舵机1的目标角度2,舵机2的目标角度2, ......], ....]


小龟主控板的舵机操控就一个统一的接口 car.servo

具体说明如下


单舵机单角度运动

语法:

说明:

旋转指定管脚上的舵机到目标角度。

参数:

范例:

#用5秒钟时间,将舵机A1从当前角度位置旋转到90度位置。car.servo(A1, 90, 5)
#用1.5秒钟时间,将舵机S1从当前角度位置旋转到0度位置。car.servo(S1, 0, 1.5)


单舵机连片运动

语法:

说明:

旋转指定管脚上的舵机到目标角度。

参数:

范例:

#按这个次序旋转A1管脚上的舵机:#1、先用3秒钟时间旋转到0度,然后停留1秒钟;#2、接着用1秒钟时间旋转到180度,不做停留;#3、最后用3秒钟时间旋转舵机到95度。car.servo(A1, [[3,1,0],[1,0,180],[3,0,95],
])


多舵机连片运动

语法:

说明:

旋转指定管脚上的舵机到目标角度。

参数:

范例:

#按下面次序依次同步旋转S1、S2、S3三个舵机:#步骤1:用3.5秒钟时间,同时将S1旋转到0度、S2旋转到0度、S3旋转到0度,旋转完成后,并停留1秒钟;#步骤2:用2秒钟时间,同时将S1旋转到180度、S2旋转到120度、S3旋转到90度,旋转完成后,并停留1.5秒钟;#步骤3:用5秒钟时间,同时将S1旋转到30度、S2旋转到90度、S3旋转到180度,旋转完成后,并停留1秒钟;car.servo([S1, S2, S3], [[3.5,  1,   0,   0,   0],[2,  1.5, 180, 120,  90],
[5, 1, 30, 90, 180]
])