JSKAerialRobot / jsk_uav_forest

THe platform for the uav forest challenge
8 stars 10 forks source link

[Tree map] Add the database to store tree information #35

Closed tongtybj closed 7 years ago

tongtybj commented 7 years ago

I write a scratch of the database to store all trees which are recognized.

tongtybj commented 7 years ago

@chibi314

Please check the core function in _treedatabase.h

Also note that I change the following laser_scan callback: void TreeTracking::laserScanCallback(const sensor_msgs::LaserScanConstPtr& raw_scan_msg, const sensor_msgs::LaserScanConstPtr& clustered_scan_msg)

Which means, we can obtain the clustering index and metric data at the same times. I hope this can help you to do circle-fitting inside this function.

何で英語なんだろう。。。 要は、安斎が実装した円FittingをこのlaserScanCallback内に移植すればできるはず。

chibi314 commented 7 years ago

今、/tree_cluster(sensor_msgs::LaserScan)は1つのクラスターの中央の反応点の値が正の値で、そのクラスタ内の他の値が負になっている(正に直せばもともとの正しい値になる)ので、生のLaserScanはいらないかもしれません。(今のcircle fittingでは使っていない)

tongtybj commented 7 years ago

てことは、 何もないところはNaNになっているんだね。

tongtybj commented 7 years ago

境界がちゃんと分かる状態なら、callbackを前の状態に戻しておくよ

chibi314 commented 7 years ago

そうですね if (std::isnan(ranges[i])==true) みたいな感じでクラスタの終端を判断しています。

tongtybj commented 7 years ago

戻しました。

tongtybj commented 7 years ago

@chibi314

tree_detector.launch

<param name="only_target" value="true" />

にすると、targetの木のみ記録して、他の木は無視する。 falseにすれば、すべての木を記録して行く。

chibi314 commented 7 years ago

コンパイルできなかった問題は sudo apt-get update sudo apt-get upgrade で直りました。

chibi314 commented 7 years ago

@tongtybj とりあえず今日実装した分は anzai/perception にpushしてあります。まだこちらにはpushしていません。 https://drive.google.com/open?id=0B5zEvOJl5IsDQUNRUTRtN05pWVU https://drive.google.com/open?id=0B5zEvOJl5IsDbjJRS1JxNDZDVkE が動画です。 簡単に言えば屋外環境だとまだうまくいきそうにないので、改良が必要です。

追記 表示している数字は半径ではなく直径です。

tongtybj commented 7 years ago

@chibi314

更新したよ。

基本、今までどおりにlaunchすれば、差分がわかると思う。 ここで毎フレーム降順にソートしていて、 displaynumを調整すれば、表示数が変わる。

tongtybj commented 7 years ago

@chibi314 あと、 circlefittingのfunctionをtree_tracking.hではなく, tree_database.hに移したほうがいい気がする。

chibi314 commented 7 years ago

circlefittingはTreeHandle class, TreeDataBase classとの関連性がない(メンバ関数にしてもインスタンスからメンバ関数として呼び出す使い方はしない)のでクラス外部に実装することになると思いますが、ヘッダファイルに関数の実態を実装するのは一般的によくない(2ファイルからインクルードされたらエラーする、今回はないかもしれないけど)ので何か別ファイル(hoge.h, hoge.cpp)に実装を移すということになるのですがいいでしょうか。

tongtybj commented 7 years ago

急いで実装したから、全部ヘッダーに書いちゃった・・・ あとで全部cppに行こうしておこう。

tongtybj commented 7 years ago

circilefftingに関しては、 よくあるのは、include/xxxx/utils/xxxx.hみたいに分けるところもあるけど、 今回はたったの数十行だから、tree::Databaseでいいかなと思っている、個人的に

chibi314 commented 7 years ago

tree_database.cppを作る util/circle_detection.hにcircleFittingの実装を移す をやりました

tongtybj commented 7 years ago

ありがとう! travisが通ればmergeします。