|
Open CV – 장애물 거리 계산 |
1조 | |
작성일 : 2012-04-013 | ||
작성자 : 유재훈 | ||
| ||
개요 |
코너 검출을 이용한 장애물과의 거리 계산 | |
핵심코드 중 일부 |
// 거리탐지기 실행 public double GetRange(int alt, double ang) { this.alt = alt; this.ang = ang; ArrayList ar = new ArrayList(); for (int i = 0; i < points.Length; i++) { ar.Add(points[i]); } double leastRange = 999999; double k = 0; foreach (CvPoint2D32f point in ar) { // point 기준으로 그룹화된 경우 point와의 거리 전송 k = CheckGrouped(point, ar); if (leastRange > k) { leastRange = k; } } return leastRange; } | |
핵심코드 중 일부 |
private double CheckGrouped(CvPoint2D32f point, ArrayList ar) { int count = 0; foreach (CvPoint2D32f p in ar) { if (((p.X - point.X < 15) || (p.X - point.X > -15)) && ((p.Y - point.Y < 15) || (p.Y - point.Y > -15))) { count++; } } if (count >= ar.Count/3) { double a = (double)(( ((double)Area.Y + ((double)Area.Width / 2) - point.Y) / 300) * 6); double angle = ang + a; angle = ((Math.PI * 2) * angle) / 360; double realRange = (double)alt / (double)(Math.Cos(angle)); double verticalRange = Math.Sqrt((realRange * realRange) - (alt * alt)); return verticalRange; } else { return 999999; } } | |
원리 |
웹캠으로 고도측정이 제한되는 관계로 평지를 가정한 뒤, 삼각비를 활용하여 높이, 각도를 활용한 실제거리를 구한다.
| |
결과 및 고찰 |
1. 웹캠 자체만으로는 보는 각도와 거리측정이 힘들기 때문에 수동으로 값을 입력 후 계산을 통해 거리를 측정하였지만, 초음파센서 등의 다른 하드웨어와의 연동을 통해 보다 정확한 거리를 알 수 있을 것이라 본다. 2. 코너검출과 캐니엣지를 동시에 사용하면 보다 정확할 것으로 본다. | |