摘要:1、下载安装CMake 要在Windows平台下生成opencv的解决方案,需要一个名为CMake的开源软件。CMake的全称是crossplatform make。它是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能输出各种makefile或者project文件
阅读全文
摘要:1、在opencv安装目录下,可以找到opencv官方提供的示例代码,具体位于...\opencv\sources\samples目录下,如下所示 名为c的文件夹存放着opencv1.0等旧版本的示例程序;名为cpp的文件夹存放着opencv2.x等新版本的示例程序。 在...\opencv\sou
阅读全文
摘要:基于测量的前进返回脚本 #!/usr/bin/env python import rospy from geometry_msgs.msg import Twist, Point, Quaternion import tf from rbx1_nav.transform_utils import q
阅读全文
摘要:使用测程法前进并返回 由于已经了解ROS中的测量信息是怎样表示,那么就可以让机器人在计时前进并返回中移动的更精确了。不在需要基于时间和速度来猜测距离和角度。下一脚本将会通过转换自/odom和/base_link框架之间的测量信息,监视机器人的位置和方向。 在rbx1_nav/nodes目录下的新文件
阅读全文
摘要:我们到了吗?根据测量来到达目的距离 机器人的基处理器节点利用测程法和PID控制来把运行要求转化成现实世界的速度。这个过程的精确度和可靠性依赖于机器人内部的感应器、校准过程的精确度和周围环境的条件。 机器人通过对外部的测量获得自己的位置和方向,是可以对机器人的内部测量进行补充的。举例来说,机器人可以利
阅读全文
摘要:用现实的机器人执行计时前进并返回 如果用现实的机器人来运行脚本timed_out_and_back.py,在这里只是用了时间和速度估算距离和角度。可以预见,机器人因为惯性,运动结果与在ArbotiX模拟器上的结果有出入(在模拟器中我们并没有建立物理模型) 1、首先,停止所有正在运行的模拟器。运行你自
阅读全文
摘要:在大多数时间都是依靠ROS节点来发布恰当的Twist消息。举个简单的例子,假设我们想编程使机器人向前移动1m,旋转180度,然后返回开始的位置。我们会尝试用不同的方法来完成这个任务,这些方法很好地表现了ROS不同层次的运动控制。 1、通过定时和定速估计距离和角度 我们第一个尝试是用定时的Twist命
阅读全文
摘要:PCL中I/O库提供了点云文件输入输出相关的操作类,并封装了OpenNI兼容的设备源数据获取接口,可直接从众多感知设备获取点云图像等数据。I/O模块利用21个类和28个函数实现了对点云的获取、读入、存储等相关操作,其依赖于pcl_common和pcl_octree模块以及OpenNI外部开发包。 1
阅读全文
摘要:PCL中所有的处理都是基于点云展开的,利用不同的设备获取点云、存储点云等都是点云处理前后必须做的流程,PCL中有自己设计的内部PCD文件格式,为此,设计读写该该格式以及与其他3D文件格式之间进行转化的接口类都是很有必要的;目前PCL内部支持对常用的3D格式文件的打开与存储操作,以及与PCD内部格式之
阅读全文
摘要:利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头。 VideoCapture是opencv 2.X中新增的一个类,对应于之前C语言版本的CvCapture结构体。它提供了从摄像机或视频文件捕获视频的C++接口,作用是从视频文件或从摄像头捕获视频并显示出来。 1、读
阅读全文
摘要:在上一节中,已经完成了OPENCV的配置,在本节接触几个Opencv图像处理相关的程序,看看opencv用简洁的代码能够实现哪些有趣的图像效果。 1、第一个程序:图像显示 2、第二个程序:图像腐蚀 如何用opencv实现最基本的形态学运算之一 腐蚀,即用图像中的暗色部分“腐蚀”掉图像中的高亮部分。
阅读全文
摘要:对你的机器人进行测量校准 在这一部分当中,需要有实际的机器人,如果没有可以略过此节,如果有一台原版的TurtleBot(用iRobot create作为底座),那么确保使用自动校准过程为你的机器人设置角速度修正系数。还可以用这一部分内容的第一步去设置线速度修正系数。需要注意的是,无论在什么情况下,都
阅读全文
摘要:1、/odom : (odometry : 里程计,就是车子方向盘下面的各种表)下面是它内部的参数: std_msgs/Header header string child_frame_id // 子类坐标系 geometry_msgs/PoseWithCovariance pose // 平移和旋
阅读全文
摘要:控制一个机器人运动可以在运动控制系统中许多不同的层中实现,ROS在不同的层中都有提供相应的方法。从对发动机的直接控制,到路径规划和SLAM,不同的层代表着不同程度的抽象。 1、发动机、轮子和编码器 大多数differential drive robots在运行ROS时都会在发动机和轮子上使用编码器。
阅读全文
摘要:在这一章节将学习如何控制底座移动,这里的底座是通过一对差速驱动轮子和一个被动转动的轮子来保持平衡。ROS还可以被用来控制全方向移动底座,控制飞行机器人或者水下交通工具,不过陆地上行走的差速驱动机器人比较适合初学者。 1、单位长度和坐标系 在给机器人传送指令前,复习一下ROS使用的单位长度和坐标系惯例
阅读全文
摘要:在这里我之前用的VM12安装成功之后,仿真器机器人会有问题,故把电脑做成双系统的形式来重新安装; 环境:Ubuntu14.04 LTS 32bits ROS版本:ROS Indigo 在学习本部分之后的内容,请先学习 beginner_Tutorials 和 learning_tf 的ROS 相关教
阅读全文
摘要:1、开发者如何增加一个新的异常类 2、如何使用自定义的异常 3、异常的处理
阅读全文
摘要:1、PCL中有哪些可用的PointT类型 这些point类型都位于point_types.hpp文件中,如果用户需要自己定义类型,需要对已有类型了解。 1)PointXYZ 成员变量:float x,y,z; 它是最常用的一个点数据类型,只包含三维XYZ坐标信息,这三个浮点数附加上一个浮点数来满足存
阅读全文
摘要:架构师为了确保在PCL中所有代码风格的一致性,使得其他开发者及用户容易理解源码,PCL开发者制定并遵循着一套严格的编写规范,PCL的开发者都默认此规范。 3.1PCL推荐的命名规范 1、文件命名 1)所有的文件名单词之间应该用下划线隔开,如:unordered_map.cpp 2)头文件的扩展名为.
阅读全文
摘要:1、什么是PCL? PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源c++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及点云获取、滤波、分割、配准、检索、特征提取、识别、追踪,曲面重建、可视化等,支持多种OS平台,包括Windows
阅读全文
摘要:1、介绍 OpenCV 读写视频之前,先介绍一下编解码器(codec) 。如果是图像文件, 我们可以根据文件扩展名得知图像的格式。但是此经验并不能推广到视频文件中。 有些 OpenCV 用户会碰到奇怪的问题, 都是 avi 视频文件, 有的能用 OpenCV打开,有的不能。 视频的格式主要由压缩算法
阅读全文
摘要:1、读写图像文件 将图像文件读入内存,可以使用 imread()函数;将 Mat 对象以图像文件格式写入内存,可以使用 imwrite()函数。 2、读图像文件 imread()函数返回的是 Mat 对象, 如果读取文件失败, 则会返回一个空矩阵,即 Mat::data 的值是 NULL。执行 im
阅读全文
摘要:在 OpenCV 2 中虽然引入了方便的 Mat 类,出于兼容性的考虑,OpenCV 依然是支持 C 语言接口的 IplImage 和 CvMat 结构。如果你要与以前的代码兼容,将会涉及 Mat 与 IplImage 和 CvMat 的转换。 1、 Mat 转为 IplImage 和 CvMat
阅读全文
摘要:从前面的例程中, 可以看到 Mat 类重载了<<操作符, 可以方便得使用流操作来输出矩阵的内容。默认情况下输出的格式是类似 Matlab 中矩阵的输出格式。除了默认格式,Mat 也支持其他的输出格式。代码如下: 首先创建一个矩阵,并用随机数填充。填充的范围由 randu()函数的第二个参数和第三个参
阅读全文
摘要:使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存。虽然不了解 Mat 的内存管理机制,也无碍于 Mat 类的使用,但是如果清楚了解 Mat 的内存管理,会更清楚一些函数到底操作了哪些数据。 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方
阅读全文
摘要:Mat_类是对 Mat 类的一个包装,其定义如下: template<typename _Tp> class Mat_ : public Mat { public: //只定义了几个方法 //没有定义新的属性 }; 这是一个非常轻量级的包装, 既然已经有 Mat 类, 为何还要定义一个 Mat_?下
阅读全文
摘要:利用C++中的运算符重载,Opencv2中引入了Mat运算表达式。这一新特点使得使用c++进行编程时,就如同写Matlab脚本。 例如: 如果矩阵A和B大小相同,则可以使用如下表达式: C=A+B+1; 其执行结果是A和B的对应元素相加,然后再加1,并将生成的矩阵赋给C变量。 下面给出 Mat 表达
阅读全文
摘要:Mat 类提供了多种方便的方法来选择图像的局部区域。 使用这些方法时需要注意,这些方法并不进行内存的复制操作。如果将局部区域赋值给新的 Mat 对象,新对象与原始对象共用相同的数据区域,不新申请内存,因此这些方法的执行速度都比较快。 1、单行或单列选择 2、用Range选择多行或者多列 Range
阅读全文
摘要:如果你熟悉 C++的 STL 库,那一定了解迭代器(iterator)的使用。迭代器可以方便地遍历所有元素。Mat 也增加了迭代器的支持,以便于矩阵元素的遍历。下面的例程功能跟上一节的例程类似,但是由于使用了迭代器,而不是使用行数和列数来遍历,所以这儿没有了 i 和 j 变量,图像的像素值设置为一个
阅读全文
摘要:一、四个坐标系简介和相互转换 相机模型为以后一切标定算法的关键,只有透彻的理解了,对以后的标定算法才有更好的理解。 首先要理解相机模型中的四个平面坐标系的关系:像素平面坐标系(u,v)、像平面坐标系(图像物理坐标系(x,y))、相机坐标系(xc,yc,zc)和世界坐标系(Xw,Yw,Zw)。 我们通
阅读全文
摘要:很多时候, 我们需要读取某个像素值, 或者设置某个像素值; 在更多的时候,我们需要对整个图像里的所有像素进行遍历。OpenCV 提供了多种方法来实现图像的遍历。 1、at()函数 函数 at()来实现读取矩阵中的某个像素,或者对某个像素进行赋值操作。下面两行代码演示了 at()函数的使用方法。 如果
阅读全文
摘要:1、对于单通道图像,其元素类型一般为 8U(即 8 位无符号整数) ,当然也可以是 16S、32F 等;这些类型可以直接用 uchar、short、float 等 C/C++语言中的基本数据类型表达。 2、如果多通道图像,如 RGB 彩色图像,需要用三个通道来表示。在这种情况下, 如果依然将图像视作
阅读全文
摘要:Mat 是一个非常优秀的图像类,它同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵。有多种方法创建一个 Mat 对象。 1、构造函数方法 下面是一个使用构造函数创建对象的例子。 常用的构造函数 2、使用create()函数创建对象 除了在构造函数中可以创建图像,也可以使用 Mat 类的 crea
阅读全文
摘要:1、Mat类 早期的opencv中,使用IplImage和CvMat数据结构来表示图像。IplImage和 CvMat 都是c语言的结构。使用这两个结构的问题是内存需要手动管理,开发者必须清楚的知道何时需要申请内存,何时需要释放内存。这个开发者带来了一定的负担,开发者应该将更多精力用于算法设计,因此
阅读全文
摘要:转自:http://www.cnblogs.com/gaoxiang12/p/5113334.html 刚体运动 本篇讨论一个很基础的问题:如何描述机器人的位姿。这也是SLAM研究的一个很基本的问题。这里的位姿表示了位置和姿态。描述位置很简单,如果机器人在平面内运动,那么用两个坐标来描述它的位置:
阅读全文
摘要:转自http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html 对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std。这句话其实就表
阅读全文
摘要:1、它是后面处理地图的基础,最简单的点云地图就是把不同位置的点云进行拼接得到的。 2、由于从RGB-D相机里可以采集到两种形式的数据:彩色图像和深度图像。如果有kinect和ros,那么可以运行如下 roslaunch openni_launch openni.launch 来使Kinect工作。如
阅读全文
摘要:一、开发环境的准备 1、编程环境为ubuntu 14.04 64bit; 2、Opencv的安装 1)使用从源代码安装的模式, 安装的版本号为opencv-2.4.12,其下载地址为http://opencv.org/downloads.html 2)安装依赖项,如下 sudo apt-get in
阅读全文