1.将雷达点云保存为pcd文件
#include
#include
using namespace std;
int main(int argc, char** argv)
{
pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
//加载点云
pcl::io::loadPCDFile(argv[1],*cloud);
//保存点云
pcl::io::savePCDFile("rst.pcd",*cloud);
system("pause");
return 0;
}
主要为下面这句:
pcl::io::savePCDFile("rst.pcd",*cloud);
可视化pcd包
pcl_viewer rst.pcd
2.三维雷达转pcl格式,来自dear陈
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// ros消息接受点云并压缩保存文件
void pointCloudCallback(const sensor_msgs::PointCloud2ConstPtr &msg)
{
//声明PCL点云
pcl::PointCloud::Ptr pointCloud(new pcl::PointCloud);
//转换
pcl::fromROSMsg(*msg, *pointCloud);
//创造一个显示窗口
static pcl::visualization::CloudViewer viewer("123");
//窗口显示点云
viewer.showCloud(pointCloud);
viewer.wasStopped();
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "rs2pcl");
ros::NodeHandle nh;
ros::Subscriber rs_sub = nh.subscribe("/rslidar_points", 1, pointCloudCallback);
ros::spin();
return 0;
}
注:动态更新主要是下面这行static!!!若没有,则不断生成新窗口.
//创造一个显示窗口
static pcl::visualization::CloudViewer viewer("123");
注:其他点云格式转换
sensor_msgs::LaserScan // ROS激光雷达信息
sensor_msgs::PointCloud // ROS点云信息
sensor_msgs::PointCloud2 // ROS点云信息
pcl::PointCloud // PCL点云信息
//sensor_msgs::LaserScan 与sensor_msgs::PointCloud之间的转换
sensor_msgs::LaserScan::ConstPtr& scan_msg;
laser_geometry::LaserProjection projector_;
sensor_msgs::PointCloud laser_point_cloud;
// LaserScan转换到pointcloud2 类型
projector_.projectLaser(*scan_msg,laser_point_cloud);
//sensor_msgs::PointCloud2与 pcl::PointCloud之间的转换
sensor_msgs::PointCloud2 laser_point_cloud;
pcl::PointCloud pclCloud;
pcl::fromROSMsg(laser_point_cloud,pclCloud); // ROS转pcl
pcl::toROSMsg(pclCloud,laser_point_cloud); // pcl转ROS
3.写过欧式聚类,区域生长,直通滤波.
4.静态全局变量也就是static修饰的,在整个.c文件中都可以用
全局变量,也就是没用static修饰的但是写在函数体外,就会存在于整个工程个,其他.c文件通过extern就能调用.
//示例1
#include
using namespace std;
void fn(); //声明函数
static int n; //声明静态全局变量
int main()
{
n = 20; //为n赋初值
cout<
5.从pcd读取三维点云坐标 /home/goocc/test_pcl/1 reading pcd
6.基于opencv,检测按键,依次保存.pcd和.png文件(很坑,需要基于图片).
7.将旋转矩阵,和平移向量,内参,畸变系数保存为.txt
8.pcd转bin(二进制)/home/goocc/test_pcl/pcd2bin
9.检测鼠标,返回图像二维坐标及灰度值
10.LSD提取直线
11.解决跑orb不保存轨迹问题.
查看数据集,确实运行到了最后一帧图像,最终找到问题出在了结束进程的SLAM.Shutdown();函数,具体是在在System.cc中的这两行代码上
if (mpViewer)
pangolin::BindToContext("ORB-SLAM2: Map Viewer");
将这两行代码注释掉之后顺利运行,保存了关键帧路径的txt文件。