コード例 #1
0
ファイル: rigid_body_tree_test.py プロジェクト: mposa/drake
    def test_joints_api(self):
        # Verify construction from both Isometry3d and 4x4 arrays,
        # and sanity-check that the accessors function.
        name = "z"
        prismatic_joint_np = PrismaticJoint(name, np.eye(4),
                                            np.array([0., 0., 1.]))
        prismatic_joint_isom = PrismaticJoint(name, Isometry3.Identity(),
                                              np.array([0., 0., 1.]))
        self.assertEqual(prismatic_joint_isom.get_num_positions(), 1)
        self.assertEqual(prismatic_joint_isom.get_name(), name)

        name = "theta"
        revolute_joint_np = RevoluteJoint(name, np.eye(4),
                                          np.array([0., 0., 1.]))
        revolute_joint_isom = RevoluteJoint(name, Isometry3.Identity(),
                                            np.array([0., 0., 1.]))
        self.assertEqual(revolute_joint_isom.get_num_positions(), 1)
        self.assertEqual(revolute_joint_isom.get_name(), name)
コード例 #2
0
    def test_joints_api(self):
        # Verify construction from both Isometry3d and 4x4 arrays,
        # and sanity-check that the accessors function.
        name = "z"
        prismatic_joint_np = PrismaticJoint(name, np.eye(4),
                                            np.array([0., 0., 1.]))
        prismatic_joint_isom = PrismaticJoint(name, Isometry3.Identity(),
                                              np.array([0., 0., 1.]))
        self.assertEqual(prismatic_joint_isom.get_num_positions(), 1)
        self.assertEqual(prismatic_joint_isom.get_name(), name)

        name = "theta"
        revolute_joint_np = RevoluteJoint(name, np.eye(4),
                                          np.array([0., 0., 1.]))
        revolute_joint_isom = RevoluteJoint(name, Isometry3.Identity(),
                                            np.array([0., 0., 1.]))
        self.assertEqual(revolute_joint_isom.get_num_positions(), 1)
        self.assertEqual(revolute_joint_isom.get_name(), name)
コード例 #3
0
    def test_rigid_body_tree_programmatic_construction(self):
        # Tests RBT programmatic construction methods by assembling
        # a simple RBT with a prismatic and revolute joint, with
        # both visual and collision geometry on the last joint.
        rbt = RigidBodyTree()
        world_body = rbt.world()

        # body_1 is connected to the world via a prismatic joint along
        # the +z axis.
        body_1 = RigidBody()
        body_1.set_name("body_1")
        body_1_joint = PrismaticJoint("z", np.eye(4), np.array([0., 0., 1.]))
        body_1.add_joint(world_body, body_1_joint)
        rbt.add_rigid_body(body_1)

        # body_2 is connected to body_1 via a revolute joint around the z-axis.
        body_2 = RigidBody()
        body_2.set_name("body_2")
        body_2_joint = RevoluteJoint("theta", np.eye(4), np.array([0., 0.,
                                                                   1.]))
        body_2.add_joint(body_1, body_2_joint)
        box_element = shapes.Box([1.0, 1.0, 1.0])
        box_visual_element = shapes.VisualElement(box_element, np.eye(4),
                                                  [1., 0., 0., 1.])
        body_2.AddVisualElement(box_visual_element)
        body_2_visual_elements = body_2.get_visual_elements()
        rbt.add_rigid_body(body_2)

        box_collision_element = CollisionElement(box_element, np.eye(4))
        box_collision_element.set_body(body_2)
        rbt.addCollisionElement(box_collision_element, body_2, "default")

        # Define a collision filter group containing bodies 1 and 2 and make
        # that group ignore itself.
        rbt.DefineCollisionFilterGroup(name="test_group")
        rbt.AddCollisionFilterGroupMember(group_name="test_group",
                                          body_name="body_1",
                                          model_id=0)
        rbt.AddCollisionFilterGroupMember(group_name="test_group",
                                          body_name="body_2",
                                          model_id=0)
        rbt.AddCollisionFilterIgnoreTarget("test_group", "test_group")

        self.assertFalse(rbt.initialized())
        rbt.compile()
        self.assertTrue(rbt.initialized())

        # The RBT's position vector should now be [z, theta].
        self.assertEqual(body_1.get_position_start_index(), 0)
        self.assertEqual(body_2.get_position_start_index(), 1)

        self.assertIsNotNone(
            rbt.FindCollisionElement(body_2.get_collision_element_ids()[0]))
コード例 #4
0
    def test_rigid_body_tree_programmatic_construction(self):
        # Tests RBT programmatic construction methods by assembling
        # a simple RBT with a prismatic and revolute joint, with
        # both visual and collision geometry on the last joint.
        rbt = RigidBodyTree()
        world_body = rbt.world()

        # body_1 is connected to the world via a prismatic joint along
        # the +z axis.
        body_1 = RigidBody()
        body_1.set_name("body_1")
        body_1_joint = PrismaticJoint("z", np.eye(4),
                                      np.array([0., 0., 1.]))
        body_1.add_joint(world_body, body_1_joint)
        rbt.add_rigid_body(body_1)

        # body_2 is connected to body_1 via a revolute joint around the z-axis.
        body_2 = RigidBody()
        body_2.set_name("body_2")
        body_2_joint = RevoluteJoint("theta", np.eye(4),
                                     np.array([0., 0., 1.]))
        body_2.add_joint(body_1, body_2_joint)
        box_element = shapes.Box([1.0, 1.0, 1.0])
        box_visual_element = shapes.VisualElement(
            box_element, np.eye(4), [1., 0., 0., 1.])
        body_2.AddVisualElement(box_visual_element)
        body_2_visual_elements = body_2.get_visual_elements()
        rbt.add_rigid_body(body_2)

        box_collision_element = CollisionElement(box_element, np.eye(4))
        box_collision_element.set_body(body_2)
        rbt.addCollisionElement(box_collision_element, body_2, "default")

        rbt.compile()

        # The RBT's position vector should now be [z, theta].
        self.assertEqual(body_1.get_position_start_index(), 0)
        self.assertEqual(body_2.get_position_start_index(), 1)