Results
Our finished solution met our basic design criteria, as we were able to map, detect, and move objects. Due to constraints with the project demonstration, we decided to simplify the object detection and worked with colored tissue boxes in place of chairs and tables of real size. Though this scaled down the project significantly, we were able to use the 3D cameras to visualize the boxes and interact with them as if they were chairs.
Challenges
- RealSense - Turtlebot Connection:
- To integrate RealSense with the Turtlebot, we wanted to install the ROS RealSense package onto the Turtlebot. However, after we discovered that the package doesn’t work on the Turtlebot, we had to use a really really really long wire as the connection between the computer and the RealSense camera mounted on the Turtlebot.
- When testing the occupancy grid with this wire, we found that the wire interfered with driving and IMU data, which ended up breaking the grid.
- Occupancy Grid Speed: We discovered during testing that our occupancy grid updated a lot slower than expected, which caused a delay in the path-planning algorithm. While we were able to optimize our occupancy grid to update in around 3-4 seconds per iteration, this still meant that the robot would have to wait a few seconds in each location to properly generate and update the occupancy grid.
- Synchronizing Sensing + Planning + Actuation: We kept running into a ROS error that said that the data was outdated. The issue was that the full loop involving updating the occupancy grid and computing the shortest path took too long, causing the published frames to be too far out of sync. Our solution was to isolate path planning and state detection and send out the actual actuation commands. Instead of continuously updating the state, we only updated the state occasionally. This assures that we are able to publish control signals that accurately took into the current IMU data while also delaying state detection and path planning to a point where the robot is staying still.
Flaws/Hacks
The large sensor and planning node refreshes too slow for control. To get around that, we have to pause and resume the sensor and planning part such that sensor and planning can be executed independently from the actual control. This hack worked for the demo, but would need to be revised by either splitting into two different nodes or figuring out some other concurrency mechanism for real world applications.
Improvements
- Direct camera connection to Turtlebot
- Better IMU + Odometry Integration
- Optimize Occupancy Grid Calculations for Faster Processing
- Scaling to Real Size Objects (chairs, tables, etc.)
- Improved idle, exploration, and path planning trajectories
- Separation of occupancy grid calculation and path planning