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
で数値を可視化するという例を実装する.以下にソースコードとそのときの出力を示す.
ソースコード
#! /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 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行
Author And Source
この問題について(ROSの勉強 第11弾:センシング-LaserScan), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuya-Shimizu/items/413b57b0305597be35be著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .