-
Notifications
You must be signed in to change notification settings - Fork 8
Decision Making Node
The decision-making node determines whether the rover is at the waypoint provided by the navigation node. If the rover is not at the waypoint, it will calculate the best trajectory's velocity commands to get the rover the the waypoint or as close as possible.
"src/autonomous_nav/autonomous_nav/decision_making_node.py"
"odometry/filtered" Message Type: Odometry Description: Global position and heading of the rover.
"/projected/map" Message Type: nav_msgs/msg/Path Description: Rolling window costmap for obstacle detection
"path" Message Type: nav_msgs/msg/Path Description: ROS2 Path message with waypoints from navigation node
"/navigation_status" Message Type: nav_msgs/msg/Path Description: Status updates from navigation system
"move_left_drivebase_side_message" Message Type: std_msgs/msg/Float32 Format: Float32 Data Type: Float32
"move_right_drivebase_side_message" Message Type: std_msgs/msg/Float32 Format: Float32 Data Type: Float32
waypoint_reached_threshold Used to determine whether the rover is at the waypoint.
global_x Used to track global x coordinate of the rover.
global_y Used to track the global y coordinate of the rover.
local_x Used to track local x coordinate of the rover.
local_y Used to track the local y coordinate of the rover.
The Decision Making Node takes in an OccupancyGrid and a ROS2 Path object with waypoints. With this information, it calculates how far the rover is from the first waypoint. If the destination threshold is not broken, the the Decision Making Node will create a DWAPlanner object and calculate the velocity commands using the dynamic window approach. This approach calculates all possible trajectories the rover can make based on current velocity, and maximum change in velocity values. These trajectories are then weighed based on distance from the waypoint goal and the cost of navigating over the terrain. The velocity commands for the cheapest trajectory are then returned.