Top Banner
HTML5j ロボット部 勉強会 第4回 ROS.js の紹介
18

ROS.js の紹介

Apr 11, 2017

Download

Technology

Honma Masashi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ROS.js の紹介

HTML5j ロボット部 勉強会 第4回

ROS.js の紹介

Page 2: ROS.js の紹介

自己紹介

名前: @masap 職業: 組み込みプログラマ(主に Wi-Fi)

Page 3: ROS.js の紹介

3/18

WebSocket 経由でルンバを動かす

Page 4: ROS.js の紹介

4/18

ソフトウェア構成図

PC ルンバPC

WebSocket USB SerialROS

Rosbridge(WebSocket Server)

roslib.js

Webアプリ

Page 5: ROS.js の紹介

ROSとは

ロボット制御のためのライブラリ、ツール Robot Operating Systemの略だがOSではない ロボットを制御するための統一的なAPIを提供する 制御プログラムは、ユーザーが C++ で記述する

Page 6: ROS.js の紹介

Rosbridge とは

ROS を JavaScript から使用できるようにするパッケージ

WebSocket サーバー機能を持つ ユーザーは JavaScript で WebSocket サーバに接続

し、ロボットにコマンドを送る ROS を使うには C++ を書く必要があったが JavaScript

で書けるので Web 開発者にやさしい

Page 7: ROS.js の紹介

Rosbridge の使い方

ライブラリのインストール eventemitter2.jsとroslib.jsをダウンロードする

WebScoket サーバへ接続

var ros = new ROSLIB.Ros();

ros.connect('ws://localhost:9090');

Page 8: ROS.js の紹介

ルンバに指示を送る (1/2)

ルンバに移動コマンドを送る cmd_vel というノードに前進コマンドを送る

var cmdVel = new ROSLIB.Topic({

ros : ros,

name : '/cmd_vel',

messageType : 'geometry_msgs/Twist'

});

var forward = new ROSLIB.Message({

linear : { x : 0.1, y : 0.0, z : 0.0 },

angular : { x : 0.0, y : 0.0, z : 0.0 }

});

cmdVel.publish(forward); ROS

アプリ

cmd_vel ノード(移動指示を受ける)

publish(前進、回転等の

指示を送る)

Page 9: ROS.js の紹介

ルンバに指示を送る (2/2)

指示の詳細 進行方向と回転方向を指定

linear: 進行方向と速度 (meter/sec) angular: 回転方向と速度 (radian/sec)

平面で考えると簡単 linear の x 座標が + なら前進、 - なら後退 angular の z 座標が + なら反時計回り、 - なら時計回り

Page 10: ROS.js の紹介

ルンバの情報を受け取る

ルンバの情報を受け取る odom というノードを subscribe する

var listener = new ROSLIB.Topic({

ros : ros,

name : '/odom',

messageType : 'nav_msgs/Odometry'

});

listener.subscribe(function(message) {

console.log('Received message: ' +

message.header.seq);

listener.unsubscribe();

}); ROS

アプリ

odom ノード(位置情報を発信する)

subscribe(情報を取得する)

Page 11: ROS.js の紹介

ROS要るの?

ここまでは... ROSが無くてもnode.jsを使ってWebSocketサーバを立

てればできる

自律移動 人間が操縦するなら、 Roomba ぐらいなら ROS が無く

ても可能 自律移動をするには ROS が必要

Page 12: ROS.js の紹介

SLAM

Simultaneous Localization and Mapping 自動的に地図を作成する & 自分の現在位置を推定す

る 指示した場所にロボットを移動できる ROS を使えば SLAM ができる

SLAM に必要なもの 目隠しをされた状態で「ここはどこでしょう?」って言われ

たら? → とりあえず手探りで周囲の状況を探ろうとする 手探りをするためのデバイス

Page 13: ROS.js の紹介

周囲の状況を手探りするデバイス

レーザースキャナ レーザーを用いて周囲の障害物を検出

距離:0.02~5.6m角度:240°

Page 14: ROS.js の紹介

マッピング

自動マッピング ROSはレーザースキャナのデータを集計して自動マッピ

ングする機能がある

マップ上の場所を指定してロボットを移動することができる(オートパイロット)

Page 15: ROS.js の紹介

ROSjs で使う

canvas で使う 自動マッピング及びオートパイロットは rviz というツール

で行う ROSjs を使えば canvas でできる

ROSブラウザ

周囲の障害物データ

作成した地図データ

ルンバ目的地の指定 目的地への移動

Page 16: ROS.js の紹介

デモ

目的地を指定して自動的に移動 dots さんの地図

ステージ

非常口

Page 17: ROS.js の紹介

課題

機材がお高い レーザースキャナは 9 万円...

測定可能距離が短い 4.2m まで

速く動けない スピードを上げるとマップが崩れる

Page 18: ROS.js の紹介

18/18

以上