2 Spot的软件开发

2.1 Spot的运行模式

Spotmini采用Wifi和网络与载荷和外部设备通讯,其提供了完善的API来实现二次开发,采用gRPC框架实现通讯。在Github上Spotmini主要提供的二次开发方案为python语言,另外也提供C++等多种语言的开发接口。

下面我们分析一下Spotmini 面向行业应用到底为用户如何提供SDK和二次开发接口的支持,下图展示了Spotmini在Python下的主要开发功能,可以看到其划分为三个层次,自主,机器人控制,底层业务,每个层次中又包含多个任务模块。总体上覆盖了自主导航、ROS包录制,自主充电,状态反馈,传感器采集,步态控制,数据记录,用户接口,载荷接口等,可以看到是十分的完善,基本可以满足顶层任务开发到底层数据监控的需求。

(1)GraphNav服务

这个功能类似ROS下的导航和建图功能,通过规划路线能让Spot自主地在已有地图上进行作业,另外结合AR功能可以在行走的同时看到路径,并指点规划或者记录Spot遥控的路线,这个功能可以说是非常的方便,对于复杂的任务来说建立地图比较容易,而任务规划更加复杂,通过示教的方式能让Spot更加方便的完成复杂任务。

(2)Mission服务

这个功能结合了GraphNav的底层数据与APP界面,实际比较类似Pixhawk QGC地面站中的航线规划任务,即在地图上某个路点可以编辑细节的任务动作,比如拍照或者控制云台朝向哪个方向,这个功能在DJI行业无人机测绘的功能中已经做的非常成熟,另外Spot的自动充电就类似原来无人机的自主降落功能。

PX4 QGC Mission界面

(3)Choreography服务

这个功能是Spot比较特殊的服务,其是用于Spot舞蹈编辑的,早先Spot的视频中展示过这个功能,其开发了一个专用的界面来完成步态相机,运动状态的离散关键帧规划,而通过Spot自身的在线规划和控制来跟踪,从而实现舞蹈。

特色舞蹈设计界面

(4)Docking服务

这个服务是Spot自动充电的服务,由于Spot续航时间不是很长要满足大范围、长期无人值守下的自主作业,需要实现自动充电,类似扫地机器人,同时在充电的时候可以快速下载测绘数据,这一点到时候无人机方案非常类似。

(5)State服务

该服务主要就是获取Spot本体的系统状态和传感器数据,主要是图像以及局部高程图。

(6)Control服务

该服务能完成对Spot基本步态和运动的控制,因此只能完成上层控制,Spot并没有开发面向伺服底层的控制权限。

Spot提供了丰富的接口,如里程计,深度图,地形估计,坐标系关系,这些数据都可以为SLAM载荷提供本体的运动状态。

(7)Data服务

该服务主要是完成数据存储、通讯、上传、载荷数据通信调度。

通过选择可以让用户决定是将数据存储在本体还是服务器端。

(8)ARM机械臂服务

这个也是Spot比较特殊的功能,主要是完成对机械臂的控制,Spot支撑安装一个机械臂和两个通用载荷,由于Spot的机械臂是完全能实现足臂协同控制的因此其操控更加的偏向任务化和语义化:

针对特殊的开门和抓取任务构建了专用的服务。通过足臂协同能自动的向机械臂工作空间外的目标运动并最终完成自主抓取。其APP设计也非常有特色,如何在优先的界面空间能完成一个6自由度机械臂和机器人底盘的协同任务布置,这里可以参考youtube.com/watch?中的相关视频分段,这一块我认为是未来优先四足机器人产品重点需要关注的部分,直接决定了四足机器人十分能实现替代传统轮式底盘的作业功能。

机械臂操控界面

2.2 SDK开发

Spot采用Python下的二次开发接口,因此能具有在Windows,MacOS和Ubuntu跨平台的开发能力,下面给出指定Spot在向前移动1 m后向左后方移动1 m(向后移动1 m,向左移动1 m)的一个代码示例,从中可以大概了解到Spot SDK的开发方式,当然具体可以下载其源码分析dev.bostondynamics.com/

2.3 总结

在我看来Spot的二次开发模式相比DJI SDK或者其他商用机器人产品的功能完善度不是很高,首先不像A1一样支持对底层伺服控制的接口,另外相比DJI SDK其具有的平台不支持Android和手机端,其最优特色的服务是舞蹈设计和机械臂部分,特别是机械臂的二次开发和足臂协同任务设置值得学习,当然随着Spot的发展本书中的SDK也在不断完善。