Differences
This shows you the differences between two versions of the page.
Last revisionBoth sides next revision | |||
tutorials:advanced:bullet_world_boxy [2015/09/11 15:33] – created gkazhoya | tutorials:advanced:bullet_world_boxy [2015/09/11 15:53] – removed gkazhoya | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Setting up the Bullet world with a new robot ====== | ||
- | |||
- | This tutorial will walk you though creating your own repo / metapackage from scratch that will use CRAM and Bullet world with your own robots. In this tutorial we will use the Boxy robot as an example. | ||
- | |||
- | The starting point of this tutorial is an installation of CRAM including projection with PR2. If you followed the installation manual, you should have all the necessary packages already. | ||
- | |||
- | ===== Directory / file setup ===== | ||
- | |||
- | First of all, let's create a directory for our code and the metapackage: | ||
- | |||
- | <code bash> | ||
- | mkdir cram_boxy && cd cram_boxy | ||
- | catkin_create_pkg cram_boxy && cd cram_boxy | ||
- | </ | ||
- | |||
- | Edit the '' | ||
- | |||
- | <code cmake> | ||
- | cmake_minimum_required(VERSION 2.8.3) | ||
- | project(cram_boxy) | ||
- | find_package(catkin REQUIRED) | ||
- | catkin_metapackage() | ||
- | </ | ||
- | |||
- | The first ROS package we will create will be the Prolog description of our robot. We will call it '' | ||
- | Go back to the root of your '' | ||
- | |||
- | <code bash> | ||
- | cd .. | ||
- | catkin_create_pkg cram_boxy_knowledge cram_prolog cram_robot_interfaces | ||
- | </ | ||
- | |||
- | Now let's create the corresponding ASD file called '' | ||
- | |||
- | <code lisp> | ||
- | ;;; You might want to add a license header first | ||
- | |||
- | (defsystem cram-boxy-knowledge | ||
- | :author "Your Name" | ||
- | :license " | ||
- | :depends-on (cram-prolog | ||
- | | ||
- | :components | ||
- | ((:module " | ||
- | :components | ||
- | ((:file " | ||
- | | ||
- | </ | ||
- | |||
- | Now create the corresponding '' | ||
- | |||
- | <code lisp> | ||
- | ;;; license | ||
- | |||
- | (in-package :cl-user) | ||
- | |||
- | (defpackage cram-boxy-knowledge | ||
- | (:use #: | ||
- | #: | ||
- | #: | ||
- | </ | ||
- | |||
- | |||
- | ===== Robot URDF description ===== | ||
- | |||
- | Now, before creating the file with the actual code (called '' | ||
- | |||
- | <code bash> | ||
- | cd ROS_WORKSPACE_FOR_LISP_CODE | ||
- | cd src | ||
- | git clone https:// | ||
- | </ | ||
- | |||
- | Now let's compile our workspace such that ROS learns about the new '' | ||
- | |||
- | CRAM takes the URDF descriptions of the robots from the ROS parameter server, i.e., you will need to upload the URDFs of your robots. For Boxy there is a launch file doing that, you will find it here: | ||
- | |||
- | <code bash> | ||
- | roscd iai_boxy_description/ | ||
- | </ | ||
- | |||
- | It's called '' | ||
- | |||
- | <code xml> | ||
- | < | ||
- | <arg name=" | ||
- | <arg name=" | ||
- | |||
- | <param | ||
- | name=" | ||
- | command=" | ||
- | </ | ||
- | </ | ||
- | |||
- | As we will need to know the names of the TF frames later, we will launch a general file that includes uploading the URDF as well as a robot state publisher: | ||
- | |||
- | <code bash> | ||
- | roslaunch iai_boxy_description upload_boxy.launch | ||
- | </ | ||
- | |||
- | (It starts a GUI to play with the joint angles but let's ignore that.) | ||
- | |||
- | Let's check if it's there using RViz: | ||
- | |||
- | <code bash> | ||
- | rosrun rviz rviz | ||
- | Add -> Robot Model -> Robot description: | ||
- | Add -> TF | ||
- | </ | ||
- | |||
- | To be able to see the TF frames choose '' | ||
- | |||
- | |||
- | {{ : | ||
- | |||
- | ===== Boxy Prolog description ===== | ||
- | |||
- | Now that we have a URDF on the ROS parameter server, let's describe our robot also in Prolog. | ||
- | |||
- | We create a file '' | ||
- | |||
- | As can be seen from the TF tree, our robot has 3 camera frames, 1 depth and 1 RGB frame from a Kinect camera, and an RGB frame from a Kinect2 camera. | ||
- | {{ : | ||
- | |||
- | It's camera can be from 1.60 m to 2.10 m above the ground, depending on the torso position. | ||
- | It also has a pan-tilt-unit. | ||
- | |||
- | < | ||
- | ;;; license | ||
- | |||
- | (in-package : | ||
- | |||
- | (def-fact-group boxy-metadata (robot | ||
- | | ||
- | | ||
- | | ||
- | (<- (robot boxy)) | ||
- | (<- (camera-frame boxy " | ||
- | (<- (camera-frame boxy " | ||
- | (<- (camera-frame boxy " | ||
- | (<- (camera-minimal-height boxy 1.60)) | ||
- | (<- (camera-maximal-height boxy 2.10)) | ||
- | (<- (robot-pan-tilt-links boxy " | ||
- | (<- (robot-pan-tilt-joints boxy " | ||
- | </ | ||
- | |||
- | ===== Loading the world ===== | ||
- | |||
- | Now let's try to set up the world. | ||
- | We will only spawn the floor, the robot, and a couple of household objects. | ||
- | |||
- | For that, we | ||
- | - load the bullet reasoning designators package in the REPL | ||
- | - start a ROS node | ||
- | - spawn the robot and the floor | ||
- | - | ||
- | |||
- | <code lisp> | ||
- | (asdf: | ||
- | (in-package :btr) | ||
- | |||
- | |||
- | |||
- | |||