Examples

In this section several examples are given to illustrate the use of the library.

Basic usage

The following example shows how to use the library to move the robotic manipulators.

from adam_sim import Adam
from adam_sim.entities import Configuration, AdamInfo


def main():
    adam: Adam = Adam()

    initial_info: AdamInfo = adam.load()

    left_configuration: Configuration = initial_info.left_manipulator.configuration
    right_configuration: Configuration = initial_info.right_manipulator.configuration

    for _ in range(1000):
        adam.render()

        left_configuration += Configuration(0.0, 0.0, 0.0, 0.0, 0.1, 0.0)
        right_configuration -= Configuration(0.0, 0.0, 0.0, 0.0, 0.1, 0.0)

        adam.right_manipulator.set_to(right_configuration)
        adam.left_manipulator.set_to(left_configuration)

        info: AdamInfo = adam.step()

    adam.close()


if __name__ == '__main__':
    main()

The following examples shows how to control the manipulator through Inverse Kinematics

import numpy as np

from adam_sim import Adam
from adam_sim.entities import AdamInfo, Point


def main():
    adam: Adam = Adam()

    initial_info: AdamInfo = adam.load()

    x_path: np.ndarray = np.linspace(0.0, 1.0, 100)
    left_path: list[Point] = [initial_info.left_manipulator.end_effector.position + Point(x, 0.0, 0.0) for x in x_path]
    right_path: list[Point] = [initial_info.right_manipulator.end_effector.position + Point(x, 0.0, 0.0) for x in x_path]

    for left_point, right_point in zip(left_path, right_path):
        adam.render()

        adam.left_manipulator.move_to(left_point)
        adam.right_manipulator.move_to(right_point)

        info: AdamInfo = adam.step()

    adam.close()


if __name__ == '__main__':
    main()

The following code lets the user control both manipulators.

from adam_sim import Adam
from adam_sim.entities import AdamInfo


def main():
    adam: Adam = Adam()

    initial_info: AdamInfo = adam.load()

    while True:
        adam.render()

        adam.left_manipulator.control()
        adam.right_manipulator.control()

        info: AdamInfo = adam.step()


if __name__ == '__main__':
    main()

DataManager usage

The following code shoes how to load the test configurations and then save them into a file

from adam_sim import Adam, DataManager
from adam_sim.entities import Configuration, AdamInfo, Point


def main():
    adam: Adam = Adam()
    initial_info: AdamInfo = adam.load()

    configuration_list: list[Configuration] = DataManager.load_configurations('test')

    end_effector_positions: list[Point] = [initial_info.left_manipulator.systems[-1].position]

    for configuration in configuration_list:
        adam.render()

        adam.left_manipulator.set_to(configuration)
        info: AdamInfo = adam.step()

        end_effector_positions.append(info.left_manipulator.systems[-1].position)

    adam.close()

    DataManager.save_end_effector_positions('end_effector_positions_test.csv', end_effector_positions)


if __name__ == '__main__':
    main()

Communication Usage

The following code shows how to use the communication library to send and receive data from the real robot.

from adam_sim import Adam
from adam_sim.entities import Configuration, AdamInfo

def main():
    adam: Adam = Adam()
    info: AdamInfo = adam.connect('localhost', 1883, rate=10)

    for _ in range(10):
        left_configuration = info.left_manipulator.configuration + Configuration(0.0, 0.0, 0.0, 0.0, 0.0, 0.1)

        adam.left_manipulator.set_to(left_configuration)

        info = adam.step()

    adam.close()


if __name__ == '__main__':
    main()