gpue commited on
Commit
14eddff
·
1 Parent(s): 8f3af53

Enhance mujoco_server.py to include joint targets in state broadcasting and update UI synchronization

Browse files

- Added joint targets retrieval in the broadcast_state function to improve control feedback.
- Updated the UI to synchronize joint sliders with joint targets instead of actual positions.
- Modified target position synchronization to reflect target values rather than actual end-effector positions, enhancing clarity in user controls.

Files changed (1) hide show
  1. mujoco_server.py +30 -13
mujoco_server.py CHANGED
@@ -173,6 +173,7 @@ def broadcast_state():
173
  target_euler = env.get_target_orientation()
174
  gripper = env.get_gripper()
175
  joint_pos = env.get_joint_positions()
 
176
  control_mode = env.get_control_mode()
177
  use_orientation = env.get_use_orientation()
178
 
@@ -186,6 +187,7 @@ def broadcast_state():
186
  'target_orientation': {'roll': float(target_euler[0]), 'pitch': float(target_euler[1]), 'yaw': float(target_euler[2])},
187
  'gripper': float(gripper),
188
  'joint_positions': [float(j) for j in joint_pos],
 
189
  'control_mode': control_mode,
190
  'use_orientation': use_orientation,
191
  'steps': int(steps)
@@ -941,27 +943,42 @@ def index():
941
  ((255 - data.gripper) / 255 * 100).toFixed(0) + '% open';
942
  document.getElementById('arm_step_val').innerText = data.steps;
943
 
944
- // Update joint position display and sync sliders
945
  if (data.joint_positions) {
946
  const jp = data.joint_positions;
947
  document.getElementById('joint_pos_display').innerText =
948
  jp.map(j => j.toFixed(2)).join(', ');
949
- // Sync joint sliders with actual positions
 
 
 
 
950
  for (let i = 0; i < 6; i++) {
951
- document.getElementById('joint_' + i).value = jp[i];
952
- document.getElementById('joint_' + i + '_val').innerText = jp[i].toFixed(2);
953
  }
954
  }
955
 
956
- // Sync IK target sliders with actual EE position
957
- if (data.end_effector) {
958
- const ee = data.end_effector;
959
- document.getElementById('target_x').value = ee.x;
960
- document.getElementById('target_x_val').innerText = ee.x.toFixed(2);
961
- document.getElementById('target_y').value = ee.y;
962
- document.getElementById('target_y_val').innerText = ee.y.toFixed(2);
963
- document.getElementById('target_z').value = ee.z;
964
- document.getElementById('target_z_val').innerText = ee.z.toFixed(2);
 
 
 
 
 
 
 
 
 
 
 
965
  }
966
 
967
  // Update control mode display
 
173
  target_euler = env.get_target_orientation()
174
  gripper = env.get_gripper()
175
  joint_pos = env.get_joint_positions()
176
+ joint_targets = env.get_joint_targets()
177
  control_mode = env.get_control_mode()
178
  use_orientation = env.get_use_orientation()
179
 
 
187
  'target_orientation': {'roll': float(target_euler[0]), 'pitch': float(target_euler[1]), 'yaw': float(target_euler[2])},
188
  'gripper': float(gripper),
189
  'joint_positions': [float(j) for j in joint_pos],
190
+ 'joint_targets': [float(j) for j in joint_targets],
191
  'control_mode': control_mode,
192
  'use_orientation': use_orientation,
193
  'steps': int(steps)
 
943
  ((255 - data.gripper) / 255 * 100).toFixed(0) + '% open';
944
  document.getElementById('arm_step_val').innerText = data.steps;
945
 
946
+ // Update joint position display (actual positions)
947
  if (data.joint_positions) {
948
  const jp = data.joint_positions;
949
  document.getElementById('joint_pos_display').innerText =
950
  jp.map(j => j.toFixed(2)).join(', ');
951
+ }
952
+
953
+ // Sync joint sliders with joint targets (not actual positions)
954
+ if (data.joint_targets) {
955
+ const jt = data.joint_targets;
956
  for (let i = 0; i < 6; i++) {
957
+ document.getElementById('joint_' + i).value = jt[i];
958
+ document.getElementById('joint_' + i + '_val').innerText = jt[i].toFixed(2);
959
  }
960
  }
961
 
962
+ // Sync IK target sliders with target position (not actual EE)
963
+ if (data.target) {
964
+ const target = data.target;
965
+ document.getElementById('target_x').value = target.x;
966
+ document.getElementById('target_x_val').innerText = target.x.toFixed(2);
967
+ document.getElementById('target_y').value = target.y;
968
+ document.getElementById('target_y_val').innerText = target.y.toFixed(2);
969
+ document.getElementById('target_z').value = target.z;
970
+ document.getElementById('target_z_val').innerText = target.z.toFixed(2);
971
+ }
972
+
973
+ // Sync orientation sliders with target orientation
974
+ if (data.target_orientation) {
975
+ const ori = data.target_orientation;
976
+ document.getElementById('target_roll').value = ori.roll;
977
+ document.getElementById('target_roll_val').innerText = ori.roll.toFixed(2);
978
+ document.getElementById('target_pitch').value = ori.pitch;
979
+ document.getElementById('target_pitch_val').innerText = ori.pitch.toFixed(2);
980
+ document.getElementById('target_yaw').value = ori.yaw;
981
+ document.getElementById('target_yaw_val').innerText = ori.yaw.toFixed(2);
982
  }
983
 
984
  // Update control mode display