概要
roslibjsというJavaScriptのライブラリを使うことでWebアプリケーションからROSに繋いでトピックのやりとりをする方法を解説します。
想定される状況
ROSの動いているマシンに対して、別のデバイスからWebアプリケーション経由で接続することを想定しています。
まずは、ROSの動いているマシンのIPアドレスを確認します。
ifconfig
と実行して、現在接続されているWiFi環境のIPアドレスを取得します。(例:192.168.11.1など。wlan0と記載されている項目にあることが多い)
ROSが動いているマシンの設定
roslibjsとはWebSocketで接続を行います。ROSが動いているマシンでは、rosbridge_serverパッケージのrosbridge_websocket.launchを起動しておくことで接続を受け入れ可能な状態にします。
- コマンドでの起動
roslaunch rosbridge_server rosbridge_websocket.launch
- launchファイルでの起動
<include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch">
</include>
Webアプリケーションの設定
HTMLのページを作成します。headタグ内に下記を追加し、ライブラリを読み込みます。
<script src="http://static.robotwebtools.org/EventEmitter2/current/eventemitter2.js"></script> <script src="http://static.robotwebtools.org/roslibjs/current/roslib.js"></script>
roslibjsでROSの接続を作ります。
<script>
var ros = new ROSLIB.Ros({
url : 'ws://192.168.11.1:9090'
});
ros.on('connection', function() {
alert("Connected");
});
ros.on('error', function(error) {
alert("ERROR");
});
ros.on('close', function() {
alert("CLOSED Connection");
});
</script>
192.168.11.1の部分は先ほど調べた、ROSが動いているマシンのIPアドレスを指定します。また、Webアプリケーションを開く端末は、ROSが動いているマシンが繋がっているWiFiと同じWiFIに繋がっている必要があります。
また、接続状況ごとにイベントを設定できます。
ROSトピックのSubscribe
// ROSトピックのSubscribe
const orderSub = new ROSLIB.Topic({
ros : ros,
name : '/order',
messageType : 'std_msgs/String'
});
orderSub.subscribe(message => {
var data = message.data;
console.log(data);
});
ROSトピックのPublish
// ROSトピックのPublish
var destinationPub = new ROSLIB.Topic({
ros : ros,
name : '/destination',
messageType : 'std_msgs/String'
});
var dest = new ROSLIB.Message({
data : 'room1'
});
destinationPub.publish(dest);
</script>



