def ur5(): """Return a UR5 created programatically instead of from a file.""" return RobotModel('ur5', joints=[ Joint('shoulder_pan_joint', 'revolute', 'base_link', 'shoulder_link'), Joint('shoulder_lift_joint', 'revolute', 'shoulder_link', 'upper_arm_link'), Joint('elbow_joint', 'revolute', 'upper_arm_link', 'forearm_link'), Joint('wrist_1_joint', 'revolute', 'forearm_link', 'wrist_1_link'), Joint('wrist_2_joint', 'revolute', 'wrist_1_link', 'wrist_2_link'), Joint('wrist_3_joint', 'revolute', 'wrist_2_link', 'wrist_3_link'), ], links=[ Link('base_link'), Link('shoulder_link'), Link('upper_arm_link'), Link('forearm_link'), Link('wrist_1_link'), Link('wrist_2_link'), Link('wrist_3_link'), ])
def test_programatic_robot_model(): robot = RobotModel("robot") link0 = robot.add_link("link0") link1 = robot.add_link("link1") robot.add_joint("joint1", Joint.CONTINUOUS, link0, link1) assert(['link0', 'joint1', 'link1'] == list(robot.iter_chain())) link2 = robot.add_link("link2") robot.add_joint("joint2", Joint.CONTINUOUS, link1, link2) assert(['link0', 'joint1', 'link1', 'joint2', 'link2'] == list(robot.iter_chain()))
def test_programmatic_robot_model(): robot = RobotModel("robot") link0 = robot.add_link("link0") link1 = robot.add_link("link1") robot.add_joint("joint1", Joint.CONTINUOUS, link0, link1) assert (['link0', 'joint1', 'link1'] == list(robot.iter_chain())) link2 = robot.add_link("link2") robot.add_joint("joint2", Joint.CONTINUOUS, link1, link2) assert (['link0', 'joint1', 'link1', 'joint2', 'link2'] == list(robot.iter_chain())) urdf = URDF.from_robot(robot) robot_reincarnated = RobotModel.from_urdf_string(urdf.to_string()) assert (['link0', 'joint1', 'link1', 'joint2', 'link2'] == list(robot_reincarnated.iter_chain()))
def basic(cls, name, joints=[], links=[], materials=[], **kwargs): """Convenience method to create the most basic instance of a robot, based only on a name. Parameters ---------- name : str Name of the robot Returns ------- :class:`Robot` Newly created instance of a robot. """ model = RobotModel(name, joints=joints, links=links, materials=materials, **kwargs) return cls(model, None)
robot = RobotModel('ur10e', joints=[ Joint('shoulder_pan_joint', 'revolute', parent='base_link', child='shoulder_link'), Joint('shoulder_lift_joint', 'revolute', parent='shoulder_link', child='upper_arm_link'), Joint('elbow_joint', 'revolute', parent='upper_arm_link', child='forearm_link'), Joint('wrist_1_joint', 'revolute', parent='forearm_link', child='wrist_1_link'), Joint('wrist_2_joint', 'revolute', parent='wrist_1_link', child='wrist_2_link'), Joint('wrist_3_joint', 'revolute', parent='wrist_2_link', child='wrist_3_link'), ], links=[ Link('base_link'), Link('shoulder_link'), Link('upper_arm_link'), Link('forearm_link'), Link('wrist_1_link'), Link('wrist_2_link'), Link('wrist_3_link'), ])
from compas.geometry import Cylinder from compas.geometry import Frame from compas.geometry import Plane from compas.geometry import Translation from compas.robots import Joint from compas.robots import RobotModel from compas_fab.rhino import RobotArtist from compas_fab.robots import Configuration # create cylinder in yz plane radius, length = 0.3, 5 cylinder = Cylinder(Circle(Plane([0, 0, 0], [1, 0, 0]), radius), length) cylinder.transform(Translation([length / 2., 0, 0])) # create robot robot = RobotModel("robot", links=[], joints=[]) # add first link to robot link0 = robot.add_link("world") # add second link to robot mesh = Mesh.from_shape(cylinder) link1 = robot.add_link("link1", visual_mesh=mesh, visual_color=(0.2, 0.5, 0.6)) # add the joint between the links axis = (0, 0, 1) origin = Frame.worldXY() robot.add_joint("joint1", Joint.CONTINUOUS, link0, link1, origin, axis) # add another link mesh = Mesh.from_shape(cylinder) # create a copy!
from compas.robots import RobotModel from compas.robots import Joint robot = RobotModel('tom') # ============================================================================== # Links # ============================================================================== base = robot.add_link('base') shoulder = robot.add_link('shoulder') arm = robot.add_link('arm') forearm = robot.add_link('forearm') wrist = robot.add_link('wrist') hand = robot.add_link('hand') # ============================================================================== # Joints # ============================================================================== base_joint = robot.add_joint('base-shoulder', Joint.REVOLUTE, base, shoulder) shoulder_joint = robot.add_joint('shoulder-arm', Joint.REVOLUTE, shoulder, arm) elbow_joint = robot.add_joint('arm-forearm', Joint.REVOLUTE, arm, forearm) wrist_joint = robot.add_joint('forearm-wrist', Joint.REVOLUTE, forearm, wrist) hand_joint = robot.add_joint('wrist-hand', Joint.CONTINUOUS, wrist, hand) # ============================================================================== # Visualization # ============================================================================== print(robot)
from compas.robots import Joint from compas.robots import RobotModel from compas.geometry import Box from compas.geometry import Circle from compas.geometry import Cylinder from compas.geometry import Frame from compas.geometry import Plane from compas.geometry import Sphere from compas.geometry import Vector from compas_rhino.artists import RobotModelArtist model = RobotModel('drinking_bird') foot_1 = Box(Frame([2, .5, .25], [1, 0, 0], [0, 1, 0]), 1, 2, .5) foot_2 = Box(Frame([-2, .5, .25], [1, 0, 0], [0, 1, 0]), 1, 2, .5) leg_1 = Box(Frame([2, 0, 4], [1, 0, 0], [0, 1, 0]), .5, 1, 7) leg_2 = Box(Frame([-2, 0, 4], [1, 0, 0], [0, 1, 0]), .5, 1, 7) axis = Cylinder(Circle(Plane([0, 0, 7], [1, 0, 0]), .01), 4) legs_link = model.add_link('legs', visual_meshes=[foot_1, foot_2, leg_1, leg_2, axis]) torso = Cylinder(Circle(Plane([0, 0, 0], [0, 0, 1]), .5), 8) torso_link = model.add_link('torso', visual_meshes=[torso]) legs_joint_origin = Frame([0, 0, 7], [1, 0, 0], [0, 1, 0]) joint_axis = Vector(1, 0, 0) model.add_joint('torso_base_joint', Joint.CONTINUOUS, legs_link, torso_link, legs_joint_origin, joint_axis) head = Sphere([0, 0, 0], 1) beak = Cylinder(Circle(Plane([0, 1, -.3], [0, 1, 0]), .3), 1.5)