【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
大家一开始看到这个题目的时候,也许比较吃惊。为什么会有这样的题目?但是做过slam的同学,应该就比较熟悉和了解了。我们都知道,大部分机器人运动的时候,都是按照特定的轨迹进行移动的。这个时候,有一件非常重要的事情需要去做,那就是实时计算机器人和运动直线之间的距离。一方面,可以验证我们的slam效果好不好,另外一方面也可以在发生意外的时候,提前让机器人停止住,这样也能避免发生意外。
1、已知条件
假设直线的起点和终点分别是(x1、y1)、(x2、y2),计算的点是(x0、y0)
2、首先计算直线的方程
k1=(y2-y1)/(x2-x1)
b1=y1-k1*x1
3、计算垂直于当前直线的法线
k0=-1/k1
b0=y0-k0*x0
这里k0=-1/k1是关键,两条垂直相交的直线,斜率乘积为-1。
4、求解相交的直线点
y=k1*x+b1
y=k0*x+b0
x=(b1-b0)/(k0-k1)
y=k1*x+b1
5、求解距离
distance=sqrt((x0-x)^2 + (y0-y)^2)
6、其他要注意的事项
计算的过程当中,需要提前判断下x1和x0的差值,如果两者比较相近,可以直接判断直线角度为90度,或者是pi/2。另外,除了计算点到直线的距离之外,一般还需要对机器人的动态环境和静态环境进行判断。
所谓的动态环境,就是机器人在行走的时候,对于突发的外部干扰,需要立即做出反应。这种干扰主要就是避障,包括但不限于人、车、门、物等等。而静态环境则比较好理解,就是slam建图的时候就已经存在于地图之上的障碍物,这部分也是不能发生摩擦或者碰撞的。
安全检测是机器人行走的重要环节,这部分一定要慎之又慎。机器人参与到工业生产当中,本身是为了降低成本、提高效率之用,但这一切如果没有以安全作为前提,那么所有的工作也就失去了意义。所以今天的这篇文章看上去是求解一道几何计算题目,实际上是告诉大家如何在生产中运用数学知识实现机器人的正常行走和运行。
7、实际部署前仿真的必要性
每一个机器人都有自己的外形结构,也有自己的底盘结构,所以在机器人部署之前,一定要借助于仿真工具,或者是上位机工具,让机器人在将要行走的道路上过一遍。这个仿真的过程是十分必要的。很多时候,研发人员没有办法亲自到现场,那么现场工程师在部署环境或者熟悉现场之前,就需要通过cad、仿真软件看一下机器人在规划的道路上运行是否存在安全隐患。
一般来说,如果仿真本身都问题连连,那么实际测试肯定会有问题。但是如果仿真没有问题了,那么这个时候就应该再把机器人拉到现场,每条路线重新走一遍,确认下是不是真的没问题。这才是slam项目真正用起来的关键所在。
附录
最后给出完整的python代码
import os
import sys
import re
import math
def main():
x0 = 0.0
y0 = 0.0
x1 = 0.0
y1 = 1.0
x2 = 2.0
y2 = 0.0
k1 = (y2-y1)/(x2-x1)
b1 = y1-k1*x1
k0 = (-1.0)/k1
b0 = y0-k0*x0
x = (b1-b0)/(k0-k1)
y = y0-k0*x
d = math.sqrt((x0-x)*(x0-x) + (y0-y)*(y0-y))
print(d)
if __name__ == '__main__':
main()