We see that you have published the source code,

but wefre having trouble deciphering the mathematical model and governing equations of the system. Specifically,

many of the variable explanations get lost in translation.

We were wondering if you would be comfortable sharing any labeled models or equations that you used for this project.

Currently, I am in the stage of verifying the mechanical image by physics simulation.

They have demonstrated the effectiveness of UVC, but a clear mathematical model has not yet been constructed.

I hope that other research institutes will pursue the mathematical model of UVC.

Also, since it is in the experimental stage and trial and error is repeated, the comments on variables etc. are very rough.

We attempted to model your joint lengths and angles,

but failed to understand angle k (K0•G‹È‚°Šp“x) and angle x (K0‹rU‚èŠp“x).

Are these approximations or is there something that we are perhaps misunderstanding?

‡@ There was an error in the calculation of xiK0‹rU‚èŠp“xj.

x=asin(x/LEG)@Ë@x = asin(x/k)

‡A Another. There was a discrepancy between the ODE object settings and the parameter settings.

#define LEG 190.0@Ë@#define LEG 180.0

It doesn't matter so much in operation,

but it is mathematically inconsistent, so I fixed it.

Updated core.cpp.

Please refer to the following memo for the explanation about the calculation of the hip joint angle and the knee joint angle.

It seems that K1W and K2W are both used for hip joint lateral writing (ŒÒŠÖß‰¡•ûŒü‘ž—p).

Was this done intentionally? If so, would you be willing to explain the purpose of that to us?

K2W is for hip yaw axis and is not used in this simulation.

I deleted it so that there is no misunderstanding.

Updated core.h and biped.cpp.

Wefve observed that dxi and dyi are used frequently in the UVC section of your code. Even after thorough investigation, we were unable to figure out what specifically these variables represent. Is this something you would be able to show us?

dxi is equivalent to I in PID control,

and is for converting the tilt angle in the pitch direction into the distance in the front-back direction and integrating it.

By superimposing dxi on the stride length,

the front-back direction of the upper body is kept vertical.

dyi has the same idea as dxi, and keeps it vertical with respect to the lateral direction of the upper body.

The basic idea of UVC is to superimpose the inclination of the upper body on the hip joint angle and keep the upper body vertical at all times.

In this simulation, the same effect is obtained by converting the tilt angle into the stride for convenience.

Your code heavily relies on the alternation between support leg and free leg. Many variables are arrays of 2 that house only 0 and 1. In some instances, 0 indicates support leg and 1 indicates the free leg. However, we are not sure if that is the case for all variables of this type, and we theorize that some of them indicate the left and right legs. Is this assumption correct?

jikuasi is a Japanese translation of the pivot foot and represents the foot on the grounded side.

When jikuasi is 0, the right foot is in contact with the ground, and when it is 1,

the left foot is in contact with the ground.

In this video when the hand pushes the robot (in the experiment), how does this trigger the movement in the code?

In the actual machine, the walking motion is started when a certain inclination is detected,

and when the walking speed exceeds a certain speed, the walking speed is maintained.

These are convenient means only for the actual machine and are not implemented in the ODE simulation software.

UVC can be used not only for maintaining balance,

but also for various applications such as walking start control and constant-velocity walking.

You are using head angular movement and rotation,to adjust movement of the body.

Rot = dBodyGetRotation(HEADT.b);

fbRad = asin(Rot[8]);

lrRad = asin(Rot[9]);

Rot = dBodyGetAngularVel(HEADT.b);

fbAV = Rot[1];

lrAV = Rot[0];

What if make invisible sphere (or 2 invisible circles) with the center in loin,

and use it as calculation parameter for torso movement?

fbAV and lrAV are used in the footCont(float x,float y,float h,int s) function,

but they are currently disabled.

In other words, at present, only the angle(fbRad and lrRad) is valid,

so even if you measure the angle with a sphere centered on the waist or calculate with the current head object,

the behavior of the robot will not change.