These weeks were spent writing a design document for our project and continuing to get familiar with Gazebo.
Filling out the Gazebo design doc template was actually a great structured way to get introduced to the project and make sure that I understand all the moving parts. A lot of my learning process over the past few weeks went as follows
- Try to write a section of the design document
- Realize that I am confused or need clarification
- Read documentation, with limited success
- Ask for help
This process seemed to work out pretty well for me, and after some back-and-forth edits with José, we were able to submit a fairly complete design doc draft to Gazebo Design, where we’ll hopefully get some helpful critiques before moving forward.
Some Design Considerations
José and I quickly realized that this project had the potential to be as simple or complex as we could manage. There a plenty of features that would be nice to implement, but might be difficult to shoot for right off the bat. So to reiterate quickly, our baseline goal for this project is to create
A model plugin which can move the model to a target position given the current world information.
From there, there are still a lot of questions. For example, are we going to handle planning in high dimensional space? Given the many existing path planning libraries and algorithms available, how to choose? How will the models be moved?
We’ve decided to design the plugin to work with a number of different path planner interfaces and movement interfaces, with the goal of allowing users to customize path planning and model movement options. The architecture looks something like this. The plugin itself will handle the process of translating world information into a collision map, passing this information to the planner, collecting the results and handing them off to a movement interface, which will be responsible for communicating movement messages to the server. See the design doc for more details.
So to start off, we’re going to concentrate on getting down the most basic functionality: calculating a collision map, an interface to a simple path planner, and a movement interface which will simply push a model from point to point with reasonable granularity. As things come together, we’ll work on supporting an external path planner, and other, fancier things.
Coming soon: actual code! 😀