RubbleBob
BubbleRob is the affectionate title for a template project in CoppeliaSim, a comprehensive robotics simulation software which was used in the first of two final performance assessments for my machine learning class at WGU. Since the point of this project was to create a robot for use in disaster recovery situations, I have been referring to him as RubbleBob instead.
This project is of interest to me for a few reasons: first, it contains a practical application of A*, which is much harder to implement than A* on a predefined graph of some small size. Secondly, CoppeliaSim offers both Python and Lua to script the robots it simulates. I chose Lua because it has been a very long time since I had a chance to use it, and it happens to be the first language I ever learned. I'm about twice as old now, and have a deep appreciation for the elegance of its construction, although it is an obtuse language at times.
My robot performs many raycasts with the help of a simulated rangefinder. Using these values, it constructs a boundary to represent its environment. This boundary has a direction, with one side denoting navigable space and another denoting unnavigable space. RubbleBob generates nodes on this boundary and expands them to produce a graph which can be navigated by A* pathfinding.

Above, you can see RubbleBob performing his very first pathfinding raycast on the map I have provided. Prior to this, he performed a spin to get a look at his immediate surroundings. The resulting boundary is shown in red with protrusions on the side representing navigable space. As you can see, much of the map is obscured from his starting position.
Green protrusions emanate from the unusually long boundary edges. These edges indicate to RubbleBob that two rangefinder readings, taken while facing in nearly the same direction, gave completely different results. He therefore sees an opportunity for exploration and navigates to a point beside the nearest long edge. The black lines are raycasts which can only interact with RubbleBob's internal boundary set, not with the actual scene geometry. These casts allow him to determine, based on previous readings, how far he thinks he can travel in a particular direction.
Above, RubbleBob clears two of the existing long edges to his satisfaction. As you can see, he does accommodate disconnected navigable space by allowing multiple boundaries to be active at once. Now, he must navigate to the other room. For the first time, he will have to employ his node expansion and A* pathfinding abilities (Well, technically, he has been doing that the whole time! Just on graphs with only two nodes).
The expanded nodes are shown in green and they emanate from the edges and vertices of the boundary set, allowing RubbleBob to follow along the walls as it were. The blue line represents the best path found so far. Once RubbleBob finds a path, he performs many many raycasts to find shortcuts where exactly following the wall would be pointless. This leads to a brief 3-node path to his goal from which he views the remainder of the map.