2輪駆動足回りの開発記録(4月13日〜5月13日の1ヶ月間) - えいあーるれいの技術日記の4月29日の進捗の詳説です。
どの位置のどれくらいの距離に物体があるのかがなんとなーく分かるようなプログラムを作りました。主に接近検知用です。
— Ar-Ray (@Ray255Ar) 2021年4月29日
50cmより遠い→黒
50cm→緑
30cm→黄
15cm→赤
Int32MultiArray型で通信しています。 pic.twitter.com/YDrijCzQHf
見て分かる通り、接近物体が大体どの位置にあるのかを把握するだけのプログラムです。Lidarを用いた演習にも使えると思っています。
リポジトリはこちら
ここではリポジトリの内容について簡単に解説します。
プログラムの構成
このシステムは主に次の3つのノードで構成されています。
- UST-20LX (10LX) を起動するノード
- 物体との位置と距離を定義ファイル(warning_level.h)に基づいて判断して危険度と位置を発信するノード
- 受信した危険度と位置をもとにGUI表示を行うノード
危険度と位置はInt32MultiArrayで送受信を行います。
dist_lidar.cpp(LaserScan->Int32MultiArray)の概要
UST-20LXから受信したLaserScanを変換する作業ですが、細かく解説するよりも次の図を見たほうが分かりやすいと思います。
前方に3方向の位置判定があり、距離によって3種類の判定(無反応合わせて合計4種類)があります。1つの領域につきオブジェクトの個数に関わらず、最短の値が参照されて危険度となります。
この情報をもとに前進時の衝突可能性判定に使おうと思います。Int32MultiArrayなので、3方向だと物足りない場合は5段階にも7段階にでもできます。
依存関係
このプログラムを動かすときに必要な環境を記載します。
- ROS2 Foxy
- URG-Node (HOKUYO UST-10LX / UST-20LX)
- OpenCV4 (For GUI)
インストール
$ sudo apt install ros-foxy-urg-node $ mkdir -p ~/ros2_ws/src $ cd ~/ros2_ws/src $ git clone https://github.com/Ar-Ray-code/dist_lidar.git $ source /opt/ros/foxy/setup.bash $ cd ~/ros2_ws $ colcon build --symlink-install
実行
$ source /opt/ros/foxy/setup.bash $ source ~/ros2_ws/install/local_setup.bash $ ros launch dist_lidar dist_lidar_example.launch.py