From 14d9770e782f8c6ff1c158877bcedccae34da2fb Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Fri, 8 Jan 2016 15:55:08 +0100 Subject: [PATCH 01/12] New tutorial on track_visual --- track_visual/files/track_visual.world | 119 ++++++++++++++++++ track_visual/files/tutorialGUIExpanded.png | Bin 0 -> 42318 bytes track_visual/tutorial.md | 138 +++++++++++++++++++++ 3 files changed, 257 insertions(+) create mode 100644 track_visual/files/track_visual.world create mode 100644 track_visual/files/tutorialGUIExpanded.png create mode 100644 track_visual/tutorial.md diff --git a/track_visual/files/track_visual.world b/track_visual/files/track_visual.world new file mode 100644 index 00000000..68a6b309 --- /dev/null +++ b/track_visual/files/track_visual.world @@ -0,0 +1,119 @@ + + + + + + model://sun + + + + model://ground_plane + + + + + + box + false + 0 + 8 + + + + + + 0 0 0.5 0 0 0 + + true + + + + 1 1 1 + + + + + + 0.0 + 0.0 + + + + + + + + 1 1 1 + + + + + + + + + + + link + + + 0 0.5 0 + + + 0.5 + + + 5 + + + 0 + 0 + + + + + 0 2 0.5 0 0 0 + + + + + 0.5 + + + + + + + 0.5 + + + + + + + + + + + link + + + 0 0.5 0 + + + 0.5 + + + 5 + + + 0 + 0 + + + + diff --git a/track_visual/files/tutorialGUIExpanded.png b/track_visual/files/tutorialGUIExpanded.png new file mode 100644 index 0000000000000000000000000000000000000000..bdfa3c6437e0e46dc81aad511684be8ea077a3ae GIT binary patch literal 42318 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ඨz{6-p!gR#cXlfyhmImgJ(F6Ou?dhN*oq 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 tag or the GUI. + +## Quick start + +1. Let's start by creating a directory for this tutorial: + + ~~~ + mkdir ~/tutorial_track_visual + cd ~/tutorial_track_visual + ~~~ + +2. Download this file: +[`track_visual.world`](http://bitbucket.org/osrf/gazebo_tutorials/raw/default/track_visual/files/track_visual.world) +into the current directory. You can use this command: + + ~~~ + wget http://bitbucket.org/osrf/gazebo_tutorials/raw/default/track_visual/files/track_visual.world + ~~~ + + You should get this world file: + + + +3. Start gazebo: + + ~~~ + gazebo track_visual.world + ~~~ + + You should see a cube moving randomly around the world's origin. + +## The world explained + +Let's go further and understand the different elements of the `track_visual.world`. + + + +Within the `track_visual` tag, you can see how to select a visual by specifying a `` tag. The visual will be tracked from startup. The camera will follow the model by changing its orientation. + + + +Because `` is set to `false`, the position of the camera may vary but the distance between the camera and the model will depend on the value of the `min_dist` and `max_dist` elements. + +Now change `` to `true`: + + ~~~ + + + + box + true + + + + ~~~ + +Relaunch Gazebo. The position of the camera is now fixed relatively to the model being tracked. + +By default, the camera is located 5 meters behind and 1 meter above the model. Try changing its location by specifying a `` tag: + + ~~~ + + + + box + true + 3 2 5 + + + + ~~~ + +Relaunch Gazebo. The camera is now located 3 meters in front, 2 meters to the left, and 5 meters above the tracked model. + +Finally, we introduce the `` tag whose default value is `true`. When the `` tag is `true`, this element specifies whether the coordinates provided by `` are relative to the model reference frame or the world reference frame. Try changing the value of the `` tag: + + ~~~ + + + + box + true + false + 0 0 10 + + + + ~~~ + +Relaunch Gazebo. The camera now stays at 10 meters above the origin. + +To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: + + ~~~ + + + + box + true + true + 2 0 1 + + + + ~~~ + +Relaunch Gazebo. You should now see the camera following the sphere. But there is one issue: the camera jumps back and forth whenever the sphere makes a half turn. That is because, by default, the camera is configured to inherit the yaw rotation of the tracked visual. + +To prevent this behaviour, simply set the `` tag to `false`: + + ~~~ + + + + box + true + true + false + 2 0 1 + + + + ~~~ + +Relaunch Gazebo. The camera should now follow the sphere flawlessly. + +## Dynamic Reconfigure + +The camera properties can be adjusted dynamically within Gazebo. + +In the `World` tab, select the `GUI` item. A list of GUI properties will be displayed in the list box below. Click the triangle to expand the properties if needed. + +[[file:files/tutorialGUIExpanded.png|257px]] + +These properties allow you to dynamically change the parameters defined in ``. They will be applied whenever a model is being followed by the camera. From 956124852bf956f9f7144bdd996012440d96dd46 Mon Sep 17 00:00:00 2001 From: chapulina Date: Fri, 8 Jan 2016 14:29:16 -0800 Subject: [PATCH 02/12] added to manifest --- manifest.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/manifest.xml b/manifest.xml index bb9a4b91..fd8989c0 100644 --- a/manifest.xml +++ b/manifest.xml @@ -304,6 +304,12 @@ beginner + + track_visual/tutorial.md + Use the graphical interface or SDF files to track visuals with the user camera. + beginner + + instrument_hdf5_datasets/tutorial.md How to dump simulation data into HDF5 format for benchmark. @@ -888,6 +894,7 @@ log_filtering apply_force_torque instrument_hdf5_datasets + track_visual From bdd01ac39288cd0de2e4d5abbc30239eb0304cbf Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Mon, 11 Jan 2016 14:53:47 +0100 Subject: [PATCH 03/12] Fixed indentation --- track_visual/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index a35b9540..35e28ec1 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -40,7 +40,7 @@ Let's go further and understand the different elements of the `track_visual.worl Within the `track_visual` tag, you can see how to select a visual by specifying a `` tag. The visual will be tracked from startup. The camera will follow the model by changing its orientation. - + Because `` is set to `false`, the position of the camera may vary but the distance between the camera and the model will depend on the value of the `min_dist` and `max_dist` elements. From 408ac89aee65fdfb3dd979c30d8807cd7cbd3f1a Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Mon, 11 Jan 2016 14:55:04 +0100 Subject: [PATCH 04/12] Say "model origin" instead of "origin" --- track_visual/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index 35e28ec1..75d3292c 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -42,7 +42,7 @@ Within the `track_visual` tag, you can see how to select a visual by specifying -Because `` is set to `false`, the position of the camera may vary but the distance between the camera and the model will depend on the value of the `min_dist` and `max_dist` elements. +Because `` is set to `false`, the position of the camera may vary but the distance between the camera and the model origin will depend on the value of the `min_dist` and `max_dist` elements. Now change `` to `true`: From fa92b63edd72cd10b851b8d807d7baa726cab84f Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Mon, 11 Jan 2016 14:55:56 +0100 Subject: [PATCH 05/12] Removed ~~~ when not needed --- track_visual/tutorial.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index 75d3292c..07678c8f 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -46,7 +46,6 @@ Because `` is set to `false`, the position of the camera may vary but th Now change `` to `true`: - ~~~ @@ -55,13 +54,11 @@ Now change `` to `true`: - ~~~ Relaunch Gazebo. The position of the camera is now fixed relatively to the model being tracked. By default, the camera is located 5 meters behind and 1 meter above the model. Try changing its location by specifying a `` tag: - ~~~ @@ -71,13 +68,11 @@ By default, the camera is located 5 meters behind and 1 meter above the model. T - ~~~ Relaunch Gazebo. The camera is now located 3 meters in front, 2 meters to the left, and 5 meters above the tracked model. Finally, we introduce the `` tag whose default value is `true`. When the `` tag is `true`, this element specifies whether the coordinates provided by `` are relative to the model reference frame or the world reference frame. Try changing the value of the `` tag: - ~~~ @@ -88,13 +83,11 @@ Finally, we introduce the `` tag whose default value is `true`. When t - ~~~ Relaunch Gazebo. The camera now stays at 10 meters above the origin. To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: - ~~~ @@ -105,13 +98,11 @@ To illustrate the last element, we will track a sphere instead of a cube. Change - ~~~ Relaunch Gazebo. You should now see the camera following the sphere. But there is one issue: the camera jumps back and forth whenever the sphere makes a half turn. That is because, by default, the camera is configured to inherit the yaw rotation of the tracked visual. To prevent this behaviour, simply set the `` tag to `false`: - ~~~ @@ -123,7 +114,6 @@ To prevent this behaviour, simply set the `` tag to `false`: - ~~~ Relaunch Gazebo. The camera should now follow the sphere flawlessly. From 27a331b869bde4457ad94c3db03187b3b6d20cfd Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Mon, 11 Jan 2016 14:57:55 +0100 Subject: [PATCH 06/12] Use the sphere example --- track_visual/tutorial.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index 07678c8f..aa3b6ac1 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -84,14 +84,14 @@ Finally, we introduce the `` tag whose default value is `true`. When t -Relaunch Gazebo. The camera now stays at 10 meters above the origin. +Relaunch Gazebo. The camera is now staying 10 meters above the origin. To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: - box + sphere true true 2 0 1 @@ -106,7 +106,7 @@ To prevent this behaviour, simply set the `` tag to `false`: - box + sphere true true false From dc851f13257ed1fb25f8a146f6276bfa3cd692a2 Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Mon, 11 Jan 2016 14:58:20 +0100 Subject: [PATCH 07/12] Minor change --- track_visual/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index aa3b6ac1..8f7b8c08 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -86,7 +86,7 @@ Finally, we introduce the `` tag whose default value is `true`. When t Relaunch Gazebo. The camera is now staying 10 meters above the origin. -To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: +To illustrate the last element ``, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: From 08cb3ccd1533357a848dae559f5772a8a49be2c7 Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Wed, 13 Jan 2016 15:48:34 +0100 Subject: [PATCH 08/12] renamed relative to use_model_frame --- track_visual/tutorial.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index a35b9540..3867a54c 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -75,7 +75,7 @@ By default, the camera is located 5 meters behind and 1 meter above the model. T Relaunch Gazebo. The camera is now located 3 meters in front, 2 meters to the left, and 5 meters above the tracked model. -Finally, we introduce the `` tag whose default value is `true`. When the `` tag is `true`, this element specifies whether the coordinates provided by `` are relative to the model reference frame or the world reference frame. Try changing the value of the `` tag: +Finally, we introduce the `` tag whose default value is `true`. When the `` tag is `true`, this element specifies whether the coordinates provided by `` are relative to the model reference frame or the world reference frame. Try changing the value of the `` tag: ~~~ @@ -83,7 +83,7 @@ Finally, we introduce the `` tag whose default value is `true`. When t box true - false + false 0 0 10 @@ -92,7 +92,7 @@ Finally, we introduce the `` tag whose default value is `true`. When t Relaunch Gazebo. The camera now stays at 10 meters above the origin. -To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: +To illustrate the last element, we will track a sphere instead of a cube. Change `` to `sphere` and make sure that `` and `` are set to `true`: ~~~ @@ -100,7 +100,7 @@ To illustrate the last element, we will track a sphere instead of a cube. Change box true - true + true 2 0 1 @@ -117,7 +117,7 @@ To prevent this behaviour, simply set the `` tag to `false`: box true - true + true false 2 0 1 From cf2d39f2e3a90bedc76d654c9bca4625a12b654b Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Wed, 13 Jan 2016 15:49:55 +0100 Subject: [PATCH 09/12] added list of parameters --- track_visual/tutorial.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index 3867a54c..104a224a 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -127,6 +127,16 @@ To prevent this behaviour, simply set the `` tag to `false`: Relaunch Gazebo. The camera should now follow the sphere flawlessly. +Below is the complete list of elements that can be set within ``: + +* ``: Name of the tracked visual. If no name is provided, the remaining settings will be applied whenever tracking is triggered in the GUI. This parameter is never ignored. +* ``: If set to `true`, the position of the camera is fixed relatively to the model or to the world, depending on the value of the `` element. Otherwise, the position of the camera may vary but the distance between the camera and the model will depend on the value of the `` and `` elements. In any case, the camera will always follow the model by changing its orientation. This parameter is never ignored. +* ``: Minimum distance between the camera and the tracked visual. This parameter is ignored when `` is `true`. +* ``: Maximum distance between the camera and the tracked visual. This parameter is ignored when `` is `true`. +* ``: If set to `true`, the position of the camera is relative to the model reference frame, which means that its position relative to the model will not change. Otherwise, the position of the camera is relative to the world reference frame, which means that its position relative to the world will not change. This parameter is ignored when `` is `false`. +* ``: The position of the camera's reference frame. If `` is set to `true`, the position is relative to the model reference frame, otherwise it represents world coordinates. This parameter is ignored when `` is `false`. +* ``: If set to `true`, the camera will inherit the yaw rotation of the tracked model. This parameter is ignored when `` is `false` or when `` is `false`. In other words, it is only used if `` and `` are both `true`. + ## Dynamic Reconfigure The camera properties can be adjusted dynamically within Gazebo. From f32d0fb52bccdbd0c83f2e8f3e4695321ce235a2 Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Thu, 14 Jan 2016 10:04:40 +0100 Subject: [PATCH 10/12] new sphere example --- track_visual/files/track_visual.world | 26 ++++---------------------- track_visual/tutorial.md | 12 +++++------- 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/track_visual/files/track_visual.world b/track_visual/files/track_visual.world index 68a6b309..564ee31f 100644 --- a/track_visual/files/track_visual.world +++ b/track_visual/files/track_visual.world @@ -74,7 +74,7 @@ - 0 2 0.5 0 0 0 + 4 2 0.5 0 0 0 @@ -92,27 +92,9 @@ - - - - - - link - - - 0 0.5 0 - - - 0.5 - - - 5 - - - 0 - 0 + + 0 0 0 + 0 0 1 diff --git a/track_visual/tutorial.md b/track_visual/tutorial.md index c68b12f6..e37969bb 100644 --- a/track_visual/tutorial.md +++ b/track_visual/tutorial.md @@ -94,14 +94,12 @@ To illustrate the last element ``, we will track a sphere instead o sphere true true - 2 0 1 + -3 0 0 -Relaunch Gazebo. You should now see the camera following the sphere. But there is one issue: the camera jumps back and forth whenever the sphere makes a half turn. That is because, by default, the camera is configured to inherit the yaw rotation of the tracked visual. - -To prevent this behaviour, simply set the `` tag to `false`: +Relaunch Gazebo. You should now see a sphere rotating in front of the camera. By default, the camera is configured to ignore the pitch, roll and yaw of the model. To inherit the yaw rotation of the visual, simply set the `` tag to `true`: @@ -109,13 +107,13 @@ To prevent this behaviour, simply set the `` tag to `false`: sphere true true - false - 2 0 1 + -3 0 0 + true -Relaunch Gazebo. The camera should now follow the sphere flawlessly. +Relaunch Gazebo. The camera should now rotate around the sphere as it turns around. Below is the complete list of elements that can be set within ``: From a4c63d49df127adb52a5b697abaaf3139e53c537 Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Wed, 12 Jul 2017 14:18:48 +0200 Subject: [PATCH 11/12] fix sdf version --- track_visual/files/track_visual.world | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/track_visual/files/track_visual.world b/track_visual/files/track_visual.world index 564ee31f..4b55a4c4 100644 --- a/track_visual/files/track_visual.world +++ b/track_visual/files/track_visual.world @@ -1,5 +1,5 @@ - + From c607aa673c3ad96afc207cc8c7d0e8e10d766d83 Mon Sep 17 00:00:00 2001 From: Olivier Crave Date: Wed, 12 Jul 2017 14:19:43 +0200 Subject: [PATCH 12/12] change user camera pose to better visualize the scene --- track_visual/files/track_visual.world | 1 + 1 file changed, 1 insertion(+) diff --git a/track_visual/files/track_visual.world b/track_visual/files/track_visual.world index 4b55a4c4..504ff0ac 100644 --- a/track_visual/files/track_visual.world +++ b/track_visual/files/track_visual.world @@ -12,6 +12,7 @@ + -2 0 2 0 0 0 box false