<<PackageHeader(line_planner)>> <<TOC(4)>> ## AUTOGENERATED DON'T DELETE ## CategoryPackage = Simple Projecting Line Planner = A local planner that takes two goals (last and next), and follows a projected goal that keeps it close to the line segment between the two goals. Designed to resist strong side forces, such as from wind or water current. {{https://github.com/MoffKalast/line_planner/raw/noetic-devel/docs/demo.gif}} == Params == Note that min speed should be less or equal to max speed. {{{ #!xml <node name="line_planner" pkg="line_planner" type="line_planner_node.py" output="screen"> <param name="publish_debug_markers" value="true"/> <param name="max_turning_velocity" value="0.9"/> <param name="max_linear_velocity" value="0.45"/> <!-- If base_link is this far away from the line, the projected distance will be min and scale to max when it's on the line.--> <param name="max_line_divergence" value="1.0"/> <param name="min_project_dist" value="0.15"/> <param name="max_project_dist" value="1.2"/> <!-- Distance at which the goal is considered reached.--> <param name="goal_distance_threshold" value="0.6"/> <!-- PID params for heading control.--> <param name="P" value="3.0"/> <param name="I" value="0.001"/> <param name="D" value="65.0"/> <!-- Update rate, should be about the same as localization rate.--> <param name="rate" value="30"/> <!-- If we make no or negative progress for this long, the goal is aborted. (seconds)--> <param name="abort_timeout" value="30.0"/> </node> }}} Here's a diagram showing the possible states of the planner, and which distances each parameter affects: {{https://github.com/MoffKalast/line_planner/raw/noetic-devel/docs/diagram.png||width=750}} == Subscribed Topics == * `/move_base_simple/goal` (PoseStamped), takes the current position as the starting point and moves towards the goal * `/move_base_simple/clear` (Empty), stops all movement immediately * `/move_base_simple/waypoints` (Path), takes each two consecutive points and navigates along the line between them == Published Topics == * `/cmd_vel` (JointState), publishes velocity for both wheels/tracks/propellers * `line_planner/active` (Bool), publishes the activity state of the planner * `line_planner/plan` (Path), publishes a nav plan, also the entire route if given * `line_planner/markers` (MarkerArray), publishes debug markers shown above == Dynamic Reconfigure Params == * `publish_debug_markers` (bool_t), if set to True, the node will publish markers for debugging purposes. * `max_turning_velocity` (double_t), the maximum velocity at which the robot can turn. * `max_linear_velocity` (double_t), the maximum linear velocity of the robot. * `linear_acceleration` (double_t), the linear acceleration/deceleration of the robot. * `max_line_divergence` (double_t), the maximum distance that the robot can diverge from the line between the goals. * `min_project_dist` (double_t), the minimum projection distance for the goal. * `max_project_dist` (double_t), the maximum projection distance for the goal. * `goal_distance_threshold` (double_t), the distance at which a goal is considered reached. * `P` (double_t), the proportional gain for the PID controller that controls the heading of the robot. * `I` (double_t), the integral gain for the PID controller. * `D` (double_t), the derivative gain for the PID controller. * `side_offset_mult` (double_t), multiplier for the side projection of the robot's position. * `rate` (int_t), the rate at which the robot updates its position and velocity. ---- == Bounding Box to Path Helper == This package also contains a small helper demo node that takes a rectangle defined as a PolygonStamped and turns it into various patterns which then get published as a Path that the line planer can execute. Right now it provides three different patterns: lawnmower, expanding square, and victor sierra. The lawnmower pattern creates a path in a back-and-forth, or "mowing the lawn" manner. The expanding square pattern creates a square outward spiral path. The victor sierra pattern is a coast guard sector search. It also accepts a home polygon, which it uses to add a final waypoint that points back home after following the path, so the robot doesn't get stuck out of wifi range. == Params == {{{ #!xml <node name="area_to_path_node" pkg="line_planner" type="area_to_path_node.py" output="screen"> <param name="step_size" value="2.0"/> <!-- determines the distance between parallel lines --> </node> }}} == Subscribed Topics == * `/area_to_path/lawnmower` (PolygonStamped), takes a 4 vertex square and creates a lawnmower path inside it. * `/area_to_path/expanding_square` (PolygonStamped), takes a 4 vertex square and creates an expanding square (spiral) path inside it. * `/area_to_path/victor_sierra` (PolygonStamped), takes a 4 vertex square and creates a victor sierra (star) path inside it. * `/area_to_path/home` (PolygonStamped), takes a 4 vertex square and sets the center point as the home position. == Published Topics == * `/move_base_simple/waypoints` (Path), publishes the created path.