Closed tongtybj closed 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内に移植すればできるはず。
今、/tree_cluster(sensor_msgs::LaserScan)は1つのクラスターの中央の反応点の値が正の値で、そのクラスタ内の他の値が負になっている(正に直せばもともとの正しい値になる)ので、生のLaserScanはいらないかもしれません。(今のcircle fittingでは使っていない)
てことは、 何もないところはNaNになっているんだね。
境界がちゃんと分かる状態なら、callbackを前の状態に戻しておくよ
そうですね if (std::isnan(ranges[i])==true) みたいな感じでクラスタの終端を判断しています。
戻しました。
@chibi314
<param name="only_target" value="true" />
にすると、targetの木のみ記録して、他の木は無視する。
false
にすれば、すべての木を記録して行く。
コンパイルできなかった問題は
sudo apt-get update
sudo apt-get upgrade
で直りました。
@tongtybj とりあえず今日実装した分は anzai/perception にpushしてあります。まだこちらにはpushしていません。 https://drive.google.com/open?id=0B5zEvOJl5IsDQUNRUTRtN05pWVU https://drive.google.com/open?id=0B5zEvOJl5IsDbjJRS1JxNDZDVkE が動画です。 簡単に言えば屋外環境だとまだうまくいきそうにないので、改良が必要です。
追記 表示している数字は半径ではなく直径です。
@chibi314 あと、 circlefittingのfunctionをtree_tracking.hではなく, tree_database.hに移したほうがいい気がする。
circlefittingはTreeHandle class, TreeDataBase classとの関連性がない(メンバ関数にしてもインスタンスからメンバ関数として呼び出す使い方はしない)のでクラス外部に実装することになると思いますが、ヘッダファイルに関数の実態を実装するのは一般的によくない(2ファイルからインクルードされたらエラーする、今回はないかもしれないけど)ので何か別ファイル(hoge.h, hoge.cpp)に実装を移すということになるのですがいいでしょうか。
急いで実装したから、全部ヘッダーに書いちゃった・・・ あとで全部cppに行こうしておこう。
circilefftingに関しては、 よくあるのは、include/xxxx/utils/xxxx.hみたいに分けるところもあるけど、 今回はたったの数十行だから、tree::Databaseでいいかなと思っている、個人的に
tree_database.cppを作る util/circle_detection.hにcircleFittingの実装を移す をやりました
ありがとう! travisが通ればmergeします。
I write a scratch of the database to store all trees which are recognized.