内容列表 机器视觉原理 开源软件或框架 OpenCV TensorFlow PyTorch YOLO 对于人类来讲,90%以上的信息都是通过视觉获取的,眼睛就是获取大量视觉信息的传感器,然后再交给大脑这个“处理器”进行处理,之后我们才能理解外部环境,建立世界观。 如何让机器人也能理解外部环境呢,我们首先想到的就是给机器人也安装一对眼睛,是不是就可以和人类
移动机器人是机器人“大军”中非常重要的一种类型,在我们的生活和生产中也普遍存在。 此时你脑海里想到了哪些机器人呢?再仔细想想这些机器人是如何“移动”的呢? 是像家里扫地机器人一样的两轮驱动,还是像马路上小汽车一样的前轮转向运动? 不同的运动方式适合不同的移动场景,接下来,我们以差速运动、阿克曼运动和全向运动这三种最为常见的运行方式为例,深入讲解每种运动背后的基本原理。 一、差速运动控制
移动机器人分布式通信 前边我们编写并运行的代码都是在机器人的控制器上实现的,需要我们先远程登录到机器人上再进行操作。 我们讲到ROS是一个分布式框架,那我们是不是可以在自己的电脑上编写并运行代码,再通过网络与远程的机器人实现数据交互呢? 当然是可以的。 我们甚至不用修改任何一行代码,只需要配置一下机器人控制器和笔记本电脑的ROS环境即可。 接下来,我们就一起学习这种分布式通信的配置方法。
移动机器人开发流程 在机器人操作系统ROS环境中,无论是移动机器人还是其他类型的机器人,那这个流程是什么样的呢?我们先来了解一下: 图1 ROS机器人开发的主要流程 这里我们直接给出ROS机器人开发的主要流程,共分为五个步骤。 第一步,类似于我们使用任何软件写代码之前,都需要进行的一个步骤,建立工程,也就是new project。在ROS开发中,这一步叫做创建工作空间,也就是保存后
小车人体跟随 之前我们介绍了如何利用 X3派 进行人体检测和跟踪,那么加入我们想要将体检测和跟踪和真实机器人做一个结合会是一种什么样的体验呢? 这里,我们将通过X3派检测到的人体目标进行一个移动跟踪,最终的一个效果就是当装配着X3派和摄像头的小车面前出现一个人物时,小车将会跟随着人体一起移动。接下来,让我们一起来体验一下吧。 编程开发方法 先来看整个程序的流程图: 这里,我们将通过
SLAM建图 从这一节开始,我们开始尝试将 TogetherROS 与机器人联系起来做一些小项目。 第一节将开始学习 SLAM 技术。SLAM一般指即时定位与地图构建,即时定位与地图构建(Simultaneous Localization and Mapping,简称SLAM) 这个章节,我们将联系ROS2 和 TogetherROS ,使用 ROS2 的 SLAM-Toolbox 作为建图
内容列表 一、Rviz 二、rqt 2.1 rqt_graph 2.2 rqt_console 2.3 rqt_plot 2.4 rqt_image_view 三、Gazebo ROS系统中提供了多种可视化工具,可以满足我们可视化显示、三维仿真等开发需求。接下来我们将讲解三类可视化工具的使用方法。 一、Rviz ROS系统中使用频度最高、且最为重要的
移动机器人ROS架构分析 1.1小海龟仿真 ROS的核心概念不少,有节点、话题、消息、服务等,在实际机器人运行过程中,这些概念是如何体现的呢? 我们先来运行ROS系统一个经典的例程——小海龟。 请大家按照以下步骤进行操作。 1.首先,打开终端; 2.输入以下命令行,启动ROS Master: $ roscore 3.启动成功后,打开一个新终端,输入以下命令行,启动小海龟仿真器,启动
单目3D室内检测 接下来,我们继续学习物体 3D 检测算法。 机器人有时候不仅仅要识别出人,还要识别出房间里有什么东西,这就是室内物体 3D 检测啦。 在TogetherROS上,就集成了这样一套算法,接下来让我们一起来体验以下吧。 先来看一张图片,很明显大家可以看到图中有两个垃圾桶。 运行示例程序 # 配置ROS2环境 $ source /opt/tros/setup.bash
人体检测与跟踪 不知道大家有没有玩过类似XBOX的体感游戏机,上边会有一个相机,动态识别我们的动作,比如跳舞、打球,是不是还挺神奇的,这就是人体检测与跟踪的应用。 TogetherROS中也集成了一套类似的算法,可以识别人体、人头、人脸、人手等一系列关键点,我们来体验一下。 编程开发方法 先来看一个人体识别的基础应用,我们驱动相机后,实时采样视觉信息,然后再通过检测算法,识别每一幅图片中人
动态目标检测 图像物体分类重在分析图像中存在的物体是什么,便于机器理解看到的环境信息,另外一种场景,机器不仅要识别某一物体,还要知道这个物体所在的位置,当物体在运动时,更要快速连续的跟踪,这就是目标检测,重在分析识别到物体在图像中的位置。 目标检测原理 假设我们要识别图像中这只狗的位置,以最为常用的YOLO算法为例,它会运用单个卷积神经网络(CNN) ,将图像分成网格,并预测每个网格的对
图像物体分类 接下来我们继续学习基于Hobot CNN模型推理库之上的视觉应用。 机器人要感知周边环境,那就得确定看到的图像中都有什么,比如地上有一只猫,旁边有一个桌子之类的,这个猫和桌子就是具体的物体分类啦。 图像分类原理 如果是人来识别一只猫的话,似乎再简单不过了,无论黑猫、白猫还是花猫,我们一眼就可以看出来。 不过这件事对于机器人来讲可没有那么简单,为了能够让机器准确识别一只猫,无
智能机器人与机器学习是紧密相连的,机器学习又可以分成数据采集、标注、训练、推理等环节,其中数据的训练需要消耗大量算力,适合在服务器或者云端进行,不过训练好的模型可是要部署到机器人端进行推理运算的,所以模型推理的效率如何,直接决定了机器人视觉处理的效率,这刚好是TogetherROS所擅长的地方。 Hobot DNN模型推理库 TogetherROS集成了Hobot DNN模型推理库,集成了众多
CV图像加速处理 OpenCV是一个著名的机器视觉处理库,相信大家都有听过,这个库中有很多图像处理的基础算法,比如灰度变化、图像滤波等,不过这个库为了保证较好的通用性,主要通过软件实现各种算法,TogetherROS对此作了大量优化,我们一起来看看。 TogetherROS视觉加速 TogetherROS中集成了地平线Hobot CV视觉加速库,通过底层芯片中的硬件引擎,软硬件协同,可以提升
机器视觉介绍 机器视觉概念 机器视觉, 就是用计算机来模拟人的视觉功能,但这并不仅仅是人眼的简单延伸,更重要的是像人脑一样,可以从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、控制等场景。 获取图像信息相对简单,但想让机器人理解图像中千变万化的物品,就难上加难了。 为了解决这一系列复杂的问题,机器视觉也是一个涉猎广泛的交叉学科,横跨人工智能、神经生物学、物理学、计
I2C同步串行通信 SPI通信虽然功能更强大了,但是需要4根线做连接,还是有点复杂,接下来I2C的连线就简单很多了。 I2C通信原理 I2C也是一种常用的串行通信方式,和SPI一样可以连接多个设备,重点是它只需要两根线就可以完成 不过他的两根线和UART不同,不全是传输数据用的,I2C中的一根线是时钟线,另一根才是传输数据的,这根线可以双向的传输数据。 I2C通信中可以有多个主设备或
SPI同步串行通信 UART串口通信中的数据只能一位一位的传输,如果数据量比较大的时候,传输速率会受到很大影响,此时我们就可以考虑使用同步串行通信了,比如SPI。 SPI通信原理 SPI,全称是Serial Peripheral Interface,也就是串行外设接口,同样是一种通信协议,在很多芯片中都有集成。 相比之前学习的UART串口通信,他多了两根线,其中一个是时钟信号,另一个是
UART串口通信 现在的传感器和执行器种类越来越多,需要和控制器传输的数据也是多种多样,只用GPIO来控制和读取的话,只有0和1的状态,未免还是有点麻烦,各种各样的通信方法也层出不穷,UART串口通信绝对是最为常用的一种。 串口通信原理 串行通信是一种通讯协议,也可以简称为串口,可以理解为数据是串成一串的,所以也就只能一位一位的发送,这样传输的速度虽然受到了限制,但是对硬件线路的要
PWM脉冲宽度调制 我们已经可以用GPIO控制LED灯一闪一闪亮晶晶了,这样只有亮和灭的状态似乎还是太简单了,能不能对LED的亮度进行调整呢? 当然没问题,这就要用到接下来学习的PWM脉冲宽度调制了。 PWM脉冲宽度调制原理 在GPIO的数字输入和输出模式中,只有高低电平,高电平一般是3.3V或者5V,低电平就是0V,如果我想要一个折中一点的电压怎么办呢?PWM大家了解一下。 P
TogetherROS示例运行接下来,我们就在安装配置好TogetherROS的旭日X3派上,试一试系统自带的一些例程,确保整个系统已经可以正常运行。 通信测试先来测试一下TogetherROS系统的通信功能。 我们需要启动两个终端,分别连接到旭日X3派上,并分别按以下命令配置环境变量。 终端1: bash $ source /opt/tros/local_setup.bash
数字输入与输出 数字输入与输出是最常用的一种外设通信方式,虽然每一个端口只有0和1两种状态,但却可以组合出各种各样的变化。 数字输入与输出原理 数字输入与输出,也称为通用输入输出,全称是General-purpose input/output,大部分情况下,我们都会用简称GPIO GPIO的功能,主要是指这个管脚可以作为数字信号的输入或者输出使用,到底是输入还是输出呢,这需要我
移动机器人认知 内容列表 1.2.1机器人的定义与组成 机器人的定义 机器人的四大组成部分 里程计 外部传感器 1.2.2移动机器人操作方法 系统启动 遥控运动 传感器数据 移动机器人到底是由哪些部分组成的呢,接下来我们就一起认识一下它。 我们先来看一款我们后续内容将要频繁提到的移动机器人——LIM
分布式通信配置 智能机器人的功能繁多,全都放在一个计算机里,经常会遇到计算能力不够、处理出现卡顿等情况,如果可以将这些任务拆解,分配到多个计算机中运行岂不是可以减轻压力? 这就是分布式系统,可以实现多计算平台上的任务分配。 分布式通信 什么叫分布式? 机器人功能是由各种节点组成的,这些节点可能位于不同的计算机中,这种结构可以将原本资源消耗较多的任务,分配到不同的平台上,减轻计算压
零拷贝数据传输 在传统操作系统的数据传输过程中,系统内部会在磁盘、内存、缓存中多次进行数据拷贝,每次都会占用CPU的资源,数据量小的时候还好,随着数据量的增加,CPU的开销也会持续增加,尤其是在机器人图像数据的应用中 ,经常会发生这种问题,导致CPU都在做数据拷贝,没有时间处理其他的应用功能了,直接的感觉就是处理卡顿。 零拷贝技术 针对这种问题,零拷贝技术应运而生。 零拷贝主要的任务就是
认识移动机器人 内容列表 1.1.1 移动机器人发展现状 移动机器人的概念 移动机器人的发展趋势 移动机器人市场发展情况 1.1.2 机器人操作系统发展与现状 移动机器人操作系统(ROS) ROS2 本篇内容将帮助大家认识移动机器人与其开发中的重要框架——机器人操作系统。 首先我们先介绍一种在我们身边最为常见的移动机器人——扫地机器人。 图1-1 扫地
多节点动作通信 机器人是一个复杂的智能系统,并不仅仅是键盘遥控运动、识别某个目标这么简单,我们需要实现的是送餐、送货、分拣等满足具体场景需求的机器人。 在这些应用功能的实现中,另外一种ROS通信机制也会被常常用到——那就是动作。从这个名字上就可以很好理解这个概念的含义,这种通信机制的目的就是便于对机器人某一完整行为的流程进行管理。 通信模型 举个例子,比如我们想让机器人转个圈,这肯
多节点服务通信 话题通信可以实现多个ROS节点之间数据的单向传输,使用这种异步通信机制,发布者无法准确知道订阅者是否收到消息,本讲我们将一起学习ROS另外一种常用的通信方法——**服务**,可以实现类似**你问我答的同步通信**效果。 通信模型 在之前的课程中,我们通过一个节点驱动相机,发布图像话题,另外一个节点订阅图像话题,并实现对其中红色物体的识别,此时我们可以按照图
多节点话题通信 节点实现了机器人各种各样的功能,但这些功能并不是独立的,之间会有千丝万缕的联系,其中最重要的一种联系方式就是话题,它是节点间传递数据的桥梁。 通信模型 以两个机器人节点为例。A节点的功能是驱动相机这个硬件设备,获取得到相机拍摄的图像信息,B节点的功能是视频监控,将相机拍摄到的图像实时显示给用户查看。 大家可以想一下,这两个节点是不是必然存在某种关系?没错,节
无论是旭日X3派,还是TogetherROS,在正式使用之前,都还需要进行一些必要的配置,完善必要的功能模块,提供完整的算力支持,达到最佳状态。 网络连接 第一个配置,是无线网络连接。 当然,大家也可以直接用网线连接旭日X3派和一个可以上网的路由器,不过更多时候,我们还是会使用无线网络来上网。 我们打开MobaXterm,选择SSH,使用root用户登录板卡;如果之前登录过
我们在旭日X3派上安装系统镜像,并进一步完成TogetherROS系统的安装,大家如果手上有开发板的话,建议跟随课程一起操作。 先来了解一下TogetherROS系统安装的整体流程,第一步,要完成硬件的准备,我们需要找到一块旭日X3派的开发板,并且准备好电源线、SD卡、读卡器、串口模块等必要的配件,当然还需要有一台操作的电脑啦。 硬件都准备好之后,就可以进入第二步,给旭日X3派下载并安装Ubu
机器人开发套件介绍 TogetherROS是一个软件层面的系统,要想使用它,当然得找一个硬件层面的计算平台,安装之后才能使用啦。 之前课程中我们提到,TogetherROS会基于地平线的AI芯片,充分发挥硬件性能,我们如何使用这颗芯片呢? 旭日X3派 没问题,地平线已经为我们准备好了,那就是搭载旭日X3芯片的机器人开发板——旭日X3派。 第一眼看上去,大家是否会想到树莓派
---TogetherROS机器人操作系统介绍---# TogetherROS应用场景相比手机、电脑等通用平台,机器人的类型可是千变万化,构建机器人操作系统的难度就远比手机和电脑的操作系统要复杂很多。机器人的主流应用大致可以分为服务机器人、工业机器人、特种机器人三个方向,无论是在哪一方向,都会面临很多问题。比如传感器、执行器等器件选型复杂,不同场景下需要的性能和参数都有所不同,这就要求操作系统得兼
ROS2 vs ROS1先来看下两个大版本ROS的系统架构。在这张图中,左侧是ROS1,右侧是ROS2,两者最明显的变化,就是Master。在ROS1中,应用层里Master这个节点管理器的角色至关重要,所有节点都得听它指挥,类似是一个公司的CEO,有且只有一个,如果这个CEO突然消失,公司肯定会成一团乱麻。ROS2把这个最不稳定的角色请走了,节点可以通过另外一套discovery——自发现机制,
机器人是一个非常复杂的系统,硬件部分包括:各种各样感知环境信息的传感器、作为大脑进行计算的主控平台、执行动作的电机等等。软件层面包括:感知算法,规控算法,数据驱动的程式,操作系统等。以操作系统为例,应用最为广泛的ROS系统在不断迭代,不过在智能时代洪流的冲击下,还是涌现出一些问题。ROS的一些问题 ROS逐渐成为标准,大量机器人应用被贡献到社区,虽然提高了代码的通用性,但却难以发挥硬件的
智能机器人发展与现状 智能机器人正在改变着我们的生活,想象这样一种场景。 也许不知不觉的某一天,我们就会发现类似这样的机器人会真实出现在生活当中。 科技的发展日新月异,智能机器人也突飞猛进,伴随机器人发展而生的机器人操作系统,也是机器人重要的发展动力之一。 智能机器人举例 提到智能机器人,大家脑海里会映射出什么样的情景呢? 是不是会有很多科幻电影中变形金刚、大白机器人、
Rviz:三维可视化显示平台 大家有没有畅想过一个问题,机器人眼中的世界是什么样的呢?如何能够看到机器人摄像头拍摄到的图像? 这就涉及到可视化显示的范畴了,本讲我们介绍一位ROS中的重量级嘉宾——Rviz,一款三维可视化显示的神器。 Rviz三维可视化平台 机器人开发过程中,各种各样的功能,如果我们只是从数据层面去做分析,很难快速理解数据的效果,比如给你一堆0到255的数字,问这幅图
RQT:模块化可视化工具 ROS中的Rviz功能已经很强大了,不过有些场景下,我们可能更需要一些简单的模块化的可视化工具,比如只显示一个摄像头的图像,使用Rviz的话,难免会觉得操作有点麻烦。 此时,我们就会用到ROS提供的另外一种模块化可视化工具——rqt。 rqt介绍 正如RQT的命名,它和Rviz一样,也是基于QT可视化工具开发而来,在使用前,我们需要通过这样一句指令进行安装,然后就
Gazebo:三维物理仿真平台 ROS机器人开发,机器人当然是主角,如果我们手边没有实物机器人,怎么办呢?没问题,机器人三维物理仿真平台Gazebo,了解一下。 Gazebo仿真平台 介绍 Gazebo是ROS系统中最为常用的三维物理仿真平台,支持动力学引擎,可以实现高质量的图形渲染,不仅可以模拟机器人及周边环境,还可以加入摩擦力、弹性系数等物理属性。 比如我们要开发一个火星车,那就
URDF:机器人建模方法 ROS是机器人操作系统,当然要给机器人使用啦,不过在使用之前,还得让ROS认识下我们使用的机器人,如何把一个机器人介绍给ROS呢? 为此,ROS专门提供了一种机器人建模方法——URDF,用来描述机器人外观、性能等各方面属性。 机器人的组成 建模描述机器人的过程中,我们自己需要先熟悉机器人的组成和参数,比如机器人一般是由硬件结构、驱动系统、传感器系统、控制系统四大部
TF:机器人坐标系管理神器 坐标系是我们非常熟悉的一个概念,也是机器人学中的重要基础,在一个完整的机器人系统中,会存在很多坐标系,这些坐标系之间的位置关系该如何管理? ROS给我们提供了一个坐标系的管理神器——TF。 机器人中的坐标系 机器人中都有哪些坐标系呢? 比如在机械臂形态的机器人中,机器人安装的位置叫做基坐标系Base Frame,机器人安装位置在外部环境下的参考系叫做世界坐
Launch:多节点启动与配置脚本 到目前为止,每当我们运行一个ROS节点,都需要打开一个新的终端运行一个命令。机器人系统中节点很多,每次都这样启动好麻烦呀。有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的,那就是Launch启动文件,它是ROS系统中多节点启动与配置的一种脚本。 Launch文件 这是一个完整的Launch文件,乍看上去,好像Python代码呀,没错,ROS2中
DDS Hello,大家好,欢迎来到《ROS2入门21讲》,我是主讲人古月。 终于讲到ROS2中最为重大的变化——DDS,我们在前边课程中学习的话题、服务、动作,他们底层通信的具体实现过程,都是靠DDS来完成的,它相当于是ROS机器人系统中的神经网络。 通信模型 DDS的核心是通信,能够实现通信的模型和软件框架非常多,这里我们列出常用的四种模型。 第一种,点对点模型,许
分布式通信 智能机器人的功能繁多,全都放在一个计算机里,经常会遇到计算能力不够、处理出现卡顿等情况,如果可以将这些任务拆解,分配到多个计算机中运行岂不是可以减轻压力? 这就是分布式系统,可以实现多计算平台上的任务分配。 分布式通信 什么叫分布式? 之前我们也讲过,在ROS系统中,机器人功能是由各种节点组成的,这些节点可能位于不同的计算机中,这种结构可以将原本资源消耗较多的任务,分配
参数 话题、服务、动作,不知道这三种通信机制大家是否已经了解清楚,本节我们再来介绍一种ROS系统中常用的数据传输方式——参数。 类似C++编程中的全局变量,可以便于在多个程序中共享某些数据,参数是ROS机器人系统中的全局字典,可以运行多个节点中共享数据。 通信模型 比如在机器视觉识别的时候,有很多参数都会影响视觉识别的效果。 在NodeA相机驱动节点中,就需要考虑很多问题,相机连接到
动作 机器人是一个复杂的智能系统,并不仅仅是键盘遥控运动、识别某个目标这么简单,我们需要实现的是送餐、送货、分拣等满足具体场景需求的机器人。 在这些应用功能的实现中,另外一种ROS通信机制也会被常常用到——那就是动作。从这个名字上就可以很好理解这个概念的含义,这种通信机制的目的就是便于对机器人某一完整行为的流程进行管理。 通信模型 举个例子,比如我们想让机器人转个圈,这肯定不是一下就可以完
通信接口 在ROS系统中,无论话题还是服务,或者我们后续将要学习的动作,都会用到一个重要的概念——通信接口。 通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让大家都好理解,我们可以给传递的数据定义一个标准的结构,这就是通信接口。 接口的定义 接口的概念在各个领域随处可见,无论是硬件结构还是软件开发,都有广泛的应用。 比如生活中最为常见的插头和
服务 话题通信可以实现多个ROS节点之间数据的单向传输,使用这种异步通信机制,发布者无法准确知道订阅者是否收到消息,本讲我们将一起学习ROS另外一种常用的通信方法——服务,可以实现类似你问我答的同步通信效果。 通信模型 在之前的课程中,我们通过一个节点驱动相机,发布图像话题,另外一个节点订阅图像话题,并实现对其中红色物体的识别,此时我们可以按照图像识别的频率,周期得到物体的位置。 这个
话题 节点实现了机器人各种各样的功能,但这些功能并不是独立的,之间会有千丝万缕的联系,其中最重要的一种联系方式就是话题,它是节点间传递数据的桥梁。 通信模型 以两个机器人节点为例。A节点的功能是驱动相机这个硬件设备,获取得到相机拍摄的图像信息,B节点的功能是视频监控,将相机拍摄到的图像实时显示给用户查看。 大家可以想一下,这两个节点是不是必然存在某种关系?没错,节点A要将获取的图像数据
节点 机器人是各种功能的综合体,每一项功能就像机器人的一个工作细胞,众多细胞通过一些机制连接到一起,成为了一个机器人整体。 在ROS中,我们给这些 “细胞”取了一个名字,那就是节点。 通信模型 完整的机器人系统可能并不是一个物理上的整体,比如这样一个的机器人: 在机器人身体里搭载了一台计算机A,它可以通过机器人的眼睛——摄像头,获取外界环境的信息,也可以控制机器人的腿——轮子,让
功能包:开发过程的大本营 在下载的教程代码中,大家可以看到有很多不同名称的文件夹,这些在ROS2并不是普通的文件夹,而是叫做功能包。 每个机器人可能有很多功能,比如移动控制、视觉感知、自主导航等,如果我们把这些功能的源码都放到一起当然也是可以的,但是当我们想把其中某些功能分享给别人时,就会发现代码都混合到了一起,很难拆分出来。 举个例子,我们手上有很多红豆、绿豆、黄豆,假设都放在一个袋子
工作空间:开发过程的大本营 大家在之前的学习和开发中,应该有接触过某些集成开发环境,比如Visual Studio、Eclipse、Qt Creator等,当我们想要编写程序之前,都会在这些开发环境的工具栏中,点击一个“创建新工程”的选项,此时就产生一个文件夹,后续所有工作产生的文件,都会放置在这个文件夹中,这个文件夹以及里边的内容,就叫做是工程。 工作空间是什么 类似的,在ROS机器人开发
概念总览 从本节开始,我们将进入第二个篇章,以ROS2的核心概念为线索,详细讲解ROS2的应用开发方法。 本系列视频公开课:https://class.guyuehome.com/detail/p_628f4288e4b01c509ab5bc7a/6
ROS2开发环境配置 ROS机器人开发肯定离不开代码编写,我们课程中会给大家提供大量示例源码,这些代码如何查看、编写、编译呢?我们需要先做一些准备,完成开发环境的配置,给大家推荐两款重要的开发工具——vscode和git。 Git git是一个版本管理软件,也是因Linux而生。 Linux发展迅速,成千上万人都会贡献代码,这些代码有些是修复bug的,有些是贡献新硬件驱动的,有些是增加
ROS2命令行操作 在之前运行小海龟案例的时候,我们接触到了ROS2中一种重要的调试工具——命令行,大家如果第一次使用,可能会有点不太适应,本节将带领大家进一步使用ROS2中的更多命令,随着学习的深入,大家一定可以感受到命令行的魅力。 Linux中的命令行 类似于科幻电影中的片段,命令行操作异常炫酷,但是其上手并不容易。为什么这样一种操作看似并不便捷的方式会被一直保留至今呢?无论对
ROS2安装方法 本节,我们一起安装ROS2,安装前先要了解一下ROS2底层最重要的一种操作系统——Linux。 Linux系统简介 时间回到1991年,一位热爱计算机的芬兰大学生林纳斯,在熟悉了操作系统原理和unix系统后,决定自己动手做一个,实践是检验真理的唯一标准,说干就干,他参考已有的一些通用标准,重新设计了一套操作系统内核,不仅可以实现多用户、多任务的管理,还可以兼容unix原有的
ROS2对比ROS1 在学习ROS2之前,你也许听说或使用过ROS1,ROS2从名称上来看,不就是在第二代ROS么,变化能有多大? 我们就ROS1和ROS2做一个对比,看看这其中的变化到底有多大。 ROS1的局限性 首先来看第一个问题:为什么会有ROS2?Why ROS2? 当然是因为ROS1有一些问题了,具体是什么问题呢?从ROS发展的历史中,我们似乎可以找到答案。 RO
ROS/ROS2是什么 智能时代,机器人正在向全场景的高度智能化方向进化,这对机器人开发提出了巨大挑战,机器人操作系统ROS应用而生。 那什么是ROS?什么又是ROS2呢? 接下来,我们就一起掀起ROS的神秘面纱,带领大家认识一下机器人开发中这位重量级的嘉宾。 ROS的诞生 对于越来越复杂的智能机器人系统,已经不是一个人或者一个团队可以独立完成的,如何高效开发机器人,是技术层面上非
引言 机器人的发展横跨七八十年,经历了三个重要时期。 2000年前,机器人主要应用于工业生产,俗称工业机器人,由示教器操控,帮助工厂释放劳动力,此时的机器人并没有太多智能而言,完全按照人类的命令执行动作,更加关注电气层面的驱动器、伺服电机、减速机、控制器等设备,这是机器人的电气时代。 2000年后,计算机和视觉技术逐渐应用,机器人的类型不断丰富,出现了AGV、视觉检测等应
在上手学习ROS的时候,大家应该都在小海龟仿真器中画过圆吧。 此时,大家可能用的是命令行中的rostopic或者话题编程来实现的。 如果换成一个真实机器人,实现方法和效果还会是一样的么?我们不妨来试一试。 一、软件架构 如何实现机器人走圆呢,我们先来梳理一下这个功能的框架。 首先,我们需要找一款支持ROS控制的机器人,这里使用的是LIMO机器人,上边已经运行了一个订阅者节点lim
在安装和配置ROS的过程中,经常会遇到类似这样的报错: curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 16 ms: Connection refused 解决办法如下: 1. 登录网站:https://www.ipaddress.com 2. 在打开的网站中将“raw.githubus
上一篇我们测试了Autoware.auto(https://www.guyuehome.com/37552),是基于ROS2的,作为它基于ROS1的版本——Autoware.ai, 也不妨试一试。继续记录折腾笔记。 软件环境: Ubuntu:18.04 ROS:Melodic 一、Docker安装 1. 安装Docker 先说结果,最终Autoware.ai可以在配置好的docke
最近心血来潮,准备研究下Autoware,主要是基于ROS2的Autoware.auto,这里记录下第一波折腾的笔记 —— 安装、配置、测试。 首先说明我使用的软件环境:系统:Ubuntu 20.04ROS:ROS2 Foxy 接下来就开始啦。 一、安装Docker 如果之前安装过docker,需要先删除旧版本docker: $ sudo apt-get remove docker do
在上一节中我们已经实现了SLAM,接下来就可以在创建好的地图上导航啦。 一、安装功能包 安装Navigation2导航相关的功能包: $ sudo apt install ros-foxy-navigation2 $ sudo apt install ros-foxy-nav2-bringup 二、开始导航 运行turtlebot3仿真环境后,运行导航功能节点: $ export TU
ROS2目前对移动机器人的的支持较为丰富,SLAM和导航这些基础功能包都已经具备了,今天我们就以turtlebot3为例,试一试在Gazebo中如何把SLAM跑起来。 一、依赖包安装 首先需要安装Gazebo11,默认安装完的ROS2是不包含的: $ sudo apt-get install ros-foxy-gazebo-* 后续我们会使用Cartographer进行SLAM,所以还
前边学习了如何创建广播器,接下来我们来试试如何创建监听器,从而通过代码获取任意两个坐标系之间的关系。 一、编写监听器节点 依然使用之前创建的learning_tf2_py功能包,在其中的learning_tf2_py/learning_tf2_py文件夹中创建如下监听器节点的代码文件turtle_tf2_listener.py,内容如下: import math from geomet
前边学习了如何创建广播器,接下来我们来试试如何创建监听器,从而通过代码获取任意两个坐标系之间的关系。 一、编写监听器节点 依然使用之前创建的learning_tf2_cpp功能包,在其中的src文件夹中创建如下监听器节点的代码文件turtle_tf2_listener.cpp,内容如下: #include <geometry_msgs/msg/transform_stamped.h
前边我们学习了如何在ROS2中创建一个tf2的静态广播器,机器人系统中还有很多位姿关系会变化的坐标系,这就需要我们在代码中动态广播坐标系的变换,本篇我们就来学习如何使用C++编写一个动态的广播器。 一、编写广播器节点 继续使用之前创建的learning_tf2_py功能包,在src文件夹中创建今天需要用到的代码文件turtle_tf2_broadcaster.py,然后复制粘贴如下代码:
前边我们学习了如何在ROS2中创建一个tf2的静态广播器,机器人系统中还有很多位姿关系会变化的坐标系,这就需要我们在代码中动态广播坐标系的变换,本篇我们就来学习如何使用C++编写一个动态的广播器。 一、编写广播器节点 继续使用之前创建的learning_tf2_cpp功能包,在src文件夹中创建今天需要用到的代码文件turtle_tf2_broadcaster.cpp,然后复制粘贴如下代码:
静态变换在机器人系统中非常有用,一般用来描述机器人基坐标系与相对其静止的其他坐标系之间的关系,比如雷达坐标系、相机坐标系等。本篇我们就来看一下,如何通过Python编程,实现静态坐标系变换的广播。 一、创建功能包 首先我们创建一个名为learning_tf2_py的功能包,需要依赖rclpy、tf2_ros、geometry_msgs和turtlesim这几个依赖项。 ros2 pkg c
静态变换在机器人系统中非常有用,一般用来描述机器人基坐标系与相对其静止的其他坐标系之间的关系,比如雷达坐标系、相机坐标系等。本篇我们就来看一下,如何通过C++编程,实现静态坐标系变换的广播。 一、创建功能包 首先我们创建一个名为learning_tf2_cpp的功能包,需要依赖rclspp、tf2、tf2_ros、geometry_msgs和turtlesim这几个依赖项。 ros2 pk
坐标变换是机器人中重要的基础功能,ROS1中提供了tf作为坐标变换库,在ROS2中依然沿用,使用方法类似,今天我们就来试一试ROS2中的坐标变化系统tf2。 一、小海龟跟随例程 和ROS1一样,ROS2中依然使用了两只海龟跟随的例程,可以使用如下命令安装: sudo apt-get install ros-foxy-turtle-tf2-py ros-foxy-tf2-tools 此外
在ROS1中,Parameter参数机制默认是无法实现动态监控的(需要配合专门的动态机制),比如正在使用的参数被其他节点改变了,如果不重新查询的话,就无法确定改变之后的值。ROS2最新版本中添加了参数的事件触发机制ParameterEventHandler, 当参数被改变后,可以通过回调函数的方式,动态发现参数修改结果。 注意:此功能目前只支持Galactic及以上的ROS2版本 一、创建功
今天我们用Python继续实现之前参数的使用。 1.创建功能包 在dev_ws工作空间的src文件夹中,创建一个功能包cpp_parameters: ros2 pkg create --build-type ament_python python_parameters --dependencies rclpy 由于在创建功能包时,使用了 --dependencies参数,会自动添加一些依赖
当我们自己编写节点功能时,总有一些配置需要在启动过程中通过外部参数来配置,这一篇我们就来一起学习如何在C++的类和Launch文件中使用ROS2的参数功能。 1. 创建功能包 在dev_ws工作空间的src文件夹中,创建一个功能包cpp_parameters: ros2 pkg create --build-type ament_cmake cpp_parameters --dependenc
2021雷军年度演讲结尾,雷军展示了一个探索概念项目——小米第一代仿生四足机器人CyberDog,取了一个非常接地气的名字“铁蛋”,价格依然屠夫,直接9999( 工程探索版),一时间机器人圈再次热闹起来。 雷军的演讲中,我们发现“铁蛋”身上背负着两个全球共创的浩瀚工程,其中之一便是“ROS 2”,ROS 2是何方神圣,为何能够成为“铁蛋”的软件灵魂,且听古月君娓娓道来。 一、什么是ROS?
在之前的学习中,我们在话题和服务中使用的都是预定义好的消息和服务接口,在很多时候,ROS中预定义的接口并不能完全满足我们的需求,接下来我们就学习下如何自定义这些接口。 1.创建功能包 在dev_ws的src文件夹下创建接下来使用的功能包 tutorial_interfaces: ros2 pkg create --build-type ament_cmake tutorial_interfac
节点之间通过服务通信时,发送请求的一端称之为客户端(Client),应答的一端称之为服务器(Server),请求和应答的数据结构使用srv文件描述。 接下来我们就尝试实现一个简单的服务通信模型,客户端发送两个加数,服务器完成加数求和之后应答求和结果。 1.创建功能包 在dev_ws工作空间的src文件夹下,使用如下命令创建一个新的功能包。 ros2 pkg create --build-t
节点之间通过服务通信时,发送请求的一端称之为客户端(Client),应答的一端称之为服务器(Server),请求和应答的数据结构使用srv文件描述。 接下来我们就尝试实现一个简单的服务通信模型,客户端发送两个加数,服务器完成加数求和之后应答求和结果。 1.创建功能包 在dev_ws工作空间的src文件夹下,使用如下命令创建一个新的功能包。 ros2 pkg crea
上一篇我们通过C++实现了发布者和订阅者,本篇我们试试用Python来实现同样的功能。 1.创建功能包 首先我们在之前创建的dev_ws工作空间中来创建一个放置节点代码的功能包。 打开一个新的终端,cd到dev_ws/src目录下,然后运行创建功能包的指令: ros2 pkg create --build-type ament_python py
ROS2计算图中的每个节点都各司其职的在运行某个功能单元,节点之间也难以避免会有数据的传输,也就是通过我们之前介绍的话题和服务实现通信。之前我们已经通过命令行实现过话题的发布和订阅,本篇我们就来尝试下如何通过C++代码来实现发布者和订阅者。 1.创建功能包 首先我们在之前创建的dev_ws工作空间中来创建一个放置节点代码的功能包。 打开一个新的终端
功能包是ROS2中组织代码的基本容器,方便我们编译、安装、分发开发的代码,一般来讲,每个功能包都是用来完成某项具体的功能相对完整的单元。 ROS2中的功能包可以使用CMake或者Python两种方式来编译,其本身是一个“文件夹”,但和文件夹不同的是,每个功能包中都会有这些文件: CMake包: package.xml:功能包的描述信息
ROS2中的工作空间类似我们常说的概念——“工程”,是我们在ROS中开发具体项目的空间,所有功能包的源码、配置、编译都在该空间下完成。 我们可能会同时开发多个项目,就会产生多个工作空间,所以工作空间之间也有一个层次的问题,类似于优先级的概念,比如不同工作空间中有同名的功能包,那运行的时候是启动哪一个呢?ROS默认是启动最上层的工作空间( overlay),上层工作空间中的
有的时候我们希望在别人已有的数据集上做开发,或者复现之前已经构建好的场景数据,这时候就可以用ROS2中的ros2 bag工具啦。 ros2 bag是一个命令行工具,可以实现对ROS2系统中话题数据的录制和回放,选定的数据会被打包放到一个数据库文件中,未来使用该工具即可按照时间轴回放所有话题数据。 在使用rosbag前,需要确认是否安装好了: s
到现在为止,每次启动一个ROS2中的节点,我们都需要开启一个新的终端运行ros2 run指令,如果机器人系统中的节点很多,这样岂不是很麻烦。 ROS2针对这个问题,专门设计了launch启动文件,可以通过一个类似脚本的文件,一起启动多个节点并允许在文件中对节点进行配置。 接下来我们就看看如何才能创建并使用一个launch文件。
在终端中运行ROS2节点时,节点的日志信息会在终端中显示出来,但是这种方式呈现的日志比较凌乱,所以ROS2提供了一个专门用于管理日志信息的可视化工具——rqt_console。今天我们就来看看这个工具是如何使用的。 1.启动 首先打开一个新的终端,使用如下指令即可启动rqt_console: ros2 run rqt_console rqt_console &n
之前介绍到的话题和服务是ROS中最重要的两种底层通信机制,但也并不是说能解决所有应用层的问题,举一个例子,如果要让机械臂抓取一个物体,我们不仅要发出指令,还需要获取机械臂的实时反馈,如果直接用话题和服务也可以实现,不过一下得上好几个,有点麻烦。 所以针对类似的场景,ROS推出了一个应用级的通信机制——动作(action),主要结局需要运行一段时间的机器人任务。action
参数也是ROS2中很重要的一个概念,主要作用是对节点功能的配置,在ROS2中,每个节点都有自己的参数,这些参数可以用整型数、浮点数、布尔型数、字符串和列表来描述。 依然是以小海龟仿真器为例,看看里边有哪些参数。 1.启动小海龟仿真器 熟悉的两行命令: ros2 run turtlesim turtlesim_node ros2 run turt
之前讲的话题通信是基于订阅/发布机制的,无论有没有订阅者,发布者都会周期发布数据,这种模式适合持续数据的收发,比如传感器数据。机器人系统中还有另外一些配置性质的数据,并不需要周期处理,此时就要用到另外一种ROS通信方式——服务(Service)。 服务是基于客户端/服务器模型的通信机制,服务器端只在接收到客户端请求时才会提供反馈数据。
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译:沈永强 图源:佐治亚理工学院(Georgia Tech) 佐治亚理工学院的研究人员展示了一款移动机器人,该机器人可以给自己换“鞋子”来适应不同的地形 在为机器人设计移动系统时,通常都是设计一个单一的系统,能让机器人去执行需要完成的所有任务,不论是步行、跑
原作者:Michael Ferguson 文章来源:The Robot Report 编译:沈永强 图源:The Construct 过去的几个月里我一直在使用ROS 2。正如我之前所提到的,目前似乎并没有太多机器人是运行ROS 2的。目前所面临的有点像是鸡和蛋的问题,现在ROS 2还没有完全准备好在机器人上进行实际应用,但如果不去大规模
大道至简,ROS2将复杂的机器人系统拆解成许多模块节点,而这些节点之间则是通过一个至关重要的通道完成数据交换的,这个通道就是“话题”。 一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。 可见,话题是节点之间实现数据传输的重要途径,也是机器人各个子系统之间交换数据的重要方式。 &
和ROS1一样,ROS2中的各项资源也是通过计算图(“ ROS (2) graph”)联系到一起的。计算图是一个由各种ROS2元素组成的网络,共同完成数据的传输,其中每一个完成具体功能的模块称之为“节点”(Node),例如控制车轮速度、获取雷达数据等,节点之间通过话题(Topic)、服务(Service)、动作(Actions)或者参数(Parameter)实现数据的收发。
小海龟(Turtlesim)是ROS2中一个非常重要的入门级例程,通过海龟仿真,我们可以了解到很多ROS2的底层原理,涉及节点、话题、服务等核心概念。 1.安装海龟仿真器 Linux: sudo apt update sudo apt install ros-foxy-turtlesim Windows: 默认已经安装好 &
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译:沈永强 图源:约翰·皮特·惠特尼/东北大学 温馨提示:危险动作请勿模仿 机器人专家约翰·皮特·惠特尼(John Peter Whitney)冒着巨大风险亲自测试这款先进的机器人设备。这款设备由流体驱动器驱动,通过装有水的管道将
workspace是ROS2中的工作空间,也是我们开发机器人代码的位置。 ROS2安装的系统目录称之为“underlay”,我们自己创建的工作空间称之为“overlay”,在一台电脑上往往有多个工作空间。我们可以通过source不同空间的环境变量脚本来更换所使用的workspace,包括ROS2的版本。 如果使用的是Linux系统或者MacOS,
1. 设置编码 sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 2.设置软件源 sudo apt update && sudo apt install curl
以下安装流程完全参考官方wiki:http://wiki.ros.org/noetic/Installation/Ubuntu 首先设置源: sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.li
原作者:The Robot Report Staff文章来源:The Robot Report编译:沈永强 图源:北卡罗来纳州立大学埃德加·洛巴顿 成像设备为机械假肢提供了环境情境。(a)使用Tobii Pro Glasses 2眼动仪进行眼镜配置。(b)下肢数据采集装置。(c)
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译/字幕组:沈永强 图源:斯坦福大学 机械手可以利用它更高的自由度去做人手做不到的
经常有小伙伴在古月居后台咨询ROS安装和上手使用的问题,相信使用过ROS的同学们都深有体会吧: 1.rosdep为啥总是报错,换网、换源、换电脑,怎么都解决不了? 2.ros安装也太慢了吧,看着不到KB级的下载速度,感觉要到天荒地老? 3.找不到包!找不到文件!rosrun和roslaunch为什么运行就说找不到! 4.用虚拟机慢,装双系统难,到底要我怎样? .....
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译:沈永强 图源:石川实验室 城市内的物流无人机想要真正投入使用还有很多工作要做。我们其实并不确定用无人机来做物流这个商业模式最终是否有意义,但是想要物流无人机能够真正投入使用,就必须要实现足够高的能源使用效率以及时效性。在物流无人机取货、交付的时候功耗最大,也最费时,因为这时候无人机需要保持悬停状态而不是正常飞
2020年,Ubuntu最新的LTS版本20.04如期而至,古月君早就摩拳擦掌想要尝试一下,今天就大胆来一次硬盘安装。 笔记本型号:小米15.6 Pro 原系统环境:Windows 10 + Ubuntu18.04 + Ubuntu16.04 古月君的电脑有两块硬盘,一个装Windows,另外一个装了两个Ubuntu系统,启动项设置在Ubunt
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译:沈永强 图源:O
课程目的 工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟。ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Industrial(ROS-I)。 ROS向工业领域的渗透,可以将ROS中丰富的功能、特性带给工业机器人,比如运动规划、运动
原作者:Jorge Nicho 文章来源:The Robot Report 编译/字幕组:沈永强 图源:美国科罗拉多博尔德西南研究所 在这个仿真系统中,机器臂必须将相机移动到三个扫描点。MoveIt2在其中被用来规划到达扫描点的无碰撞运动轨迹。 MoveIt是ROS中的运动规划框架,已经成功用于众多工业、研究应用中,这些应用都是需要复杂的无碰撞机器人运动来进行操作任务。在最近的几个
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译/字幕组:沈永强 图源:Bob O’Connor/IEEE Spectrum 波士顿动力公司的Spot机器人在世界上很多地方都被应用于一些十分有用的工作中,并且已经服役了很长一段时间,现在是时候进行软件升级,增加一些更高级、更新的功能了。 今天即将发布的Spot Release 2.0在导航、自主性、感测、
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译/字幕组:沈永强 (图源:Farrin Abbott) 我们非常喜欢柔性机器人,它们当中的绝大部分都是通过气动或者液压进行操作,尤其是需要施加很大的力时。这增加了它的结构复杂性,因为气动和液压通常需要在某一部位装上泵来让流体流动,所以我们常常看到那些柔性机器人都会被一个外置的硬性动力装置所束缚。这样子的设计其实
MoveIt是ROS中非常强大的一个开发平台,可以为机器人开发提供六大功能支持,真正做到不写一行代码,就可以从零完成各种炫酷的机器人应用功能。 MoveIt的设计目标是让机器人走向未来,那未来的机器人是什么样的呢?不知道你有没有看过在工厂实际工作的机械臂,都需要人工事先完成示教工作,机器人的角色更像是一台“机器”,完成人们依次设计好的轨迹,环境一旦发生变化,就得重新
原作者:Evan Ackerman 文章来源:IEEE Spectrum 编译/字幕组:沈永强 图源:Apex.AI 汽车制造商往往会对无人驾驶汽车开发的许多方面感到激动,比如传感器数据分析、决策规划和运动规划。 不幸的是,如果你想要制造无人驾驶汽车的话,有很多其他方面的问题需要先解决掉,这些问题中的大多数不仅难以解决,而且还是制造开发的关键所在。比如应该怎么在车内搭建可靠的
原作者:Erico Guizzo 文章来源:IEEE Spectrum 编译/字幕组:沈永强 Surena IV 是一款由德黑兰大学开发制造的成年人大小的类人机器人 图源:德黑兰大学先进系统和技术研究中心(CAST) 十多年前,德黑兰大学的研究人员开发了一款初代类人机器人,名叫Surena,不久后又推出可以行走的第二代机器人Surena II,随后在2015年推出了性能更强的Su
原作者:Charles Q. Choi 文章来源:IEEE Spectrum 编译/字幕组:沈永强 (图源:康奈尔大学/Facebook Reality Labs/AAAS) 一项新的研究发现,在未来,当负荷加重时,柔性机器人可能会通过大量排汗来防止过热,就像马拉松运动员或者古代的猎人们在大草原上追逐捕猎的时候一样。 传统的机器人由刚性部件构成,容易因为擦碰、扭曲和坠落等而受损,
原作者:The Robot Report Staff 文章来源:The Robot Report 编译/字幕组:沈永强 (自动抽血化验的原型机 图源:罗格斯大学Unnati Chauhan) 罗格斯大学本周报道称,对自动抽血化验机器人进行了首次人体临床试验,有望在未来帮助到患者和医护人员。试验发现,这台自动抽血化验设备由罗格斯大学主导的团队耗时六年开发,它的能力与临床医生相比有
文章来源:IEEE Spectrum 原作者:Evan Ackerman 编译/字幕组:沈永强 这台高18米重25吨的高达机器人将会成为迄今最大的人形机器人。 (图源: Gundam Global Challenge) 得益于高达系列的成功,数十年来,机器人文化在日本发展兴盛。高达是一种需要人坐在其中驾驶的两足类人机器人。我能一一细数出来高达系列有过多少电视剧集、电子游戏和
今年的ROSCon机器人操作系统开发者大会已于11月初在中国澳门落下帷幕,上周末官方终于公布了大家期待已久的大会视频和PPT资料。古月君已经将85个视频全部上传到了哔哩哔哩(ID:古月居GYH),干货满满,还是热乎的。 部分精选视频介绍: ROS2不仅可以在Linux上使用,未来更多嵌入式系统也会逐渐支持ROS2,比如一位分享者就介绍了目前在VxWorks上使用的方法:《ROS2 on Vx
编辑:古月居 撰文:王谦牧,贝塔,减肥的付雷雷 视觉:小燕
最近在知乎上看到一个问题:在ROS环境下,怎么使用moveit!来驱动真实的六轴机械臂? 很多小伙伴在使用ROS的时候,都会产生类似的疑问,程序写过那么多,仿真也跑过不少,但是如何控制真实机械臂/机器人呢? 今天古月君就来尝试破个题。 首先,解决这个问题的关键词是“接口”。所谓接口,即数据传输的通道,如何将ROS功能包计算得到的数据发给真实机器人并使之运动是问题的关键。 机械臂有点复杂
11月1日,ROSCon2019进入第二天,依然是上午9点准时开始,大会议程安排的满满当当。 开场演讲是整个ROSCon的第二个Keynote分享:《Beyond Autonomy: ROS in solution architecture》,介绍了一家ROS创业公司如何帮助客户将产品走向市场的经验,其中使用ROS作为架构的设计工具。 turtlebot大家并不陌生,早期的两代turtlebot
10月31日,ROSCon2019机器人操作系统开发者大会正式拉开帷幕。 一大早,古月君就赶到会场,场地还在准备,大家都在大厅里聊天,明显感觉今天的人更多了。 会场外的牌子上列出了第一天所有的演讲主题: 提前20分钟,会场准备完毕,大家纷纷进场,古月君迅速赶到第一排,占据绝佳位置,为大家带来最清晰的现场直播。 ROS圈的骨灰级大神Brian Gerkey和Morgan Quigley在5米外
一年一度的ROS盛会ROSCon如期而至,今年来到中国澳门举行,对于数量众多的中国开发者来讲,这无疑是接近ROS前沿的绝好机会。 ROSCon 2019共分成10月30日到11月1日三天的内容,第一天是四场研讨会,主题明确,参会者可以任选其一参加,第二天和第三天是主题演讲和分论坛,精彩纷呈。在今年的ROSCon中,ROS2也得到了更多关注,古月君将从现场给大家带来第一手新鲜资讯。 10月30日上午
ROS 2经过一个快速迭代期后,逐渐进入了稳定更新,目前的最新版是2019年5月31日发布的Dashing Diademata,维护期两年。 关于ROS 2的介绍,古月居之前已经有很多篇文章进行了说明,大家可以参考: Why ROS 2.0? What is ROS 2.0 ? ROS 2发布第三个正式版——Crystal Clemmys ROS 2基础工具使用入门 ROS 2 gazebo仿
今年6月,树莓派4正式发布,硬件方面得到了大幅度升级,一直让人头疼的内存也终于提供了多个版本可供选择。得知消息后古月君就一直摩拳擦掌,早早下单4GB内存版本等待到货,这两天终于到手,迫不及待上手试一波。 硬件配置 树莓派4(4GB) SanDisk Extreme Pro 64GB 5V 3A Type-C电源 一、基本参数 关于参数的解读网上有很多文章介绍,这里就不详述了,我们直接开
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:ROS加速机器人智能化变革,从云端大脑到本地运动 2019年4月19日,古月君受邀参加了中国自动化学会主办的——国家机器人发展论坛,并做了题为《ROS加速机器人智能化变革》的主题报告,以下是报告的主要内容,和大家分享学习。 各位好,很荣幸能够分享我们在机器人操作系统ROS方面的研究,我来自一家新创公司
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:亚马逊云机器人平台RoboMaker,借助ROS重定义机器人开发方式 云机器人并不是一个新概念,本身拥有强大云计算能力的大公司也一直对机器人这块“肥肉”虎视眈眈。 2018年底,微软官宣Win10支持ROS,还会不断将云计算、开发工具等引入ROS机器人开发,紧接着亚马逊就推出了基于ROS的云机器人服务平
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | ROS——机器人开发的神兵利器 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第12讲《ROS——机器人开发的神兵利器》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第12讲——ROS:机器人
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | 基于ROS设计一款机械臂控制系统 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第11讲《基于ROS设计一款机械臂控制系统》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第11讲——基于ROS
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | 针对工业应用的ROS-I又是什么 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第十讲《针对工业应用的ROS-I又是什么》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第十讲——针对工业应用的
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | “手眼”结合完成物体抓取应用 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第九讲《“手眼”结合完成物体抓取应用》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第九讲——“手眼”结合完成物体抓
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | ROS机器视觉应用中的关键点 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第八讲《ROS机器视觉应用中的关键点》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第八讲——ROS机器视觉应用中的
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | MoveIt!中不得不说的“潜规则” 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第七讲《MoveIt!中不得不说的“潜规则”》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第七讲——Mov
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | MoveIt!编程驾驭机械臂运动控制 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第六讲《MoveIt!编程驾驭机械臂运动控制》的内容精要。 大家好,这里是《ROS机械臂开发:从入门到实战》的第六讲——Mov
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | 搭建仿真环境一样玩转ROS机械臂 大家好,这里是《ROS机械臂开发:从入门到实战》的第五讲——搭建仿真环境一样玩转ROS机械臂,我是主讲人胡春旭。 本讲我们将从以下三个部分进行讲解。 首先是ROS中针对控制器功能的ros_control。 在应用层面,ROS中有Navigation
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | ROS机械臂开发中的主角MoveIt! 大家好,这里是《ROS机械臂开发:从入门到实战》的第四讲——ROS机械臂开发中的主角MoveIt!,我是主讲人胡春旭。 本讲我们将从以下两个部分进行讲解。 首先我们来认识下ROS机械臂开发中的绝对主角——MoveIt! ROS最早因PR2机器
~欢迎关注~ 微信公众号:古月居 新浪微博:古月春旭 知乎专栏:古月居 原文链接:古月私房课 | 如何从零创建一个机器人模型 大家好,这里是《ROS机械臂开发:从入门到实战》的第三讲——如何从零创建一个机器人模型,我是主讲人胡春旭。 本讲我们将从以下三个部分进行讲解。 首先给大家介绍ROS中URDF建模的原理。 在建模之前,我们需要了解机器人的组成结构,从控制角度来讲,机器人由
~欢迎关注~微信公众号:古月居新浪微博:古月春旭知乎专栏:古月居原文链接:古月私房课 | 风靡机器人圈的ROS到底是什么 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第二讲《风靡机器人圈的ROS到底是什么》的精华内容。 大家好,这里是古月居和深蓝学院联合推出的《ROS机械臂开发:从入门到实战》的第二讲——风
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭知乎专栏:古月居原文链接:古月私房课 | ROS的过去、现在和未来 古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第一讲《ROS的过去、现在和未来》的内容概要。 大家好,这里是深蓝学院和古月居联合推出的《ROS机械臂开发:从入门到实战》的
说起全国大学生智能汽车竞赛,古月君有滔滔不绝的内容可以分享,自大二开始,我从懵懂少年跟着师兄比赛,到自己挑大梁拿到国一,再到带队挣得全国前三,基本就是大学本科的青春。 再说到ROS,古月君就要泪流满面了,告别智能车竞赛,我就结识了ROS,然后一用就是8年,从移动机器人到机械臂,从博客《ROS探索总结》到图书《ROS机器人开发实践》,更是我的青春! 所以看到19年创意组的题目
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭知乎专栏:古月居原文链接:ROS 2中自定义话题接口的调用 之前我们讲到如何在ROS2中自定义话题和服务,在编译之后产生了相应的头文件。 本篇以自定义的话题接口为例,看下如何调用之前定义好的接口内容。 接口定义参考:ROS 2中的话题与服务接口定义 一、完整代码示例 在test_pkg功能包的src下创建publish
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭知乎专栏:古月居原文链接:知乎 | 如何学习ROS? 简而言之,学习ROS的关键是——多实践! ROS是一个机器人研发中的重要工具,“学以致用”才是我们学习的最终目的:给学习赋能的就是实践!而实践就是不断进行知行合一的各种尝试! 现在关于ROS的资料已经非常多了,无论是图书、视频还是博客,都可以找到很多学习的资源,但是
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭知乎专栏:古月居原文链接:ROS 2中的话题与服务接口定义 ROS是一个分布式的机器人软件框架,涉及多节点之间的数据通信,绝大部分是基于话题或者服务完成的。 话题和服务在节点之间打通了一条隧道,其中来往的车辆就是需要传输的数据。每个数据长什么样,使用什么样的数据结构,可以使用ROS中已有的定义,也可以根据需求使用语言无
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭(https://weibo.com/hcx196)知乎专栏:古月居(https://zhuanlan.zhihu.com/guyuehome)原文链接:ROS 在工业机器人上有哪些应用? 就工业机器人来讲,ROS有一个单独的分支,很多人都提到了,叫做ROS-Industrial(ROS-I)。ROS作为逐渐流行的软件
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭(https://weibo.com/hcx196)知乎专栏:古月居(https://zhuanlan.zhihu.com/guyuehome)原文链接:入门学习ROS时遇到的最大困难是什么? 个人认为初学者入门ROS时遇到的最大困难是:搞明白ROS到底是什么? 接触新事物时,我们一般先要明确这个新事物的定义,才好进行
~欢迎关注~微信公众号:古月居(guyue_home)新浪微博:古月春旭(https://weibo.com/hcx196)知乎专栏:古月居(https://zhuanlan.zhihu.com/guyuehome)原文链接:ROS2 Python编程基础 ROS最重要的特性之一就是多语言的支持,可以使用C++、Python等语言进行程序的开发,ROS2会继续强化这个特性,对更多语言提供丰富的
~欢迎关注~微信公众号:古月居新浪微博:古月春旭知乎专栏:古月居 gazebo是ROS中常用的三维物理仿真环境,在ROS 2中已经支持,这里我们就来小试牛刀。 前提条件 已经安装了ROS 2和gazebo 9(或者ROS melodic) 安装接口 $ sudo apt install ros-crystal-gazebo-ros-pkgs 一、gazebo例程跑起来 gazebo例程
ROS 2提供了一个简单的机器人演示——dummy_robot,可以让我们快速熟悉ROS 2中各种开发工具的基本使用方法。 一、运行dummy robot与rviz2 运行以下命令,dummy robot例程跑起来: $ ros2 launch dummy_robot_bringup dummy_robot_bringup.launch.py 终端中看到如下提示信息,说明启动成功: 然后启动大家
也许你还不知道,ROS 2刚刚发布了第三个正式版——Crystal Clemmys,这个版本支持以下平台: Tier 1 platforms: Ubuntu 18.04 (Bionic) Mac OS X 10.12 (Sierra) Windows 10 Tier 2 platforms: Ubuntu 16.04 (Xenial) ROS 2也在不断完善自身的功能,在最新的Crys
上篇“Why ROS 2.0”之后,这篇我们继续“What is ROS 2.0”。 一、ROS 2的设计目标 相比ROS 1,ROS 2的设计目标更加丰富: 支持多机器人系统 ROS 2增加了对多机器人系统的支持,提高了多机器人之间通信的网络性能,更多多机器人系统及应用将出现在ROS社区中。 铲除原型与产品之间的鸿沟 ROS 2不仅针对科研领域,还关注机器人从研究到应用之间的过渡,可以
ROS已经走过11个年头,伴随机器人技术的大发展,ROS也得到了极大的推广和应用。尽管还存在不少局限性,但依然无法掩盖ROS的锋芒,社区内的功能包还是呈指数级逐年上涨,为机器人开发带来了巨大的便利。 ROS最初设计的目标机器人是PR2,这款机器人搭载了当时最先进的移动计算平台,而且网络性能优异,不需要考虑实时性方面的问题,主要应用于科研领域。 如今ROS应用的机器人领域越来越广:轮式机器人、人形
知乎原文链接: https://www.zhihu.com/question/268658280/answer/340190866 简单来讲,两者的主要功能不同,没办法比较哪个更好用,如果做ROS开发,一般两个都得会。 rviz是三维可视化工具,强调把已有的数据可视化显示; gazebo是三维物理仿真平台,强调的是创建一个虚拟的仿真环境。 rviz需要已有数据。 rviz提供了很多插件,这
仿真/模拟(Simulation),泛指基于实验或训练的目的,将原本的系统、事务或流程,建立一个模型以表征其关键特性(Key Characteristics)或者行为/功能,予以系统化与公式化,以便对关键特征做出模拟。 当所研究的系统造价昂贵、实验的危险性大或需要很长时间才能了解系统参数变化所引起的后果时,仿真是一种特别有效的研究手段,目前已经广泛应用于电气、机械、化工、水力、热力、社会、经济、生
ROS的学习曲线有点陡峭,很多初学者还没来得及在ROS的世界走一走,就半路放弃回了头。ROS的世界很大,就像《流浪》中唱的一样,她的美好等我们冒险去发现。 古月君每天都会和不少学员交流ROS学习中的各种问题,虽然根据自己多年来的学习心得整理出版了《ROS机器人开发实践》一书,但还是发现初学者起步阶段在系统配置方面会遇到诸多问题,大部分都可以使用“黄金五答”来解决: 那有没有一种更好的方
机器人系统中存在大量数据,这些数据在计算过程中往往都处于数据形态,比如图像数据中0~255的RGB值。但是这种数据形态的值往往不利于开发者去感受数据所描述的内容,所以常常需要将数据可视化显示,例如机器人模型的可视化、图像数据的可视化、地图数据的可视化等。 ROS针对机器人系统的可视化需求,为用户提供了一款显示多种数据的三维可视化平台——rviz。 rviz是一款三维可视化工具,很好的兼容了各种基
每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令。当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦。那么有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的。 启动文件(Launch File)便是ROS中一种同时启动多个节点的途径,还可以自动启动ROSMaster节点管理器,而且可以实现每个节点的各种配置,为多个节点的操作提供了很大便利。 一、基本
Windows官方终于支持ROS了! 近期微软官方终于发布消息称,将把ROS带到Windows 10,并且命名为“ROS1”,而且还推出了一个实验版本。 消息一出,古月君当然也摩拳擦掌想要尝试一番,同时也将安装和测试的内容记录于此。 一、安装Visual Studio 2017 微软的东东当然离不开VS,所以上来的第一步就是要安装Visual Studio 2017。需要登录以下链接下载在线
在刚刚结束的中国国际工业博览会上,精锋微控再次亮相,展示了业界首款搭载驱控一体片上系统的机器人开放平台——ProbotSys。 ProbotSys(Professional Robot System)是开放型工业机器人及智能系统平台的代言人。与市场上严重同质化的驱控方案不同,ProbotSys在一颗芯片上完成多轴伺服的驱控与机器人运动控制算法,高度集成的片上系统黑科技,可以为客户带来
8月1日晚,古月君在深蓝学院的的公开课平台,和大家一起聊了下ROS机器人开发的相关案例,主要结合自身机器人开发经验,从机器人系统组成、移动机器人开发案例和机械臂开发案例等三个方面,介绍了古月君是如何将ROS应用于机器人项目开发的。 公开课的全部内容可以免费回看,有兴趣的小伙伴可以访问课程网站: http://www.shenlanxueyuan.com/open/course/13 另外古
VREP( Virtual Robot Experimentation Platform)是一款瑞士军刀级的机器人仿真软件,包含的功能众多,而且使用方便,在各种系统下都有相应的安装文件。 今天我们就来看看如何将ROS和vrep集成,把两个强大的平台结合到一起。 版本设定:Ubuntu16.04 + ROS Kinetic + vrep3.4 一、下载vrep 第一步当然是下载vrep软件啦
近年机器人技术发展越催成熟,越来越多的机器人技术应用在不同的领域。基于机器人的技术产生出来的产品推陈出新,如物流机器人、家庭陪护机器人、协作机器人、送餐机器人、清洁机器人、无人机、无人汽车等等,可谓百花齐放。大众对机器人的认知及学习的兴趣也不断提升,对机器人相关的技术变得更为关注,而ROS就是一个很典型的例子。 ROS是一个专门针对机器人软件开发而设计的通讯框架,源自于美国斯坦福大学团队的一个开源
2011年,当国内ROS资料还很匮乏的时候,正在读本科的古月同学为了开发一款机器人,一边摸索自学一边总结撰写了《ROS探索总结》系列博客。由于其博文条理清晰、主题丰富并具有很强的可操作性,文章一经推出,便深受广大ROS网友的热爱。从此“古月大神”便成为了群里热议的话题,“古月大神又出新文章啦!大家快去撸一撸啊!”…… 后来,古月同学研究生毕业后,投身于机器人创业的时代浪潮,博客便沉寂了许久。 你不
古月容易让人想到古龙笔下的大侠。 大侠的特质是,开山建宗,随而遁影山林,空余武林纷说大侠的故事。 古月在CSDN留下了那些优美的博文《ROS探索总结》,启蒙了多少人,开启了多少人对ROS的向往。随后,古月却消失了,任凭人们谈论着“古月是谁?”,“古月在哪里?” 2017年初,我无意间看到古月另建了一个独立站,发布一些ROS和机器人相关的博文,马上意识到,古月回来了。随邀请古月参加一年一度的ROS暑
MoveIt!是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。 MoveIt!中的众多功能都使用插件机制集成,其中有一个重要的功能模块——运动学插件。 今天我们就来聊下MoveIt!中的运动学求解器。 一、KDL Kinematics and Dynam
前言 1 初识ROS 1.1 ROS是什么 1.1.1 ROS的起源 1.1.2 ROS的设计目标 1.1.3 ROS的特点 1.2 如何安装ROS 1.2.1 操作系统与ROS版本的选择 1.2.2 配置系统软件源 1.2.3 添加ROS软件源 1.2.4 添加密钥 1.2.5 安装ROS 1.2.6 初始化rosdep 1.2.7 设置环境变量 1.2.8 完成安装 1.3 本书源码下载
2011年底,我第一次接触ROS。当时一个实验室师兄在学术会议上听说了ROS,意识到它的前景广阔,考虑到我当时的研究方向,于是安排我进行研究。那时国内外ROS的学习环境比较艰苦,几乎只有wiki的基础教程(也没有现在完善)。所以开始的我,内心其实是拒绝的,但还是硬着头皮开始了。于是从拒绝到接受,从未知到熟悉,我经历了前所未有的磨难,同时也收获了前所未有的喜悦。 在这个过程中,我也常常在思考:ROS
从ROS最初在国内的萌芽,到如今的欣欣向荣,很高兴我们可以看到ROS在国内的大发展,也很荣幸能够为ROS在国内的推广贡献自己的一点微薄之力。 从2012年开始,我陆续在“古月居”博客上分享自己在学习ROS机器人开发过程中的总结笔记,中间也曾间断过一段时间,后来又再次回归,至今已经更新近百篇博文,并且还会持续更新下去。 2015年底,经机械工业出版社华章图书张国强编辑的建议,我开始着手准备这本ROS
HRMRP(Hybrid Real-time Mobile Robot Platform,混合实时移动机器人平台)是笔者在2012年和实验室的小伙伴们一起从零开始设计、开发的一款机器人平台,其中大部分扩展电路、驱动和ROS相关的底层功能都是我们自己开发。该机器人平台具有软硬件可编程、灵活性强、模块化、易扩展、实时性强等特点,机器人的整体结构如下图所示。 HRMRP具备丰富的传感器和执行器,在该
Universal Robots(优傲机器人)公司是一家引领协作机器人全新细分市场的先驱企业,该公司成立于2005年,关注机器人的用户可操作性和灵活度,总部位于丹麦的欧登塞市,主要的机器人产品有:UR3、UR5和UR10,分别针对不同的负载级别。 Universal Robots早在2009年便推出了第一款协作机器人——UR5,自重18公斤,负载高达5公斤,工作半径85cm,不仅颠覆了人们对于传
上一篇介绍了ROS中的元老机器人——PR2,虽然功能强大,但价格昂贵,无法推广。所以Willow Garage又开发了一款低成本的机器人平台——TurtleBot。 TurtleBot的目的是给入门级的机器人爱好者或从事移动机器人编程开发者提供一个基础平台,让他们直接使用TurtleBot自带的软硬件,专注于应用程序的开发,避免了设计草图、购买、加工材料、设计电路、编写驱动、组装等一系列工作。借
PR2(Personal Robot 2,个人机器人2代)是Willow Garage公司设计的机器人平台,其中数字2代表第二代机器人。 PR2有两条手臂,每条手臂七个关节,手臂末端是一个可以张合的夹爪;PR2依靠底部的四个轮子移动,在头部、胸部、肘部、夹爪上分别安装有高分辨率摄像头、激光测距仪、惯性测量单元、触觉传感器等丰富的传感设备。在PR2的底部有两台八核电脑作为机器人各硬件的控制和通信中枢
诞生于2007年的ROS,发展速度之迅猛超出了所有人的预料,已经成为一个机器人领域的生态系统,可以提供机器人相关的全方位技术,从硬件到软件,从框架到功能,从驱动到应用。。。 前边三篇已经分别从通信机制、开发工具、应用功能这三个方面浅谈了笔者对ROS产品化探索的一点总结,本篇就来聊聊最后一个部分——从生态系统的角度来看,ROS可以为机器人产品化提供哪些思路。 什么是生态系统? 维基百科的解释是:生态
上篇我们讲到ROS中的开发工具,可以提高我们的开发效率,每一种工具都有其擅长之地,也有其不足之处,所以在设计、开发机器人产品的过程中,可以综合考虑,发挥每一个开发工具的优势。本篇我们来分析一下ROS中丰富的应用功能。 说起ROS中的应用功能,可就非常庞杂了,涵盖各种各样的功能包,简单做一个如下的分类: 1. 底层驱动 2. 上层功能 3. 控制模块 4. 常用组件 就这几种应用功能,我们来具体
上篇讲到,在通信机制部分,我们完全舍弃了ROS基于话题和服务的通信机制,自己又实现了一套通信系统,具体的实现主要基于Linux系统的各种通信方式,此处暂且不表,这篇我们来看下ROS另外一个重要部分——开发工具,如何在机器人产品化过程中应用。 ROS相关的开发工具有很多,大致可以分为以下几种类型: 1.ROS原生工具,比如rviz、qt工具箱、命令行工具等; 2.编译和测试工具,基于已有工具进一步
近几年,机器人和人工智能繁荣发展,曾经运行在实验室的机器人已经逐渐走入千家万户的生活。作为机器人开发利器的ROS也得到了非常广泛的应用,成为机器人领域的普遍标准。 ROS原本针对科研领域的PR2机器人开发,这种大繁荣的景象远远超过ROS的最初目标,也使得ROS的缺陷在广泛应用的同时暴露无遗: 1. 缺乏构建多机器人系统的标准方法;2. 在Windows、MacOS、RTOS等系统上无法应用或者功
2018年1月7日下午,第一届ROS Taipei年会顺利在台北举办,我有幸受邀参加了这次活动,并详细介绍了近两年来自己使用ROS进行机器人开发的具体细节。 在这次年会上,来自各地的开发者分享了ROS开发过程中的经验,并且展示了丰富多彩的机器人应用。 ROS Taipei 2018开发者年会合影 自主设计并3D打印的机械臂 自主开发的移动机器人 做工精美的机械手 我也分
随着人工智能的发展,机器人也迎来了全新的发展机遇。机器人与人工智能大潮的喷发,必将像互联网一般,再次为人们的现代生活带来一次全新的革命。 1. 历史起源 硬件技术的飞速发展,在促进机器人领域快速发展和复杂化的同时,也对机器人系统的软件开发提出了巨大挑战。机器人平台与硬件设备越来越丰富,致使软件代码的复用性和模块化需求越加强烈,而已有的机器人系统又不能很好地适应需求。 为迎接机器人软件开发面临的巨大
我们在做机器人ROS开发时,常常会遇到相同速度控制消息的选择问题。比如说控制机器人移动的geometry_msgs::Twist消息,可以使用键盘节点发布,可以使用手柄节点发布,也可以在导航过程中由movebase发布,那么这些节点同时运行时,多个节点发布相同的速度控制话题,这个时候机器人就迷茫了,到底该听谁的呢?只能收到哪个数据就听谁的。 针对这样的问题,ROS提供了一种mux多路切换器——tw
2018年1月7日下午,第一次ROS Taipei年会顺利在台北举办,我也有幸受邀参与了这次活动,并第一次详细介绍了近两年来自己使用ROS进行机器人开发的具体细节。 在这次年会上,来自各地的开发者分享了ROS开发过程中的经验,并且展示了丰富多彩的机器人应用。 自主设计并3D打印的机械臂: 自主开发的移动机器人: 做工精美的机械手: 我也分享了创业过程中基于ROS开发的工业机器人——Kung
ROS起源于2007年11月,2017年11月刚好满10岁。ROS的最初目标是在机器人领域提高代码的复用率,谁都没有想到,ROS社区中的功能包会呈指数级发展,目前已经成为机器人领域的事实标准。 ROS最初设计的目标机器人是PR2,这款机器人搭载了当时最先进的移动计算平台,而且网络性能优异,不需要考虑实时性方面的问题,主要应用于科研领域。如今ROS应用的机器人领域越来越广:轮式机器人、人形机
ROS中的参数服务器无法在线动态更新,也就是说如果Listener不主动查询参数值,就无法获知Talker是否已经修改了参数。这就对ROS参数服务器的使用造成了很大的局限,很多场景下我们还是需要动态更新参数的机制,例如参数调试、功能切换等,所以ROS提供了另外一个非常有用的功能包——dynamic_reconfigure,实现这种动态配置参数的机制。 例如下图是启动Kinect后openni功
? 上周四(9月28日),星火在线课堂举办了第一次在线课程,我有幸成为第一位分享嘉宾,与大家分享了一下MoveIt!的相关内容,直播过程中共有800多位小伙伴共同参与,该课程也永久免费开放,有兴趣的小伙伴可以继续访问该课程,参与或者回顾课程的所有内容。 课程地址:https://m.weike.fm/lecture/4867575?lecture_id=4867575 以下是课程PPT内容:
上一篇我们探索了SMACH有限状态机的基本概念和使用方法,本篇继续深入研究几个SMACH的典型应用。 一、数据传递 在很多场景下,状态和状态之间有一定耦合,后一个状态的工作需要使用到前一个状态中的数据,这个时候就需要在状态跳转的同时,将需要的数据传递给下一个状态。SMACH支持状态之间的数据传递。 先来运行例程看下效果: roscore rosrun smach_tutorials u
SMACH 是状态机的意思,是基于Python实现的一个功能强大且易于扩展的库。 smach本质上并不依赖于ROS,可以用于任意Python项目,不过在ROS中元功能包executive_smach将smach和ROS很好的集成在了一起,可以为机器人复杂应用开发提供任务级的状态机框架,此外元功能包还集成了actionlib和smach_viewer。 为避免误导,本文以下提到的SMACH均
MatLab有非常便捷的可视化编程,我们可以借助Matlab来制作一些小的可视化工具,我们在之前的博客中,使用rviz的插件功能实现过一个速度控制的小工具,今天就来探索研究如何用Matlab来实现类似的工具。 本文使用的完整代码可见:github 一、了解Matlab的可视化编程 Matlab的可视化编程非常简单,首先在命令窗口中输入“guide”命令来启动可视化编程: 然后选择默认的
众所周知Matlab是一款强大的数据处理工具,在科研、教学、商业领域广泛应用,不管你从事哪个行业的工作,多多少少都会用过或者听说过这款工具。Matlab有一个吊炸天的工具箱,几乎和哆啦A梦的口袋差不多,可以提供丰富而强大的扩展功能,其中有一个robotics工具箱,提供了一些机器人需要用到的工具,当然也包括ROS相关的工具。今天我们就来探索一下Matlab中的ROS工具如何使用吧。 一、
ROS Summer School如期在“热情似火”的魔都上海举办,本人也有幸参与了这次活动。 今年的Summer School可谓高手云集,先来看看强大的讲师整容,其中一定有你心中的“大神”: 活动前两天本人在深圳讲星火计划的进阶课程,遗憾没有参加,错过了不少精彩内容。(据说田博一张ppt讲半个小时!) 23号星火计划结束后,我火速前往上海。第三天上午是 张瑞雷老师的
rviz是ROS官方的一款3D可视化工具,几乎我们需要用到的所有机器人相关数据都可以在rviz中展现,当然由于机器人系统的需求不同,很多时候rviz中已有的一些功能仍然无法满足我们的需求,这个时候rviz的plugin机制就派上用场了。上一篇我们探索了插件的概念和基本实现,这一篇通过rviz中的插件实现,来进行巩固加深。 rviz作为一种可扩展化的视图工具,可以使用这种插件机制来扩展丰富的功能,进
原文链接:http://www.huodongxing.com/event/7390189565300 ROS“星火计划”2017东莞站火热招募中 玩机器人不知道ROS?你OUT啦! 机器人研发的核心技术是操作系统。ROS是目前主流的机器人操作系统之一。ROS最早起源于斯坦福大学实验室与机器人技术公司Willow Garage2007年合作的项目。ROS基于Linux系统,可靠性高
在ROS的开发中,常常会接触到一个名词——插件(plugin)。这个名词在计算机软件开发中是常常会提到的,具体含义可以参考百度百科的插件词条。在ROS中,插件的概念类似,简单来讲,ROS中的插件(plugin)就是可以动态加载的扩展功能类。ROS中的pluginlib功能包,提供了加载和卸载plugin的C++库,开发者在使用plugin时,不需要考虑plugin类的链接位置,只需要将plugin
ROS中常用的通讯机制是topic和service,但是在很多场景下,这两种通讯机制往往满足不了我们的需求,比如上一篇博客我们讲到的机械臂控制,如果用topic发布一个运动目标,由于topic没有反馈,还需要另外订阅一个机械臂状态的topic,来获得运动过程的状态。如果用service来发布运动目标,虽然可以获得反馈,但是反馈只有一次,对于我们的控制来讲数据太少了,而且如果反馈迟迟没收到,也只能傻
ROS中提供了丰富的机器人应用:SLAM、导航、MoveIt......但是你可能一直有一个疑问,这些功能包到底应该怎么样用到我们的机器人上,也就是说在应用和实际机器人或者机器人仿真器之间,缺少一个连接两者的东西。 ros_control就是ROS为用户提供的应用与机器人之间的中间件,包含一系列控制器接口、传动装置接口、硬件接口、控制器工具箱等等,可以帮助机器人应用快速落地,提高开发效率。
最近在打开Gazebo的时候,总是出现如下的错误提示,而且显示区无法显示任何模型: Warning [ModelDatabase.cc:334] Getting models from[http://gazebosim.org/models/]. This may take a few seconds. Warning [gazebo.cc:215] Waited 1seconds
今天正好有时间,尝试了一下3D地图建模,记录一下流程: 一、安装rgbdslam功能包 在工作空间中下载代码并解压: wget -q http://github.com/felixendres/rgbdslam_v2/archive/indigo.zip unzip -q indigo.zip 然后回到catkin_ws的目录下,安装依赖: rosdep inst
ROS2虽然重新设计了架构实现,但是也考虑到了与ROS1的兼容,专门开发了一个功能包——ros1_bridge,来完成ROS2与ROS1之间的通讯。但是目前ros1_bridge这个包的功能有限,还不提供python实现,而且仅支持ros2/common_interfaces repository中列出的通讯类型,如果要支持自己定义的接口,还需要自己编译ros1_bridge包。
上一篇我们小试牛刀,初步尝试了一下ROS2中的节点通信,这一篇我们来看一下ROS2中“全新”的编译系统——Ament。ROS编译系统从初期使用的rosbuild,到groovy版本之后的catkin,再到ROS2中的Ament,可谓是一波三者,虽然编译系统并不是ROS框架中的核心部分,但却是开发者最常接触的一个重要功能,了解其基本使用方法,常常可以发挥事半功倍的效果。 众
看了之前ROS2的框架设计,是不是对ROS2产生了很多好奇。相比ROS1,ROS2中融入了很多新的东西,但是很多核心的概念并没有改变。 一、ROS中的Graph 还记不记得ROS1中Graph的几个概念?(可以出门左转复习《ROS探索总结(二)——ROS总体框架》)节点、消息、主题、服务,在ROS2里边又新加入了一个“发现(Discovery)”的概念。节点
ROS已经走过九个年头,伴随着机器人技术的大发展,ROS也得到了极大的推广和应用。尽管ROS还存在不少的局限性,但是ROS社区内的功能包还是逐年呈指数级上涨,为机器人开发者带来了巨大的便利。不少开发者和研究机构还针对ROS的局限性进行了改良,这些局部功能的改善往往很难带来整体性能的提升,机器人开发者对新一代ROS的呼声越来越大,ROS2.0的消息也不绝于耳,终于在ROSCon 20
ROS刚刚度过了9岁生日,这九年以来,无论国外还是国内,越来越多机器人开发者或者机构选择ROS,同时也为社区贡献了更多更优秀的代码,从下边这张图我们可以看到,这种成长几乎是指数级的。 2007年11月,Willow Garage公司孕育许久的一个宝宝终于诞生了,并且取名叫做ROS,Willow Garage 专门为他设计了一个机器人玩具——PR2,没想到,ROS宝宝悟性
原文链接:http://spectrum.ieee.org/automaton/robotics/robotics-software/celebrating-9-years-of-ros Image: OSRF Kinetic Kame is the tenth ROS distribution release. This is a guest post. The views expressed
在之前的博客中(https://www.guyuehome.com/531),展示了目前我们机械臂的控制效果。在技术层面,机械臂的路径规划由ROS MoveIt完成,如果你用过MoveIt,应该知道MoveIt会根据控制指令,发布一个/joint_path_command消息: - positions: [7.498824743379373e-06, 0.00014502150
终于结束了18届高交会的功夫茶项目展示,总体来讲,展示效果不错,吸引了众多各年龄段的观众,还上了回CCTV的新闻。 在这里做一个阶段性的总结,也是自己这大半年来的所做所得。 今年4月中旬我来到深圳,和其他几个师兄创建了现在的公司——深圳星河智能科技有限公司,主打工业机器人。5月份完成了Ethercat主站部分的开发,6月份使用ROS建立了整套机器人的开发环境和可视化界面,7月份在实体机器人上
机器人通过机器视觉看到色彩斑斓的世界,但是人类最美好的不只是看到的,还有听到的,让机器人听懂人类的语音,同样是一样非常美妙的事情。 机器听觉,简单来说就是让机器人能听懂人说的话,以便更好的服务于人类。将语音——人类最自然的沟通和交换信息的媒介应用到智能机器人控制中,在机器人系统上增加语音接口,用语音代替键盘输入,并进行人机对话,不仅是将语音识别从理论转化为实用的有效证明,同时也是机器人
工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟,ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Industrial(ROS-I)。 ROS-I的官网: http://rosindustrial.org/ 一、ROS-I的目标 将ROS强大的功能应用到工业生产的过程中; 为工业机器人的研究与应用提供快捷有效的开发途径; 为工业机器
在之前的基础学习中,我们已经对moveit有了一个基本的认识,在实际的应用中,GUI提供的功能毕竟有限,很多实现还是需要我们在代码中完成,moveit的move_group也提供了丰富的C++ API,不仅可以帮助我们使用代码完成GUI可以实现的功能,还可以加入更多丰富的功能。我们继续使用《Mastering ROS for robotics Programming》中的源码作为学习对象。
MoveIt!由ROS中一系列移动操作的功能包组成,包含运动规划,操作控制,3D感知,运动学,碰撞检测等等,而且提供友好的GUI。官方网站:http://moveit.ros.org/,上边有MoveIt!的教程和API说明。 一、架构 下图是MoveIt的总体框架: move_group是MoveIt的核心部分,可以综合机器人的各独立组件,为用户提供一系列需要的动作指令和服务。从架构图中我
URDF文件完成后,可以在rviz中显示机器人的模型,如果要在gazebo中进行物理环境仿真,还需要为URDF文件加入一些gazebo相关的标签。既然是仿真,那么机器人应该像真在真实环境中一样,可以通过传感器感知周围环境,还可以根据指令进行运动。 在gazebo中可以通过插入一些插件,来仿真机器人的传感器、执行器的特性,这些插件通过<gazebo>元素中的<plugin>标
Unified Robot Description Format,统一机器人描述格式,简称为URDF。ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型。 1 URDF语法规范 参见:XML specifications 2 组件 URDF由一些不同的功能包和组件组成,下图描述了这些组件之间的联系。 3
1、什么是tf变换 ROS中的很多软件包都需要机器人发布tf变换树,那么什么是tf变换树呢?抽象的来讲,一棵tf变换树定义了不同坐标系之间的平移与旋转变换关系。具体来说,我们假设有一个机器人,包括一个机器人移动平台和一个安装在平台之上的激光雷达,以这个机器人为例,定义两个坐标系,一个坐标系以机器人移动平台的中心为原点,称为base_link参考系,另一个坐标系以激光雷达的中心为原点
《ros by example》中语音识别一章中,有学习如何让机器人说话的内容,今天在尝试的过程中发现一个indigo版本的问题。 按照以下流程运行: roscore rosrun sound_play soundplay_node.py rosrun sound_play say.py "Greetings Humans. Take me to your leader."
今天尝试了一下《ros by example》上的语音识别案例,按照书上的安装流程安装了PocketSphinx: $ sudo apt-get install gstreamer0.10-pocketsphinx $ sudo apt-get install ros-indigo-pocketsphinx $ sudo apt-get install ros-indigo-aud
今天在win7下用python写了一个节点,然后复制到Ubuntu14.04上用rosrun运行,一直报错: “ :没有那个文件或目录” 开始以为是路径问
距离发布上一篇ROS的博客已经过去两年了,才发现原来自己已经这么久可没有写过关于ROS的文章,想来很是惭愧。这两年时间,自己怀着程序员的梦想,研究过RTOS,探索过Linux,编写过Android应用,玩过web站点,但是回想起来,也并没有比ROS让我更加记忆深刻。两年时间,我也从来没有离开过ROS,使用ROS做过一些项目,也对ROS有了更加深刻的认识。这三天的假期时间,我认真
今天在Ubuntu14.04.3上安装Kinect,遇到一个无法找到设备的问题,记录一下。 官网上的安装说明如下: 官网上明确写了如果安装windows kinect还需要安装一个驱动,但是有些ROS的书上并没有这么做,只提到了使用如下两步进行安装即可使用: sudo apt-get install ros-<rosdistro>-openni-camera
ROS使用tf来决定机器人的位置和静态地图中的传感器数据,但是tf中没有机器人的速度信息,所以导航功能包要求机器人能够通过里程计信息源发布包含速度信息的里程计nav_msgs/Odometry 消息。 本篇将介绍nav_msgs/Odometry消息,并且通过代码实现消息的发布,以及tf树的变换。 1、nav_msgs/Odometry消息格式 nav_msgs/Odo
在导航过程中,传感器的信息至关重要,这些传感器可以是激光雷达、摄像机、声纳、红外线、碰撞开关,但是归根结底,导航功能包要求机器人必须发布sensor_msgs/LaserScan或sensor_msgs/PointCloud格式的传感器信息,本篇将详细介绍如何使用代码发布所需要的消息。 1、ROS的消息头信息 无论是 sensor_msgs/LaserScan,还是sensor
1、概述 ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。但是,如何在特定的机器人上实现导航功能包的功能,却是一件较为复杂的工程。作为导航功能包使用的必要先决条件,机器人必须运行ROS,发布tf变换树,并发布使用ROS消息类型的传感器数据。同时,为了让机器人更好的完成导航任务,开发者还要根
在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统。 1 tf简介 1.1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数据结构,根据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助用户在任意时间,将点、向量等数据的坐标,在两个参考系中完成坐标变换。 tf的相关设计思
上一篇博客介绍了HRMRP机器人平台的设计,基于该平台,可以完成丰富的机器人应用,以较为典型的机器人导航为例,如何使用HRMRP来完成相应的功能?本篇博客将详细介绍如何将HRMRP应用到实际的应用当中。 1. 系统架构 ROS作为一个分布式框架,从微观的角度讲,分布式体现在节点的布局和配置上,而从宏观的角度来讲,这种分布式可以体现在多机器人、多主机集成的系
1. HRMRP简介 HRMRP(Hybrid Real-time Mobile Robot Platform,混合实时移动机器人平台)机器人是我在校期间和实验室的其他小伙伴一起从零开始设计并开发的一款机器人平台,其中大部分扩展电路、驱动和ROS相关的底层功能都是我们自己做的。该机器人平台具有软硬件可编程、灵活性强、模块化、易扩展、实时性强等特点,机器人的整体结构如下图所示。
在理解了move_base的基础上,我们开始机器人的定位与导航。gmaping包是用来生成地图的,需要使用实际的机器人获取激光或者深度数据,所以我们先在已有的地图上进行导航与定位的仿真。 amcl是移动机器人二维环境下的概率定位系统。它实现了自适应(或kld采样)的蒙特卡罗定位方法,其中针对已有的地图使用粒子滤波器跟踪一个机器人的姿态。 一、测试
在上一篇的博客中,我们一起学习了ROS定位于导航的总体框架,这一篇我们主要研究其中最重要的move_base包。 在总体框架图中可以看到,move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分: (1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划; (2) 本地实时规划(local planne
导航与定位是机器人研究中的重要部分。 一般机器人在陌生的环境下需要使用激光传感器(或者深度传感器转换成激光数据),先进行地图建模,然后在根据建立的地图进行导航、定位。在ROS中也有很多完善的包可以直接使用。 在ROS中,进行导航需要使用到的三个包是: (1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置; (2) gmapping:根据激光数据(或者深
在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换。 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一、tf简介 我们通过一个小小的实例来介绍tf的作用。 1、安装turtle包 $ rosdep install turtle_tf rviz $ rosma
机器视觉在计算机时代已经越来越流行,摄像头价格越来越低廉,部分集成深度传感器的混合型传感器也逐渐在研究领域普及,例如微软推出的Kinect,而且与之配套的软件功能十分强大,为开发带来了极大的便利。ROS集成了Kinect的的驱动包OpenNI,而且使用OpenCV库可以进行多种多样的图像处理。 注:本章内容及代码均参考《ROS by Example》书中的第十章。
如今语音识别在PC机和智能手机上炒的火热,ROS走在技术的最前沿当然也不会错过这么帅的技术。ROS中使用了CMU Sphinx和Festival开源项目中的代码,发布了独立的语音识别包,而且可以将识别出来的语音转换成文字,然后让机器人智能处理后说话。 一、语音识别包 1、安装 安装很简单,直接使用ubuntu命令即可,首先安装依赖库: $ sudo apt-ge
对于移动机器人,键盘的控制往往满足不了我们的需求,以前看好多电影里边都是用一个摇杆来控制机器人的,简直帅爆了,正好我这里有一个操作杆,那就来尝试感受一下。 操作杆(joystick)控制会更加有操作感,ROS中的很多机器人也带有操作杆的相关代码,只需要简单的移植即可。我们使用的是赛钛客(saitek)的一款操作杆,如下图所示: 使用的移植代码是cl
如果尝试过前面的例子,有没有感觉每次让机器人移动还要在终端里输入指令,这也太麻烦了,有没有办法通过键盘来控制机器人的移动呢?答案室当然的了。我研究了其他几个机器人键盘控制的代码,还是有所收获的,最后移植到了smartcar上,实验成功。 一、创建控制包 首先,我们为键盘控制单独建立一个包: roscreate-pkg smartcar_teleop rospy g
看到前面写的博客还是帮助了很多ROS的学习者,我感到非常荣幸。其实我也是一名ROS的新手,ROS的相关资料少,上手难度大,我现在也在摸索着学习,还希望大家都将自己的学习成果在网上或者ROS群里分享。 我看到有些人在运行我前面写的smartcar程序,为了方便大家的学习,我这两天整理了一下代码,已经上传到csdn上,下载请见: http://downl
之前的博客中,我们使用rviz进行了TurtleBot的仿真,而且使用urdf文件建立了自己的机器人smartcar,本篇博客是将两者进行结合,使用smartcar机器人在rviz中进行仿真。 一、模型完善 之前我们使用的都是urdf文件格式的模型,在很多情况下,ROS对urdf文件的支持并不是很好,使用宏定义的.xacro文件兼容性更好,扩展性也更好。所以我们把之
前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人smartcar,为后面建立复杂机器人打下基础。 一、创建硬件描述包 roscreat-pkg smartcar_description urdf 二、智能车尺寸数据 因为建立的是一个非常简单的机器人,所以我们尽量使用简单的元素:使用长方体代替车模,使用圆柱代替车轮,具体尺寸如下
前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了。接下来我们涉及到的很多例程都是《ROS by Example》这本书的内容,我是和群里的几个人一起从国外的亚马逊上买到的,还是很有参考价值的,不过前提是你已经熟悉之前的新手教程了。 一、ROS by Example 这本书是关于国外关于ROS出版的第一本书
前面我们介绍了ROS的特点和结构,接下来就要开始准备动手感受一下ROS的强大了。ROS官网的wiki上针对新手的教程很详细,最好把所有的新手教程都搞清楚,这是后面开发最基础的东西。尽管如此,ROS对于新手来说还是很难上手,这里,我就来总结一下我当时学习的历程,也为其他新手作为一个参考。 一、ROS的安装 ROS的安装当然是我们开始动手的第一步了,这里我们使用的操作系
一、 总体结构 根据ROS系统代码的维护者和分布来标示,主要有两大部分: (1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。 (2)universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的
一、历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS(robot operating system),很快在机器人研究领域展开了学习和使用ROS的热潮。 ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术
近些年来, Google、Microsoft和Facebook等几大玩家都创建了自己的AI研发团队,并取得了一些令人瞩目的成果。2015年11月9日,谷歌宣布TensorFlow开源,这是一个在GPU上进行快速梯度式机器学习的巨大数据库。一些文章推测TensorFlow会带来一场人工智能革命,称谷歌的这一举动很大胆,因为Torch(由Facebook人工智能实验室的Ronan Collobert维
建议还是联网安装,这样才能安装到最新版本的包,以及自动完成众多依赖的安装
完整代码在这里:https://github.com/HorizonRDK/mono3d_indoor_detection
这个可以的呀,launch里不启动rviz就行了
正常的,路径规划算法是基于采样的,可以调整算法的参数,在yaml文件里,尽量每次保持一致,另外还要调整使用的ik算法,使用解析方式的ikfast会稳定一些
这部分源码是没开源的
1. 减少角速度2. 提高激光雷达频率
看报错,是有同名功能包存在呀
https://gitee.com/guyuehome/ros_21_tutorials
不好意思,此处笔误,是写错了,应该是: ros2 launch learning_launch remapping.launch.py
请参考这里: https://developer.horizon.ai/api/v1/fileData/TogetherROS/quick_start/install_tros.html#apttogetherros
之前写过一篇详细的入门推荐,供参考:http://www.guyuehome.com/2500
看下终端有没有报错,可能是缺少某些功能包,没加载成功
需要一些其他通信工具的支持,可以网上搜下不同局域网下通信的硬件或软件,可以做到网络穿透
两只海龟订阅的速度话题不同的话,就是不行的
ROS2的launch文件没有C++的方式
主要就是该lua参数文件
提示:Device '/dev/video1' is not a capture device. 确认下系统中相机的设备号,并且修改程序中的设备号,再编译运行
哈哈,据我所知,是没有的
你好,请联系小助手(微信号guyueju2020),工作日上班时间会回复的
有几种可能性:1. 部分电脑的ubuntu没有摄像头驱动,这种是无法运行的,可以用系统自带的cheese软件试下能够驱动相机,如果不能,则是系统驱动的问题;2. 如果使用的是虚拟机,一定要在虚拟机设置中把相机连接到系统中,同样使用cheese软件测试是否可以驱动相机;3. 确认下相机的设备号时候和例程中的一致;
2016年的时候,我有尝试过,由于资料太少,当时也没有跑起来,就放弃了。后来尝试过ros_soem,是可以把伺服跑起来,不过功能有限,最后彻底放弃了ROS的包,改用了IGH开源库,顺利驱动1~6个伺服电机。
roslaunch mrobot_gazebo mrobot_laser_nav_gazebo.launch以上指令是用来启动gazebo,并且加载仿真环境和机器人模型。roslaunch cartographer_ros cartographer_demo_rplidar.launch以上指令是启动cartographer建图算法,并且启动rviz查看建图过程。所以,仿真环境实在第一句指令中启动的。
-f、-d和args没有直接关系,而是和启动的节点功能有关系,比如代码中的-f,是map_saver节点对输入文件定义的指令,-d是rviz节点对输入文件定义的指令,args只是表示在运行节点时,把后边的参数内容连带输入
一个非官方的操作,不过效果还是不错的
激光雷达的型号的是EAI X3,三角测距
期待
这个就不确定了,可能是最近有变化,文章就是我当时完整的操作步骤,没有注册gitlab这一步
哈哈,这个时间太早了,我现在已经不记得了
可以参考对应视屏课程的讲解
fuerte这个版本太老了,根据你安装的ubuntu版本修改这里的ros版本,比如melodic、noetic等
ROS-I里没用到ros_control,如果一定要对比的话,应该算是在控制器中的部分,也就是最下层控制器硬件里的运功控制
是的,两个文件内容和功能都相同
:wq
是的,感谢提醒,不过这个不影响功能运行
应该是源的问题,可以试下更换成阿里、华为、清华等源试一下
功能上是一样的,rosdepc是国内开发者改的
哈哈
小沐,麻烦提供一下以下信息,便于我反馈给地平线官方确认问题:1. 使用的烧录软件(官方推荐的是balenaEtcher,我自己用的runfs)2. 参考烧录镜像步骤的手册或者链接(是否是官方手册)3. 使用的镜像或者镜像的下载链接4. 使用过的SD卡(品牌、型号、容量、Class几代)
我已将该问题反馈给地平线官方,看有没有更量化的解决方法,便于判断问题的来源
大工程,期待更新
感觉是网络问题,建议更换网络也试一试,比如手机热点
可以在ros的安装包里搜一下,被删掉的概率很大
手动点赞
提示里已经有明确的说明了,应该是pip工具版本的问题,要更新一下
melodic下我没试过了
https://developer.horizon.ai/forumDetail/98129538025877744
这个问题我还没遇到过,已转发到地平线AI社区,他们的工程师应该可以给出更准确的回复
原则上是可行的,处理器完全一样,官方早期测试使用的也是这块开发板,除了外界的IO部分不同之外,核心功能应该都可以跑
是最近H版本有一些变化,需要修改下setup.cfg中的: [develop] script_dir=$base/lib/learning_node [install] install_scripts=$base/lib/learning_node
可以更换网络试一下,我使用手机热点网络更稳定
收到,代码我都是在humble下测试过的,难道最近又更新了,多谢,我也确认下
https://mp.weixin.qq.com/s/PpH0zeQUcb3ixgm8VRn12Q可以参考下这篇文章
用这个命令试一下:apt install -o Dpkg::Options::="--force-overwrite" libssl-dev是官网目前的一个bug
我在课程里使用的是官方提供的源,在某些网络中确实会有问题,一般手机热点都比较稳
另外,课程中使用的是Ubuntu22.04
源报错的情况,大部分是因为网络和源的问题,可以试下更换网络或者更换源多试一试。ros2命令找不到的话,可能是没安装成功,或者没设置源
TogetherROS会跟随Rolling滚动迭代,具体支持humble的roadmap还不太确定
我在古月学院里专门做了一门讲这个的课程,可以参考
博客中的代码就是我当时测试的完整代码了,因为是很久之前测试的,不确定现在新版的功能是否会有api变化,这个可能得上网查下了,另外加入障碍物后,记得按一下rviz插件里的更新还是发布了,让环境知道有障碍物加入了
这应该是有问题的吧,感觉有某个地方在循环发布机器人的初始位置状态,得找到是哪里在发布,给关掉
看你要实现的控制器效果了,一般移动小车的轮子是用速度控制
是的
https://github.com/ps-micro/PROBOT_Anno
这个报错像是aubo包里定义的错误,不是ROS的标准错误,不太清楚了,得看aubo的说明
建议20.04
支持舵轮的插件还没看到过,可以github上搜下
抱歉代码无法提供。 主要思路是在控制器中做了一个虚拟仿真功能,如果切换到仿真模式,就不给电机发指令,直接向上位机反馈计算结果。
不能直接修改文件名的,本质上问题还是存在
你用的这个libmoveit_robot_trajectory.so.0.9.15编译时依赖的moveit版本和你电脑上的不一样,解决方法是在你电脑上重新编译libmoveit_robot_trajectory这个库,或者回退到对应版本的moveit。
暂时没有这方面的课程,可以参考下ekf相关的算法和ros包
根据电机扭矩和减速比,计算关节输出力矩,再推算出额定负载
这种用URDF很难处理,可能需要简化一下关键,找到一个类似的博客,可以看下有没有参考价值https://blog.csdn.net/qq_42145185/article/details/93501741
amcl是基于雷达和地图的全局定位,考虑地图和雷达的精度,有可能会有一些飘,定位也需要一个过程;TagSLAM没有用过,大致看了下介绍,因为有Tag的介入,定位精度很高。考虑两者的特点,感觉可以用TagSLAM定位的结果做位置校对,或者两个位置信息做融合算法
这是一个c++的例程代码,编辑器打开修改,重新编译再运行
具体得看是什么报错了,有可能是某一步没设置对,或者漏掉了
有可能是joint states节点没配置好
更换网络、update,多试一试
现在不用下载源码安装了,可以直接:sudo apt-get install ros-melodic-arbotix-ros
cmakelist里边有一个include路径的设置,所有头文件的路径都要设置一下,这个语法也可以网上找下cmake的教程学习一下
这个报错的原因我还不太清楚,我们一般使用是Qt的语句来创建按钮以及配置按钮的分布,建议在github上找几个plugin的例程参考一下
gazebo是做仿真的,不适合做人机交互,可以用rviz来做
关于这个项目有什么疑问么?
古月学院有的
确定
提示没有找到这个包,确实包是否存在并且设置了环境变量
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc sudo apt-key add -报错的话就拆成两句话运行
是一样的,但是需要注意选择匹配的ubuntu的ROS版本
dashing停止维护了
你用的是哪个版本的ROS2,我重新测试了文中的写法是可以正常运行的,ubuntu20.04+ros foxy
《ROS机器人开发实践》
很赞的测评
建议找一本ROS系统介绍的图书,然后把书中的例程都复现,在复现过程中阅读实现的源码,效率高一些
感谢指正
是编码格式的问题,可以参考下图中的编码转换方式:
Failed to validate trajectory: couldn't receive full current joint state within 1s 报错已经很明确了,moveit没有收到机器人的状态反馈/joints_state话题数据,检查该话题是否正常在发布,并且数据正确
源码可能版本不对应,可以直接用apt install的方式安装arbotix
哈哈,欢迎在古月居的项目中心发布一个项目,方便未来大家找到
具体碰撞算法的原理我没有深入研究过,可以参考ROS碰撞检测算法FCL,有对应的论文介绍
melodic版本的ROS只能用2.7,先确定默认用的是不是这个版本,另外我看你的arbotix是自己下载的源码,需要确定是否是对应melodic版本的
这个是可以做到的,可以看下Rivz中的一些插件,比如Marker等,这些是可以做到自定义一些数据显示的。比如我们显示tf的时候,就可以显示坐标系的名称,原理类似。
代码结构是可以的,运行学模型根据实际的计算即可
哈哈,我专门去试了一下
非常感谢反馈,抱歉造成困扰,我们也会将以上问题找到相关老师确认,欢迎大家提供更多建议和意见,帮助我们不断提高暑期学校的课程内容
如果都在tf树中,可以直接通过tf查询
我们有试过同一台电脑启动来套moveit控制两个机械臂,是可行的,关键是命名空间的隔离,看报错像是命名空间隔离后话题没连接上或者是tf中命名有问题
可参考《机器人学导论》书中轨迹规划的方程,用五次多项式约束路径点的位置、速度、加速度、时间
感谢指正,具体论文我没研究过,欢迎发文分享
应该是软件源的问题,可以试试更换清华的ros源,然后update
这个版本的ubuntu我还没试过,应该是依赖库的版本问题
图像识别实物还是一样的方法,代码可以参考:https://github.com/ps-micro/PROBOT_Anno
这个我还没关注过,可以看下gazebo官方的教程
我们深知一个人的力量是有限的,社区的构建需要更多人参与,现在已经邀请一些有热情的开发者和助教在尽量回答泡圈的问题,如果你也有兴趣参与社区的运营,欢迎将联系方式通过古月居微信公众号后台发给我们,负责运营的同事会和你联系,非常感谢建议
关于bug解决方法的笔记和个人总结的博客,我们欢迎和鼓励大家投稿,在古月居网站直接投稿提交即可,我们会尽量汇总到一起看,比如通过专栏的方式展现
vrep用的少,这个我没了解过
一般是就近原则,各轴加起来的运动量最小,或者某几个关键轴运动量最小
古月居泡泡里可以提问
包没找到,不是环境变量没设置,就是没安装好,或者是输入拼写错误
我在18.04中配置过,可能的问题是依赖库,装起来确实比较麻烦,官方说明中也有18.04的版本,我主要是参考这个过程进行的: http://docs.ros.org/en/melodic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html
看提示感觉是moveit端和gazebo端的关节名称没对应上
轨迹是通过话题发送的,所以可以通过订阅话题把数据拿出来,然后将某一次稳定规划好的轨迹保存到文件中,下次执行的时候,再读取数据并且封装成话题发给机器人执行即可
方法一:matlab中写完的算法通过自动生成c/c++,或者手动改写成c/c++/python,然后封装成ros节点,在机器人中运行 方法二:直接使用matlab的ros接口,检测算法输出的指令通过ros接口发送给机器人,控制机器人运动
此项目还没有人完成,持续招募中
是指ROS1的
我的电脑买回来预装win,另外购置了一个硬盘,安装文中同样的分区和安装方式安装了ubuntu16.04,又用同样的方式安装了20.04,个人习惯的分区设置在博客中已经详细图文讲到了的
这个包平时玩机的时候还是挺实用的
一般都是加传感器辅助检测
我之前也纠结过这个问题,查阅了大量资料及官方的回答,查阅结果是compute_cartesian_path无法精准控制机器人的速度,也就无法控制运动的时间,如果有谁知道如何设置,欢迎指教
主要是看前边的数据类型,前者是PoseConstPtr,声明是一个指针型,后者是Request,不带Ptr的后缀,是一个结构体,回调函数用这两种方式都可以,只需要注意用指针型就是->,否则就是.
在launch文件中这样: 具体可参考:https://www.guyuehome.com/279
文中的代码版本有点老了,可以参考下这篇文章:https://blog.csdn.net/qq_16775293/article/details/88189184
很精彩的分享,手动点赞
10407提示是用户校验出错了,请检查下载的SDK和代码中用的appid是否匹配一致的
感觉像是雷达仿真的角度或者姿态不太正确
每一个topic只能对应一个msg,msg是数据结构,topic是通信方法,不是同一个范畴
noetic很多包都还没有移植过去,短时间内还是建议用melodic稳一点
点击开始按键后,qt调用系统命令,运行slam节点,点击停止按键后,后台发送停止建图的话题
需要详细的报错信息
原则上也是可以的,不过硬件设备只在武汉和深圳有,需要到现场开发
武汉光谷,有兴趣的话,可以发送简历或者项目经历到 job@guyuehome.com
您好,主要是参考项目经历,最好有相关的开发经验。 有兴趣的话,可以发送简历或者项目经历到 job@guyuehome.com
第一章最后一节有下载链接
推荐18.04
可以参考moveit wiki,有更多插件的使用介绍
是开源项目的,正在整理,近期会在古月居的“项目中心”开放出来
如果你使用的是Kinetic或之前版本的代码,需要修改下URDF模型中差速控制插件的方向,melodic和之前版本方向刚好相反,比如以前是向左转,M版本里就是向右转,这个需要调换一下
有的,libgazebo_ros_planar_move.so
还是tf的问题,检查base_footprint to carbody的坐标变换,有可能是没有,也有可能是频率不对
哈哈,谁说不是呢
可以试下用remap机制,把需要修改的话题名重映射一下
需要检查有没有配置好ArbotiX的配置参数,就是yaml文件
有可能时tf不稳定的问题,检查下是否有不同节点在广播base_link到odom的坐标变换
不同版本的ROS中确实对功能包的细节有变化,如果是这样的话,有可能是包中的算法进行了优化
foot_print表示映射到地面的坐标系,这个时候就是以这个坐标系为基准的半径了,很多机器人都是这样用的
这个模型应该是作者自己做的,ROS里边可以用URDF+Gazebo建模仿真,可以研读下作者的源码,古月学院里也有相关的视频课程: 一起从零手写URDF模型:https://class.guyuehome.com/detail/p_5e1eea4fe1e5c_Igm126Xn/6 如何在Gazebo中实现移动机器人仿真:https://class.guyuehome.com/detail/p_5eb2366befe4a_E4rbNmXt/6
sudo apt-get install joint-state-publisher-gui安装
在我了解范围内还没见到过类似的操作方法
moveit运行是这样的,你可以试下0.5秒cancel一下,这样机械臂会停止运动,然后再重新规划
kinetic和melodic中的差速插件方向不一致,如果你用的是m版本,需要修改下urdf中两个轮子的方向
不好意思,这个我还没遇到过,不太清楚
gazebo的离线模型中,本身带有一些动态模型的(比如运动的人),可以作为障碍物;如果需要控制,也可以加入另外一个机器人作为障碍物
也是类似的,可以参考ROS中的双臂系统,比如PR2
欧拉角和四元数是两种姿态的描述方式,本质都是一样的,所以使用哪个并不影响原理
感觉tf设置有问题吧
是不是远程无法渲染图像界面
你使用${}了么
是的呀,配置还是挺复杂,最后的效果玩玩还可以,搞开发也比较慢
这个报错我还没见过,google找下吧
检查下controller的配置,应该是配置有问题
感觉是模型里的头内容不对吧
这块我不太清楚
不需要,可以直接学,不过目前ROS2的资料比较少,建议暂时还是先上手ROS1,会快一些
安装的时候都是中间的横线, joint-state-publisher-gui
PROBOT Anno机械臂:http://www.ps-micro.com/anno
可以在这里留言的
用joint_state_publisher_gui替换原本的joint_state_publisher,然后删除launch中对use_gui的设置
可以参考这门课程,里边有麦轮小车:https://class.guyuehome.com/detail/p_5e32dce7906e0_6TqS7BwX/6
可以加一个前瞻
这个错误我还没见过,google找下
我也试过,是挺慢的,一般就是修改joint_limit、urdf模型或者放大发送指令
如果确定代码没有问题的话,请检查cmakelist文件,找不到函数定义
好像是某个文件的权限不对
这个看深蓝学院这边的安排了
用arbotix是这样的,并不仿真轮子的转动,可以配置ros_control+gazebo,每个轮子一个速度控制器,就可以看到转动了
这个不需要什么实际用途,高达已经成为了一种信仰...
joint_state_publisher_gui是刚更新出来的包,需要把之前的joint_state_publisher换成joint_state_publisher_gui
感觉是python的版本问题,确认一下用的是不是python2
可以看看kuka的youBot
现在可以直接安装啦:sudo apt-get install ros-melodic-arbotix
重新安装下joint_state_publisher试试
确认是否编译成功,在devel/lib下看有没有生成可执行文件
请把robot_voice中的libmsc拷贝到/usr/lib中
首先确认是否是在虚拟机中运行的,需要配置图形渲染是用cpu,其次确认是否下载了离线模型库,gazebo最好重新安装下
缺少joint_state_publisher节点,apt安装
同样的方式加载即可,不要放到同一个位置,如果用moveit控制的话,注意模型中的tf名称不能冲突
是的,简单的示例可以通过这种形式实现,复杂点的程序还是得自己来修改
move_base可以支持多线雷达,需要另外装一个包,在github上找下,名字记不太清楚了
urdf不能直接支持并联机器人,sdf可以在gazebo中仿真
一个数字?不是位置么?单位应该是弧度
感觉驱动有问题,重装试试
有可能和虚拟机的模型渲染有关系,另外也检查下模型是否成功加载
哈哈,古月居微信公众号上有全文
不好意思,这个我不太清楚
主动关节才需要创建transmission标签,随动的在joint中设置mimic属性
你用的是课程例程么,错误提示gripper.set_joint_value_target([0.01])里的0.01不在运动范围内
那个程序获取的路径点中是有速度信息的
需要用可以反馈速度和加速度的控制器
demo里是一个简单的仿真,没算到速度级别
map坐标系还是得有的,可以建立一个odom到map的静态变换
好像是没有python的
这个是抓取姿态分析的范畴,moveit里并没有相关功能,可以在ros找找grasp相关的包,有其他包进行分析的
这个是软件源里安装的包
上位机中有一个下拉框可以选择其他算法,或者在ompl.yaml文件里修改默认使用的算法
这个看不出来问题所在,检查下程序有没有内存溢出等问题
可以通过tf获取实时的终端位姿,自己实现保存的功能
matlab也有ros的接口,可以通过话题直接把算法结果发给ROS环境,控制机器人移动
不好意思,并联机器人了解不多
和map匹配的一个yaml文件里可以设置机器人的初始位姿
可以订阅map数据的话题拿到实时数据
可以不加载地图
您好,感谢指正,是写反了,已经修正
有可能软件源里还没有
之前的部分博客图片是转载csdn的,应该出了点问题,最近网站在重新维护
可以用hector和amcl试试,应该可以
不好意思,这个不太清楚