ROS의 공부 제11탄:센싱-LaserScan

#프로그래밍 ROS< 감지-LaserScan >



소개



하나의 참고서에 따라 ROS(Robot Operating System)를 어려움 없이 다루는 것이 목적이다. 그 제 11탄으로서 센싱-LaserScan을 다룬다.

환경



가상 환경





소프트
VMware Workstation 15

실장 RAM
2GB

OS
우분투 64비트

ISO 파일
ubuntu-mate-20.04.1-desktop-amd64.iso



컴퓨터





장치
MSI

프로세서
Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz

실장 RAM
8.00GB(7.89GB 사용 가능)

OS
Windows (Windows 10 Home, 버전: 1909)



ROS





Distribution
noetic

프로그래밍 언어
파이썬 3.8.5

시뮬레이션
gazebo


감지



센서 데이터를 읽습니다. 이 예에서는 gazebo의 turtlebot에 장착 된 깊이 카메라를 사용하여 레이저 스캔과 같은 의사 센서 데이터를 처리합니다. (이것은 비용 절감을 위해 진짜 레이저 스캐너는 탑재하지 않은 것 같다)

이전 (htps : // 이 m / 유야 시미즈 / ms / f6 a fb00fd37019540 또는 5)과 마찬가지로 turtlebot을 gazebo에서 시작한 다음 rostopic list를 사용하여 turtlebot의 사양을 확인합니다. 그 때의 모습은 다음과 같습니다.


빨간색으로 표시된 것처럼 /scan의 주제가 있습니다. 또한 rostopic echo /scan를 실행하여 처리하려는 데이터가 어떻게 전달되는지 확인할 수 있습니다. 그 때의 모습은 다음과 같습니다.


몇 가지 매개 변수가 있음을 알 수 있습니다. 여기에 배포 된 것을 구독하면 센서 데이터를 처리 할 수 ​​있습니다.

센서 데이터 처리



여기서 간단히 센서 데이터의 취급을 기록해 둔다.
레이저 스캔과 같은 데이터로 거리뿐만 아니라 방향도 구할 수 있습니다. 그 공식을 보여줍니다.

방향
bearing = msg.angle_min + i * msg.angle_max / len(msg.ranges)
로봇 바로 앞의 가장 가까운 장애물까지의 거리 : 범위 배열의 중앙 요소
range_ahead = msg.ranges[len(msg.ranges)//2]
스캐너에서 감지 한 가장 가까운 장애물까지의 거리 : 범위 배열의 최소값
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
                   河田 卓志
         마츠다 아키히로, 후쿠지 마사키, 유타니 테츠오
               오일러리 재팬 발행

좋은 웹페이지 즐겨찾기