In this section several examples are given to illustrate the use of the library.
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()
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()
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()