Since the future Artemis landing sites are near the pole. New Eva code needs developed. In the videos I placed 3 different eva guys here:
STATUS Landed Moon
POS -0.0457960 -85.9766676
The UACS guy moved at an angle to the hud.
The LWLL guy did good
The Xemu guy did good also.
They all move great at Brighton Beach,
One problem I am having is the exit point, The Alpaca exits great at Brighton but at the pole the exit point is way off.
UACS guy:https://u.pcloud.link/publink/show?code=XZtME6VZONkw9CI9jfzualEicOvjSLgMzC5X
LWLL:https://u.pcloud.link/publink/show?code=XZQME6VZxdT4ay4UmUmOfrEVzx8bYuostTNV
XEMU:https://u.pcloud.link/publink/show?code=XZkTE6VZHHhF2eL5VTygR5X6zS4c2BwfalWX
This is the walking code for the XEMU:
STATUS Landed Moon
POS -0.0457960 -85.9766676
The UACS guy moved at an angle to the hud.
The LWLL guy did good
The Xemu guy did good also.
They all move great at Brighton Beach,
One problem I am having is the exit point, The Alpaca exits great at Brighton but at the pole the exit point is way off.
UACS guy:https://u.pcloud.link/publink/show?code=XZtME6VZONkw9CI9jfzualEicOvjSLgMzC5X
LWLL:https://u.pcloud.link/publink/show?code=XZQME6VZxdT4ay4UmUmOfrEVzx8bYuostTNV
XEMU:https://u.pcloud.link/publink/show?code=XZkTE6VZHHhF2eL5VTygR5X6zS4c2BwfalWX
This is the walking code for the XEMU:
//Adapted from GeneralVehicle by fred18
void LEVA::Move(double simdt)
{
double rt = oapiGetSize(GetSurfaceRef());
double moon_circ = rt * 2 * PI;
double each_deg = moon_circ / 360;
double grav_acc = GGRAV * oapiGetMass(GetSurfaceRef()) / (rt * rt);
memset(&vs2, 0, sizeof(vs2));
vs2.version = 2;
GetStatusEx(&vs2);
double theta = 0;
if (turn == 0) {}
else {
theta = (turn_speed * RAD) * simdt * turn;
vs2.surf_hdg += theta;
if (vs2.surf_hdg > PI2) { vs2.surf_hdg -= PI2; }
if (vs2.surf_hdg < 0) { vs2.surf_hdg += PI2; }
}
if ((walk == 0) && (side == 0)) {}
else {
double correction = 90 - abs(vs2.surf_lat * DEG);
correction /= 90;
correction += tan(abs(vs2.surf_lat));
double d_lat1 = (walk_speed * simdt * cos(vs2.surf_hdg)) / each_deg;
double d_lng1 = (walk_speed * simdt * sin(vs2.surf_hdg)) / each_deg;
double d_lat2 = (0.5 * walk_speed * simdt * -sin(vs2.surf_hdg)) / each_deg;
double d_lng2 = (0.5 * walk_speed * simdt * cos(vs2.surf_hdg)) / each_deg;
vs2.surf_lat += (d_lat1 * RAD) * walk;
vs2.surf_lng += (d_lng1 * correction * RAD) * walk;
vs2.surf_lat += (d_lat2 * RAD) * side;
vs2.surf_lng += (d_lng2 * correction * RAD) * side;
}
if ((turn == 0) && (walk == 0) && (side == 0)) {}
else {
MATRIX3 rot1 = RotationMatrix(_V(0 * RAD, (90 * RAD - vs2.surf_lng), 0 * RAD), TRUE);
MATRIX3 rot2 = RotationMatrix(_V(-vs2.surf_lat + 0 * RAD, 0, 0 * RAD), TRUE);
MATRIX3 rot3 = RotationMatrix(_V(0, 0, 180 * RAD + vs2.surf_hdg), TRUE);
MATRIX3 rot4 = RotationMatrix(_V(90 * RAD, 0, 0), TRUE);
MATRIX3 RotMatrix_Def = mul(rot1, mul(rot2, mul(rot3, rot4)));
vs2.arot.x = atan2(RotMatrix_Def.m23, RotMatrix_Def.m33);
vs2.arot.y = -asin(RotMatrix_Def.m13);
vs2.arot.z = atan2(RotMatrix_Def.m12, RotMatrix_Def.m11);
vs2.vrot.x = 0.9;
DefSetStateEx(&vs2);
}
}