LoginSignup
8
3

More than 5 years have passed since last update.

roslibjsでブラウザにROS Topicの時系列グラフを描く

Last updated at Posted at 2017-09-03

目的

 robotwebtoolsのroslibjsを使って、RosのTopicをWEBブラウザからグラフで表示する。
 スマホなどでも、ROSのTopicの時系列データを見ることができる。
 rviz/rqtが使えない環境でのデバックなどの活用が期待できる。
 
 グラフ作成には、smoothiecharts.jsを使う。
test.jpg

smoothiecharts.js: http://smoothiecharts.org/
Github: https://github.com/joewalnes/smoothie/

Install

まず、ROSの動作するPCに、
rosbridge-server、robot-pose-publisher をインストールする。

ROS Indigoの場合

$ sudo apt-get install ros-indigo-rosbridge-server
$ sudo apt-get install ros-indigo-robot-pose-publisher 

ROS Kineticの場合

$ sudo apt-get install ros-kinetic-rosbridge-server
$ sudo apt-get install ros-kinetic-robot-pose-publisher 

apache2のインストール

Apache2(webサーバ)をインストールする。

sudo apt-get install apache2

launchファイルからのノード起動

rosbridge-server・robot-pose-publisher を起動する。
これと別にTopicを発行させておく。

<launch>
 <node pkg="robot_pose_publisher" type="robot_pose_publisher" name="robot_pose_publisher">
 </node>
 <include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch" > 
   <arg name="port" value="9090"/>
 </include>
</launch>

RoslibjsからTopicをsubscribeし、smoothiecharts.jsに渡すHTMLを作成し、/var/www以下に配置する。

<html>
  <head>
   <script src="https://raw.githubusercontent.com/joewalnes/smoothie/master/smoothie.js"></script>
   <script src="http://cdn.robotwebtools.org/EaselJS/current/easeljs.min.js"></script>
   <script src="http://cdn.robotwebtools.org/EventEmitter2/current/eventemitter2.min.js"></script>
   <script src="http://cdn.robotwebtools.org/roslibjs/current/roslib.js"></script>
   <script src="http://cdn.robotwebtools.org/ros2djs/current/ros2d.js"></script>

    <script type="text/javascript">
    var TimeLine1 = new TimeSeries();
    var value1 = '0.0';
    var ros = new ROSLIB.Ros({
    url : 'ws://127.0.0.1:9090'
    });

    var listener = new ROSLIB.Topic({
    ros : ros,
    name : '/teat_data',
    messageType : 'std_msgs/Float32'
    });

    listener.subscribe(function(message) {
    console.log('Received message on ' + listener.name + ': ' + message.data);
    value1=message.data;
    });

    setInterval(function() {
          TimeLine1.append(new Date().getTime(), value1);
        }, 50);

    function createTimeline() {
     var chart = new SmoothieChart();
     chart.addTimeSeries(TimeLine1, { strokeStyle: 'rgba(0, 255, 0, 1)', fillStyle: 'rgba(0, 255, 0, 0.2)', lineWidth: 4 });
         chart.streamTo(document.getElementById("chart"), 500);
    }
    </script>

  </head>
  <body onload="createTimeline()" >
    <canvas id="chart" width="640" height="160"></canvas>
  </body>
</html>

参考

ROSのWebインタフェースを作る
move_baseをWEBブラウザから操作する。

http://robotwebtools.org/
https://github.com/RobotWebTools

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