首先要讲一下智能车组别的分工
两软一硬,其中一软负责元素方向,另一软负责PID等全局编写。负责全局的为队长,纵观各届智能车,不难发现负责全局的软件同学一般为队长,因为他要负责全局,也就是整支队伍一开始方案的确定、修改,是个指挥,也是最辛苦的人,画pcb有尽头,元素有尽头,算法无尽头,从一开始战斗到最后。
然后讲一下选队友
要选择能坚持到最后的,别有些队伍到最后就一个人在搞,宁愿人员不全,我也不要垃圾,因为我如果觉得谁后期好,可以加人进来,但是一旦有了人就不太好意思踢啦。
软硬件分明(当然除非你很牛),一开始都不容易,能坚持到最后才行。
还是坚持,谁会的多,会的少,一点事情没有,找一个能陪你熬夜,陪你一起犯二,一起熬夜熬的点头的那个人,这点非常重要!!!非常,因为一个水队友,不共患难的队友,对你心态会有很大的影响,你在这想死了也调不出来,你在这疯狂逃课调车,他在外面风流倜傥。你在这不吃饭调车,他睡了回笼觉来找你也不知道带份饭,等等等…久而久之,请问你还笑的出来吗?如果你还笑得出来,请问,你经历过绝望吗?应该是没有。
其实最重要的一点还是要选择会珍惜团队成果的人,我辛辛苦苦带着你,你拿着成果到处张扬,自己的车还没能包进国赛,去其他组别帮人家撸代码,这是我最看不惯的人。
以上摘抄于某篇文章,个人非常赞同,所以引用了过来,各位不要对号入座,可能带了点个人情感,毕竟我做车的时候,从来没人帮我撸过代码。
下面就是正文逆透视变换,其实没有想象的那么难,我是不赞同在车上使用逆透视的,但是毕竟大家都想了解,就教教大家如何逆透视
首先呢,要用上位机采一张车在赛道上的灰度图或者二值化图也行,但是个人觉得还是灰度图比较好,例如下面这张。
然后可以使用opencv(python3)求取逆透视矩阵,关于python3与opencv的安装我这边就不在叙述,做为一个做车人我想基本的百度应该还是会的。
下面粘贴opencv求取逆透视矩阵N的代码,
import cv2 # opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt # Matplotlib是RGB def cv_show(img,name): cv2.imshow(name,img) cv2.waitKey() cv2.destroyAllWindows() #读取图片 image=cv2.imread('6.bmp') #这里传入所需图片路径 #image=cv2.resize(image,(188,120)) cv_show(image,"image") width,height = 188,120 pts1 = np.float32([[0,90],[188,90],[75,7],[113,7]]) pts2 = np.float32([[55,120],[133,120],[55,0],[133,0]]) M = cv2.getPerspectiveTransform(pts1, pts2) print(M) N = np.linalg.inv(M) print(N) warped = cv2.warpPerspective(image, M, (width, height)) cv_show(warped,'warped') cv2.imwrite('warped.png',warped)
运行之后,就会在pycharm(我用的是pycharm开发python的方式)的命令行打印出透视矩阵,pts1中的四个坐标对应你采集的图片上十字的四个角点的坐标,pts2中的坐标对应你想让这四个角点处在图片的哪四个位置。
有了这个透视矩阵,那么逆透视就变得易如反掌了,以下贴出tc264上的逆透视变换代码,
H1-H9对应上面的逆透视矩阵N,我这里tc264和opencv用的图片系列不一样,不要在意。
#define H1 2.045*(10^-1) #define H2 -1.320*(10^0) #define H3 7.577*(10^1) #define H4 0.000*(10^0) #define H5 1.232*(10^-1) #define H6 0.000*(10^0) #define H7 0.000*(10^-18) #define H8 -1.391*(10^-2) #define H9 1.000*(10^0) void Get_Perspective_Image(uint8 imageIn[MT9V03X_H][MT9V03X_W],uint8 imageOut[MT9V03X_H][MT9V03X_W]) { uint8 i,j; float s,X,Y; for(i=0;i<MT9V03X_H;i++) { for(j=0;j<MT9V03X_W;j++) { s=H7*j+H8*i+H9; s=1/s; X=H1*j*s+H2*i*s+H3*s; Y=H4*j*s+H5*i*s+H6*s; if(Y>=0.5&&X>=0.5&&Y<MT9V03X_H-0.5&&X<MT9V03X_W-0.5) { if(i>=0) { imageOut[i][j]=imageIn[(uint8)(roundf(Y))][(uint8)(roundf(X))]; } } else { imageOut[i][j]=0; } } } }
透视变换就是如此简单,当然这个运行速度还是需要考虑的,想要加快运行速度可以使用打表的方式,或者只对边线进行逆透视,自行百度咯,我不多叙述,祝各位十八届智能车加油。
版权归原作者 shiuwon 所有, 如有侵权,请联系我们删除。