2022.09.07
1、创建工作空间(需要理清工作文件夹的关系)
2、使用launch文件启动海龟
3、编写发布者cpp后,启动launch,rosrun turtle.cpp
4、订阅位姿
四个顶点为(从左到右,从上到下):(2.89,5.54),(6.86,5.54),( 2.89,9.51),(6.86,9.51),边长为3.97
以上是开环的
这里的闭环控制指的是通过订阅turtle的pose,判断是否达到了目标位置,是的话就转弯,而不是想上面的开环那样,通过调整频率和时间进行计算最终跑出一个正方形,开环->设置时间和速度得到边长,闭环->有目标边长
turtle界面起点(5.54,5.54)
设置目标点(5.54,1.54),(9.54,1.54)(5.54,5.54),(9.54,5.54)
初步设置成功
1、完成直角转弯
2、闭环控制
2022.09.11
小结
由于系统发布速度信息的延时问题导致每一次小乌龟在转弯的时候并不能做到精准的定位(在0.02之间动摇)
通过位姿pose来判断小乌龟是否到达了目标点,有一下需要关注的目标
1、目标点坐标,几位小数?取范围?确定的值或是一个范围?通过两数相减小于一个数来判断(个人认为相当于去一个范围)
2、目标点的theta,这里使用弧度制表示的,正对右-》theta=0;正对上1.57;正对左3.14;正对下-1.57
3、考虑不可抗因素,程序延迟(如何降低延迟?),因取范围而导致不能画成完整的正方形
代码:
bihuan_demo01、bihuan_demo02先测试了转弯的性能
bihuan_demo03通过乌龟到达某一个目标点作为条件判断是否进行转弯,效果差,没有添加进theta进行判断,同时也没有取一个目标点坐标的范围,导致最多能靠运气转完1圈,结果肯定会由于累计误差导致无法一直转下去
bihuan_demo04:添加了theta和目标点坐标范围进行判断,在一定的速度范围内可以不停地进行转圈// 1m/s、1.5m/s可以一直走 1.8m/s一直走,1.9m/s一圈,2.0m/s偏离航道的可能性增大,由于速度增大,程序执行的延迟不变(这里指当线速度=0这条指令从被设置到被发出的延迟时间),有x=vt可得,偏差会超过0.05m(bihuan_demo04的每次画圈的误差范围在0-0.05m之间)
bihuan_demo05:通过设置一个err(error)来进行目标坐标点的判断,实质上如果取了一个绝对值,最终也可以得到四舍五入的效果,但这样的写法更加灵活,可以吧精度调的更高,但这需要一个前提是速度一定,速度越大,越容易出局。
最终效果图
bihuan_demo04 1.8m/s
转完5圈的效果,在很多圈后也是有可能因为速度过高冲过目标点
还是1m/s的比较稳健..误差在0.01-0.03