我目前正在从事有关机器人技术的项目,我们正在使用Google Cloud Robotics Core,并且我了解与机器人(ROS 2)进行通信的最佳方法是使用声明性API。
我已经阅读了本教程,但我想了解更多信息。我向机器人发送订单的方式到底如何?
“创建代表订单的自定义资源定义(CRD)。通过创建自定义资源从云发送订单。在机器人上创建一个控制器,该控制器查看订单并执行订单”
如果我需要发送诸如“ init”,“ stop”,“ update your code”之类的命令,它可以工作吗?
谢谢你的帮助!
“更新代码”就是一个很好的例子。也许“ init”是不必要的,因为机器人可以在启动之前自动查找订单之前进行初始化。同样,您可以取消或删除任何现有订单,而无需创建“停止”订单,并且当机器人没有有效订单时,机器人将停止。
API的详细信息将在很大程度上取决于您的用例。理想情况下,订单将是独立的,因此即使中途失去网络连接,接收订单的机器人也可以执行订单。例如,我想改编本教程中的示例以反映您的建议:
apiVersion: example.com/v1
kind: Order
metadata:
name: my-move-order
spec:
moveItem:
from: manufacturing
to: logistics
destinationAfterMove: waitingArea
要么
apiVersion: example.com/v1
kind: Order
metadata:
name: my-update-order
spec:
installUpdate:
url: https://myproject.com/updates/2020-03-10.tar.gz
对于真实示例,您可以查看ewm-cloud-robotics项目:
我觉得应该警告一下:如果您具有良好的网络连接性,则声明性API可能会过大,在这种情况下,您可能更喜欢使用VPN和ROS2 actionlib。另外,如果您认为API对于metacontroller而言过于复杂,并且您想使用Python或Go以外的编程语言,则应考虑将订单存储在Redis或MySQL之类的数据库中,而不要使用Kubernetes apiserver(最后我检查过,除Python或Go之外,其他语言都没有很好的客户端支持。
优秀的响应Rodrigo Queiro,非常感谢。现在,我不知道声明性API是否会针对我的用例而被夸大,而是按照更新代码的示例进行:我不完全理解(对我的无知)的部分是机器人将如何接收这些命令?如云简单服务示例中对HTTP查询的响应?(googlecloudrobotics.github.io/core/how-to/…),以便可以在Python中处理答案,或者在这种情况下如何处理?
声明性API的区别在于,响应不是HTTP响应,而是响应为HTTP响应,而是“每个订单一个资源”,其中资源是数据库中的一项。资源规范(spec)就像请求一样,状态是响应,它将被重复更新。更多信息:metacontroller.app/concepts kubernetes.io/docs/concepts/overview/working-with-objects / ...
非常感谢Rodrigo Queiro,现在我对这个问题更加清楚了。我将阅读您留下的文档。
应该如何编写server.py以使其与“更新代码”一起使用?基本模型。
我没有尝试实现远程更新,所以我没有把握,但是我可以想象这样的过程:1)检查“更新”订单,2)设置update_order.status = IN_PROGRESS,3)下载并验证更新文件,4)安装更新,5)设置update_order.status = INSTALLED 6)重新启动系统,7)检查“更新”订单并找到order.status = INSTALLED,8)执行更新后测试,9)设置update_order.status =完成,10)等待新订单。