3. ROS编程入门—Wall Following

来源:互联网 发布:运动keep是什么软件 编辑:程序博客网 时间:2024/06/06 00:16

Introduction:

本次设计的任务是让机器人沿着墙按照固定距离走

算法

第一步是找到墙,利用激光雷达发现最近障碍物的角度和距离。
根据墙的位置保持固定的距离和固定的角度,可以用两个PID控制器来实现这两个参量的控制。

输入输出处理

程序的输入是激光雷达的数据,输出的是控制Twist消息
每一个激光点对应的实际角度:

φ=(il2)θ(angle-ranges)

φ:第i个元素对应的角度
i:向量元素的索引
l:向量长度
θ: 角度增量

如果在整个ranges向量空间中寻找最小值,有可能让机器人在狭窄的空间中跟随对面的墙(译者:不是很懂)。为了确保不会发生这种状况,在合理的一般范围内查找最小值。查找的索引起始和终止值可以通过下面的式子调整:

i0=ld+14

in=ld+34

d:方向(1:跟随左边的墙,-1:跟随机器人右边的墙)
i0: 起始索引
in: 终止索引
l : 向量长度

方向PD控制器

计算偏差:

e(tn)=rmin(tn)rwall

e(tn):偏差值
rwall: 最近障碍物的距离
rw: 期望距离
可以通过PD控制器控制机器人和墙壁保持期望的距离:

ωA(tn)=kPe(tn)+kDe(tn)e(tn1)tntn1

ωA:PD控制器的干预值(intervention)
tn : 第n次迭代的时刻
Kp:比例参数
KD:微分参数

假定tntn1为常量,实际不是常量,但是这些差别不影响计算结果

ωA(tn)=kPe(tn)+k~D(e(tn)e(tn1))

k~D=kDtntn1

比例角度控制器

为了控制墙的最近的角度,仅仅需要一个简单的比例控制器就好。误差计算:

etφ(tn)=φm(tn)dπ2

φ:最近墙的角度
d:运动方向 +11

比例控制器:

ωB(tn)=kP2eφ(tn

角速度:

ω(tn)=ωA(tn)+ωB(tn)(sum(PD,P))

线速度

如果机器人按照固定的速度行进有可能来不及转弯,或者把速度限定的很低。可以通过最近距离来决定速度进了就慢一点,然后就可以有足够的时间转弯了。
当走到墙终点时候可能有另一个问题。机器人有可能及时旋转也有可能掉头沿着另一面墙行进。你可以通过判断最近障碍物的角度是否>1.75 来减小线速度,解决这个问题。

code

Experiments

Stageros simulator

这里写图片描述