/////////////////////////////////////////////////////////////////////////////////// // Publishers /////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // Topics //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// // Subscribers //////////////////////////////////////////////////////////////// // Operation Mode var modeStatus = new ROSLIB.Topic({ ros : ros, name : '/aescape/mode/status', messageType : 'std_msgs/String', throttle_rate : 500 // 2Hz }); modeStatus.subscribe(function(message) { document.getElementById("stoppedModeButton").className = "btn btn-secondary" document.getElementById("standbyModeButton").className = "btn btn-primary" document.getElementById("readyModeButton").className = "btn btn-primary" document.getElementById("teachingModeButton").className = "btn btn-primary" document.getElementById("executionModeButton").className = "btn btn-primary" document.getElementById("recordingStartButton").disabled = true document.getElementById("executionStartButton").disabled = true if (message.data == "stopped") { document.getElementById("stoppedModeButton").className = "btn btn-warning" } else if (message.data == "standby") { document.getElementById("standbyModeButton").className = "btn btn-primary btn-success" } else if (message.data == "teach") { document.getElementById("teachingModeButton").className = "btn btn-primary btn-success" } else if (message.data == "execution") { document.getElementById("executionModeButton").className = "btn btn-primary btn-success" } else if (message.data == "ready") { document.getElementById("readyModeButton").className = "btn btn-primary btn-success" document.getElementById("recordingStartButton").disabled = false document.getElementById("executionStartButton").disabled = false } }); // Safety Status var safetyStatusTopic = new ROSLIB.Topic({ ros : ros, name : '/aescape/mode/safety_status', messageType : 'std_msgs/String', throttle_rate : 500 // 2Hz }); safetyStatusTopic.subscribe(function(message) { document.getElementById("safetyRunning").className = 'label label-default'; document.getElementById("safetyStopped").className = 'label label-default'; if (message.data == "stopped") { document.getElementById("safetyStopped").className = 'label label-danger'; } else if (message.data == "running") { document.getElementById("safetyRunning").className = 'label label-success'; } }); // Recording Bag var recordingBagTopic = new ROSLIB.Topic({ ros : ros, name : '/aescape/bags/recording_status', messageType : 'std_msgs/String' }); recordingBagTopic.subscribe(function(message) { if (message.data == "stopped") { document.getElementById("RecordingStatusLabel").innerHTML = 'Not Running'; document.getElementById("RecordingStatusLabel").className = 'label label-warning'; } else if (message.data == "running") { document.getElementById("RecordingStatusLabel").innerHTML = 'RUNNING!'; document.getElementById("RecordingStatusLabel").className = 'label label-success'; } }); // Executing Bag var executingBagTopic = new ROSLIB.Topic({ ros : ros, name : '/aescape/bags/execution_status', messageType : 'std_msgs/String' }); executingBagTopic.subscribe(function(message) { if (message.data == "stopped") { document.getElementById("ExecutionStatusLabel").innerHTML = 'Not Running'; document.getElementById("ExecutionStatusLabel").className = 'label label-warning'; } else if (message.data == "running") { document.getElementById("ExecutionStatusLabel").innerHTML = 'RUNNING!'; document.getElementById("ExecutionStatusLabel").className = 'label label-success'; } }); // Last Bag var bagPlayingTopic = new ROSLIB.Topic({ ros : ros, name : '/aescape/bags/last_played', messageType : 'std_msgs/String' }); bagPlayingTopic.subscribe(function(message) { document.getElementById("lastbagText").innerHTML = message.data }); // FrankaState var frankaStatus = new ROSLIB.Topic({ ros : ros, name : '/franka_state_controller/franka_states', messageType : 'franka_msgs/FrankaState', throttle_rate : 500 // 2Hz }); frankaStatus.subscribe(function(message) { document.getElementById("frankaModeOther").className = "label label-default" document.getElementById("frankaModeIdle").className = "label label-default" document.getElementById("frankaModeMove").className = "label label-default" document.getElementById("frankaModeGuiding").className = "label label-default" document.getElementById("frankaModeReflex").className = "label label-default" document.getElementById("frankaModeUserStopped").className = "label label-default" document.getElementById("frankaModeErrorRecovery").className = "label label-default" document.getElementById("fixFrankaButton").className = "btn btn-primary" if (message.robot_mode == 0) { document.getElementById("frankaModeOther").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-danger" } else if (message.robot_mode == 1) { document.getElementById("frankaModeIdle").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-danger" } else if (message.robot_mode == 2) { document.getElementById("frankaModeMove").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-success" } else if (message.robot_mode == 3) { document.getElementById("frankaModeGuiding").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-default" } else if (message.robot_mode == 4) { document.getElementById("frankaModeReflex").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-danger" } else if (message.robot_mode == 5) { document.getElementById("frankaModeUserStopped").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-default" } else if (message.robot_mode == 6) { document.getElementById("frankaModeErrorRecovery").className = "label label-warning" document.getElementById("fixFrankaButton").className = "btn btn-default" } }); // Robotiq Data var robotiqDataTopic = new ROSLIB.Topic({ ros : ros, name : '/robotiq_ft_wrench', messageType : 'geometry_msgs/WrenchStamped', throttle_rate : 500 // 2Hz }); robotiqDataTopic.subscribe(function(message) { var force = message.wrench.force document.getElementById("robotiqX").innerHTML = force.x.toFixed(1) document.getElementById("robotiqY").innerHTML = force.y.toFixed(1) document.getElementById("robotiqZ").innerHTML = force.z.toFixed(1) if ((Math.abs(force.x) > 0.5) || (Math.abs(force.y) > 0.5) || (Math.abs(force.z) > 0.5)) { document.getElementById("calibrateButton").className = "btn btn-danger" } else { document.getElementById("calibrateButton").className = "btn btn-default" } }); //////////////////////////////////////////////////////////////// // Services //////////////////////////////////////////////////////////////// function triggerService(serviceName) { var service = new ROSLIB.Service({ ros : ros, name : serviceName, serviceType : 'std_srvs/Trigger' }); var request = new ROSLIB.ServiceRequest({}); service.callService(request, function(result) { console.log('Result for service call on ' + serviceName + ': ' + result.sum); }); } function triggerMessageService(serviceName, textInput) { var text = document.getElementById(textInput).value var service = new ROSLIB.Service({ ros : ros, name : serviceName, serviceType : 'demobot.TriggerMessage' }); var request = new ROSLIB.ServiceRequest({ message : text }); service.callService(request, function(result) { console.log('Result for service call on ' + serviceName + ': ' + result.sum); }); }