No description
- C++ 82.8%
- C 13%
- CMake 4.2%
| 3rdparty | ||
| build.win | ||
| include | ||
| samples | ||
| sdk_core | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CMakeLists.txt | ||
| LICENSE.txt | ||
| README.md | ||
Livox-SDK2 for MATLAB (Livox Mid-360)
Windows環境のMATLABから共有メモリ(Shared Memory)を介して、Livox Mid-360/Mid-360s の3D点群(Point Cloud)データおよびIMU(慣性計測装置)データをリアルタイムに取得・可視化するための連携ツールキットである。
概要 (Overview)
Livox SDK2のC++アプリケーションでセンサデータを受信して共有メモリへ書き込み、MATLAB上のMEX関数(sharedmemv5)で高速にデータを読み出す。プロセスを分離することで、処理速度とデータの安定性を両立を実現している。
動作確認環境 (Test Environment)
- OS: Windows 11
- MATLAB: MATLAB 2026a 以降
- Compiler: Visual Studio Community 2026 (「C++によるデスクトップ開発環境」にチェック)
- Hardware: Livox Mid-360/Mid-360s LiDAR
- Software: Livox SDK2 (v1.3.1), Livox Viewer 2(2.5.9以降)
ネットワーク設定 (Network Configuration)
LiDARとPCをLANケーブルで直接接続し、ホストPC側の固定IPアドレスを設定した例を示す。
| 機器 | IPアドレス | サブネットマスク |
|---|---|---|
| ホストPC | 192.168.1.1 |
255.255.255.0 |
| Livox Mid-360(s) | 192.168.1.1XX (初期値) |
255.255.255.0 |
※ Livox Viewer 2 を起動し正常にデータ受信が行えるか事前に接続確認。
ビルドとセットアップ (Build & Setup)
1. C++ 受信プログラムのビルド
- [Livox-SDK2 v1.3.1]のソースコードを取得。
Livox-SDK2-1.3.1/samples/CMakeLists.txtに本リポジトリのlivox_lidar_quick_startv5ディレクトリを追加。- Developer Command Prompt for VS 2026 を起動し、ビルドを実行。
cd Livox-SDK2-1.3.1
mkdir build && cd build
cmake .. -A x64 -DCMAKE_POLICY_VERSION_MINIMUM=3.5
msbuild livox_sdk2.slnx /p:Configuration=Release /p:Platform=x64 /p:RuntimeLibrary=MultiThreadedDLL
- 生成された
livox_lidar_quick_startv5.exeと同じディレクトリ(Release/)にconfig.jsonを配置し、host_net_infoのIPアドレスを192.168.1.1に更新。
Step 1: 受信プロセスの起動
コマンドプロンプトより、ビルドしたC++プログラムを実行して共有メモリへのデータ配信を開始。
livox_lidar_quick_startv5.exe
2. MATLAB MEX関数のコンパイル
MATLABのコマンドウィンドウで以下を実行。
>> mex -setup C++
>> mex sharedmemv5.cpp
使い方 (Usage)
Step 2: MATLABでのデータ取得
MATLAB上で oneshot.m を呼び出すことで、指定フレーム数分の点群およびIMUデータを同期取得できる。
% 150パケット分のデータを取得
num = 150;
[lidar, imu] = oneshot(num);
% 点群データのプロット (x, y, z) [m]
plot3(lidar(1,:), lidar(2,:), lidar(3,:), '.');
axis equal; grid on;
xlabel('X [m]'); ylabel('Y [m]'); zlabel('Z [m]');
データ仕様 (Data Specifications)
出力フォーマット (oneshot.m)
データは自動的に ENU 座標系 (East-North-Up) およびSI単位系に変換される。
- 点群データ (
lidar):5 × N行列1:3行: X, Y, Z 座標[m]4行目: 反射強度 (Reflectivity:0 \sim 255)5行目: 信頼性・ノイズ識別 Tag 情報
- IMUデータ (
imu):7 × M行列1:3行: 角速度 GyroX, Y, Z[rad/s]4:6行: 加速度 AccelX, Y, Z[m/s^2]7行目: タイムスタンプ
ノイズ除去フィルタリング (Tag Filtering)
Tag情報のビット判定により、雨・霧・ノイズ等の低信頼性点群を除去可能。
% 雨・ノイズ等を除去する例 (untitled8pcl.m より)
othrLow = bitand(lidar(5,:), 2^5) == 2^5;
rainLow = bitand(lidar(5,:), 2^3) == 2^3;
glueLow = bitand(lidar(5,:), 2^1) == 2^1;
validIdx = ~(othrLow | rainLow | glueLow);
cleanLidar = lidar(:, validIdx);
応用サンプル (Examples)
untitled8.m: 点群・IMUデータ・タイムスタンプ同期状態のリアルタイムモニタリングuntitled8pcl.m:pcshow関数を用いた点群反射強度のリアルタイム可視化と動画保存untitled9a.m: カルマンフィルタ(imufilter)およびposeplotによる姿勢計測
- Developer: 法政大学 理工学部 創生科学科 小林一行研究室
- Reference: Gerox.com