Robot

../../_images/robot.gif
from compas_robots import RobotModel
from compas_robots.resources import GithubPackageMeshLoader
from compas_robots.viewer.scene.robotmodelobject import RobotModelObject

from compas_viewer import Viewer
from compas_viewer.layout import Slider
from compas_viewer.layout import Treeform

viewer = Viewer(rendermode="lighted")


github = GithubPackageMeshLoader("ros-industrial/abb", "abb_irb6600_support", "kinetic-devel")
model = RobotModel.from_urdf_file(github.load_urdf("irb6640.urdf"))
model.load_geometry(github)

configuration = model.random_configuration()
robot_object: RobotModelObject = viewer.scene.add(model, show_lines=False, show_points=False, configuration=configuration)  # type: ignore


def rotate(value, robot_object: RobotModelObject, index: int):
    config = robot_object.configuration
    config.joint_values[index] = value / 360 * 2 * 3.14159
    robot_object.update_joints(config)


for i, joint in enumerate(robot_object.configuration.joint_names):
    slider = Slider(
        rotate,
        configuration.joint_values[i] / 360 * 2 * 3.14159,
        -180,
        180,
        1,
        joint,
        robot_object=robot_object,
        index=i,
    )
    slider = viewer.layout.sidedock.add_element(slider)


treeform = Treeform(viewer.scene, {"Name": (lambda o: o.name), "Object": (lambda o: o)})

viewer.layout.sidedock.add_element(treeform)

robot_object.update_joints(robot_object.configuration)

viewer.show()