- function init() {
- var ros = new ROSLIB.Ros();
- ros.connect('ws://wildthumper:9090');
- var isDragging = false;
-
- ros.on('connection', function() {
- $("#information").append(`
- <div class="alert alert-dismissible alert-success">
- <span data-dismiss="alert">Connected to websocket server.</span>
- </div>
- `);
- });
-
- ros.on('error', function(error) {
- $("#information").append(`
- <div class="alert alert-dismissible alert-danger">
- <span data-dismiss="alert">Error connecting to websocket server.</span>
- </div>
- `);
- });
-
- ros.on('close', function() {
- $("#information").append(`
- <div class="alert alert-dismissible alert-info">
- <span data-dismiss="alert">Connection to websocket server closed.</span>
- </div>
- `);
- });
-
- //tfClient.subscribe('base_link', function(tf) {
- // var now = new Date();
- // $("#pose").text(now.toLocaleTimeString() + ": (" + tf.translation.x + ", " + tf.translation.y + ")");
-
- // robotMarker.x = tf.translation.x;
- // robotMarker.y = -tf.translation.y;
- // robotMarker.rotation = viewer2D.scene.rosQuaternionToGlobalTheta(tf.rotation);
- //});
- var poseTopic = new ROSLIB.Topic({ros: ros, name: '/robot_pose', messageType: 'geometry_msgs/Pose'});
- var sensorTopic = new ROSLIB.Topic({ros: ros, name: '/sensors', messageType: 'wild_thumper/Sensor'});
- var batteryTopic = new ROSLIB.Topic({ros: ros, name: '/battery', messageType: 'sensor_msgs/BatteryState'});
- var ledStripeTopic = new ROSLIB.Topic({ros: ros, name: '/led_stripe', messageType: 'wild_thumper/LedStripe'});
-
- poseTopic.subscribe(function(message) {
- var now = new Date();
- $("#pose").text(now.toLocaleTimeString() + ": (" + message.position.x + ", " + message.position.y + ")");
- });
-
- sensorTopic.subscribe(function(message) {
- sensordiv = $("#sensors")
- sensordiv.find("input[name=light]").val(message.light);
- sensordiv.find("input[name=temp]").val(message.temp.toFixed(1));
- sensordiv.find("input[name=humidity]").val(message.humidity);
- sensordiv.find("input[name=pressure]").val(message.pressure.toFixed(1));
- sensordiv.find("input[name=co]").val(message.co);
- });
-
- batteryTopic.subscribe(function(message) {
- powerdiv = $("#power");
- powerdiv.find("input[name=voltage]").val(message.voltage.toFixed(1));
- powerdiv.find("input[name=current]").val(message.current.toFixed(1));
- });
-
- viewer2D = new ROS2D.Viewer({
- divID: 'map',
- width: 640,
- height: 480,
- background: "#efefef"
- });
- $('#map')
- .bind('mousewheel', function(e) {
- if (e.originalEvent.wheelDelta/120 > 0) {
- viewer2D.scaleToDimensions(10, 10)
- } else {
- viewer2D.scaleToDimensions(5, 5)
- }
- })
- .mousedown(function() {
- isDragging = true;
- mousePreX = undefined;
- mousePreY = undefined;
- })
- .mouseup(function() {
- isDragging = false;
- })
- .mousemove(function(event) {
- if (isDragging) {
- if (mousePreX != undefined && mousePreY != undefined) {
- var diffX = event.pageX - mousePreX;
- var diffY = event.pageY - mousePreY;
- console.log("Moving viewer2D by " + diffX + ", " + diffY);
- viewer2D.shift(diffX, diffY);
- }
- mousePreX = event.pageX;
- mousePreY = event.pageY;
- }
- });
-
- // Setup the nav client.
- NAV2D.OccupancyGridClientNav({
- ros : ros,
- rootObject : viewer2D.scene,
- viewer : viewer2D,
- serverName : '/move_base'
- });
-
- // Initialize the teleop.
- var teleop = new KEYBOARDTELEOP.Teleop({
- ros : ros,
- topic : '/cmd_vel'
- });
-
- // Create a UI slider using JQuery UI.
- $('#speed-slider').slider({
- range : 'min',
- min : 0,
- max : 100,
- value : 50,
- slide : function(event, ui) {
- // Change the speed label.
- $('#speed-label').html('Speed: ' + ui.value + '%');
- // Scale the speed.
- teleop.scale = (ui.value / 100.0);
- }
- });
-
- // Set the initial speed.
- $('#speed-label').html('Speed: ' + ($('#speed-slider').slider('value')) + '%');
- teleop.scale = ($('#speed-slider').slider('value') / 100.0);
-
- $('.led_color').minicolors({
- control: 'wheel',
- format: 'rgb',
- defaultValue: '#000000',
- change: function(value) {
- var rgb = $(this).minicolors('rgbObject');
- var nums = jQuery.parseJSON($(this).prop("name"));
- var msg = new ROSLIB.Message({
- leds: []
- });
- jQuery.each(nums, function(i, num) {
- msg["leds"].push({
- num: num,
- red: parseInt(rgb.r*127/255),
- green: parseInt(rgb.g*127/255),
- blue: parseInt(rgb.b*127/255)
- })
- });
- ledStripeTopic.publish(msg);
- }
- });
- }