本文整理汇总了C++中eigen::Affine3d类的典型用法代码示例。如果您正苦于以下问题:C++ Affine3d类的具体用法?C++ Affine3d怎么用?C++ Affine3d使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Affine3d类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TestFind3DAffineTransform
void TestFind3DAffineTransform(){
// Create datasets with known transform
Eigen::Matrix3Xd in(3, 100), out(3, 100);
Eigen::Quaternion<double> Q(1, 3, 5, 2);
Q.normalize();
Eigen::Matrix3d R = Q.toRotationMatrix();
double scale = 2.0;
for (int row = 0; row < in.rows(); row++) {
for (int col = 0; col < in.cols(); col++) {
in(row, col) = log(2*row + 10.0)/sqrt(1.0*col + 4.0) + sqrt(col*1.0)/(row + 1.0);
}
}
Eigen::Vector3d S;
S << -5, 6, -27;
for (int col = 0; col < in.cols(); col++)
out.col(col) = scale*R*in.col(col) + S;
Eigen::Affine3d A = Find3DAffineTransform(in, out);
// See if we got the transform we expected
if ( (scale*R-A.linear()).cwiseAbs().maxCoeff() > 1e-13 ||
(S-A.translation()).cwiseAbs().maxCoeff() > 1e-13)
throw "Could not determine the affine transform accurately enough";
}
示例2: checkTolerance
bool CartesianTrajectoryAction::checkTolerance(Eigen::Affine3d err, cartesian_trajectory_msgs::CartesianTolerance tol) {
if ((tol.position.x > 0.0) && (fabs(err.translation().x()) > tol.position.x)) {
return false;
}
if ((tol.position.y > 0.0) && (fabs(err.translation().y()) > tol.position.y)) {
return false;
}
if ((tol.position.z > 0.0) && (fabs(err.translation().z()) > tol.position.z)) {
return false;
}
Eigen::AngleAxisd ax(err.rotation());
Eigen::Vector3d rot = ax.axis() * ax.angle();
if ((tol.rotation.x > 0.0) && (fabs(rot(0)) > tol.rotation.x)) {
return false;
}
if ((tol.rotation.y > 0.0) && (fabs(rot(1)) > tol.rotation.y)) {
return false;
}
if ((tol.rotation.z > 0.0) && (fabs(rot(2)) > tol.rotation.z)) {
return false;
}
return true;
}
示例3: srvSetHuboObjectPose
bool srvSetHuboObjectPose(HuboApplication::SetHuboObjectPose::Request &req,
HuboApplication::SetHuboObjectPose::Response &res)
{
bool response = true;
Eigen::Affine3d tempPose;
Eigen::Isometry3d armPose;
tf::poseMsgToEigen(req.Target, tempPose);
if (tempPose(0,3) != tempPose(0,3)) // null check
{
res.Success = false;
return false;
}
armPose = tempPose.matrix();
//std::cerr << tempPose.matrix() << std::endl;
m_Manip.setControlMode(OBJECT_POSE);
m_Manip.setAngleMode(QUATERNION);
m_Manip.setPose(armPose, req.ObjectIndex);
m_Manip.sendCommand();
//std::cerr << armPose.matrix() << std::endl;
res.Success = response;
return response;
}
示例4: srvSetHuboArmPose
bool srvSetHuboArmPose(HuboApplication::SetHuboArmPose::Request &req,
HuboApplication::SetHuboArmPose::Response &res)
{
bool response = true;
Eigen::Affine3d tempPose;
Eigen::Isometry3d armPose;
tf::poseMsgToEigen(req.Target, tempPose);
if (tempPose(0,3) != tempPose(0,3)) // null check
{
res.Success = false;
return false;
}
//std::cerr << tempPose.matrix() << std::endl;
armPose = tempPose.matrix();
//armPose.translation() = tempPose.translation();
//armPose.linear() = tempPose.rotation();
//std::cerr << armPose.matrix() << std::endl;
m_Manip.setControlMode(END_EFFECTOR);
m_Manip.setAngleMode(QUATERNION);
m_Manip.setPose(armPose, req.ArmIndex);
m_Manip.sendCommand();
//std::cerr << armPose.matrix() << std::endl;
res.Success = response;
return response;
}
示例5: updateCollisionObjectPose
void MotionPlanningFrame::updateCollisionObjectPose(bool update_marker_position)
{
QList<QListWidgetItem *> sel = ui_->collision_objects_list->selectedItems();
if (sel.empty())
return;
planning_scene_monitor::LockedPlanningSceneRW ps = planning_display_->getPlanningSceneRW();
if (ps)
{
collision_detection::CollisionWorld::ObjectConstPtr obj = ps->getWorld()->getObject(sel[0]->text().toStdString());
if (obj && obj->shapes_.size() == 1)
{
Eigen::Affine3d p;
p.translation()[0] = ui_->object_x->value();
p.translation()[1] = ui_->object_y->value();
p.translation()[2] = ui_->object_z->value();
p = Eigen::Translation3d(p.translation()) *
(Eigen::AngleAxisd(ui_->object_rx->value(), Eigen::Vector3d::UnitX()) *
Eigen::AngleAxisd(ui_->object_ry->value(), Eigen::Vector3d::UnitY()) *
Eigen::AngleAxisd(ui_->object_rz->value(), Eigen::Vector3d::UnitZ()));
ps->getWorldNonConst()->moveShapeInObject(obj->id_, obj->shapes_[0], p);
planning_display_->queueRenderSceneGeometry();
// Update the interactive marker pose to match the manually introduced one
if (update_marker_position && scene_marker_)
{
Eigen::Quaterniond eq(p.rotation());
scene_marker_->setPose(Ogre::Vector3(ui_->object_x->value(), ui_->object_y->value(), ui_->object_z->value()),
Ogre::Quaternion(eq.w(), eq.x(), eq.y(), eq.z()), "");
}
}
}
}
示例6: copyPointCloud
void
RGBID_SLAM::VisualizationManager::getPointCloud(pcl::PointCloud<pcl::PointXYZRGB>::Ptr whole_point_cloud)
{
IdToPoseMap::iterator id2pose_map_it;
IdToPointCloudMap::const_iterator id2pointcloud_map_it;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr aux_point_cloud;
aux_point_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>);
for (id2pose_map_it = id2pose_map_.begin();
id2pose_map_it != id2pose_map_.end();
id2pose_map_it++)
{
int kf_id = (*id2pose_map_it).first;
Eigen::Affine3d pose = (*id2pose_map_it).second;
id2pointcloud_map_it = id2pointcloud_map_.find(kf_id);
if (id2pointcloud_map_it != id2pointcloud_map_.end())
{
aux_point_cloud->clear();
copyPointCloud((*id2pointcloud_map_it).second, aux_point_cloud);
(*id2pointcloud_map_it).second->clear();
alignPointCloud(aux_point_cloud, pose.linear(), pose.translation());
*whole_point_cloud += *aux_point_cloud;
}
}
}
示例7: transformTFToEigen
TEST(TFEigenConversions, tf_eigen_transform)
{
tf::Transform t;
tf::Quaternion tq;
tq[0] = gen_rand(-1.0,1.0);
tq[1] = gen_rand(-1.0,1.0);
tq[2] = gen_rand(-1.0,1.0);
tq[3] = gen_rand(-1.0,1.0);
tq.normalize();
t.setOrigin(tf::Vector3(gen_rand(-10,10),gen_rand(-10,10),gen_rand(-10,10)));
t.setRotation(tq);
Eigen::Affine3d k;
transformTFToEigen(t,k);
for(int i=0; i < 3; i++)
{
ASSERT_NEAR(t.getOrigin()[i],k.matrix()(i,3),1e-6);
for(int j=0; j < 3; j++)
{
ASSERT_NEAR(t.getBasis()[i][j],k.matrix()(i,j),1e-6);
}
}
for (int col = 0 ; col < 3; col ++)
ASSERT_NEAR(k.matrix()(3, col), 0, 1e-6);
ASSERT_NEAR(k.matrix()(3,3), 1, 1e-6);
}
示例8: toIsometry
Eigen::Isometry3d toIsometry(const Eigen::Affine3d& pose)
{
Eigen::Isometry3d p(pose.rotation());
p.translation() = pose.translation();
return p;
}
示例9: fabs
bool kinematic_constraints::VisibilityConstraint::equal(const KinematicConstraint &other, double margin) const
{
if (other.getType() != type_)
return false;
const VisibilityConstraint &o = static_cast<const VisibilityConstraint&>(other);
if (target_frame_id_ == o.target_frame_id_ && sensor_frame_id_ == o.sensor_frame_id_ &&
cone_sides_ == o.cone_sides_ && sensor_view_direction_ == o.sensor_view_direction_)
{
if (fabs(max_view_angle_ - o.max_view_angle_) > margin ||
fabs(target_radius_ - o.target_radius_) > margin)
return false;
Eigen::Affine3d diff = sensor_pose_.inverse() * o.sensor_pose_;
if (diff.translation().norm() > margin)
return false;
if (!diff.rotation().isIdentity(margin))
return false;
diff = target_pose_.inverse() * o.target_pose_;
if (diff.translation().norm() > margin)
return false;
if (!diff.rotation().isIdentity(margin))
return false;
return true;
}
return false;
}
示例10: if
void Irp6pInverseKinematic::updateHook() {
if (port_input_wrist_pose_.read(wrist_pose_) == RTT::NewData) {
Eigen::Affine3d trans;
tf::poseMsgToEigen(wrist_pose_, trans);
port_current_joint_position_.read(local_current_joints_);
inverse_kinematics_single_iteration(local_current_joints_, trans,
&local_desired_joints_);
port_output_joint_position_.write(local_desired_joints_);
} else if (port_input_end_effector_pose_.read(end_effector_pose_)
== RTT::NewData) {
port_tool_.read(tool_msgs_);
Eigen::Affine3d tool;
Eigen::Affine3d trans;
Eigen::Affine3d wrist_pose;
tf::poseMsgToEigen(end_effector_pose_, trans);
tf::poseMsgToEigen(tool_msgs_, tool);
wrist_pose = trans * tool.inverse();
port_current_joint_position_.read(local_current_joints_);
inverse_kinematics_single_iteration(local_current_joints_, wrist_pose,
&local_desired_joints_);
port_output_joint_position_.write(local_desired_joints_);
}
}
示例11:
bool kinematic_constraints::PositionConstraint::equal(const KinematicConstraint &other, double margin) const
{
if (other.getType() != type_)
return false;
const PositionConstraint &o = static_cast<const PositionConstraint&>(other);
if (link_model_ == o.link_model_ && constraint_frame_id_ == o.constraint_frame_id_)
{
if ((offset_ - o.offset_).norm() > margin)
return false;
if (constraint_region_.size() != o.constraint_region_.size())
return false;
for (std::size_t i = 0 ; i < constraint_region_.size() ; ++i)
{
Eigen::Affine3d diff = constraint_region_pose_[i].inverse() * o.constraint_region_pose_[i];
if (diff.translation().norm() > margin)
return false;
if (!diff.rotation().isIdentity(margin))
return false;
if (fabs(constraint_region_[i]->computeVolume() - o.constraint_region_[i]->computeVolume()) >= margin)
return false;
}
return true;
}
return false;
}
示例12: updateTransformations
bool SensorProcessorBase::updateTransformations(const std::string& sensorFrameId,
const ros::Time& timeStamp)
{
try {
transformListener_.waitForTransform(sensorFrameId, mapFrameId_, timeStamp, ros::Duration(1.0));
tf::StampedTransform transformTf;
transformListener_.lookupTransform(mapFrameId_, sensorFrameId, timeStamp, transformTf);
poseTFToEigen(transformTf, transformationSensorToMap_);
transformListener_.lookupTransform(robotBaseFrameId_, sensorFrameId, timeStamp, transformTf); // TODO Why wrong direction?
Eigen::Affine3d transform;
poseTFToEigen(transformTf, transform);
rotationBaseToSensor_.setMatrix(transform.rotation().matrix());
translationBaseToSensorInBaseFrame_.toImplementation() = transform.translation();
transformListener_.lookupTransform(mapFrameId_, robotBaseFrameId_, timeStamp, transformTf); // TODO Why wrong direction?
poseTFToEigen(transformTf, transform);
rotationMapToBase_.setMatrix(transform.rotation().matrix());
translationMapToBaseInMapFrame_.toImplementation() = transform.translation();
return true;
} catch (tf::TransformException &ex) {
ROS_ERROR("%s", ex.what());
return false;
}
}
示例13: q
/*!
* \brief affine3d2UrdfPose converts an Eigen affine 4x4 matrix o represent the pose into a urdf pose
* vparam pose eigen Affine3d pose
* \return urdf pose with position and rotation.
*/
RCS::Pose Affine3d2UrdfPose(const Eigen::Affine3d &pose) {
RCS::Pose p;
p.getOrigin().setX(pose.translation().x());
p.getOrigin().setY(pose.translation().y());
p.getOrigin().setZ(pose.translation().z());
Eigen::Quaterniond q (pose.rotation());
tf::Quaternion qtf(q.x(),q.y(),q.z(),q.w());
//std::cout << "Affine3d2UrdfPose Quaterion = \n" << q.x() << ":" << q.y() << ":" << q.z() << ":" << q.w() << std::endl;
p.setRotation(qtf);
//std::cout << "After Affine3d2UrdfPose Quaterion = \n" << p.getRotation().x() << ":" << p.getRotation().y() << ":" << p.getRotation().z() << ":" << p.getRotation().w() << std::endl;
#if 0
MatrixEXd m = pose.rotation();
Eigen::Quaterniond q = EMatrix2Quaterion(m);
Eigen::Quaterniond q(pose.rotation());
p.getRotation().setX(q.x());
p.getRotation().setY(q.y());
p.getRotation().setZ(q.z());
p.getRotation().setW(q.w());
#endif
return p;
}
示例14: pose_moveTo
void UpperBodyPlanner::pose_moveTo(const std::string &link_name, const Eigen::Affine3d& desired_pose, const int &step_num, std::vector<geometry_msgs::Pose> &pose_sequence) {
Eigen::Affine3d current_pose = kinematic_state->getGlobalLinkTransform(link_name);
Eigen::Quaterniond current_q = Rmat2Quaternion(current_pose.rotation());
Eigen::Quaterniond desired_q = Rmat2Quaternion(desired_pose.rotation());
Eigen::Quaterniond step_q;
std::cout << "**********************************" << std::endl;
std::cout << "end_effector_name is: " << link_name << std::endl;
std::cout << "Current translation is: " << current_pose.translation().transpose() << std::endl;
std::cout << "current rotation is: " << std::endl;
std::cout << current_pose.rotation() << std::endl;
std::cout << "current quaternion is: "<< std::endl;
std::cout << "w = " << current_q.w() << ", x = " << current_q.x() << ", y = " << current_q.y() << ", z = " << current_q.z() << std::endl;
std::cout << "Desired translation is: " << desired_pose.translation().transpose() << std::endl;
std::cout << "Desired rotation is: " << std::endl;
std::cout << desired_pose.rotation() << std::endl;
std::cout << "Desired quaternion is: " << std::endl;
std::cout << "w = " << desired_q.w() << ", x = " << desired_q.x() << ", y = " << desired_q.y() << ", z = " << desired_q.z() << std::endl;
std::cout << "**********************************" << std::endl;
Eigen::Vector3d step_translation_movement = (desired_pose.translation() - current_pose.translation()) / step_num;
for (int i = 0; i < step_num; i++) {
Eigen::Affine3d step_target;
step_target.translation() = current_pose.translation() + (i + 1) * step_translation_movement;
step_q = current_q.slerp((i + 1.0) / step_num, desired_q);
geometry_msgs::Pose target_pose = Eigen2msgPose(step_target.translation(), step_q);
pose_sequence.push_back(target_pose);
}
}
示例15: toTransform
/**
* @brief transform matrix which represents the pose transform as a 4x4
* homogenous matrix
*
* @result 4x4 homogenous transform matrix
*/
Eigen::Affine3d toTransform() const
{
Eigen::Affine3d t;
t = orientation;
t.pretranslate( position );
return t;
}