WindowsでYDLIDARを使う
はじめに
こんにちは、大学4年のAkkunlabです!
主にプログラミングや電子工作などをしています。
今回は、WindowsでYDLIDARで扱う際の手順について、記事にしていきたいと思います。
間違いや不明点があれば、ご指摘いただけると幸いです!
用語
言葉 | 意味 |
---|---|
SDK | Software Development Kitの略で、開発に必要なツール、ライブラリ、ドキュメントなどをまとめたもの |
vcpkg | Windows用のC++パッケージマネージャー |
CMake | CMakeは、コンパイラに依存しないオープンソースのビルドシステム |
SDK
Windows用のInstall手順です。
プログラム例はYDLIDAR X4用に書かれています。
1. Install vcpkg
-
以下のコマンドでInstall
git clone https://github.com/microsoft/vcpkg.git cd vcpkg .\bootstrap-vcpkg.bat
-
PowerShellを管理者で実行してPATHを通す
";C:\path\to\vcpkg"
は適宜変更[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\path\to\vcpkg", [EnvironmentVariableTarget]::Machine)
-
Pathが通っているか確認
vcpkg version
2. Install CMake
-
https://cmake.org/download/ からCMakeをDownload
-
Pathが通っているか確認
cmake --version
3. Build YDLidar-SDK
-
以下のコマンドでBuild
[vcpkgroot]
は適宜変更git clone https://github.com/YDLIDAR/YDLidar-SDK.git cd YDLidar-SDK mkdir build cd build cmake .. "-DCMAKE_TOOLCHAIN_FILE=[vcpkgroot]\scripts\buildsystems\vcpkg.cmake" cmake --build . --config Release
4. Run tri_test.exe
-
build/Release/tri_test.exe
を実行するX4の場合(その他の場合はこちら) :
Please select the lidar baudrate: 1 Whether the Lidar is one-way communication[yes/no]:no Please enter the lidar scan frequency[5-12]:10
5. Run Python
-
以下のコマンドでInstall
cd YDLidar-SDK pip install .
-
python/examplesに移動
cd python/examples
-
Pythonファイルを以下を参考に修正
これでも動かない場合は自分の力やAIを用いて修正
-
tof_test.py (X4の場合)
LidarPropSerialBaudrate
は適宜変更LidarPropLidarType
は適宜変更LidarPropDeviceType
は適宜変更LidarPropScanFrequency
は適宜変更LidarPropSampleRate
は適宜変更LidarPropSingleChannel
は適宜変更import ydlidar import time if __name__ == "__main__": ydlidar.os_init(); ports = ydlidar.lidarPortList(); port = "/dev/ydlidar"; for key, value in ports.items(): port = value; laser = ydlidar.CYdLidar(); laser.setlidaropt(ydlidar.LidarPropSerialPort, port); laser.setlidaropt(ydlidar.LidarPropSerialBaudrate, 128000); laser.setlidaropt(ydlidar.LidarPropLidarType, ydlidar.TYPE_TOF); laser.setlidaropt(ydlidar.LidarPropDeviceType, ydlidar.YDLIDAR_TYPE_SERIAL); laser.setlidaropt(ydlidar.LidarPropScanFrequency, 10.0); laser.setlidaropt(ydlidar.LidarPropSampleRate, 5); laser.setlidaropt(ydlidar.LidarPropSingleChannel, False); ret = laser.initialize(); if ret: ret = laser.turnOn(); scan = ydlidar.LaserScan() while ret and ydlidar.os_isOk() : r = laser.doProcessSimple(scan); if r: if scan.config.scan_time > 0: print("Scan received[", scan.stamp, "]:", scan.points.size(), "ranges is [", 1.0 / scan.config.scan_time, "]Hz") else: print("Scan time is zero, skipping frequency calculation.") else: print("Failed to get Lidar Data.") time.sleep(0.05); laser.turnOff(); laser.disconnecting();
-
plot_tof_test.py (X4の場合)
LidarPropSerialBaudrate
は適宜変更LidarPropLidarType
は適宜変更LidarPropDeviceType
は適宜変更LidarPropScanFrequency
は適宜変更LidarPropSampleRate
は適宜変更LidarPropSingleChannel
は適宜変更LidarPropMaxAngle
は適宜変更LidarPropMinAngle
は適宜変更LidarPropMaxRange
は適宜変更LidarPropMinRange
は適宜変更import ydlidar import matplotlib.pyplot as plt import matplotlib.animation as animation RMAX = 32.0 fig = plt.figure() fig.canvas.manager.set_window_title('YDLidar LIDAR Monitor') lidar_polar = plt.subplot(polar=True) lidar_polar.autoscale_view(True, True, True) lidar_polar.set_rmax(RMAX) lidar_polar.grid(True) ports = ydlidar.lidarPortList() port = "/dev/ydlidar" for key, value in ports.items(): port = value laser = ydlidar.CYdLidar() laser.setlidaropt(ydlidar.LidarPropSerialPort, port) laser.setlidaropt(ydlidar.LidarPropSerialBaudrate, 128000) laser.setlidaropt(ydlidar.LidarPropLidarType, ydlidar.TYPE_TOF) laser.setlidaropt(ydlidar.LidarPropDeviceType, ydlidar.YDLIDAR_TYPE_SERIAL) laser.setlidaropt(ydlidar.LidarPropScanFrequency, 10.0) laser.setlidaropt(ydlidar.LidarPropSampleRate, 5) laser.setlidaropt(ydlidar.LidarPropSingleChannel, False) laser.setlidaropt(ydlidar.LidarPropMaxAngle, 180.0) laser.setlidaropt(ydlidar.LidarPropMinAngle, -180.0) laser.setlidaropt(ydlidar.LidarPropMaxRange, 10.0) laser.setlidaropt(ydlidar.LidarPropMinRange, 0.12) scan = ydlidar.LaserScan() def animate(num): r = laser.doProcessSimple(scan) if r: angle = [] ran = [] intensity = [] for point in scan.points: angle.append(point.angle) ran.append(point.range) intensity.append(point.intensity) lidar_polar.clear() lidar_polar.scatter(angle, ran, c=intensity, cmap='hsv', alpha=0.95) ret = laser.initialize() if ret: ret = laser.turnOn() if ret: ani = animation.FuncAnimation(fig, animate, interval=50) plt.show() laser.turnOff() laser.disconnecting() plt.close()
-
-
以下のコマンドで実行
python tof_test.py
pip install matplotlib # Installしていない場合は python plot_tof_test.py
Reference
Install and use packages with CMake
GitHub - YDLIDAR/YDLidar-SDK: Driver for receiving YD LiDAR data and more...
Discussion