家用机器人系统软件

演示视频、已支持硬件,见“兰栖科技”。

 

一、功能

  • 室内自主巡逻,针对不同位置执行不同动作。小程序实现这些动作。
  • 用机械臂实现各样操作。像夹取、按(按钮)、拉(门)。
  • 以机器人为中心构建家内物联网。在这物联网,不限制智能家居位置,不必买蓝牙网关。
  • 基于NLP大模型的语音聊天。内置讯飞星火,可自写小程序采用其它模型。
  • 摄像头做室内监控,用深度学习对图像做物体识别,由此辅助实现其它功能。

 

二、特色

图1 Launcher和kDesktop

2.1 第三方小程序

系统软件(launcher.apk)只提供机器人核心功能,开发者在上面开发小程序,并发布到商店,是众多小程序在满足各种用户需求。编程语言是Lua和C++,运行在Android、Windows和iOS。调试、开发阶段基于Windows,工具用Visual Studio。等稳定了,再换到Android等平台编译。

 

2.2 远程桌面

控制机器人有两种方案。一是远程桌面,用于精准控制机器人,二是语音控制。总之,机器人不再有显示屏。操作系统是Android,虽然没屏,但有远程桌面,机器人相当于是个可自主导航Android Pad。

 

2.3 模块化硬件

机器人硬件需要包括主板、底盘(底座+驱动板+电机+IMU)、雷达、摄像头、麦克风和喇叭,可选机械臂。目前主板用ROC-RK3588S-PC,其它零件都可从至少两家买到。底盘、雷达和机械臂,逻辑较复杂,需要编写驱动才可接入系统,驱动也是小程序,运行时可随时替换。

商业模式是硬件开发商、系统软件开发商分离。机器人产家没了开发系统软件开销,最终卖出的价格可以和成本偏离不多。或许,大概中、高端手机售价。

 

2.4 开源

图2 技术特色

技术上要大范围使用Ros。为适应在Android上运行,改出一种“进程内不复制(nocopy-intra)”模式。在这种模式下,所有node在一个进程内运行,ros master简单到几个变量,不再有延时、不稳定问题。在Windows,则同时支持nocopy-intra和Ros原有一node一进程,并可以灵活切换。

 

三、常见问题

Q:市面上Ros机器人一般运行在Ubuntu,然后让用户使用各种Ros包,控制上不少用命令行终端,Launcher也是这样吗?

A:Launcher修改了Ros,修改后的Ros商业化上支持Android、Windows,已不建议用Ubuntu。为适应在Android上运行,改出一种“进程内不复制(nocopy-intra)”模式。在这种模式下,所有node在一个进程内运行,Ros Master简单到几个变量,不再有延时、不稳定问题。在Windows,则同时支持nocopy-intra和Ros原有一node一进程,并可以灵活切换。关于“进程序内不复制”模式细节,参考“移植Ros(noetic)”。

对控制机器人方面,在Android不支持命令行终端,必须使用Launcher这个app。这app提供图形界面,和操作一个Android app没啥两样。在Windows,则是同时兼顾Launcher和命令行终端这两种方式。若要使用端终时,Launcher需编译成Ros原有一node一进程模式,这时就可使用Ros提供的像rviz,这样可图形化查看导航,便于开发和调试。

 

Q:想设置机器人Wifi IP、或忘了IP,怎么办?

A:有两种方法:用kDesktop或接HDMI,建议用第一种。kDesktop需是Android或iOS版。运行后,切换到“远程IP”页,这时kDesktop就会显示扫描到的机器人。如果机器人当前有IP,就会显示IP地址,否则IP地址部分是“0.0.0.0”。这时需要点击“修改IP”,去连接指定Wifi,获得IP了。kDesktop和机器人通信用的是蓝牙,为有好的质量,尽量让手机或Pad靠近机器人。

 

Q:想开发小程序,大概流程是怎样?

A:硬件上你需要一台Windows电脑,已完全可以不要Ubuntu。第一步:参考“开始机器人开发”,编译Launcher、kDesktop源码。第二步:参考“语音驱动(tspeech_slot)”,那里有一个视频,按视频讲述步骤开发小程序。

 

Q:如何使用深度学习模型进行本地推导?

A:内置的本地深度学习框架是TensorFlow Lite,需自已提供符合TFLite格式的模型。虽然有相关api,但考虑到模型功能太杂,目前api可能还不能直接用于你模型的话,可向“C洼”询要技术支持。当然,TensorFlow Lite是开源的,也可以写C++代码,直接调用它的api进行推导。

 

 


3.1 Android

Android 7.1或以上。硬件设计上,机器人主要基于市面上已出现的各种Android开发板,估计很多会使用国产CPU,像瑞芯微的rk3399。这类开发板使用的Android版本,较稳定有5.1、7.1,逐步出现8、9。碍于5.1不支持C++ STL,会把希望最低版本限制在7.1。正如不须要Google的GMS套件,它不会去刻意追求要用Android最新版本,新版本增加的美化界面、权限控制等,对它基本没用。

机器人处于起步阶段,现有Android也够了,但随着机器人基本功能稳定,以及使用场景增加,迟早需要改Android。这里举两个较大改动。

  • 去Java,推出一个“纯”C/C++ Android。脚本编程使用lua。
  • 简化WMS(Window Manager Service)。WMS管理着android中的各个窗口。由于每个app都有着activity生命周期,这生命周期看似简单,其实只要一不注意,就会出差错,进而导致app崩溃。计划修改:不论何时,系统中就一个带图形界面的app,即桌面,其它需要界面的app用进程间通信方法,通知运行在桌面的对应小程序负责显示界面

3.2 Windows

机器人要能运行在Windows,主要目的是为解决android调试难问题。

在android开发软件会遇到个很大问题,如何调试。机器人主要编写语言是C++,运行在Windows上的Visual Studio无疑有着最强大的C/C++调试器,而且Visual Sutdio在调试C++时,可同时调试lua。由于处处遵循跨平台要求,不论是开发机器人系统软件还是小程序,很容易实现用Visual Studio。于是会出来这么个流程:假设一个月要发布app/小程序新版本,基本可做到25天都在Windows开发,2天花在其它平台(就是编译),剩下3天做发布前测试。

全部评论: 0

    写评论: