前言

OriginBot 是古月居出产的第一款开源智能小车套件。恰逢其时,我当时正好是古月居机器人开发的实习生,应古月老师的邀请参与到了早期OriginBot的项目组,负责视觉感知和规划控制相关的一些内容开发和相关文档撰写,这里非常感谢古月居的各位哥哥姐姐不断帮我填坑,也感谢他们对我的信任。仅以此文给大家分享一些我与OriginBot的一部分故事。

旭日X3派

如下图,我是在7月6日拿到旭日X3派的。当时刚刚结束上一个项目的开发,本意是想尝试研究一下新发布的旭日X3派,测试一下它5T算力的算法开发Demo。此时,我还没想到之后会参与到OriginBot项目组,纯当兴趣去尝试一下,顺便看看和树莓派有什么区别。

接下来和大家分享一下我学习旭日X3派的一个过程。

首先我给自己定了一个初步目标,花3天时间把这块板子的各种Demo和基本功能搞明白。基于此目标,我分项制定了一些学习计划并整理了手中的一些资料。

资料:

1、古月学院中古月老师分享的5门课程,以及相关的文字材料(部分还是我后来写进去的(手动狗头))

2、地平线官网中关于旭日X3派的一些资料,主要包括核心板的操作手册机器人开发手册

阶段任务

1、将旭日X3派板子启动,包括镜像烧入,串口调试,连接WiFI等

2、通过操作手册将各个串口等硬件外设调试出来

3、熟悉tros框架,将其中各个DEMO跑通

最终目的:熟悉旭日X3派及开发原理,明确其大致用途

事实证明,资料找的好,坑就很难踩。上述步骤我都完成的很顺利,除了极个别DEMO由于缺乏对应硬件(如语音模块)没有调通,能跑的我基本都很顺利的跑了出来,甚至只花了两天时间不到。值得一提的是其中我的摄像头分别用单目摄像头(罗技)和深度摄像头(奥比中光)都跑了一些简单SLAM示例,都是能够正常运作的。

对旭日X3派的一些前期了解算是为我后续开发OriginBot做了一些先修准备吧。

OriginBot 开发

在熟悉旭日X3派过程中,古月老师给我发出了邀请,参与到他主导的OriginBot项目组中。起初他给我介绍了这个项目的缘起:帮助机器人开发者从零开发一款机器人,给大家一把钥匙,去解锁自己想开发的各种功能。说来还蛮佩服古月老师的格局的,同时也很荣幸能加入到这个项目组。(里面很触动我的一点是车牌号的引入,仪式感突然就来了)

虽然七月初中旬便正式加入项目住,但是真正拿到样机却是到了七月下旬,这个期间项目组其他成员正在画PCB板子以及开发Stm32相关的程序。也有专门的成员开发上下位机驱动。具体的一些内容大家可以去OriginBot官网查询,包括第一版的PCB构图和小车设计。其实我现在回过头去看依旧觉得做出来不难,但是做好且花耗不高真的不容易。

在实际开发中,我要做的事情其实很明确,集成视觉和感知相关功能到OriginBot。说的再明白一些,就是将我们熟知的一些机器人功能开发出来,并和驱动开发成员协商。同样的,在正式开发之前要对整体的一个技术栈有一定了解,包括自己的一个技术栈和需要配合的队友的技术栈。接下来,我举个例子简单介绍一下OriginBot的上下位机驱动开发流程。

上图是我从官网拿下来的一张协议格式说明表格,上下位机为什么需要驱动。如同人一样,一个智能机器也需要大脑去思考,身体去运动。上位机旭日X3派依托着它5T的算力和CPU性能成为了OriginBOt的大脑。而下位机STM32则负责着OriginBot的各项外设,简单来说就是各种具体控制。驱动开发就是将上位机软件需要的各种传感器数据从下位机拿到,同时将上位机计算出的各个控制指令下发到下位机中。这就是驱动的一个基本逻辑。二者的一个最简单的连接就是UART连接。UART想来大家不陌生,TX和RX异步发送数据,二者对象可以两块简单相同的MCU或者类似如同旭日和stm32一般的核心板。咳咳,扯远了。

那么OriginBot上位机需要下位机提供的是什么呢?包括各种传感器数据,最基础的是Odom和imu数据以及速度反馈。 这些数据可以帮助OriginBot实现SLAM和Navigation的功能。下位机需要什么呢?上位机发布的各种速度控制指令等。

上面是最简单的一个上下位机开发逻辑,也是我看到在交流群中有一些朋友不断提到这个问题拿出来说一下。

回归到我的一个主要工作,集成视觉和导航之类的功能。其实我做的很简单,做的也并不如人意,因为第一次投入进一个产品开发,做了很多不规范的行为,还得感谢古月老师的不断指正。

在正式开发前,我大概预估了一下最少实现一个什么样的效果:

1、将旭日X3派上所有的功能落地到OriginBot中

2、将常见的ROS2的SLAM和Navigation模块集成到OriginBot中

  相信懂行的朋友一看就知道这些东西可能不是那么困难,我当时也这么认为,可是真正去干这个事情,可能要的不仅仅是能跑,能成,而是要拿的出手。从一开始,雷达的适配出现波特率等问题,到后来发现各种SLAM效果不佳,上下位机数据反馈出现问题,下位机通信协议解算错误等。我觉得每一个点都给我提醒,凡做大事必作于细。到后期,古月老师将这些内容加工之后,我也发觉自己需要走的路还很长。

常见问题

我在开发过程遇到的一些问题和大家现在遇到的有相同也有不相同。主要的原因我认为是,我没办法确定这件产品一定能干某件事情。所以更多时候我在干之前或者干的过程中需要分析一下跑不通的原因究竟是程序性能引起的还是机器本身带不动某个算法。

先说一些简单问题吧,这是我在交流群经常看到大家问到的。

1、这款产品并没有显示屏,导致每次登入进机器时可能会出现ip地址不对的情况,这种情况怎么去解决?

答:第一次登入我是根据串口登入的,然后设置了一个WIFI。连接WIFi的方法如下:


sudo nmcli device wifi rescan       # 扫描wifi网络
sudo nmcli device wifi list         # 列出找到的wifi网络
sudo wifi_connect "SSID" "PASSWD"   # 连接某指定的wifi网络

如果是我的话,接下来可能会选择使用静态IP地址。设置静态IP地址的办法就请大家去查询一下了。

(PS:对于新手而言,使用桌面版本是更加友好的。)

2、编译的时候总是卡死怎么办?

答:其实这是一个很常见的问题,对于旭日X3派而言,很难不承认编译会慢一些,但是单纯的卡死,我们可以检查一下内存问题,这里请大家使用 top 或者 htop 指令。没有的话可以下载一下。检查一下MEM和SWAP空间,如果对这些知识完全不了解,可以趁机学习一下,适当增大交换区可能会使得编译不卡。

简单一些的问题我想是大家可以在官网、浏览器中查询得到的。困难一些的问题更多是一些进阶学习的内容,想要在这款机器上搭载自己的东西。

1、我有一个想法,怎么在OriginBot中实现呢?

答:自己实现一个实例和OriginBot中本身的Demo没有本质区别,一样是编写程序,编译功能包,测试效果。最快的方式就是参考其他功能包是如何实现的。这需要大家真正有沉下心去学习过ROS和算法相关知识。

2、如何评估一个算法能不能在OriginBot上搭载呢?

答:看数据。去看旭日X3派的数据,能不能满足你运行程序的基本要求。这里我强推一波旭日X3派的gitlab。大家可以到里面找到他们最新更新的一些实例。

其他问题大家可以在评论区提问,或者到泡泡、交流群中提问,我想肯定会有更多开发者和大家一起学习进步。

最后

当然,很可惜的一点是,由于某些原因,我只参与到了OriginBot前期的一些开发,这款机器真正在我手上的时间只有半个月左右的时间,但是依旧很高兴参与到这个项目组中,见识到也学习到了很多经验。最后给大家展示一下我们交流的一个氛围,第二张图片是古月老师和我的技术Leader给我们发的方案指向。真的手把手教学好吧!

最后祝大家体验OriginBot愉快!