LCR Obstacle Avoidance Guide - directedmachines/customer-support GitHub Wiki

Table of Contents

Overview

The Obstacle Avoidance (O.A) Path planner is a SW component used for both manual and autonomous navigation. It integrates several sensors to provide the following functionality

  • Avoid obstacles in the direction of motion
  • Integrate virtual obstacles with physical obstacles, and avoid them, using GPS and IMU data (magnetic heading, odometry) to localize the user defined exclusion areas in relation to robot position
  • Navigate in the presence of structure (rows), using visual cues, eliminating the need for global sensors (GPS, IMU mag)

Obstacles that might seem as benign (robot can go through them) will often cause the robot to react and stop motion. The O.A planner has several layers of filtering to eliminate false positives but it is a very conservative planner, so user defined settings a required to overcome certain situations.

Prerequisites

Configuration

The O.A planner is configured through the use of parameter domain areas overlaid with the waypoint and work areas. Key configuration parameters are also defined in the AGT task settings and summarized below

  • Implement Width (found in AGT Settings) - Defines the width of the robot + implement and guides OA in finding openings and structure. If this setting is not accurate, the LCR will not be safe to operate
  • Detection distances (X,Z) - Define the active region of detection (X is left/right, Z is forward). Set through parameter domains and visualized in through the point cloud visualization UI
  • Obstacle height min/max - Define the height of obstacles that will be considered during motion, set through parameter domains

Rows

The LCR uses depth vision to detect structure, allowing it to operate in GPS denied environments, or when magnetic anomalies are present. It can avoid both static and dynamic obstacles within the field of view of its depth sensors. It requires careful configuration however, for best results, in challenging environments.

For structured row navigation, please review AGT Guide 4 and Remote Operation Guide 5 plan design. Orchards and solar installations need careful plan design and O.A parameter configuration. They usually require at least one day of tuning, before autonomy can run reliably in rows, assuming rows are homogeneous.

Open areas

Open area mowing requires different configuration of O.A parameters, compared to rows.

Tall grass / first mow

If the area has not been mowed, tall grass is present, the LCR should be supervised during the first mow.

Never enable autonomy in high grass if animals or people are present.

The following settings will need to be set, for autonomy to proceed in areas with high vegetation:

  • Draw a parameter domain that covers the work area
  • Edit the parameter domain by clicking on it
  • Set min obstacle height to the height of vegetation. Do not set above 900mm. If its higher than 900mm, you will need to use a different setting
  • Set max obstacle height to 1300mm so we can see taller plants and structure.
  • The LCR will collide with anything below 900mm, including grass and anything hiding inside it. Never use these settings unless you are taking responsibility for supervising the LCR closely and stopping it.
  • Click "Close" to save the parameter settings

Even with the settings above, the LCR might refuse to move in overgrown areas. For those cases, you can set the "Obstacle Type" parameter in "Configure Task" Settings, in AGT, to *user-defined. The LCR will now only consider exclusion areas as obstacles and ignore physical obstacles.

Visualization

The O.A Point Cloud Visualization UI, accessed through an icon on bottom right of Manual and AGT UI, offers insights into O.A behavior.

Coordinate System

Screenshot from 2024-03-13 12-04-50

The robot uses a left handed coordinate system, where:

  • X axis: X+ to the right side of robot, for active orientation (Axle vs Casters FWD)
  • Y axis: Y+ towards the sky, away from ground
  • Z-axis: Z+ points away from active camera, leading edge of robot

Rotations are measured CCW about the X,Y, and Z axes

  • X-axis = Pitch: Positive when the nose of the robot points down
  • Y-axis = Yaw: Positive when turning to the right (like a compass)
  • Z-axis = Roll: Positive when the LCR tips to the left

If an obstacle appears to the right of center of the concentric circles, and towards the top of the image, then its to the front and right of the active direction of motion (Axle vs Casters FWD).

UI Controls

Use the mouse or touch screen to rotate the visualization or zoom in / out. Different layers can be turned off using the "Configure" settings in the top-left corner.

Screenshot from 2024-03-13 10-32-14

Grid

  • The bright white grid lines indicate 1 meter intervals
  • The dimmer grey grid lines indicate 0.5 meter intervals

Screenshot from 2024-03-13 13-44-10

LCR plus implement Convex Hull

The light brown rectangles represent the LCR frame and implement.

Please note the implement size: if it appears small, the Implement Width was not set properly in the AGT Settings, a critical parameter for safe navigation

Image below shows LCR in Axle forward mode (implement mounted in 3PT), about 2.5m wide, with obstacle to the right

Screen Shot 2022-07-31 at 2 04 22 PM

Active Detection Region

The green rectangle is the active region where obstacles will be considered:

  • obstacle height min and max defines the height of the active region and its distance from the ground plan
  • detection distance Z defines the length of the rectangle and how far the LCR will consider obstacles before making decisions
  • detection distance X defines the width of the rectangle and how far to the left or right the LCR will consider obstacles
  • depth returns that are within the Active Detection Region will show as green

Obstacle Point Cloud

Obstacle returns from the depth sensor are shown by colored dots

  • :brown_square: Brown points are at or below the ground plane
  • :white_circle: White points are closer to the ground
  • :blue_square: Blue points are closer to the sky
  • :green_square: Green points are within the Active Detection Region

Screenshot from 2024-03-13 13-36-44

Obstacle "Fence"

  • All the obstacle returns are processed and fused into a single 360 degree "fence" that defines where a robot can and cannot drive
  • This is represented by vertical white posts
  • If exclusion areas are within view they are represented by vertical red posts

Screenshot from 2024-03-13 13-39-03 Screenshot from 2024-03-13 10-25-19

Left and Right Obstacle Goal Posts

The yellow text at the bottom of the point cloud visualization indicates 3 key pieces of information

  • The velocity O.A is suggesting to the planners, based on the obstacles detected:
    • X scalar is the turn magnitude, with negative being a left turn, normalized in the [-1,1] region
    • Z scalar is the translation magnitude, always a positive number in [0,1]. Its value is proportional to opening between obstacles, closest obstacle and other parameters. The value can be multipled by robot top speed to get a meters/second number
  • The left "goalpost" or obstacle - the X and Z values indicate what average position from the point cloud, on left of robot, we will use to make decisions. If a far obstacle is of the left of robot center and in the way of the robot + implement, then its left X value will be less than the implement width / 2. For example, an obstacle at -1000mm is 1000mm to the left of the robot, and if the implement of the robot is 2200mm, then, robot + implement will likely run into the obstacle
  • The right "goalpost", same applies in terms of X and Z values, but this time, the value for X will be positive to indicate obstacle is to the right of robot

See example of a far obstacle, intersecting robot "width", but far and to the left

Bumper Visualization

  • The bumper visualization shows bumper locations if they are defined in the actuators/pico-controllers/tray-4260 state.
  • The color indicates the bumper status (see examples in image below):
    • :black_square_button: Grey: Bumper location is defined in pico tray state but bumper is disabled in state/pico tray UI.
    • :red_square: Red: Bumper location is defined in pico tray state + enabled, but bumper wiring is disconnected or triggered
    • :green_square: Green : Bumper location is defined in pico tray state + enabled, and bumper is wired properly and not triggered

Screenshot from 2024-03-13 10-29-28

Examples

View of point cloud from the top, zoomed out. Note obstacle to right and front

Zoomed in view, rotated to right, with actual color + depth image showing obstacle (another LCR!)

AGT view showing a exclusion area on left of robot, with physical obstacle to the right, with point cloud to the right

Exclusion areas will be visualized as "walls" since they are projections of areas onto a depth profile, merged with physical obstacles. If the robot is inside an exclusion area, they will appears as a tight circle of obstacles right next to the robot