gggggraziegrazie

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

2018-12-01から1ヶ月間の記事一覧

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つの手法です。ロバスト推定とは、データの中に外れ値が含まれてい…

決定木(Decision Tree)

決定木とは、複数のルールを使って組み合わせることで、データを複数のサブセットに分割する手法のことです。分割したサブセットの内容により、分類木や回帰木と呼ばれます。分類木の分割対象はクラスであり、回帰木の対象は出力値です。つまり決定木の作成…

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

C++

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

外れ値・異常値の検出手法

外れ値と異常値 外れ値とは、原因が不明だけれども真値から大きく異なる値のことです。一方異常値とは、同じく真値から大きく値が異なるけれども、何故値が真値と異なるのか説明がつく(測定ミス、記入ミスなど)値を指します[4][5]。つまり、異常値外れ値と…

Numpyでの二次元排列の操作方法

順次記載内容を追加してきたいと思います。 二次元配列の作り方 参考文献 二次元配列の作り方 arr = np.empty((0, 2) , float) # 0行2列の二次元配列オブジェクトを生成する arr = np.append(arr, np.array([[x, y]]), axis=0) # np.appendは演算結果を返す…

PCL中のGeneralized ICPを調査してわかったことメモ

PCL中でGeneralized ICP(以降GICP)を調査してわかったことを書き連ねます。適宜更新するため、読みづらいところがあるかもしれませんがご容赦ください。GICPを実行するには、ICPと同様にalignを行えばよい。Levenberg–Marquardt法を使いたいんだけどと思う…

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

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

ROSにおけるシャットダウン処理の書き方

ROSのノードを動かした時、Ctrl-Cでそのノードを落としたいのに、落ちてくれない場合ありますよね。また落ちたとしても、下記の様なexceptionが発生したりするなどして、キレイに落ちてくれなかったりします。 terminate called after throwing an instance …