Over the past two weeks, I finally got into actually coding for the project. To be honest, despite our thorough design efforts, my inexperience with both big projects and working remotely left me having trouble getting started. After spinning my wheels for about a week, my mentor and I eventually figured out how make the problem more approachable: by dividing it into smaller pieces and posting them as individual issues on bitbucket.
This may seem like a no-brainer — after all, programming is all about dividing complex problems into smaller conceptual chunks. However, having these separate issues on bitbucket gave me a way to aggregate information/research on each of my problems, and ask Jose questions quickly. Having this forum made it easier not to simply hit a roadblock, get stuck, and procrastinate.
Now, here’s what I’ve actually been working on:
The Collision Map Generator
As noted in the design doc, one of the key components of using a path-planner is creating a collision map, a process which takes world information and transforms it into a map of where the world’s obstacles are. There are many ways to do this, but to start, Jose and I decided to work off a Gazebo tutorial explaining how to create a collision map using a ray-tracing technique. Essentially, this method shoots a ray in the z-direction at some valid (x, y) coordinate, and detects whether that ray intersects with any obstacles. If it does, that point is marked as occupied. If it doesn’t then the point is free. By doing this at every (x,y) coordinate, this technique can build a 2D map of the free and occupied space. The method isn’t perfect (consider a cube floating high above a model’s head, or terrain), but it’s a good starting space.
Just getting the tutorial code to work was a little more difficult than I anticipated, mostly due to cmake issues and problems that I suspect are peculiar to my system. After tinkering with the cmake file, I managed to get everything working (including setting up the custom message type, and eventually getting the correct output), but mysteriously, after making some innocuous changes to output format, I started to get connection errors, in which my request publisher would just hang. I’m still looking into this.
The Movement Interface
Jose pointed out another helpful tutorial on the basics of animation. Basically, this code demonstrates how to animate an object using pose. I’ve been experimenting with animation and getting a feel for things. Hopefully, I’ll soon have some working code for a basic movement plugin that can move a model from point to point.