ros-backbone
v1.2.0
Published
Backbone Model and Collection bindings to ROSLib.js Topics and Services
Downloads
16
Readme
Backbone bindings to a ROSLib
Parameter model
Simple fetch
, update
, delete
bindings for Model
-> Param
var rosbb = require("ros-backbone");
var ParamModel = rosbb.ParamModel.extend({
ros: new ROS.Ros({
url: "ws://localhost:9091"
}),
params: ["/foo", "/bar"]
});
var paramModel = new ParamModel();
paramModel.fetch().then(() => {
app.doSomething();
});
# Topic Model/Collection
```js
var rosbb = require("ros-backbone");
var ROS = require("roslib");
var ros = ROS.Ros("ws://localhost:9090");
var myTopic = ros.Topic({
name: "/some/topic"
});
var myModel = new rosbb.Model();
myModel.bind(myTopic, {
// If not provided all fields will be kept
bindings: {
"topic-attribute": "mapped-model-attribute",
"some-other-attr": "xyz",
// Dots and bracket notation will be transformed
// and the path will be found, however the other way
// around doesn't currently work
"pose.position.y" : "lat",
"pose.position.x": "lng"
},
// Covert a stamped ROS header to a JS timestamp in MS (useful for time series)
// Syntax: [<model attribute>, <topic attribute (default: "header")>]
headerTimestamp: ["timestamp"],
transform: function(message) {
message.foo = 1;
return message.bar < 5 ? message : false; // don't emit message
},
publishTransform: function(message) {
// return falsey to omit, otherwise transform? & return the message to publish
},
frame_id: "my_frame", // frame to set when emitting messages
// If you want to use a TFClient and provide a TFClient instance to bind
observeFrame: "odom_frame"
});
// publish a ROS message
myModel.save({
a: 1, b: 2, c: 3
});
var myCollection = new rosbb.Collection();
myCollection.bind(myTopic, {
// options (see above)
});
Notes
- Subscribe to as many ROS Topics as you please, but you should use the model as a sink and uni-directional in that case
- This works best as a subscriber, publishing can be sketchy if you rebind/filter keys or subscribe to multiple nodes