车辆仿真 - scutrobotlab/RM2022_SimulatorX GitHub Wiki
机器人运动模型主要包括地面机器人和空中机器人。而地面机器人运动的重点其实就是麦克纳姆轮底盘。SimulatorX 中模拟麦克纳姆轮的方式是计算出驱动合力,再一次性加给底盘刚体。为了模拟一些真车的物理特性和防止翻车,在此基础上又增加了很多魔法。
// Magic!
wheel.motorTorque = axis.magnitude != 0 ? 1e-7f : 0;
wheel.brakeTorque = axis.magnitude != 0 ? 0 : 1e7f;
// Magic!
if (inputMagnitude < 2.8e-2f)
Rigidbody.velocity = new Vector3(0, velocity.y, 0);
else Rigidbody.AddForce(
-velocity * (1 / inputMagnitude * 2816 * velocity.magnitude * wheelsGroundedMultiplier));
/// <summary>
/// 阻止车辆撞击场地后打滑旋转。
/// </summary>
/// <param name="collision"></param>
public void OnCollisionEnter(Collision collision)
{
var other = collision.gameObject;
_collideWith.Add(other.name);
Rigidbody.constraints = RigidbodyConstraints.FreezeRotationY;
}
总的来说,需要保证车辆在能够全向移动的同时,不能爬坡能力过强、不能轻易翻车、不能无限加速、不能转弯不损失速度、不能撞墙时自转……
而无人机的运动模型相对来说要拟真一些,总体思想就是通过 PID 控制各轴的推力输出,属于简化版的飞控算法,但在帧率无法保证的情况下会有一些问题。解决的思路应该是把物理模拟独立出来。
同时,参照比赛中各所学校使用的方案,对工程取矿方式、哨兵运动方式等进行仿真。
哨兵运动示例如下:
在旧版模拟器中,等级性能表是硬编码在代码里的,导致维护修改困难。SimulatorX 中我们用 ScriptableObject 对这部分进行了改进。
(可编辑的等级性能表)
在底盘跟随和云台控制方面,SimulatorX 引入了 PID 算法,虽然最终呈现效果没有很大区别,但可以更方便的与现有视觉控制算法整合。视觉方面,除了直线预测,SimulatorX 引入了针对神符击打的曲线预测,预测的参数也可以更灵活地调整,在不同预测水平之间切换。
预测流程图如下:
其中,关于能量机关预测所有思想流程图如下: