怎样写一个类似ROS的易用的android机器人框架(1)

ROS是一个运行在ubuntu上的机器人操作系统。 ROS采用进程间通信的方式,将机器人各个功能模块分离,让负责算法专注于算法,负责传感器的专注于数据采集,负责UI交互的专注于界面显示,模块之间的耦合是松散的,移除模块或者加入新的模块都不会影响现有模块的运行。ROS的功能模块可以叫做节点。节点之间采用 sub/pub 方式传递不同类型的消息,整个系统维护一个特殊的 Master节点,Master节点由MasterServer维护,负责所有其他节点之间的消息转发。ROS是个分布式操作系统,普通节点可以和 Master 节点运行在同一主板上,已可以运行在另外的主板上,只有两个主板实现网络通讯就行。 ROS系统包含了很多实现机器人相关的算法的软件包,如机械臂运动空间计算,SLAM地图等

不过可惜的是,ROS的软件包大都是C++写的,要不就是Python实现得,要编译ROS系统,需要在ubuntu系统使用cmake工具链,在嵌入式平台特别是android平台成功的经验不多,而且现在未实现在安卓主板上运行MasterServer,ROS系统的MasterServer仍然需要运作在ubuntu主板上。

本文将试图构建一个类似ROS系统的的android软件框架,已便能够开发已android平台为主系统的机器人软件

需要实现的目标:

  1. 模拟实现ROS系统的节点通讯机制,节点代码可以在本进程,独立进程,甚至在非主控主板上(如果系统有多块主板的话)运行。
  2. 机器人任务管理。现实中存在这样的场景,用户往往命令机器人做很多工作,有些工作要独占一些执行元件,这样不太的指令就会冲突。机器人任务管理就是对机器人接收到的任务指令进行统一的排列和调度管理,新的任务到来时,当前不太重要的任务可以暂存起来,释放资源(如执行部件的使用权限)给新任务执行,等新任务结束后,再恢复暂存的任务继续执行。
  3. 与下位机MCU的通讯。我设计的是MCU支持USB总线的,MCU控制马达,舵机,红外,超声波等传感器和执行部件,利用一个支持USB OTG 功能的手机作为主机,同时利用手机内部的重力传感器和麦克风,扬声器,屏幕构成一个完整的机器人系统
  4. Lua编写机器人控制逻辑代码。Lua是简单易懂的,轻量级的脚本语言,在游戏脚本开发甚至简单的单片机系统都能用,用Lua开发机器人的好处是:简单,快捷(不需要编译,现写现运行),支持热更新
  5. 简单的机器人UI界面。显示机器人虚拟人形象。实现语音交互。
  6. 机器人通用算法。机械臂运动空间解算,简单的自平衡PID控制。需要一些c++的数学矩阵库的支持

关于项目

  • 我将在开源中国开放代码,欢迎各位指正 EasyRobot源码
  • 项目以Kotlin语言开发,没学过的同学可以先网上找资料预习一下,语法很像swift和go应该很容易看懂的,不用担心,因为Kotlin可以与Java共存的,后期会加入一下C和Java还有Lua的代码

怎样写一个类似ROS的易用的android机器人框架(2)

猜你喜欢

转载自my.oschina.net/u/181909/blog/1813434