偶然一个机会得以接触一下Arduino,了解一下Arduino代码的编写模式,接触了C++函数封装,算是真正接触了一下项目开发,也意识到项目开发中的种种问题不是写代码能解决的,在阅读别人代码时也需要有科学的方法去读。做此贴,以作总结。

目录

OTTO指令解码:

OTTO机器人驱动源码翻阅:

OTTO机器人源码修改:

总结:


 

OTTO指令解码:

首先这个项目是基于原先otto机器人的二次开发,一开始的原始代码中没有关于胳膊(也就是两个舵机)的任何代码,我只有一个机器人、一段已经编写好的程序、一个上位机软件和一大堆外部函数库。万般无奈的我只有从已有的东西中发掘信息,一开始是不想阅读那繁杂的代码和C++封装的函数库的。于是我开始用AT下载器连接蓝牙模块一个一个测试机器人在做出相应动作时收到的指令。以下是它的指令。

在测试指令阶段其实还发生了一些故事,在机器人控制模式切换时总是会出现不可抗力的重启错误。在我和学姐花了两个小时时间翻遍了串口源码之后,发现其实编译器早就给了答案,在删减了一些功能源代码后它又运行如丝般顺滑了。

之前在写代码时用的都是工程师验证过的代码方案完全没有考虑内存的问题,这次给我又上了一课。。

OTTO机器人驱动源码翻阅:

最终我还是去翻了所有源码,当然有了指令作为线索就有条理多了,翻阅时可以通过指令查询到各个函数通过功能推测它们的功能并通过串口直接向机器人发送指令,通过对参数的修改加上在机器人身上的表现来推测参数含义,然后再开始阅读源码,当发现函数功能和自己推测的一致时,那叫个开心。不知不觉就读完了700行左右的Arduino代码和1000多行的C++库函数代码,原本我是一行C++代码都没敲过的得亏学过C语言,才能猜出一部分代码的意思,也让我见识到了面向对象语言的优点(手动捂脸哭)。

OTTO机器人源码修改:

终于到了最关键的环节,修改源代码使其符合自己需求(软件裁剪?),然而我忽略了做嵌入式中的硬件适配问题,人家的一套硬件是满足了人家自己的需求的,再增添外设的情况下,我完全没考虑到一个问题,这个问题也是使我修改了几天一度怀疑源码是不是有问题的原因。在调试时机器人总是遇上中途重启的问题,在多次调试之后突然想起来之前再论坛上看见一篇博客中说自己电赛失利是因为USB口供电不稳定而导致的。我寻思着是不是我这也是这个问题就用自己的快充头给机器人供电(Arduino Nano自带变电模块)。结果......它居然很流畅的做完了一套动作。没想到两个小小的舵机增加居然要吃这么多电,于是我又加了4节干电作为辅助供电(应为我发现其实四节干电池的供电也不够支持动作的流畅完成)。最后拼拼凑凑总算完成了(总感觉很失败)。

总结:

1、软件和硬件的协调一定要做好,前期在方案确定时就要考虑到各方面硬件是否符合要求,硬件容错性一定要高,不能刚刚好,后面改的话只会更麻烦。

2、编写代码时一定不能忽视代码语法、逻辑以外的问题,剩余内存是否足够程序运行也是重要指标,也可成为调试时问题哦候选项之一。

3、在做二次开发或者维护别人代码时,可以先调试通过指令和现象的结合设想代码可能功能有什么,避免像无头苍蝇一样无处下手。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐