diff --git a/nhf/touhou/houjuu_nue/electronics.py b/nhf/touhou/houjuu_nue/electronics.py index b06ec72..e2ab9d6 100644 --- a/nhf/touhou/houjuu_nue/electronics.py +++ b/nhf/touhou/houjuu_nue/electronics.py @@ -340,6 +340,7 @@ class Flexor: """ motion_span: float arm_radius: Optional[float] = None + pos_smaller: bool = True actuator: LinearActuator = LINEAR_ACTUATOR_50 nut: HexNut = LINEAR_ACTUATOR_HEX_NUT @@ -358,6 +359,7 @@ class Flexor: d_closed=self.actuator.conn_length, theta=math.radians(self.motion_span), r=self.arm_radius, + smaller=self.pos_smaller, ) return r, math.degrees(phi), r_ diff --git a/nhf/touhou/houjuu_nue/joints.py b/nhf/touhou/houjuu_nue/joints.py index 4e15372..5f99f19 100644 --- a/nhf/touhou/houjuu_nue/joints.py +++ b/nhf/touhou/houjuu_nue/joints.py @@ -1074,6 +1074,7 @@ class ElbowJoint(Model): # Rotates the surface of the mount relative to radially inwards flexor_mount_angle_parent: float = 0 flexor_mount_angle_child: float = -90 + flexor_pos_smaller: bool = True flexor_child_arm_radius: Optional[float] = None def __post_init__(self): @@ -1084,6 +1085,7 @@ class ElbowJoint(Model): self.flexor = Flexor( actuator=self.actuator, motion_span=self.motion_span, + pos_smaller=self.flexor_pos_smaller, arm_radius=self.flexor_child_arm_radius, ) diff --git a/nhf/touhou/houjuu_nue/wing.py b/nhf/touhou/houjuu_nue/wing.py index 4cfcf4c..9a91e89 100644 --- a/nhf/touhou/houjuu_nue/wing.py +++ b/nhf/touhou/houjuu_nue/wing.py @@ -40,8 +40,6 @@ WRIST_PARAMS = dict( lip_length=30, child_arm_radius=23.0, parent_arm_radius=30.0, - hole_diam=4.0, - angle_neutral=0.0, actuator=LINEAR_ACTUATOR_10, flexor_offset_angle=30.0, flexor_child_arm_radius=None, @@ -116,12 +114,10 @@ class WingProfile(Model): self.elbow_top_loc = self.elbow_bot_loc * Cq.Location.from2d(0, self.elbow_height) self.wrist_top_loc = self.wrist_bot_loc * Cq.Location.from2d(0, self.wrist_height) - if self.flip: - self.elbow_axle_pos = 1 - self.elbow_axle_pos - self.elbow_axle_loc = self.elbow_bot_loc * Cq.Location.from2d(0, self.elbow_height * self.elbow_axle_pos) - if self.flip: - self.wrist_axle_pos = 1 - self.wrist_axle_pos - self.wrist_axle_loc = self.wrist_bot_loc * Cq.Location.from2d(0, self.wrist_height * self.wrist_axle_pos) + self.elbow_axle_loc = self.elbow_bot_loc * \ + Cq.Location.from2d(0, self.elbow_height * self.elbow_axle_pos) + self.wrist_axle_loc = self.wrist_bot_loc * \ + Cq.Location.from2d(0, self.wrist_height * self.wrist_axle_pos) assert self.elbow_joint.total_thickness < min(self.s1_thickness, self.s2_thickness) assert self.wrist_joint.total_thickness < min(self.s2_thickness, self.s3_thickness) @@ -1068,6 +1064,7 @@ class WingR(WingProfile): wrist_height: float = 60.0 wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( flip=True, + angle_neutral=0.0, **WRIST_PARAMS )) @@ -1292,14 +1289,17 @@ class WingL(WingProfile): elbow_rotate: float = 15.0 elbow_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( angle_neutral=30.0, - flexor_mount_angle_child=180, + flexor_mount_angle_child=170, + flexor_mount_angle_parent=-30, flexor_offset_angle=15, + child_lip_extra_length=5.0, flexor_child_arm_radius=60.0, + flexor_pos_smaller=False, flip=True, **ELBOW_PARAMS )) - wrist_angle: float = -45.0 + wrist_angle: float = 0.0 wrist_bot_loc: Cq.Location = Cq.Location.from2d(460.0, -10.0, -45.0) wrist_height: float = 43.0 wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( @@ -1316,7 +1316,7 @@ class WingL(WingProfile): arrow_height: float = 120.0 flip: bool = True - elbow_axle_pos: float = 0.4 + elbow_axle_pos: float = 0.5 wrist_axle_pos: float = 0.5 elbow_joint_overlap_median: float = 0.5 wrist_joint_overlap_median: float = 0.5 @@ -1326,7 +1326,7 @@ class WingL(WingProfile): assert self.wrist_height <= self.shoulder_joint.height self.wrist_bot_loc = self.wrist_bot_loc.with_angle_2d(self.wrist_angle) - self.wrist_joint.angle_neutral = self.wrist_bot_loc.to2d_rot() + 30.0 + self.wrist_joint.angle_neutral = self.wrist_bot_loc.to2d_rot() + 50.0 self.wrist_rotate = -self.wrist_joint.angle_neutral self.shoulder_joint.flip = True