Field-Robotics-Lab / dave

Project DAVE
Apache License 2.0
225 stars 72 forks source link

Migration to ROS 2 and new Gazebo #283

Open mabelzhang opened 10 months ago

mabelzhang commented 10 months ago

Original discussion in https://github.com/Field-Robotics-Lab/dave/issues/276

DAVE is no longer being actively developed. It is being maintained on a volunteer basis by the community, largely dependent on individuals' availability. This migration effort is also expected to be carried out by the community, whoever interested. (At the time of writing, you can find those people in ROS Maritime Working Group meetings.)

This ticket outlines the items suggested to be done for a migration. The list is not exhaustive, and the ticket is expected to be edited as more things arise. We may turn some bullet items into tickets to track a task in detail.

Note that there are multiple parts to the migration - ROS, Gazebo, and the bridge between them. They should be tackled in pieces.

Suggested workflow

I would suggest people pick small items one at a time, and comment here which part you are working on, so that others have visibility and do not duplicate your work. We can add names to bullet items to make that organized and clear.

I would suggest creating a branch (named by the ROS 2 and Gazebo distro) in this repo. People can open PRs from their forks to target. You can fork the repository to work on your task. Each task should be in a separate PR.

Selecting the version of ROS 2 and new Gazebo

The official recommendation is in the table here.

What's not yet on the page is that Gazebo Harmonic will be paired with ROS 2 Jazzy, when Jazzy is released in May 2024. What is currently ROS 2 Rolling will become Jazzy.

If considering selecting a pairing that's not officially supported (very likely, because we should upstream contributions to Gazebo), make sure to read "Using a specific and unsupported Gazebo version with ROS 2" section on this page.

Migrating to New Gazebo

See migration tutorials from Gazebo-classic to new Gazebo.

Upstreaming DAVE SDF models to Fuel

Gazebo Fuel is a free online dataset with Gazebo models that are ready to plug and play. It has a web interface that allows users to browse, preview, and download SDF models.

This is the lowest hanging fruit in this migration. We had already upstreaming newly created models to the DAVE collection on Fuel. It remains to upstream existing models to the same collection. As models are upstreamed, they can be deleted in this repo.

Example PRs that upstreamed new models to Fuel:

Related issue:

Upstreaming DAVE Gazebo plugins to new Gazebo

To ensure future maintenance of DAVE, it is very important that models and Gazebo plugins being ported to new Gazebo are upstreamed to Gazebo as much as possible, as opposed to just remaining in this repo, which is likely to go out of maintenance again, like many other marine simulators. Once they become built-in to Gazebo, they will be maintained in the future by Gazebo developers and can be used by everybody, beyond DAVE users.

Upstreaming things adds some overhead, because code needs to be formatted following Gazebo styling, and code takes longer to review upstream and get merged. However, the plus side is, they WILL get reviewed by the Gazebo team. PRs in DAVE are not guaranteed to be reviewed, since maintenance availability is very low in DAVE right now.

To write code intended for upstreaming, see Gazebo contributing guide, which contains the style guide. You can also see general styling in gz-sim and other gz-* libraries. DAVE GitHub workflow may need to be updated to check the style.

Some things in this repo have already been upstreamed to new Gazebo, including but not limited to the list below. You don't need to repeat the effort. There might be others. Check all existing systems (plugins) in gz-sim/src/systems and the Feature Comparison page before porting a plugin.

Migrating to ROS 2

Migration tutorials from ROS 1 to ROS 2: https://docs.ros.org/en/iron/How-To-Guides/Migrating-from-ROS1.html

I think these are the main files in DAVE that need migrating, there may be more:

Migrating bridge and integration between ROS and Gazebo

See integration tutorials for integrating new Gazebo with ROS.

Reference examples

Implementation suggestion

I might suggest this order of operation:

  1. The simplest things to start with would be the Gazebo SDF models - upstreaming the SDF models to Fuel https://app.gazebosim.org/dashboard , updating the files to the new URL on Fuel. As you upstream, you'd delete them from the repo (in a new branch of course). Make sure that still works.
  2. Then maybe the URDF models, to make sure robots still load.
  3. Then try the hydrodynamics and buoyancy plugins in new Gazebo, see if things still behave correctly.
  4. I would save the plugins for the very last, because they're likely the most complicated to migrate. Maybe Gazebo plugins are more isolated (I haven't looked at them). ROS plugins probably have more dependency as it would require the ros_gz bridge.
mabelzhang commented 10 months ago

@caguero Thanks for the input! Does anything jump out to you, or anything to add? (Not to ask you to read the whole thing 😅)

woensug-choi commented 4 months ago

Google Summer of Codes program is on for this subject! Kanban board for this summer project is at https://yeongdocat.notion.site/GSoC-2024-Open-Robotics-Dave-Multibeam-Sonar-371f9005851e4682a0128b800ec08542?pvs=4

mabelzhang commented 3 months ago

For visibility, GSoC ongoing work is in a fork: https://github.com/IOES-Lab/dave