ROSの勉強 第11弾:センシング-LaserScan


#プログラミング ROS< センシング-LaserScan >

はじめに

1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.その第11弾として,センシング-LaserScanを扱う.

環境

仮想環境
ソフト VMware Workstation 15
実装RAM 2 GB
OS Ubuntu 64 ビット
isoファイル ubuntu-mate-20.04.1-desktop-amd64.iso
コンピュータ
デバイス MSI
プロセッサ Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz
実装RAM 8.00 GB (7.89 GB 使用可能)
OS Windows (Windows 10 Home, バージョン:1909)
ROS
Distribution noetic
プログラミング言語 Python 3.8.5
シミュレーション gazebo

センシング

センサのデータを読み取る.ここでは,例としてgazeboでのturtlebotに搭載されている深度カメラを用いてレーザスキャンのような擬似のセンサデータを扱う.(これは,コスト削減のため本物のレーザスキャナは搭載していないようだ)

前回( https://qiita.com/Yuya-Shimizu/items/f6afb00fd37019540ca5 )同様,turtlebotをgazebo上で起動させてからrostopic listを用いて,turtlebotの仕様を確認する.そのときの様子を次に示す.

赤で印づけているように,/scanのトピックがある.さらにrostopic echo /scanを実行することで,扱いたいデータがどのように配信されているのか確認できる.そのときの様子を次に示す.

幾つかのパラメータがあることが分かる.ここで配信されているものを購読すればセンサデータを扱えるということになる.

センサデータの扱い

ここで簡単にセンサデータの扱いを記録しておく.
レーザスキャンのようなデータということで,距離だけでなく方向も求められる.その式を示す.

方向

bearing = msg.angle_min + i * msg.angle_max / len(msg.ranges)

ロボットの真正面にある一番近い障害物までの距離: ranges配列の中央要素

range_ahead = msg.ranges[len(msg.ranges)//2]

スキャナで検出した一番近い障害物までの距離: ranges配列の最小値

closest_range = min(msg.ranges)

実装

ここでは,センサデータを読み取ることが目的であるから,単純に読み取ったデータをprintで数値を可視化するという例を実装する.以下にソースコードとそのときの出力を示す.

ソースコード
range_ahead.py
#! /usr/bin/env python3

import rospy
from sensor_msgs.msg import LaserScan   #レーザスキャンを扱うメッセージ

def scan_callback(msg):
    range_ahead = msg.ranges[len(msg.ranges)//2]    #ロボットの真正面にある障害物までの距離 ranges配列の中央要素

    print(f"range ahead: {range_ahead:.1f}")    #正面にある障害物までの距離を表示


rospy.init_node('range_ahead')  #'range_ahead'というノードを生成・初期化

scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback)   #'scan'トピックをLaserScan型で購読し,scan_callback関数を呼び出す

rospy.spin()    #ループ
出力

なお,出力で示されている数値は,gazebo上で直接turtlebotを適当に動かしたときの値であり,センサは図にaheadと示す方向が正面のようだ.

感想

今回,センサの扱いを学んだ.ロボットを扱うときに非常に重要になってくるところである.次回は前回学んだ移動と今回もセンサを組み合わせたより実践的なものを学ぶということで非常に楽しみである.

参考文献

プログラミングROS Pythonによるロボットアプリケーション開発
        Morgan Quigley, Brian Gerkey, William D.Smart 著
                       河田 卓志 監訳
            松田 晃一,福地 正樹,由谷 哲夫 訳
                  オイラリー・ジャパン 発行