机器人编程入门编程软件是什么

排名第一的答案好奇怪现在工業自动化行业上还有需要用户自己做单片机编程的机器人编程吗?

手机也可以访问有视频教程链接,资料非常全仿真软件可以30天免费試用。

略有任何编程基础的人一般四天可以初步掌握。欧系编程都差不多学会欧系,三天可以上手日系

别人问如何学好现代汉语,伱叫人家读尚书肯定不是正确的答案。


“因为我是做Robocon而不是做工业的所以我只能根据在队伍里遇到的情况来给你建议了。”

不会就是鈈会工业机器人编程你摸都没摸过,能给已经实习的人什么好答案

}

机器人编程是一种机器其传感器和机械组件连接到电子板或CPU并由其控制。它们处理信息并将改变(控制)应用于物理世界机器人编程大多是自主的,可以替代或帮助囚类完成从日常工作到非常危险的任务

机器人编程在工厂和农场中用于执行繁重或重复的任务。它们被用来探索行星和海洋、清洁房屋并帮助老年人。研究人员和工程师也在尝试在灾难情况医学分析和手术中??使用机器人编程。自动驾驶汽车也是机器人编程!

机器囚编程的创建需要多个步骤:零件的机械布局、传感器和驱动器的设计以及机器人编程软件的开发通常,在工厂中完成原型构建软件茬第一批工作原型上开发和测试。

涉及三个步骤首先,可以使用现成的驱动程序运行电机和传感器然后开发基本构建块,以便移动机器人编程并读取其传感器最后,使用它来开发智能复杂的软件例程,以创建您想要的行为

  • 什么是最好的机器人编程编程语言?

在机器人编程技术中使用时两种主要的编程语言是最好的:C++Python,它们通常一起使用因为每种语言都有利有弊。C++用于控制循环图像处理和低级硬件接口。Python用于处理高级行为并快速开发测试或概念证明

  • 如何使用JAVA编程机器人编程?

假设您能够在机器人编程上运行Java虚拟机则可鉯使用套接字或RPC将Java代码与电机和传感器驱动程序连接。直接用Java编写设备驱动程序可能比其他语言(如C++)更难因此最好专注于开发高级行為!

机器人编程工程是一个广泛的工程领域,专注于整个机器人编程系统的设计和集成因此,它需要机械电子,软件和控制系统的知識与每个领域的专业工程师交互,以满足给定机器人编程的要求和目标

  • 机器人编程过程自动化(RPA)和机器人编程编程有什么区别?

这兩个领域都开发软件以帮助或替换人类但RPA的目标通常是由人在电脑前完成,例如发送电子邮件提交收据或浏览网站。机器人编程技术妀为在现实世界中执行任务例如清洁、驾驶、建造或制造。

  • 谁发明了世界上第一个机器人编程

第一个移动机器人编程是由Charles Rosen和Nils Nilsson领导的团隊于1966年在斯坦福研究所创建的。仅使用24位CPU和196 KB RAM它可以在避开障碍物的同时自动在办公室中移动。由于它在移动时震动他们的创造者称它為Shakey。


这是一个很多机器人编程学生/专家/工程师在职业生涯初期中至少会问过一次的问题很遗憾,这也是一个没有简单答案的问题在这篇文章中,将介绍机器人编程技术中使用的5大最流行的编程语言并将讨论它们的优点和缺点,以及使用它们的原因与不适用场合

这实際上是一个非常合理的问题。毕竟如果事实证明你永远不会使用它,那么投入大量时间和精力来学习新的编程语言有什么意义呢如果您是刚开始从事机器人编程方向的学生/专家/工程师,那么希望学习实际上对职业有用的编程语言

为什么“它取决于”是一个无用的答案? 不幸的是如果你问“什么是最好的机器人编程编程语言?”你永远不会得到一个简单的答案。整个房间的机器人编程专业人士(或Stack OverflowQuora,TrossenReddit或Research Gate等论坛)。

电子工程师将给出工业机器人编程技术人员的不同答案计算机视觉程序员将提供与认知机器人编程专家不同的答案。每个人都不同意什么是“最好的编程语言”最后,大多数人都会同意的答案是“它取决于”对于试图决定哪个的新机器人编程来说,这是一个相当无用的答案首先要学习的语言。即使这是最现实的答案因为它取决于你想要开发的应用程序类型以及你正在使用的系統。

我应该先学习哪种编程语言 最好问一下,您应该首先学习哪种编程语言你仍然会得到不同的意见,但很多机器人编程专家可以就主要语言达成一致

正如我们在帖子中讨论的关于必要的机器人编程技能一样,对于机器人编程专家来说最重要的是开发“编程思维模式”而不是精通某种特定语言。在许多方面您首先学习哪种编程语言并不重要。您学习的每种语言都可以提高您对编程思维的熟练程度并且可以在需要时更轻松地学习任何新语言。

C#是Microsoft提供的专有编程语言我在这里包含C#/ .NET主要是??因为Microsoft Robotics Developer Studio使用它作为主要语言。如果您咑算使用这个系统您可能不得不使用C#。但是首先学习C / C ++可能是长期开发编码技能的好选择。

5. MATLAB MATLAB及其开源亲属如Octave,在一些机器人编程工程师中非常受欢迎用于分析数据和开发控制系统。还有一个非常受欢迎的MATLAB 机器人编程工具箱我认识那些仅使用MATLAB开发整个机器人编程系統的人。如果您想分析数据生成高级图形或实现控制系统,您可能需要学习MATLAB


让我们面对现实,机器囚编程很酷它们有一天会出现在世界各地,希望到时它们会对其可怜的柔软肉质创造者(也就是)表示同情并帮助我们建立一个充满叻充足空间的乌托邦。我当然是开玩笑但开玩笑。

我希望能够对这个问题产生一些小影响去年我参加了一个最后我建立了一个基于Python的機器人编程模拟器,这使我能够在一个简单的移动可编程机器人编程上练习控制理论 。

在本文中我将展示如何使用Python机器人编程框架开發控制软件,描述我为模拟机器人编程开发的控制方案说明它如何与环境相互作用并实现其目标,并讨论一些我在沿途遇到的机器人编程编程的基本挑战

为了学习初学者的机器人编程编程教程,你应该对两件事有基本的了解:

  • 数学 - 我们将使用一些三角函数和向量
  • Python-Python是最流荇的基本机器人编程编程语言之一 - 我们将使用基本的Python库和函数

这里显示的代码片段只是整个模拟器的一部分它依赖于类和接口,因此为叻直接读取代码您可能需要一些Python和经验。

最后可帮助您更好地学习本教程的可选主题是了解状态机是什么以及范围传感器和编码器如哬工作。

所有机器人编程技术的根本挑战是:不可能永远知道环境的真实状态機器人编程控制软件只能根据传感器返回的测量值来猜测现实世界的状态。它只能通过生成控制信号来尝试改变现实世界的状态

机器人編程控制软件只能根据传感器返回的测量值来猜测现实世界的状态。

因此控制设计的第一步是提出现实世界的抽象,称为模型用它来解释我们的传感器读数并做出决策。只要现实世界按照模型的假设行事我们就可以做出好的猜测并施加控制。然而一旦现实世界偏离這些假设,我们将无法做出正确的猜测并且将失去控制权。通常一旦控制失去,就永远无法恢复(除非一些仁慈的外力恢复它。)

這是机器人编程编程如此困难的关键原因之一我们经常在实验室里看到最新研究机器人编程的视频,表现出灵巧导航或团队合作的奇妙成就,我们很想问:“为什么这不适用于现实世界”好吧,下次你看到这样的视频看看实验室环境的高度控制。在大多数情况下呮要环境条件保持在其内部模型的狭窄范围内,这些机器人编程只能执行这些令人印象深刻的任务因此,机器人编程技术发展的一个关鍵是开发更复杂更灵活,更健壮的模型 - 并且所述进步受到可用计算资源的限制

推动机器人编程技术的一个关键是开发更复杂,更灵活更健壮的模型。

[旁注:哲学家和心理学家都会注意到生物也会依赖于他们自己对感官告诉他们的内在感知。机器人编程技术的许多进步来自于观察生物并观察它们对意外刺激的反应想一想。你的世界内部模型是什么它与蚂蚁和鱼的不同?(希望如此)然而,就像螞蚁和鱼一样它可能会过度简化世界的某些现实。当你对世界的假设不正确时它会让你面临失去控制权的风险。有时候我们称之为“危险”就像我们的小机器人编程在未知宇宙中挣扎求生存一样,我们所有人也是如此这是机器人编程专家的强大见解。]

我构建的模拟器是用编写的非常巧妙地称为Sobot Rimulator。它没有很多花里胡哨的东西,但是它可以很好地完成一件事:提供一个精确的移动机器人编程模拟并为一个有抱负的机器人编程专家提供一个简单的机器人编程软件编程框架。虽然拥有一个真正的机器人编程总是更好但一个好的Python机器人编程模拟器更容易获得,是一个很好的起点

在现实世界的机器人编程中,生成控制信号的软件(“控制器”)需要以非常高的速度运行并进行复杂的计算这会影响最佳使用哪种机器人编程编程语言的选择:通常,C ++用于这些场景但在更简單的机器人编程应用程序中,Python是执行速度和易于开发和测试之间的非常好的折衷

我编写的软件模拟了一个名为的真实研究机器人编程,泹它可以适应各种尺寸和传感器的移动机器人编程由于我尝试将模拟器编程为尽可能与真实机器人编程的功能相似,因此控制逻辑可以加载到真正的Khepera机器人编程中只需最少的重构,并且它将执行与模拟机器人编程相同的操作实施的具体功能参考Khepera III,但它们可以很容易地適应新的Khepera IV

换句话说,编程模拟机器人编程类似于编程真实机器人编程如果模拟器可以用于开发和评估不同的控制软件方法,那么这一點至关重要

在本教程中,我将描述Sobot Rimulator v1.0.0附带的机器人编程控制软件体系结构并提供Python源代码的片段(为清晰起见略作修改)。但是我鼓励伱潜入源头并乱七八糟。模拟器已经分叉并用于控制不同的移动机器人编程包括来自的Roomba2 。同样请随意分叉项目并进行改进。

机器人编程的控制逻辑受限于这些Python类/文件:

  • models/supervisor.py - 这个类负责机器人编程周围的模拟世界和机器人编程本身之间的相互作用它演变了我们的机器人编程狀态机并触发控制器以计算所需的行为。
  • 目录中的models/controllers文件 - 这些类在给定已知环境状态的情况下实现机器人编程的不同行为特别地,根据状態机选择特定控制器

与人一样,机器人编程需要生活中的目标我们的软件控制这个机器人编程的目标将非常简单:它将尝试进入预定嘚目标点。这通常是任何移动机器人编程应具备的基本功能从自动驾驶汽车到机器人编程吸尘器。在激活机器人编程之前目标的坐标被编程到控制软件中,但是可以从监视机器人编程运动的附加Python应用程序生成例如,想想它通过多个航路点开车

然而,使问题复杂化的昰机器人编程的环境可能充满障碍物。机器人编程在飞往目标的途中不得与障碍物发生碰撞因此,如果机器人编程遇到障碍物它将鈈得不找到它的方式,以便它可以继续前往目标

每个机器人编程都有不同的功能和控制问题。让我们熟悉我们的模拟可编程机器人编程

首先要注意的是,在本指南中我们的机器人编程将成为一个自动移动机器人编程。这意味着它将在空间中自由移动并且它将在其自巳的控制下这样做。这与例如遥控机器人编程(不是自主的)或工厂机器人编程臂(不是移动的)形成对比我们的机器人编程必须自己弄清楚如何实现其目标并在其环境中生存。对于新手机器人编程程序员来说这被证明是一项令人惊讶的难度挑战。

机器人编程可以通过許多不同的方式来监控其环境这些可以包括接近传感器,光传感器保险杠,相机等等此外,机器人编程可以与外部传感器通信这些传感器为他们提供他们自己无法直接观察的信息。

我们的参考机器人编程配备了9个红外传感器 - 较新的型号有8 个红外传感器和5个超声波接菦传感器 - 在每个方向的“裙边”排列有更多的传感器面向机器人编程的前部而不是后部,因为机器人编程通常更重要的是知道它前面的昰什么

除了接近传感器,机器人编程还有一跟踪车轮运动的车轮定位器这些允许您跟踪每个车轮产生的转数,一个车轮的一个完整嘚向前转弯是2,765个刻度向后反转向后计数,减少滴答计数而不是增加它您不必担心本教程中的特定数字,因为我们将编写的软件使用以米为单位表示的行进距离稍后我将向您展示如何使用简单的Python函数从ticks计算它。

一些机器人编程在腿上移动有些像滚球一样滚动。有些人甚至像蛇一样滑行

我们的机器人编程是机器人编程,这意味着它在两个轮子上滚动当两个车轮以相同的速度转弯时,机器人编程以直線移动当车轮以不同的速度移动时,机器人编程转动因此,控制该机器人编程的运动归结为适当地控制这两个车轮中的每一个转动的速率

在Sobot Rimulator中,机器人编程“计算机”和(模拟)物理世界之间的分离由文件体现该文件robot_supervisor_interface.py定义了与“真实机器人编程”传感器和电机交互嘚整个API:

该接口内部使用机器人编程对象,该对象提供来自传感器的数据以及移动电机或车轮的可能性如果你想创建一个不同的机器人編程,你只需要提供一个可以被同一个界面使用的不同的Python机器人编程类其余的代码(控制器,管理程序和模拟器)将开箱即用!

正如您茬现实世界中使用真实机器人编程而不过多关注所涉及的物理定律那样您可以忽略机器人编程的模拟方式,直接跳到控制器软件的编程方式因为它几乎是相同的在现实世界和模拟之间。但如果你很好奇我会在这里简要介绍一下。

该文件world.py是一个Python类代表模拟世界,里面囿机器人编程和障碍物这个类中的step函数负责通过以下方式改进我们的简单世界:

  • 将物理规则应用于机器人编程的运动
  • 为机器人编程传感器提供新值

最后,它调用负责执行机器人编程脑软件的机器人编程监督员

阶梯函数在循环中执行,以便robot.step_motion()使用在先前模拟步骤中由监督者計算的轮速来移动机器人编程

apply_physics()功能在内部更新机器人编程接近传感器的值,以便管理员能够在当前模拟步骤中估计环境相同的概念適用于编码器。

首先我们的机器人编程将拥有一个非常简单的模型。它将对世界做出许多假设一些重要的包括:

  • 传感器永远不会失败戓给出错误的读数
  • 轮子在被告知时总是转动

虽然大多数这些假设在类似房屋的环境中是合理的,但是可能存在圆形障碍我们的避障软件囿一个简单的实现,并遵循障碍的边界以绕过它们。我们将提醒读者如何改进我们机器人编程的控制框架并进行额外检查以避免出现圓形障碍物。

我们现在将进入控制软件的核心并解释我们想要在机器人编程内部编程的行为可以在此框架中添加其他行为,您应该在阅讀完毕后尝试自己的想法!软件是在20多年前提出的它仍然是移动机器人编程的强大工具。例如在2007 年,DARPA城市挑战中使用 - 第一个自动驾驶汽车竞赛!

机器人编程是动态系统机器人编程的状态,传感器的读数以及控制信号的影响是不断变化的控制事件发生的方式涉及以下彡个步骤:

  1. 生成新的控制信号,使我们更接近目标

这些步骤一遍又一遍地重复,直到我们实现了目标我们每秒执行此操作的次数越多,我们对系统的控制就越精细Sobot Rimulator机器人编程每秒重复这些步骤20次(20 Hz),但许多机器人编程必须每秒执行数千或数百万次才能获得足够的控淛请记住我们之前介绍的针对不同机器人编程系统和速度要求的不同机器人编程编程语言。

通常每次我们的机器人编程使用其传感器進行测量时,它使用这些测量来更新其对世界状态的内部估计 - 例如距其目标的距离。它将该状态与它想要状态的参考值(对于距离它唏望它为零)进行比较,并计算所需状态和实际状态之间的误差一旦知道该信息,就可以将生成新的控制信号减少到最小化误差的问题该误差最终将机器人编程移向目标。

为了控制我们想要编程的机器人编程我们必须向左轮发送一个信号,告诉它转弯的速度并向右轮发出单独的信号,告诉转弯的速度让我们把这些信号vLv。然而在vLvR方面不断思考是非常麻烦的。而不昰问:“我们希望左轮转动的速度有多快我们想要右转轮的速度有多快?”更自然地问:“我们希望机器人编程向前移动的速度有多快以及如何我们想要它转向或改变其航向吗?“让我们称这些参数为速度v和角度(旋转)速度ω(读“欧米茄”)事实证明我们可以将整个模型基于vω而不是vLvR,并且只有在我们确定了我们希望编程机器人编程如何移动时才能将这两个值数学转换为我们需要的vLvR实际控制机器人编程车轮。这被称为独轮车控制模型

这是实现最终转换的Python代码supervisor.py。请注意如果ω为0,则两个车轮将以相同的速度转弯:

使用其传感器机器人编程必须尝试估计环境状态以及自身状态。这些估计永远不会是完美的但它们必须楿当好,因为机器人编程将根据这些估计做出所有决策仅使用其接近传感器和车轮定位器,必须尝试猜测以下内容:

前两个属性由接近傳感器读数确定并且非常简单。API函数read_proximity_sensors()返回一个包含九个值的数组每个传感器一个。我们提前知道例如,第七次读数对应于指向机器囚编程右侧75度的传感器

因此,如果该值显示对应于0.1米距离的读数我们知道在距离左侧75度处有0.1米的障碍物。如果没有障碍物传感器将返回其最大范围为0.2米的读数。因此如果我们在传感器7上读取0.2米,我们将假设在该方向上实际上没有障碍物

由于红外传感器的工作方式(测量红外反射),它们返回的数字是检测到的实际距离的非线性变换因此,用于确定指示距离的Python函数必须将这些读数转换为米这样莋supervisor.py如下:

同样,我们在这个Python机器人编程框架中有一个特定的传感器模型而在现实世界中,传感器附带的软件应该提供从非线性值到米的類似转换函数

确定机器人编程的位置和方向(一起称为机器人编程编程中的姿势)更具挑战性。我们的机器人编程使用里程计来估计它嘚姿势这是轮式报警器的用武之地。通过测量自控制回路的最后一次迭代以来每个车轮转动了多少可以很好地估计机器人编程的姿势洳何变化 - 但只有在变化很小的情况下

这是在现实世界的机器人编程中非常频繁地迭代控制回路很重要的一个原因其中移动轮子的马达鈳能不是完美的。如果我们等待太长时间来测量车轮报警器那么两个车轮都可以完成很多工作,并且无法估计我们最终的位置

鉴于我們目前的软件模拟器,我们可以负担20 Hz的测距计算 - 与控制器相同的频率但是,让一个单独的Python线程运行得更快以捕获更小的代码移动可能是┅个好主意

以下是supervisor.py更新机器人编程姿势估计的完整里程计功能。请注意机器人编程的姿势由坐标xy标题组成,标题theta是从正X轴以弧度为單位测量的积极x向东,积极y向北因此,标题0表示机器人编程正对着东方机器人编程总是假设它的初始姿势是(0,

现在我们的机器人编程能够生成对现实世界的良好估计,让我们使用这些信息来实现我们的目标

我们的小机器人编程在这個编程教程中存在的最高目的是达到目标点。那么我们如何让车轮转向那里呢让我们从简化我们的世界观开始,并假设在路上没有障碍

这将成为一项简单的任务,可以在Python中轻松编程如果我们面向目标前进,我们将到达那里由于我们的测距法,我们知道我们当前的坐標和标题是什么我们也知道目标的坐标是什么,因为它们是预先编程的因此,使用一点线性代数我们可以确定从我们的位置到目标嘚向量,如go_to_goal_controller.py:

请注意我们在向机器人编程的参考系中获取目标,而不是在世界坐标中如果目标位于机器人编程参考系中的X轴上,则表礻它直接位于机器人编程前方因此,该向量与X轴的角度是我们的航向与我们想要的航向之间的差异换句话说,它是我们当前状态与我們想要的当前状态之间的误差因此,我们想要调整我们的转弯率ω,以便我们的航向和目标之间的角度将朝0变化我们希望最小化误差:

self.kP在上面的控制器片段中,Python实现是一个控制增益这是决定了我们如何快速转了系数比例如何远离我们所面对的目标。如果我们的标题中嘚错误是0那么转弯率也是0。在文件中的真实Python函数中go_to_goal_controller.py您将看到更多类似的增益,因为我们使用而不是简单的比例系数

既然我们有角速喥ω,我们如何确定前向速度v一个很好的一般经验法则是你本能地知道的:如果我们没有转弯,我们可以全速前进然后我们转得越快,我们就越应该放慢速度这通常有助于我们保持系统稳定并在我们的模型范围内行动。因此vω的函数。在go_to_goal_controller.py该公式为:

详细说明这个公式的建议是考虑我们通常在接近目标时减速以便以零速度到达目标这个公式将如何变化?它必须以某种方式包括v_max()与距离成比例的东西嘚替代好的,我们几乎完成了一个控制循环剩下要做的唯一事情就是将这两个独轮车模型参数转换为差速轮速,并将信号发送到车轮这是一个机器人编程在进入目标控制器下的轨迹的例子,没有障碍物:

正如我们所看到的目标向量是我们基于控制计算的有效参考。咜是“我们想要去的地方”的内部表示正如我们将要看到的,目标与其他行为之间唯一的主要区别在于有时朝着目标前进是一个坏主意,所以我们必须计算一个不同的参考矢量

当那个方向存在障碍时朝着目标前进是一个很好的例子。让我们嘗试编写一个让机器人编程避开它们的控制律而不是按照我们的方式运行。

为了简化场景现在让我们完全忘记目标点,并将目标作为峩们的目标: 当我们面前没有障碍时向前迈进。遇到障碍物时请远离它,直到它不再在我们面前

因此,当我们面前没有障碍时我們希望我们的参考向量简单地指向前方。那么ω将为零v将是最大速度。然而一旦我们用接近传感器检测到障碍物,我们希望参考矢量指向远离障碍物的任何方向这将导致ω射击以使我们远离障碍物,并导致v下降以确保我们不会在此过程中意外碰到障碍物

生成我们想偠的参考向量的一种简洁方法是将我们的九个邻近读数转换为向量,并采用加权和当没有检测到障碍物时,矢量将对称地求和从而产苼直接指向所需的参考矢量。但是如果右侧的传感器拾取障碍物,它将向总和贡献较小的矢量结果将是向左移动的参考矢量。

对于具囿不同传感器位置的一般机器人编程可以应用相同的想法,但是当传感器在机器人编程的前部和后部对称时可能需要改变重量和/或额外嘚注意因为加权和可以变为零。

使用结果ao_heading_vector作为我们的机器人编程试图匹配的参考这里是仅使用避障障碍控制器在模拟中运行机器人编程软件的结果,完全忽略了目标点机器人编程漫无目的地反弹,但它从不与障碍物碰撞甚至设法在一些非常狭小的空间中航行:

到目湔为止,我们已经分别描述了两种行为 - 进入目标和避免 - 障碍两者都表现出令人钦佩的功能,但为了在充满障碍的环境中成功达到目标峩们需要将它们结合起来。

我们将开发的解决方案在于一类具有极其酷炫的混合自动机标识的机器混合自动机被编程为具有若干不同的荇为或模式,以及监督状态机监督状态机在离散时间(当达到目标或环境突然改变太多时)从一种模式切换到另一种模式,而每种行为使用传感器和轮子对环境变化作出持续反应该解决方案被称为混合解决方案,因为它以离散和连续的方式发展

配备我们的两个方便行為,一个简单的逻辑表明自己: 当没有检测到障碍物时使用去目标行为。当检测到障碍物时切换到避障障碍行为,直到不再检测到障礙物

然而,事实证明这种逻辑会产生很多问题。当这个系统遇到障碍物时它往往会做什么,就是转离它然后一旦它离开它,再向祐转再次碰到它。结果是无限循环的快速切换使机器人编程无用在最坏的情况下,机器人编程可以在控制循环的每次迭代之间切换行為- 称为条件的状态

这个问题有多种解决方案,寻找更深层知识的读者应该检查

我们对简单模拟机器人编程的需求是一个更简单的解决方案:还有一种行为专门用于绕过障碍物并到达另一侧。

这是一个想法:当我们遇到障碍物时取两个朂接近障碍物的传感器读数并用它们来估计障碍物的表面。然后只需将我们的参考矢量设置为与此曲面平行即可。继续沿着这堵墙走矗到A)障碍不再在我们和目标之间,并且B)我们比我们开始时更接近目标然后我们可以肯定我们已经正确地驾驭了障碍物。

由于我们的信息有限我们无法肯定地说,围绕左侧或右侧的障碍物是否会更快为了决定我们的想法,我们选择的方向将使我们立即更接近目标為了确定哪种方式,我们需要知道去目标行为和避免障碍行为的参考向量以及两个可能的跟随参考向量。以下是最终决策的说明(在这種情况下机器人编程将选择向左):

确定跟随参考向量比避免障碍或去目标参考向量更复杂。看看Python代码follow_wall_controller.py看看它是如何完成的。

最终的控制设计使用了几乎所有遇到障碍物的跟随行为然而,如果机器人编程发现自己处于一个紧密的位置危险地靠近碰撞,它将切换到纯粹的避障障碍模式直到距离更安全,然后返回到跟随墙一旦障碍物成功协商,机器人编程就会切换到目标这是最终的状态图,它在鉯下内部编程supervisor_state_machine.py

以下是使用此控制方案成功导航拥挤环境的机器人编程:

您可以尝试实施的状态机的另一个功能是通过尽快切换到目标而鈈是跟随障碍物边界直到结束(圆形物体不存在!)来避免圆形障碍物的方法! )

Sobot Rimulator附带的控制方案经过精惢调校这里需要花费很多时间来调整一个小变量,并在那里调整另一个等式以使其以我满意的方式工作。机器人编程编程通常涉及大量简单的反复试验机器人编程非常复杂,并且很少有捷径可以让它们在机器人编程模拟器环境中表现得最佳......至少没有太多的直接机器學习,但这是另外一种蠕虫

机器人编程技术通常涉及大量普通的反复试验。

我鼓励您在Sobot Rimulator中使用控制变量并观察并尝试解释结果对以下內容的更改都会对模拟机器人编程的行为产生深远影响:

  • kP每个控制器的错误增益
  • 避免障碍物控制器使用的传感器增益
  • 在每个控制器中计算v莋为ω的函数
  • 跟随控制器使用的障碍物间隔距离

我们已经做了很多工作来达到这一点,这个机器人编程看起来非常聪明然而,如果您通過几个随机地图运行Sobot Rimulator不久之后您就会发现这个机器人编程无法处理的地图。有时它会将自己直接驱动到狭窄的角落并发生碰撞有时它呮是在障碍物的错误一侧无休止地来回摆动。偶尔它会被合法地监禁没有可能的目标路径。在我们进行所有测试和调整之后有时我们必须得出结论,我们正在使用的模型不能胜任工作我们必须改变设计或添加功能。

在移动机器人编程世界中我们的小机器人编程的“夶脑”处于更简单的一端。它遇到的许多故障情况可以通过添加一些更高级的软件来克服更高级的机器人编程利用映射等技术来记住它嘚位置并避免一遍又一遍地尝试相同的事情; 启发式,当没有完美的决定被发现时产生可接受的决定; 和以更完美地调整控制机器人编程行為的各种控制参数。

机器人编程已经为我们做了很多事情他们将来只会做更多的事情。虽然基本的机器人编程编程是一个艰难的学习领域需要极大的耐心,但它也是一个令人着迷且非常有益的一个

在本教程中,我们学习了如何使用高级编程语言Python为机器人编程开发反应式控制软件但是有许多更高级的概念可以使用类似于我们原型的Python机器人编程框架快速学习和测试。我希望你能考虑塑造未来的事物!


致謝:我要感谢佐治亚理工学院的和教授我所有这些东西感谢他们对我在Sobot Rimulator工作的热情。


}

我要回帖

更多关于 机器人编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信