This is my first ROS learning note . I decide to study ROS because of my work where a cleaning robot is required to complete a room cleaning task. The key point is to navigate a path to cover the room considering the obstacle avoidance. So I plan to start from Navigation Stack and gradually deep learning each package of Navigation Stack including Move_base, costmap_2d and global_planner or local_planner , each of these is significant for executing an effective navigation path calculation.
- Navigation Stack
ROS wiki : http://wiki.ros.org/navigation?distro=electric
navigation:amcl |base_local_planner | carrot_planner | clear_costmap_recovery | costmap_2d | dwa_local_planner | fake_localization | map_server | move_base | move_base_msgs | move_slow_and_clear | nav_core | navfn | robot_pose_ekf | rotate_recovery | voxel_grid
A 2D navigation stack that takes in information from odometry, sensor streams, and a goal pose and outputs safe velocity commands that are sent to a mobile base.
According to wiki tutorial, we get in touch with important concepts, such as Transforms(tf) , Odometry , Costmap , Global_planner, Local_planner , Move_base , AMCL,Teb_localPlanner.
The move_base node provides a ROS interface for configuring, running, and interacting with thenavigation stack on a robot. A high-level view of the move_base node and its interaction with other components is shown above. The blue vary based on the robot platform, the gray are optional but are provided for all systems, and the white nodes are required but also provided for all systems. For more information on configuration of themove_base node, and the navigation stack as a whole, please see thenavigation setup and configuration tutorial.
This package provides an implementation of a 2D costmap that takes in sensor data from the world, builds a 2D or 3D occupancy grid of the data (depending on whether a voxel based implementation is used), and inflates costs in a 2D costmap based on the occupancy grid and a user specified inflation radius. This package also provides support for map_server based initialization of a costmap, rolling window based costmaps, and parameter based subscription to and configuration of sensor topics.
tf is a package that lets the user keep track of multiple coordinateframes over time. tf maintains the relationship between coordinateframes in a tree structure buffered in time, and lets the usertransform points, vectors, etc between any two coordinate frames atany desired point in time.
The navigation stack uses tf to determine the robot's location in the world and relate sensor data to a static map. However, tf does not provide any information about the velocity of the robot. Because of this, the navigation stack requires that any odometry source publish both a transform and a nav_msgs/Odometry message over ROS that contains velocity information. This tutorial explains the nav_msgs/Odometry message and provides example code for publishing both the message and transform over ROS and tf respectively.
The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.