[Documentation] [TitleIndex] [WordIndex

Package Summary

Simple navigation package

  • Maintainer status: developed
  • Maintainer: Jim Vaughan <jimv AT mrjim DOT com>, Rohan Agrawal <send2arohan AT gmail DOT com>
  • Author: Jim Vaughan <jimv AT mrjim DOT com>
  • License: BSD
  • Source: git https://github.com/UbiquityRobotics/move_basic.git (branch: kinetic-devel)


This package provides the move_basic ROS Node which provides a very basic navigation node.


The move_basic node performs very basic navigation. Path planning consists of rotating in place to face the goal and then driving straight towards it. It is designed to provide the same software interfaces as move_base, that is, it implements a SimpleActionServer (see actionlib documentation), that takes in goals containing geometry_msgs/PoseStamped messages.

It is assumed that we are dealing with imperfect localization data: map->base_link is accurate but may be delayed and is at a slow rate and odom->base_link is more frequent, but drifts, particularly after rotating. To counter these issues, move_basic plans in the map frame, and waits a short time after each step, and executes movement in the odom frame. If goals in the base_link frame are received, they are interpreted as relative to the robot's current position. This behavior is different to that of move_base, which will not accept goals in the base_link frame.

Obstacle Avoidance

If data from a laser scanner or sonars is available, obstacle avoidance can be performed. If an obstacle is detected, it will slow or stop in an attempt to avoid a collision.


Some of the data produced by move_basic can be visualized with rviz. In the screen shot below, the portion of the laser scan data (in white) which is currently in the path of the robot is depicted as a red line. The light purple line shows the path planned by the robot. A navigation goal can be sent to move_basic by rviz by pressing the 2D nav goal button and clicking on the map.


During rotation, the footprint of the robot is shown as a blue rectangle. The red box, if shown shows the rotation that can be performed without collision. If no obstacles are detected that obstruct a rotation, the red box is not shown.


Subscribed Topics

/move_base/goal (move_base_msgs/MoveBaseActionGoal) /move_base/cancel (actionlib_msgs/GoalID) /move_base_simple/goal (geometry_msgs/PoseStamped) /scan (sensor_msgs/LaserScan) /sonars (sensor_msgs/Range) /tf (tf2_msgs/TFMessage)

Published Topics

/move_base/feedback (move_base_msgs/MoveBaseActionFeedback) /move_base/status (actionlib_msgs/GoalStatusArray) /move_base/result (move_base_msgs/MoveBaseActionResult) /cmd_vel (geometry_msgs/Twist) /plan (nav_msgs/Path) /obstacle_distance (std_msgs/Float32) /obstacle_viz (visualization_msgs/Marker)


~min_angular_velocity (double, default: 0.05) ~max_angular_velocity (double, default: 1.0) ~angular_acceleration (double, default: 0.3) ~angular_tolerance (double, default: 0.01) ~min_linear_velocity (double, default: 0.1) ~max_linear_velocity (double, default: 0.5) ~linear_acceleration (double, default: 0.25) ~linear_tolerance (double, default: 0.01) ~localization_latency (double, default: 0.5) ~rotation_attempts (int, default: 1) ~obstacle_wait_limit (double, default: 10.0) ~reverse_without_turning_threshold (double, default: 0.5) ~map_frame (string, default: map) ~robot_width (double, default: 0.35) ~robot_front_length (double, default: 0.11) ~robot_back_length (double, default: 0.21)


sudo apt install ros-kinetic-move-basic


To move forward one meter using rostopic (note that bash completion will provide an empty message that can be filled out):

rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped "header:
  seq: 0
    secs: 0
    nsecs: 0
  frame_id: 'base_link'
    x: 1.0
    y: 0.0
    z: 0.0
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0" 

This is an example of a relative goal, since the frame_id is set to base_link. The position of the target pose is set to 1 meter in the forward direction, and the orientation is the identity quaternion.

2020-01-25 12:52