-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from jalenzz/main
📝 update bigdeal
- Loading branch information
Showing
3 changed files
with
28 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,43 @@ | ||
# 大作业 | ||
|
||
这里是你有牢固的C++基础,OpenCV基础,和一些数学基础才能实现这个 | ||
**(所以你别急)** | ||
通过前面对于 CMake, C++ 和 OpenCV 学习相信你已经有一定的基础了,但是都还是一些局部的知识,是时候进行一些完整的项目实践了! | ||
|
||
强烈推荐学完其他前置知识之后再来进行这个简单的小项目实践! | ||
|
||
现在的你需要帮助学长编写一份可以实现自动瞄准装甲板的程序,帮助学长拿下比赛 | ||
|
||
## 自瞄 | ||
|
||
作为视觉组的成员,你一定要了解和知道自瞄,我估计你做到这个作业的时候已经到了期末或者暑假了,这时你已经有一些能力了,可以做一些项目了。 | ||
那我们开始做一个简单的自瞄的项目了。 | ||
### 识别 | ||
|
||
我们先来看看装甲板的样子,想想我们应该如何找到一张图片中的装甲板 | ||
|
||
![](./images/armor.jpg) | ||
|
||
很明显装甲板两侧有非常明显的视觉特征,一对发光的灯条,图片中明显的视觉特征是我们使用传统视觉的基础 | ||
|
||
是否可以通过你前面学习的一些 OpenCV 知识找到图片中的这一对灯条,并且通过一定的处理获取到装甲板的四个角点在图像中的坐标和装甲板的图片 | ||
|
||
### PnP 解算 | ||
|
||
现在已经获取到了装甲板的角点坐标,但是我们的装甲板在三维世界中,我们只有图像中的二维坐标是不够的,所以我们需要一定的方法获取到装甲板的三维位姿 | ||
|
||
1.首先你需要识别装甲板,目前有两种方案: | ||
+ 传统视觉opencv | ||
PnP Perspective-n-Point 是求解 3D 到 2D 点对运动的方法,目的是求解相机坐标系相对世界坐标系的位姿 | ||
|
||
+ 深度学习(yolo),需要数据集自己来608拍,前面你已经有了标数据集的基础,想必你已经信手拈来了 | ||
通俗的讲,PnP 问题就是在已知世界坐标系下 N 个空间点的真实坐标以及这些空间点在图像上的投影,如何计算相机所在的位姿(已知量是空间点的真实坐标和图像坐标,未知量是相机的位姿) | ||
|
||
2.预测装甲板 | ||
+ 因为装甲板是移动和旋转的,你要预测这个装甲下一次在什么位置,这可能需要一些追踪算法,比如说无迹卡尔曼,EKF等 | ||
我们可以通过人为设定一个坐标系,Z 轴垂直装甲板朝里 `z = 0` | ||
|
||
3.追踪装甲板 | ||
+ 因为你已经预测了装甲板的运动轨迹了,你就需要去追踪移动的装甲板,这里涉及坐标转换,你需要有一些SLAM的基础,同时你要需要一些数学基础比如线性代数帮助你了解矩阵,当然你如果使用yolov8,它是自带追踪算法的,当然有时候效果不是很好。 | ||
这样我们就能有一个装甲板在这个自定义坐标系下的三维坐标了 | ||
|
||
这样自瞄代码大概就实现了,是不是很简单呢!但是这是你第一次完成的项目,有很大的挑战,**再次重申这不是必选項** | ||
![](./images/pnp.png) | ||
|
||
![](https://pic.baike.soso.com/ugc/baikepic2/1284/20230711212027-1477080417_jpeg_1082_721_118780.jpg/1284) | ||
有了这个坐标系之后我们就可以通过 PnP 算出相机坐标系到自定义坐标系的平移向量,即装甲板的三维坐标 | ||
|
||
--- | ||
|
||
这样最简单的自瞄代码大概就实现了! | ||
|
||
但是这只实现了基础功能,现实中的装甲板是在移动的,而且我们的识别算法没有办法非常精确的识别到装甲板的位置,图像数据等也存在非常多的噪声,我们需要对结果进行**滤波处理**,下一时刻位置**预测** | ||
|
||
滤波和预测是进阶部分的内容,感兴趣的同学可以自己尝试学习 `Kalman` 滤波,对 PnP 解算获得的三维装甲板坐标进行滤波和预测 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.