====== The Object Manipulation System (OMS) ======
Coordinator: [[people:dgarcia|Daniel García Vaglio]]
Main developer: [[people:dgarcia|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). [[https://ieeexplore.ieee.org/abstract/document/8464221 | An Object Manipulation System Architecture for Humanoid Robots Based on Primate Cognition]]. In 2018 IEEE International Work Conference on Bioinspired Intelligence ([[http://www.iwobi.ulpgc.es/2018/ | IWOBI]]) (pp. 1-8). IEEE.
===== Installation =====
**First** you will need to install the humanoid robot Simulator. So follow [[tutorials:object_manipulation_robot_simulator| this tutorial]] for installing it.
When you have installed the Humanoid Robot Simulator, you will need to create a Python virtual environment. **Please note that OMS uses Python3**, do not create a Python2 virtualenv, as it will not work.
mkdir ~/python
cd python
virtualenv --python=python3.7 arcos
cd arcos
mkdir src
git clone ssh://gitolite3@arcoslab.eie.ucr.ac.cr/oms
Now that you have created the virtual environment we need t activate it. Remember to do this __before__ working with OMS __always__
cd ~/python/arcos
source bin/activate.sh
When the virtual environment is activated and you want to exit, just type
deactivate
Now follow the ''README'' file located at ''/arcos/src/oms/README.MD'' for the rest of the installation instructions.
===== Contributing =====
If you are part of ARCOS-Lab, and want to contibute to the project. Please contact [[people:dgarcia|Daniel]].
If you are an external contributor you can follow our contribution standard. ([[people:amora|Ariel Mora]] and [[people:jperalta|Javier Peralta]] are actively working on that, meanwhile you can contact [[people:dgarcia|Daniel]] directly)
==== Bug reports ====
If you found a bug, please file it to our issue tracker. ([[people:amora|Ariel Mora]] and [[people:jperalta|Javier Peralta]] are actively working on that, meanwhile you can contact [[people:dgarcia|Daniel]] directly)
===== Execute with Whole robot =====
**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/[[http://www.ros.org/|ROS]] it will not be required. Similarly, the //glue// is not part of **OMS** because once it is ported to [[http://www.ros.org/|ROS]], it will not be required. So it was decided to include this glue into [[https://gitlab.com/arcoslab/cmoc/ | CMOC]], the predecessor of **OMS**.
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 -s -n /arcosbot-real -i lwr -i right -d robot_descriptions/arcosbot/kinematics/lwr/
In another terminal execute the hands simulator:
cd ~/local/src
sahand_yarp_sim -b /arcosbot-real -r -d -n -f robot_descriptions/arcosbot/kinematics/sahand/hands_kin.py -s
Then execute ''pyrovito'' for visualization:
cd ~/local/src
pyrovito -n /arcosbot-real -r lwr --arm_right --hand_right -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 run with the finger calibration
cd ~/local/src/cmoc/objects/sliding/sctipts
python glue.py -c ~/local/src/robot_descriptions/arcosbot/kinematics/sahand/calibration_data/finger_calibration_data.py -n /arcosbot-real
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/''
{
"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",
"perceived_object": "clorox",
"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