Week 9
Issues Created
- #9: Include timer GUI inside the amazon warehouse web template
- #10: Make the amazon_warehouse pallets aligned in CustomRobots repository
- #11: Explore the application of SLAM Toolbox in the warehouse robot’s navigation stack
- #12: Fix waypoint navigation issue in Amazon warehouse exercise code (Debug amazon_robot_controller)
- #13: Fix issue in Amazon warehouse exercise code that requires us to press Pause and Resume in order to begin the costmaps
- #14: Construct a data structure to store destination and source locations of pallets, and state of the robot as well as check for completion of the deliveries of pallets
Progress on the Issues
Solving the robot_controller error
Error log
[robot_controller-13] [ERROR] [1623763205.850077317] []: Caught exception in callback for transition 10
[robot_controller-13] [ERROR] [1623763205.850086385] []: Original error: Possible typo? In the XML, you tried to remap port "goal" in node [NavigateToPose / NavigateToPose], but the manifest of this node does not contain a port with this name.
[robot_controller-13] [WARN] [1623763205.850104774] []: Error occurred while doing error handling.
[robot_controller-13] [FATAL] [1623763205.850112298] [robot_controller]: Lifecycle node robot_controller does not have error state implemented
Helpful References
- ROS Answers: nav2_bt_navigator exception in callback
- Behavior Tree XMLs
- Examining nav2_tree_nodes.xml in foxy-devel branch. Makes it amply clear that there is no port for “goal” in NavigateToPose. This is different from nav2_tree_nodes.xml in main branch
- ComputePathToPose XML Node
Solution
- Added following plugin_libs to
nav2_params_with_control.yaml
(under amazon_robot_bringup):+ nav2_compute_path_to_pose_action_bt_node + nav2_follow_path_action_bt_node
-
Modifications in the BT navigator
follow_waypoints_and_load.xml
(under amazon_robot_controller):Originally —
<ReactiveSequence> <GetNextGoal goals="{goals}" goal="{goal}" goal_achieved="{goal_achieved}"/> <NavigateToPose goal="{goal}" server_name="navigate_to_pose" server_timeout="10"/> <LoadPallet load_queue="{load_queue}"/> <!-- <Wait wait_duration="5"/>--> <SetBlackboard output_key="goal_achieved" value="true"/> </ReactiveSequence>
Changed to —
<ReactiveSequence> <GetNextGoal goals="{goals}" goal="{goal}" goal_achieved="{goal_achieved}"/> <ComputePathToPose goal="{goal}" path="{path}"/> <FollowPath path="{path}"/> <LoadPallet load_queue="{load_queue}"/> <SetBlackboard output_key="goal_achieved" value="true"/> </ReactiveSequence>
Solved!!
Incorporating SLAM
Need for SLAM
The pallets would be moved from original location. With a static map, we have immovable obstacles at those locations. This will impede efficiency of nav2’s planning
Potential solution
LifeLong Mapping is a feature of SLAM Toolbox which allows us to input an existing map (stored as a pose-graph instead of pgm file) and it continues to update the map from there
Caution
This doesn’t work together with AMCL localization. Need to break down all changes required in the amazon packages.
Progress
- For starters, check how
navigation_launch.py
under nav2_bringup andonline_async_launch.py
under slam_toolbox work together - I ran the example SLAM Toolbox demo with TurtleBot3 that was given
- I am trying to achieve a demo of lifelong mapping with TurtleBot3 first