cosplay: Touhou/Houjuu Nue #4

Open
aniva wants to merge 189 commits from touhou/houjuu-nue into main
3 changed files with 16 additions and 12 deletions
Showing only changes of commit a6ddfec552 - Show all commits

View File

@ -340,6 +340,7 @@ class Flexor:
""" """
motion_span: float motion_span: float
arm_radius: Optional[float] = None arm_radius: Optional[float] = None
pos_smaller: bool = True
actuator: LinearActuator = LINEAR_ACTUATOR_50 actuator: LinearActuator = LINEAR_ACTUATOR_50
nut: HexNut = LINEAR_ACTUATOR_HEX_NUT nut: HexNut = LINEAR_ACTUATOR_HEX_NUT
@ -358,6 +359,7 @@ class Flexor:
d_closed=self.actuator.conn_length, d_closed=self.actuator.conn_length,
theta=math.radians(self.motion_span), theta=math.radians(self.motion_span),
r=self.arm_radius, r=self.arm_radius,
smaller=self.pos_smaller,
) )
return r, math.degrees(phi), r_ return r, math.degrees(phi), r_

View File

@ -1074,6 +1074,7 @@ class ElbowJoint(Model):
# Rotates the surface of the mount relative to radially inwards # Rotates the surface of the mount relative to radially inwards
flexor_mount_angle_parent: float = 0 flexor_mount_angle_parent: float = 0
flexor_mount_angle_child: float = -90 flexor_mount_angle_child: float = -90
flexor_pos_smaller: bool = True
flexor_child_arm_radius: Optional[float] = None flexor_child_arm_radius: Optional[float] = None
def __post_init__(self): def __post_init__(self):
@ -1084,6 +1085,7 @@ class ElbowJoint(Model):
self.flexor = Flexor( self.flexor = Flexor(
actuator=self.actuator, actuator=self.actuator,
motion_span=self.motion_span, motion_span=self.motion_span,
pos_smaller=self.flexor_pos_smaller,
arm_radius=self.flexor_child_arm_radius, arm_radius=self.flexor_child_arm_radius,
) )

View File

@ -40,8 +40,6 @@ WRIST_PARAMS = dict(
lip_length=30, lip_length=30,
child_arm_radius=23.0, child_arm_radius=23.0,
parent_arm_radius=30.0, parent_arm_radius=30.0,
hole_diam=4.0,
angle_neutral=0.0,
actuator=LINEAR_ACTUATOR_10, actuator=LINEAR_ACTUATOR_10,
flexor_offset_angle=30.0, flexor_offset_angle=30.0,
flexor_child_arm_radius=None, 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.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) self.wrist_top_loc = self.wrist_bot_loc * Cq.Location.from2d(0, self.wrist_height)
if self.flip: self.elbow_axle_loc = self.elbow_bot_loc * \
self.elbow_axle_pos = 1 - self.elbow_axle_pos Cq.Location.from2d(0, self.elbow_height * self.elbow_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 * \
if self.flip: Cq.Location.from2d(0, self.wrist_height * self.wrist_axle_pos)
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)
assert self.elbow_joint.total_thickness < min(self.s1_thickness, self.s2_thickness) 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) 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_height: float = 60.0
wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint(
flip=True, flip=True,
angle_neutral=0.0,
**WRIST_PARAMS **WRIST_PARAMS
)) ))
@ -1292,14 +1289,17 @@ class WingL(WingProfile):
elbow_rotate: float = 15.0 elbow_rotate: float = 15.0
elbow_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( elbow_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint(
angle_neutral=30.0, angle_neutral=30.0,
flexor_mount_angle_child=180, flexor_mount_angle_child=170,
flexor_mount_angle_parent=-30,
flexor_offset_angle=15, flexor_offset_angle=15,
child_lip_extra_length=5.0,
flexor_child_arm_radius=60.0, flexor_child_arm_radius=60.0,
flexor_pos_smaller=False,
flip=True, flip=True,
**ELBOW_PARAMS **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_bot_loc: Cq.Location = Cq.Location.from2d(460.0, -10.0, -45.0)
wrist_height: float = 43.0 wrist_height: float = 43.0
wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint( wrist_joint: ElbowJoint = field(default_factory=lambda: ElbowJoint(
@ -1316,7 +1316,7 @@ class WingL(WingProfile):
arrow_height: float = 120.0 arrow_height: float = 120.0
flip: bool = True flip: bool = True
elbow_axle_pos: float = 0.4 elbow_axle_pos: float = 0.5
wrist_axle_pos: float = 0.5 wrist_axle_pos: float = 0.5
elbow_joint_overlap_median: float = 0.5 elbow_joint_overlap_median: float = 0.5
wrist_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 assert self.wrist_height <= self.shoulder_joint.height
self.wrist_bot_loc = self.wrist_bot_loc.with_angle_2d(self.wrist_angle) 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.wrist_rotate = -self.wrist_joint.angle_neutral
self.shoulder_joint.flip = True self.shoulder_joint.flip = True