Files
old-lab_ui/client/app/utilities/ros_scripts.js

206 lines
5.9 KiB
JavaScript
Raw Normal View History

var ros = new ROSLIB.Ros();
ros.topics = Array();
ros.nodes = Array();
ros.recording = false;
ros.connected = false;
// ros.connectionName = 'ws://192.168.1.105:9090';
2019-04-29 00:41:49 -04:00
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){
return pair[1];
}
}
}
var master = "localhost"
master = getQueryVariable("master")
if(master == null)
{
master = window.location.hostname
//"localhost"
}
console.log('Master = ' + master);
ros.connectionName = 'ws://' + master + ':9090';
// ros.connectionName = 'ws://localhost:9090';
2019-04-26 15:33:46 -04:00
// ros.connectionName = 'ws://titan.aescape.co:9090';
2019-04-29 00:41:49 -04:00
console.log('ros.connectionName = ' + ros.connectionName);
// If there is an error on the backend, an 'error' emit will be emitted.
ros.on('error', function(error) {
document.getElementById("ConnectionIPForm").className = "form-group has-warning has-feedback";
document.getElementById("ConnectionIPInput").value = ros.connectionName;
document.getElementById("ConnectionIPLabel").innerHTML = 'No connection';
document.getElementById("ConnectionButton").className = "btn btn-warning"
document.getElementById("rosbridgeconnection_badge").innerHTML = 'No connection';
document.getElementById("ROSNodes").innerHTML = "No Nodes Detected";
rosbridgeconnection_badge
2019-04-29 00:41:49 -04:00
console.log(error);
});
// Find out exactly when we made a connection.
ros.on('connection', function() {
ros.connected = true;
console.log('Connection made!');
document.getElementById("ConnectionIPForm").className = "form-group has-success has-feedback";
document.getElementById("ConnectionIPInput").value = ros.connectionName;
document.getElementById("ConnectionIPLabel").innerHTML = 'Connection made at:';
document.getElementById("rosbridgeconnection_badge").innerHTML = 'Connected';
2019-03-27 17:43:00 -04:00
document.getElementById("ConnectionButton").className = "btn btn-success";
ros.nodes = Array();
ros.topics = Array();
});
ros.on('close', function() {
console.log('Connection closed.');
ros.connected = false;
document.getElementById("ConnectionIPForm").className = "form-group has-warning has-feedback";
document.getElementById("ConnectionIPLabel").innerHTML = 'Connection closed';
document.getElementById("ConnectionButton").className = "btn btn-warning"
document.getElementById("rosbridgeconnection_badge").innerHTML = 'Connection closed';
ros.nodes = Array();
ros.topics = Array();
});
// Create a connection to the rosbridge WebSocket server.
2019-03-27 17:43:00 -04:00
//ros.connect(ros.connectionName);
///////////////////////////////////////////////////////////////////////////////////
// Publishers
///////////////////////////////////////////////////////////////////////////////////
function publishBagMessage(bagFilename)
{
var bag_file_message = ""
bag_file_message += bagFilename;
if (bagFilename != "STOP")
{
for (topic in ros.topics)
{
if(ros.topics[topic].bag)
{
bag_file_message += " " + ros.topics[topic].name
}
}
}
var bagMessage = new ROSLIB.Message({
data : bagFilename
})
bagPublisher.publish(bagMessage)
}
////////////////////////////////////////////////////////////////
// Topics
////////////////////////////////////////////////////////////////
var bagPublisher = new ROSLIB.Topic({
ros : ros,
name : 'bag_publisher',
messageType : 'std_msgs/String'
});
var bagNotifier = new ROSLIB.Topic({
ros : ros,
name : 'bag_notifier',
messageType : 'std_msgs/String'
});
////////////////////////////////////////////////////////////////
// Subscribers
////////////////////////////////////////////////////////////////
bagNotifier.subscribe(function(message) {
if (message.data === "STARTED") {
document.getElementById("recordButtonText").innerHTML = "Stop"
document.getElementById("recordButton").className = "btn btn-danger"
} else if (message.data === "STOPPED")
{
document.getElementById("recordButtonText").innerHTML = "Start"
document.getElementById("recordButton").className = "btn btn-primary"
}
console.log("bagNotifier: " +message.data)
});
///////////////////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////////////////
// attept to connect to the ros master from the IP given orgrab it from the form
ros.attemptConnection = function(ipAddress)
{
2019-04-16 19:30:41 -04:00
ros.close();
if( typeof ipAddress !== "undefined")
{
ros.connectionName = ipAddress;
}
else
{
ros.connectionName = document.getElementById("ConnectionIPInput").value
}
console.log('Connection = ' + ros.connectionName);
ros.connect(ros.connectionName);
2019-04-16 19:30:41 -04:00
getMasterName();
}
function toggleRecording()
{
if(ros.connected)
{
document.getElementById("recordButtonText").innerHTML = "Wait"
document.getElementById("recordButton").className = "btn btn-warning"
if (!ros.recording) {
ros.recording = true
topicstobag = " "
for (i = 0; i < ros.topics.length; i ++)
{
if (ros.topics[i].bag == true)
{
topicstobag = topicstobag.concat(ros.topics[i].name + " ")
}
}
publishBagMessage(document.getElementById("recordText").value + topicstobag)
} else {
ros.recording = false
publishBagMessage("STOP")
}
}
}
2019-04-04 15:45:44 -04:00
function getMasterName()
{
var service = new ROSLIB.Service({
ros : ros,
name : '/rosapi/service_host',
serviceType : 'rosapi/ServiceHost'
});
var request = new ROSLIB.ServiceRequest({
service: '/rosout/get_loggers' // Only the master hosts this service.
});
service.callService(request, function(result) {
console.log('Master Name = ' + result.host);
document.getElementById("MasterName").innerHTML = result.host;
2019-05-07 12:55:14 -04:00
var title = result.host + " Lab UI"
document.title = title;
document.getElementById("Title").innerHTML = title;
2019-04-04 15:45:44 -04:00
});
}