gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

C++

nodelet用に定義したクラスを使ってnodeを立ち上げる

ROSで処理を書く際、ノード間でのデータのやり取りの効率化のため、殆どnodeletとしてクラスを作ることが多いんじゃないかと思います。ただそうすると、そのクラスのメンバ関数をテストをしようとすると他のノードも立ち上がったりして面倒ですよね。じゃあn…

ROSでXX_msgs::YY::ConstPtrをXX_msgs::YYに変換する方法

例えばsensor_msgs::LaserScan::ConstPtrをsensor_msgs::LaserScanに変換したい時があるかと思います。sensor_msgs::LaserScan::ConstPtrの実体は、boost::shared_ptrになります。そのため、 boost::shared_ptr<sensor_msgs::LaserScan> laserscan_ptr = boost::const_pointer_cast<sensor_msgs::LaserScan>(l</sensor_msgs::laserscan></sensor_msgs::laserscan>…

PCLを使った点群の軸(直線)を推定する手法

他にも色々とあるんだと思いますが、ここではRANSACとPCAを使った点群の軸(直線)を推定する手法について紹介します。 RANSAC(RANdom SAmple Consensus) RANSACとは、ロバスト推定の中の1つの手法です。ロバスト推定とは、データの中に外れ値が含まれてい…

C++における集合演算のための関数たち

C++

席集合や和集合などを作る関数がないか調べたところ、STLとBoostでそれらの関数を見つけたのでメモします。なお、STLとBoostでそれぞれ関数名は一緒です。挙動や入出力は異なりますので、詳細は下記の参考文献をご覧ください。和集合: set_union 積集合: se…

コマンドライン中で指定したパラメータ名をノード中で取得する方法(C++)

結論から言うと、2種類の方法があります。 ros::names::remap : 返り値としてremapされたパラメータ名が取得できます。 resolveName : 返り値としてremapされたパラメータ名が取得できます。第二引数でremapが成功したかをboolで取得できます。 ros::names:…

PCLの中のGeneralized ICPの使い方

GICPをテストコードを元に使ってみたのですが、うまく収束せず困っていました。そこでgithub上で何かいいサンプルはないかと思って探していたところ、ちょうどよいものがありましたので共有します!ETH ZurichのAutonomous system labが公開しているrepositr…

PCL(Point Cloud Library)の使い方が書かれた資料

PointCloudを使ったコードを書く場合、PCLがよく使われるものと思います。サンプルやテストコードを見ることで使い方を知ることはできますが、解説は殆どありません。今回PCLの中のRegistrationについて書かれた論文がありましたので、メモ代わりに記事にし…

C/C++で配列の初期化に#includeを使う

C C++

データファイルを取り扱う時、そのデータを読んで配列に格納していくのは面倒ですよね。実は、配列の初期化には#includeプリプロセッサが使えます。今回は#includeを使って配列を初期化した時の挙動について書きます。 なお今回のテスト環境は、 OS : Window…