![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ROS学习
文章平均质量分 86
_寒潭雁影
中科大IT向博士,熟悉MFC,C++,C等语言,参与过ffmpeg、机器视觉、并行计算、数据库等相关项目的研发和代码的编写http://blog.csdn.net/weixinhum为本人博客,上面记录了本人的一些技术总结
展开
-
ROS系统学习番外篇1---用VSCode码代码、编译和调试
作为微软发布的新一代神器,相信很多码农已经用上了VSCode来码代码。而当我们用其来码ROS代码的时候,如果不做任何配置,效果是下面这样的。另外,也无法用它进行调试和编译。本篇将着重解决这几个问题,使得用VSCode码ROS代码不再困难。一.解决程序找不到ROS相关文件的问题(也就是上图所示的那样)。首先准备素材,也就是记录ROS各种路径信息的文件。方法很简单,用命令行cd到工作空间下...原创 2019-04-11 16:55:44 · 6523 阅读 · 2 评论 -
ROS系统学习番外篇2---ROS节点权限问题
在Linux上有时用到一些操作需要有管理员权限,比如内存共享和网络抓包等。ROS因为是构建在操作系统上面的,因此做上面提到的这些操作也需要管理员权限。最简单的实现方式就是sudo su然后把ROS的工作空间导进去echo 'source ~/HelloRos/devel/setup.bash' >> ~/.bashrc就OK了。...原创 2019-04-24 16:51:40 · 3957 阅读 · 1 评论 -
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 · 1032 阅读 · 0 评论 -
ROS系统学习番外篇4---节点参数传递
在ROS的使用中,经常会遇到需要打开同一类型传感器的场景,此时需要通过参数来区分传感器。传输参数的方法有多种,最简单的是通过rosrun命令来传,比如要传一个端口号,可依照下面的方法传入:rosrun rfans32 rFans32RecAndDec 212最后面的“212”为端口好,在程序中判断下即可:if (argv[1]==NULL){ ROS_INFO("Please ...原创 2019-12-24 16:43:20 · 411 阅读 · 0 评论 -
ROS系统学习番外篇5---启动同类型多传感器
在自动驾驶中,为了照顾到多个视角,往往需要将多个传感器部署在车的四周,因此需要做多个传感器的解析和数据传输。那怎么用相同的节点启动多传感器呢?答案就是给启动节点取别名,并传输不同的参数。传输参数之前的文章已经介绍了,这篇文章介绍下给启动节点取别名的操作。如下所示:rosrun rfans32 rFans32RecAndDec __name:=rfans32_1 2018 rafes在节点的...原创 2019-12-25 10:56:13 · 401 阅读 · 0 评论 -
ROS系统学习番外篇6---以release发行方式编译文件
使用catkin_make对ROS进行编译时,其默认的编译模式是debug,该模式并没有对程序运行速度进行优化,因此代码的运行效率比较低,这并不符合软件在发行时追求快速响应的需求,因此需要将其修改为release版本。操作比较简单,就是在包中的CMakeLists.txt文件中指定其编译成release版本即可,代码如下:SET(CMAKE_BUILD_TYPE "Release")...原创 2019-12-30 16:24:45 · 1777 阅读 · 0 评论 -
ROS系统学习1---Ubuntu系统ROS安装
现在做无人车和其他种类机器人的公司或者研究机构,很多用的ROS系统。原因在于其信息传递快捷方便,且要求开发者以模块化的方式设计程序,使得工程容易管理和重构,优势明显。最近因为所在单位需要,也开始研究ROS系统了,因此循着学习的脉络做下记录。如果老哥也是想学ROS的程序员,可以姑且看看,但需要着重强调的是,ROS官方的wiki教程才是最专业的,本人所写记录更加注重于本人的体会和理解层面。...原创 2018-10-15 14:33:17 · 2134 阅读 · 0 评论 -
ROS系统学习2---ROS最小系统的制作
上一篇文章我们讲了ros的安装,并且运行了ros自带的一个简单程序。下面,我们将从一个空的文件夹开始,一步步创建工作空间,包,和节点,并让该节点输出“Hello ros”。本文主要参考这篇文章,部分内容基本照抄(哈哈哈哈,链接的文章已经写的很好了,本人只是习惯把别人实现的东西重现出来再写一下自己的体会),故在此说明下。在开始之前,先看看ros的几个重要概念。node(节点)no...原创 2018-10-12 14:59:51 · 2425 阅读 · 0 评论 -
ROS系统学习3---ROS最小话题系统的制作
在上一篇博客中,我们介绍了怎么创建一个ROS的最小系统,该系统包括工作空间、包和一个存放在包中的节点,然后我们让该节点打印“Hello ROS”。在这一篇博客中,我们将进一步来搭建一个最小的话题系统。在开始之前,我们来简单的介绍下ROS的"话题"。回想我们以前编程,一般是用什么进行通信的?是网络协议,比如我们要在两个程序中传输数据,一般的做法是建立一个TCP或者UDP连接,然后从A...原创 2018-10-16 14:01:49 · 991 阅读 · 0 评论 -
ROS系统学习4---最小服务系统的制作
上一篇文章我们介绍了ros最小话题系统的制作,本篇将进一步介绍ROS的另一种节点间的交互形式---服务首先,什么是服务?它是节点间的另外一种交互方式(这是句废话。。。),它提供了一种有应答的通信方式。其次,为什么要有它?这个问题比较深奥,我们得先回头去看看“话题”的特点。话题是单向的,按照一定频率发送的一种通信方式。在这种方式下,发出消息的一方是不知道消息有没有人收到的。另一方...原创 2018-10-22 15:38:34 · 723 阅读 · 0 评论 -
ROS系统学习5---OpenCV的使用
在机器人系统中,视觉是非常重要的一部分(人的眼睛获取信息占全部信息的78%,机器人可以类比下)。因此,用前面四篇文章打下些许基础后,本人便迫不及待的想学习怎么在ROS上用上OpenCV视觉库。好消息是我们第一篇文章选择了全部安装,这其中就把OpenCV库装进去了。那么剩下的就只是应用了。为了操作方便,我们新建一个包,叫做rosOpenCV:catkin_create_pkg rosO...原创 2018-10-25 15:33:28 · 13511 阅读 · 3 评论 -
ROS系统学习6---摄像头图像数据的采集
上篇文章我们介绍了怎么用OpenCV打开图像并将图像数据发送出去, 这解决了一部分问题。但实际工程应用中,我们经常需要实时获取图像数据,因此仅仅读取本地的图片是不够的。本篇我们将研究如何获取以USB/rtsp等格式传输的摄像头的数据,与上一篇文章相互呼应。USB摄像头:首先,我们要有一个USB摄像头。确保了这一点后将摄像头插上去,输入命令:ls /dev/v*如果看到"/dev/...原创 2018-11-26 14:11:55 · 5720 阅读 · 1 评论 -
ROS系统学习7---LCM数据的发送和接收
前面的几篇文章我们简单介绍了ROS的一些基本操作和数据获取的实现。下面,我们将更深入地研究ROS的数据传递,因为这关系到能不能真正把ROS用于实际的工程项目中。如果工程只用ROS搭建,那么是不需要用到命题所说的LCM的。但如果ROS只是整体系统的一部分,则需要利用内存共享或者网络传输等方式与其他程序进行数据交互,这时候LCM就是一种比较简单的选择(如果不清楚什么是LCM,可以参考这篇文章)。...原创 2018-11-27 14:02:45 · 5888 阅读 · 1 评论 -
ROS系统学习8---节点间的内存共享(初级篇)
上一篇文章我们介绍了怎么在ROS中应用LCM与外部进行通信。本篇我们回到ROS的内部,看看如何实现ROS节点间的内存共享,以实现更加快速的内部通信。首先,我们需要清楚为什么要用内存共享?答案是ROS提供的服务或者话题都是通过网络来实现的。这样做虽然更具普遍性,照顾到ROS节点可能架设在不同的硬件上这一点,然对于在同一台设备的两个节点间传输数据是非常不友好的。因为其既没必要性又浪费大量资源,...原创 2018-11-28 16:13:49 · 3782 阅读 · 0 评论 -
ROS系统学习9---节点间的内存共享(中级篇)---图像收发
前篇文章介绍了如何实现最简单的节点间内存共享。但因为篇幅所限,并没有深入介绍怎么将其实用化。本篇我们将用之前专门介绍的循环队列内存共享技术,将一个节点的图像数据直接共享给另外的节点。为了比较内存共享机制和ROS自带的话题传输机制,本文用:ROS系统学习5---OpenCV的使用这篇文章提供的图像发送和接收节点做对比。结果发现用自带的话题传输机制传一张1080p的图像延时大概在600ms,而用内...原创 2019-04-18 22:14:02 · 2346 阅读 · 2 评论 -
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 · 1446 阅读 · 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 · 2698 阅读 · 5 评论 -
ROS系统学习12---相对路径和自定义源文件包含
相对路径ROS节点的相对路径在包所在的工作空间根目录下自定义头文件包含可以将头文件放到任意位置,然后通过设置:include_directories(***)里面的内容进行包含。...原创 2019-11-14 10:21:12 · 2158 阅读 · 0 评论 -
Linux进程间的循环队列内存共享
上一篇文章我们已经介绍了进程间的内存共享。因为篇幅关系,只是做了简单实现,并不适用于实际应用。因此本篇以实际应用为目的,介绍以循环队列实现的内存共享机制。该机制可以快速实现数据的先入先出,方便控制内存的大小,减少数据的拷贝次数,且可以方便的选择是数据完整性优先还是实时性优先实现的原理非常简单,以数据完整性优先为例。我们可以创建如上所示的共享内存,将前面的几个字节定义为信息交流的空间,写...原创 2018-12-17 21:26:12 · 2257 阅读 · 1 评论 -
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 · 1568 阅读 · 0 评论