机器人程序设计——之如何正确入门硬创公开课(附视频)转

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

资深技术专家手把手带教

技术交流,直击现场

让创作激发创新

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

ROS和Android一样是开源的,功能上也是相差无几,它可以提供硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。其独特之处在于,能够支持多种语言,如C++、Python、Octave和LISP,甚至支持多种语言混合使用,这可以简化开发者的工作。因为它是基于Linux的系统,其可靠性也会更高,体积可以做到更小,适合嵌入式设备。

另外,ROS是一种分布式处理框架,开发者可以单独设计可执行文件。不同节点的进程能接收、发布各种信息(例如传感,控制,状态,规划等等)。

Top博士自2009年第一次接触到ROS后,便认识到其在机器人开发中的重要性,并不遗余力在国内进行推广。然而随着ROS近年来火热,在教学中也发现很多新伙伴对ROS的认识存在一些误区,为了加快小伙伴们的学习速度,雷锋网本期公开课雷锋网邀请Top和大家分享一点自己学习和使用的经验和心得。

雷锋网本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路。内容包括但不限于ROS全球使用现状、核心概念、工作原理等学习重点,及仿真环境、工具库等需了解的内容。介绍了具体的学习路径及有用的资源链接。

嘉宾介绍:

Top Liu,易科机器人实验室、(星火计划)ROS公开课联合发起人,致力于机器人技术的探索与分享,撰写各类技术文章近百篇,出版有《ROS机器人程序设计2》、《机器人编程实战》、《嵌入式机器人学》、《机器人与未来》。

当前大家学习ROS还是以自学为主,所以会走很多的弯路,目前所谓的大神们也都是这样过来的。基本上早期开发机器人大家都是各干各的,甚至是防着彼此,生怕别人把我们的代码、设计抄袭过去,这样其实大家就是在重复地造轮子,进行一些底层的无聊工作。

我最早接触ROS是2009年在翻译《嵌入式机器人学》这本书,作者托马斯·布劳恩教授当时开发了一套RoBIOS的机器人操作系统,按照他的说法,这是最早的机器人操作系统,而且是可以嵌入式应用的。当时和他沟通,他表示不会开源,而且售价特别高,当时在网上搜索,不经意间看到了ROS,Box版本,很古老的版本。

什么是ROS?这是个老生常谈的问题,这里用官网的定义来解释一下。ROS是一个适用于机器人的开源的元操作系统。它不是一个真正的操作系统,但它提供了操作系统应用的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、 编译、编写、和跨计算机运行代码所需的工具和库函数。 它主要采用的是松耦合点对点进程网络,目前主要支持的还是Ubuntu系统,Mac OS X支持,Windows目前有测试版本,但支持的并不很好,不推荐。

首先,目前机器人开发,软件开发的比重越来越大,而软件开发的时候软件框架的选择,是软件架构设计中一个重要的决策,直接决定了软件开发的直接效率,以及后续功能的实现程度。

目前除了ROS,还有很多类似的机器人软件框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio。

为什么使用ROS呢?我总结了下,ROS有四大优点:1、松散耦合的机制方便机器人软件框架的组织;2、最丰富的机器人功能库,方便快速搭建原型;3、非常便利的数据记录、分析、仿真工具,方便调试;4、学界和产业界的标准,方便学习和交流。 使用一句话总结,使用ROS,能够方便迅速地搭建好机器人原型。当然,它的性能不是最优的,但是这四条优点足以保障它在机器人操作系统里面的地位。

然后,ROS比较好的一点是使用了BSD许可证,这是一个非常宽松的开放许可证,允许在商业和闭源产品使用,这对于开发产品的创业公司是比较重要的一点。

ROS是最庞大的使用者群体,是事实上的机器人标准,这是麻省理工在一篇文章中给出的评论。然后在2016年ROS大会数据显示,目前在使用操作系统做开发的人员用户超过35万,其中活跃用户美国占第一位,中国占第二位。

在学术研究领域,基本上机器人算法都会给出ROS版本的源程序。最早在2009年ROS发布的“ROS: an open source Robot Operating System” 论文,目前已经被引用了2871次。

这是ROS当前的代码统计量,总行数已经超过了1400万,超过2477名作者。代码语言以C++为主,63.98%的代码是用C++写的,排名第二的是python,占13.57% ,也就是说ROS基本上都是使用这两种语言,可以实现大部分的功能。

要想学ROS,应该从哪里入手,它的先后顺序是怎样的呢?ROS由四大部分构成,第一个是基础结构,这些通讯机制是如何实现的;第二个是工具,包括仿真工具、调试工具等;第三个是体现它功能的package;第四个就是社区,如何去上面下载、发布代码,和其他开发者交流学习。

入门的话,首先要了解这四点:设计思想,核心概念,核心模块,核心工具。

设计思想主要是分布式架构,将机器人的功能和软件,做成一个个节点,然后每个节点通过topic进行沟通,但你这些节点可以部署在同一台机器上,也可以部署在不同机器上,还可以部署在互联网上。

ROS的核心概念主要是这几个,首先是节点,然后是节点之间的通信和话题,通信的方式有两种,一个是刚刚讲的话题,一个是服务。那么,如何管理ROS的这些节点和话题之间的沟通呢?这就需要用到Master,也就是ROS管理器,它还维持了一个参数的服务。而怎么组织代码,就是通过功能包集与功能包。

节点是各自独立的可执行文件,能够通过话题、服务或参数,与服务器或其他进程(节点)通信。ROS通过使用节点的方式将代码和功能解耦,提高了系统容错能力和可维护性,使系统简化。同时,节点允许了ROS系统能够布置在任意多个机器上并同时运行。关于节点需要注意的事项,节点在系统中必须有唯一的名称;节点可以使用不同的库进行编写,如roscpp和rospy,其中roscpp基于C++,rospy基于Python。

节点之间通过topic机制进行通信,topic机制是一个一对多的Publish/Subscribe 模式: 同一个话题也可以有很多个订阅者,它的底层传输依靠的是TCP/IP,也可以是UDP。topic具体传输的message,具有一定的类型和数据结构,包括ROS提供的标准类型,和用户自定义类型。

除了topic,ROS还提供另一种一对一的机制,也就是Service/Client,当你需要直接与节点通信并获得应答时,将无法通过话题实现,这时需要使用该服务。

Master向ROS系统中其他节点提供命名和注册服务,跟踪和记录话题的发布者和订阅者,使ROS 节点之间能够相互查找。一旦节点找到了彼此,就能建立一种点对点的通信方式。

ROS核心模块包括通信结构基础、机器人特性功能以及工具集,通信结构基础包括消息传递、记录和回放消息、远程过程调用、分布式参数系统;机器人特性功能包括标准机器人消息,机器人几何库,机器人描述语言,抢占式远程过程调用,诊断,位资估计、定位与导航;工具集包括命令式工具、可视化工具以及图形化接口。

ROS拥有很多第三方的核心工具的支持,或者说Package。我们比较常见的是右边这五个工具,Gazebo是一个三维仿真环境,OpenCV是大家非常熟悉的计算机视觉库,PCL是点云库,MoveIt!是机械臂的规划控制库,Industrial是工业上会用的库。左边有三维仿真环境,另外两个其中值得一提的是MRPT,是一个非常好的机器人编程工具箱。然后,如果对实时控制要求比较高的话,可以考虑最下边的The Orocos Project。

ROS用的最多的可视化工具是rqt(集成图像交互界面)和 rviz(3D 可视化工具)。

ROS具有非常强的数据存储/回放功能,也就是使用bag存储topic(例如现实中的传感器数据),以后调用bag的topic数据则不必每次都在现实中运行机器人,速度非常快。

怎么学

首先,我们在学校学的是指导主义,也就是传统的教学方式:老师讲,学生听,今天我在这儿其实也属于这种模式吧,而这种模式的缺点在于开环或是闭环周期过长。另一种是建造主义,通过动手来学习,然后你可以得到实时反馈,你学到的知识就能形成一个闭环。当然,你还是要摸索出一个套路,这样上手才能比较快。

当然,比较好的套路还是官网的那一套。首先按照官网的步骤安装ROS,这个过程不要轻易问问题,因为教程里讲得已经很明白了,大神们对这些问题也会比较鄙视,通常会笑而不语。另外,建议初学者一定要认真学完整20个初级教程!然后就此打住!那些中级教程就不要再看了,浏览下都有啥即可,以后遇到类似问题再回来看即可,这个时候你的重点就应该回到机器人学及其实践上了,那20个初级教程都是可以在电脑上编程学习的,但不涉及机器人学。

接下来就应该运行真实的机器人、解决真实的问题。有的小伙伴就会问,没有真实的机器人怎么办?当然也有办法,你可以在仿真环境里边运行。

仿真环境由易到难主要有这三个:Turtlesim、ArbotiX、Gazebo。Turtlesim是一个QT开发的2D轨迹显示界面,只能显示运动轨迹;ArbotiX是含有一个差速驱动机器人的rviz模拟器,机器人运动及topic数据的3D显示,但不包含物理学引擎;Gazebo是功能齐全的3D物理模拟器,不过缺点是非常重,对内存和显卡要求高,慎入!

很多小伙伴会问,ROS版本那么多,该用哪一个? 目前,ROS是一年推出一个版本。通过下载统计,我们发现现在使用最多的还是Indigo,所以对于初学者,建议还是使用这个版本,因为这是目前使用人数最多、坑最少的版本。而如果Linux编程能力比较强的,可以使用Kinetic,它可以一直支持到2021年。然后,你在选择Ubuntu版本时,要与ROS版本需匹配。

命令行不熟悉怎么办? 有IDE

现在已经有很多IDE了,值得一提的是这个RoboWare Studio是我们中国团队开发的一个开源IDE,目前刚刚推出64位版本。最近我也和RoboWare Studio的王博士交流了一下,他表示之后会推出32位版本,包括Arm集成开发环境的,而且承诺是免费的,以后也会在适当的时候开源。

不熟悉Linux怎么办?

其实学习ROS并不难,而很多小伙伴遇到的问题在于对于Linux不熟悉。这个只能边用边学了,遇到问题也要善用搜索,基本上这些问题都能在搜索中找到答案。教程推荐这两个版本,一个是英文版本,一个中文版本。书的话,推荐《鸟哥的Linux私房菜》吧!

ROS和ROS2.0该学习哪个呢?

Q&A 环节

Q:请问除了ROS还有其他哪些常用的实时嵌入式操作系统?

Q:硬件方面有什么要求呢?

A:刚才讲了ROS它具备操作系统的特性,其中一个特性就是对于硬件的抽象,如果你用ROS的话,你不用过多关注底层硬件的东西,因为大家都是按照标准来做好封装,你直接调用就OK,你主要的精力还是放在机器人系统的设计和算法的开发上。

A:据我所知,自动驾驶领域一些大企业也是用ROS开发的,它的最终产品不一定是基于ROS,但是研发阶段我相信是会用到的,据所了解确实有一些是在用的。

Q:ROS未来能不能发展成完全替代Linux和Window?

A:ROS不会替代Linux和Window,它根本就是两回事儿。Linux和Window是一个基本的操作系统,ROS是完全针对机器人的上层架构,它可以依赖于Linux和Window,当然2.0开始,也开始独立地去工作。所以,你要搞清楚,哪些是ROS可以做,哪些是它不擅长的领域。

A:目前用ROS开发不是很好实现,如果用ROS 2.0,应该是可以的。因为ROS它用在分布式系统上,一个比较大的问题是需要一个Master,分布式系统是不需要Master的,所以如果你非要用ROS的话,就有点别扭。而ROS 2.0是没有中心节点的,是没有Master的,完全分布式架构,那应该适用于多机器人的应用场景。

关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务

THE END
0.机器人制作开源方案桌面级机械臂本体说明+驱动及控制本文围绕桌面级机械臂展开,介绍了其本体情况,包括整体描述、结构、电路连接、软硬件环境配置及资料下载;还阐述了驱动及控制方法,如总线舵机模式设置、单关节控制、操作杆方案和无线遥控,为机械臂的使用和开发提供了详细指导。 一、本体说明 1. 机械臂整体描述 jvzquC41dnuh0lxfp0tfv8Wqdqzxc‚4ctvodnn4fgvgjn|43549:5B85
1.DummyRobot首页文档和下载迷你机械臂机器人软件简介 Dummy-Robot 是开源的机械臂机器人项目,可以用来做一些人手无法做到的操作,比如软件去抖、运动范围的重映射、力矩强增强等等。 仓库说明 已添加 3D 模型设计源文件。 已添加夹爪硬件设计文件和 LED 灯环 PCB 已添加无线空间定位控制器 PCB 文件 已添加无线示教器 Peak 软硬件工程(作为 submodule) 已添jvzquC41yy}/q|hjkpg/pny1r1jvov~/tqhpv
2.ABB双臂机器人最全入门介绍robotware和robotstudio的区别Robotware主要是用于实际机器人控制器上的软件,负责与硬件交互和执行实际任务。 RobotStudio是用于编程、仿真和调试的工具,帮助用户在虚拟环境中开发和优化机器人程序。 同时ABB还配备了FlexPendant,可以理解为是一个自带的小电脑,具有友好的人机交互界面,如下图所示: 二、ABB的基本构型参数 ABB的两个七jvzquC41dnuh0lxfp0tfv8gwnnkuu}ftv1gsvrhng1jfvjnnu1757>;84:;
3.机器人制作开源方案桌面级机械臂运动控制机器人制作开源方案 | 桌面级机械臂--运动控制 1. 调整总线舵机的模式 实现思路: 机械臂包括转台、大臂、小臂三部分,先设置好总线舵机每个ID的工作模式。下图是计划给舵机的各部分设置的ID号: 接下来为各部分设置相应的舵机模式(见下表),并在程序里进行编程设置。jvzquC41dnuh0lxfp0tfv8Wqdqzxc‚4ctvodnn4fgvgjn|4354;13B65
4.KEBA工业机器人示教编程·IOA在线帮助指导手册·看云注意:(首次运行或更换机械臂种类才需要下载,已经使用过该机器人则不需要重复下载) 6)开启虚拟示教器,双击桌面上已经安装完成的KeMotion3 03.12a图标选择“KeMotion TeachView T70Q TeachView_3.14a”图标,运行虚拟示教器。 7)运行虚拟示教器,运行之后会弹出一个命令行窗口,等待一段时间会运行虚拟示教器界面,在界面中jvzquC41yy}/mjsenq{e0ls1jcuyw‚fq1kubqu5314784A66
5.梅卡曼德机器人工业级3D视觉相机工业机器AI+3D视觉软件梅卡曼德致力于用 AI+3D 技术加速各行业智能化升级。经多年潜心研发,梅卡曼德现已形成包括 Mech-Eye 工业级 3D 相机、Mech Vision 机器视觉软件、Mech-DLK 深度学习软件、Mech-Viz 机器人编程软件在内的完整产品链。可应用于无序物体抓取、高精度定位、装配、工业检测 / 量测、自动生成轨迹等典型场景 jvzquC41yy}/{~s::0ipo8utqf{dv8:5574ivvq
6.基于microbit的自制机械臂|开源机器人——“搬呀”DF创客社区本次大会中旺仔爸爸制作的可编程开源机器人有幸在现场参与了展示 会议结束后,旺仔爸爸就制作了开源机器jvzquC41oe4eh{tdqv4dqv3ep1zitnff/571395/3/7/j}rn
7.机械臂的现状与未来行业动态现在一个解决办法(DoBot所采用的方案)是用“示教”的方法解决,第一步,操作者抓着机械臂的末端,放到期望位置上,并在控制台按下操作按钮记录下此时机械臂的位姿,按顺序记录的一系列位姿随后用作机器人编程的参考点,例如捡——放任务中的重复性动作。机械臂会记忆住关节的角度和位置,并自动编程,然后再重复实现。 jvzquC41yy}/oohcf0ipo8kzwt0fxsivco05?>;70nuou
8.NANO机械臂AI人工智能视觉识别ROS编程机器人机械手臂基于Jetson Nano开发的 AI视觉机械臂, 开发近40多个手把手教学项目 案例, 从简单的机械臂基本运动、正逆解方程来进行定点抓取、搬运及 码垛, 结合OpenCV 图像处理到机械臂进行颜色追踪、人脸追踪、颜色 识别抓取和AprilTag标记识别, 从人机互动、基于图像识别的手势识别 jvzquC41yy}/nxgqtqhpv7hqo1vsqmzevktgq8724:=7;7mvon
9.机器人教程网机器人教程网提供了PDPS、Robcad、Delmia、Roboguide、MotosimEG、IGRIP、Nachi、RobotStudio等仿真软件破解操作视频教程与图文教程;工业机器人品牌包括:FANUC发那科、NACHI那智、kuka库卡、ABB机器人、MOTOMAN安川、COMAU柯马、Kawasaki-川崎、PANASONIC-松下、OTC等机器jvzq<84yyy4sqktvle4dqv4
10.大象myCobot机械臂6轴机器人ROS视觉识别少儿编程myCobot 由大象机器人和M5stack联合出品,是世界最小最轻的六轴协作机器人,可根据用户的需求进行二次开发,实现用户个性化定制,是生产力工具也是想象力边界的拓展工具。 myCobot 自重850g,有效载荷250g,有效工作半径280mm;体积小巧但功能强大,既可搭配多种末端执行器jvzquC41jgkd0lfjg0kew7hp1eunrjs{1rxpf~hv16859<3jvor
11.工业机器人中最常用的机械臂有哪些?行业动态资讯什么是工业机器人手臂? 工业机械臂是一种采用机器人技术编程的工具,能够自动执行任务。它的结构灵活、适应性强,可以模仿人类的某些能力。这些机器也被称为机械臂,由电机驱动,可以长期重复执行已编程的任务。 除了灵活和自适应的关节外,机械臂通常还包括传感器、视觉系统、软件和运动控制器,使其具有更大的运动范围和自jvzquC41yy}/hxwmnkluujkgv{4dqv3ep1tfy|4fgvgjn872456:1:>630nuou