利用MATLAB和Simulink编程ROS和ROS2机器人
概述
本次网络研讨会将讨论MathWorks的ROS和ROS 2.0支持,该支持提供了一个连接MATLAB和Simulink与ROS网络的实时接口。使用此支持的好处包括:
- 从任何连接到ROS和ROS 2.0MATLAB和Simulink支持的操作系统
- 利用MathWorks工具箱中与以下领域的算法相关的内置功能:控制系统、计算机视觉、机器学习、信号处理和状态机设计
- 从MATLAB和Simulink中设计的算法自动生成c++代码,这些算法可以部署为独立的ROS节点。
突出了
通过几个例子,我们将介绍:
- 基于MATLAB和Simulink的ROS数据分析
- 算法原型和开发使用ROS和ROS 2网络连接到外部模拟器和硬件
- ROS节点生成和部署
关于主讲人
YJ Lim是MathWorks机器人和自主系统的高级技术产品经理。他在机器人和自主系统领域有超过20年的经验。Lim在MathWorks的职责包括机器人和自主系统的长期战略开发和产品管理。在加入MathWorks之前,Lim曾在位于马萨诸塞州沃尔瑟姆的Vecna Robotics工作,担任高级项目经理,专注于Vecna的先进机器人系统开发。在加入Vecna之前,他曾担任Hstar Technologies的首席创新官,这是一家专注于敏捷移动机器人平台和医疗服务机器人系统的初创公司。他曾与政府机构合作,并在先进机器人系统研究方面的政府工作小组任职。Lim还领导了Energid Technologies的开发团队,该公司为先进的机器人、机器视觉和仿真应用程序提供工程服务和产品,用于机器人软件开发。2022世界杯八强谁会赢?Lim在伦斯勒理工学院(RPI)获得机械工程博士学位,在韩国科学技术院(KAIST)获得硕士学位。
穆拉特·贝尔格(Murat Belge)是MathWorks的咨询工程师。他是ROS Toolbox的技术团队负责人。他在MathWorks工作超过15年,涉及多个领域,包括嵌入式系统的代码生成、网络协议、中间件表示和集成、物联网、设备驱动程序抽象和集成、针对嵌入式Linux系统、嵌入式视觉和电机控制。他的经验包括为SIMD处理器开发嵌入式视觉算法和为数字用户线路开发时域反射诊断系统。Belge在美国东北大学获得博士学位,在土耳其比尔肯特大学获得硕士学位和学士学位,专业均为电气工程。
记录日期:2020年9月17日
你好,每个人。感谢您的加入,欢迎参加本次使用MATLAB和Simulink为ROS机器人编程的网络研讨会。
你好。我是YJ Lim,是The MathWorks机器人和自主系统的技术产品经理。我和穆拉特·比尔格在一起。他是The MathWorks ROS工具箱的开发负责人。
工业制造模式正在从大规模生产转向大规模定制。自主机器人系统变得更加复杂。自1961年第一台工业机器人投入使用以来,已有超过300万台机器人投入生产车间。工业机器人系统面向工厂的大规模产品生产,机器人注定要在受控环境中进行重复和单独的工作。2022世界杯八强谁会赢?
目前的趋势是机器人系统必须能够在更复杂和较少控制的环境中解决问题。协作机器人(cobots)现在可以用于更多的自主任务,因为它被设计得更多功能。协作机器人使用来自环境的传感器输入进行控制和决策。
为此,我们需要更加自主和智能的机器人系统。在过去几年里,配备了自主算法和感知的人工智能机器人正在起步。现在,机器人从环境中收集更多的数据,并从交互中学习。在接下来的几年里,我们将看到基于人工智能的机器人的持续增长。
自治系统可以混合使用多个同步处理以实现更精确的控制,也可以使用异步接口。自主系统控制可能需要并行或分布式处理,运行在多核或GPU上,用于高分辨率和多速率传感器和感知处理。它产生了自治系统中多自由度执行器的协调运动。
目前已经出现了一些机器人软件框架,为自主系统的分布式系统的设计和开发提供了一些解决方案。ROS已被用于开发大型自主系统。ROS代表机器人操作系统,但不在操作系统中。它是一种面向自治分布式系统的中间件。在核心,ROS已经很好地建立了用于进程间消息传递和分布式计算的工具。在较高的层次上,ROS有一个打包和构建管理系统,它不仅由核心ROS开发人员使用,而且还由用户社区使用。世界杯预选赛小组名单
ROS越来越受欢迎。ROS用户社区非常重要,因为他们正世界杯预选赛小组名单在制作与硬件对话的应用程序包驱动程序,与其他软件包的接口,以及用于感知、运动规划等任务的机器人专用工具。经过多年从行业参与者那里收集需求。ROS 2是ROS 1的新版本,已发布用于研究和生产。
一些关键的新事物是对小型嵌入式和实时系统的支持,以及消息传递中的服务质量,这是由数据分发服务(DDS)实现的,DDS是行业中普遍存在的标准。目前社区世界杯预选赛小组名单正在逐渐迁移到ROS。利用ROS可以有效地开发自治系统。
所以今天,我将从MATLAB和Simulink中介绍ROS能力开始。然后我将分享一些来自我们客户的用户案例。然后用MATLAB和Simulink讨论ROS和ROS 2的工作流程。然后Murat将向您展示一些使用MATLAB和Simulink的ROS应用实例。
让我深入研究一下MATLAB和Simulink中的ROS能力。您可以从MATLAB和Simulink连接ROS和ROS 2,用于机器人和自主系统的设计和开发。通过MATLAB和Simulink到现有ROS网络的连接,您可以探索可用的主题、服务和操作。这还允许您向ROS网络上的任何模拟器、硬件或软件节点发送命令并从其接收数据。MATLAB和Simulink还提供了一些实用程序来处理一些常见的传感器数据类型,如激光扫描、图像和3-D点云。
如果您正在使用来自rosbag文件的记录数据,我们的工具箱允许您读取这些文件进行后处理或回放数据作为模拟输入。在这个初始测试之后,您可以从您的设计中自动生成基于c++的可执行ROS节点。这些生成的节点可以与ROS和ROS 2构建的系统集成,因此它们可以在不依赖MATLAB和Simulink的目标系统上运行。
那么我们今天提供了哪些ROS功能呢?正如您所看到的,对MATLAB和Simulink工作流都有支持,尽管它们并不完全相同。一个关键的区别是代码生成。它目前只能在Simulink模型中工作,尽管我们有一些变通方法和未来的计划。ROS 2接口相当轻量级,但它涵盖了最常见的用户用例。你可以用MATLAB和Simulink中的ROS 2进行发布和替换。您还可以从Simulink模型生成独立的ROS 2节点。使用ROS 1和ROS 2,您可以生成自己的自定义消息。
在R2020b发行版中,我们支持所有主要操作系统上的ROS 1和ROS 2。在2020b发布的时刻,我们分别支持旋律LTS ROS 1和快速LTS ROS 2。我们复制了ROS命令行工具,因此如果您已经熟悉开源ROS,您可以轻松采用MATLAB API函数。
在未来的版本中,从MATLAB生成ROS节点是我们的下一个优先级。有了这个特性,您可以并行运行用MATLAB编写的多个节点。我们也正在努力满足ROS 1和ROS 2之间的支持。我们还计划支持ROS1 noedic,这是ROS1 LTS的最终版本。
现在让我来介绍几个来自我们客户的用户故事。Clearpath Robotics的工程师使用MATLAB来加快公司OTTO生产线的算法开发,并推进机器人研究。来自Clearpath的团队需要分析和可视化大型复杂的数据集。他们想要一个补充ROS功能的工具,使其更容易处理和分析ROS数据,包括实时流数据和在ROS日志文件中捕获的数据。
Clearpath工程师使用具有ROS功能的MATLAB来创建算法原型,并为他们的机器人研究和开发分析和可视化数据。
这是另一个来自Voyage的用户故事。Voyage正在为自动驾驶汽车开发一种控制器,以遵循目标速度,并与障碍物保持安全距离。Voyage的工程师使用Simulink设计了纵向模型预测控制器,并基于ROS支持导入MATLAB的实验数据对参数进行了调整。他们将控制器部署为ROS节点。
下面我用MATLAB和Simulink介绍ROS和ROS 2的工作流程。ROS是开发复杂智能系统的一种使能技术。在给定的系统设计要求下,ROS提供了一个设计、模拟、原型机器人应用的通用框架。使用ROS,您可以分析日志数据,使用各种手写代码设计算法,并可视化和调试结果。不过,您可能需要为生产重写源代码。
通过将MATLAB和Simulink与ROS连接起来,它允许您执行具有需求可追溯性的系统级仿真。它还使用MATLAB和Simulink为自主系统提供的许多工具,提供了快速和迭代的设计过程。您还可以为生产生成可验证的代码。
现在,让我们看看如何将ROS与MATLAB和Simulink连接起来。在右边,这是传统的支持ros的系统的样子。有许多支持ros的模拟器和硬件。通过ROS网络,它们可以与节点通信,从而实现自治、可视化等等。在左边,MATLAB和Simulink为自主系统开发提供了一个工具。对于自主系统开发,系统应该具有感知、规划和控制的功能组件。现在,我们有了从MATLAB和Simulink连接ROS的紧密桥梁。
基本上有三个工作流程。首先是数据分析和回放。您可以记录来自仿真和硬件的数据,然后将它们带入MATLAB和Simulink环境中进行离线设计任务。接下来是桌面模拟。这将是ROS和MATLAB实例之间的实时连接,用于算法开发。最后,部署—您可能用于原型的相同实现可以自动生成为独立的ROS节点,我们不再需要MATLAB来运行。
我想指出的是,除了用MATLAB和Simulink来桥接ROS,您还可以用MATLAB和Simulink工具来补充传统的ROS解决方案。
在离线数据分析工作流程中,典型的用户案例是从模拟器或硬件导入数据,以便更好地理解目标系统,或者可能用于原型算法。例如,你可以读取一批图像进行标记和训练神经网络。
您可以从时间戳数据中提取特定的主题,以同步和可视化它们。读取rosbag文件和处理传感器专用ROS消息类型的能力允许您将所有设计数据带入MATLAB和Simulink,而不需要大量的预处理代码。
对于符号检测的例子,您可以使用计算机视觉和深度学习来自动学习图像特征。
在这里,您可以标记图像主题以检测符号。您可以使用激光扫描和从rosbag文件导入的里程计数据来创建环境地图。在本例中,您可以使用导航工具箱中的SLAM Map Builder应用程序来使用激光雷达扫描主题来映射环境。
第二个工作流程是ROS网络与通信。您的自主算法可以通过将ROS网络连接到外部模拟器或硬件来原型化或评估。
在这里,我们再次展示了一个跟随机器人的标志,它在凉亭模拟器上运行,循环中有一个Simulink。在Simulink中运行信号检测算法。它可能是带有颜色检测的简单图像处理,也可能是你在上一张幻灯片中看到的更高级的深度学习算法。速度指令通过ROS网络发布控制机器人。我们有一个虚拟机映像,您可以下载。它有一个ROS 1, ROS 2安装有几个例子,你可以尝试一下。MATLAB和Simulink可以使桌面模拟更容易与ROS,以及许多其他设计工具,以测试和验证新的机器人算法。
让我们来看看一个简单的MATLAB和ROS接口工作流程。在MATLAB中,您可以创建一个ROS网络,并参与现有的ROS网络。然后,您可以收集数据,发送和接收ROS消息。您的算法可以被处理,以有效地调度MATLAB代码的执行。然后发布你的命令来控制你的机器人。然后就可以可视化模拟结果了。
类似地,在Simulink中,您需要设置一些配置来建立与ROS的连接。然后你有一个控制回路,它通过网络持续地感知数据,进行某种算法处理,然后通过ROS网络发送命令或控制信号。
这里有一件事需要注意——你可以看到我突出显示的这些块,其中包括ROS。这些块是ROS块,来自ROS工具箱,用于读取和数据、订阅主题、创建消息以及发布ROS主题。这些块允许您无需编写任何代码就可以与ROS通信。
最后,生成用于部署的节点。核查是一项重要任务。你的机器人算法需要通过仿真或机器人硬件进行评估。您可以手动将算法移植到目标系统上。或者,您也可以通过生成ROS节点自动执行此过程。这可以加快开发过程,并消除手动实现错误。
从Simulink生成ROS节点后,有几种方法可以使用它。例如,在Simulink中,您可以使用外部模式就地调优生成的ROS节点,即使代码本身正在目标计算机上运行。当您还在设计算法以直接在Simulink模型中优化参数和可视化数据时,它可以是一个很好的调试工具。
现在我想让穆拉特用MATLAB和Simulink给大家讲解一些ROS 1和ROS 2的应用例子。
谢谢,YJ。你好,每个人。我是Murat Belge, ROS Toolbox的产品主管。现在我们已经很好地了解了ROS Toolbox提供的功能。让我们看几个应用程序示例。
我要展示的第一个应用例子是这个跟随符号的机器人。这个名为turtlebot2的机器人将识别摆出的标志,并跟随它们到达指定的目的地。我们将在Simulink中开发路标导航算法,并利用ROS2网络进行通信。我们将使用Gazebo来模拟TurtleBot 3和环境。控制机器人的Simulink模型将接收Turtlebot 3发布的图像和里程测量数据,计算速度评论,并将它们发送回Turtlebot 3。
注意,这个设置说明了一个强大的概念。我们可以开发我们的导航算法,测试它们,完全在模拟环境中验证它。因为我们是在Gazebo创造的虚拟环境中移动,所以我们可以犯错误。例如,机器人可以撞到墙壁。这在现实生活中可能是灾难性的,但这是一个改善模拟导航算法的机会。
一旦我们对算法按预期工作感到满意,我们就可以轻松地将Simulink模型部署到独立的ROS节点中,以便在实际硬件上运行。在继续讨论设置和运行应用程序示例的详细步骤之前,我将快速展示最终结果。正如你所看到的,机器人会跟随放置在房间里的方向标志,直到它识别出一个停止标志。
现在让我们详细了解工作流程步骤。你在右边看到的是运行在Ubuntu虚拟机中的Gazebo模拟器。此VM是作为ROS工具箱的附加组件提供的。在凉亭模拟器的主窗口,你可以看到环境和TurtleBot3机器人。
现在在MATLAB中,我将设置一个名为ROS_DOMain_ID的环境变量。ROS 2使用DDS作为传输层。DDS支持基于一个称为domain ID的数字对网络进行物理分割。为了相互交互,两个ROS 2节点需要位于相同的DDS域中。
在本例中,我们设置Gazebo模拟器以创建ID为25的DDS域。首先,让我们在MATLAB中创建一个ROS 2节点。注意,我们指定25作为域ID。我们现在可以通过这个MATLAB节点与Gazebo中运行的机器人对话,并使用ROS MATLAB接口动态发现发布者、订阅者等。您可以使用MATLAB中的ROS 2 topic list命令获取ROS 2网络中可用主题的列表。
让我们深入研究测程的话题。首先,我们创建一个订阅者来接收来自/odom topic的消息。然后我们可以访问最新的消息,并显示到xyz坐标的机器人的位置。你也可以给机器人发送评论。为此,我们创建了一个速度发布器。发布者还提供了类型几何消息的空消息。我们可以将角速度设置为0.75弧度/秒,然后观察我们的机器人围绕z轴旋转。如你所见,机器人开始在凉亭模拟器中移动。
要停止机器人,只需将角速度重置为零。使用MATLAB命令行用户界面,您可以与机器人交互工作,以获得消息的感觉,可视化,数据,并为导航做一个快速和脏的原型。
现在,让我们来看看Simulink方面的事情。作为2020b版本的一部分,ROS工具箱支持将Simulink模型部署为独立的c++ ROS 2节点。由于本应用程序示例的目标之一是将导航文档部署为独立的ROS节点,因此我们将使用Simulink来开发算法。左边是我们的Simulink模型。它使用相机图像和里程计信息作为输入。
我们有一个图像处理子系统来识别和跟踪这些标志。在这里,蓝色标志是左转,绿色标志是右转,红色标志是停车。在这个例子中,我们使用简单的斑点检测来提取颜色,从而提取方向信息。让我们运行Simulink模型。如您所见,最后两个值正在不断更新。您也可以直接进入Linux终端查看消息。首先,执行从ROS网络接收消息所需的设置任务。然后在终端上直接读取Simulink模型发布的检测到的blob信息。
通过查看状态流图,您可以很容易地分析您的模型正在做什么。在Simulink环境中调试算法时间要比在c++代码中调试简单得多。在这里,我们看到一个机器人成功地到达了停止标志。一切似乎都在按计划进行。如何将Simulink模型部署为运行在VM上的ROS节点?
打开Simulink工具栏中的“应用程序”选项卡,单击“机器人操作系统”。选择ROS 2作为目标。这会打开一个名为Robot的新选项卡。我们转到这个新选项卡,并根据需要更改硬件模拟配置。然后单击Build按钮,从我们的Simulink模型生成代码。在这里,您可以看到诊断视图已打开。它基本上发布了代码生成的各个阶段。生成代码。在源文件夹中,我们有一个配置为与ROS构建系统一起工作的完整ROS包。
现在,我们将这个包带到ROS 2工作空间并打开到VM。我们打开终端窗口,使用Colcon Builder构建ROS包。然后可以在没有MATLAB或Simulink的情况下运行独立节点。
当这个节点在VM中运行时,我们可以启动一个配套的Simulink模型来实现可视化。我们可以通过接收发布在图像主题上的消息来显示机器人所看到的内容。我们还可以查看最后的注释,并根据需要启动和停止机器人。
当我们在VM中构建ROS节点时,我们可以很容易地将ROS节点加载到实际的机器人中。我们在仿真环境中所做的工作可以扩展到实际硬件中。这就是ROS设计框架的美妙之处。
下面是我们的第二个应用示例——自动代客泊车。本例有四组子例,分别用MATLAB (ROS或ROS 2)和Simulink (ROS或ROS 2)进行区分。自动停车是一个具有挑战性的问题,有各种各样的方法来解决这个问题。本例演示了一种实现自动停车系统的方法。导航问题需要几个核心模块,例如行为规划器和路径规划器、控制器和车辆模型。这些核心模块中的每一个都表示为ROS网络上的独立节点。节点之间通过标准的发布/订阅消息进行通信。
为简单起见,本例主要讨论规划控制和车辆建模。我们使用预先记录的数据来代替定位信息。
在Simulink模型中有四个核心模块——行为规划器、运动规划器、控制器和简化的车辆模型。有一个反馈回路,从车辆模型到控制器,通过行为和运动规划者。行为规划器从ROS 2网络读取当前车辆代码。它计算路径点并检查车辆是否达到最终姿态。
运动规划器通过环境地图完成一个可行的路径。期望的轨迹被发送到控制器,控制器计算转向和速度评论来移动车辆。
单个泊车代客模型可以分解为四个单独的模型,以方便作为分布式系统部署。在各个模块之间的Simulink信号线被ROS发布和订阅块所取代。例如,运动规划器通过ROS网络计算并将所需的轨迹发送给控制器。
然后,我们可以将行为规划器、运动规划器和控制器部署为运行实际车辆的独立ROS节点,并用实际车辆动力学替换模拟动力学。
总结一下,这里有一些关键的要点。ROS工具箱将MATLAB和Simulink连接到ROS和ROS 2。ROS工具箱支持数据分析、桌面原型和部署工作流。您可以通过将传统ROS与The MathWorks工具相结合来补充它。ROS拥有丰富的软件基础设施和充满活力的用户社区。世界杯预选赛小组名单MATLAB和Simulink为特定于应用程序的垂直领域提供了丰富的工具,并具有区分器,如Stateflow和V&Vtools。
要了解更多关于作为机器人工具的MathWorks和ROS功能的信息,请访问我们的产品网页The MathWorks.com,并下载试用版以查看参考示例。我们有一个机器人发现页面,用户故事和更多信息的视频。不要忘记访问我们的MATLAB和Simulink机器人GitHub。谢谢大家。不要忘记访问MathWorks.com/robotics网页获取信息和资源。
下载代码和文件
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。