自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱学习的草莓熊

这只草莓熊喜欢机器人技术~

  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 统一回复一下大家

很久很久没有登录过CSDN了,自从毕业以后,由于工作原因,我未能在原先的机器人技术领域继续深耕,也未能继续在此坚持撰写技术博客,不免有些遗憾。看到有很多人对我的文章评论和留言,让我感到十分荣幸,曾经写的那些文字如果能够帮到你,我也很有成就感。我非常乐意在文章的评论、私信中和大家交流,对于我所知道的,我也愿意详细解答。**但是很多人可能感到失望,因为我已经很久没有在此写过东西了,也没有对留言做过任何回复,在后台看到很多人期待的留言,十分抱歉,许多问题需要细致的调试才能解答,我可能已经没有能力对相关问题进...

2021-10-27 23:42:40 537 2

原创 RealsenseD415/D435深度相机常用资料汇总

Intel的RealsenseD400系列是2018年初推出的新款深度相机,包括RealsenseD415和D435系列,这两款相机具有小巧的外形,适用于近距离深度图像采集,具有较高的图像分辨率和采样帧率,适合做多种深度信息相关的应用开发,但是由于出来的较新,网上使用资料不如kinect系列丰富,主要资料来源于Intel官网、github、ROS官网等网站,我使用的是D415,但是两款相机的SDK...

2018-05-28 23:08:21 34612 33

原创 在gazebo中运行turtlebot机器人模拟gmapping的slam过程

近期在ROS环境下进行机器人仿真时用到了gazebo这个仿真软件,有了该软件,可以在没有实体机器人的情况下做一些算法模拟,直观的观察到机器人的运动情况,这对刚开始学习ROS和机器人程序开发的人来讲有很大帮助,本文参照一些网上教程在来仿真实现gmapping的slam过程,并总结了一些遇到的问题。仿真环境操作系统:ubuntu 16.04 ROS版本:kinetic Gazebo版本...

2018-03-09 22:34:12 22351 16

原创 DH建模的具体步骤

(本文数据来自https://wenku.baidu.com/view/03d586024afe04a1b171de8d.html)D-H)建模方法是由Denavit和Hartenberg 提出的一种建模方法,主要用在机器人运动学上,这种方法在每个连杆上建立一个坐标系,通过齐次坐标变换来实现两个连杆上坐标的变换,在多连杆串联的系统中,多次使用齐次坐标变换,就可以建立首末坐标系的关系。学习DH建模的主

2017-11-17 15:28:18 68605 93

原创 ROS的几个基本概念,你真的懂了吗?

入门ROS,第一步应该先看一遍ROS官网的 Getting Started页面,但后来发现,入门已久的我还得常来看这个页面。这也不能怪草莓熊笨,因为越是基础的东西对上层知识点影响就越大,历久弥新,每每看到这些知识点,总能找到一些之前的盲点。那么,无论你是否看过ROS的Getting Started页面,下面的这些基本知识点都值得你阅读一遍。我们一起来梳理一下ROS的基本概念。ROS的主要概念...

2019-01-09 10:20:50 7835 6

原创 ROS入坑指南

ROS是 Robot Operating System的简称,被称作机器人操作系统,是当前机器人技术领域使用度最广的开发系统。如果你能看到这篇文章,说明你已经进入了机器人技术领域,可能正在探索机器人某项功能的开发,可能正在完成着相关学科任务,那么,ROS对于你来说,将是学习机器人技术的一条必由之路,它提供了一种系统、规范、通用的机器人技术开发方式,如果不借助ROS技术,进入机器人技术领域的门槛可能...

2019-01-07 13:01:32 1290

原创 学习ROS,你所需要的基础知识

如果告诉你,学习ROS可以零基础入门,那也有点忽悠人了。九层之台,起于垒土。学习ROS还是需要一点基本功的。这些基本功是你搞各种机器人程序开发的基础,如果没有,早晚要补上,逃不了的。那么,最起码要具备哪些能力呢?1、C++/Python编程能力我起步用的是C++,鉴于Python现在这么火,你完全可以起步用Python。学习ROS免不了编程,总得会敲代码吧,不需要多么复杂的编程技巧,只要你用...

2019-01-07 12:52:17 7439 6

原创 深入解读相机矩阵

在这片文章里,你将了解到以下内容:1、相机的针孔模型2、相机矩阵的概念3、相机内参的含义4、相机外参的含义1 相机针孔模型针孔模型是相机成像的基础模型,是理解后续相机矩阵内容的基础。下图描述了基本的小孔成像过程:图中,X坐标系是针孔所在坐标系,Y坐标系为成像平面坐标系,P为空间一点,小孔成像使得P点在图像平面上呈现了一个倒立的像。这幅图是前一幅图的俯视图,由三角相似关系可以得...

2018-10-14 23:27:52 27924 19

原创 解决ORK(Object Recognition Kitchen)的Web UI 无法显示3D模型的问题

ORK(Object Recognition Kitchen)是一个方便易用的一个物体识别库,里面包含了多种识别算法,包括linemod、tod等识别方法,官网的教程很全面,从安装到操作都讲的很详细,但是,照着教程走下来,有一个环节始终困扰这我,那就是ORK提供的Web UI管理界面始终无法显示物体3D模型,这个功能其实并不影响最终linemod等算法的使用,但由于无法显示模型及模型列表,总让人感...

2018-10-09 19:10:42 1635 7

原创 moveit的3D Perception功能(环境感知)

ROS的moveit中,可以使用深度相机感知环境数据,生成一种被称为octomap的方格地图,感知后的环境可以作为环境障碍物,机械臂规划路径时会主动避开有octomap地图的地方。其中用到了moveit的组件 Occupancy Map Updater,Occupancy Map Updater 接受两种数据1、pointcloud2点云2、深度图 sensor_msgs/Image下面以一...

2018-10-01 17:07:56 5769 15

原创 Ros环境下配置启动Robotiq 2f-140 电爪

Robotiq电动夹持器是一款常见的机械臂加持设备,有两指、三指等多种型号,我所接触的是RobotIQ 2f-140型号,下面介绍该电动手抓在ROS下的驱动包配置及使用方法。操作系统:Ubuntu16.04ROS版本:Kinetic电爪型号:RobotIQ 2f-140电爪接口:ModBus RTU转usb接口1、下载robotiq功能包建立一个空的catkin空间robotiq_ws...

2018-09-26 20:00:27 4434 11

原创 使用Qt5为Ros项目添加GUI界面

开发ROS程序的过程中,有时需要给程序加一个Qt界面以方便操作,对于一个刚刚创建的ROS程序来说,添加qt界面需要对cmakelist.txt文件配置很多东西,许多人难就难在不会修改对应的cmakelist.txt文件上,下面是我根据网上资料整理的一份ROS+Qt5的工程创建方法,包括了从创建一个最基础的ros空间到添加界面的全过程。系统环境:ubuntu16.04 ros版本:kineti...

2018-09-03 10:18:58 14078 21

原创 Gazebo环境下使用turtlebot建立环境octomap地图

octomap是一种空间概率地图,可以使用方格来表示周围的环境,就像“我的世界”游戏里表示的那样,优点是地图计算速度快,内存占用少,可以调整地图的分辨率等等,与平面二维地图相比,octomap所记录的环境信息是三维的,是实现vSlam的一种方式,这里展示一个小小的示例例程:在gazebo仿真环境下,使用turtlebot仿真机器人,通过机器人身上的kinect传感器采集点云数据,建立octomap...

2018-08-19 13:24:20 5292 3

原创 使用moveit控制gazebo仿真环境下的Aubo-i5机械臂运动

在上一篇文章《使用moveit控制gazebo仿真环境下的ur机械臂运动》中,模拟了一次简单的机械臂仿真运动,这一次,我们更进一步,实现一次其他型号的机械臂仿真运动,比如aubo-i5,这是一款国产机械臂,已经有不少人在使用了。 测试系统环境:ubuntu16.04 ROS版本:kinetic gazebo版本:8.6.0 目标:实现aubo-i5机械臂在gazebo下的仿真运动 实...

2018-08-15 19:08:04 7828 5

原创 使用moveit控制gazebo仿真环境下的ur机械臂运动

如果没有真实机械臂,那么,使用仿真机械臂是一个很好的解决办法,UR系列机械臂应广泛,要想实现一次快捷的机械臂仿真,从UR5着手相对来说较为容易。测试系统环境:ubuntu16.04 ROS版本:kinetic gazebo版本:8.6.0准备工作: 下载ur机械臂的ros开发包并编译 https://github.com/ros-industrial/universal_robot...

2018-08-15 16:53:31 13388 25

原创 AR Tag介绍

什么是AR Tag?ARTag(AR标签,AR是“增强现实”的意思)是一种基准标记系统,可以理解为其他物体一种参照物,看起来类似二维码,但其编码系统和二维码还是有很大区别,多用在相机标定,机器人定位,增强现实(AR)等应用场合,其主要作用是能够反映出相机与标签的位姿关系。进而可以反映出场景中物体与相机的参照关系。AR Tag是什么样子?一个普通的ARTag形如下图,图案代表的是一个...

2018-06-09 10:26:48 9323 1

原创 使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

2018-05-19 23:42:12 17652 51

原创 使用moveit!控制真实机械臂(3)——修改moveit配置文件来控制真实机械臂(9月27日更新)

要想使用moveit来控制真实机械臂,我们需要修改配置文件夹下的几个文件,因为默认生成的moveit配置文件中,所使用的部分参数是针对虚拟机械臂的,你可以在rviz环境下观察模型额运动,但真正的控制信号并不会发出来。具体要修改以下几个地方:1、demo.launch文件中参数fake_execution的值改为false<!--此段代码来自moveit配置文件demo.launc...

2018-05-13 16:08:17 14490 37

原创 ROS下使用mux实现多路消息切换

1、初识ROS下的mux节点MUX是单词multiplexer的简写,是数据选择器的意思。ROS下的mux节点也是这个功能,主要是实现多路消息的切换,可以比喻为消息开关。该节点属于topic_tools功能包,ROS下还有名称于此相似的 twist_mux和 cmd_vel_mux节点,他们针对特定的消息类型丰富了部分功能,但核心都是实现多路消息切换,而mux节点是针对ros下任意消息类型的(...

2018-05-12 10:46:42 2663 3

原创 使用moveit!控制真实机械臂(0)——思路

moveit!可以实现对机械臂的轨迹控制,这里的机械臂既可以是真实的,也可以是虚拟的,在此,我们想使用moveit!规划的轨迹来控制一个真实的机械臂,真实的机械臂千差万别,这里不涉及到真实机械臂的控制驱动,只讲一讲控制思路,每一条思路今后会再写文章逐步细化。基本思路:1、首先要有一个与真实机械臂相一致的机器人模型文件。这里的一致指的是机械臂连杆参数一致,模型的细微差别不受影响。这一步也不是...

2018-05-09 23:02:47 12572 10

原创 使用moveit!控制真实机械臂(4)——了解moveit!所使用的action

action知识要点回顾:action是ROS下节点间数据通信的一种方式,这种方式本质也是基于ros消息的,之前你应该频繁的使用或ros的消息,应该能够基本掌握订阅、发布消息,此时,能够用到action表明你已经进入到ros编程的一个新阶段。action的基础内容可以先看一下ros 官网和古月的博客,可以这样简单理解:action打包了同一行为下的多个消息,使用action可以将你从繁琐的消息订阅与

2018-05-09 22:45:07 15243 33

原创 pdist_scale和gdist_scale参数对move_base路径规划的影响

影响move_base路径规划的参数众多,这次单独来看看两个比较重要的参数:pdist_scale和gdist_scale基本含义(来自《ROS入门实例》): pdist_scale: 全局路径规划和到达目的位置之间的权重。这个参数比gdist_scale大时,机器人更倾向于考虑全局路径规划。 gdist_scale: 到达目的位置和全局路径规划之间的权重。这个参数比pdist_scale...

2018-04-06 09:30:48 2308

原创 使用move_base规划路径后,小车接近目的地后原地打转的原因分析

在实验过程中,计划使用move_base规划路径,让AGV小车到达指定的目标点,但小车“到达”目的地后不停的旋转,停不下来。对此,发现了导致这一现象的一个原因,仅供参考。 上图描述的就是这种现象,为了便于观察,rviz视图中隐藏了机器人,只保留了机器人的基座标。图中,第一次指定目标时,小车到达了指定地点并停了下来,第二次指定目标时,小车也几乎到达了指定地点但没有停下来,而是不停的在原地旋...

2018-04-05 22:50:01 9563 2

原创 move_base为何竟然控制小车走出一个莫名其妙的矩形

问题现象:想使用move_base控制小车到达目标地点,小车非但没有去目标点,反而开始自己走矩形了!难道是小车要智能觉醒? 现象解释:查阅了官网资料,觉得这一段可以解释小车的现象,截图来自ROS-wiki:move_base页面。 也就是说,在move_base参数配置不正确的情况下,程序会认为周边存在障碍物而使得目标到不了,车会采取一些“手段”清除障碍物,首先,地图中设定的障碍物会被...

2018-03-24 11:26:08 1416 3

原创 ROS环境下launch文件格式说明

XML语法提要roslaunch文件的本质是xml文件,首先要简单了解一些xml相关语法: 1、标签必须闭合<launch> </launch> //成对的标签闭合,中间可以写内容<node XXXX /> //当没有中间内容需要写时,也可使用自闭合标签,此时仍然可以为标签添加属性,XXXX内容就代表属...

2018-03-22 22:38:48 9721

原创 使用move_base进行路径规划

本文所实现的效果来自《ROS入门实例》,对初学者会有一定帮助。move_base是ROS环境下一个重要的功能包,可以使机器人在指定框架内移动到目标位置,是实现后续导航功能的基础,很多人想学习gmapping在ROS下的使用,那么,可以先看看move_base这个包的使用方法,此处使用模拟机器人turtlebot在仿真环境下测试move_base包的功能,不需要实体机器人。1、确保catki...

2018-03-10 15:13:07 12506 1

原创 使用minicom实现linux虚拟机与pc的串口通信

软件环境: 主机:win10 虚拟机:vmware12, 虚拟机系统:ubuntu16.04 ubuntu下的串口调试软件:minicon 2.7 windows下的串口调试软件:随便找一个就是硬件环境: 笔记本电脑+两个互联的USB转串口接口。由于我只想测试虚拟机与主机的串口通信,因此没有什么下位机串口设备,就两个USB转串口插头对接在一起,GND与GND相接,TX与RX相接

2018-01-14 16:52:16 2700

原创 Qt中安装ROS插件qt57creator-plugin-ros所遇到的问题

qt57creator-plugin-ros这个插件应该是很多想用Qt开发ROS程序的人都会接触的东西。为了使Qt环境能够开发ROS程序,我耗费了很长时间为qt安装qt57creator-plugin-ros插件,期间走了许多弯路,有些问题甚至最终也没找到满意的答案,现在将出现的问题总结如下。我主要是参照“创客制造”的教程来操作的,教程网址为http://www.ncnynl.com/arch

2018-01-06 20:48:33 5965 13

原创 linux环境下,解决eclipse找不到Pylon示例程序链接库的问题

问题来源: 最近须要在linux环境下学习basler摄像头的使用方法,安装了basler的套装程序pylon5,该套装程序提供了开发程序所必须的库文件,并在Sample文件夹下提供了一些示例程序,每个示例程序都配好了makefile文件,在终端里运行make,即可生成可执行文件。 但是,若不使用原有的makefile文件,而是将示例程序的.cpp文件添加到eclipse工程中编译时,就会因缺少

2017-10-15 20:47:21 683

原创 现代OpenGL中,如何使用不同图元类型画一个正方形?

在以往的OpenGL1.1版本中,要想画一个正方形是比较容易的,院校里大部分计算机图形学课程都是围绕1.1版本来讲的,但是过渡到现代OpenGL以后,画图方式与原先有了很大不同,其中一个重要变化就是图元类型,下面就来看看在现代OpenGL(本文使用4.3版本)中,如何使用不同的图元类型画一个正方形。首先对比一下新旧版本中图元类型的差异 图元类型 OpenGL1.1版枚举量 OpenGL4

2017-09-03 15:24:42 1136

原创 如何理解“命名空间”?

命名空间是为了解决相同作用域下的命名问题。在C、C++、C#等语言中,都有命名空间的概念,这是为了防止不同人编写类库发生命名冲突而设计的,命名空间可以使变量、函数名称、类名称作用在本空间内,而其他空间可以使用同样的名称。就好比不同的文件夹下可以有相同的文件名一样,但在相同的文件夹下不能有重复的文件名,命名空间就好比这个虚拟的文件夹。C语言的命名空间。C语言也有这一概念,只是命名可将可自定义的范围很小

2017-09-01 09:56:54 20847 3

原创 使用邻接表进行拓扑排序的算法说明

讲拓扑排序的概念,先来回顾一个大家熟悉的东西:技能树(图)! 因为这个特好理解,玩过暗黑或其他RPG游戏的都应该见过类似的技能树,一句话,就是学习高级技能前需要先学习之前的低级技能。 一个技能树其实是一个简单的图,你可以把它再变化一下就是一张图,即让一些高级技能间也发生联系,使得学习一种高级技能可以通过多种途径,于是这就是一个正儿八经的图了。 拓扑排序就是要排出这样一个线性序列,即“高等技

2016-12-30 15:03:09 12286 4

原创 快速排序算法说明

快速排序算法的主要思想是分段与递归。 分段:取出一个元素,将它放到一个特定位置,是的左边的数全小,右边的数全大 递归:对左边的数执行该算法,对右边的数执行该算法。那么,分段过程中,如何找到这样一个特定的分段位置呢?来看一下算法在递归前的运行过程。 假设有一个数组,其中7个数如下图所示,需要进行快排。 我们需要i,j 做两个下标,指向数组两头,还有一个临时变量temp,用来当临时的容器。 首

2016-12-29 20:23:14 393

原创 “头插法”与“尾插法”建立线性链表的异同

当我们建立一个线性链表的时候,可以使用不同的插入方式,一种被称为“头插法”,另一种被称为“尾插法”,这两种方法都能够建立链表,但最终使用时稍有区别。采用头插法建立链表时,新加入的元素指向链表头,链表头指向新加入的元素。假如现在有一个待插入数据的链表指针Head,程序中你用malloc()动态开辟了一个链表节点,并用一个叫temp的指针指向该节点,下面两句话能够将新节点以头插法链入链表

2016-12-29 15:07:54 11617 1

原创 一种在嵌入式环境下的2D游戏栅格地图绘制方法

在嵌入式系统开发中,如果你想要在LCD屏幕上绘制一幅二维栅格地图(就像坦克大战那样的砖块地图),该如何实现呢?应该会用到一个二维数组来存储地图信息,但如何构建这幅地图呢?肯定不是手工在数组里赋值吧,那样很麻烦,也不直观,我在我的课程实验中是这样做的,使用画图软件先“画一幅地图”,然后通过数据转换实现地图的直观、快捷设计,适用于小的实验程序,分享给大家。实验开发环境:嵌入式芯片为STM32F42

2016-12-12 09:33:38 2731

原创 二叉树的按层遍历法

程序自己写的,肯定能运行,代码啰不啰嗦暂且不考虑了。程序功能:【实现二叉树的按层遍历法】编程关键点:【建立一个队列】【函数递归】编程思想:二叉树分好多层,因为要按层遍历,所以如果直接采用函数递归的话,一下子就深入层底了,达不到按层的目的。所以要换一个角度,按照队列顺序输出!算法步骤如下:1、把根节点A放入队列,此时队列为:A,队列头指针指向A,也就是队列第一个元素

2016-10-10 10:09:05 25859 20

原创 scanf(),getchar(),gets()区别与用法

这几个常见的输入函数时常困扰着初学编程的人,简单介绍一下区别与用法。一、scanf();本人最常用,基本格式就是scanf(“%d,%c”,&a,&b);输入的数量可以继续扩充,能够将键盘输入以不同格式保存在变量里,功能强大。注意点:1、不要忘了加“&”,这个取地址符很重要,表明数据要放到这个地址去,有人经常丢;2、scanf(),判断输入结束的标志是空格和回车,所以输入字符串时,

2016-10-08 10:18:28 5230 1

原创 DH建模的知识要点

D-H)建模方法是由Denavit和Hartenberg 提出的一种建模方法,主要用在机器人运动学上,这种方法在每个每个连杆上建立一个坐标系,通过齐次坐标变换来实现两个连杆上坐标的变换,在多连杆串联的系统中,多次使用齐次坐标变换,就可以建立首末坐标系的关系。学习DH建模的主要知识点如下:1、会齐次坐标变换(这是机器人运动学的基础知识)2、知道DH建模中α,a,d,θ这四个量对应于连杆上的那

2016-10-06 12:11:32 6048

原创 OpenGL中使用中点画圆法画圆

OpenGL 中采用中点画圆法绘制圆

2016-10-05 09:50:52 15741

原创 使用typedef定义结构体的问题

在c语言编程中,typedef的使用可以提高编程效率,特别实在结构体定义中,可以节省关键字struct,使得之后结构体定义变量时方便快捷,具体举例如下:typedef struct sNode{int x;int y;}Node;此时,要定义一个类型为struct sNode 的变量s,可以这样写:Node s; //省去了前面的关键字struct这里甚至可

2016-10-04 21:40:47 2221 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除