搭建网站教程视频,wordpress后台特别慢,网络营销策划目标,深圳网站建设制作设计关注星标公众号#xff0c;不错过精彩内容来源 | 博文视点Broadview自20世纪七八十年代以来#xff0c;在计算机技术、传感器技术、电子技术等新技术发展的推动下#xff0c;机器人技术进入了迅猛发展的黄金时期。机器人技术正从传统工业制造领域向家庭服务、医疗看护、教育…关注星标公众号不错过精彩内容来源 | 博文视点Broadview自20世纪七八十年代以来在计算机技术、传感器技术、电子技术等新技术发展的推动下机器人技术进入了迅猛发展的黄金时期。机器人技术正从传统工业制造领域向家庭服务、医疗看护、教育娱乐、救援探索、军事应用等领域迅速扩展。如今随着人工智能的发展机器人又迎来了全新的发展机遇。机器人与人工智能大潮的喷发必将像互联网一般再次为人们的生活带来一次全新的革命。本文将带大家走入智能机器人的世界一起掀开ROS的神秘面纱带领大家认识智能机器人的灵魂。机器人的发展经历了三个重要时期如图1所示。电气时代2000年前机器人主要应用于工业生产俗称工业机器人由示教器操控帮助工厂释放劳动力此时的机器人智能程度不高只能完全按照人类的命令执行动作。在这个时代人们更加关注电气层面的驱动器、伺服电机、减速机、控制器等设备。数字时代2000—2015年随着计算机和视觉技术的快速发展机器人的种类不断丰富涵盖了如AGV、视觉检测等应用。同时机器人配备的传感器也更为丰富然而它们仍然缺乏自主思考的能力智能化水平有限仅能感知局部环境。这是机器人大时代的前夜。智能时代2015年至今随着人工智能技术的兴盛机器人成为AI技术的最佳载体人形机器人、服务机器人、送餐机器人、四足仿生机器狗、自动驾驶汽车等应用井喷式爆发智能机器人时代正式拉开序幕。图1 机器人发展的三个重要时期硬件是智能机器人的坚实载体软件则赋予智能机器人灵魂。智能机器人的快速发展对机器人软件开发提出了更高要求。为了应对这一挑战并促进智能时代机器人软件的开发与创新业界亟须开发一款通用的机器人操作系统作为标准平台机器人操作系统Robot Operating SystemROS在2007年应运而生。ROS发展历程对于运行越来越复杂的智能机器人系统已经不是一个人或者一个团队可以独立完成的如何高效开发机器人是技术层面上非常重要的一个问题。针对这个问题斯坦福大学的有志青年们尝试给出一个答案那就是ROS。01ROS的起源2007年斯坦福大学的有志青年们萌生了一个想法能否开发一款个人服务机器人这款机器人能够协助人们完成洗衣、做饭、整理家务等繁琐的任务也能在人们感到无聊时陪伴他们聊天解闷、做游戏。最终他们将这个想法付诸实践真的研发出了这样的机器人。当时他们深知做出这样一款机器人并不容易机械、电路、软件等都要涉及横跨很多专业光靠他们自己肯定做不到——既然自己做不到那为什么不联合其他人一起干呢如果设计一个标准的机器人平台大家都在这个平台上开发应用那么应用软件都基于同一平台应用的分享就很容易实现。这就类似于只要有一部苹果手机就可以使用任何人开发的苹果手机应用。初期的机器人原型是由实验室可以找到的木头和一些零部件组成的后期有了充足的资金才得以实现一款外观精致、性能强悍的机器人——PR2Personal Robot 2代。在他们的不懈努力下PR2已经可以完成叠毛巾、熨烫衣服、打台球、剪头发等一系列复杂的任务见图2。以叠毛巾为例这在当时是轰动机器人领域的重要成果因为这是机器人第一次实现对柔性物体的处理虽然在100分钟内只处理了5条毛巾但在学术层面这个成果推动机器人研究向前走了一大步。图2 PR2的应用功能示例在这款机器人中开发者构建了一套相对通用的机器人软件框架以便上百人的团队分工协作这就是ROS的原型。ROS因PR2而生但很快从中独立出来成为一个更多开发者使用、更多机器人应用的通用软件系统。02ROS的发展PR2个人服务机器人项目很快被商业公司Willow Garage看中类似于现在流行的风险投资。Willow Garage投了一大笔钱给这群年轻人在资本的助推下PR2小批量上市。2010年随着PR2的发布其中的软件系统名称正式确定叫作机器人操作系统Robot Operating SystemROS。同年ROS也肩负着让更多人使用的使命被正式开源此后ROS快速发展如图3所示。PR2虽好但是其成本居高不下几百万元的价格让绝大部分开发者望而却步。2011年ROS领域的爆款机器人TurtleBot发布这款机器人采用扫地机器人的底盘配合Xbox游戏机中的体感传感器Kinect可以直接使用笔记本电脑控制同时它支持ROS中经典的视觉和导航功能关键是价格便宜。这款机器人的普及大大推动了ROS的应用。图3 ROS的发展历程从2012年开始使用ROS的人越来越多ROS社区开始举办每年一届的ROS开发者大会ROS ConferenceROSCon来自全球的开发者齐聚一堂分享自己使用ROS开发的机器人应用其中不乏亚马逊、英特尔、微软等大公司的身影参与人数也在逐年增多。经历前几年野蛮而快速的发展ROS逐渐稳定迭代2014年起ROS跟随Ubuntu操作系统每两年推出一个长期支持版Long Time SupportLTS每个版本支持五年这标志着ROS的成熟加快了其普及的步伐。回顾2007年ROS的创始团队原本只想做一款个人服务机器人却意外成就了一款被广泛应用的机器人软件系统。但由于设计的局限性ROS的问题也逐渐暴露为了能够设计一款适用于所有机器人的操作系统全新的ROS——ROS 2在2017年年底正式发布。又历经多年迭代终于在2022年5月底ROS 2迎来了其首个长期支持版——ROS 2 Humble这标志着ROS 2技术体系已趋成熟同时宣告了ROS 2时代的开启。2024年5月ROS 2的第二个长期支持版本 ROS 2 Jazzy发布这使ROS 2更加稳定、丰满。如图4所示从ROS 2发展的时间轴中大家可以看到ROS 2的生态正在快速迭代发展。图4 ROS 2的发展历程03ROS的特点ROS的核心目标是提高机器人的软件复用率。围绕这个核心目标ROS在自身的设计上也尽量做到了模块化ROS主要由以下四部分组成。通信机制为复杂的机器人系统提供高效、安全的数据分发机制。开发工具为不同场景下的机器人仿真、可视化、开发调试提供易用性工具。应用功能为多种多样的机器人应用提供接口开放、可二次开发的功能包。生态系统联合全球机器人开发者共同建立活跃而繁荣的开源社区与机器人文化。“减少重复造轮子”的核心理念促使ROS社区快速发展和繁荣时至今日ROS已经广泛用于各种机器人的开发如图5所示无论是在机械臂、移动机器人、水下机器人还是在人形机器人、复合机器人应用中都可以看到ROS的身影ROS已经成为机器人领域的普遍标准。图5 ROS社区中多种多样的应用正如汽车制造公司不会从头开始生产所有汽车零部件而是采购来自各专业制造商的轮子、引擎和多媒体系统智能机器人的开发也一样。ROS社区中有丰富的软件模块和工具开发者可以将这些模块整合进一步实现机器人创意和应用。这种方式不仅提高了开发效率还充分利用了社区的集体力量和丰富经验使项目更加成熟和可靠。同时大量开发者将成果分享回社区这种开源共建的合作模式使每位开发者都能从他人的经验和创新中受益。通过站在巨人的肩膀上能加速前行为智能机器人领域的长远进步贡献力量积累宝贵经验和深厚积淀。除此之外ROS还具备以下特点。全球化的社区可以集合全人类的智慧来推进机器人的智能化发展这些智慧的结晶会以应用案例的形式在社区中沉淀下来。开源开放的生态ROS自身及众多应用都是完全开源的公司可以直接使用ROS开发商业化的机器人产品缩短了产品的上市时间。跨平台使用ROS可以跨平台使用在Linux、Windows、嵌入式系统中都可以运行。工业应用支持ROS 2中新增了很多支持工业应用的新特性和新技术促使ROS在更多领域中被使用。ROS 2与ROS 1在学习ROS 2之前你也许听说或使用过ROS 1从名称上看ROS 2不就是第二代ROS吗变化能有多大答案是——非常大01ROS 1的局限性为什么会有ROS 2当然是因为ROS 1有一些问题具体是什么问题呢从ROS发展的历程中大家似乎可以找到答案。ROS最早的设计目标是开发一款PR 2家庭服务机器人如图6所示这款机器人绝大部分时间独立工作为了让他具备足够的能力进行了如下设计。搭载工作站级别的计算平台和各种先进的通信设备不用担心算力问题有足够的实力支持各种复杂的实时运算和应用处理。由于是单兵作战绝大部分通信任务在内部完成因此可以使用有线连接保证了良好的网络连接没有数据丢失或者黑客入侵的风险。虽然最终小批量生产但是由于成本和售价高昂只能用于学术研究。图6 PR 2家庭服务机器人随着ROS的普及应用ROS的机器人类型已经发生了天翻地覆的变化绝大部分机器人不具备PR 2这样的条件原本针对PR 2设计的软件框架就会出现很多问题例如要在资源有限的嵌入式系统中运行。要在有干扰的地方保证通信的可靠性。要做成产品走向市场甚至用在自动驾驶汽车和航天机器人上。……类似的需求导致问题不断涌现因此更加适合各种机器人应用的新一代ROS也就是ROS 2诞生了。02全新的ROS 2ROS 2肩负变革智能机器人时代的历史使命在设计之初就考虑到要满足各种各样机器人应用的需求。1. 多机器人系统未来机器人一定不会是独立的个体机器人和机器人之间也需要通信和协作ROS 2为多机器人系统的应用提供了标准方法和通信机制。2. 跨平台机器人应用场景不同使用的控制平台也会有很大差异例如人形机器人的算力需求一般比物流机器人高。为了让所有机器人都可以运行ROS 2可以跨平台运行于Linux、Windows、macOS、RTOS等操作系统甚至是没有任何系统的微控制器MCU上这样开发者就不用纠结自己的控制器能不能用ROS平台了。3. 实时性机器人运动控制和很多行为策略要求机器人具备实时性例如机器人要可靠地在100ms内发现前方的行人或者稳定地在1ms内完成运动学的解算ROS 2为类似于这样的实时性需求提供了基本保障。4. 网络连接无论在怎样的网络环境下ROS 2都可以尽量保障机器人大量数据的完整性和安全性例如在Wi-Fi信号不好时也要尽力将数据发送过去在有黑客入侵风险的场景下要对数据进行加密解密等。5. 产品化大量机器人已经走向人们的生活未来还会更加深入ROS 2不仅可以用于机器人研发还可以直接搭载在产品中走向消费市场这对ROS 2的稳定性、强壮性提出了很高的要求。6. 项目管理机器人开发是一项复杂的系统工程设计、开发、调试、测试、部署等全流程的项目管理工具和机制也会在ROS 2中体现方便开发者开发和管理机器人产品。满足以上需求并不简单。机器人千差万别开发能够适合尽量多的机器人的系统远比开发一个标准化的手机系统或者计算机系统复杂。ROS开发者面对的选择有两个第一个是在ROS 1的架构之上进行修改和优化类似于把一个盖好的房子打成毛坯房再重新装修。这会受制于原有的格局长远来看并不是最佳选择于是他们选择了第二个方案那就是——推倒重来。所以ROS 2是一个全新的机器人操作系统在借鉴ROS 1成功经验的基础上对系统架构和软件代码进行了重新设计和实现。重新设计了系统架构。ROS 1中所有节点都需要在节点管理器ROS Master的管理下工作一旦Master出现问题系统就面临宕机的风险。而ROS 2实现了真正的分布式不再有Master这个角色借助全新的通信框架DDS、Zenoh为所有节点的通信提供了可靠保障。重新设计了软件API。ROS 1原有的API已经无法满足需求ROS 2结合C最新标准和Python3语言特性设计了更具通用性的API。这种设计导致原有ROS 1的代码无法直接在ROS 2中运行但尽量保留了类似的使用方法同时提供了大量移植说明。优化升级了编译系统。ROS 1中使用的rosbuild和catkin问题很多尤其在针对代码较多的大项目及Python编写的项目时编译、链接经常出错。ROS 2对这些问题进行了优化优化后的编译系统叫作ament和colcon它们提供了更稳定、高效的编译和链接过程减少了出错的可能性并使整个开发流程更加流畅和可维护。03ROS 2与ROS 1的对比1. 系统架构如图7所示在ROS 1中应用层Application Layer里Master节点管理器的角色至关重要所有节点都得听它指挥。它类似于公司的CEO有且只有一个如果CEO突然消失公司肯定会乱成一团。为了增强系统的健壮性和可扩展性ROS 2创新性地摒弃了这一设计转而采用Discovery自发现机制允许节点自主寻找并建立稳定的通信连接从而避免了单点故障的风险。图7 ROS 2与ROS 1的系统架构对比中间层Middleware Layer是ROS封装好的标准通信接口大家写程序的时候会频繁和这些通信接口打交道例如发布一个图像的数据、接收一个雷达的信息客户端会调用底层复杂的驱动和通信协议让开发变得简单明了。在ROS 1中ROS通信依赖底层的TCP和UDP而在ROS 2中通信协议换成了更加复杂也更完善的数据分发服务Data Distribution ServiceDDS系统通信机制。底层是系统层OS Layer即可以将ROS安装在哪些操作系统上ROS 1主要安装在Linux上ROS 2的可选项很多Linux、Windows、macOS、RTOS都可以。2. 通信系统大家可能会思考为什么ROS 2要更换成DDS系统通信机制DDS是什么ROS 1是基于TCP/UDP的通信系统由于自身机制问题在开发中很容易出现延迟、丢数据、无法加密等问题所以ROS 2引入了更复杂也更完善的DDS系统通信机制。DDS是物联网中广泛应用的一种系统通信机制类似于大家常听说的5G通信DDS是一个国际标准能够实现该标准的软件系统并不是唯一的所以大家可以选择多个厂家提供的DDS系统通信机制例如OpenSplice、FastRTPS等每家的性能不同适用的场景也不同。这就带来一个问题每个DDS厂家的软件接口不一样如果按照某一家的接口写完了程序想要切换其他厂家的DDS不是要重新写代码吗这当然不符合ROS提高软件复用率的目标。为了解决这个问题如图8所示ROS 2中设计了一个ROS Middleware简称RMW也就是制定一个标准接口例如如何发送数据、如何接收数据、数据的各种属性如何配置等等。如果厂家想接入ROS社区就需要按照这个标准写一个适配的接口把自家的DDS移植过来这样就把问题交给了最熟悉自家DDS的厂商。对于用户来讲某一个DDS用得“不顺手”只要安装另一个然后做简单的配置不需要更改应用程序就可以轻松更换底层的通信系统。图8 ROS 2系统架构概览总之DDS的加入让ROS 2系统更加稳定、更加灵活也更加复杂。开发者不用再纠结ROS的通信系统是否稳定、该如何优化等问题可以把更多精力放在如何实现机器人应用功能上。3. 核心概念ROS 1应用得非常广泛全球有几百万名开发者大家已经熟悉了ROS 1的开发方式以及其中的很多概念。ROS 2保留了如下概念便于开发者从ROS 1迁移到ROS 2。工作空间Workspace开发过程的大本营是放置各种开发文件的地方。功能包Package功能源码的聚集地用于组织某一机器人功能。节点Node机器人的工作细胞是代码编译生成的一个可执行文件。话题Topic节点间传递数据的桥梁周期性传递各功能之间的信息。服务Service节点间的“你问我答”用于某些机器人功能和参数的配置。通信接口Interface数据传递的标准结构规范了机器人的各种数据形态。参数Parameter机器人系统的全局字典可定义或查询机器人的配置参数。动作Action完整行为的流程管理控制机器人完成某些动作。分布式通信Distributed Communication多计算平台的任务分配实现快速组网。DDSData Distribution Service机器人的神经网络完成数据的高效安全传送。如果大家熟悉ROS 1那么对以上概念应该不陌生在ROS 2中这些概念依然存在意义也几乎一致。如果大家不熟悉或者没有学习过ROS也没关系第2章会讲解这些概念的含义和使用方法。4. 编码方式再来看看代码的编写方式ROS 1和ROS 2实现的核心API对比如下。# 引入Python API接口库import rclpy # ROS 2import rospy # ROS 1 # 创建Topic发布者对象self.pub self.create_publisher(String, chatter, 10) # ROS 2pub rospy.Publisher(chatter, String, queue_size10) # ROS 1 # 创建Topic订阅者对象self.sub self.create_subscription(String, chatter, self.listener_callback, 10) # ROS 2rospy.Subscriber(chatter, String, listener_callback) # ROS 1 # 创建Service服务器对象self.srv self.create_service(AddTwoInts, add_two_ints, self.adder_callback) # ROS 2 srv rospy.Service(add_two_ints, AddTwoInts, adder_callback) # ROS 1 # 创建Service客户端对象self.client self.create_client(AddTwoInts, add_two_ints) # ROS 2client rospy.ServiceProxy(add_two_ints, AddTwoInts) # ROS 1 # 输出日志信息self.get_logger().info(Publishing: %s % msg.data) # ROS 2rospy.loginfo(Publishing: %s , msg.data) # ROS 1ROS 2重新定义了API函数接口但使用方法与ROS 1相差不大。此外ROS 2会用到更多面向对象的实现方法和语言特性从编程语言的角度来讲难度确实会提高不过当大家迈过这道坎后就会发现编写的程序更具备可读性和可移植性也更接近真实企业中机器人软件开发的过程。具体如何编码请大家少安毋躁不要搬来一本大部头的编程语言教程一页一页学习更好的方式是在项目开发的过程中一边用一边学本书后续章节也会带领大家一步一步操作。5. 命令行工具命令行是ROS开发中最为常用的一种工具如图9所示。图9 ROS 2命令行工具示例与ROS 1相比ROS 2对命令行做了大幅集成所有命令都集成在一个ROS 2的主命令中例如“ros2 run”表示启动某个节点“ros2 topic”表示话题相关的功能。如果大家初次上手就选择了ROS 2那么先对其有一个大致印象即可想要深入理解可以上网了解更多相关内容。------------END------------C语言中的volatile到底有什么用嵌入式多线程从能跑到稳定的关键一步!