小型家庭自主巡检机器人--第一篇:机器人整体功能和框架介绍

为了适应老龄化社会的发展,加速家用小型服务型机器人的落地应用,本人将开发一款小型的自主家庭巡检安防机器人。本人将其命名为白蛋一号,其核心在于能够在家庭环境内自主巡航的同时监测家庭环境的异常状况(譬如老人跌倒、陌生人入侵、有害气体浓度、 易燃气体浓度、烟雾浓度、火灾情况等等),并且能作为智慧家居的核心接入各种外设(空调、灯光、窗帘、睡眠检测仪等等),方便对智慧家居设备进行 统一管理、调度和控制;

本人将对整个开发过程进行记录以及分享。提供包括电路设计、外壳设计、算法设计以及代码实现部分的文档以及源码, 便于交流以及二次开发。整个工程的代码可见于本人的github地址:https://github.com/softdream/robot_projects,后续会持续更新。

在本篇中将介绍机器人的整体功能、设计思路以及整体的软硬件框架,让各位有一个大体的认识,然后在后续更新中将会分别介绍各个功能模块的具体实现。

首先看下机器人的外形,如图1所示:

图1. 机器人外形

可以看出机器人采用的是典型的两轮差速结构,其特点在于简单、易于控制,并且履带式的设计看起来更为酷炫一些。该机器人除了履带使用现成的之外,其它零件均是采用3D打印制作而成,各个零件的STL模型文件同样上传至github仓库中,各位可直接下载使用,如果有条件的话也可以自己重新设计外形。

机器人的硬件结构框图如图2所示:

图2. 机器人硬件结构框图

机器人的硬件设计采用了分层设计的思路,使用了两个控制器:对于底层各种传感器数据采集以及机器人的运动部分控制使用低成本、性能较小的单片机来完成,而对于上层则需要完成机器人的算法运行,并且需要驱动相机、激光雷达等对计算性能要求高的设备,因此单片机已经无法满足要求了,需要使用性能强悍的嵌入式soc来完成。我在这里使用了地平线的X3派,其主频高达1.2GHz,有4个A53的核,板载了wifi模块,更为重要的是其上搭载来一个算力高达5Tops的NPU计算单元。在后续的使用中可配合单目rgb相机完成人员检测,人体姿态检测等各种功能。

对于底层控制器,其主要由三个模块构成:电源模块、串口转usb模块以及esp32单片机组成。其中电源模块的作用是将输入的电池电压稳压到5V和3.3V。串口转usb模块主要用来程序下载以及通信,esp32单片机作为控制核心主要用来驱动以下硬件单元:

a. 烟雾传感器:使用ADC采集该传感器数据,主要用来检测室内烟雾浓度,用于火情监测。

b. 有害气体传感器:使用ADC采集该传感器数据,主要用来检测室内有害气体浓度(可检测甲烷、丁烷、丙烷、酒精灯气体浓度)。

c. 可燃气体传感器:使用ADC采集该传感器数据,主要用来检测室内可燃气体浓度(可检测一氧化碳、液化天然气等气体浓度)。

d. 温湿度传感器:使用该传感器定义的单总线协议采集其数据,主要用来检测室内温度和湿度信息。

e. 两路直流电机:型号为370直流减速电机,用于机器人的行走机构,采用pwm方波信号控制电机的转速。

f. 两路AB相编码器:直接集成在370减速电机的尾端,用于测量电机的转速,采用大M法测速方法。

g. 惯性测量单元(IMU):型号为MPU6050,该IMU继承了一个三轴加速度计和一个三轴陀螺仪,用于机器人的姿态测量,采用IIC协议读取其数据。

h. 超声波传感器:由于激光雷达的分辨率较低,为了防止有些障碍物检测不到,因此加装了一个超声波传感器用来辅助避障。

i. 悬崖传感器:实际上就是红外测距开关,用于检测台阶,防止机器人跌落。

该底层控制器的电路图以及pcb文件同样会上传至github仓库中,可直接下载并送去打样使用。

对于上层控制器,则直接使用了地平线X3派开发板。开发板上已经集成了常用的HDMI、以太网、usb等接口,同时也板载了wifi模块,可以直接使用。其核心芯片则用于运行各种算法以及相机、激光雷达、屏幕等外设的驱动:

a. 单目rgb摄像头:该摄像头用于人体识别以及人体姿态检测等应用功能的支持。

b. 单线激光雷达:采用国科光芯的mini M1C1激光雷达,频率10Hz,每帧数据包含380个测距点信息,用于机器人的SLAM(同时地图构建与定位)、自主导航功能。

c. 2.7寸rbg屏幕:用于显示机器人的表情,提供一定的人机交互功能。

此外,上层控制器与底层控制器之间使用串口协议进行通信,底层控制器将采集到的各个传感器通过串口发送到上层控制器中做进一步的处理,而上层控制器则将控制指令通过串口下发给底层控制器用于驱动机器人运动。

下图3所示为机器人所采用的地平线X3派开发板:

图3. 地平线X3派

下图4所示为底层控制板实物图:

图4. 底层驱动板实物图

机器人的软件这部分是整个项目的核心,也是开发工作量最多的地方。需要注意的地方是本项目不采用ROS系统,并尽量避免使用第三方库,在本项目中所有算法只用到了Eigen和Opencv这两个库。这样做虽然增加了工作难度和工作量,但是却对学习大有脾益,在后续更新中会详细介绍各个部分的设计原理和代码实现过程,以便帮助各位能够更好的学习机器人算法原理。

项目程序开发环境:

1. 地平线X3开发环境

a. 操作系统:ubuntu18.04\ubuntu20.04;

b. 语言标准:C++17;

c. 编译器:g++ 7.5或以上版本;

d. 包管理工具:cmake 3.16或以上版本;

e. 第三方库:Eigen3、opencv3.4或以上版本;

2. 底层驱动板开发环境

a. 集成开发环境:Arduino IDE;

b. 乐鑫esp32开发库;

3. 桌面应用及微信小程序开发环境

a. 桌面端:QT5及QT Creator集成开发环境;

b. 微信小程序:微信开发者工具;

第一版的机器人的软件架构如图5所示:

图5. 机器人软件框架

在底层驱动板中,主要实现了对各个传感器的数据采集和初步数据处理的功能,底层驱动板在获取到这些信息之后会直接通过串口上传至X3主控中供其下一步的处理。同时在底层驱动板中实现了对电机的控制功能,在接收到X3主控下发的控制指令(主要是线速度和角速度)之后,会生成对应的pwm方波信号,控制两个直流电机的转速,从而让机器人完成移动动作。

在X3主控中的程序主要分为两种:一种是用于应用支撑的基础程序,包括slam算法、里程计融合算法、路径决策算法等等,这些算法程序是构成自主移动机器人的支撑,是可以让机器人能够自主移动的关键。另一种是在上述算法基础上自定义的一些应用程序,由于此机器人主要是用来做巡防安检的,因此只针对这一块做一些定制化的应用功能,用户可在二次开发时根据需要自己更改。

在下一篇中,我会详细介绍机器人底层控制板的电路设计方案,以及其程序设计的原理和实现。

mark

坐等

催更

来了?

二催,?,每天都来看看更新没

已更新