Note: This tutorial assumes you have a PostgreSQL server installed and running on a local machine. This step is covered in the Installing a PostgreSQL server tutorial.. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Install the household_objects_database on your local database server
Description: Shows how to create the household_objects_database on your local database server, and how to populate it using a backup file from Willow Garage.Tutorial Level: BEGINNER
Contents
Database Creation
start pgadmin3, then log into your PostgreSQL server.
in the server drop-down list, right-click Databases and choose New Database...
in the dialog menu that appears, set the desired name for your database (e.g. household_objects-0.2) and click OK.
Restore the Database from a Backup File
Download the desired version of the database backup file from Willow Garage. You can find the database backup files here:
https://github.com/ros-interactive-manipulation/household_objects_database_backups
In general, if you have an up-to-date installation of cturtle (and thus the manipulation pipeline) it is recommended you use the latest version of the database as well. Note that if a backup file is called *-schema.backup it will only contain the schema of the database, but no data.
After downloading the backup file, go back to pgadmin3. Right-click your newly created database, and click Restore.... Point the dialog to the backup file you downloaded and click OK. Wait for the restoration to finish, then close the dialog.
If the restore option is not present
- Login as the postgres user on the machine where you installed postgresql, start psql
Execute: pg_restore filename.backup --dbname=database_name --username=postgres --password , where
filename.backup is the database file that you have downloaded from the ROS wiki
database_name is the name of your database
Using the Database
You must now point the ROS wrapper node for the database at your newly created database. The simplest way of doing this is to create a parameter file, and then a launch file which uses those parameters.
Create your parameter file, called for example some_package_name/config/my_server.yaml. Use the example below, replacing the values with the correct ones for your system:
household_objects_database: database_host: myserver.mydomain.com database_port: 5432 database_user: willow database_pass: willow database_name: household_objects
Then, you can create a launch file to start the database wrapper node:
<launch> <!-- load database connection parameters --> <rosparam command="load" file="$(find some_package_name)/config/my_server.yaml"/> <!-- start the database wrapper node --> <node pkg="household_objects_database" name="objects_database_node" type="objects_database_node" respawn="true" output="screen"/> </launch>
That's it, you are done!
Adding custom model sets to the database
Contained in the database is certain model sets, useful if you do not want to load all models. You can try this out by calling
rosservice call /objects_database_node/get_model_list REDUCED_MODEL_SET
which should return
return_code: code: -1 model_ids: [18665, 18685, 18691, 18693, 18699, 18744, 18746, 18765, 18766, 18783, 18791, 18798, 18799, 18800, 18802, 18807, 18808]
In order to create your own model set, you can do this by adding this set to the database. Here's how.
Open up pgadmin3, then log into your PostgreSQL server
Select your database and select Tools, Query tool (or press Ctrl+E)
The following SQL query adds a custom model sets:
INSERT INTO model_set (original_model_id, model_set_name) SELECT original_model_id, 'MY_MODEL_SET' FROM original_model WHERE original_model_id IN ( SELECT original_model_id FROM scaled_model WHERE scaled_model_id IN (18671,18659,18638) )
In this case it creates a model set called MY_MODEL_SET containing the objects with the IDs 18671, 18659 and 18638. The IDs are the model_id used in the household_objects_database services.
To execute the query, press the play button, or F5 on your keyboard. You should see a message stating that the query executed successfully. You can then test it similar to the service call above, i.e.
rosservice call /objects_database_node/get_model_list MY_MODEL_SET
which would return the models specified in the SQL query.
To delete your model set from the database, run the following query:
DELETE FROM model_set WHERE model_set_name='MY_MODEL_SET'