LoginSignup
8
10

More than 1 year has passed since last update.

ROS講座82 obstacle_detectorを使う

Last updated at Posted at 2018-11-13

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 20.04
ROS Noetic
Gazebo 11.9.0

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

lidarの/scanから障害物を検出するパッケージとしてobstacle_detectorがあります。これを使ってみます。

obstacle_detector使用の準備

依存ライブラリのインストール

obstacle_detectorのビルド、起動にはArmadilloという数学ライブラリが必要です。

armadilloのインストール
sudo apt-get install -y libarmadillo-dev libarmadillo6 

ダウンロード

githubからソースをダウンロードします。

obstacle_detectorのダウンロード
cd ~/catkin_ws/src
git clone https://github.com/tysik/obstacle_detector.git

ビルド

cd ~/catkin_ws
catkin build

テスト実行

ソースに入っているデモを起動します。
各ターミナルごとに実行前にsource ~/catkin_ws/devel/setup.bashを実行する必要があります。

roslaunch obstacle_detector demo.launch 

obstacle_demo1.gif

使い方

今回はobstacle_trackerの中からobstacle_extractorとobstacle_trackerの2つを使います。前者はscanデータから円(障害物)と直線(壁)を検出します。後者は時間的に見てましてノイズで発生する円(障害物)を除外します(tracking IDを振るとかはやってくれません)。

config

実はたくさんの設定項目がありますが、ほとんどデフォルトのままで使えます。tf関連は設定しておく必要があります。またobstacle_extractorはデフォルトではpclデータを入力するようになっているので、scan入力になるように設定を変更します。
またydlidarのような点数が少ないlaserでも反応するように設定を一部変えます。

laser_lecture/config/obstacle_detector.yaml
obstacle_extractor:
  use_scan: true
  use_pcl: false
  min_group_points: 3
  max_group_distance: 0.05

launch

laser_lecture/launch/obstacle_detector.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <arg name="model" default="$(find sim_env_lecture)/urdf/sensor_station.urdf" />
  <arg name="rvizconfig" default="$(find laser_lecture)/rviz/obstacle_detector.rviz" />  
  <param name="robot_description" command="$(find xacro)/xacro $(arg model) --inorder"/>

  <!-- gazebo world -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="sensor_station_coke_box.world"/>
  </include>

  <!-- obstacle detector -->
  <rosparam command="load" file="$(find laser_lecture)/config/obstacle_detector.yaml" />
  <node name="obstacle_extractor" pkg="obstacle_detector" type="obstacle_extractor_node">
    <remap from="scan" to="/front_laser/scan" />
  </node>
  <node name="obstacle_tracker" pkg="obstacle_detector" type="obstacle_tracker_node" />

  <node pkg="tf" type="static_transform_publisher" name="tf_1" args="0 0 0 0 0 0 map base_link 10" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />   

  <!-- rviz -->
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

実行

roslaunch laser_lecture obstacle_detector.launch 

以下のように障害物がそれぞれ検出されました。
表示では赤い丸が物体の大きさ、緑はマージンらしいです。

laser_OD.png

参考

obstacle_detector

目次ページへのリンク

ROS講座の目次へのリンク

8
10
0

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
8
10