LoginSignup
6
9

More than 1 year has passed since last update.

ROS2の勉強 第9弾:LiDAR(YDLIDAR)

Posted at

#プログラミング ROS2< LiDAR(YDLIDAR) >

はじめに

ROS2(バージョンアップしたROS)を難なく扱えるようになることが目的である.その第8弾として,「LiDAR(YDLIDAR)」を扱う.

環境

コンピュータ
デバイス raspberry pi 4 Model B
メモリ 3.7 GiB
Graphics llvmpipe (LLVM 13.0.1, 128 bits)
OS Ubuntu
Ubuntu
リリース 22.04.1 LTS 64ビット
カーネル Linux 5.15.0-1015-raspi arm64
ROS2
Distribution Humble

Raspberry Piも他のPCと一括して管理できるようにTeamViewerでリモートアクセスを可能にしたが,
その時の話はまた今度.

LiDAR
メーカー YDLIDAR
シリーズ X2

ROSでYDLIDARを扱う

過去の記事では,ROS1(Noetic)でYDLIDARを使えるように環境構築した.
詳しくは以下を参照されたい.

本記事では,ROS1(Noetic)-> ROS2(Humble)の環境変更に伴って,同様にYDLIDARを使うためのまとめである.

ROS2でのYDLIDAR

ROS1のとき同様,YDLIDARがgithubでそれ用のパッケージを用意してくれていたみたいである

これで,また簡単に環境が構築できると思ったが,現実にはそうはいかなかった.
ROS2 Humbleにまだ対応していないためか,ビルドが通らない.以下では順を追ってどこでうまくいかず,どのように解決したのかについて記述する.

環境構築

まず,公式GitHubからレポジトリをROS2のワークスペースに持ってくる.

git cloneでレポジトリを持ってくる
git clone https://github.com/YDLIDAR/ydlidar_ros2_driver.git

早速ビルド

ビルド
cd ydlidar_ros2_ws
colcon build --symlink-install

が,ここでエラーが発生!
image.png

これは,レポジトリのREADMEでも書いてあったもので,想定済みのエラーである.単にydlidar_sdkがないとのことなので,これを別でインストールしてくる必要があるとの催促がある.

YDLidar-SDKの構築

以下のレポジトリに従って,構築していく.

Install CMake
sudo apt install cmake pkg-config
Install Extra
sudo apt-get install swig
sudo apt-get install python3-pip

早速ビルドする.

ビルド
git clone https://github.com/YDLIDAR/YDLidar-SDK.git
mkdir YDLidar-SDK/build
cd YDLidar-SDK/build
cmake ..
make
sudo make install
PythonAPI用にインストール
cd YDLidar-SDK
pip install .

これにより,~/YDLidar-SDK/build内にテストプログラムが生成されているので,それで接続チェックをする.YDLIDAR X2をRaspberry PiのUSBポートに接続.以下のコマンドにて権限を付与.

権限の付与
sudo chmod 777 /dev/ttyUSB0

人によって,ttyUSB0の数字は変わるかもしれない.私の環境では,Raspberry PiのUSBポートにYDLIDAR X2のみを接続しているため分かりやすい.

テストを実行
テスト実行
cd ~/YDLidar-SDK/build
./tri_test
テスト結果

今回使用しているLiDARはBaudrateが115200なので,0番を選択して,通信は一方通信yesと選択することで,読みにいってくれている.

image.png
接続完了後,スキャンデータを受け取っていることがログから確認できる.

ydlidar_ros2_driverの構築

失敗(修正前)

では,準備も整い早速ビルドしてみる

ビルド
colcon build --symlink-install

だが,別の内容でビルドエラー!ここから5時間以上の奮闘...
image.png
上記のエラー内容を見ると,どうもプログラムがおかしそうだということで修正を試みた.
修正箇所はエラー内容から把握するに,同じようなところで21箇所あるようだ.

問題箇所
node->declare_parameter("port");

ただ,何が問題であるかは分からなかったため,とりあえずdeclare_parameter関数を調べた.

同じようなエラーで困っているというIssueを見つけた.
どうもROSのディストリビューションによって作り方が異なるのか,バージョンがあっていないからバージョンをちゃんと合わせて使ってみてという回答を見た.そのため,そのGitHubにおいてHumble仕様ではどのようにdeclare_parameter関数が使われているのか調べると,以下のようにあった.

Humbleでの関数
node->declare_parameter<std::string>("port");

問題箇所との違いは,関数名と引数の間に型を置いているのかどうかだけである.
これが原因であった.すべての箇所をそれぞれふさわしいデータ型に合わせて編集した.

追記
文字型 -> <std::string>
整数型 -> <std::int16_t>
小数型 -> <std::float_t>
論理型 -> <bool>
成功(修正後)
再度ビルド
colcon build --symlink-install

image.png

見事ビルドに成功!一度目のビルドで少し警告は出てくるが,2回目以降出てこない.内容は,単に使っていない変数がありますよとのことなので,特に気にすることもないと思われる.

検証

以下のようにYDLidarに合わせた設定をyamlファイルに書き込んでおく.

ydlidar.yaml
ydlidar_ros2_driver_node:
  ros__parameters:
    port: /dev/ttyUSB0
    frame_id: laser_frame
    ignore_array: ""
    baudrate: 115200
    lidar_type: 1
    device_type: 0
    sample_rate: 3
    abnormal_check_count: 4
    resolution_fixed: true
    reversion: false
    inverted: true
    auto_reconnect: true
    isSingleChannel: true
    intensity: false
    support_motor_dtr: true
    angle_max: 180.0
    angle_min: -180.0
    range_max: 12.0
    range_min: 0.1
    frequency: 5.0
    invalid_range_is_inf: false

この設定については,次の記事を参考にしている.

launchファイルも上記の記事に従って,編集しているため参照されたい.

実行

実行コマンド
ros2 launch ydlidar_ros2_driver ydlidar_launch_view.py

うまくyamlファイルが反映されていない時は,再度colcon buildしてから実行を試みると良い.

上記のコマンドは,Rviz上でYDLIDAR X2で取得したレーザトピックを表示してくれる設定で,YDLIDARの起動とRvizの起動をしてくれる.その時の様子を動画像で,下に示す.

感想

今回は,思った以上に大変な作業であった.久しぶりにデバッグの地獄を垣間見れた感じであった.ただ,5時間でうまくいったため,それは良かった.これで,最新のROS2(Humble)でも手持ちのLiDARを動かせるようになった.ここからは,Twitterで教えてもらったLiDARだけでのSLAMというものをしてみたい.非常に楽しみである.

ここを参考にするとよいみたい.ちょうど,YDLidarだけど,ROS1なので,これもROS2仕様にできたらと思う.

参考文献

6
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9