我目前正在从事有关机器人技术的项目,我们正在与Google Cloud Robotics Core合作,并且我了解与机器人(ROS 2)进行通信的最佳方法是使用声明性API。
我已经阅读了本教程,但我想了解更多信息。我向机器人发送订单的方式到底如何?
“创建代表订单的自定义资源定义(CRD)。通过创建自定义资源从云发送订单。在机器人上创建控制器,该控制器查看订单并执行订单”
如果我需要发送诸如“ init”,“ stop”,“ update your code”之类的命令,它会起作用?
感谢您的帮助!
“更新您的代码”就是一个很好的例子。也许“ init”是不必要的,因为机器人可以在启动前自动寻找订单之前进行初始化。同样,您可以取消或删除任何现有订单,而无需创建“停止”订单,并且当机器人没有有效订单时,它也会停止。
API的详细信息在很大程度上取决于您的用例。理想情况下,订单将是独立的,以便接收订单的机器人即使在途中失去网络连接时也可以执行订单。例如,我尝试改写tutorial中的示例以反映您的建议:
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之外,没有其他语言对客户端的良好支持。