roslib
Version:
The standard ROS Javascript Library
72 lines (65 loc) • 1.72 kB
JavaScript
/**
* @fileoverview
* @author David Gossow - dgossow@willowgarage.com
*/
var Vector3 = require('./Vector3');
var Quaternion = require('./Quaternion');
/**
* A Pose in 3D space. Values are copied into this object.
*
* @constructor
* @param options - object with following keys:
* * position - the Vector3 describing the position
* * orientation - the ROSLIB.Quaternion describing the orientation
*/
function Pose(options) {
options = options || {};
// copy the values into this object if they exist
this.position = new Vector3(options.position);
this.orientation = new Quaternion(options.orientation);
}
/**
* Apply a transform against this pose.
*
* @param tf the transform
*/
Pose.prototype.applyTransform = function(tf) {
this.position.multiplyQuaternion(tf.rotation);
this.position.add(tf.translation);
var tmp = tf.rotation.clone();
tmp.multiply(this.orientation);
this.orientation = tmp;
};
/**
* Clone a copy of this pose.
*
* @returns the cloned pose
*/
Pose.prototype.clone = function() {
return new Pose(this);
};
/**
* Multiplies this pose with another pose without altering this pose.
*
* @returns Result of multiplication.
*/
Pose.prototype.multiply = function(pose) {
var p = pose.clone();
p.applyTransform({ rotation: this.orientation, translation: this.position });
return p;
};
/**
* Computes the inverse of this pose.
*
* @returns Inverse of pose.
*/
Pose.prototype.getInverse = function() {
var inverse = this.clone();
inverse.orientation.invert();
inverse.position.multiplyQuaternion(inverse.orientation);
inverse.position.x *= -1;
inverse.position.y *= -1;
inverse.position.z *= -1;
return inverse;
};
module.exports = Pose;