2 var ros = new ROSLIB.Ros();
3 ros.connect('ws://wildthumper:9090');
4 var isDragging = false;
6 ros.on('connection', function() {
7 information.alerts.push({message: "Connected to websocket server.", success: true});
10 ros.on('error', function(error) {
11 information.alerts.push({message: "Error connecting to websocket server.", danger: true});
14 ros.on('close', function() {
15 information.alerts.push({message: "Connection to websocket server closed.", info: true});
18 //tfClient.subscribe('base_link', function(tf) {
19 // var now = new Date();
20 // $("#pose").text(now.toLocaleTimeString() + ": (" + tf.translation.x + ", " + tf.translation.y + ")");
22 // robotMarker.x = tf.translation.x;
23 // robotMarker.y = -tf.translation.y;
24 // robotMarker.rotation = viewer2D.scene.rosQuaternionToGlobalTheta(tf.rotation);
26 var poseTopic = new ROSLIB.Topic({ros: ros, name: '/robot_pose', messageType: 'geometry_msgs/Pose'});
27 var sensorTopic = new ROSLIB.Topic({ros: ros, name: '/sensors', messageType: 'wild_thumper/Sensor'});
28 var batteryTopic = new ROSLIB.Topic({ros: ros, name: '/battery', messageType: 'sensor_msgs/BatteryState'});
29 var ledStripeTopic = new ROSLIB.Topic({ros: ros, name: '/led_stripe', messageType: 'wild_thumper/LedStripe'});
30 var cmdVelTopic = new ROSLIB.Topic({ros: ros, name: '/teleop/cmd_vel', messageType: 'geometry_msgs/Twist'});
32 poseTopic.subscribe(function(message) {
34 $("#pose").text(now.toLocaleTimeString() + ": (" + message.position.x + ", " + message.position.y + ")");
37 sensorTopic.subscribe(function(message) {
38 sensors.light = message.light;
39 sensors.temp = message.temp.toFixed(1);
40 sensors.humidity = message.humidity;
41 sensors.pressure = message.pressure.toFixed(1);
42 sensors.co = message.co;
45 batteryTopic.subscribe(function(message) {
46 power.voltage = message.voltage.toFixed(1);
47 power.current = message.current.toFixed(1);
50 viewer2D = new ROS2D.Viewer({
57 .bind('mousewheel', function(e) {
58 if (e.originalEvent.wheelDelta/120 > 0) {
59 viewer2D.scaleToDimensions(10, 10)
61 viewer2D.scaleToDimensions(5, 5)
64 .mousedown(function() {
66 mousePreX = undefined;
67 mousePreY = undefined;
72 .mousemove(function(event) {
74 if (mousePreX != undefined && mousePreY != undefined) {
75 var diffX = event.pageX - mousePreX;
76 var diffY = event.pageY - mousePreY;
77 console.log("Moving viewer2D by " + diffX + ", " + diffY);
78 viewer2D.shift(diffX, diffY);
80 mousePreX = event.pageX;
81 mousePreY = event.pageY;
85 // Setup the nav client.
86 NAV2D.OccupancyGridClientNav({
88 rootObject : viewer2D.scene,
90 serverName : '/move_base'
93 // Initialize the teleop.
94 teleop = new KEYBOARDTELEOP.Teleop({
96 topic : '/teleop/cmd_vel'
99 // Create a UI slider using JQuery UI.
100 $('#speed-slider').slider({
106 slide : function(event, ui) {
107 // Change the speed label.
108 speed_label.speed = ui.value;
110 teleop.scale = (ui.value * 2);
114 // Set the initial speed.
115 teleop.scale = ($('#speed-slider').slider('value') * 2);
117 $('.led_color').minicolors({
120 defaultValue: '#000000',
121 change: function(value) {
122 var rgb = $(this).minicolors('rgbObject');
123 var nums = jQuery.parseJSON($(this).prop("name"));
124 var msg = new ROSLIB.Message({
127 jQuery.each(nums, function(i, num) {
130 red: parseInt(rgb.r*127/255),
131 green: parseInt(rgb.g*127/255),
132 blue: parseInt(rgb.b*127/255)
135 ledStripeTopic.publish(msg);
139 function setSpeed(trans, rot) {
140 var msg = new ROSLIB.Message({
152 cmdVelTopic.publish(msg);
156 .bind('mousedown touchstart', function(e) {
159 .bind('mouseup touchend mouseleave', function(e) {
163 .bind('mousemove touchmove', function(e) {
165 // absolute click position
167 if (e.originalEvent.touches) {
168 X = e.originalEvent.touches[0].pageX;
169 Y = e.originalEvent.touches[0].pageY;
174 // relative click position
175 var Xrel = X - this.offsetLeft - $(this).width()/2;
176 var Yrel = Y - this.offsetTop - $(this).height()/2;
178 var trans = -Yrel / ($(this).height()/2);
179 var rot = -Xrel / ($(this).width()/2);
180 setSpeed(trans, rot*3);
184 information = new Vue({
190 classObject: function(id) {
192 "alert-success": this.alerts[id].success,
193 "alert-danger": this.alerts[id].danger,
194 "alert-info": this.alerts[id].info
202 data: {light: '', temp: '', humidity: '', pressure: '', co: ''}
213 speed_label = new Vue({
216 speed: $('#speed-slider').slider('value'),