本文整理汇总了C++中eigen::Quaterniond::toRotationMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaterniond::toRotationMatrix方法的具体用法?C++ Quaterniond::toRotationMatrix怎么用?C++ Quaterniond::toRotationMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Quaterniond
的用法示例。
在下文中一共展示了Quaterniond::toRotationMatrix方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: doArcball
void doArcball(
double * _viewMatrix,
double const * _rotationCenter,
double const * _projectionMatrix,
double const * _initialViewMatrix,
//double const * _currentViewMatrix,
double const * _initialMouse,
double const * _currentMouse,
bool screenSpaceRadius,
double radius)
{
Eigen::Map<Eigen::Vector3d const> rotationCenter(_rotationCenter);
Eigen::Map<Eigen::Matrix4d const> initialViewMatrix(_initialViewMatrix);
//Eigen::Map<Eigen::Matrix4d const> currentViewMatrix(_currentViewMatrix);
Eigen::Map<Eigen::Matrix4d const> projectionMatrix(_projectionMatrix);
Eigen::Map<Eigen::Matrix4d> viewMatrix(_viewMatrix);
Eigen::Vector2d initialMouse(_initialMouse);
Eigen::Vector2d currentMouse(_currentMouse);
Eigen::Quaterniond q;
Eigen::Vector3d Pa, Pc;
if (screenSpaceRadius) {
double aspectRatio = projectionMatrix(1, 1) / projectionMatrix(0, 0);
initialMouse(0) *= aspectRatio;
currentMouse(0) *= aspectRatio;
Pa = mapToSphere(initialMouse, radius);
Pc = mapToSphere(currentMouse, radius);
q.setFromTwoVectors(Pa - rotationCenter, Pc - rotationCenter);
}
else {
Pa = mapToSphere(projectionMatrix.inverse(), initialMouse, rotationCenter, radius);
Pc = mapToSphere(projectionMatrix.inverse(), currentMouse, rotationCenter, radius);
Eigen::Vector3d a = Pa - rotationCenter, b = Pc - rotationCenter;
#if 0
std::cout << "Mouse Initial Radius = " << sqrt(a.dot(a)) << " Current Radius = " << sqrt(b.dot(b)) << std::endl;
#endif
q.setFromTwoVectors(a, b);
}
Eigen::Matrix4d qMat4;
qMat4.setIdentity();
qMat4.topLeftCorner<3, 3>() = q.toRotationMatrix();
Eigen::Matrix4d translate;
translate.setIdentity();
translate.topRightCorner<3, 1>() = -rotationCenter;
Eigen::Matrix4d invTranslate;
invTranslate.setIdentity();
invTranslate.topRightCorner<3, 1>() = rotationCenter;
viewMatrix = invTranslate * qMat4 * translate * initialViewMatrix;
}
示例2: axis
/* ********************************************************************************************* */
TEST(UTILS, ROTATION) {
using namespace dart;
using namespace math;
// Create Initial ExpMap
Eigen::Vector3d axis(2.0, 1.0, 1.0);
axis.normalize();
double angle = 1.2;
EXPECT_DOUBLE_EQ(axis.norm(), 1.0);
Eigen::Vector3d expmap = axis * angle;
// Test conversion between expmap and quaternion
Eigen::Quaterniond q = expToQuat(expmap);
Eigen::Vector3d expmap2 = quatToExp(q);
EXPECT_NEAR((expmap - expmap2).norm(), 0.0, DART_EPSILON)
<< "Orig: " << expmap << " Reconstructed: " << expmap2;
// Test conversion between matrix and euler
Eigen::Matrix3d m = q.toRotationMatrix();
Eigen::Vector3d e = matrixToEulerXYZ(m);
Eigen::Matrix3d m2 = eulerXYZToMatrix(e);
EXPECT_NEAR((m - m2).norm(), 0.0, DART_EPSILON)
<< "Orig: " << m << " Reconstructed: " << m2;
}
示例3: deserialize
void BaseReferenceFrame::deserialize(ObjectData& data, IdContext& context){
Identifiable::deserialize(data,context);
Eigen::Quaterniond q;
q.coeffs().fromBOSS(data,"rotation");
_transform.translation().fromBOSS(data,"translation");
_transform.linear()=q.toRotationMatrix();
}
示例4: getOdomPose
bool RosMessageContext::getOdomPose(Eigen::Isometry3d& _trans, double time){
bool transformFound = true;
_tfListener->waitForTransform(_odomReferenceFrameId, _baseReferenceFrameId,
ros::Time(time), ros::Duration(1.0));
try{
tf::StampedTransform t;
_tfListener->lookupTransform(_odomReferenceFrameId, _baseReferenceFrameId,
ros::Time(time), t);
Eigen::Isometry3d transform;
transform.translation().x()=t.getOrigin().x();
transform.translation().y()=t.getOrigin().y();
transform.translation().z()=t.getOrigin().z();
Eigen::Quaterniond rot;
rot.x()=t.getRotation().x();
rot.y()=t.getRotation().y();
rot.z()=t.getRotation().z();
rot.w()=t.getRotation().w();
transform.linear()=rot.toRotationMatrix();
_trans = transform;
transformFound = true;
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
transformFound = false;
}
return transformFound;
}
示例5: rotate
void rotate(const Eigen::Quaterniond& qrot)
{
Eigen::Matrix3d rotmat = qrot.toRotationMatrix();
for (unsigned int i = 0; i < points.size(); i++)
{
points[i].head<3>() = rotmat*points[i].head<3>();
}
normal = rotmat*normal;
}
示例6: translation
void UpperBodyPlanner::msgPose2Eigen(const geometry_msgs::Pose& input, Eigen::Vector3d& translation, Eigen::Matrix3d& rotation) {
translation(0) = input.position.x;
translation(1) = input.position.y;
translation(2) = input.position.z;
Eigen::Quaterniond convert;
convert.w() = input.orientation.w;
convert.x() = input.orientation.x;
convert.y() = input.orientation.y;
convert.z() = input.orientation.z;
rotation = convert.toRotationMatrix();
}
示例7: o
void robot_state::Transforms::setTransform(const geometry_msgs::TransformStamped &transform)
{
if (transform.child_frame_id.rfind(target_frame_) == transform.child_frame_id.length() - target_frame_.length())
{
Eigen::Translation3d o(transform.transform.translation.x, transform.transform.translation.y, transform.transform.translation.z);
Eigen::Quaterniond q;
tf::quaternionMsgToEigen(transform.transform.rotation, q);
setTransform(Eigen::Affine3d(o*q.toRotationMatrix()), transform.header.frame_id);
} else {
logError("Given transform is to frame '%s', but frame '%s' was expected.", transform.child_frame_id.c_str(), target_frame_.c_str());
}
}
示例8: create_data
void create_data(Eigen::MatrixXd &pa, Eigen::MatrixXd &pb) {
int n_data = 7;
Eigen::MatrixXd pa0(3, n_data);
Eigen::MatrixXd pb0(3, n_data);
pb0 << -0.7045189014502934,0.31652495664145264,-0.8913587885243552,0.4196143278053829,0.33125081405575785,-1.148712511573519,-0.7211957446166447,-0.4204243223315903,-0.8922857301575797,0.41556308950696674,-0.36760757371251074,-1.1630155401570457,-0.12535642300333297,0.26708755761917147,1.5095344824450356,0.9968448409012386,0.27593113974268946,1.2189108175890786,-0.28095118914331707,-0.40276257201497045,1.3669272703783852;
Eigen::Quaterniond q = Eigen::Quaterniond(2.86073, 0.0378363, 3.59752, 0.4211619).normalized();
std::cout << "groundtruth-quaternion. w: " << q.w() << " x " << q.x() << " y: " << q.y() << " z " << q.z() << std::endl;
pa = q.toRotationMatrix()*pb0;
pb = pb0;
}
示例9: o
void planning_models::Transforms::setTransform(const geometry_msgs::TransformStamped &transform)
{
if (transform.child_frame_id.rfind(target_frame_) == transform.child_frame_id.length() - target_frame_.length())
{
Eigen::Translation3d o(transform.transform.translation.x, transform.transform.translation.y, transform.transform.translation.z);
Eigen::Quaterniond q;
quatFromMsg(transform.transform.rotation, q);
setTransform(Eigen::Affine3d(o*q.toRotationMatrix()), transform.header.frame_id);
} else {
ROS_ERROR("Given transform is to frame '%s', but frame '%s' was expected.", transform.child_frame_id.c_str(), target_frame_.c_str());
}
}
示例10: spaceToPlane
double
Camera::reprojectionError(const Eigen::Vector3d& P,
const Eigen::Quaterniond& camera_q,
const Eigen::Vector3d& camera_t,
const Eigen::Vector2d& observed_p) const
{
Eigen::Vector3d P_cam = camera_q.toRotationMatrix() * P + camera_t;
Eigen::Vector2d p;
spaceToPlane(P_cam, p);
return (p - observed_p).norm();
}
示例11: rosSpin
void rosSpin() {
double dt;
Eigen::Vector3d t(0.0, 0.0, 0.0);
Eigen::Vector3d t_new(0.0, 0.0, 0.0);
Eigen::Vector3d t_vel(0.0, 0.0, 0.0);
Eigen::Vector3d t_imu(0.0, 0.0, 0.0);
Eigen::Vector3d t_arm(-0.19, 0.0, 0.02);
Eigen::Quaterniond q_imu;
ros::Rate rate(15);
ros::Time time_prev, time_now;
time_prev = ros::Time::now();
while(ros::ok()) {
ros::spinOnce();
time_now = ros::Time::now();
dt = (time_now - time_prev).toSec();
time_prev = time_now;
// Compute Rotation
q_imu = w_imu.getQuaternionForAngularChange(dt);
q = q * q_imu;
// Compute Translation
t_imu = v_wheel.getRotationArm()*v_wheel.getTranslation() - q_imu.toRotationMatrix()*t_arm + t_arm;
t_new = t + q.toRotationMatrix()*t_imu;
t_vel = (t_new - t)/dt;
t = t_new;
setPose(t, q, t_new);
pub_data.publish(odometry);
rate.sleep();
}
};
示例12: update_arrows
void update_arrows() {
geometry_msgs::Point origin, arrow_x_tip, arrow_y_tip, arrow_z_tip;
Eigen::Matrix3d R;
Eigen::Quaterniond quat;
quat.x() = g_stamped_pose.pose.orientation.x;
quat.y() = g_stamped_pose.pose.orientation.y;
quat.z() = g_stamped_pose.pose.orientation.z;
quat.w() = g_stamped_pose.pose.orientation.w;
R = quat.toRotationMatrix();
Eigen::Vector3d x_vec, y_vec, z_vec;
double veclen = 0.2; //make the arrows this long
x_vec = R.col(0) * veclen;
y_vec = R.col(1) * veclen;
z_vec = R.col(2) * veclen;
//update the arrow markers w/ new pose:
origin = g_stamped_pose.pose.position;
arrow_x_tip = origin;
arrow_x_tip.x += x_vec(0);
arrow_x_tip.y += x_vec(1);
arrow_x_tip.z += x_vec(2);
arrow_marker_x.points.clear();
arrow_marker_x.points.push_back(origin);
arrow_marker_x.points.push_back(arrow_x_tip);
arrow_marker_x.header = g_stamped_pose.header;
arrow_y_tip = origin;
arrow_y_tip.x += y_vec(0);
arrow_y_tip.y += y_vec(1);
arrow_y_tip.z += y_vec(2);
arrow_marker_y.points.clear();
arrow_marker_y.points.push_back(origin);
arrow_marker_y.points.push_back(arrow_y_tip);
arrow_marker_y.header = g_stamped_pose.header;
arrow_z_tip = origin;
arrow_z_tip.x += z_vec(0);
arrow_z_tip.y += z_vec(1);
arrow_z_tip.z += z_vec(2);
arrow_marker_z.points.clear();
arrow_marker_z.points.push_back(origin);
arrow_marker_z.points.push_back(arrow_z_tip);
arrow_marker_z.header = g_stamped_pose.header;
}
示例13: main
int main() {
//-> create and fill synthetic data
int n_params = 7;
Eigen::VectorXd u(n_params);
Eigen::MatrixXd pa, pb;
create_data(pa, pb);
// <-
// -> cost function
CMAES::cost_type fcost = [&](double *params, int n_params) {
Eigen::Quaterniond q = Eigen::Quaterniond(params[0], params[1], params[2], params[3]).normalized();
Eigen::Vector3d s = Eigen::Vector3d(params[4], params[5], params[6]).cwiseAbs();
params[0] = q.w();
params[1] = q.x();
params[2] = q.y();
params[3] = q.z();
params[4] = s(0);
params[5] = s(1);
params[6] = s(2);
Eigen::Matrix3d rotation = q.toRotationMatrix();
Eigen::Matrix3d scale = s.asDiagonal();
Eigen::MatrixXd y = rotation*scale*pa;
double cost = (pb - y).squaredNorm();
return cost;
};
CMAES::Engine cmaes;
Eigen::VectorXd x0(n_params);
x0 << 1, 0, 0, 0, 1, 1, 1;
double c = fcost(x0.data(), n_params);
std::cout << "x0: " << x0.transpose() << " fcost(x0): " << c << std::endl;
double sigma0 = 1;
Solution sol = cmaes.fmin(x0, n_params, sigma0, 6, 999, fcost);
std::cout << "\nf_best: " << sol.f << "\nparams_best: " << sol.params.transpose() << std::endl;
return 0;
}
示例14: compRollPitchCloud
void compRollPitchCloud(pcl::PointCloud<PointXYZGD>::Ptr & cloud, double roll, double pitch)
{
//map to points from perspective of body frame
Eigen::Matrix4f trans;
#ifdef USE_QUATS
trans.block(0,0,3,3) << curQuat.toRotationMatrix().cast<float>();
trans(3,3) = 1;
#else
trans << cos(roll), 0, sin(roll), 0,
sin(roll)*sin(pitch), cos(pitch), -cos(roll)*sin(pitch), 0,
-cos(pitch)*sin(roll), sin(pitch), cos(roll)*cos(pitch), 0,
0, 0, 0, 1;
#endif
//TODO: add translation
//cout << trans << endl << endl;
pcl::transformPointCloud(*cloud, *cloud_temp, trans);
*cloud = *cloud_temp;
}
示例15: laserOdometryHandler
void laserOdometryHandler(const nav_msgs::Odometry::ConstPtr& laserOdometry)
{
//timeLaserOdometry = laserOdometry->header.stamp.toSec();
double transformSum[6];
double roll, pitch, yaw;
geometry_msgs::Quaternion geoQuat = laserOdometry->pose.pose.orientation;
//tf::Matrix3x3(tf::Quaternion(geoQuat.z, -geoQuat.x, -geoQuat.y, geoQuat.w)).getRPY(roll, pitch, yaw);
// Get 4x4 Roation Matrix
Eigen::Quaterniond eigenQuat = Eigen::Quaternion<double>(geoQuat.w, geoQuat.x, geoQuat.y, geoQuat.z);
Eigen::Matrix3d eigenRot = eigenQuat.toRotationMatrix();
Eigen::Matrix4d eigenRot4 = Eigen::Matrix4d::Identity();
eigenRot4(0,0) = eigenRot(0,0);
eigenRot4(1,0) = eigenRot(2,0);
eigenRot4(2,0) = eigenRot(2,0);
eigenRot4(0,1) = eigenRot(0,1);
eigenRot4(1,1) = eigenRot(2,1);
eigenRot4(2,1) = eigenRot(2,1);
eigenRot4(0,2) = eigenRot(0,2);
eigenRot4(1,2) = eigenRot(2,2);
eigenRot4(2,2) = eigenRot(2,2);
// Get translation matrix
Eigen::Affine3d trans(Eigen::Translation3d(
laserOdometry->pose.pose.position.x,
laserOdometry->pose.pose.position.y,
laserOdometry->pose.pose.position.z));
sensorTransform = trans.matrix();
sensorTransform *= eigenRot4;
ROS_INFO_STREAM(sensorTransform);
}