SMSL Point Cloud Processing Toolkit
自動運転やロボティクスで不可欠な点群処理機能をパッケージ化しています。フィルタリングから特徴量抽出まで、RTMaps 4環境で動作する包括的な三次元点群処理コンポーネント群を提供します。特に水平回転式LiDARのリング構造を考慮した効率的なアルゴリズムにより、汎用的な非構造点群処理に比べ、高速かつ高精度な認識・推定が可能です。
SMSL Point Cloud Processing Toolkitは、PCLなどのサードパーティー製の点群処理ライブラリを使用しておらず、外部ライブラリのバージョン依存性がありません。
SMSL Point Cloud Processing Toolkitは、鈴鹿経営科学研究所の有償IPであり、使用者の方からの機能拡張のご相談を受け付けております。
ご購入方法
SMSL Point Cloud Processing Toolkitの購入や価格のお問い合わせは、お問い合わせフォームから受け付けています。
また、Intempora社 RTMaps AI storeからもお問い合わせいただけます。
提供コンポーネントリスト
ダウンサンプリング
pc_downsample_cart
- 直交座標系の点群を効率的に削減します。
- index、voxel、voxel-centroidの3つのサンプリングモードをサポートしています。
pc_downsample_sph
- 球座標系の点群をダウンサンプリングします。
- スキャニングLiDARのデータ量削減に効果を発揮し、範囲フィルタ機能も内蔵しています。
pc_downsample_cyl
- 円筒座標系の点群をダウンサンプリングします。
- 複数の高さに設置された2D LiDARシステムなどの信号処理に使用します。
フォーマット変換
pc_coordinate_cart2sph
- 直交座標(X, Y, Z)から球座標(Azimuth, Elevation, Radius)へ変換します。
- 最小半径閾値によるゼロ点出力やNaN変換機能を備えています。
pc_coordinate_sph2cart
- 球座標から直交座標へ変換します。
- 入力半径が閾値以下のデータをゼロまたはNaNとして処理できます。
pc_coordinate_cart2cyl
- 直交座標から円筒座標(Radius, Azimuth, Elevation)へ変換します。
pc_coordinate_cyl2cart
- 円筒座標から直交座標へ変換します。
pc_formatter_oneline2array
- ベクトル形式をMATLAB等の配列形式(整理された点群)に変換します。
- 垂直チャンネル数や最大掃引点数に基づいた整形を実行します。
pc_formatter_array2oneline
- 配列形式の点群を1行のベクトル形式に変換します。
pc_axis_separator
- 点群信号からX, Y, Z, iの各次元を個別に抽出します。
rings_transpose
- 点群の並び順を「垂直優先」から「リング優先」に転置します。
- 本パッケージのリングベース処理コンポーネントへの接続に必須となります。
rings_separator
- LiDARの各リングごとの点群信号を個別に抽出します。
array_zero2nan
- 点群内のゼロ値をNaNに変換し、レンダリング負荷を軽減します。
pc_spec_inspector
- 1 フレームの点群を調べ、スペック(仰角・方位角・距離の最小と最大、点の数、リング状の LiDAR ではリング数とリングごとの仰角)を出します。
pc_pattern_generator
- 確かめ用の決まった形の点群(天井のない部屋、または道路)を一定の周期で出します。座標の変換や点群の部品の確かめを、点群を見て行えるようにします。
pc_xyzi_to_xyz_and_i
- XYZI の点群を XYZ の点群と強度に分けます。XYZ だけを座標の変換(Rotation3D など)に通し、そのあとで強度を戻せる(xyz_to_xyzi など)ようにします。
LiDAR ジオメトリ & オドメトリ
rings_features_estimation
- 法線やエッジ特徴を推定し、法線ベースの地面分離を実行します。
- 法線マップやエッジマップを画像(IplImage)として出力できます。
rings_pose_estimation_icp
- リング構造を利用した高速ICP(Iterative Closest Point)アルゴリズムにより、自己の三次元ポーズを推定します。
rings_pose_estimation_p2plane
- Point-to-Planeアルゴリズムを用いて高精度に自己位置推定します。
rings_pose_estimation_extLOAM
- 拡張LOAMアルゴリズムを用いて、法線・エッジ特徴により自己の三次元ポーズを推定します。
rings_ground_estimation_cyl
- 円筒座標系およびリング構造を利用して、幾何学的に地面を推定します。
pc_pose_estimation_icp
- 非構造点群(汎用点群)に対して、ICPアルゴリズムで自己の三次元ポーズを推定します。
pc_pose_estimation_ndt
- 非構造点群(汎用点群)に対して、NDT(Normal distributions transform)アルゴリズムで自己の三次元ポーズを推定します。
pc_egomotion_correction
- 自己車両の移動、回転(エゴモーション)に伴う点群の歪みを補正します。
ポーズ処理
pose6D_to_Matrix
- 6要素のポーズベクトルをポーズ変換行列(4x4等)に変換します。
poseMatrix_to_6D
- ポーズ変換行列を6要素のポーズベクトルに変換します。
pose6D_accumulator
- 相対ポーズを累積し、原点からの絶対ポーズを算出します。
pose2D_to_6D
- 2D の姿勢 [x, y, theta] を 6D の姿勢 [x, y, z, roll, pitch, yaw] に変換します。2D のオドメトリ(車輪のオドメトリなど)を、6D の姿勢を入力にするコンポーネントにつなぐために使います。
pose6D_to_2D
- 6D の姿勢 [x, y, z, roll, pitch, yaw] を水平面の上の 2D の姿勢 [x, y, theta] に変換します。3D の位置推定の結果を、2D の姿勢を入力にするコンポーネントにつなぐために使います。
フィルタリング
pc_range_filter
- 三種類の座標系で点群の範囲フィルタリングします。
pc_neighbor_removal_filter
- 周囲環境把握に不要な原点近傍の点を除去します。
pc_outlier_removal_filter
- 外れ点を幾何学的、または統計的に除去します。
可視化
rings_depth2image
- リング構造の距離データを深度画像に変換します。
オブジェクト認識、地面推定などに活用できます。
rings_intensity2image
- リング構造の反射強度データを画像形式で可視化します。
地面の白線検出などに活用できます。
rings_height2image
- リング構造の点群の高さ情報を画像形式で可視化します。
高さ画像に基づく地面推定などに活用できます。
LiDAR 特有の処理
velodyne_pc_outlier_removal_filter
- Velodyne製LiDARに特化した、外れ値除去フィルタとして機能します。
velodyne_pc_order_correct
- Velodyne LiDAR の点を、rings_* の部品が前提にする格子(リングは仰角の順、列の数は固定、1 列 = 1 つの方位)に並べます。
rings_pc_interpolation
- リング構造の仰角方向に沿って、線形補間を実行します。平面検出に有効です。
hesai_pc_order_correct
- Hesai LiDAR の点を、rings_* の部品が前提にする格子(チャンネルごとの方位のずれを補正、列の数は固定、1 列 = 1 つの方位)に並べます。
livox_pc_interpolation
- 隣接するスキャンライン間を線形補間して、Livox製LiDARの点群を高密度化します。
- 物体の境界をまたぐ補間はしません。
livoxsdk1_lidar_driver
- Livox SDK1対応のLivox製LiDAR(Mid-40、Tele、Horizon、Mid-70、Avia)のドライバです。
- センサーに接続・設定し、点群とIMUデータを出力します。
livox_pc_egomotion_correction
- Livox(Horizon / Avia)の点群の、1 フレームの間のセンサーの動きによるゆがみを、内蔵 IMU のジャイロとパケットごとの HW 時刻で補正します。直交座標(XYZ、XYZi)と極座標の入力に対応します。
ouster_pc_order_correct
- RTMaps の ouster_lidar の点群を、rings_* の部品が前提にする格子(destagger して 1 列 = 1 つの方位、リングは仰角の順、返りのない点は NaN)に並べます。
ソフトウェア仕様
| パッケージ名 | PointCloudProcessingToolkit.pck |
|---|---|
| バージョン | 1.42 |
| 対応OS | Windows 10/11 (64bit) / Ubuntu 24.04 LTS (64bit) |
| 対応RTMapsバージョン | RTMaps 4.9.2 以降 |
| 提供物 | パッケージ本体(.pck)、ユーザーマニュアル(PDF)、サンプルダイヤグラム(.rtd) |
デモ機能
本パッケージには、導入後すぐに動作を確認できる以下のデモが同梱されています。
- rings_pose_estimation_demo: リング構造を活用した高速ICPアルゴリズム等により、リアルタイムで自己位置推定する例。
- pc_pose_estimation_demo: 非構造点群(汎用点群)に対して、ICPやNDTを用いたポーズ推定と地面分離の例。
- rings_pc_interpolation_imaging_demo: リング構造の仰角の補完処理といくつかの可視化の例。
- Hesai_Pandar128_imaging_demo: Hesai社製LiDAR特有の補正処理と可視化の例。
- pc_format_conversion_demo: 直交・球・円筒の各座標変換や、配列形式へのフォーマット変換の例。
- Livox_horizon_interp: Livox Horizonの点群を球座標で受け取り、補間して直交座標に変換し、3D表示する例。
- Ouster_OS1_128_demo: Ouster OS1-128 の記録(pcap)を ouster_pc_order_correct で格子に並べ、距離・高さ・強度の画像、エゴモーション補正、rings_pose_estimation_icp による姿勢推定を行う例。
- Hesai_Pandar40p_imaging_demo: Hesai Pandar40P の点群を hesai_pc_order_correct で格子に並べ、距離・高さの画像にする例。
- pc_generator_demo: pc_pattern_generator が出す確かめ用の点群(部屋、道路など)を 3D 表示する例。
更新履歴
- 2026 11/2: バージョンを1.42に更新しました。pc_pattern_generator、pc_xyzi_to_xyz_and_i、ouster_pc_order_correct、hesai_pc_order_correct、velodyne_pc_order_correct(hesai_pc_azimuth_correct、velodyne_pc_elevation_sort に代わるもの)を追加しました。pc_egomotion_correction、pc_formatter_oneline2array、pc_outlier_removal_filter、pc_pose_estimation_icp、pc_pose_estimation_ndt、pc_range_filter、pose6D_accumulator、pose6D_to_Matrix、poseMatrix_to_6D、rings_height2image、rings_intensity2image、rings_pose_estimation_extLOAM、rings_pose_estimation_icp、rings_pose_estimation_p2planeを修正しました。
- 2026 10/26: バージョンを1.41に更新しました。hesai_pc_azimuth_correctを修正しました。
- 2026 10/26: バージョンを1.4に更新しました。livox_pc_egomotion_correction、pc_egomotion_correctionのcorrection_modeを追加しました。pc_coordinate_sph2cart、pc_egomotion_correction、pose6D_accumulator、rings_height2imageを修正しました。
- 2026 10/25: バージョンを1.3に更新しました。pc_spec_inspector、pose2D_to_6D、pose6D_to_2D、rings_pose_estimation_icp・rings_pose_estimation_p2plane・rings_pose_estimation_extLOAMの外部オドメトリの入力、rings_pose_estimation_p2plane・rings_pose_estimation_extLOAMの退化への対策、pc_pose_estimation_ndtの入力pc・voxel_grid_in_m・max_range_in_mを追加しました。hesai_pc_azimuth_correct、pc_coordinate_cart2cyl、pc_coordinate_cart2sph、pc_egomotion_correction、pc_formatter_array2oneline、pc_formatter_oneline2array、pc_neighbor_removal_filter、pc_outlier_removal_filter、pc_pose_estimation_icp、pc_pose_estimation_ndt、pc_range_filter、pose6D_accumulator、rings_depth2image、rings_features_estimation、rings_ground_estimation_cyl、rings_height2image、rings_intensity2image、rings_pc_interpolation、rings_pose_estimation_extLOAM、rings_pose_estimation_icp、rings_pose_estimation_p2plane、rings_separator、rings_transpose、velodyne_pc_elevation_sort、velodyne_pc_outlier_removal_filterを修正しました。
- 2026 10/18: バージョンを1.2に更新しました。livoxsdk1_lidar_driverに点ごとのTag、センサーの状態の出力、データ途絶の検出を追加しました。livoxsdk1_lidar_driverを修正しました。
- 2026 10/16: バージョンを1.1に更新しました。livox_pc_interpolation、livoxsdk1_lidar_driverを追加しました(Livox製LiDAR対応)。hesai_pc_azimuth_correct、rings_depth2image、rings_height2image、rings_intensity2image、velodyne_pc_elevation_sortを修正しました。