Вращающаяся группа тел в пимунке - PullRequest
0 голосов
/ 06 июня 2018

Я хочу сделать двумерную хватающую руку в пимунке, которая может вращаться, двигаться вверх / вниз и в стороны и сжимать или вытягивать пальцы, в основном, рука выглядит как буква «U».Я попытался сделать это, сделав 3 отдельных тела (ладонь, левый палец, правый палец) и соединить его несколькими соединениями (PinJoint и, возможно, несколько другим).Проблема в том, что когда я поворачиваю ладонь (изменяя угол или angular_velocity), пальцы начинают странно себя вести.Также я хочу сделать пальцы растяжимыми / сжимаемыми.

Вот мой код захвата:

class Gripper(pymunk.Body):

def __init__(self, space):
    super().__init__(2**8, pymunk.inf)
    self.position = (100, 25)

    palm = pymunk.Segment(self, (-7, 0), (7, 0), 2)

    # Left gripper side
    self.l_phalanx_body = pymunk.Body(2**8, pymunk.inf)
    self.l_phalanx_body.position = (self.position.x - 7, self.position.y)

    phalanx_l1 = pymunk.Segment(self.l_phalanx_body, (0, 0), (0, 16), 2)
    phalanx_l2 = pymunk.Segment(self.l_phalanx_body, (0, 16), (4, 16), 2)

    l_joint = pymunk.PinJoint(self, self.l_phalanx_body, (-7, 0))
    # l_rot_joint = pymunk.DampedRotarySpring(self, self.l_phalanx_body, 0, 1, 1)

    # Right gripper side
    self.r_phalanx_body = pymunk.Body(2**8, pymunk.inf)
    self.r_phalanx_body.position = (self.position.x + 7, self.position.y)

    phalanx_r1 = pymunk.Segment(self.r_phalanx_body, (0, 0), (0, 16), 2)
    phalanx_r2 = pymunk.Segment(self.r_phalanx_body, (0, 16), (-4, 16), 2)

    r_joint = pymunk.PinJoint(self, self.r_phalanx_body, (7, 0), (0, 0))

    shape_filter = pymunk.ShapeFilter(group=1)
    palm.filter = shape_filter
    phalanx_l1.filter = shape_filter
    phalanx_l2.filter = shape_filter
    phalanx_r1.filter = shape_filter
    phalanx_r2.filter = shape_filter

    space.add(
        self, palm,
        l_joint,
        # l_rot_joint,
        self.l_phalanx_body,
        phalanx_l1, phalanx_l2,
        r_joint, self.r_phalanx_body,
        phalanx_r1, phalanx_r2,
        )

1 Ответ

0 голосов
/ 13 июня 2018

Может быть, потому что вы вращаетесь, устанавливая скорость напрямую.Вместо этого вы можете попробовать вращаться с ограничением SimpleMotor между корпусом ладони и пространственным статическим телом.Вот API-документы SimpleMotor: http://www.pymunk.org/en/latest/pymunk.constraint.html#pymunk.constraint.SimpleMotor

...