占個坑,本月持續更新
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),但是在某個方向好像有奇怪的跳變,這里問題還沒有解決,不過沒有影響到仿真,
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)
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/223255.html
標籤:其他
上一篇:【原創】python實作RBF神經網路識別Mnist資料集
下一篇:雙十一背后的技術
