ROSでpoint cloudを扱う際に,たいていの場合はsensor_msgs::PointCloud2で扱ってます.なぜ、2なのか.あんまり気にしてなかったのですが,とあるシミュレータがsensor_msgs::PointCloudで扱っていてハマりました(´・ω・`)
sensor_msgs::PointCloud で調べても, sensor_msgs::PointCloud 2が引っ掛かる。。。
PontCloud to PointCloud2で調べても情報が出てこない(´・ω・`)
PointCloudとPointCloud2
とりあえず、ROS wikiを見てみる.http://wiki.ros.org/pcl/Overvie
sensor_msgs::PointCloudは最初にROSで採用された古いメッセージ型で,ROS1.0より前で使われていたみたいです.(ROS1.0より前て、( ゚д゚)ポカーン)
sensor_msgs::PointCloud2は新しく採用されたpoint cloud messageの型.新しいとは言っても,詳細はPCL_March_2010.pdfを見ろとのことなので,2010年なんですね。。。
これは。これは。 sensor_msgs::PointCloud を見ない訳ですよ(´・ω・`)情報も出てこない訳ですよ(ノД`)・゜・。
なんでこんな型をこのシミュレータで使ってるんだろ??何か特別な理由でもあるのかな??(わからない
sensor_msgs::PointCloudをどう扱うか
sensor_msgs::PointCloud⇒ sensor_msgs::PointCloud2 に変換する関数、convertPointCloudToPointCloud2、がsensor_msgs/point_cloud_conversion.hにあるようです.
そのため,
sensor_msgs::PointCloud
↓ convertPointCloudToPointCloud2
sensor_msgs::PointCloud2
↓fromROSMsg
pcl::PointCloud
と変換することでpclの型として使えるようになりました.メンドクセェ
とりあえず,これで動きますが,もっと良い方法ないですかね。。。
No responses yet