当前位置: 首页 > news >正文

SLAM从入门到精通(3d 点云数据访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        3d 点云设备现在汽车上用的很多。之前3d lidar这种高端传感器,只能被少部分智能汽车使用。后来很多国产厂家也开始研发3d lidar之后,它的价格快速下跌下来,部分3d lidar的价格已经降到了几千元左右,实用性一下子就提升上来了。不管用它来做slam,还是用来检测物体、识别物体、避障检测,都是很方便的。所以,对于slam的同学来说,除了轮速编码器、imu、camera、单线lidar这些传统传感器之外,对多线lidar、深度摄像机一定要多加关注,它们肯定是未来发展的方向。

        和图像主要采用opencv库一样,目前3d lidar数据主要采用的库是pcl。

1、编写pc_node.cpp


#include <ros/ros.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_ros/point_cloud.h>void PointcloudCB(const sensor_msgs::PointCloud2ConstPtr &msg)
{pcl::PointCloud<pcl::PointXYZ> pointCloudIn;pcl::fromROSMsg(*msg, pointCloudIn);int cloudSize = pointCloudIn.points.size();for(int i = 0; i < cloudSize; i++){ROS_INFO("[i=%d] (%.2f, %.2f, %.2f)",i,pointCloudIn.points[i].x,pointCloudIn.points[i].y,pointCloudIn.points[i].z);}
}int main(int argc, char* argv[])
{ros::init(argc, argv, "pc_node");ROS_WARN("pc_node start");ros::NodeHandle nh;ros::Subscriber pc_sub = nh.subscribe("/kinect2/sd/points", 1, PointcloudCB);ros::spin();return 0;
}

        代码不复杂。首先我们创建一个pc_sub订阅器,它订阅了话题/kinect2/sd/points,并且为这个话题准备了回调函数PointcloudCB。在这个回调函数里面,代码对收到的点云数据进行了打印,分别显示它们的x/y/z浮点数值。一般来说,点云还会有一个反光强度的值,但这里没有提及。

        多线激光雷达和单线激光雷达很相似,只不过多了一个z方向的数值。也正是因为这个z数值,让我们知道了周围环境的深度信息,这也是它最有价值的地方。

2、准备CMakeLists.txt

        因为pc_node.cpp依赖于pcl库,所以这里有两件事情要解决。第一件事情,查找一下当前的依赖库里面有没有pcl,

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS message_generation roscpp rospy std_msgs genmsg tf cv_bridge pcl_ros)
find_package(PCL REQUIRED)

        第二件事情,就是添加编译规则,告诉CMakeLists.txt,pc_node.cpp应该怎么编译,

add_executable(pc_node src/pc_node.cpp)
target_link_libraries(pc_node ${catkin_LIBRARIES})
add_dependencies(pc_node beginner_tutorials_generate_messages_cpp)

3、catkin_make编译

        pc_node.cpp和CMakeLists.txt都准备好了,那么就可以开始编译了。编译的方法,就是在catkin_ws目录下面直接输入catkin_make即可。

4、测试和验证

        测试的方法其实和camera是一样的。第一步,需要一个仿真环境,输入roslaunch wpr_simulation wpb_pointcloud.launch即可。

        仿真环境准备好之后,第二步就可以输入rosrun beginner_tutorials pc_node,这个时候会看到很多的数据打印。这些数据就是看到的3d数据。

[ INFO] [1696920724.029184374, 77.884000000]: [i=16505] (-0.82, -1.09, 2.22)
[ INFO] [1696920724.029235237, 77.884000000]: [i=16506] (-0.81, -1.09, 2.22)
[ INFO] [1696920724.029306573, 77.884000000]: [i=16507] (-0.81, -1.09, 2.22)
[ INFO] [1696920724.029391593, 77.884000000]: [i=16508] (-0.80, -1.09, 2.22)
[ INFO] [1696920724.029448090, 77.884000000]: [i=16509] (-0.79, -1.09, 2.22)
[ INFO] [1696920724.029506356, 77.884000000]: [i=16510] (-0.79, -1.10, 2.24)
[ INFO] [1696920724.029556718, 77.884000000]: [i=16511] (-0.79, -1.11, 2.25)
[ INFO] [1696920724.029606507, 77.884000000]: [i=16512] (-0.79, -1.12, 2.27)
[ INFO] [1696920724.029656374, 77.884000000]: [i=16513] (-0.79, -1.12, 2.29)
[ INFO] [1696920724.029706286, 77.884000000]: [i=16514] (-0.79, -1.13, 2.31)
[ INFO] [1696920724.029756426, 77.884000000]: [i=16515] (-0.79, -1.14, 2.33)
[ INFO] [1696920724.029805764, 77.884000000]: [i=16516] (-0.79, -1.15, 2.35)
[ INFO] [1696920724.029855296, 77.884000000]: [i=16517] (-0.79, -1.16, 2.37)
[ INFO] [1696920724.029904895, 77.884000000]: [i=16518] (-0.79, -1.17, 2.38)
[ INFO] [1696920724.029954521, 77.884000000]: [i=16519] (-0.79, -1.18, 2.40)
[ INFO] [1696920724.030003954, 77.884000000]: [i=16520] (-0.79, -1.19, 2.42)
[ INFO] [1696920724.030053707, 77.884000000]: [i=16521] (-0.79, -1.20, 2.45)
[ INFO] [1696920724.030103470, 77.884000000]: [i=16522] (-0.79, -1.21, 2.47)
[ INFO] [1696920724.030152928, 77.884000000]: [i=16523] (-0.79, -1.22, 2.49)
[ INFO] [1696920724.030202438, 77.884000000]: [i=16524] (-0.79, -1.23, 2.51)
[ INFO] [1696920724.030251816, 77.884000000]: [i=16525] (-0.79, -1.24, 2.53)

5、后续的工作

        拿到点云数据只是第一步,后续可以通过x/y/z限制、滤波、分割、识别、统计等方法,估算出物体的具体位置。拿到这些位置信息之后,就可以进一步通知机器人去进行后续任务的处理,这个是之前传感器无法实现的效果。

        当然现在用3d lidar做slam的开源代码也很多,特别是室外,靠gmapping根本是不可能的。只能靠3d lidar、gps、imu这些传感器去处理,也是未来发展一个很重要的方向。

相关文章:

SLAM从入门到精通(3d 点云数据访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 3d 点云设备现在汽车上用的很多。之前3d lidar这种高端传感器&#xff0c;只能被少部分智能汽车使用。后来很多国产厂家也开始研发3d lidar之后&am…...

如何在 Spring Boot 中提高应用程序的安全性

如何在 Spring Boot 中提高应用程序的安全性 Spring Boot是一种流行的Java开发框架&#xff0c;用于构建Web应用程序和微服务。在构建应用程序时&#xff0c;安全性是至关重要的因素。不论您的应用程序是面向公众用户还是企业内部使用&#xff0c;都需要采取适当的措施来确保数…...

【Vuex+ElementUI】

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上&#xff0c;提供了一种集中管理应用程序状态的方式。使用Vuex&#xff0c;您可以将应用程序的状态存储在一个单一的位置&#xff08;即“存储”&#xff09;中&#xff0c;…...

多媒体播放软件 Infuse mac中文特点介绍

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…...

华为数通方向HCIP-DataCom H12-831题库(单选题:201-220)

第201题 如图所示,路由器所有的接口开启OSPF,链路的Cost值如图中标识。若在R2的OSPF进程中通过命令import-route direct type 1引入直连路由,则R1到达10.0.2.2 /32的Cost值是以下哪一选项? A、150 B、151 C、200 D、201 答案:C 解析: Loopback0的cost值默认为0,R1-R2的…...

【管理运筹学】第 9 章 | 网络计划(2,时间参数的计算 —— 工作时间的确定与事项的时间参数)

文章目录 引言一、工作时间的确定二、事项的时间参数2.1 事项的最早开始时间2.2 事项的最迟结束时间2.3 事项的时差2.4 利用事项的时间参数来确定关键线路 引言 计算网络图中有关的时间参数&#xff0c;主要目的是找到关键线路&#xff0c;为网络计划的优化、调增和执行提供明…...

英语——方法篇——单词——羊肉串记忆法——单词密码

在记忆英语单词的时候&#xff0c;我们习惯于一个字母一个字母地记忆&#xff0c;很少会以词或字母组合为单位来记忆。在这里我们要打开视野&#xff0c;学习以词或字母组合为单位&#xff0c;一组一组地记忆英语单词。英语单词数目庞大&#xff0c;但是构成单词的字母只有26个…...

【m98】视频帧的 jitterbuffer 1:

VCMJitterBuffer D:\XTRANS\m98_rtc\rtc-webrtc\src\modules\video_coding\jitter_buffer.h使用2个map和一个list管理VCMFrameBuffer 指针对象:UnorderedFrameList free_frames_ RTC_GUARDED_BY(mutex_);FrameList decodable_frames_ RTC_GUARDED_BY(mutex_);FrameList incomp…...

javascript中map和filter的区别与联系

javascript中map和filter的区别与联系如何获取对象数组中某个值 javascript中map和filter的区别与联系 在 JavaScript 中&#xff0c;map 和 filter 是两个常用的数组方法&#xff0c;用于对数组进行转换和过滤操作。它们的区别和联系如下&#xff1a; 功能不同&#xff1a; m…...

【RabbitMQ 实战】10 消息持久化和存储原理

一、持久化 1.1 持久化对象 rabbitmq的持久化分为三个部分&#xff1a; 交换器的持久化。队列的持久化。消息的持久化。 1.1.1 交换器持久化 交换器的持久化是通过在声明交换器时&#xff0c; 指定Durability参数为durable实现的。若交换器不设置持久化&#xff0c;在rabb…...

vscode 连接ubuntu git下载缓慢

在ubuntu20.04下载&#xff1a; git clone https://github.com/introlab/rtabmap.git src/rtabmap 挂掉情况 export https_proxyhttp://10.10.10.176:7890export http_proxyhttp://10.10.10.176:7890 其中 10.10.10.176是我本机的ip地址&#xff0c;7890是我的代理后几位 如…...

2731. 移动机器人

2731. 移动机器人有一些机器人分布在一条无限长的数轴上&#xff0c;他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时&#xff0c;它们以每秒钟一单位的速度开始移动。 给你一个字符串 s &#xff0c;每个字符按顺序分别表示每个机器人移动的方…...

小程序实现人脸识别功能

调用api wx.startFacialRecognitionVerify 第一步: // 修改方法expertUpdate() {wx.startFacialRecognitionVerify({name: _this.registerForm.realName, //身份证名称idCardNumber: _this.registerForm.idCard, //身份证号码checkAliveType: 1, //屏幕闪烁(人脸核验的交互…...

【】javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes

问题描述 jdk版本&#xff1a;8 用DES进行加解密&#xff0c;其中转换模式为“DES/CBC/NoPadding”&#xff0c;要加密的明文为 “密码学浅析”&#xff0c;执行加密操作&#xff0c;报如下错误 Exception in thread "main" javax.crypto.IllegalBlockSizeExcepti…...

312.戳气球

将戳气球转换到添加气球&#xff0c;记忆搜索slove(i,j)&#xff1a;在开区间(i,j)全部填满气球得到的最多硬币数&#xff0c;两端val[i]、val[j] class Solution { public:vector<vector<int>> ans;vector<int> val;int slove(int left,int right){if(left&…...

get_trade_detail_data函数使用

查阅股票持仓情况 positions get_trade_detail_data(‘8000000213’, ‘stock’, ‘position’) for dt in positions: print(f’股票代码: {dt.m_strInstrumentID}, 市场类型: {dt.m_strExchangeID}, 证券名称: {dt.m_strInstrumentName}, 持仓量: {dt.m_nVolume}, 可用数量:…...

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

目录 第一章 理论基础 第二章 开发环境搭建 第三章 遥感大数据处理基础与ChatGPT等AI模型交互 第四章 典型案例操作实践 第五章 输入输出及数据资产高效管理 第六章 云端数据论文出版级可视化 更多应用 随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近…...

LeetCode862 和至少为k的最短子数组

题目&#xff1a; 解析&#xff1a; 1、先构造前缀和数组 2、单调队列存放滑动窗口&#xff0c;目的求Sj-Si >k的情况下&#xff0c;窗口最小。 代码&#xff1a; class Solution {public int shortestSubarray(int[] nums, int k) {int n nums.length;long[] sums new …...

网卡bonding模式 - bond模式配置介绍

网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡&#xff0c;配置完毕后&#xff0c;所有的物理网卡的ip和mac将会变成相同的。多网卡同时工作可以提高网络速度&#xff0c;还可以实现网卡的负载均衡、冗余。 bonding模式 1 round-robin(mode0) 轮转…...

做了个 chrome 插件实现 B 站视频截图功能,直接从当前视频帧无损复制

起因是看 B 站视频想截个图很麻烦&#xff0c;右下角暂停按钮无法去除&#xff0c;于是写了一行代码把暂停按钮隐藏。 后经提醒&#xff0c;发现可以通过 canvas 获取视频帧来截取图片&#xff0c;于是写了如下代码完美获取视频帧。 var v document.querySelector(".bpx…...

Docker linux 安装

sudo yum update sudo yum clean all sudo yum makecache#安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #添加官方存储库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#安装-跳过一些异常依赖…...

windows部署django服务器

windows部署django服务器 1、安装IIS1.1 控制面板-----程序----程序和功能----启用或关闭windows功能1.2安装IIS服务器&#xff0c;完成后&#xff0c;重新进入&#xff0c;把CGI安装进系统 2、安装python与虚拟环境2.1 安装python2.2 安装virtualenv虚拟环境2.3 创建一个虚拟环…...

ChatGPT prompt汇总-个人使用-持续更新....

用途 学术写作更新记录 学术写作 中译英(GPT-4) I am a researcher studying deep learning and now trying to revise my manuscript which will be submitted to the Journal of Nature . I want you to act as a scientific English-Chinese translator, I will provide yo…...

Vue实现简单的接口封装

1. 在src中创建一个api文件夹 2. 按功能、模块等新建对应的js文件 3. 在内部写对应的封装接口&#xff0c;并导出 import axios from "axios";/*** 接口名称&#xff1a;* 接收参数&#xff1a;* 返回参数&#xff1a;* */export const miens ()>{return new P…...

软件测试工具有什么作用?有哪些好用的测试工具推荐?

软件测试工具是现代软件测试中不可或缺的重要组成部分&#xff0c;指的是一系列在软件开发过程中使用的工具&#xff0c;用于帮助测试人员进行测试活动&#xff0c;提高测试效率&#xff0c;减少测试成本。选择并使用合适的软件测试工具&#xff0c;可提高软件质量和效率。 一…...

写爬虫?前端er何必用python

前言 说起网络爬虫,很多人第一时间想到python,但爬虫并非只能用python实现,虽然网上大部分爬虫文章都在说python爬虫,但对于前端程序员来说,我觉得js才是最屌的(对于简单爬取任务来说,复杂的我暂时没碰到~),下面说说我的经验(是的,仅限本人经验),希望能给各位前…...

交通物流模型 | 基于交通图卷积长短时记忆网络的网络级交通流预测

交通物流模型 | 基于交通图卷积长短时记忆网络的网络级交通流预测 由于道路网络时变的交通模式和复杂的空间依赖性,交通流预测是一个具有挑战性的时空预测问题。为了克服该挑战,作者将交通网络看为一张图,并提出一个新的深度学习预测模型,交通图卷积长短时记忆网络(TGC-L…...

web 基础和http 协议

一、域名 域名的概念 IP地址不易记忆&#xff0c;域名方便记住&#xff0c;以便于用户进行搜索访问 早期使用Hosts文件解析域名地址 缺点&#xff1a; ① 主机名称重复 ② 主机维护困难 DNS&#xff08;Domain Name System&#xff09;域名系统 ① 分布式 将一个大的数…...

Java常量与变量

Java常量与变量 在程序执行过程中&#xff0c;其值不能被改变的量称为常量&#xff0c;其值能被改变的量称为变量。 Java关键字 Java关键字 int public (公有的,可跨包) new finally throw (抛出一个异常对象) continuefloatlongshort extends (继承,用于类继承类) returnbrea…...

神经网络中卷积和池化的区别

1、什么叫卷积&#xff1f; 卷积层是用一个固定大小的矩形区去席卷原始数据&#xff0c;将原始数据分成一个个和卷积核大小相同的小块&#xff0c;然后将这些小块和卷积核相乘输出一个卷积值&#xff08;注意这里是一个单独的值&#xff0c;不再是矩阵了&#xff09;。 卷积的…...