在cozmo的python sdk中的01_basics看到有两种运动控制方式,分别出现在02_drive_and_turn.py和05_motors.py。
简言之,两种方法一种是针对结果进行控制,一种是针对过程的控制。但是从根源上讲,其实也都是一样的。
在示例02中,对机器人是这样控制的:
robot.drive_straight(distance_mm(150), speed_mmps(50)).wait_for_completed()
robot.turn_in_place(degrees(90)).wait_for_completed()
第一行是对行进运动的要求,前进150mm,速度为50mmps。mmps这个单位是指每秒行进多少毫米(millimeters per second)。
第二行是对旋转运动的要求,逆时针旋转90°。
由下图可以看出,cozmo行进距离的精准度还是挺不错的。
顺便吐槽一句,图片不能大于5m可真麻烦啊。
再看示例 05的控制方式:
robot.drive_wheels(25, 50)
robot.drive_wheels(50, -50)
由于cozmo用的是同步带传动,所以对于速度的控制只要区分开左右侧就行。robot.drive_wheels(x, y)中的x是左轮的速度(单位mmps),y则是右轮速度。左右侧差速就可以实现机器人在二维空间的各种运动。
如果想要让cozmo“爱的魔力转圈圈”,那左右轮速度完全相反是最容易的,就像操控方向盘一样给机器人施加一个力偶产生纯转动。
最后,选择哪种控制方式肯定是要依实际情况而定,但是个人感觉第二种方式应该更实用,毕竟第一种方式也算是第二种方式的特例了。