15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

超音波距離センサとサーボでROSで使えるレンジスキャナを作ってみた

Posted at


HC-SR04の超音波の距離センサ(ultrasonic sensor)をサーボで左右に振ってROSで使える平面のレンジスキャナを作ってみます。
一般的なスキャナはレーザーレンジファインダ(LRF)ですが、定番であるhokuyoのURGなどは個人で遊ぶには高価で手が届きません。。(誰かちょうだい!)

scanner

作ってはみたものの、超音波センサの特徴として点ではなく面で応答が返ってくるため、部屋の角などを正確に計測することはできませんでした。
何かの参考になればと思い、記録として残しておきます。

コードは https://github.com/atotto/ultrasonic_scanner に置いておきました。

前提

  • ROSがセットアップ済みであること
  • 本記事ではubuntu 16.04、ROS kinetic (ros-kinetic-desktop-full)を利用
  • arduinoが使えること

材料

  • HC-SR04
  • サーボ
  • HC-04をサーボに取り付けるためのマウント
  • HC-SR04とサーボ、マウントがセットになったのがあります→ amazon
  • arduino (本記事ではUNO)

作り方

  1. HC-SR04をサーボに対して直角に取り付ける
  2. 図の通りに配線する fritzing
  3. スケッチをarduinoにアップロードする

動作確認

$ cd <your_catkin_ws>/src
$ git clone https://github.com/atotto/ultrasonic_scanner.git
$ cd ..
$ catkin_make
$ roslaunch ultrasonic_scanner ultrasonic_scanner_demo.launch

demo.rviz

注意:

  • /dev/ttyUSB0 にパーミッションがない場合は sudo chmod 666 /dev/ttyUSB0 を実施してください

解説

arduinoでサーボを-90〜90の間を2度ずつ振り、90点のデータをシリアルでホストPCへ送信します。
ホストPCでarduinoからシリアルで送られてくるデータをROSのLaserScanのデータへ変換します。
(arduinoでROSSerialを使いたかったのですが、kineticのためかうまく動かせませんでした)
LaserScanデータを/scanトピックでpublishし、rvizを使って視覚化します。

センサをサーボで左右に振るため、スキャンの方向をLaserScanのヘッダ情報を反転することで左右どちらからのスキャンデータでも活用できるようにしています。
1スキャンに4sec程度かかります。チューニング次第ではもう少し速くなるかも?

LaserScan型を利用し、/scanトピックでpublishしているので、ROS上からはURGと同じように利用できます。

なんで作ったの?

ROS勉強してみた→せっかくだし自分で移動ロボットを組んでみよう→平面スキャナないとSLAMできないやん→LRF高い…→子供いるし安全な超音波の距離センサええやん→イマココ

独り言

LRF、なんで安くならないの。

15
12
2

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
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?