我有一个大学同学L君。为人面和心善,做事踏实有毅力。
大二时,机械学院举办了一个机器人比赛,大概就是用一个小车完成循迹、避障、爬坡、识别颜色等功能。
其他的功能很快就实现好了,但是有一个坡我们爬不上去,但是如果加大电机功率又会使循迹变得非常不稳定。
一个比较可靠的办法是测出小车的速度,在爬坡时速度急剧减小,这时增大速度,而循迹时保持原速度。但是我们当时车上没有任何测速传感器。
后来我们发现坡是绿色的,而赛道是白色的,只要检测出绿色来让它加速就可以了。于是我们在小车底部加了一个颜色传感器,效果也不错,成功实现爬坡,初赛取得了很好地成绩。
比赛的前几天,我在网上了解到通过光栅和红外传感器可以测速度,而且当初买小车时恰好送了四个光栅我们还没用。我把这个想法告诉了L君,我们努力了一晚上并没有成功。
本以为这件事就过去了。决赛当天,下午六点决赛,两点我们来到实验室做最后的修改。
L君突然想把测速的做出来。我想还有四个小时了,现在改这部分的代码的话风险太大吧,可他执意坚持。我说那你做,我调一下其他的。
离比赛还有两个小时,L君一筹莫展。我说你快别做了,我们原来的策略挺好的,初赛成绩也可以。他说让我做到五点吧。
五点,依然一筹莫展。我说都五点了,你别做了,他说我再做一会儿,马上就好。
五点半,他突然兴奋地跟我说,你看你看,这个测速系统有反应了。他拿了个纸片挡住码盘,此时小车转速增加,拿开纸片,小车转速降低。
“可是六点就比赛了,也来不及调试了,要不就算了吧。”
他有点生气。“什么?我做了这么久你不帮我也就算了你还不让我做了?”我也觉得他做了这么久了突然不让他做有点于心不忍。
过了一会儿他说我去焊点东西,等比赛开始了我就回来。
比赛在六点如期举行,他还没回来,我焦急的看着手表。
过了一会儿他回来了,说粘好了。小车偷偷放在地上跑了跑,跑得乱七八糟。很快轮到我们组上了,不得已跟主持人说把我们推到后面去吧。
就这样我们由第十个推到了第十五个(一共十五组)。到我们上的时候,我说要不把原来的程序烧进去吧,没调试真的太危险了。
他不同意。
于是我们上去了。我在讲台上讲PPT,一边讲我们做小车付出了如何艰苦卓绝的努力,一边讲我们的小车如何如何厉害,一遍在心里祈祷千万不要出问题啊。
讲完PPT,开始跑。第一个弯道跑了三遍没成功,他回过头来说要不算了吧。我只得硬着头皮说我们的小车出了点状况可能完成不了比赛了。于是就这样在机械学院200多名同学老师面前灰溜溜的下了台。
大二,我们两个学过一点单片机,学过一点Java,恰逢学校让报大创。我们想之前坐小车买了那么多传感器,我们干嘛不直接用手机上的呢?
于是两个人一拍即合,报了个大创。我们起了一个自认为十分专业的名字——CSPM:Computer, Smart Phone and microcontroller。我们想把手机上的传感器信息通过网络发到电脑上,再通过电脑把控制指令发给手机,手机通过蓝牙发送给小车。我们的野心很大,我们想做成一个平台,这样以后再有人需要开发机器人直接用我们的软件即可。
开始做的非常起劲。但是我们俩都不是计算机学院的,写代码基本靠改写别人现成的,很长一段时间以后,我们能调用手机的一些传感器了,也能用蓝牙控制小车了。
那个暑假,我进了实验室,接触了ROS(Robot Operating System)。我发现ROS实在是太强大了,以至于只要依赖ROS,我们原来设想的通讯问题可以又快又稳定的解决。
我把这个想法告诉了L君,L君说,这个还要用户装Ubuntu,而且违背了我们的初衷了,我们是想自己开发一个平台,用ROS就不是用自己的平台了。
我跟他解释道ROS是一个开源机器人框架,你用java其实也是建立在别人开发的java虚拟机上的。而且ROS的节点-消息机制非常适合我们的项目,将来有多么方便巴拉巴拉。
他仍然坚持完全用java写。
好吧。
恰逢一个老师告诉我有一个科技比赛。我用ROS做了一个机器人,用的手机的传感器,又做了一些图像处理。后来报了个比赛,拿了全国一等奖。当然全程都带着他。
有一天他突然跟我说想自己做项目不跟着我做了。我说为什么,他说他还是觉得违背初衷了。我跟他争论了一天,告诉他没必要重复造轮子。而且我们非计算机系,做出来平台也不会有人用,而且各种操作系统底层的东西都不懂,写出来的软件根本不能保证稳定性。
当然,L君最擅长的就是坚持。
我们还是分成了两个项目组。当然他还在我的项目组里挂名,我也在他项目组里挂名。
他要做一个飞控出来,因为觉得做小车可能跟我的重了。
于是他用了半年的时间,用java的swing写了个客户端,通过socket把手机信息传回来并显示出来。视频虽然可以回传了,但是时延大的惊人,于是又学了下H264压缩,终于能传回视频来了(虽然还是有点卡)。
飞控实在太复杂,我们几个人的能力根本做不出来,于是只能退而求其次用了一个pixhawk飞控,再把我们的手机信息想办法传给pixhawk。
我查到pixhawk的offboard模式是支持一种叫做mavlink的协议的,通过mavlink直接给pixhawk发目标点,pixhawk就会控制四旋翼飞到指定位置。在pixhawk官网上写着,无论什么情况下都要保证遥控器能直接操控四旋翼,而且严禁直接控制四旋翼速度。
我告诉他有这样一种协议。他说,我们将来是要用手机完全取代飞控的,不能用他的协议。我说那你怎么办,他说用单片机的pwm信号转成ppm的信号来模拟遥控器操作。我不禁有些担心。一是官网上严禁了这种行为,二是网上没有人这样做过,这么做真的可行吗?
过了几天他告诉我可以用单片机给飞控解锁了,还能控制电机转了。他让我帮他写一下颜色识别和地图轨迹的代码,我花了几天的时间帮他写好了。
过了几天他告诉我:颜色识别一秒只能处理一帧。
我说可能是手机配置太低了吧。传到电脑端压缩的太严重已经不好识别了。
过了几天试飞机,桨扎到地上断了,飞机没飞起来。
最后不得已,用遥控器飞了一段,然后用电脑录了屏显示一下传感器信息了事。答辩时老师也不是很满意,问他你说的视觉功能什么时候能做出来?
他说视觉都是我同学帮我开发的,然后指了指我。我跟评委说现在根本没办法用遥控器控飞,写了视觉方法有什么用呢?如果用mavlink就可以飞地很稳,可是违背初衷了。
老师说你还管什么初衷,先把功能都实现了再说啊。
回来的路上,我说要是咱俩各退一步就好了。
他说,每个人的性格不一样。
也许是我没有原则,可我总觉得,坚持是件好事,可是如果在一条错误的道路上坚持,不接受别人意见,也不考量自身的能力,一昧坚持所谓的初衷,最终结果只能是把事情办砸了。L君一向忠厚,跟他争论他也是一直微笑着。跟他谈过无数次都不能改变他一点。如果他有机会看到这篇文章,希望能仔细考虑一下我的看法吧。