Model Robots

../_images/model_robots.png
from compas.files import OBJ
from compas.datastructures import Mesh
from compas_model.elements import BlockElement
from compas_model.model import Model
from compas.geometry import Point, Frame

# meshes
paths = [
    'data/robot_kuka_base.obj',
    'data/robot_kuka_axis0.obj',
    'data/robot_kuka_axis1.obj',
    'data/robot_kuka_axis2.obj',
    'data/robot_kuka_axis3.obj',
    'data/robot_kuka_axis4.obj',
    'data/robot_kuka_axis5.obj',
]
meshes = []

for path in paths:
    obj = OBJ(path)
    obj.read()
    for name in obj.objects:
        mesh = Mesh.from_vertices_and_faces(* obj.objects[name])
        mesh.name = name
        meshes.append(mesh)

# frames
origins = [[0, 0, 217], [24.512667, -6.66177, 400], [24.904867, -2.178893, 855], [145.743477, -12.750905, 869.151417], [443.020905, -38.51023, 816.506682], [519.30574, -44.271409, 816.486246]]
x_axes = [[1, 0, 0], [1, 0, 0], [1, 0, 0], [0, -1, 0], [1, 0, 0], [0, 0, -1]]
y_axes = [[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, -0, 0], [0, 1, 0], [1, 0, 0]]
frames = []
for i in range(len(origins)):
    frames.append(Frame(origins[i], x_axes[i], y_axes[i]))

# Create elements from meshes and add them to the model.
model = Model()
model.add_element(BlockElement(meshes[0], frame=Frame.worldXY(), name="Base"))
for i in range(1, len(meshes)):
    block = BlockElement(geometry=meshes[i], frame=frames[i-1], name=f"Axis {i}")
    model.add_element(block)

for i in range(1, len(meshes)-1):
    model.add_interaction_by_index(i, i+1)

# Display geometry
geometry = model.get_interactions_lines()
for element in model.elements_list:
    geometry.append(element.frame)

model.print()