fix(pose_3d): URDF feet a terra (+0.793m) + sfere polso a zero-pose (Z=0.45)

This commit is contained in:
Adriano Dal Pastro committed 2026-05-21 17:41:31 +02:00
1 parent bfd4cc13fb
commit 7f60238be9
1 file changed
+12 -5
+12 -5
View File
@@ -94,13 +94,18 @@ function checkWorkspace(side, position_m) {
// Posizioni torso e spalle hardcoded (riferimento visivo, non IK)
const TORSO_POS = new THREE.Vector3(0, 0, 0.40);
// Posizione approssimata delle spalle del G1 in base frame (zero-joint pose
// dell'URDF). Usato come fallback visivo quando /state e' offline e per il
// workspace check (raggiungibilita').
// Posizioni di riferimento del G1 in base frame (feet on floor convention,
// URDF alzato di 0.793m). Costanti approssimate, non vengono usate per IK
// vera ma per: (1) workspace check (centro = spalla, raggio = braccio teso),
// (2) fallback delle sfere polso quando /state e' offline (posa zero-joint).
const SHOULDER = {
right: new THREE.Vector3(0.0, -0.18, 1.05),
left: new THREE.Vector3(0.0, 0.18, 1.05),
};
const WRIST_ZERO_POSE = {
right: new THREE.Vector3(0.0, -0.18, 0.45), // braccia giu', polso ~45cm sopra il suolo
left: new THREE.Vector3(0.0, 0.18, 0.45),
};
const ARM_MAX_REACH_M = 0.62; // braccio teso G1 (upper+forearm+palm ~10+25+25 cm)
// ----- URDF loader -----
@@ -133,7 +138,9 @@ async function loadG1Urdf(scene) {
loader.load(
'/static/vendor/g1/g1.urdf',
(robot) => {
// G1 URDF uses Z-up too (Unitree convention) so no rotation needed
// G1 URDF uses Z-up (Unitree convention). Pelvi e' all'origine,
// alziamo il robot di ~0.793m cosi' i piedi toccano la griglia Z=0.
robot.position.z = 0.793;
scene.add(robot);
console.log('[pose_3d] G1 URDF caricato:', robot.name || 'g1');
resolve(robot);
@@ -189,7 +196,7 @@ function initScene() {
// Arms
for (const side of ['right', 'left']) {
const wrist = makeWristMarker(side === 'right' ? 0x4da3ff : 0xff5e7e);
wrist.position.copy(SHOULDER[side]); // posizione di partenza, sarà aggiornata dal polling
wrist.position.copy(WRIST_ZERO_POSE[side]); // posizione fallback "braccia giù"
wrist.userData.side = side;
scene.add(wrist);
state.arms[side] = wrist;