ROS是一个运行在ubuntu上的机器人操做系统。 ROS采用进程间通讯的方式,将机器人各个功能模块分离,让负责算法专一于算法,负责传感器的专一于数据采集,负责UI交互的专一于界面显示,模块之间的耦合是松散的,移除模块或者加入新的模块都不会影响现有模块的运行。ROS的功能模块能够叫作节点。节点之间采用 sub/pub 方式传递不一样类型的消息,整个系统维护一个特殊的 Master节点,Master节点由MasterServer维护,负责全部其余节点之间的消息转发。ROS是个分布式操做系统,普通节点能够和 Master 节点运行在同一主板上,已能够运行在另外的主板上,只有两个主板实现网络通信就行。 ROS系统包含了不少实现机器人相关的算法的软件包,如机械臂运动空间计算,SLAM地图等android
不过惋惜的是,ROS的软件包大都是C++写的,要不就是Python实现得,要编译ROS系统,须要在ubuntu系统使用cmake工具链,在嵌入式平台特别是android平台成功的经验很少,并且如今未实如今安卓主板上运行MasterServer,ROS系统的MasterServer仍然须要运做在ubuntu主板上。c++
本文将试图构建一个相似ROS系统的的android软件框架,已便可以开发已android平台为主系统的机器人软件git
须要实现的目标:
- 模拟实现ROS系统的节点通信机制,节点代码能够在本进程,独立进程,甚至在非主控主板上(若是系统有多块主板的话)运行。
- 机器人任务管理。现实中存在这样的场景,用户每每命令机器人作不少工做,有些工做要独占一些执行元件,这样不太的指令就会冲突。机器人任务管理就是对机器人接收到的任务指令进行统一的排列和调度管理,新的任务到来时,当前不过重要的任务能够暂存起来,释放资源(如执行部件的使用权限)给新任务执行,等新任务结束后,再恢复暂存的任务继续执行。
- 与下位机MCU的通信。我设计的是MCU支持USB总线的,MCU控制马达,舵机,红外,超声波等传感器和执行部件,利用一个支持USB OTG 功能的手机做为主机,同时利用手机内部的重力传感器和麦克风,扬声器,屏幕构成一个完整的机器人系统
- Lua编写机器人控制逻辑代码。Lua是简单易懂的,轻量级的脚本语言,在游戏脚本开发甚至简单的单片机系统都能用,用Lua开发机器人的好处是:简单,快捷(不须要编译,现写现运行),支持热更新
- 简单的机器人UI界面。显示机器人虚拟人形象。实现语音交互。
- 机器人通用算法。机械臂运动空间解算,简单的自平衡PID控制。须要一些c++的数学矩阵库的支持
关于项目
- 我将在开源中国开放代码,欢迎各位指正 EasyRobot源码
- 项目以Kotlin语言开发,没学过的同窗能够先网上找资料预习一下,语法很像swift和go应该很容易看懂的,不用担忧,由于Kotlin能够与Java共存的,后期会加入一下C和Java还有Lua的代码
怎样写一个相似ROS的易用的android机器人框架(2)算法