基于ROS的分布式机器人远程控制平台

 

1 结构说明

HiBot架构主要使用C/S架构,其中HibotServer为服务器,Muqutte为消息服务器中间件,HiBotClient为运行在机器人上的客户端。主要实现了机器人任务的远程部署、监控、控制三大功能,机器人平台依赖于ROS。其架构如下图所示 下面是对这三个重要组成部分的说明

1.1 HiBotServer

Web服务器则使用Jersey框架[13],Jersey是开源的RESTful 框架,基于RESTful的Web Service相比传统的web Service具有占用资源少、实现简单等优点。因此,HiBot提供RESTful API,使得各种设备接入HiBot进而进行机器人的操控变得更加简单。

1.2 Muqutte

HiBot选择轻量级的MQTT协议作为推送服务器与客户端之间的通信协议,推送服务器的中间代理(broker)则选用了开源推送代理服务器Moquette[12] (https://github.com/andsel/moquette) ,Moquette是基于事件驱动的服务器,支持websocket连接、权限验证、数据加密、服务质量保证等功能。我们在Moquette-0.8版本上进行定制,引入数据库对重要数据进行存储,加入客户端列表功能。

1.3 HiBotClient

HiBot客户端,主要负责接收并执行远程任务部署、监控、控制命令。 客户端构建在ROS之上,任务的执行依赖于ROS环境,客户端最核心的工作是接收执行来自服务器的相关命令。客户端主要包括消息解析模块、逻辑处理模块、数据请求和响应模块以及任务池模块。当服务器有消息推送到客户端时,首先消息解析模块解析该条消息并将其提交给逻辑处理模块中相应的功能模块,这些功能模块通过任务池中的任务进行操作来完成消息的执行工作,最终数据请求及分发模块会将执行结果数据上传至web服务器。

2 RESTFul接口

服务器接口采用RESTful格式,形式为 http://ip:port/HiBotServer/api/v1 + 具体请求操作

2.1 客户端操作

  • 查看客户端列表
GET
http://ip:port/HiBotServer/api/v1/client/list
# 可选参数
# startPage
# pageSize
# 例 http://localhost:8080/HiBotServer/api/v1/client/list?startPage=2&pageSize=10
  • 查看客户端详情
GET
http://ip:port/HiBotServer/api/v1/client/id/<id>
# id 客户端id
# 例 http://localhost:8080/HiBotServer/api/v1/client/id/1

2.2 任务/应用操作

  • 任务详细信息
GET
http://ip:port/HiBotServer/api/v1/task/id/<id>
# id 任务id
# 例 http://ip:port/HiBotServer/api/v1/task/id/1
  • 任务推送(推拉结合)
GET
http://ip:port/HiBotServer/api/v1/task/publish/taskId/<taskId>/clientIds/<clientIds>
# taskId 任务id
# clientIds 客户端id,以逗号相隔
# 例 http://localhost:8080/HiBotServer/api/v1/task/publish/taskId/1/clientIds/1,2,3
  • 任务推送(直接推送任务二进制包)
GET
http://ip:port/HiBotServer/api/v1/task/publishFile/clientId/<clientId>/filePath/<filePath>
# clientId 客户端id
# filePath 文件路径
# 例 http://localhost:8080/HiBotServer/api/v1/task/publishFile/clientId/1/filePath/myros.zip
  • 完成任务(由客户端调用)
GET
http:///ip:port//HiBotServer/api/v1/task/finishTask/clientId/<clientId>
# clientId 客户端id
#例 http://localhost:8080/HiBotServer/api/v1/task/finishTask/clientId/1

2.3 任务节点操作

  • 向客户端发送上传任务节点信息请求-1
GET
http://ip:port/HiBotServer/api/v1/node/publish/clientIdMac/<clientIdMac>
# clientIdMac 客户端网卡/别名
# 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/publish/clientIdMac/1
  • 向客户端发送上传任务节点信息请求-2
GET
http://ip:port/HiBotServer/api/v1/node/publish/clientId/<clientId>
# clientId 客户端id
# 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/publish/clientId/1
  • 查看客户端的任务node情况
GET
http://ip:port/HiBotServer/api/v1/node/clientId/<clientId>
# clientId 客户端id
# 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/clientId/1
  • 向客户端上传节点信息(客户端接口)
POST
http://ip:port/HiBotServer/api/v1/node/uploadNodeList
# form:data 开源代码位置:https://gitee.com/smarft/HiBot

基于ROS的分布式机器人远程控制平台的更多相关文章

  1. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  2. 基于AgileEAS.NET企业应用开发平台的分布式解决方案

    开篇 分布式应用 AgileEAS.NET基于Microsoft .Net构件技术而构建,Microsoft .Net最吸引人的莫过于分布式应用技术,基已经提供了XML WebService. .Ne ...

  3. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  4. 谈谈分布式事务之二:基于DTC的分布式事务管理模型[下篇]

    [续上篇] 当基于LTM或者KTM的事务提升到基于DTC的分布式事务后,DTC成为了本机所有事务型资源管理器的管理者:此外,当一个事务型操作超出了本机的范 围,出现了跨机器的调用后,本机的DTC需要于 ...

  5. 基于 dubbo 的分布式架构

    前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM 项目来让第一次接触的同学能快速上手. 浅谈分布式架构 分布式架构单看这个名字 ...

  6. 基于GIS的视频管理指挥平台

    平台利用空间地理信息技术,以GIS地图为基础,将各类信息空间化.可视化,实现基于空间电子地图的可视化查询和分析,它能使情报.推理.分析与其他可用数据融为一体,提供依托于电子地图的清晰而精确的现场态势图 ...

  7. 基于 redis 的分布式锁实现 Distributed locks with Redis debug 排查错误

    小结: 1. 锁的实现方式,按照应用的实现架构,可能会有以下几种类型: 如果处理程序是单进程多线程的,在 python下,就可以使用 threading 模块的 Lock 对象来限制对共享变量的同步访 ...

  8. python 全栈开发,Day140(RabbitMQ,基于scrapy-redis实现分布式爬虫)

    一.RabbitMQ 队列 在生产者消费模型中,比如去餐馆吃饭的例子.生产者相当于厨师,队列相当于服务员,消费者就是你. 我们必须通过服务员,才能吃饭! 如果队列满了,队列会一直hold住.必须让消费 ...

  9. 基于zookeeper实现分布式配置中心(二)

    上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...

随机推荐

  1. 如何把PDF文件拆分为多个文件

    一个PDF文件有很多个PDF页面组成,有时候我们只需要单个页面的时候应该怎么做呢,这个时候就需要拆分PDF文件了,那么如何把 PDF文件拆分为多个文件呢,应该有很多的小伙伴都想知道吧,那就让我们一起来 ...

  2. AD证书导入文档(单向认证)

    AD证书或者SSL证书导入的方法步骤(在root用户下操作) 1.  将证书命名为AD-PRO.cer,并确定证书的颁发. 2.  将/app/ad_cert/keystore下的原有证书删除掉和文件 ...

  3. HTTP Status 500 - java.lang.reflect.InvocationTargetException

    type Exception report message java.lang.reflect.InvocationTargetException description The server enc ...

  4. linux服务器安装pyspide关于rgnutls.h: No such file or directory 的解决方案

    In file included from src/docstrings.c:4:0: src/pycurl.h:148:30: fatal error: gnutls/gnutls.h: No su ...

  5. 学习笔记: 异常状态管理,托管堆垃圾回收,CLR寄宿

    1. 2. string 在内存中是连续分配的,是一个数组,  数组的特点就是 查询块,增删慢,改动Array导致所有数组成员地址变动,成本高 而string又是在程序中经常变动的 ,所有 clr中对 ...

  6. git 切换远程仓库,以及碰到的一个问题。

    git 切换远程仓库出现如下问题: $ git checkout -b localdev origin/dev fatal: Cannot update paths and switch to bra ...

  7. commanderJs编写命令行工具(cli)

    前言: 最近需要做一个内部的node cli来独立构建流程,对整个命令行工具实现流程有了大致了解,下面来解释一下如何实现一个cli,和如何使用 commander 库.   新手误区: 在开始实现之前 ...

  8. .Net Core库类项目跨项目读取配置文件

    在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序类似于一个控制台,当程序运行到Startup时会自动注入IConfiguration,默认读取当前 ...

  9. Beta(2/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  10. Vs2017 typescript 开发小问题

    最近想写点ts的东西,以前用vs2015很方便,直接创建一个ts app项目就折腾了. Vs2017打开,居然发现这个项目模板不见了.   于是研究了一下,由于原来的ts app项目就是一个asp.n ...