====== 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