我有一个充满障碍物的场地,我知道它们的位置,我知道机器人的位置。使用路径寻找算法,我计算机器人要遵循的路径。
现在我的问题是,我正在引导机器人从网格到网格,但这会产生一个不那么平滑的动作。我从A开始,将鼻子转到B点,直行直到我到达B点,冲洗并重复直到达到最终点。
所以我的问题是:在这样的环境中使用什么样的技术进行导航以获得平稳运动?
机器人有两个轮子和两个马达。我通过反向旋转电机来改变电机的方向。
编辑:我可以改变电机的速度,基本上机器人是arduino plus ardumoto,我可以在0-255之间向电机提供任意方向的值。
答案 0 :(得分:8)
差分驱动机器人需要反馈线性化。这个document在第2.2节中解释了它。我在下面列出了相关部分:
模拟机器人所需的 项目是一个不同的驱动机器人 有限的速度。以来 不同的驱动机器人 非完整的,鼓励学生使用反馈线性化 转换运动控制输出 从他们的算法来控制 不需要的驱动机器人。该 转型如下:
其中v,ω, x , y 是线性的, 角度和运动速度。大号 是一个与...成比例的设定长度 机器人的车轮底座尺寸。
答案 1 :(得分:5)
我有一个非常好的结果的控制算法是pure pursuit。基本上,机器人试图沿着路径移动到机器人前方固定距离的点。因此,当机器人沿着路径移动时,前瞻点也会前进。该算法通过将可能的路径建模为弧来补偿非完整约束。
更大的前瞻距离将创造更平稳的运动。但是,较大的前瞻距离将导致机器人切角,这可能会与障碍物发生碰撞。您可以通过从称为矢量场直方图(VFH)的反应控制算法实现创意来解决此问题。 VFH基本上将机器人从近壁推开。虽然这通常使用某种测距传感器,但您可以推断出障碍物的相对位置,因为您知道机器人姿势和障碍物位置。
答案 2 :(得分:1)
我对此的初步想法(我在工作所以不能花太多时间):
这取决于你想要的角度或需要你的角落(这取决于你的路径发现者从障碍物中获得的距离)
考虑到机器人的宽度,您可以根据每个车轮的速度计算转弯半径。假设您希望尽可能快地进行滑行并且滑行不是问题,您将始终将外轮保持在255并将内轮减小到可提供所需转弯半径的速度。
考虑到你的路径上任何特定转弯的角度以及你将使用的转弯半径,你可以计算出你将减慢内轮速度的那个节点的距离。
答案 3 :(得分:0)
优化方法是处理此问题的一种非常通用的方法。
使用您计算的路径作为通用非线性优化算法(您的选择!)的输入,其成本函数由对输入轨迹的答案轨迹的接近度以及对非完整性约束的遵守,以及任何你想要强制执行的其他限制(例如远离障碍)。优化算法也可以用从原始轨迹构造的轨迹进行初始化。
Marc Toussaint的机器人课程笔记是这种方法的一个很好的来源。特别参见第7讲: http://userpage.fu-berlin.de/mtoussai/teaching/10-robotics/