源代码中采用的是VLP16激光雷达,它发布的数据在environment里面进行了处理

目标:把16线雷达截取出来一部分,压缩成2维,再z轴上复制堆叠成伪3维

一.接口断裂处:

1.tare_planner_node订阅的"/registered_scan"在yaml里暂时替换成别的=>"/pcl_16to2D_scan"(这个是最后面数据处理完毕后发布的话题)

2.注释掉tare当中不必要的话题订阅(在sensor_coverage_planner_ground.cpp)

// exploration_start_sub_ =//     nh.subscribe(pp_.sub_start_exploration_topic_, 5, &SensorCoveragePlanner3D::ExplorationStartCallback, this);     //这个订阅未被使用registered_scan_sub_ =nh.subscribe(pp_.sub_registered_scan_topic_, 5, &SensorCoveragePlanner3D::RegisteredScanCallback, this);//******三D相机********/registered_scan//EXPL 1.每帧执行pd_.planning_env_的一个操作 => :上传一次机器人位置和pd_.registered_cloud_->cloud_    2. 每5帧上传kepose ==>> 当前机器人位置"keypose_.pose.pose.position;pd_.keypose_.pose.covariance;pd_.cur_keypose_node_ind_" 和  "pd_.keypose_cloud_->cloud_",    // terrain_map_sub_ = nh.subscribe(pp_.sub_terrain_map_topic_, 5, &SensorCoveragePlanner3D::TerrainMapCallback, this);//局部地势/terrain_map//       //EXPL 1.将接收到的点,intensity达到阈值的都赋值给pd_.terrain_collision_cloud_->cloud_->points (只有这件事情)        (这个是局部地势)// terrain_map_ext_sub_ =//     nh.subscribe(pp_.sub_terrain_map_ext_topic_, 5, &SensorCoveragePlanner3D::TerrainMapExtCallback, this);//更大的地势/terrain_map_ext//       //EXPL 1.将接收到的点,intensity达到阈值的都赋值给pd_.terrain_ext_collision_cloud_             (只有这件事情)        (这个是较为全局的地势)state_estimation_sub_ =nh.subscribe(pp_.sub_state_estimation_topic_, 5, &SensorCoveragePlanner3D::StateEstimationCallback, this);//位置估计/state_estimation_at_scan//EXPL 1.跟机器人的位置有关,将位置信息赋值给pd_.initial_position_,(只初始化一次)   2.每次更新yaw(翻译是偏离航线)  3.每次更新机器人位置//MYTODO  地势的都是在   SensorCoveragePlanner3D::UpdateViewPoints()  这个函数里使用;;如果加入2D想要放弃地势变化的话看看怎么改能让这个函数正常工作// coverage_boundary_sub_ =                                                                                               //这3个订阅未被使用//     nh.subscribe(pp_.sub_coverage_boundary_topic_, 1, &SensorCoveragePlanner3D::CoverageBoundaryCallback, this);// viewpoint_boundary_sub_ =//     nh.subscribe(pp_.sub_viewpoint_boundary_topic_, 1, &SensorCoveragePlanner3D::ViewPointBoundaryCallback, this);// nogo_boundary_sub_ =//     nh.subscribe(pp_.sub_nogo_boundary_topic_, 1, &SensorCoveragePlanner3D::NogoBoundaryCallback, this);

3.把kCheckTerrainCollision在yaml里默认改为false(取消地势分析)

二.承接/registered_scan重新发布,重接伤口

完整代码

#include <ros/ros.h>
#include <iostream>
#include <pcl/visualization/cloud_viewer.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>#include <pcl/filters/passthrough.h>
class cloudHandler
{
public:cloudHandler(){pcl_sub = nh.subscribe("/registered_scan", 10, &cloudHandler::cloudCB, this);pcl_pub = nh.advertise<sensor_msgs::PointCloud2>("pcl_16to2D_scan", 1);}void cloudCB(const sensor_msgs::PointCloud2 &input)                                 {pcl::PointCloud<pcl::PointXYZ> cloud;pcl::fromROSMsg(input, cloud);//pcl::PointCloud<pcl::PointXYZ>::Ptr pcloud (new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);pcl::PassThrough<pcl::PointXYZ> pass;// 创建滤波器对象pcl::copyPointCloud(cloud, *pcloud);pass.setInputCloud (pcloud);//设置输入点云pass.setFilterFieldName ("z");//滤波字段名被设置为Z轴方向pass.setFilterLimits (0.2, 1.4);//可接受的范围为(0.0,1.0) //pass.setFilterLimitsNegative (true);//设置保留范围内 还是 过滤掉范围内pass.filter (*cloud_filtered); //执行滤波,保存过滤结果在cloud_filtered///*这段将点云z设置为统一值*/for(int i=0;i<cloud_filtered->width;i++){cloud_filtered->points[i].z=0.8;}/*这段给点云复制,多增加立体感beg*/pcl::PointCloud<pcl::PointXYZ> cloud_add;pcl::copyPointCloud(*cloud_filtered, cloud_add);for(int h=0;h<=20;h+=2){for(int i=0;i<cloud_add.width;i++){cloud_add.points[i].z=(float)h/10;}// std::cout<<"cloud_add.points[i].z: "<<(float)h/10<<std::endl;*cloud_filtered+=cloud_add;}/*这段给点云复制,多增加立体感end*/sensor_msgs::PointCloud2 cloud_filtered_pu;pcl::toROSMsg(*cloud_filtered, cloud_filtered_pu);                       //1.数据  2.时间戳cloud_filtered_pu.header.stamp = input.header.stamp;cloud_filtered_pu.header.frame_id = input.header.frame_id;pcl_pub.publish(cloud_filtered_pu);//}
protected:ros::NodeHandle nh;ros::Subscriber pcl_sub;ros::Publisher pcl_pub;
};
main (int argc, char **argv)
{ros::init (argc, argv, "pcl_visualize");cloudHandler handler;ros::spin();return 0;
}

cmakelist.txt

add_executable(3d_to_2d_scan src/3d_to_2d_scan/3d_to_2d_scan.cpp)
target_link_libraries(3d_to_2d_scan ${catkin_LIBRARIES}  ${PCL_LIBRARIES})

三.点云数据的改变过程(实际效果)

图1.上面这个是原点云数据,下面这张由上面这张截出几条线而成

图2.把图1中的下面这张点云压缩到2D

图3.z周上复制堆叠增加立体感

最后再把这个点云"cloud_filtered"发布到"/pcl_16to2D_scan"这个话题中,tare将使用这个话题的数据

sensor_msgs::PointCloud2 cloud_filtered_pu;
pcl::toROSMsg(*cloud_filtered, cloud_filtered_pu);             //1.数据  2.时间戳
cloud_filtered_pu.header.stamp = input.header.stamp;
cloud_filtered_pu.header.frame_id = input.header.frame_id;     //传向的frame
pcl_pub.publish(cloud_filtered_pu);

此时rqt_graph中可见,tare_planner_node不再订阅"/registered_scan",转而订阅"/pcl_16to2D_scan"

Tare_Planner小项目---->2D雷达的数据接口(一)3转2转伪3相关推荐

  1. Tare_Planner小项目---->2D雷达的数据接口(二)gazebo2D雷达

    //***给自己的话***//:tare接受的点云数据id_dense是要设置成false的,不然报错:另外雷达intensity是人为设置成1了,还没尝试过不设置会怎么样,但是如果做现实的数据接口记 ...

  2. 网络小贷风控有哪些数据接口?

    对于网络小贷平台而言,征信和风控是业务发展过程中的重要环节.网络小贷业务主要防范的是欺诈风险和信用风险,诸如借款人通过套现.伪造.冒领冒用.恶意透支等手段进行骗贷.此外,平台与平台之间信息不透明,用户 ...

  3. 【Python 爬虫小项目 01】租房数据

    思路描述: 整体观测:某网后台数据是自动从数据库里抓取的:比如我选中[深圳]-[南山区]-[竹子林],共有250套房源,每页呈现30套房源数据,这30套在每一次点击进去数据都会略有不同. url方面: ...

  4. 简单易上手的vue3.0+ts实战小项目!!附带后台接口

    vue3+Ts项目实战 1.前言 2.项目演示 3.项目介绍 4.配套的node服务 5.vue3+ts的使用心得 1.vue3的使用体会

  5. vue学习项目supermall的数据接口问题

    在网上学习coderwhy老师的vue.js课程,做到supermall的项目时,有些接口已经更新了,获取不到数据.经过多方查询,在github上找到一位能人关于supermall项目自己做的数据接口 ...

  6. 学习笔记10-C语言-小项目-五子棋

    小项目: 需要的数据 1.定义棋盘的二维数组 2.定义变量用于记录下棋的坐标 3.定义角色 @ 黑棋 O 白棋 * 空位业务逻辑: 是否需要对数据初始化 for(;;) {1.清屏.显示棋盘2.落子坐 ...

  7. 计算机主板上的ide,计算机主板上的IDE接口通常是连接什么设备的数据接口?

    CPU与外部存储器交换数据主要是通过主板的IDE接口(以及SCSI扩展卡)和软驱接口进行的,IDE设备是指电脑中通过自己的IDE接口和数据线与主板上的IDE接口连接并进行数据传输的设备,常见的IDE设 ...

  8. SAP ABAP ZIF 实现数据接口的增量查询

    SAP ABAP ZIF 实现数据接口的增量查询 引言: 有一些数据查询接口传输的数据量非常大,能达到百万级甚至千万级以上的数据量,此时的数据包很大,如果一次性传输可能会遇到超时.对方无法处理等问题, ...

  9. visualize python_GitHub - laishenggx/PUP-visualize: Python3可视化雷达PUP数据产品(CINRAD-PUP)...

    PUP-visualize Python3可视化雷达PUP数据产品(CINRAD-PUP) Coder: Lai Sheng @ College of Atmospheric Science, Che ...

最新文章

  1. ASP.NET MVC4中调用WEB API的四个方法
  2. 指针空间的申请与释放
  3. mysql的replace()函数介绍【mysql函数】
  4. 发布一个实体类属性生成小工具,给开发加点料
  5. vb.net 教程 3-1 窗体编程基础 2
  6. OFDM载波间隔_NBloT上行子载波
  7. 工商银行发消息说5星级服务器,工商银行5星级客户多吗?会刷星你也可以..
  8. 【华为OD机试真题 JAVA】叠积木
  9. vue click 跳转外部链接
  10. /proc/config.gz 是什么
  11. 台币nbsp;日元nbsp;没有小数位问题
  12. python通过榛子云短信平台发送短信验证码
  13. lzma打包exe_【原创】手写PE文件,打造史上最小LZMA解压DLL
  14. 很自由的PDF在线转换器
  15. 企业微信内自创建app 获取用户信息问题
  16. 转:让员工的信念跟上组织的发展
  17. spring boot注解@PostConstruct
  18. Idea创建SpringBoot搭建SSM框架项目,支持JSP页面
  19. 网易邮箱服务器怎么注册,按照这个步骤操作,轻松注册自己的邮箱,赶紧收藏吧...
  20. python标识符_python标识符

热门文章

  1. 参数配置详解_基本参数(车身结构)
  2. 【Flutter】【widget】【card】卡片组件的使用和练习代码
  3. XDOJ1036--神奇的盒子
  4. 光伏工商业屋顶 Lora 组网监控方案
  5. google Android 认证测试
  6. matlab画两电荷斥力与距离的图,电磁场大作业一基于MATLAB描绘双静电荷电场线与等势线分布...
  7. ArcGIS API for JavaScript官网解析
  8. Agv、Rgv 车辆控制调度系统开发第六篇-流程控制器
  9. ES6-Promise简介、ES7 新特性及ES8新特性-async和await
  10. 基于FETMX6Q-C核心板的智慧灯杆解决方案