无人艇路径跟踪(vrep仿真和实艇控制,含ros通信、gps、imu,基于模糊控制、pid差速、los等方法)

≡放荡痞女 提交于 2020-11-18 15:36:00

占个坑,本月持续更新

2020\11\16 更新:vrep仿真,基于ros\gps\简单pid

仿真环境:vrep最新版本(CoppeliaSim)、ros-kinetic、Ubuntu16.04、Python 2.7,仿真时记得先打开ros,再打开vrep,这样会自动加载vrep_ros interface插件。

两推进器船、有波浪的水面、目标为树的位置、ros发送目标位置和船当前gps位置,接收推进器力的大小(改编自github某不知名环境)

控制量:两推进器的力的大小,正数,基于差速模型的pid控制

坐标系:

1、仿真环境中有一个世界坐标系,所有位置信息都是基于这个世界坐标系的。例如gps发送的位置不是经纬度,而是在环境中的(x,y,z)。

2、船的航向角,从x轴正方向顺时针为正逆时针为负(这里记不太清了),范围为(-1,1)。但是在某个方向好像有奇怪的跳变,这里问题还没有解决,不过没有影响到仿真。

imu订阅话题回调函数

 ROS信息传输:

1、先打开ros再打开vrep,自动加载ros插件后,执行命令 rosnode list会发现有一个 sim_ros_interface的节点,这样我们在vrep环境中发送的消息都是基于这个节点。

2、在vrep界面中,双击每个名字后面的小文档(child_script),会出现该物体的lua执行代码。vrep端发送的话题主要有 gps_data、imu_data、left_motor 、right_motor、goal等,主要在 Tree 、Boat、GPS 这三个物体的文档里。

双击小文档图标

3、在vrep中使用ros,参考了vrep自带的ros例程。发布话题:初始化话题(simRos.advertise),发布话题信息(simros.publish),shutdown。订阅话题: 初始化话题(simRos.subscribe),回调函数(自定义call_back)

Tree的文档
无人艇的仿真文档。m0 m1分别是左右推进器力的大小,初始化为0;可以看到发布和订阅的话题。

usv_ros.py 代码解析:

1、初始化ros话题、目标位置、pid参数等

2、订阅话题的回调函数(按理说控制程序最好放在回调函数里,这样每次接收到数据就实时发送控制量。但是这是最初的仿真程序,后来实际控制的时候我改了。)

3、计算无人艇当前航向与目标航向的角度差。求目标航向角时用到了向量的夹角公式,向量x为x轴正方向单位向量,向量y为船到目标点。x.*y=|x||y|cos(sita),注意arccos求出来范围是0-pi,不能判断向量是顺时针还是逆时针方向,所以需要额外进行符号判断。另外,由于角度差可能会大于pi或小于-pi,也许呀进行规范。

4、简单的左右转差速控制:

5、pid差速,基础速度为3,标注部分是: 设置速度与到目标的距离成线性关系,距离越远,速度越大

6、pid限幅

main.py 距离目标点3米时调整新目标,更新参数

 

2020\10\20 

1、找到几个不错的仿真环境,但搭建过程可能会比较费时:

基于java:https://github.com/He-Ze/Autonomous-Surface-Vehicle-Simulator

基于gazebo,试了两天各种报错不能运行:https://github.com/disaster-robotics-proalertas/usv_sim_lsa

一个无人艇比赛的官方仿真环境,基于gazebo ubuntu18.04 https://github.com/osrf/vrx

这个可运行,但是模型写的不对,船跑不了!!!https://github.com/OUXT-Polaris/ros_ship_packages

 

2、卡尔曼滤波

协方差矩阵https://blog.csdn.net/u011362822/article/details/95905113   https://www.zhihu.com/question/53788909

公式推导:https://blog.csdn.net/victor_zy/article/details/82862904?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!