diff --git a/examples/stream-quaternions.js b/examples/stream-quaternions.js new file mode 100644 index 0000000..2693a43 --- /dev/null +++ b/examples/stream-quaternions.js @@ -0,0 +1,33 @@ +"use strict"; + +var sphero = require("../"); +var orb = sphero(process.env.PORT); + +orb.connect(function() { + orb.streamQuaternions(); + + orb.on("quaternions", function(data) { + console.log("quaternions:"); + console.log(" sensor:", data.quaternionQ0.sensor); + console.log(" range:", data.quaternionQ0.range); + console.log(" units:", data.quaternionQ0.units); + console.log(" value:", data.quaternionQ0.value[0]); + + console.log(" sensor:", data.quaternionQ1.sensor); + console.log(" range:", data.quaternionQ1.range); + console.log(" units:", data.quaternionQ1.units); + console.log(" value:", data.quaternionQ1.value[0]); + + console.log(" sensor:", data.quaternionQ2.sensor); + console.log(" range:", data.quaternionQ2.range); + console.log(" units:", data.quaternionQ2.units); + console.log(" value:", data.quaternionQ2.value[0]); + + console.log(" sensor:", data.quaternionQ3.sensor); + console.log(" range:", data.quaternionQ3.range); + console.log(" units:", data.quaternionQ3.units); + console.log(" value:", data.quaternionQ3.value[0]); + }); + + orb.roll(180, 0); +}); diff --git a/lib/devices/custom.js b/lib/devices/custom.js index 4d35da7..5355e24 100644 --- a/lib/devices/custom.js +++ b/lib/devices/custom.js @@ -342,6 +342,36 @@ module.exports = function custom(device) { return device.setStabilization(1, callback); }; + /** + * Starts streaming of quaternions + * + * It uses sphero's data streaming command. User needs to listen + * for the `dataStreaming` or `quaternions` event to get the data. + * + * @param {Number} [sps=5] samples per second + * @param {Boolean} [remove=false] forces streamin of quaternions to stop + * @example + * orb.streamQuaternions(); + * + * orb.on("quaternions", function(data) { + * console.log("data:"); + * console.log(" quaternionQ0:", data.quaternionQ0); + * console.log(" quaternionQ1:", data.quaternionQ1); + * console.log(" quaternionQ2:", data.quaternionQ2); + * console.log(" quaternionQ3:", data.quaternionQ3); + * }); + * @return {object} promise for command + */ + device.streamQuaternions = function(sps, remove) { + return device.streamData({ + event: "quaternions", + mask2: 0xF0000000, + fields: ["quaternionQ0", "quaternionQ1", "quaternionQ2", "quaternionQ3"], + sps: sps, + remove: remove + }); + }; + /** * Starts streaming of odometer data * diff --git a/spec/lib/devices/custom.spec.js b/spec/lib/devices/custom.spec.js index 72f815e..8662356 100644 --- a/spec/lib/devices/custom.spec.js +++ b/spec/lib/devices/custom.spec.js @@ -269,6 +269,21 @@ describe("Custom Device Functions", function() { device.streamData.restore(); }); + it("#streamQuaternions calls #streamData with", function() { + var opts = { + event: "quaternions", + mask2: 0xF0000000, + fields: ["quaternionQ0", "quaternionQ1", "quaternionQ2", "quaternionQ3"], + sps: 2, + remove: false + }; + + device.streamQuaternions(2, false); + + expect(device.streamData).to.be.calledOnce; + expect(device.streamData).to.be.calledWith(opts); + }); + it("#streamOdometer calls #streamData with", function() { var opts = { event: "odometer",