Post #14
Initial Draft
High-level design in detail
MVP
Stretch can navigate itself to the walker and use its gripper to grab the walker. Once it holds on to the walker, it can pull the walker to a target goal position.
Stretch Goals
Instead of dragging the walker to a target goal position on the map, it can detect a person and bring the walker to the person.
Nodes/Modules Already Implemented
The logic for detecting ArucoMarkers, the navigation stack as well as FUNMAP is already implemented. We will take advantage of these modules by using ArucoMarkers to detect the walker and the person, the navigation stack to navigate the robot's base to the detected walker and the person, along with FUNMAP to move stretch's gripper position.
Nodes/Modules to be Developed + Communication Between ROS Nodes
Note that the design above only serves as a starting point. We can be flexible since we might encounter changes to certain components or simplify some of the logic shown above. In our final post when we finish our MVP, we will include a more accurate graph that helps visualize the final design of our overall system.Â
We want to navigate the robot's base to the walker using the navigation stack, and thus we need to implement a node that is in charge of subscribing to transform frame messages from the ArucoMakerNode to get the walker position relative to the robot and relative to the map frame. This TF information is available once our markers are detected by stretch.
We need to send the TF of the marker on the walker to the navigation stack. Thus, a publisher is needed to publish that information to the navigation stack.
Once the robot's base is at an optimal position from the walker center, we might need a different marker to keep track of the grasp point of the walker. Another publisher is needed to publish where the goal is for FUNMAP to move stretch's gripper.
After stretch holds on to the walker, we can use the node that is in charge of publishing info to the navigation stack to move stretch's base. There should be a node that is used to detect the person, so that stretch can pull the walker towards the person. To do this, the node should publish info on where the person is in the map to the navigation stack, and the navigation stack should move stretch's base to the person while pulling the walker.
Responsibility
Website UI: James + whoever is able to help!
base navigation: Markus & Sylvia
gripper navigation (walker grasp): James & Francesca
detect_person (stretch goal): if we have time, we could work on the stretch goal together