# The Object Manipulation System (OMS)

Coordinator: Daniel García Vaglio

Main developer: Daniel García Vaglio

This is a project under development. You should expect this wiki to change at any moment.

OMS is a system that can handle models and controllers for various objects, each having multiple affordances. The purpose of this wiki is not for explaining OMS or for its documentation, this wiki should only be used for explaining HOW to use this system. If you want to learn more about the OMS, please visit the section with a list of related publications to this project.

OMS is written in Python 3, and we tried to use only standard libraries. Before installing OMS you will have to install the following dependencies. Remember to install the versions for Python 3.

numpy scipy matplotlib

First you need to install YARP in your computer. OMS is writen in Python 3 so, when you generate the bidings be carefull to select Python 3, not Python 2. Unfortunately YARP only allows one type of binding, so if you generate Python3 bidings, you will loose Python 2 bidings. A fix that I implemented was to install a container (or chroot) with YARP compiled for Python 2 to use with the ARCOS-Lab Humanoid Robot Simulator, and use the YARP with Python 3 natively on my computer. Here you can find a usefull tutorial for Installing YARP.

It is very important you make sure you have pyrovito installed. Follow this tutorial to install the complete humanoid robot simulator (pyrovito included). Remember that simulator uses Python2.

cd ~/local/src/
git clone ssh://gitolite3@arcoslab.eie.ucr.ac.cr/oms
git checkout arch-devel

This is an internal repository, so if you do not have access, ask Daniel to add you.

Follow the instructions that you will find in the README file. It will be very easy to install, because it was developed as a Python Package.

If you are an external contributor you can follow our contribution standard. (Ariel Mora and Javier Peralta are actively working on that, meanwhile you can contact Daniel directly)

### Bug reports

If you found a bug, please file it to our issue tracker. (Ariel Mora and Javier Peralta are actively working on that, meanwhile you can contact Daniel directly)

Warning! this functionality is currently broken in master, because of some changes that were introduced for allowing interactive model parameters modifications.

It is also possible to execute OMS with the robot. Inside the OMS repository some instructions are provided to get a basic setup going. Here one can learn how to execute it with the entire robot. It is worth mentioning that OMS and the robot simulator are not 100% compatible (mainly because they use different Python versions) so a glue script was developed to have an interface between the two. This glue is not part of the official simulator, because when the simulator is ported to Python3/ROS it will not be required. Similarly, the glue is not part of OMS because once it is ported to ROS, it will not be required. So it was decided to include this glue into CMOC, the predecessor of OMS.

First checkout the branch where the script was included:

cd {CMOC_REPO_PATH}
git checkout glue

Now, start a YARP server.

Then the following commands have to be executed in the simulator environment (chroot, container, python virtual environment). Execute the vfclick for the right arm in a separate terminal:

cd ~/local/src
vfclik -i lwr -i right -d robot_descriptions/arcosbot/kinematics/lwr/ -s

In a separate terminal, execute vfclick for the left arm:

cd ~/local/src
vfclik -i lwr -i left -d robot_descriptions/arcosbot/kinematics/lwr/ -s

In another terminal execute the hands simulator:

cd ~/local/src
sahand_yarp_sim -s -d -n -f robot_descriptions/arcosbot/kinematics/sahand/hands_kin.py

Then execute pyrovito for visualization:

cd ~/local/src
pyrovito -r lwr --arm_right --arm_left --hand_right --hand_left -a robot_descriptions/arcosbot/kinematics/lwr/ -d robot_descriptions/arcosbot/kinematics/sahand/

Finally execute glue in a separate terminal.

cd ~/local/src/cmoc/objects/sliding/scripts
python glue.py

If you want to ignore OMS commands and move the robot from the keyboard add the -g option. This will only ignore the commands that come from the robot interface, but it will still send the end effectors state back to OMS, so that the robot can still interact with the objects.

• $\rightarrow$ moves the robot to +x
• $\leftarrow$ moves the robot to -x
• $\uparrow$ moves the robot to +y
• $\downarrow$ moves the robot to -y
• $o$ moves the robot to +z
• $l$ moves the robot to -z
• $d$ rotates the robot around +z
• $a$ rotates the robot around -z
• $w$ rotates the robot around +x
• $s$ rotates the robot around -x

The following commands are for OMS, so they should be executed in its environment (chroot, container, python virtual environment). There are currently only 3 objects added to OMS, a cylinder, a box and a door. This tutorial will show how to execute the cylinder, but the changes for using a box or a door should be obvious to you.

First execute the data_collector, this script will take the information from the oms_core, create the logs, and send the visualization data to pyrovito. In this particular case the scene with one cylinder is going to be executed, but the scene can be changed to simulate a box or a door, by changing the -s argument. For more advanced uses of this script use the -h argument to access the help text.

cd ~/local/src/oms/oms/tests/test_utilities/
python3 test_collector.py -s ~/.oms_data/default/test_scene_cylinder.json -d ~/.oms_data/default/monolith.json

Now a configuration file has to be created so that the oms_core uses it for the initialization process. One can use other objects by changing the scene_path. The following commands will assume that you downloaded this file, and placed it in ~/.oms_data/

conf_cylinder.json
{
"entity_db_path": ".oms_data/default/monolith.json",
"scene_path": ".oms_data/default/test_scene_cylinder.json",
"ai_to_oms_port_name_local": "/oms/ai_to_oms",
"oms_to_ai_port_name_local": "/oms/oms_to_ai",
"ai_to_oms_port_name_remote": "/ai/ai_to_oms",
"oms_to_ai_port_name_remote": "/ai/oms_to_ai",
"ai_carrier": "tcp",
"robot_carrier": "tcp",
"vis_carrier": "tcp",
"frequency": 60
} 

If you executed glue without the -g option (which ignores OMS commands), you should now execute the planner with the following command:

cd ~/local/src/oms/oms/tests/test_utilities/
python3 test_pseudo_ai.py -i ~/.oms_data/default/test_instructions_cylinder.json

Finally, execute the oms_core using the previously provided configuration file:

oms_core.py -c .oms_data/conf_cylinder.json
• tutorials/object_manipulation_system.txt