Linkerist / blog

Linkerist's blog.
Apache License 2.0
18 stars 0 forks source link

Robot杯全国机器人公开赛 #3

Open Linkerist opened 6 years ago

Linkerist commented 6 years ago

这是大学的时候参加的一个比赛。Robot杯全国机器人公开赛。做的是搬运机器人。属于光电组的。

大概有半个月都在准备这个比赛。我和仪器与电子学院的培松同学。信息与通信工程学院的彦宗同学共同完成,从硬件设计,到软件编写。

天波易谢 寸暑难留。今日重新把当初的资料整理出来:

比赛规则链接:http://download.csdn.net/detail/linkerist/9406066

硬件:

芯片用的是STM-32。加上机器人的一个框架。

搬运用的手臂是两个舵机加上两个铁片。这虽然有点简陋。但是确实可以将物块有效的搬运。

动力是两个步进电机对应后面两个轮胎。前面只有一个轮胎。没有设计让前面轮胎转向。而是通过后面两个电机的速度差产生角度。

机器人的感官用的是前面一排四个激光传感器。场地上的线是黑色的。其余地方是白色的。这样可以激光循迹。

还有机器人最前面的一个颜色传感器。要搬运的物块颜色不同。五个物块是比赛现场抽签决定的。通过颜色传感器返回值可以判断她们。

硬件的大概样子就是这样了。说机器人有点高大上了。

因为她其实就是一个小车。可以根据地上的线激光循迹。可以检测物块的颜色。把物块搬运到目的地。满足比赛的所有要求。

我们甚至弄了一个用户界面。是搭载在机器上的一块12864,

主要显示当前识别的颜色。还有一些提示信息。后来因为要保存信息还引入了一个E2PROM。用的是IIC协议。

原理图就不贴了。因为现在静静躺在我硬盘里面的只有当时写的软件部分了。。

软件:

代码在附件中也有。虽然现在看以前写过的代码。感觉目不忍视。耳不忍闻。但还是原样贴了出来。

工程代码链接:http://download.csdn.net/detail/linkerist/9406061

在学校创新创业基地的数控机床上。培松实现了机器人的框架。和搬运用的手臂。和步进电机的驱动

彦宗同学主要负责激光传感器的驱动编写和激光循迹部分的程序调试。

我主要负责颜色传感器、舵机和E2PROM的驱动编写还有主程序搬运算法的实现。

机器人的拼装和程序的调试由三个人共同完成。在五院的一个实验室里。

各种驱动在工程代码的HARDWARE下。各个文件夹的名字就说明了他的作用。(比如IIC协议的实现在IIC目录下,颜色传感器的驱动实现在COLOR目录下)代码中都有详细的注释。

在start目录下。放的是Cortex-m3的启动引导代码。当然我们当时的知识水平不足以写出这样的代码。这个用的是Cortex-m3自带的。

在track_jg目录下。放的是主驱动函数main_test。可以看到其中只有两行代码。step0(); 还有 step1()。

当时我把整个搬运流程分成了两个部分。还亲切的称为南半球和北半球。(因为比赛的场地图形怎么看都是一个地球!哈哈)

关于具体代码就不再展开了。我写了很详细的注释。

到比赛现场之后。我们才发现我们的硬件设计的真是不太对得起观众。

旁边复旦大学的同学甚至将五个物块堆叠在一起。这节省很多时间。但是成功率比较低。

再旁边一点的解放军理工的同学都穿着军装。神情严肃。一丝不苟的调试这他们的机器。

赛场最南的一支队伍让我映像最深。因为他们的机器人跑的实在是太快了。(导致他们调试都是把程序写死。在一定时间内系统自动挂起。不然根本抓不住机器人。)

从外观上看他们用的是灰度传感器。具体电机不知道用的是什么。稳定性一般,但是速度非常快。

不得不说。他们设计的硬件很系统。

后来交流知道。他们学校有多年的参赛经验。很多东西得到了传承。甚至有专门的实验室负责此类赛事。基本不需要考虑预算。

当他们拿到比赛题目的时候。设计硬件时候很自然的自底而上。很多东西都有。

回想我们是从最开始的芯片开始,发现缺少什么就在淘宝上买。(而且还要价格从低到高排一下~。~)。有点像OS中当不得不分配子进程内存空间时,才拷贝数据那种意思在里面。

当然这些都是没有取得第一名的事后言论,总结下来这次比赛有两点需要反思:

1.这是一场机器人比赛,可以在硬件上多加设计,要是认真对待比赛,就无论如何应该把这些因素考虑到,把机器和这个片上系统的根基打牢。而最终正如我们看到的那样,这场激烈的特洛伊战争中的主角,如阿喀琉斯之踵,成为众矢之的。

2.当程序烧录到开发板、基本跑通之后,我们就发现我们的硬件稳定性不足、机器人整体效率不足,跑飞的场景很多。我们想到了从硬件上进行优化,但是赛程临近,还有我们的惰性,导致从那时到最终比赛,我们都在做软件上的优化,最终因为驱动板中途烧毁导致分数不够高。

有一点值得学习:

我们没有一味地追求机器的速度,而是仔细分析了比赛规则。

比赛是相同时间比分数,而不是相同分数比时间,我看到旁边的对手们大多都一味追求速度,却忽视了稳定性,不少机器都没拿到满分。三分钟对于机器来说是足够的,只要确保在这个时间内取得满分,就肯定是一等奖。

我们离第一只有一线之隔。


后来在洛阳玩了两天。正好下雨,好开森。

今天整理硬盘的时候发现这些。写下来。算作回忆。


Linkerist

2017年12月13日于北京酒仙桥