A1M8 LiDARドライバのビルド方法について解説

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回はSLAMTECから発売されているA1M8 LiDARのドライバのビルド方法について解説します。

マイコンボードRaspberry Pi 4上のUbuntu Linuxで環境を構築しました。

私の環境でビルド時に発生したエラーについても対策を記載していますので、これからビルドに挑戦する方は是非参考にしてみてください。

目次

環境

ハードウェア:Raspberry Pi 4
OS:Ubuntu22.04LTS

マイコン

ソフトウェアを実行するマイコンはRaspberry Pi 4の4GB版を使用します。

LiDAR

LiDARSLAMTEC社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を使用する場合

今回は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を使ったアプリケーションに挑戦したいと思っている方にも非常におすすめです。

それでは、また次の記事でお会いしましょう。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次