Laser SLAM は ros を使用して点群マップを保存します (A-LOAM を例にします)

Laser SLAM は点群マップを保存し、ros ツールを使用して SLAM プログラムを再コンパイルせずに保存します。

目次

方法

方法 1: 記録トピックを rosbag として保存し、pcd に変換します。

方法 2 トピックを pcd として直接保存する

点群マップを表示する

pcl_viewer ビュー

クラウド比較ビュー

PCD 点群マップをプライ形式に変換して表示します


例として、A-LOAM を使用して kitti データセットを実行します。

A-LOAM プログラムを実行するには、2 つの端末を開いて次のコマンドを実行します。

roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch
rosbag play  --pause xxx.bag

方法

方法 1: 記録トピックを rosbag として保存し、pcd に変換します。

rosbag レコードを使用して記録する必要があるマップ点群のトピックを記録し、bag ファイルとして保存し、bag 内の関連トピックを pcd 形式に転送します。

具体的な手順:

1. 実行が終了しようとしているときに記録し、保存したいフォルダー内のターミナルを開いて実行します

 rosbag record /laser_cloud_map

2 つの INFO メッセージが表示されます。

[ 情報] [......]: /laser_cloud_map をサブスクライブ中
[ 情報] [......]: 'map.bag' に記録中。

実行後、ctrl+C で記録が終了し、マップ file.bag ファイルがフォルダーに保存されます。
2.バッグをpcdファイルに変換します

map.bag ファイルが存在するディレクトリに切り替えます。

rosrun pcl_ros bag_to_pcd map.bag /laser_cloud_map map.pcd

map.bag は、map.pcd に変換されます。rosrun の実行が終了すると、pcd フォルダーが生成され、その中のファイルが変更時刻に従って並べ替えられていることがわかります (最新のものは、最終的な点群マップの pcd ファイルです)。

rosbag レコードに保存されたファイルに.bag.activeという接尾辞が付いている場合は、「.bag」という接尾辞を持つ通常のパッケージに復元する必要があります。修理プロセス:

rosbag の再インデックス xxx.bag.active

rosbag 修正 xxx.bag.active または rosbag 修正 xxx.bag result.bag

rosbag の再インデックス後、.bag.org.active というサフィックスが付いたファイルが生成されますが、これは単なる中間ファイルであり、処理する必要はありません。rosbag 修正は依然として xxx.bag.active を処理しますが、修正の背後に result.bag がある場合、修復ファイルは result.bag として保存されます。

方法 2 トピックを pcd として直接保存する

rosrun pcl_ros ツールを使用して、rosrun pcl_ros で pcd ファイルとして記録する必要があるマップ点群トピックを直接保存します。

具体的な手順:

 実行が終了しようとしたときに記録し、保存したいフォルダーにあるターミナルを開いて実行します

rosrun pcl_ros pointcloud_to_pcd input:=/laser_cloud_map

このとき、端末上には以下のINFO情報が表示されます。

[ INFO] [1683850358.621560685]: バイナリ PCD として保存中
[ INFO] [1683850358.625476468]: トピック /laser_cloud_surround の受信データをリッスンしています [ INFO] [1683850360.540955903]
: フレーム Camera_init で 7650 データ ポイントを受信しました次のフィールド: xyz 強度
[ INFO] [1683850360.540990020]: データは 1317653847034159.pcd に保存されました
[ INFO] [1683850361.131458068]: 次のフィールドを持つフレーム Camera_init で 13486 データ ポイントを受信しました: xyz 強度 [ INFO] [1683850361.1314896] 94]
: 1317653847552311.pcd に保存されたデータ

。。。。。。

 rosrun pcl_ros pointcloud_to_pcd input:=/laser_cloud_map トピックの下にある一連の点群を pcd 形式でフォルダーに保存し、変更時刻に従ってフォルダー内のファイルを並べ替えます。最新の点群マップが最後の点群マップ pcd ファイルになります。


点群マップを表示する

pcl_viewer ビュー

pcl_viewer xxx.pcd

インストールされていない場合は、事前にインストールする必要があります

sudo apt-get install pcl-tools

クラウド比較ビュー

オープンクラウド比較

クラウド比較.ccViewer

クラウド比較.クラウド比較

PCD 点群マップをプライ形式に変換して表示します

pcl_pcd2ply xxx.pcd xxxxxxx.ply

MatLab/MeshLab などのサードパーティ ソフトウェアは、点群マップを処理するときに pcd を ply に変換する必要があり、MeshLab は pointcloud_to_pcd メソッドを使用して、pcd から ply 形式に変換された点群を作成する必要があります。

ROS 命令の説明、GPT より

rosrun pcl_ros pointcloud_to_pcd

`rosrun pcl_ros pointcloud_to_pcd` は、ROS の点群データを PCD ファイル形式に変換するために使用される ROS ノードです。 

`rosrun pcl_ros pointcloud_to_pcd` コマンドを使用する場合は、入力点群データのトピック名と、出力 PCD ファイルの名前とパスを指定する必要があります。具体的な利用方法は以下の通りです。

```
rosrun pcl_ros pointcloud_to_pcd input:=<input_topic_name> Output:=<output_file_path>
```

このうち、`<input_topic_name>` は入力点群データの ROS トピック名、`<output_file_path>` は出力 PCD ファイルのパスと名前です。例えば:

```
rosrun pcl_ros pointcloud_to_pcd 入力:=/カメラ/深度/ポイント 出力:=/home/user/pointcloud.pcd
```

この例では、ノードは `/camera/ Depth/points` トピックから点群データを受信し、それを PCD ファイル形式に変換して `/home/user/pointcloud.pcd` ファイルに保存します。

`rosrun pcl_ros pointcloud_to_pcd` を使用して点群データを変換する場合、入力点群データが指定された ROS トピックに公開されていることを確認する必要があることに注意してください。また、`pcl_ros` パッケージがインストールされていることを確認する必要があります。インストールされていない場合、コマンドは正しく動作しません。

コマンドライン ツール `rosrun` の使用に加えて、ROS 起動ファイルを使用して `pointcloud_to_pcd` ノードを起動することもできます。起動ファイルでは、入力パラメータと出力パラメータに加えて、ノードの名前やその他のパラメータを指定する必要があります。たとえば、以下は ROS 起動ファイルを使用して「pointcloud_to_pcd」ノードを起動する例です。

```xml
<launch>
  <node name="pointcloud_to_pcd" pkg="pcl_ros" type="pointcloud_to_pcd">
    <remap from="input" to="/camera/ Depth/points"/>
    <param name="ファイル名" " value="/home/user/pointcloud.pcd"/>
  </node>
</launch>
```

この例では、「pcl_ros」パッケージの「pointcloud_to_pcd」タイプを使用して、「pointcloud_to_pcd」というノードが最初に定義されます。次に、`remap` タグを使用して、`input` を `/camera/ Depth/points` に再マップし、入力点群データのトピック名を示します。最後に、「param」タグを使用して「filename」パラメータを渡します。

`/home/user/pointcloud.pcd` に設定し、出力 PCD ファイルのパスと名前を示します。

起動ファイルを開始すると、`p​​ointcloud_to_pcd` ノードが自動的に開始され、`/camera/ Depth/points` トピックから点群データを受信し、それを PCD ファイル形式に変換して、`/home/user に保存します。 /pointcloud.pcd` ファイル。

ROS 起動ファイルを使用してノードを起動する場合、起動ファイルで指定されたトピック名が実際に公開されたトピック名と一致していることを確認する必要があることに注意してください。トピック名が一致しない場合、ノードは正しい入力データを受信できず、変換結果は不正確になります。

さらに、起動ファイルが ROS 環境変数 `$ROS_PACKAGE_PATH` に含まれるパスに保存されていることを確認する必要があります。保存されていない場合、ROS は起動ファイルを見つけることができません。

つまり、ROS 起動ファイルの `rosrun pcl_ros pointcloud_to_pcd` または `pointcloud_to_pcd` ノードを使用すると、ROS の点群データを PCD ファイル形式に簡単に変換し、保存して後処理することができます。

おすすめ

転載: blog.csdn.net/weixin_56337147/article/details/130634169