ロボットでステレオビジョンを実現したい。私は視差マップと点群を計算しました。今私は場面のダイナミックな障害を検出したいと思います。 誰も私を助けることができますか? よろしくお願いします。ポイントクラウドの動的障害を検出する方法
0
A
答えて
0
ここで私は2次元ナビゲーションのためにそれを行います。
まず、2次元アレイとして2つの2次元高度マップを準備します。アレイの1つの組の要素は、2Dマップの同じセルに投影点の高さ分と設定最大高さに他の配列の要素を次のようにする:そして
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は、2次元配列の内容を 'スクロール'して、スクロールで値を持たないエッジの要素を3番目のパラメータの値で満たす関数です。
今、あなたは、このようなアレイ(c_infとc_neg_inf値を持つ要素についての世話をする)との差を作ることができます。
//: 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のすべての非ゼロ要素があなたの潜在的な障害となっています。あなたはそれらを列挙し、それらの2次元座標を報告し、次に2次元の障害としていくつかの値を報告することができます。
9月中旬まで待つことができれば、奥行き画像と深度カメラ情報を取得するROSノードの完全なコードをパブリックリポジトリに入れ、測定値をdistance to foundに設定した偽のLaserScanメッセージを生成します障害。
関連する問題
- 1. ディスク障害検出perlスクリプト
- 2. C#リモートアプリケーション障害を検出する
- 3. PHPの早期障害の検出
- 4. 障害検出のためのステレオビジョン
- 5. テスト目的でデータベース障害をシミュレートする方法(Ruby on Rails)
- 6. pingで障害のある物理リンクを検出します。
- 7. Eclipseの起動障害MAC
- 8. サービスファブリックアプリケーション障害時の動作
- 9. 一時的な障害
- 10. 潜在的な障害に対応する良い方法
- 11. 障害のあるH2クラスタノードの検出と回復
- 12. セグメンテーション障害:11ワンセグ障害の原因を見つけるために、GDBを用いて動的3Dアレイパラメータ
- 13. ssisのジョブ障害のトラブルシューティング方法
- 14. SpriteKitで動く障害物を作る方法
- 15. 今日のオブジェクト検出の障害は何ですか?
- 16. プログラムは動的テストを使用して障害を検出できませんが、障害はありますか?
- 17. Meteor 1.3 + React:サブスクリプション障害を検出しますか?
- 18. akkaルータからのリモートノードからの障害の検出
- 19. CALayerの障害?
- 20. Apacheのプロキシ負荷分散バックエンドサーバの障害検出
- 21. 半径の地理的な障害物検索
- 22. jgroups - グループコーディネータが終了したときの障害検出
- 23. WCFの障害 - どのような障害ですか?
- 24. Segementation障害(コアダンプ)
- 25. jqGrid 4.3.2障害
- 26. 列障害()
- 27. SOAP障害コードリスト
- 28. QT:ユニットテストセグメンテーション障害
- 29. アブロスキーマ障害
- 30. ブール障害
親愛なるDatjkoさん、 ありがとうございました。私はC++でプログラミングしています.ROSは使用できません。 これを書くことができます: int height = maxP.y - minP.y; int width = maxP.z - minP.z; – omrn
これらは定義されていないためです。 と、どのように結果を表示できますか? 最高のお礼 – omrn
CvUtilsは私のプログラムでは不明です。私を助けてください。 – omrn