地平线机器人 · 2023年01月03日 · 江苏

开发者说 | 脏宝Dirty Bae——基于OriginBot的小小桌面清洁机器人

实现功能

按具体功能划分

自主清理垃圾——将桌面大的垃圾推到地面,小的垃圾(和尘土)收集进入垃圾储藏室

语音控制、手机App控制、键盘控制、手势控制

人体跟踪、猫狗跟踪、语音交互(到杯子那里去,到垃圾桶那里去,把杯子推回来,建图后打乱桌面物品让车子恢复原样,播报摄像头的检测到的内容,发现人站在车前播放:别当我路等等,功能取决于你的想象)

按涉及领域划分

语音交互:语音唤醒、语音开关机、语音控制车辆运动、语音调参、语音启停进程(开启关闭人体跟踪控制)、被识别物体语音播报

感知:目标检测与分割、根据自车位置推测目标的平面位置和尺寸(结合cam和lidar)

定位建图:slam建图和更新(包括正障碍-杯子, 结合tof建立负障碍-桌面边缘)

规划控制:导航规划,路径规划,跟踪控制

硬件组成

硬件结构图

1.jfif

说明

摄像头识别,激光雷达slam建图

IMU和轮速计(编码器)odom推算

TOF是斜向下安装,用于提前检测车辆是否到达桌面边缘,如下图

继电器用于控制耗电量大的设备(语音模块可以长期待机)

2.png

软件组成

Arduino

arduino用到了两个库,这连两个i2c总线设备共用一路i2c :tof

mpu9250(imu的校准程序在此库的历程里面,由于nano内存有限,需要校准imu的话需要先通过例程程序校准)

端口定义

const uint8_t Motor1_PinA = 5;    
const uint8_t Motor1_PinB = 6;
const uint8_t Motor2_PinA = 9;
const uint8_t Motor2_PinB = 10;
const uint8_t Encoder1_PinA = 2;  //中断1
const uint8_t Encoder1_PinB = 4;
const uint8_t Encoder2_PinA = 3;  //中断2
const uint8_t Encoder2_PinB = 7;
SoftwareSerial mySerial(12, 13); // RX, TX

通讯协议

主要协议参考:OriginBot智能机器人开源套件

差异在于:

①imu的数据发送 = 处理后的数据/100, 而不是原始数据;

②传感器反馈里面没有电压值,有mcu的循环时间和转发语音板的语音指令;

③控制器资源控制为从x3pi接收到的需要转发的语音板的指令信息。

语音板子

由于MCU和语音板子单词最多传输4个字节,且语音板子处理逻辑有限,因此mcu他们之间的传输只能依靠提前定义好的协议(比如 1 = 自建通过),且X3pi和语音板子的通信是通过MCU中转,因此也需要定义他们之前的协议,例如FCOS检测算法的80种类型分别对应80个整数,以此来实现被检测目标名称的语音播报。
3.jfif

本文转自地平线开发者社区
原作者:Mengxin
原链接:详细文档及代码点击此处一键直达
推荐阅读
关注数
1246
内容数
65
我们的使命是 AI 赋能万物 共创智能未来。我们致力于打造最实用、最好用、最易用的边缘 AI 开发平台。通过地平线自研的高算力 AI 芯片,开发工具,让更多的 AI 开发者,中小企业,学习和加速 AI 产品开发和创新!
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息