⬅️ Fixes direction for the kinematic result

This commit is contained in:
Rune Harlyk
2024-07-17 22:45:26 +02:00
committed by Rune Harlyk
parent 1ce4da5d11
commit 080c18cf19
2 changed files with 28 additions and 28 deletions
+27 -27
View File
@@ -36,7 +36,7 @@
let kinematic = new Kinematic() let kinematic = new Kinematic()
let gaitPlanner = new GaitPlanner() let gaitPlanner = new GaitPlanner()
const dir = [-1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1] const dir = [1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1]
const Lp = [ const Lp = [
[100, -100, 100, 1], [100, -100, 100, 1],
[100, -100, -100, 1], [100, -100, -100, 1],
@@ -54,9 +54,9 @@
'omega': 0, 'omega': 0,
'phi': 0, 'phi': 0,
'psi': 0, 'psi': 0,
'x': 0, 'xm': 0,
'y': 70, 'ym': 70,
'z': 0 'zm': 0
} }
onMount(async () => { onMount(async () => {
@@ -77,15 +77,15 @@
s: buffer[6], s: buffer[6],
}; };
settings.y = (data.h+128)*0.75 settings.ym = (data.h+128)*0.75
switch (get(mode)) { switch (get(mode)) {
case ModesEnum.Stand: case ModesEnum.Stand:
settings.omega = 0 settings.omega = 0
settings.phi = data.rx / 4 settings.phi = data.rx / 4
settings.psi = data.ry / 4 settings.psi = data.ry / 4
settings.x = data.ly / 2 settings.xm = data.ly / 2
settings.z = data.lx / 2 settings.zm = data.lx / 2
break; break;
} }
}) })
@@ -116,9 +116,9 @@
kinematic.add(settings, 'omega', -20, 20).onChange(updateKinematicPosition).listen(); kinematic.add(settings, 'omega', -20, 20).onChange(updateKinematicPosition).listen();
kinematic.add(settings, 'phi', -30, 30).onChange(updateKinematicPosition).listen(); kinematic.add(settings, 'phi', -30, 30).onChange(updateKinematicPosition).listen();
kinematic.add(settings, 'psi', -20, 15).onChange(updateKinematicPosition).listen(); kinematic.add(settings, 'psi', -20, 15).onChange(updateKinematicPosition).listen();
kinematic.add(settings, 'x', -90, 90).onChange(updateKinematicPosition) kinematic.add(settings, 'xm', -90, 90).onChange(updateKinematicPosition)
kinematic.add(settings, 'y', 0, 200).onChange(updateKinematicPosition) kinematic.add(settings, 'ym', 0, 200).onChange(updateKinematicPosition)
kinematic.add(settings, 'z', -130, 130).onChange(updateKinematicPosition) kinematic.add(settings, 'zm', -130, 130).onChange(updateKinematicPosition)
const visibility = gui_panel.addFolder('Visualization'); const visibility = gui_panel.addFolder('Visualization');
visibility.add(settings, 'Trace feet') visibility.add(settings, 'Trace feet')
@@ -130,9 +130,9 @@
settings.omega, settings.omega,
settings.phi, settings.phi,
settings.psi, settings.psi,
settings.x, settings.xm,
settings.y, settings.ym,
settings.z settings.zm
]) ])
} }
@@ -210,9 +210,9 @@
omega: settings.omega, omega: settings.omega,
phi: settings.phi, phi: settings.phi,
psi: settings.psi, psi: settings.psi,
xm: settings.x, xm: settings.xm,
ym: settings.y, ym: settings.ym,
zm: settings.z, zm: settings.zm,
feet: Lp feet: Lp
} }
@@ -223,10 +223,11 @@
const orient_robot = (robot: URDFRobot, toes:Vector3[]) => { const orient_robot = (robot: URDFRobot, toes:Vector3[]) => {
if (settings['Robot transform controls'] || !settings['Auto orient robot']) return if (settings['Robot transform controls'] || !settings['Auto orient robot']) return
robot.position.y = robot.position.y - Math.min(...toes.map(toe => toe.y)); robot.position.y = robot.position.y - Math.min(...toes.map(toe => toe.y));
robot.position.z = lerp(robot.position.z, -settings.x / 100, 0.1); robot.position.z = lerp(robot.position.z, -settings.xm / 100, 0.1);
robot.position.x = lerp(robot.position.x, -settings.zm / 100, 0.1);
robot.rotation.z = lerp(robot.rotation.z, degToRad(settings.phi + $mpu.heading + 90), 0.1); robot.rotation.z = lerp(robot.rotation.z, degToRad(-settings.phi + $mpu.heading + 90), 0.1);
robot.rotation.y = lerp(robot.rotation.y, degToRad(settings.omega - settings.z / 2.5), 0.1); robot.rotation.y = lerp(robot.rotation.y, degToRad(settings.omega), 0.1);
robot.rotation.x = lerp(robot.rotation.x, degToRad(settings.psi - 90), 0.1); robot.rotation.x = lerp(robot.rotation.x, degToRad(settings.psi - 90), 0.1);
} }
@@ -235,15 +236,15 @@
sceneManager.orbit.target = robot.position.clone() sceneManager.orbit.target = robot.position.clone()
} }
const update_gate = () => { const update_gait = () => {
if (get(mode) != ModesEnum.Walk) return if (get(mode) != ModesEnum.Walk) return
const body_state = { const body_state = {
omega: settings.omega, omega: settings.omega,
phi: settings.phi, phi: settings.phi,
psi: settings.psi, psi: settings.psi,
xm: settings.x, xm: settings.xm,
ym: settings.y, ym: settings.ym,
zm: settings.z, zm: settings.zm,
feet: Lp feet: Lp
} }
gaitPlanner.step(body_state, 0.1) gaitPlanner.step(body_state, 0.1)
@@ -255,8 +256,8 @@
settings.omega = radToDeg(robot.rotation.y) settings.omega = radToDeg(robot.rotation.y)
settings.phi = radToDeg(robot.rotation.z) + $mpu.heading -90 settings.phi = radToDeg(robot.rotation.z) + $mpu.heading -90
settings.psi = radToDeg(robot.rotation.x) + 90 settings.psi = radToDeg(robot.rotation.x) + 90
settings.x = robot.position.z * 100 settings.xm = robot.position.z * 100
settings.z = -robot.position.x * 100 settings.zm = -robot.position.x * 100
} }
const updateTargetPosition = () => { const updateTargetPosition = () => {
@@ -272,7 +273,7 @@
renderTraceLines(toes) renderTraceLines(toes)
update_camera(robot) update_camera(robot)
update_gate() update_gait()
calculate_kinematics() calculate_kinematics()
update_robot_position(robot) update_robot_position(robot)
@@ -293,7 +294,6 @@
updateTargetPosition(); updateTargetPosition();
}; };
</script> </script>
<svelte:window on:resize={sceneManager.fillParent} /> <svelte:window on:resize={sceneManager.fillParent} />
+1 -1
View File
@@ -144,7 +144,7 @@ class MotionService {
0, 0,
}; };
float dir[12] = {-1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1}; float dir[12] = {1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1};
float default_feet_positions[4][4] = { float default_feet_positions[4][4] = {
{100, -100, 100, 1}, {100, -100, -100, 1}, {-100, -100, 100, 1}, {-100, -100, -100, 1}}; {100, -100, 100, 1}, {100, -100, -100, 1}, {-100, -100, 100, 1}, {-100, -100, -100, 1}};