package ctbot.utils; import nanovm.ctbot.drivers.WheelEncoder; import nanovm.lang.Math; public class Odometry { public static final float M_PER_TICK = 0.002985f; // 2.985 mm/tick public static final float M_WHEEL_DISTANCE = 0.0985f; // 98.5 mm public static float ori; public static float x; public static float y; public static float s; /** * will normalize orientation to interval (-PI, PI] */ public static float normalizeOri(float ori) { while (ori> Math.PI) ori-=2.0f* nanovm.lang.Math.PI; while (ori<=-Math.PI) ori+=2.0f*Math.PI; return ori; } public static void update() { int dsl = WheelEncoder.getLeftInc(); int dsr = WheelEncoder.getRightInc(); float dori = (dsl-dsr)*(M_PER_TICK/M_WHEEL_DISTANCE); float ds = (dsl+dsr) * (0.5f * M_PER_TICK); ori = normalizeOri(ori+dori); s += Math.abs(ds); x += ds * Math.cos(ori); y += ds * Math.sin(ori); } }