This is an old revision of the document!
Table of Contents
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.
Related Publications
- Garcia-Vaglio, D., & Ruiz-Ugalde, F. (2018, July). An Object Manipulation System Architecture for Humanoid Robots Based on Primate Cognition. In 2018 IEEE International Work Conference on Bioinspired Intelligence ( IWOBI) (pp. 1-8). IEEE.
Installation
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.
Contributing
If you are part of ARCOS-Lab, and want to contibute to the project. Please contact Daniel.
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)
Execute with Whole robot
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
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