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
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.
Grid
- The bright white grid lines indicate 1 meter intervals
- The dimmer grey grid lines indicate 0.5 meter intervals
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
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
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
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
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