로봇에서 스테레오 비전을 구현하고 싶습니다. 나는 불일치지도와 점 구름을 계산했습니다. 이제는 장면에서 다이내믹 한 장애물을 감지하고 싶습니다. 아무도 도와 줄 수 있습니까? 최고 감사합니다점 구름에서 동적 장애물을 감지하는 방법
0
A
답변
0
다음은 2 차원 탐색에 대한 설명입니다.
먼저 두 개의 2 차원 입면도를 2 차원 배열로 준비합니다. 어레이들 중 하나의 집합 요소들은 2 차원지도의 동일 셀에 투영 점의 높이 분 설정할 최대 높이의 다른 배열의 요소를 다음과 같이한다 : 다음
static const float c_neg_inf = -9999;
static const float c_inf = 9999;
int map_pixels_in_m_ = 40; //: for map cell size 2.5 x 2.5 cm
int map_width = 16 * map_pixels_in_m_;
int map_height = 16 * map_pixels_in_m_;
cv::Mat top_view_min_elevation(cv::Size(map_width, map_height), CV_32FC1, cv::Scalar(c_inf));
cv::Mat top_view_max_elevation(cv::Size(map_width, map_height), CV_32FC1, cv::Scalar(c_neg_inf));
//: prepare elevation maps:
for (int i = 0, v = 0; v < height; ++v) {
for (int u = 0; u < width; ++u, ++i) {
if (!pcl::isFinite(point_cloud_->points[i]))
continue;
pcl::Vector3fMap point_in_laser_frame = point_cloud_->points[i].getVector3fMap();
float z = point_in_laser_frame(2);
int map_x = map_width/2 - point_in_laser_frame(1) * map_pixels_in_m_;
int map_y = map_height - point_in_laser_frame(0) * map_pixels_in_m_;
if (map_x >= 0 && map_x < map_width && map_y >= 0 && map_y < map_width) {
//: update elevation maps:
top_view_min_elevation.at<float>(map_x, map_y) = std::min(top_view_min_elevation.at<float>(map_x, map_y), z);
top_view_max_elevation.at<float>(map_x, map_y) = std::max(top_view_max_elevation.at<float>(map_x, map_y), z);
}
}
}
//: merge values in neighboring pixels of the elevation maps:
top_view_min_elevation = cv::min(top_view_min_elevation, CvUtils::hscroll(top_view_min_elevation, -1, c_inf));
top_view_max_elevation = cv::max(top_view_max_elevation, CvUtils::hscroll(top_view_max_elevation, -1, c_neg_inf));
top_view_min_elevation = cv::min(top_view_min_elevation, CvUtils::hscroll(top_view_min_elevation, 1, c_inf));
top_view_max_elevation = cv::max(top_view_max_elevation, CvUtils::hscroll(top_view_max_elevation, 1, c_neg_inf));
top_view_min_elevation = cv::min(top_view_min_elevation, CvUtils::vscroll(top_view_min_elevation, -1, c_inf));
top_view_max_elevation = cv::max(top_view_max_elevation, CvUtils::vscroll(top_view_max_elevation, -1, c_neg_inf));
top_view_min_elevation = cv::min(top_view_min_elevation, CvUtils::vscroll(top_view_min_elevation, 1, c_inf));
top_view_max_elevation = cv::max(top_view_max_elevation, CvUtils::vscroll(top_view_max_elevation, 1, c_neg_inf));
여기서 CvUtils :: hscroll과 CvUtils :: vscroll은 두 번째 배열의 내용을 스크롤하여 세 번째 매개 변수의 값이있는 스크롤의 값이없는 가장자리의 요소를 채우는 함수입니다.
//: produce the top_view_elevation_diff_:
cv::Mat top_view_elevation_diff = top_view_max_elevation - top_view_min_elevation;
cv::threshold(top_view_elevation_diff, top_view_elevation_diff, c_inf, 0, cv::THRESH_TOZERO_INV);
지금 top_view_elevation_diff의 '0'이 아닌 요소가 잠재적 인 장애물 :
이제 이런 (c_inf 및 c_neg_inf 값을 가진 요소에 대해주의하면서) 배열의 차이를 만들 수 있습니다. 당신은 그것들을 열거 할 수 있고 그것들의 2 차원 좌표를보고 당신의 2 차원 장애물로서 어떤 가치를 더할 수 있습니다.
9 월 중순까지 기다릴 수 있다면 깊이 이미지와 깊이 카메라 정보를 사용하는 ROS 노드의 전체 코드를 공공 저장소에 넣고 측정 된 거리를 측정 거리로 설정 한 가짜 레이저 스캔 메시지를 생성합니다 장애물.
관련 문제
- 1. 점 구름에서 3D 볼록 선체
- 2. 점 구름에서 밀도 구름 만들기
- 3. 점 구름에서 방해 지점을 도려 내기
- 4. 2D 점 구름에서 가장 큰 빈 사각형 찾기 (방향이 어긋남)
- 5. 균등 그리드의 점 구름에서 가장 가까운 점까지의 거리 찾기
- 6. MATLAB에 의해 해당 분산 점 구름에서 XYZ 데이터 만들기
- 7. Interbase IBQuery 동적 필드를 감지하는 방법
- 8. Kinect SDK 2.0에서 사용자가 동적 또는 동적 모드를 감지하는 방법
- 9. 오브젝트가 두 점 사이에 놓여 있는지 감지하는 방법
- 10. 구름에서 임계점 거리보다 가까운 지점 제거
- 11. 단어 구름에서 단어 제거 R
- 12. 동적 점 평균화 스크립트 만들기
- 13. 두 3D 점 구름 사이의 차이점을 감지하는 방법은 무엇입니까?
- 14. 제트 팩 joyride에서 사용되는 장애물을 디자인하고 싶습니다
- 15. 장애물을 다루는데 훌륭한 경험적 방법은 무엇입니까?
- 16. 볼 애니메이션의 장애물을 알아낼 수 없습니다.
- 17. cocos2d-x에서 장애물을 플레이어와 충돌시키는 법
- 18. 동적 생성 된 바인딩의 보낸 사람 (단추)을 감지하는 방법
- 19. box2d, 정적 바디와 동적 바디 간의 충돌을 감지하는 방법
- 20. 유닉스에서 마우스 조건을 감지하는 방법
- 21. R의 단어 구름에서 특정 단어 제거
- 22. 삭제 된 UIDocument가 구름에서 다시 나타납니다.
- 23. d3 단어 구름에서 호버 효과 추가
- 24. 점 기호 점 기호 전에 번호를하는 방법
- 25. 루프에 대한 동적 정지 점 설정
- 26. 셀레늄 webdriver에서 동적 프레임을 감지하는 방법은 무엇입니까?
- 27. 점 표기법 - 속성/방법
- 28. 방법 * (점 별) 작동
- 29. iOS 8에서 예측 텍스트를 감지하는 방법
- 30. 정확하게 원을 감지하는 방법
친애하는 Datjko, 감사합니다. 저는 C++로 프로그래밍 중이며 ROS를 사용할 수 없습니다. 다음과 같이 쓸 수 있습니까? int height = maxP.y - minP.y; int width = maxP.z - minP.z; – omrn
이것들은 정의하지 않기 때문에. 어떻게 결과를 표시 할 수 있습니까? 최고 감사합니다 – omrn
내 프로그램에서 CvUtils을 (를) 알 수 없습니다. 도와주세요. – omrn