今回はSLAMTECから発売されているA1M8 LiDARのドライバのビルド方法について解説します。
マイコンボードRaspberry Pi 4上のUbuntu Linuxで環境を構築しました。
私の環境でビルド時に発生したエラーについても対策を記載していますので、これからビルドに挑戦する方は是非参考にしてみてください。
環境
ハードウェア:Raspberry Pi 4
OS:Ubuntu22.04LTS
マイコン
ソフトウェアを実行するマイコンはRaspberry Pi 4の4GB版を使用します。
LiDAR
LiDARはSLAMTEC社のA1M8を使用します。
15000円程度で購入でき、ネット上にも事例の情報が豊富にあるためおすすめです。
A1M8を使用する以前はマイナーなLiDARを購入してしまったため、メーカーの公式情報やユーザーの事例もほとんどなかったり情報が古すぎて同じ手順で実行してもエラーで動かなかったりとまともに使えなかったのでメジャーなSLAMTEC社の製品に変更しました。
SLAMTEC公式リポジトリ
A1M8開発、販売元のSLAMTEC公式リポジトリは以下となります。
基本的にはこちらに記載されている手順を実行すればビルドができますが、環境によってはエラーが発生する場合があるため、その対処法についても併せて解説します。
ROS2のインストール
A1M8のドライバをビルドする前に、まずはROS2をビルドします。
今回紹介するディストリビューションはROS2 Humbleとなります。ROS2のセットアップについては以下の記事で詳細を解説していますので、事前に済ませておいてくっださい。
A1M8 LiDARドライバのビルド手順
ビルドを実行する手順
LiDARドライバをビルドするためのディレクトリを作成します。
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
SLAMTECの公式リポジトリをクローンします。
git clone https://github.com/Slamtec/sllidar_ros2.git
<rosdistro>の部分は使用するROSのディストリビュージョンに合わせてパスを設定してください。
cd ~/ros2_ws/
source /opt/ros/<rosdistro>/setup.bash
colcon build --symlink-install
今回はROS2 Humbleを使用しますので以下のディレクトリ
source /opt/ros/humble/setup.bash
colconがインストールされていない場合は以下のようなエラーが発生します。
colcon: command not found
以下のコマンドをcolconをインストールしてください、
sudo apt install python3-colcon-common-extensions
ament_packageのエラー対策
colcon build
コマンド実行時にament_packageに関するエラーが発生する場合の対処法を解説します。
Starting >>> ament_package
Starting >>> ament_lint
Starting >>> gtest_vendor
Starting >>> gtest
[10.619s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'ament_package' doesn't explicitly install a marker in the package index (colcon-ros currently does it implicitly but that fallback will be removed in the future)
[10.620s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'ament_package' doesn't explicitly install the 'package.xml' file (colcon-ros currently does it implicitly but that fallback will be removed in the future)
[10.628s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'ament_lint' doesn't explicitly install a marker in the package index (colcon-ros currently does it implicitly but that fallback will be removed in the future)
[10.629s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'ament_lint' doesn't explicitly install the 'package.xml' file (colcon-ros currently does it implicitly but that fallback will be removed in the future)
--- stderr: ament_package
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/colcon_core/executor/__init__.py", line 91, in __call__
rc = await self.task(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_core/task/__init__.py", line 93, in __call__
return await task_method(*args, **kwargs)
File "/usr/lib/python3/dist-packages/colcon_ros/task/ament_python/build.py", line 102, in build
return await extension.build(additional_hooks=additional_hooks)
File "/usr/lib/python3/dist-packages/colcon_core/task/python/build.py", line 90, in build
available_commands = await self._get_available_commands(
File "/usr/lib/python3/dist-packages/colcon_core/task/python/build.py", line 188, in _get_available_commands
output = await check_output(
File "/usr/lib/python3/dist-packages/colcon_core/subprocess.py", line 129, in check_output
assert not rc, f'Expected {args} to pass: {stderr_data}'
AssertionError: Expected ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', '--help-commands'] to pass: /usr/bin/python3: can't open file '/opt/ros/humble/share/ament_package/setup.py': [Errno 2] No such file or directory
---
Failed <<< ament_package [0.21s, exited with code 1]
Aborted <<< ament_lint [0.21s]
Aborted <<< gtest_vendor [0.24s]
Aborted <<< gtest [2.51s]
Summary: 0 packages finished [12.8s]
1 package failed: ament_package
3 packages aborted: ament_lint gtest gtest_vendor
2 packages had stderr output: ament_package gtest_vendor
274 packages not processed
Expected ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', '--help-commands'] to pass: /usr/bin/python3: can't open file '/opt/ros/humble/share/ament_package/setup.py': [Errno 2] No such file or directory
まず、現在のエラーの原因は、ament_packageが正しくインストールされていない、もしくはセットアップファイルが見つからないためです。
必要な依存関係をインストールする:
依存関係が欠けている場合があるので、再度確認してインストールします。
sudo apt install python3-colcon-common-extensions python3-pip python3-vcstool python3-rosdep
Python環境を確認する: Pythonの環境が正しく設定されているか確認します。特に、/opt/ros/humble
ディレクトリ内にPythonファイルが存在しているか確認します。
ls /opt/ros/humble/share/ament_package/
このディレクトリにsetup.py
が見つからない場合、ament_package
のインストールに問題がある可能性があります。
ament_packageを再インストールする: 再度、ament_package
をインストールしてみます。
sudo apt install ros-humble-ament-package
ワークスペースの再ビルド: 依存関係が正しくインストールされていることを確認し、ワークスペースをクリーンビルドします。
cd ~/ros2_ws/
rm -rf build/ install/ log/
source /opt/ros/humble/setup.bash
colcon build --symlink-install
ビルド実行結果
以下のようにビルドの完了メッセージが表示されたら成功です。
...
| ^
/home/pi/ros2_ws/src/sllidar_ros2/sdk/src/sl_udp_channel.cpp: In member function ‘void sl::UdpChannel::setStatus(_u32)’:
/home/pi/ros2_ws/src/sllidar_ros2/sdk/src/sl_udp_channel.cpp:112:29: warning: unused parameter ‘flag’ [-Wunused-parameter]
112 | void setStatus(_u32 flag){}
| ~~~~~^~~~
/home/pi/ros2_ws/src/sllidar_ros2/sdk/src/sl_tcp_channel.cpp: In member function ‘void sl::TcpChannel::setStatus(_u32)’:
/home/pi/ros2_ws/src/sllidar_ros2/sdk/src/sl_tcp_channel.cpp:109:29: warning: unused parameter ‘flag’ [-Wunused-parameter]
109 | void setStatus(_u32 flag){}
| ~~~~~^~~~
---
Finished <<< sllidar_ros2 [1min 16s]
Summary: 2 packages finished [1min 17s]
2 packages had stderr output: ldlidar sllidar_ros2
rvizの起動
パッケージ環境のセットアップをします。
source ./install/setup.bash
環境変数を追加します。
$echo "source <your_own_ros2_ws>/install/setup.bash" >> ~/.bashrc
$source ~/.bashrc
sllidar_ros2 を実行するには、シリアル デバイスの読み取りおよび書き込み権限が必要です。次のコマンドを使用して手動で変更できます。
sudo chmod 777 /dev/ttyUSB0
sllidar ノードを実行し、rviz で表示します。A1M8の場合は以下のコマンドを実行します。
ros2 launch sllidar_ros2 view_sllidar_a1_launch.py
コマンドを実行すると以下のようにrvizが起動し、センサーの信号が可視化されました。
まとめ
今回はSLAMTECから発売されているA1M8 LiDARのドライバのビルド方法について解説しました。
rviz2の使い方についてはまた別の記事で解説します。
A1M8は情報も豊富で公式のGitHubのリポジトリも問題なく動作したので、これからLiDARを使ったアプリケーションに挑戦したいと思っている方にも非常におすすめです。
それでは、また次の記事でお会いしましょう。
コメント