由于我主要做多UAV研究,因此记录的问题都是与此相关的~~
1.对于多UAV场景,由于在setting文件中,每个UAV的初始位置都不一样,因此在用getMultirotorState函数获取UAV状态信息时,需要在当前坐标后在加上其初始坐标。这是因为getMultirotorState函数获得的坐标是相对于每个UAV自己的初始位置的,因此需要将它们转换到统一的坐标系下,方便使用
https://www.johngo689.com/597908/
2.对于多UAV场景,moveToPositionAsync函数中的位置参数,也是相对于自己的初始位置的,因此在某些情况下也需要坐标转换
3.对于settings.json中clockspeed参数的设置会对Airsim中的物理参数造成影响,而并非单纯的加速仿真。举个例子:
假设在settings.json中,clockspeed = 1,在这种情况下,设置一架UAV沿X轴以5m/s的速度运动,那么你去测试UAV的速度,发现确实是5m/s;
但是,如果在clockspeed =5时设置一架UAV沿X轴以5m/s的速度运动,那么你再去测试UAV的速度,会发现只有大约1m/s,也即5/5 = 1。(真实数据/时钟速度)
参考:Airsim Clock Speed · Issue #4841 · microsoft/AirSim · GitHub
如果你使用强化学习在 clockspeed >1的情况下训练,那可能就会产生问题!!!
有篇论文也提到了这个问题:《A Method for Accelerated Simulations of Reinforcement Learning Tasks of UAVs in AirSim》
4.如何要用simSetVehiclePose函数设置位姿(多用于导航任务设置UAV随机初始位置),一定要把simSetVehiclePose中的ignore_collision参数一定要设置为True!!!不然会由于位姿设置过程中UAV与障碍物可能的碰撞导致设置一直失败。。。
5.画UAV运动过程中的轨迹图,参考:AirSim(13) - 四旋翼轨迹跟踪(离散LQR控制,加速度控制)(2021.8.16更新) - 知乎