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

ROS.js の紹介

Embed Size (px)

Citation preview

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

以上