大家好,本次任务写得比较多,任务要求都达到了,感觉涉及到挺多东西的,有不同随机数的获取、列表的循环写入和读取、列表数据排序、数据转换等等。想借此帖子尽量写得详细点,有空的朋友帮忙看看,没空的朋友看下面视频就能知道这次任务流程了,这次还发现了两个BUG。
下面开始:
先简单说明下本次任务:随机生成100内的斐波那契数列。数列举例:1、1、2、3、5、8、13、21、34、55、89、....,即第一个加第二个等于第三个。
任务要求是自动生成两个1到5的数,并展示出来,然后开始击打标签,将数列展示出来。视频如下
下面开始介绍代码,时间不够用,有很多可以进一步优化的地方,非科班出生,希望能和大家互相交流,学习成长。
图1是机甲及程序的初始化,我这里第一行V1是调云台默认俯仰角,方便调试。其他是一些初始设置
图1
图2是识别标签信息并存入列表中,如果10个标签都识别到(这里可以优化成持续获取,识别到没有的ID就存入列表,直到10个不同标签信息都获取到),调用run_sort_2函数将标签信息从小到大排序,排序完成后调用run_angle_3将坐标列表转化成云台角度。
图2
图3是run_sort_2是将标签信息按ID值从小到大排序。
一个标签的数据是5项,分别是ID、X坐标、Y坐标、X宽度、Y宽度(应该没记错吧)。
将J设为0,用J来代表当前要查找大数字,数字0到9的ID值是10到19,所以检测每个标签信息的ID等于J+10,是的话就存入新列表中,然后J加一,寻找下一个数字。
将I设为0,用I来代表当前标签信息列表中的项,标签信息列表第1项是标签数,第2项是标签ID,此后每隔5项就是标签ID。所以2+(5*I)就能寻找列表中所有的标签ID了
循环一遍后,就将标签信息列表按ID值从小到大存入新列表中了。
run_angle_3将坐标列表转化成云台角度。
新列表生成后,存的还是坐标信息,我们是控制云台角度的,所以要把坐标信息转成角度信息,根据大师之路的教程,可以知道X方向是(X-0.5)*96 ,Y方向是(0.5-Y)*54.
(因为我实际测试中,发现有偏差,就把比例扩大了,此处需要优化)。
图3
图4、图5是生成斐波那契数列
先生成随便数,如果相等重新生成,直到不同。
将生成的两个随便数排序,把小的用左云台显示,大的用右云台显示
生成斐波那契数列并存入列表
初始化为击打状态
图4
图5
图6读取斐波那契数列列表并分别将十位和个位输出给击打函数
图7击打函数,根据输入的数击打对应的数字。
图6
图7
下面是发现的两个BUG,大家编程时注意下哈。
1:列表是不能访问第0项的。发现用用变量的方式读取列表时,当变量为0时,却不报错误,实际读取到的数是列表最后一项。测试过多次,可以复现。
如图是我的复现,先把列表填为0到9,列表第1项为0,最后一项是9。将I设为0,既列表第0项,确可以正常运行,读取到的数是9。看右边参数表,I为0,TEMP为9。
这个BUG,操作列表时,一不小心就中招,而且不好发现。
2:这个BUG影响比较小,测试发现数值5.1、6.1、7.1保持后打开或者复制后会变成5.10000000000001、6.1000000000000001、7.100000000000001。如最后一图
图8
图9
终于写完了,写了好久,以后继续,谢谢大家,希望能和大家更多的互相交流学习。