本文整理汇总了C++中eigen::Quaternionf::w方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaternionf::w方法的具体用法?C++ Quaternionf::w怎么用?C++ Quaternionf::w使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Quaternionf
的用法示例。
在下文中一共展示了Quaternionf::w方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: q
bool
VirtualTrackball::mouseMoved ( const MouseEvent* event )
{
if ( !event->isLeftButtonPressed() ) return false;
const Eigen::Vector3f p0 = this->_oldp;
const Eigen::Vector3f p1 = this->project_on_sphere ( event->x(), event->y() );
this->_oldp = p1;
if ( ( p0 - p1 ).norm() < this->_eps ) return false; // do nothing
//何か間違ってそうなので訂正してみる
float radian = std::acos( p0.dot ( p1 ) )*0.5;
const float cost = std::cos(radian);
const float sint = std::sin(radian);
//const float cost = p0.dot ( p1 );
//const float sint = std::sqrt ( 1 - cost * cost );
const Eigen::Vector3f axis = p0.cross ( p1 ).normalized();
const Eigen::Quaternionf q ( -cost, sint * axis.x(), sint * axis.y(), sint * axis.z() );
if( ( q.x()!=q.x() )|| ( q.y()!=q.y() )|| ( q.z()!=q.z() )|| ( q.w()!=q.w() ) ) return false;
/*
Eigen::Vector3f bmin , bmax;
Mesh mesh;
mesh = this->_model.getMesh();
mesh.getBoundingBox(bmin,bmax);
Eigen::Vector3f mc = (bmin + bmax)*0.5;
Eigen::Vector3f c = Eigen::Matrix3f(q) * ( this->_model.getCamera().getCenter() - mc ) + mc ;
this->_model.setCameraPosition(c.x(),c.y(),c.z());*/
//this->_model.addRotation ( q );
return true;
}
示例2: getQuaternion
Eigen::Quaternionf AdafruitWidget::getQuaternion()
{
Eigen::Quaternionf quat = myIMU->returnPose();
QString label = QString("%1 / %2 / %3 / %4").arg(quat.w()).arg(quat.x()).arg(quat.y()).arg(quat.z());
ui->label_Quaternion->setText(label);
return myIMU->returnPose();
}
示例3: addInvisibleMeshMarkerControl
void UrdfModelMarker::addInvisibleMeshMarkerControl(visualization_msgs::InteractiveMarker &int_marker, boost::shared_ptr<const Link> link, const std_msgs::ColorRGBA &color){
visualization_msgs::InteractiveMarkerControl control;
// ps.pose = UrdfPose2Pose(link->visual->origin);
visualization_msgs::Marker marker;
//if (use_color) marker.color = color;
marker.type = visualization_msgs::Marker::CYLINDER;
double scale=0.01;
marker.scale.x = scale;
marker.scale.y = scale * 1;
marker.scale.z = scale * 40;
marker.color = color;
//marker.pose = stamped.pose;
//visualization_msgs::InteractiveMarkerControl control;
boost::shared_ptr<Joint> parent_joint = link->parent_joint;
Eigen::Vector3f origin_x(0,0,1);
Eigen::Vector3f dest_x(parent_joint->axis.x, parent_joint->axis.y, parent_joint->axis.z);
Eigen::Quaternionf qua;
qua.setFromTwoVectors(origin_x, dest_x);
marker.pose.orientation.x = qua.x();
marker.pose.orientation.y = qua.y();
marker.pose.orientation.z = qua.z();
marker.pose.orientation.w = qua.w();
control.markers.push_back( marker );
control.interaction_mode = visualization_msgs::InteractiveMarkerControl::BUTTON;
control.always_visible = true;
int_marker.controls.push_back(control);
return;
}
示例4: m
/*
* Gets the current rotation matrix.
*
* Returns a pointer to the consecutive values that are used as the elements
* of a rotation matrix. The elements are specified in column order. That is,
* if we have 16 elements and we are specifying a 4 x 4 matrix, then the first
* 4 elements represent the first column, and so on.
*
* The actual form of the rotation matrix is specified in HW3 notes. All we
* need to do is get the current rotation quaternion and translate it to
* matrix form.
*/
float *get_rotation_matrix() {
Eigen::Quaternionf q = get_current_rotation();
float qs = q.w();
float qx = q.x();
float qy = q.y();
float qz = q.z();
float *matrix = new float[16];
MatrixXf m(4, 4);
m <<
1 - 2 * qy * qy - 2 * qz * qz, 2 * (qx * qy - qz * qs),
2 * (qx * qz + qy * qs), 0,
2 * (qx * qy + qz * qs), 1 - 2 * qx * qx - 2 * qz * qz,
2 * (qy * qz - qx * qs), 0,
2 * (qx * qz - qy * qs), 2 * (qy * qz + qx * qs),
1 - 2 * qx * qx - 2 * qy * qy, 0,
0, 0, 0, 1;
// Manually copy eigen data into float array, otherwise we run into
// memory issues
int count = 0;
for (int col = 0; col < 4; col++) {
for (int row = 0; row < 4; row++) {
matrix[count] = m(row, col);
count++;
}
}
return matrix;
}
示例5: getForcedTfFrame
bool CommandSubscriber::getForcedTfFrame(Eigen::Affine3f & result) const
{
tf::StampedTransform transform;
try
{
m_tf_listener.lookupTransform(m_forced_tf_frame_reference,m_forced_tf_frame_name,ros::Time(0),transform);
}
catch (tf::TransformException ex)
{
ROS_ERROR("kinfu: hint was forced by TF, but retrieval failed because: %s",ex.what());
return false;
}
Eigen::Vector3f vec;
vec.x() = transform.getOrigin().x();
vec.y() = transform.getOrigin().y();
vec.z() = transform.getOrigin().z();
Eigen::Quaternionf quat;
quat.x() = transform.getRotation().x();
quat.y() = transform.getRotation().y();
quat.z() = transform.getRotation().z();
quat.w() = transform.getRotation().w();
result.linear() = Eigen::AngleAxisf(quat).matrix();
result.translation() = vec;
return true;
}
示例6: makeJointMarker
void makeJointMarker(std::string jointName)
{
boost::shared_ptr<const urdf::Joint> targetJoint = huboModel.getJoint(jointName);
// The marker must be created in the parent frame so you don't get feedback when you move it
visualization_msgs::InteractiveMarker marker;
marker.scale = .125;
marker.name = jointName;
marker.header.frame_id = targetJoint->parent_link_name;
geometry_msgs::Pose controlPose = hubo_motion_ros::toPose( targetJoint->parent_to_joint_origin_transform);
marker.pose = controlPose;
visualization_msgs::InteractiveMarkerControl control;
Eigen::Quaternionf jointAxis;
Eigen::Vector3f axisVector = hubo_motion_ros::toEVector3(targetJoint->axis);
jointAxis.setFromTwoVectors(Eigen::Vector3f::UnitX(), axisVector);
control.orientation.w = jointAxis.w();
control.orientation.x = jointAxis.x();
control.orientation.y = jointAxis.y();
control.orientation.z = jointAxis.z();
control.always_visible = true;
control.interaction_mode = visualization_msgs::InteractiveMarkerControl::ROTATE_AXIS;
control.orientation_mode = visualization_msgs::InteractiveMarkerControl::INHERIT;
marker.controls.push_back(control);
gIntServer->insert(marker);
gIntServer->setCallback(marker.name, &processFeedback);
}
示例7: srvGetPlane
bool CObjTreePlugin::srvGetPlane(srs_env_model::GetPlane::Request &req, srs_env_model::GetPlane::Response &res)
{
const objtree::Object *object = m_octree.object(req.object_id);
//Object hasn't been found
if(!object) return true;
if(object->type() != objtree::Object::PLANE) return true;
const objtree::Plane *plane = (const objtree::Plane*)object;
res.plane.id = req.object_id;
res.plane.pose.position.x = plane->pos().x;
res.plane.pose.position.y = plane->pos().y;
res.plane.pose.position.z = plane->pos().z;
//Quaternion from normal
Eigen::Vector3f normal(plane->normal().x, plane->normal().y, plane->normal().z);
Eigen::Quaternionf q;
q.setFromTwoVectors(upVector, normal.normalized());
res.plane.pose.orientation.x = q.x();
res.plane.pose.orientation.y = q.y();
res.plane.pose.orientation.z = q.z();
res.plane.pose.orientation.w = q.w();
res.plane.scale.x = plane->boundingMax().x-plane->boundingMin().x;
res.plane.scale.y = plane->boundingMax().y-plane->boundingMin().y;
res.plane.scale.z = plane->boundingMax().z-plane->boundingMin().z;
return true;
}
示例8: reset
void EKFGyroAcc::reset(Eigen::Quaternionf att)
{
this->x.setZero();
this->x(0, 0) = att.w();
this->x(1, 0) = att.x();
this->x(2, 0) = att.y();
this->x(3, 0) = att.z();
}
示例9: on_pushButton_Quat_clicked
void PlayWindow::on_pushButton_Quat_clicked()
{
Eigen::Quaternionf cal = ada->GetQuat();
ui->label_W->setText(QString::number(cal.w()));
ui->label_X->setText(QString::number(cal.x()));
ui->label_Y->setText(QString::number(cal.y()));
ui->label_Z->setText(QString::number(cal.z()));
if (ui->checkBox_Save->isChecked())
{
QFile file(ui->lineEdit_Path->text().append("Adafruit Results ").append(QDateTime::currentDateTime().toString()));
file.open(QFile::ReadWrite);
QString result = QString("%1 %2 %3 %4").arg(cal.w()).arg(cal.x()).arg(cal.y()).arg(cal.z());
file.write(result.toUtf8());
file.close();
}
return;
}
示例10: segment
// Callback function for "segment_plans" service
bool segment (segment_plans_objects::PlantopSegmentation::Request &req,
segment_plans_objects::PlantopSegmentation::Response &res) {
cout << "Query received !" << endl;
if (current_cloud->empty()) {
res.result = 1;
cout << "Error : segment_plans_objects : no current cloud" << endl;
return false;
}
cout << "Segmenting..." << endl;
res.result = 4;
if (segmenter.segment_plans (current_cloud) == 0)
res.result = 2;
else if (segmenter.segment_clusters (current_cloud) == 0)
res.result = 3;
else if (segmenter.segment_rgb (current_rgb) == 0)
res.result = 3;
cout << "Segmentation done." << endl;
// TODO Remplir le header pour la pose de la table
Eigen::Vector3f t = segmenter.get_prefered_plan_translation ();
res.table.pose.header = current_cloud->header;
res.table.pose.pose.position.x = t(0);
res.table.pose.pose.position.y = t(1);
res.table.pose.pose.position.z = t(2);
Eigen::Quaternionf q = segmenter.get_prefered_plan_orientation ();
// Be carefull here, eigen quaternion ordering is : w, x, y, z
// while ROS is : x, y, z, w
res.table.pose.pose.orientation.x = q.x();
res.table.pose.pose.orientation.y = q.y();
res.table.pose.pose.orientation.z = q.z();
res.table.pose.pose.orientation.w = q.w();
Eigen::Vector4f min, max;
min = segmenter.get_prefered_plan_min ();
max = segmenter.get_prefered_plan_max ();
res.table.x_min = min(0);
res.table.x_max = max(0);
res.table.y_min = min(1);
res.table.y_max = max(1);
for (size_t i=0; i < segmenter.get_num_clusters(); ++i) {
sensor_msgs::PointCloud2 tmp;
pcl::toROSMsg(*(segmenter.get_cluster(i)), tmp);
res.clusters.push_back(tmp);
}
for (size_t i=0; i < segmenter.get_num_rgbs(); ++i) {
cv_bridge::CvImagePtr cv_ptr (new cv_bridge::CvImage);
//cv_ptr->header = ; TODO fill the header with current image header
cv_ptr->encoding = enc::BGR8;
cv_ptr->image = *(segmenter.get_rgb_cluster(i));
res.cluster_images.push_back(*cv_ptr->toImageMsg());
}
return true;
}
示例11: makeQuaternionFromVector
void ImuDeadReckon::makeQuaternionFromVector( Eigen::Vector3f& inVec, Eigen::Quaternionf& outQuat )
{
float phi = inVec.norm();
Eigen::Vector3f u = inVec / phi; // u is a unit vector
outQuat.vec() = u * sin( phi / 2.0 );
outQuat.w() = cos( phi / 2.0 );
//outQuat = Eigen::Quaternionf( 1.0, 0., 0., 0. );
}
示例12: J
// This formula comes from Sebastian O.H. Madgwick's 2010 paper:
// "An efficient orientation filter for inertial and inertial/magnetic sensor arrays"
// https://www.samba.org/tridge/UAV/madgwick_internal_report.pdf
void
psmove_alignment_compute_objective_jacobian(
const Eigen::Quaternionf &q, const Eigen::Vector3f &d, Eigen::Matrix<float, 4, 3> &J)
{
/*
* The Jacobian of a function is a matrix of partial derivatives that relates rates of changes in inputs to outputs
*
* In this case the inputs are the components of the quaternion q (qw, qx, qy, and qz)
* and the outputs are the components of the error vector f(fx, fy, fz)
* Where f= q^-1*[0 dx dy dz]*q - s, d= initial field vector, s= target field vector
*
* Since there are 4 input vars (q1,q2,q3,q4) and 3 output vars (fx, fy, fz)
* The Jacobian is a 3x4 matrix that looks like this:
*
* | df_x/dq_1 df_x/dq_2 df_x/dq_3 df_x/dq_4 |
* | df_y/dq_1 df_y/dq_2 df_y/dq_3 df_y/dq_4 |
* | df_z/dq_1 df_z/dq_2 df_z/dq_3 df_z/dq_4 |
*/
const float two_dxq1 = 2.f*d.x()*q.w();
const float two_dxq2 = 2.f*d.x()*q.x();
const float two_dxq3 = 2.f*d.x()*q.y();
const float two_dxq4 = 2.f*d.x()*q.z();
const float two_dyq1 = 2.f*d.y()*q.w();
const float two_dyq2 = 2.f*d.y()*q.x();
const float two_dyq3 = 2.f*d.y()*q.y();
const float two_dyq4 = 2.f*d.y()*q.z();
const float two_dzq1 = 2.f*d.z()*q.w();
const float two_dzq2 = 2.f*d.z()*q.x();
const float two_dzq3 = 2.f*d.z()*q.y();
const float two_dzq4 = 2.f*d.z()*q.z();
J(0, 0) = two_dyq4 - two_dzq3; J(0, 1) = -two_dxq4 + two_dzq2; J(0, 2) = two_dxq3 - two_dyq2;
J(1, 0) = two_dyq3 + two_dzq4; J(1, 1) = two_dxq3 - 2.f*two_dyq2 + two_dzq1; J(1, 2) = two_dxq4 - two_dyq1 - 2.f*two_dzq2;
J(2, 0) = -2.f*two_dxq3 + two_dyq2 - two_dzq1; J(2, 1) = two_dxq2 + two_dzq4; J(2, 2) = two_dxq1 + two_dyq4 - 2.f*two_dzq3;
J(3, 0) = -2.f*two_dxq4 + two_dyq1 + two_dzq2; J(3, 1) = -two_dxq1 - 2.f*two_dyq4 + two_dzq3; J(3, 2) = two_dxq2 + two_dyq3;
}
示例13: main
int main( int argc, char* argv[] ) {
//
Eigen::Vector3f trans;
Eigen::Quaternionf q;
double a, b, c;
std::string gOriginalFile;
int v;
while( (v=getopt(argc,argv,"x:y:z:r:p:q:n:a:b:c:f:h")) != -1 ) {
switch(v) {
case 'f': { gOriginalFile.assign(optarg); } break;
case 'x': { trans(0) = atof(optarg); } break;
case 'y': { trans(1) = atof(optarg); } break;
case 'z': { trans(2) = atof(optarg); } break;
case 'r': { q.x() = atof(optarg); } break;
case 'p': { q.y() = atof(optarg); } break;
case 'q': { q.z() = atof(optarg); } break;
case 'n': { q.w() = atof(optarg); } break;
case 'a': { a = atof(optarg); } break;
case 'b': { b = atof(optarg); } break;
case 'c': { c = atof(optarg); } break;
}
}
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("Viz"));
viewer->initCameraParameters ();
viewer->addCoordinateSystem(0.2);
// Add pointcloud
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud( new pcl::PointCloud<pcl::PointXYZRGBA>() );
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr table( new pcl::PointCloud<pcl::PointXYZRGBA>() );
pcl::io::loadPCDFile<pcl::PointXYZRGBA> (gOriginalFile, *cloud);
pcl::io::loadPCDFile<pcl::PointXYZRGBA> ("data_july_18/table_points.pcd", *table);
viewer->addPointCloud( cloud, "cloud_original");
viewer->addPointCloud( table, "table");
// Add point
pcl::PointXYZ cp;
cp.x = trans(0); cp.y = trans(1); cp.z = trans(2);
viewer->addSphere( cp, 0.005, "sphere" );
// Add cube
viewer->addCube( trans, q, 2*a,2*b,2*c);
while (!viewer->wasStopped ()) {
viewer->spinOnce (100);
boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}
}
示例14: addCoordinateFrame
void addCoordinateFrame (geometry_msgs::Pose pose) {
cloud_viewer.addCoordinateSystem (0.5);
Eigen::Vector3f t;
t(0) = pose.position.x;
t(1) = pose.position.y;
t(2) = -pose.position.z; // PCL seems to have a strange Z axis
Eigen::Quaternionf q;
q.x() = pose.orientation.x;
q.y() = pose.orientation.y;
q.z() = pose.orientation.z;
q.w() = pose.orientation.w;
Eigen::Matrix3f R = q.toRotationMatrix();
Eigen::Vector3f r = R.eulerAngles(0, 1, 2);
Eigen::Affine3f A;
pcl::getTransformation (t(0), t(1), t(2), r(0), r(1), r(2), A);
cloud_viewer.addCoordinateSystem (0.2, A);
}
示例15: cameraInfoCallback
void ImageMessageListener::cameraInfoCallback(const sensor_msgs::CameraInfoConstPtr& msg) {
cerr << "got camera matrix for topic: " << _camera_info_topic << endl;
if (_listener) {
char buffer[1024];
buffer[0] = 0;
tf::StampedTransform transform;
try{
_listener->waitForTransform(_base_link_frame_id, msg->header.frame_id,
msg->header.stamp,
ros::Duration(0.5) );
_listener->lookupTransform (_base_link_frame_id, msg->header.frame_id,
msg->header.stamp,
transform);
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
return;
}
Eigen::Quaternionf q;
q.x() = transform.getRotation().x();
q.y() = transform.getRotation().y();
q.z() = transform.getRotation().z();
q.w() = transform.getRotation().w();
_camera_offset.linear()=q.toRotationMatrix();
_camera_offset.translation()=Eigen::Vector3f(transform.getOrigin().x(),
transform.getOrigin().y(),
transform.getOrigin().z());
}
int i;
for (int r=0; r<3; r++)
for (int c=0; c<3; c++, i++)
_K(r,c) = msg->K[i];
_K.row(2) << 0,0,1;
_has_camera_matrix = true;
_camera_info_subscriber.shutdown();
}