一、addCoordinateSystem在可视化窗口里添加坐标系
1、函数原型
void pcl::visualization::PCLVisualizer::addCoordinateSystem ( double scale,
const Eigen::Affine3f & t,
const std::string & id = "reference",
int viewport = 0
)
2、参数
scale:坐标轴的缩放比例,默认为1
t:从雷达坐标系原点到目标坐标系的变换矩阵
id:目标坐标系名称
viewport:显示端口
二、代码块的简单实现
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <pcl/common/common_headers.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
using namespace std;
int main(int argc, char** argv)
{
//x、y、z表示目标坐标系3个方向的法向量
Eigen::Vector3d y;
Eigen::Vector3d z;
Eigen::Vector3d x;
//u、v、w表示原点坐标系3个方向的法向量
Eigen::Vector3d u(1, 0, 0);
Eigen::Vector3d v(0, 1, 0);
Eigen::Vector3d w(0, 0, 1);
//求旋转矩阵
Eigen::Matrix3d Rotation;
Rotation = CoordinateRotation(u, v, w, x, y, z);
//旋转矩阵转欧拉角
Eigen::Vector3d euler_angles_3 = Rotation.eulerAngles(2, 1, 0);
cout << "->欧拉角Rz:" << euler_angles_3[0] << endl;
cout << "->欧拉角Ry:" << euler_angles_3[1] << endl;
cout << "->欧拉角Rx:" << euler_angles_3[2] << endl;
Eigen::Affine3f transform = Eigen::Affine3f::Identity();//初始化变换矩阵为单位矩阵
// 在 X 轴上定义一个 1米的平移.
transform.translation() << 1.0, 0.0, 0.0;
// 旋转;
transform.rotate(Eigen::AngleAxisf(pcl::deg2rad(euler_angles_3[2]), Eigen::Vector3f::UnitX()));
transform.rotate(Eigen::AngleAxisf(pcl::deg2rad(euler_angles_3[1]), Eigen::Vector3f::UnitY()));
transform.rotate(Eigen::AngleAxisf(pcl::deg2rad(euler_angles_3[0]), Eigen::Vector3f::UnitZ()));
// 可视化
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer->addCoordinateSystem(0.5, "sample cloud", 0);
viewer->addCoordinateSystem(0.5, transform, "CarriagePos");
return (0);
}