Skip to content

Commit b2b3e19

Browse files
authored
Merge pull request #14 from naturerobots/feature/dynamic-cost-updates
Reaction to MeshNav v3 + Real World Maps
2 parents 780c943 + 3b5945d commit b2b3e19

File tree

77 files changed

+3341
-181
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+3341
-181
lines changed

.gitattributes

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Physics Campus UOS
2+
mesh_navigation_pluto_sim/worlds/physics_campus_uos.sdf filter=lfs diff=lfs merge=lfs -text
3+
mesh_navigation_pluto_sim/models/physics_campus_uos/** filter=lfs diff=lfs merge=lfs -text
4+
mesh_navigation_pluto/maps/physics_campus_uos.ply filter=lfs diff=lfs merge=lfs -text
5+
6+
# Botanical Garden Osnabrueck
7+
mesh_navigation_pluto_sim/worlds/botanical_garden_osnabrueck.sdf filter=lfs diff=lfs merge=lfs -text
8+
mesh_navigation_pluto_sim/models/botanical_garden_osnabrueck/** filter=lfs diff=lfs merge=lfs -text
9+
mesh_navigation_pluto/maps/botanical_garden_osnabrueck.ply filter=lfs diff=lfs merge=lfs -text
10+
11+
# Stone Quarry Brockum
12+
mesh_navigation_pluto_sim/worlds/stone_quarry_brockum.sdf filter=lfs diff=lfs merge=lfs -text
13+
mesh_navigation_pluto_sim/models/stone_quarry_brockum/** filter=lfs diff=lfs merge=lfs -text
14+
mesh_navigation_pluto/maps/stone_quarry_brockum.ply filter=lfs diff=lfs merge=lfs -text
15+
16+
17+
# Coppenrath Innovation Centre (CIC) Outdoor
18+
mesh_navigation_ceres_sim/worlds/cic_outdoor.sdf filter=lfs diff=lfs merge=lfs -text
19+
mesh_navigation_ceres_sim/models/cic_outdoor/** filter=lfs diff=lfs merge=lfs -text
20+
mesh_navigation_ceres/maps/cic_outdoor.ply filter=lfs diff=lfs merge=lfs -text
21+
22+
# Agro-Technicum Osnabrueck
23+
mesh_navigation_ceres_sim/worlds/agrotechnicum.sdf filter=lfs diff=lfs merge=lfs -text
24+
mesh_navigation_ceres_sim/models/agrotechnicum/** filter=lfs diff=lfs merge=lfs -text
25+
mesh_navigation_ceres/maps/agrotechnicum.ply filter=lfs diff=lfs merge=lfs -text
26+
27+
# FH Aachen Campus (Provided by MASKOR)
28+
mesh_navigation_ceres_sim/worlds/fh_aachen.sdf filter=lfs diff=lfs merge=lfs -text
29+
mesh_navigation_ceres_sim/models/fh_aachen/** filter=lfs diff=lfs merge=lfs -text
30+
mesh_navigation_ceres/maps/fh_aachen.ply filter=lfs diff=lfs merge=lfs -text

README.md

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,31 @@ With the hand-modelled examples we particularly aim to support low-end computers
3232

3333
## Requirements and Installation
3434

35-
* You need a working ROS 2 installation. We target `humble` at the moment.
36-
* Go into a ROS 2 workspace's source directory `cd $YOUR_ROS_WS/src`.
37-
* Clone the tutorial code `git clone [email protected]:naturerobots/mesh_navigation_tutorials.git`
38-
* Get the tutorial's ROS 2 dependencies
39-
* Clone source dependencies: Run `vcs import --input mesh_navigation_tutorials/source_dependencies.yaml` in your ROS 2 workspace source directory.
40-
* Get packaged dependencies: Run `rosdep install --from-paths . --ignore-src -r -y` from within your ROS 2 workspace source directory.
41-
* Build: Go to workspace root `cd $YOUR_ROS_WS` and run `colcon build --packages-up-to mesh_navigation_tutorials`.
35+
You need a working ROS 2 installation. We target `humble` at the moment. Go into a ROS 2 workspace's source directory `cd $YOUR_ROS_WS/src`. Then clone the tutorial code
36+
37+
```bash
38+
GIT_LFS_SKIP_SMUDGE=1 git clone [email protected]:naturerobots/mesh_navigation_tutorials.git
39+
```
40+
41+
> [!NOTE]
42+
> If you forget to add `GIT_LFS_SKIP_SMUDGE=1` before `git clone` and you have Git LFS installed, all available maps will be downloaded during the clone. This may take a while. But than you skip all the Git LFS commands later.
43+
44+
Get the tutorial's ROS 2 dependencies
45+
* Clone source dependencies: Run `vcs import --input mesh_navigation_tutorials/source_dependencies.yaml` in your ROS 2 workspace source directory.
46+
* Get packaged dependencies: Run `rosdep install --from-paths . --ignore-src -r -y` from within your ROS 2 workspace source directory.
47+
48+
Build: Go to workspace root `cd $YOUR_ROS_WS` and run
49+
50+
```bash
51+
colcon build --packages-up-to mesh_navigation_tutorials
52+
```
4253

4354
## Run the Examples
4455

4556
### Launch
46-
```console
47-
ros2 launch mesh_navigation_tutorials mesh_navigation_tutorial_launch.py world_name:=floor_is_lava
57+
58+
```bash
59+
ros2 launch mesh_navigation_tutorials mesh_navigation_tutorials_launch.py world_name:=floor_is_lava
4860
```
4961

5062
You change `floor_is_lava` by any world name that is available with this repository (see all by calling launch file with `--show-args`). Those are:
@@ -57,7 +69,8 @@ You change `floor_is_lava` by any world name that is available with this reposit
5769

5870
When running a simulated world, you can save some resources by not running the gazebo GUI: Add the `start_gazebo_gui:=False` launch argument.
5971

60-
### Rviz GUI
72+
### RViz GUI
73+
6174
In rviz, you should be able to see the mesh map.
6275
This map is being used for navigation.
6376

@@ -69,15 +82,33 @@ The MbfGoalActions rviz plugin contains a very tiny state machine that performs
6982
* get a path to that pose
7083
* execute that path
7184

72-
## Detailed Instructions
85+
## Detailed Instructions
86+
87+
For more detailed instructions on how to parameterize things or what things can be changed see the [wiki](https://naturerobots.github.io/mesh_navigation_docs/tutorials/)
7388

74-
For more detailed instructions on how to parameterize things or what things can be changed see the [wiki](https://github.com/naturerobots/mesh_navigation_tutorials/wiki)
89+
## Extended Examples
7590

91+
Additionally, we offer larger maps that better resemble real-world scales:
92+
93+
* [Pluto Maps](./mesh_navigation_pluto/)
94+
* [Ceres Maps](./mesh_navigation_ceres/)
95+
96+
All requires Git LFS to be installed. Under Ubuntu you can simply type:
97+
98+
```bash
99+
sudo apt install git-lfs
100+
```
76101

77102
## Related Repositories
78-
- [Move Base Flex](https://github.com/magazino/move_base_flex) ([IROS 2018](https://doi.org/10.1109/IROS.2018.8593829))
79-
- [Mesh Tools](https://github.com/naturerobots/mesh_tools) ([RAS 2021](https://doi.org/10.1016/j.robot.2020.103688))
80-
- [Mesh Navigation](https://github.com/naturerobots/mesh_navigation) ([ICRA 2021 paper for Continuous Vector Field Planner, CVP](https://doi.org/10.1109/ICRA48506.2021.9560981))
81-
- [Rmagine](https://github.com/uos/rmagine) ([ICRA 2023](https://doi.org/10.1109/ICRA48891.2023.10161388))
82-
- [MICP-L](https://github.com/uos/rmcl) ([IROS 2024](https://arxiv.org/abs/2210.13904))
83-
- [RMCL](https://github.com/uos/rmcl)
103+
104+
* [Move Base Flex](https://github.com/magazino/move_base_flex) ([IROS 2018](https://doi.org/10.1109/IROS.2018.8593829))
105+
* [Mesh Tools](https://github.com/naturerobots/mesh_tools) ([RAS 2021](https://doi.org/10.1016/j.robot.2020.103688))
106+
* [Mesh Navigation](https://github.com/naturerobots/mesh_navigation) ([ICRA 2021 paper for Continuous Vector Field Planner, CVP](https://doi.org/10.1109/ICRA48506.2021.9560981))
107+
* [Rmagine](https://github.com/uos/rmagine) ([ICRA 2023](https://doi.org/10.1109/ICRA48891.2023.10161388))
108+
* [MICP-L](https://github.com/uos/rmcl) ([IROS 2024](https://arxiv.org/abs/2210.13904))
109+
* [RMCL](https://github.com/uos/rmcl)
110+
111+
112+
113+
114+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
project(mesh_navigation_ceres)
3+
4+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5+
add_compile_options(-Wall -Wextra -Wpedantic -Werror)
6+
endif()
7+
8+
# find dependencies
9+
find_package(ament_cmake REQUIRED)
10+
11+
# install
12+
install(DIRECTORY config launch rviz maps
13+
DESTINATION share/${PROJECT_NAME}
14+
)
15+
16+
# test
17+
if(BUILD_TESTING)
18+
find_package(ament_lint_auto REQUIRED)
19+
ament_lint_auto_find_test_dependencies()
20+
endif()
21+
22+
ament_package()

mesh_navigation_ceres/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Mesh Navigation Tutorials on Real World Ceres maps
2+
3+
This repository contains the "ceres" environments. A group of newer maps recorded in reality during the benchmarking of the MeshMPPI controller.
4+
5+
## Download GIT LFS
6+
7+
The following maps are available within this package:
8+
9+
- `cic_outdoor`
10+
- `agro_technicum`
11+
- `fh_aachen`
12+
13+
While being in the source directory of this repository, download all Ceres maps by entering
14+
15+
```bash
16+
git lfs pull --include="mesh_navigation_ceres*"
17+
```
18+
19+
or specific ones by calling
20+
21+
```bash
22+
git lfs pull --include="mesh_navigation_ceres*/**/cic_outdoor*"
23+
```
24+
25+
## Install Ceres Maps
26+
27+
Compile your ROS workspace to install the downloaded Ceres maps
28+
29+
```bash
30+
colcon build
31+
```
32+
33+
## Quick-Start
34+
35+
```bash
36+
ros2 launch mesh_navigation_ceres mesh_navigation_ceres_launch.py world_name:=cic_outdoor
37+
```
38+
39+
> [!NOTE]
40+
> Since the maps are quite large the startup might take some time to load.
41+
42+
43+
## Acknowledgements
44+
45+
We thank the [MASKOR](https://maskor.fh-aachen.de/) institute for supplying the TLS data of the `fh_aachen` environment for public use.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
ekf_filter_node:
2+
ros__parameters:
3+
frequency: 50.0
4+
two_d_mode: true
5+
6+
debug: false
7+
8+
map_frame: map # Defaults to "map" if unspecified
9+
odom_frame: odom # Defaults to "odom" if unspecified
10+
base_link_frame: base_footprint # Defaults to "base_link" if unspecified
11+
world_frame: odom # Defaults to the value of odom_frame if unspecified
12+
13+
odom0: /odom
14+
odom0_config: [false, false, false, #xyz
15+
false, false, false, # rpy
16+
true, false, false, #vxyz
17+
false, false, true, #vrpy
18+
false, false, false] #axyz
19+
20+
odom0_differential: false
21+
# odom0_relative: true
22+
23+
imu0: /imu/data
24+
imu0_config: [false, false, false, #xyz
25+
false, false, false, # rpy
26+
false, false, false, #vxyz
27+
true, true, true, #vrpy
28+
false, false, false] #axyz
29+
imu0_differential: false
30+
31+
use_control: false
32+
33+
# Whether the input (assumed to be cmd_vel) is a geometry_msgs/Twist or geometry_msgs/TwistStamped message. Defaults to
34+
# false.
35+
stamped_control: true
36+
37+
# The last issued control command will be used in prediction for this period. Defaults to 0.2.
38+
control_timeout: 0.2
39+
40+
# Which velocities are being controlled. Order is vx, vy, vz, vroll, vpitch, vyaw.
41+
control_config: [true, false, false, false, false, true]
42+
43+
# Places limits on how large the acceleration term will be. Should match your robot's kinematics.
44+
acceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 3.4]
45+
46+
# Acceleration and deceleration limits are not always the same for robots.
47+
deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5]
48+
49+
# If your robot cannot instantaneously reach its acceleration limit, the permitted change can be controlled with these
50+
# gains
51+
acceleration_gains: [0.8, 0.0, 0.0, 0.0, 0.0, 0.9]
52+
53+
# If your robot cannot instantaneously reach its deceleration limit, the permitted change can be controlled with these
54+
# gains
55+
deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
56+
# imu0_relative: true
57+
58+
# imu0_remove_gravitational_acceleration: true
59+
60+
# process_noise_covariance: [0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
61+
# 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
62+
# 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
63+
# 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
64+
# 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
65+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
66+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
67+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
68+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
69+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0,
70+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0,
71+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0,
72+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0,
73+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0,
74+
# 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1]
75+
76+
# [ADVANCED] This represents the initial value for the state estimate error covariance matrix. Setting a diagonal
77+
# value (variance) to a large value will result in rapid convergence for initial measurements of the variable in
78+
# question. Users should take care not to use large values for variables that will not be measured directly. The values
79+
# are ordered as x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Defaults to the diagonal values below
80+
# if unspecified. In this example, we specify only the diagonal of the matrix.
81+
# initial_estimate_covariance: [1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9, 1e-9]

0 commit comments

Comments
 (0)