torso, arms added, working on leg rolling joint

master
Jake Wilkinson 2025-11-21 21:42:13 +08:00
parent e27b8d9132
commit e13ab81d8a
12 changed files with 530 additions and 672 deletions

View File

@ -17,8 +17,8 @@ export class URDFEditor {
this.scene = new THREE.Scene();
this.scene.background = new THREE.Color(0xaaaaaa);
this.camera = new THREE.PerspectiveCamera(45, canvas.clientWidth / canvas.clientHeight, 0.1, 100);
this.camera.position.set(2, 2, 2);
this.camera = new THREE.PerspectiveCamera(60, canvas.clientWidth / canvas.clientHeight, 0.1, 100);
this.camera.position.set(-0.3, 0.5, -0.7);
this.camera.lookAt(0, 0, 0);
this.renderer = new THREE.WebGLRenderer({ canvas, antialias: true });
@ -38,7 +38,7 @@ export class URDFEditor {
this.controls = new OrbitControls(this.camera, this.renderer.domElement);
this.controls.target.set(0, 0.5, 0);
this.controls.target.set(0, 0.1, 0);
this.controls.update();
this.raycaster = new THREE.Raycaster();
@ -230,6 +230,7 @@ export class URDFEditor {
console.log(lower, upper);
const jointTransmission = this.robot.joints[jointName].transmission;
if (!jointTransmission) return;
const encoderRange = jointTransmission.encoderRange / jointTransmission.mechanicalReduction;
const sector = createRotationSector(this.worldAxis, lower, upper, encoderRange);
const indicator = createAngleIndicator(this.worldAxis, this.jointAngles[jointName] ?? 0);
@ -342,6 +343,10 @@ function radiansToTicks(radians, actuator) {
function getJointLimits(jointName, robot) {
const transmission = robot.joints[jointName].transmission;
if (!transmission) {
return { lower: -Math.PI, upper: Math.PI };
}
//console.log(transmission.encoderValidMin, transmission.encoderValidMax);
const lowerRad = ticksToRadians(transmission.encoderValidMin, transmission);
const upperRad = ticksToRadians(transmission.encoderValidMax, transmission);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -3,14 +3,15 @@
<joint name="base_joint" type="fixed">
<parent link="base_footprint" />
<child link="base_link" />
<origin xyz="0 0 0" rpy="0 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
<origin xyz="0 0 0.11" rpy="0 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<box size="0.1 0.05 0.05" />
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Torso.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="base_link-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
@ -25,50 +26,23 @@
<inertial>
<origin xyz="0 0 0" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0"
izz="0.16666666666666666" />
</inertial>
</link>
<joint name="base_link_to_spine_1" type="revolute">
<parent link="base_link"/>
<child link="spine_1"/>
<origin xyz="0 0 0.0337" rpy="0 0 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="spine_1">
<visual>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<geometry>
<box size="0.1 0.05 0.1" />
</geometry>
<material name="spine_1-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<geometry>
<box size="0.1 0.05 0.1" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
</inertial>
</link>
<joint name="spine_1_to_upper_arm_right" type="revolute">
<parent link="spine_1"/>
<child link="upper_arm_right"/>
<origin xyz="0.0624 0 0.0973" rpy="-3.1416 -0.6587 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<joint name="base_link_to_upper_arm_right" type="revolute">
<parent link="base_link" />
<child link="upper_arm_right" />
<origin xyz="0.04 0 0.048" rpy="0 0 0" />
<axis xyz="-0.9997 -0.0114 0.0229" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="upper_arm_right">
<visual>
<origin xyz="0 0 0.03" rpy="0 0 0" />
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<box size="0.03 0.03 0.06" />
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Arm_Right.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="upper_arm_right-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
@ -83,413 +57,314 @@
<inertial>
<origin xyz="0 0 0.03" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
</inertial>
</link>
<joint name="upper_arm_right_to_lower_arm_right" type="revolute">
<parent link="upper_arm_right"/>
<child link="lower_arm_right"/>
<origin xyz="0.0 0 .065" rpy="0 0 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="lower_arm_right">
<visual>
<origin xyz="0 0 0.025" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.05" />
</geometry>
<material name="lower_arm_right-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.025" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.05" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.025" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
</inertial>
</link>
<joint name="lower_arm_right_to_hand_right" type="revolute">
<parent link="lower_arm_right"/>
<child link="hand_right"/>
<origin xyz="0 0 0.055" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="hand_right">
<visual>
<origin xyz="0 0 0.015" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.03" />
</geometry>
<material name="hand_right-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.015" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.03" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.015" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0"
izz="0.16666666666666666" />
</inertial>
</link>
<!-- Left Upper Arm -->
<joint name="spine_1_to_upper_arm_left" type="revolute">
<parent link="spine_1"/>
<child link="upper_arm_left"/>
<origin xyz="-0.0624 0 0.0973" rpy="3.1416 0.6587 0"/>
<axis xyz="-1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<joint name="base_link_to_upper_arm_left" type="revolute">
<parent link="base_link" />
<child link="upper_arm_left" />
<origin xyz="-0.04 0 0.048" rpy="0 0 0" />
<axis xyz="-1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="upper_arm_left">
<link name="upper_arm_left">
<visual>
<origin xyz="0 0 0.03" rpy="0 0 0"/>
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<box size="0.03 0.03 0.06"/>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Arm_Left.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="upper_arm_left-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1"/>
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.03" rpy="0 0 0"/>
<origin xyz="0 0 0.03" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.06"/>
<box size="0.03 0.03 0.06" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.03" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666"/>
<origin xyz="0 0 0.03" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0"
izz="0.16666666666666666" />
</inertial>
</link>
</link>
<!-- Left Lower Arm -->
<joint name="upper_arm_left_to_lower_arm_left" type="revolute">
<parent link="upper_arm_left"/>
<child link="lower_arm_left"/>
<origin xyz="0.0 0 0.065" rpy="0 0 0"/>
<axis xyz="-1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="lower_arm_left">
<visual>
<origin xyz="0 0 0.025" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.05"/>
</geometry>
<material name="lower_arm_left-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0.025" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.05"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.025" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666"/>
</inertial>
</link>
<!-- Left Hand -->
<joint name="lower_arm_left_to_hand_left" type="revolute">
<parent link="lower_arm_left"/>
<child link="hand_left"/>
<origin xyz="0 0 0.055" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="hand_left">
<visual>
<origin xyz="0 0 0.015" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.03"/>
</geometry>
<material name="hand_left-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0.015" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.03"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.015" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666"/>
</inertial>
</link>
<joint name="base_link_to_upper_leg_right" type="revolute">
<joint name="base_link_to_hip_right" type="revolute">
<parent link="base_link" />
<child link="hip_right" />
<origin xyz="0.024 0.005 -0.023" rpy="0 0 0" />
<axis xyz="0 0 1" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="hip_right">
<visual>
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Hip_Right.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="upper_leg_right-material">
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<joint name="hip_right_to_upper_leg_right" type="revolute">
<parent link="hip_right" />
<child link="upper_leg_right" />
<origin xyz="0.035 0 -0.035" rpy="0 0 0" />
<axis xyz="1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/> </joint>
<origin xyz="0.009 0.0 -0.023" rpy="0 0 0" />
<axis xyz="1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="upper_leg_right">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<box size="0.04 0.04 0.07"/>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Upper_Leg_Right.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="upper_leg_right-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07"/>
<box size="0.04 0.04 0.07" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
</link>
<joint name="upper_leg_right_to_lower_leg_right" type="revolute">
<parent link="upper_leg_right"/>
<child link="lower_leg_right"/>
<origin xyz="0 0 -0.075" rpy="0 0 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<parent link="upper_leg_right" />
<child link="lower_leg_right" />
<origin xyz="-0.001 0.0075 -0.0575" rpy="-0.14 0 0" />
<axis xyz="-1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="lower_leg_right">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<box size="0.04 0.04 0.07"/>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Lower_Leg_Right.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="lower_leg_right-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07"/>
<box size="0.04 0.04 0.07" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
</inertial>
</link>
<joint name="lower_leg_right_to_foot_right" type="revolute">
<parent link="lower_leg_right"/>
<child link="foot_right"/>
<origin xyz="0 0 -0.075" rpy="0 0 0"/>
<axis xyz="-1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="foot_right">
<visual>
<origin xyz="0 0.02 -0.01" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.08 0.02"/>
</geometry>
<material name="foot_right-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0.02 -0.01" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.08 0.02"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0.02 -0.01" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
</inertial>
</link>
<!-- Left Upper Leg -->
<joint name="base_link_to_upper_leg_left" type="revolute">
<parent link="base_link"/>
<child link="upper_leg_left"/>
<origin xyz="-0.035 0 -0.035" rpy="0 0 0"/>
<axis xyz="1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="upper_leg_left">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.04 0.07"/>
</geometry>
<material name="upper_leg_left-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.04 0.07"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
</inertial>
</link>
<!-- Left Lower Leg -->
<joint name="upper_leg_left_to_lower_leg_left" type="revolute">
<parent link="upper_leg_left"/>
<child link="lower_leg_left"/>
<origin xyz="0 0 -0.075" rpy="0 0 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="lower_leg_left">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.04 0.07"/>
</geometry>
<material name="lower_leg_left-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.04 0.07"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
</inertial>
</link>
<!-- Left Foot -->
<joint name="lower_leg_left_to_foot_left" type="revolute">
<parent link="lower_leg_left"/>
<child link="foot_left"/>
<origin xyz="0 0 -0.075" rpy="0 0 0"/>
<axis xyz="-1 0 0"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="foot_left">
<visual>
<origin xyz="0 0.02 -0.01" rpy="0.5 0 0"/>
<geometry>
<box size="0.04 0.08 0.02"/>
</geometry>
<material name="foot_left-material">
<color rgba="0.0021 0.0497 0.4851 1"/>
</material>
</visual>
<collision>
<origin xyz="0 0.02 -0.01" rpy="0 0 0"/>
<geometry>
<box size="0.04 0.08 0.02"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0.02 -0.01" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667"/>
</inertial>
</link>
<joint name="spine_1_to_neck" type="revolute">
<parent link="spine_1"/>
<child link="neck"/>
<origin xyz="0 0 0.12" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="neck">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.03" />
</geometry>
<material name="neck-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.03 0.03 0.03" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0" rpy="0 0 0" />
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<joint name="neck_to_head" type="revolute">
<parent link="neck"/>
<child link="head"/>
<origin xyz="0 0 0.04" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<joint name="lower_leg_right_to_foot_right" type="revolute">
<parent link="lower_leg_right" />
<child link="foot_right" />
<origin xyz="0 0 -0.075" rpy="0 0 0" />
<axis xyz="-1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="foot_right">
<visual>
<origin xyz="0 0.02 -0.01" rpy="0 0 0" />
<geometry>
<box size="0.04 0.08 0.02" />
</geometry>
<material name="foot_right-material">
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0.02 -0.01" rpy="0 0 0" />
<geometry>
<box size="0.04 0.08 0.02" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0.02 -0.01" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<!-- Left Upper Leg -->
<joint name="base_link_to_upper_leg_left" type="revolute">
<parent link="base_link" />
<child link="upper_leg_left" />
<origin xyz="-0.035 0 -0.035" rpy="0 0 0" />
<axis xyz="1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="upper_leg_left">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07" />
</geometry>
<material name="upper_leg_left-material">
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<!-- Left Lower Leg -->
<joint name="upper_leg_left_to_lower_leg_left" type="revolute">
<parent link="upper_leg_left" />
<child link="lower_leg_left" />
<origin xyz="0 0 -0.075" rpy="0 0 0" />
<axis xyz="-0.9997 -0.0114 0.0229" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="lower_leg_left">
<visual>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07" />
</geometry>
<material name="lower_leg_left-material">
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<geometry>
<box size="0.04 0.04 0.07" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 -0.035" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<!-- Left Foot -->
<joint name="lower_leg_left_to_foot_left" type="revolute">
<parent link="lower_leg_left" />
<child link="foot_left" />
<origin xyz="0 0 -0.075" rpy="0 0 0" />
<axis xyz="-1 0 0" />
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="foot_left">
<visual>
<origin xyz="0 0.02 -0.01" rpy="0.5 0 0" />
<geometry>
<box size="0.04 0.08 0.02" />
</geometry>
<material name="foot_left-material">
<color rgba="0.0021 0.0497 0.4851 1" />
</material>
</visual>
<collision>
<origin xyz="0 0.02 -0.01" rpy="0 0 0" />
<geometry>
<box size="0.04 0.08 0.02" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0.02 -0.01" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.1667" ixy="0" ixz="0" iyy="0.1667" iyz="0" izz="0.1667" />
</inertial>
</link>
<!-- Spine to yaw joint -->
<joint name="base_link_to_neck_yaw" type="revolute">
<parent link="base_link" />
<child link="neck_yaw_link" />
<origin xyz="0 0 0.065" rpy="0 0 0" />
<axis xyz="0 0 1" /> <!-- yaw/pan around Z -->
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="neck_yaw_link" />
<!-- Pitch joint -->
<joint name="neck_pitch" type="revolute">
<parent link="neck_yaw_link" />
<child link="neck_pitch_link" />
<origin xyz="0 0 0" rpy="0 0 0" />
<axis xyz="1 0 0" /> <!-- pitch around X -->
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<link name="neck_pitch_link" />
<!-- Roll joint -->
<joint name="neck_roll" type="revolute">
<parent link="neck_pitch_link" />
<child link="head" />
<origin xyz="0 0 0" rpy="0 0 0" />
<axis xyz="0 1 0" /> <!-- roll around Y -->
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5" />
</joint>
<!-- Head (includes fused neck geometry) -->
<link name="head">
<visual>
<origin xyz="0 0 0" rpy="-1.5745 3.149 0" />
<geometry>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Face.glb" scale="0.001 0.001 0.001"/>
<mesh filename="package://Little_Sophia_Face/meshes/Little_Sophia_Face.glb"
scale="0.001 0.001 0.001" />
</geometry>
<material name="head-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
<color rgba="0.002 0.05 0.48 1" />
</material>
</visual>
<collision>
@ -501,29 +376,14 @@
<inertial>
<origin xyz="0 0 0" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
<inertia ixx="0.16" ixy="0" ixz="0" iyy="0.16" iyz="0" izz="0.16" />
</inertial>
</link>
<transmission name="spine_1_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="base_link_to_spine_1">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
<encoderValidMin>200</encoderValidMin>
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
<transmission name="upper_arm_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_upper_arm_left">
<joint name="base_joint">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
@ -534,7 +394,21 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="upper_arm_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="base_link_to_upper_arm_left">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
<encoderValidMin>200</encoderValidMin>
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
<transmission name="lower_arm_left">
<type>transmission_interface/SimpleTransmission</type>
@ -549,7 +423,7 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="hand_left">
<type>transmission_interface/SimpleTransmission</type>
@ -564,11 +438,11 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="upper_arm_right">
<transmission name="upper_arm_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_upper_arm_right">
<joint name="base_link_to_upper_arm_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
@ -579,14 +453,15 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="lower_arm_right">
<transmission name="hip_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="upper_arm_right_to_lower_arm_right">
<joint name="base_link_to_hip_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
<actuator name="hip_right">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
@ -594,24 +469,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="hand_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="lower_arm_right_to_hand_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
<encoderValidMin>200</encoderValidMin>
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
<transmission name="upper_leg_right">
<transmission name="upper_leg_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="base_link_to_upper_leg_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -624,9 +484,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="lower_leg_right">
<transmission name="lower_leg_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="upper_leg_right_to_lower_leg_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -639,9 +499,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="foot_right">
<transmission name="foot_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="lower_leg_right_to_foot_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -654,9 +514,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="upper_leg_left">
<transmission name="upper_leg_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="base_link_to_upper_leg_left">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -669,9 +529,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="lower_leg_left">
<transmission name="lower_leg_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="upper_leg_left_to_lower_leg_left">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -684,9 +544,9 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<transmission name="foot_left">
<transmission name="foot_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="lower_leg_left_to_foot_left">
<hardwareInterface>PositionJointInterface</hardwareInterface>
@ -699,13 +559,14 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
<transmission name="neck_base">
</transmission>
<!-- Yaw (pan) transmission -->
<transmission name="neck_yaw_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_neck">
<joint name="base_link_to_neck_yaw">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="neck_motor_base">
<actuator name="neck_motor_yaw">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
@ -713,13 +574,15 @@
<encoderValidMax>3500</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
<transmission name="neck_tip">
</transmission>
<!-- Pitch transmission -->
<transmission name="neck_pitch_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="neck_to_head">
<joint name="neck_pitch">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="neck_motor_tip">
<actuator name="neck_motor_pitch">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
@ -727,6 +590,23 @@
<encoderValidMax>4095</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</transmission>
<!-- Roll transmission -->
<transmission name="neck_roll_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="neck_roll">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="neck_motor_roll">
<mechanicalReduction>1</mechanicalReduction>
<hardwareInterface>PositionJointInterface</hardwareInterface>
<encoderTicks>4096</encoderTicks>
<encoderValidMin>500</encoderValidMin>
<encoderValidMax>4095</encoderValidMax>
<encoderRange>270</encoderRange>
</actuator>
</transmission>
</robot>

View File

@ -28,42 +28,15 @@
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
</inertial>
</link>
<joint name="base_link_to_spine_1" type="revolute">
<joint name="base_link_to_base_link" type="revolute">
<parent link="base_link"/>
<child link="spine_1"/>
<child link="base_link"/>
<origin xyz="0 0 0.0337" rpy="0 0 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="spine_1">
<visual>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<geometry>
<box size="0.1 0.05 0.1" />
</geometry>
<material name="spine_1-material">
<color rgba="0.0021246888847058823 0.04970656597728775 0.48514994004665124 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<geometry>
<box size="0.1 0.05 0.1" />
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.05" rpy="0 0 0" />
<mass value="1" />
<inertia ixx="0.16666666666666666" ixy="0" ixz="0" iyy="0.16666666666666666" iyz="0" izz="0.16666666666666666" />
</inertial>
</link>
<joint name="spine_1_to_upper_arm_right" type="revolute">
<parent link="spine_1"/>
<child link="upper_arm_right"/>
<origin xyz="0.0624 0 0.0973" rpy="-3.1416 -0.6587 0"/>
<axis xyz="-0.9997 -0.0114 0.0229"/>
<limit effort="1000.0" lower="-1" upper="1" velocity="0.5"/>
</joint>
<link name="upper_arm_right">
<visual>
<origin xyz="0 0 0.03" rpy="0 0 0" />
@ -146,8 +119,8 @@
</link>
<!-- Left Upper Arm -->
<joint name="spine_1_to_upper_arm_left" type="revolute">
<parent link="spine_1"/>
<joint name="base_link_to_upper_arm_left" type="revolute">
<parent link="base_link"/>
<child link="upper_arm_left"/>
<origin xyz="-0.0624 0 0.0973" rpy="3.1416 0.6587 0"/>
<axis xyz="-1 0 0"/>
@ -443,8 +416,8 @@
</link>
<joint name="spine_1_to_neck" type="revolute">
<parent link="spine_1"/>
<joint name="base_link_to_neck" type="revolute">
<parent link="base_link"/>
<child link="neck"/>
<origin xyz="0 0 0.12" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
@ -506,9 +479,9 @@
</link>
<transmission name="spine_1_trans">
<transmission name="base_link_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="base_link_to_spine_1">
<joint name="base_link_to_base_link">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
@ -523,7 +496,7 @@
<transmission name="upper_arm_left">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_upper_arm_left">
<joint name="base_link_to_upper_arm_left">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
@ -568,7 +541,7 @@
<transmission name="upper_arm_right">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_upper_arm_right">
<joint name="base_link_to_upper_arm_right">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="spine_motor_1">
@ -702,7 +675,7 @@
</transmission>
<transmission name="neck_base">
<type>transmission_interface/SimpleTransmission</type>
<joint name="spine_1_to_neck">
<joint name="base_link_to_neck">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="neck_motor_base">