_寒潭雁影
中科大IT向博士,熟悉MFC,C++,C等语言,参与过ffmpeg、机器视觉、并行计算、数据库等相关项目的研发和代码的编写http://blog.csdn.net/weixinhum为本人博客,上面记录了本人的一些技术总结
展开
-
ROS学习番外篇15—nuScenes-LidarSeg数据集的多帧数据整理
前面我们介绍了如何下载和解析nuScenes-LidarSeg数据集,然而处理的对象还是单帧点云。本篇博客将对数据集提供的点云系列数据进行解析和重新整理,使得程序可以非常方便的按照顺序读取850个系列中的每个系列的点云数据。运行上面的代码,可以得到顺序记录每个系列点云信息的850个文件,放置在sample_data_lidar_seq文件夹(这个文件夹需要手动创建)中。有了这些文件,就可以按照顺序处理点云。原创 2023-08-09 18:03:52 · 481 阅读 · 0 评论 -
ROS2系统学习番外篇2---用VSCode开发ROS2程序
在中已经介绍了如何创建ROS的工作空间以及包。在开发大型工程时,往往需要在IDE下面进行开发,因此本篇介绍使用VSCode来搭建ROS2开发环境的方法。首先用VSCode打开ROS2的工作空间。原创 2023-08-06 15:03:01 · 2163 阅读 · 0 评论 -
ROS学习番外篇15—nuScenes-LidarSeg数据集的多帧数据整理
前面我们介绍了如何下载和解析nuScenes-LidarSeg数据集,然而处理的对象还是单帧点云。本篇博客将对数据集提供的点云系列数据进行解析和重新整理,使得程序可以非常方便的按照顺序读取850个系列中的每个系列的点云数据。运行上面的代码,可以得到顺序记录每个系列点云信息的850个文件,放置在sample_data_lidar_seq文件夹(这个文件夹需要手动创建)中。有了这些文件,就可以按照顺序处理点云。原创 2023-01-29 21:15:30 · 635 阅读 · 1 评论 -
ROS学习番外篇14—nuScenes-LidarSeg数据集的下载和解析
nuScenes-LidarSeg数据集的下载和解析原创 2022-08-17 17:59:03 · 1513 阅读 · 3 评论 -
ROS学习番外篇13—SemanticKITTI数据集的IMU等原始信息获取
最近正在研究的算法需要用到点云的IMU信息,SemanticKITTI是针对KITTI的odometry数据集进行的精细标注,因此很多的原始信息可以从KITTI的odometry数据包中获得,比如车辆的姿态信息POSE等,然而odometry数据集并不包含车辆的IMU等原始信息(该数据原本是用来进行slam等算法的评估的),因此IMU等原始信息得从KITTI的原始数据中获得,这就要求我们知道odometry数据与原始数据之间的对应关系。在下载了一百多g数据并仔细匹配了整整两天之后,本人终于不太完美地完成了原创 2022-04-06 21:01:11 · 1096 阅读 · 0 评论 -
ROS2系统学习番外篇1---用CLion开发ROS2程序(编程、编译、调试)
之前一直用VSCode开发ROS,最近入职和青基的事情终于告一段落,也用学校的邮箱申请到了CLion的高校免费资格(听之前实验室的同学们说CLion很方便),遂开始考虑是不是要用CLion取代VSCode作为ROS的开发IDE。于是说干就干,开始动手搭建基于CLion的ROS2开发环境,这篇博客是这个折腾的全过程。创建ROS2工程首先,先按照下面博客的操作创建一个ROS2的工程:https://blog.csdn.net/weixinhum/article/details/123800798?spm原创 2022-03-29 16:02:42 · 2031 阅读 · 1 评论 -
ROS2系统学习3---第一个“Hello World”程序---即工作空间创建与包创建
工作空间创建ROS2创建工作空间和ROS1基本相同。首先创建工作空间文件夹,命名为ROS2(可以命名别的),然后在该文件夹下新建一个src文件夹,直接退回到ROS2文件夹下,运行如下代码进行编译。colcon build编译完成后就会在工作空间中生成build、install、log三个文件夹。打开install文件夹,可以看到与ROS1的devel很类似的几个文件。以上我们就完成了ROS2工作空间的创建。对比ROS1,可以看到ROS2工作空间的创建基本一致,只是少了初始化的环节,并且包的编原创 2022-03-28 17:24:58 · 2195 阅读 · 0 评论 -
ROS2系统学习2---Ubuntu20.04下ROS2的安装
添加软件源添加密钥sudo apt update && sudo apt install curl gnupg lsb-releasesudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg如果出现“curl: (7) Failed to connect to raw.githubuserc原创 2022-01-26 23:54:50 · 785 阅读 · 0 评论 -
ROS2系统学习1---为什么要用ROS2?
最近终于把毕业的事情搞得七七八八了,准备开启ROS2的新坑。ROS2已经推出有好几年了,遥记得18年底团队调研要将自动驾驶系统从Windows平台转到别的平台的时候,就有老师说要转这个。尽管当时就看出了这东西是个趋势,然而不经意间有同学说出“别人论文里面给的开源程序大多是ROS1的”这个鬼故事之后,ROS2被当场枪毙。时光飞逝,转眼间三年过去了,我也终于要脱离苦海。回头一看,ROS2的普及率还是那个死样子。现在在网上搜ROS的资料,绝大部分还是ROS1的。唯一一点小水花,恐怕是前段时间小米在发布会上搞出原创 2021-11-30 23:39:38 · 2588 阅读 · 1 评论 -
ROS学习番外篇12—Mac M1(Pro+Max)安装ROS1或ROS2须知
由于苹果换了芯片架构,因此裸机安装ROS2或者源码安装ROS1和ROS2变得非常困难。使用Parallels Desktop或者其他虚拟机(比如UTM)安装Ubuntu然后再在Ubuntu上安装ROS是目前最为靠谱的解决方案。然而,该方案有个问题,那就是安装完系统之后需要更新Mesa 3D graphics library,否则rviz的3D模块无法正常显示(这个问题网上很少有人说,说的人还把人带跑偏,本人因此搞了一个多星期,心力憔悴。。。最后去官方github上闲逛才发现真正的问题。。。)。下面直接上原创 2021-11-20 21:21:55 · 6220 阅读 · 2 评论 -
ROS学习番外篇11—Winows的WSL2(Linux子系统)下安装ROS并搭建开发环境
一般ROS的开发是在Ubuntu下面进行的,自从今年6月份微软为WSL装配上了gui神器之后,我们又多出了一种新的玩法。那就是在Windows下用WSL2来安装Ubuntu虚拟机来做ROS的开发。虽然可能有老哥要说,之前搞个虚拟机不也一样。事实的确如此,然而由于这个是微软自己家的,其和系统的粘合程度以及优化远飞第三方虚拟机可比,这个通过搜索wsl的ubuntu和真机ubuntu的各种测评文章就可得到答案。下面我们进入正题。WSLg的安装系统要求Win11或者Win10最新的版本安装WSL版本的显原创 2021-11-16 16:20:10 · 1746 阅读 · 0 评论 -
ROS系统学习16---OpenCV进阶---利用dnn模块加载YoloV4模型进行对象检查
年前需要在ROS上使用YoloV4对道路上的障碍物进行检测,记得早期使用YoloV3的时候是用的Yolo开发团队提供的darknet版本,因此就自然而然的去下其提供的Ros节点包然后开搞。结果由于当时操作了一波,使用的是Manjaro系统,ROS是自己编译的(OpenCV版本是4.5),结果花了一个晚上改了无数错误之后依然编译不过。最后一查才发现darknet架构在OpenCV3.4.0后(OpenCV在该版本后把c接口直接用c++实现了,可能最新的noetic二进制安装文件依然用的是OpenCV3.2就原创 2021-04-20 23:44:38 · 829 阅读 · 3 评论 -
ROS学习番外篇10—Deepin下OpenCV+CUDA的编译,以及在ROS中的使用(同样适用Ubuntu)
OpenCV的DNN模块现在已经非常强大,可以跑很多深度学习模型。原生的ROS虽然也自带OpenCV,但其版本太老吃不到这波红利。为此,最好的办法是自己编译最新版本带CUDA的OpenCV,下面我们将介绍这波操作。PS:在操作前需要将cuda和cudnn装上,安装的方法可以参考这篇文章:https://blog.csdn.net/weixinhum/article/details/115920332?spm=1001.2014.3001.5501OpenCV+CUDA的编译下载opencv + ope原创 2021-04-20 22:34:52 · 519 阅读 · 1 评论 -
ROS学习番外篇9—在Deepin上安装Ros
上篇番外"ROS学习番外篇8—在Manjaro上安装和使用Ros"中,我们介绍了怎么用Manjaro来安装和使用Ros。尽管历经千辛万苦解决了很多bug,然而还是存在ROS中无法使用PCL的问题。好巧不巧最近在复现的文章中要用到PCL,于是只能再次走上了选择新操作系统的要命征程。经历一番折腾,本人选择了Deepin V20这个系统。说实话一开始想到用国产的系统心里还是很虚的,然而真正去体验了之后发现这东西真香!在Manjaro上要折腾半天的很多wine程序的安装这个系统直接一键解决。而Ros的安装则和Ub原创 2021-04-20 17:34:21 · 677 阅读 · 0 评论 -
ROS学习番外篇7—将SemanticKITTI数据集的点云投影到图像平面
做自动驾驶的老哥相信或多或少会知道SemanticKITTI这个点级精细标注的数据集。该数据集基于kitti的odometry数据集进行标注。因此非但有精细的语言分割信息,而且还能结合kitti数据集本身就提供的四个摄像头信息来做更多的事情。比如将点云投影到图像上,然后做融合算法。在这篇文章中我们将介绍将点云投影到图像平面的操作。数据下载首先,我们需要先下载图像数据,也就是到kitti的官网下载相应的数据:如果先前已经下了SemanticKITTI数据集,那么就只需要下图像的数据就行。坐标投影原创 2021-04-13 15:46:39 · 2077 阅读 · 0 评论 -
ROS学习番外篇8—在Manjaro上安装和使用Ros
用ROS已经快三年了,由于ROS的开发团队一直在Ubuntu上进行维护,装起来最方便,因此本人也使用了Ubuntu三年多了。一开始本人就不太喜欢这个操作系统,但当时觉得自己菜估计用久了就好了,因此就没多做挣扎。然而到了现在,本人还是不喜欢它,主要有下面这些不爽的点:时不时崩溃弹窗,虽然关掉之后好像也能照常运行,但感觉就是很不好,无论16.04、18.04还是20.04都这个样子不管怎么搞都比较慢的软件安装速度(主要是网络慢,但换源、翻墙啥的都搞了也不快)动不动就有一堆软件包要更新,而一更新就碰到问原创 2021-02-08 22:58:41 · 1372 阅读 · 0 评论 -
ROS系统学习15---启动多个节点
在设计ROS系统工程的时候我们一般是按照多节点的形式设计的,这样做的好处在于将系统按模块进行了隔离,而坏处主要有两个,一是中间的数据传输是按照网络进行的,延时比较大,这个问题的解决办法比较多,比如内存共享之类的,我们这里不做讨论;二则是启动这些节点比较烦,有时候可能得启动十几个,把人搞崩溃,今天我们就来研究下这个话题。一般给出的办法是用ros launch,个人感觉有点复杂,操作起来不太方便,因此这里介绍另外一种方法。原理就是通过命令行打开多个终端然后运行不同的命令启动节点。创建脚本文件Starup原创 2020-05-25 17:45:45 · 3026 阅读 · 1 评论 -
ROS系统学习13—界面开发2—ROS消息接收和显示
ROS系统学习13—界面开发2上一篇文章介绍了如何搭建基于Qt5和librviz的ROS界面框架,这篇文章我们将进一步介绍怎么用这个框架来实现一些常用的GUI显示功能。接收并显示图像消息在ROS中,接收消息一般是用spin()或者spinOnce()两个函数实现的。前者是一个阻塞函数,一运行程序则会等待在该函数处接收消息,后者则在调用之时方能接收到消息。如果写过界面程序的老哥肯定清楚,这种性质的函数是不能写在界面程序中的,否则程序将会处于假死状态。因此在Qt中实现ROS消息的接收需要开辟新的线程来实现原创 2020-05-24 00:16:47 · 1433 阅读 · 0 评论 -
ROS系统学习14---在Windows上安装和使用ROS
使用ROS一般默认的操作系统是Linux的Ubuntu,其安装的过程也基本无障碍。然而Ubuntu相比Windows的生态还是不太完善,因此在电脑中装双系统然后反复横跳就变得很常见且让人崩溃。最近由于意识到ROS调试起来是在比较方便,而切来切去实在影响心情,于是着手研究Windows上安装ROS的操作,并做了下记录。由于该操作依据得到了官方支持,于是安装的难度也不算大,不过也没Ubuntu那么简单,可以直接参考ROS的Wiki。下面就按照Wiki的步骤一步步操作吧。Windows操作系统要在W原创 2020-05-21 16:43:33 · 5674 阅读 · 1 评论 -
ROS系统学习13—界面开发1—Qt 5环境配置
在ROS系统中,我们可以用RVIZ直接看处理的结果,比较方便。但RVIZ可以展示的信息不够全面,可定制化程度也不高,因此在要求比较高的需求中只能自己开发界面。而开发界面的工具则一般选用QT(似乎有人也使用PYQT来整活,但感觉速度应该跟不太上)。具体操作如下:安装Qt5一般安装完整版的ROS会自带Qt4,如果只想做简单的界面开发,Qt4也完全足够,可能出于这种原因,使用下面两个命令安装带QT界面的ROS包:sudo apt-get install ros-melodic-qt-rossudo apt原创 2020-05-14 22:30:28 · 762 阅读 · 0 评论 -
ROS系统学习番外篇6---以release发行方式编译文件
使用catkin_make对ROS进行编译时,其默认的编译模式是debug,该模式并没有对程序运行速度进行优化,因此代码的运行效率比较低,这并不符合软件在发行时追求快速响应的需求,因此需要将其修改为release版本。操作比较简单,就是在包中的CMakeLists.txt文件中指定其编译成release版本即可,代码如下:SET(CMAKE_BUILD_TYPE "Release")...原创 2019-12-30 16:24:45 · 1855 阅读 · 0 评论 -
ROS系统学习番外篇5---启动同类型多传感器
在自动驾驶中,为了照顾到多个视角,往往需要将多个传感器部署在车的四周,因此需要做多个传感器的解析和数据传输。那怎么用相同的节点启动多传感器呢?答案就是给启动节点取别名,并传输不同的参数。传输参数之前的文章已经介绍了,这篇文章介绍下给启动节点取别名的操作。如下所示:rosrun rfans32 rFans32RecAndDec __name:=rfans32_1 2018 rafes在节点的...原创 2019-12-25 10:56:13 · 440 阅读 · 0 评论 -
ROS系统学习番外篇4---节点参数传递
在ROS的使用中,经常会遇到需要打开同一类型传感器的场景,此时需要通过参数来区分传感器。传输参数的方法有多种,最简单的是通过rosrun命令来传,比如要传一个端口号,可依照下面的方法传入:rosrun rfans32 rFans32RecAndDec 212最后面的“212”为端口好,在程序中判断下即可:if (argv[1]==NULL){ ROS_INFO("Please ...原创 2019-12-24 16:43:20 · 441 阅读 · 0 评论 -
ROS系统学习番外篇3---使用C++11标准编程
C++11带入了并发编程接口以及更加精确的计时功能,提升非常大,然而Ubuntu16下的ROS默认使用的是老版本的gcc。要用上较为先进的C++特性,只需要在ROS包对应的CMakeLists中制定编译器版本即可,即加入下面一句代码:set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")...原创 2019-12-24 14:58:09 · 1083 阅读 · 0 评论 -
Ubuntu libpcap的安装和测试
1.官网下载安装包:http://www.tcpdump.org/#latest-release2.解压3.终端进入文件夹cd libpcap-1.9.0/4.安装依赖关系sudo apt-get install flexsudo apt-get install -y byacc5.配置,编译,安装./configuremakesudo make install到此安装...原创 2019-04-24 16:48:00 · 1629 阅读 · 0 评论 -
Linux进程间的循环队列内存共享
上一篇文章我们已经介绍了进程间的内存共享。因为篇幅关系,只是做了简单实现,并不适用于实际应用。因此本篇以实际应用为目的,介绍以循环队列实现的内存共享机制。该机制可以快速实现数据的先入先出,方便控制内存的大小,减少数据的拷贝次数,且可以方便的选择是数据完整性优先还是实时性优先实现的原理非常简单,以数据完整性优先为例。我们可以创建如上所示的共享内存,将前面的几个字节定义为信息交流的空间,写...原创 2018-12-17 21:26:12 · 2319 阅读 · 1 评论 -
ROS系统学习番外篇2---ROS节点权限问题
在Linux上有时用到一些操作需要有管理员权限,比如内存共享和网络抓包等。ROS因为是构建在操作系统上面的,因此做上面提到的这些操作也需要管理员权限。最简单的实现方式就是sudo su然后把ROS的工作空间导进去echo 'source ~/HelloRos/devel/setup.bash' >> ~/.bashrc就OK了。...原创 2019-04-24 16:51:40 · 4102 阅读 · 1 评论 -
ROS系统学习番外篇1---用VSCode码代码、编译和调试
作为微软发布的新一代神器,相信很多码农已经用上了VSCode来码代码。而当我们用其来码ROS代码的时候,如果不做任何配置,效果是下面这样的。另外,也无法用它进行调试和编译。本篇将着重解决这几个问题,使得用VSCode码ROS代码不再困难。一.解决程序找不到ROS相关文件的问题(也就是上图所示的那样)。首先准备素材,也就是记录ROS各种路径信息的文件。方法很简单,用命令行cd到工作空间下...原创 2019-04-11 16:55:44 · 6554 阅读 · 2 评论 -
ROS系统学习12---相对路径和自定义源文件包含
相对路径ROS节点的相对路径在包所在的工作空间根目录下自定义头文件包含可以将头文件放到任意位置,然后通过设置:include_directories(***)里面的内容进行包含。...原创 2019-11-14 10:21:12 · 2222 阅读 · 0 评论 -
ROS系统学习11---点云数据的发送和接收
在ROS节点中解析并发送点云数据是非常基础的需求,下面我们将做简单的介绍。点云数据发送关于发送节点,只需要声明头文件:#include <sensor_msgs/PointCloud.h>定义消息发布者:ros::Publisher cloud_pub = n.advertise<sensor_msgs::PointCloud>("cloud", 50);然...原创 2019-11-14 10:03:36 · 2786 阅读 · 5 评论 -
ROS系统学习10---利用OpenMP库进行CPU的多线程加速
在ROS系统的构建中,很多问题是串行的,只能用一个节点进行串行计算。这样导致的问题是CPU资源并没有完全用到,往往是程序延时很严重,然而CPU却只用了一个线程。为了解决这个问题,可以用OpenMP库来进行并行处理。示例代码如下:#include <ros/ros.h>#include <omp.h>//openMP库int main(int argc, char...原创 2019-07-30 18:45:35 · 1495 阅读 · 0 评论 -
ROS系统学习9---节点间的内存共享(中级篇)---图像收发
前篇文章介绍了如何实现最简单的节点间内存共享。但因为篇幅所限,并没有深入介绍怎么将其实用化。本篇我们将用之前专门介绍的循环队列内存共享技术,将一个节点的图像数据直接共享给另外的节点。为了比较内存共享机制和ROS自带的话题传输机制,本文用:ROS系统学习5---OpenCV的使用这篇文章提供的图像发送和接收节点做对比。结果发现用自带的话题传输机制传一张1080p的图像延时大概在600ms,而用内...原创 2019-04-18 22:14:02 · 2443 阅读 · 2 评论 -
ROS系统学习8---节点间的内存共享(初级篇)
上一篇文章我们介绍了怎么在ROS中应用LCM与外部进行通信。本篇我们回到ROS的内部,看看如何实现ROS节点间的内存共享,以实现更加快速的内部通信。首先,我们需要清楚为什么要用内存共享?答案是ROS提供的服务或者话题都是通过网络来实现的。这样做虽然更具普遍性,照顾到ROS节点可能架设在不同的硬件上这一点,然对于在同一台设备的两个节点间传输数据是非常不友好的。因为其既没必要性又浪费大量资源,...原创 2018-11-28 16:13:49 · 3927 阅读 · 0 评论 -
ROS系统学习7---LCM数据的发送和接收
前面的几篇文章我们简单介绍了ROS的一些基本操作和数据获取的实现。下面,我们将更深入地研究ROS的数据传递,因为这关系到能不能真正把ROS用于实际的工程项目中。如果工程只用ROS搭建,那么是不需要用到命题所说的LCM的。但如果ROS只是整体系统的一部分,则需要利用内存共享或者网络传输等方式与其他程序进行数据交互,这时候LCM就是一种比较简单的选择(如果不清楚什么是LCM,可以参考这篇文章)。...原创 2018-11-27 14:02:45 · 5995 阅读 · 1 评论 -
ROS系统学习6---摄像头图像数据的采集
上篇文章我们介绍了怎么用OpenCV打开图像并将图像数据发送出去, 这解决了一部分问题。但实际工程应用中,我们经常需要实时获取图像数据,因此仅仅读取本地的图片是不够的。本篇我们将研究如何获取以USB/rtsp等格式传输的摄像头的数据,与上一篇文章相互呼应。USB摄像头:首先,我们要有一个USB摄像头。确保了这一点后将摄像头插上去,输入命令:ls /dev/v*如果看到"/dev/...原创 2018-11-26 14:11:55 · 5791 阅读 · 1 评论 -
ROS系统学习5---OpenCV的使用
在机器人系统中,视觉是非常重要的一部分(人的眼睛获取信息占全部信息的78%,机器人可以类比下)。因此,用前面四篇文章打下些许基础后,本人便迫不及待的想学习怎么在ROS上用上OpenCV视觉库。好消息是我们第一篇文章选择了全部安装,这其中就把OpenCV库装进去了。那么剩下的就只是应用了。为了操作方便,我们新建一个包,叫做rosOpenCV:catkin_create_pkg rosO...原创 2018-10-25 15:33:28 · 13605 阅读 · 3 评论 -
ROS系统学习4---最小服务系统的制作
上一篇文章我们介绍了ros最小话题系统的制作,本篇将进一步介绍ROS的另一种节点间的交互形式---服务首先,什么是服务?它是节点间的另外一种交互方式(这是句废话。。。),它提供了一种有应答的通信方式。其次,为什么要有它?这个问题比较深奥,我们得先回头去看看“话题”的特点。话题是单向的,按照一定频率发送的一种通信方式。在这种方式下,发出消息的一方是不知道消息有没有人收到的。另一方...原创 2018-10-22 15:38:34 · 756 阅读 · 0 评论 -
ROS系统学习3---ROS最小话题系统的制作
在上一篇博客中,我们介绍了怎么创建一个ROS的最小系统,该系统包括工作空间、包和一个存放在包中的节点,然后我们让该节点打印“Hello ROS”。在这一篇博客中,我们将进一步来搭建一个最小的话题系统。在开始之前,我们来简单的介绍下ROS的"话题"。回想我们以前编程,一般是用什么进行通信的?是网络协议,比如我们要在两个程序中传输数据,一般的做法是建立一个TCP或者UDP连接,然后从A...原创 2018-10-16 14:01:49 · 1032 阅读 · 0 评论 -
ROS系统学习2---ROS最小系统的制作
上一篇文章我们讲了ros的安装,并且运行了ros自带的一个简单程序。下面,我们将从一个空的文件夹开始,一步步创建工作空间,包,和节点,并让该节点输出“Hello ros”。本文主要参考这篇文章,部分内容基本照抄(哈哈哈哈,链接的文章已经写的很好了,本人只是习惯把别人实现的东西重现出来再写一下自己的体会),故在此说明下。在开始之前,先看看ros的几个重要概念。node(节点)no...原创 2018-10-12 14:59:51 · 2489 阅读 · 0 评论 -
ROS系统学习1---Ubuntu系统ROS安装
现在做无人车和其他种类机器人的公司或者研究机构,很多用的ROS系统。原因在于其信息传递快捷方便,且要求开发者以模块化的方式设计程序,使得工程容易管理和重构,优势明显。最近因为所在单位需要,也开始研究ROS系统了,因此循着学习的脉络做下记录。如果老哥也是想学ROS的程序员,可以姑且看看,但需要着重强调的是,ROS官方的wiki教程才是最专业的,本人所写记录更加注重于本人的体会和理解层面。...原创 2018-10-15 14:33:17 · 2199 阅读 · 0 评论