now can choose which topics to bag in the control pannel

This commit is contained in:
Glen Turner
2015-06-29 16:56:20 -07:00
parent d146020719
commit 09f78ce4d8
14 changed files with 205 additions and 96 deletions

3
backend/js/Node.js Normal file
View File

@@ -0,0 +1,3 @@
function Node (name) {
this.name = name;
}

12
backend/js/Topic.js Normal file
View File

@@ -0,0 +1,12 @@
function Topic (name) {
this.name = name;
this.bag = true;
this.type = "";
}
Array.prototype.indexOfTopic = function(name) {
for (var i = 0; i < this.length; i++)
if (this[i].name == name)
return i;
return -1;
}

View File

@@ -1 +0,0 @@

View File

@@ -1,55 +0,0 @@
function Topic(name, type)
{
this.name = name;
this.type = type;
this.includeInBag = false;
this.equals = function (otherTopic)
{
if( this.name == otherTopic.name && this.type == otherTopic.type)
{
return true;
}
return false;
};
};
function containsTopic(obj, list) {
var x;
for (x in list) {
if (obj.equals(list[x])) {
return true;
}
}
return false;
}
function testToics()
{
var topics = [new Topic("a","a_t"), new Topic("b","b_t"), new Topic("c","c_t")];
console.log("Testing Topic");
if (containsTopic(new Topic("a","a_t"),topics) == true)
{
console.log("pass")
}
else
{
console.log(" contains true fail")
}
if (containsTopic(new Topic("d","d_t"),topics) == false)
{
console.log("pass")
}
else
{
console.log(" contains d fail")
}
}
testToics();

View File

@@ -1,6 +1,10 @@
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';
ros.connectionName = 'ws://localhost:9090';
@@ -19,6 +23,7 @@ ros.on('error', function(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;
@@ -33,7 +38,7 @@ ros.on('connection', function() {
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"
@@ -51,6 +56,18 @@ ros.connect(ros.connectionName);
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
})
@@ -82,18 +99,77 @@ bagNotifier.subscribe(function(message) {
if (message.data === "STARTED") {
document.getElementById("recordButtonText").innerHTML = "Stop"
document.getElementById("recordButton").className = "btn btn-danger"
} else {
} else if (message.data === "STOPPED")
{
document.getElementById("recordButtonText").innerHTML = "Start"
document.getElementById("recordButton").className = "btn btn-primary"
}
console.log("bagNotifier: " +message.data)
});
///////////////////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////////////////
ros.buildTopicList = function(fresh_topics)
{
// console.log(topics)
// fresh_topics = fresh_topics.sort();
// First check that all our current topics are in the list of fresh_topics
for( var topic = 0; topic < ros.topics.length; topic ++)
{
if (fresh_topics.indexOf(ros.topics[topic].name) > -1)
{
// We know that we have already found that topic so we don't need to remove it
}
else
{
// That topic is no longer being published so we need ro remove it
ros.topics.splice(topic,1);
}
}
for (var topic =0; topic < fresh_topics.length; topic ++ )
{
if (ros.topics.indexOfTopic(fresh_topics[topic]) > -1)
{
// We know that we have already found that topic so we don't need to re-add it
}
else
{
// We do not have that topic so we need to add it
// create the new topic
var new_topic = new Topic(fresh_topics[topic]);
// make sure to put in in the list in the order
ros.topics.push(new_topic);
}
}
ros.topics.sort(function(a, b) {
if ( a.name < b.name )
return -1;
if ( a.name > b.name )
return 1;
return 0;
})
};
ros.getTopicsList = function()
{
// var topicList = [];
return ros.topics;
}
// attept to connect to the ros master from the IP given orgrab it from the form
ros.attemptConnection = function(ipAddress)
@@ -112,13 +188,25 @@ ros.attemptConnection = function(ipAddress)
function toggleRecording()
{
document.getElementById("recordButtonText").innerHTML = "Wait"
document.getElementById("recordButton").className = "btn btn-warning"
if (!ros.recording) {
ros.recording = true
publishBagMessage(document.getElementById("recordText").value)
} else {
ros.recording = false
publishBagMessage("STOP")
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")
}
}
}

View File

@@ -1,6 +1,4 @@
ros.topics = [];
ros.nodes = [];
$("#myImage").click ( function (evt) {
@@ -62,34 +60,41 @@ function updateVoltage(voltage)
function updateTopicsGUI()
{
ros.getTopics(function(result)
{
ros.topics = result;
}
);
ros.getTopics(ros.buildTopicList);
var topics = ros.topics;
var topics = ros.getTopicsList();
topics.sort();
if(topics != null){
var innerHTML = "";
for (var i = 0; i < topics.length; i++ )
{
innerHTML = innerHTML.concat(generateCheckbox(topics[i]));
innerHTML = innerHTML.concat(generateTopicCheckbox(topics[i]));
}
document.getElementById("ROSTopics").innerHTML = innerHTML;
}
};
function generateCheckbox(name)
function generateTopicCheckbox(topic)
{
var str = "<div class=\"checkbox\"> <label><input type=\"checkbox\" value=\"\">";
str = str.concat(name);
var str = "<div class=\"checkbox\">";
var checked_str = "unchecked";
if (topic.bag == true)
{
checked_str = "checked"
}
str =str.concat("<label><input type=\"checkbox\" onclick=\"toggleToBag(\'"+ topic.name + "\')\" id=\"" + topic.name + "_checkbox\" "+ checked_str +">");
str = str.concat(topic.name);
str = str.concat("</label></div>");
return str;
};
function toggleToBag(topic_name)
{
// if($.inArray(topic_name, ros.topics))
ros.topics[ros.topics.indexOfTopic(topic_name)].bag = !ros.topics[ros.topics.indexOfTopic(topic_name)].bag ;
}
function updateNodesGUI()
{
@@ -99,6 +104,7 @@ function updateNodesGUI()
});
var nodes = ros.nodes;
nodes.sort()
if(nodes != null){
@@ -115,8 +121,10 @@ function updateNodesGUI()
};
window.setInterval(function(){
updateTopicsGUI()
updateNodesGUI()
updateTopicsGUI();
updateNodesGUI();
}, 500);
function validateForm()
@@ -155,6 +163,11 @@ function addInputsForConnection()
}
function mylog(input)
{
console.log(input)
}