$ show MichaelFYang/far_planner
This repository implements FAR Planner (Fast, Attemptable Route Planner using Dynamic Visibility Update), a robotic navigation system designed for subterranean environments. It builds and dynamically updates a visibility graph from LiDAR point cloud data to enable fast replanning in static and dynamic environments. The system uses a modular ROS architecture with separate components for contour detection, graph management, path planning, terrain handling, and sensor processing. Key features include dual-threaded operation (graph update and path search), RViz visualization, teleoperation capabilities, and integration with custom ROS message types for graph communication. The code was field-tested by the CMU-OSU Team in the DARPA Subterranean Challenge, where it won the 'Most Sectors Explored Award'.
The LLM identified 4 files worth highlighting for reuse:
Implements a dynamically updated visibility graph for robotic navigation, handling node and edge updates based on sensor data to manage static and dynamic obstacles. Demonstrates non-obvious graph maintenance strategies like edge voting and node activation/finalization. The module is relatively isolated (depends on utility functions and point cloud data) and could be adapted for other graph-based planning tasks.
Extracts 2D contours (polygons) from 3D point cloud data using RANSAC for plane fitting and projection, enabling environment modeling for visibility graph construction. Self-contained and reusable in other robotics or computer vision applications requiring boundary extraction. The module depends primarily on PCL and utility functions, making it a cleanly separable component.
Provides an RViz panel for robot teleoperation via joystick/gamepad, featuring smart joystick mode that adjusts commands based on obstacle proximity to avoid collisions. Follows standard ROS plugin patterns and could be extracted for use in other robotic teleoperation systems. The plugin is self-contained with clear ROS dependencies and minimal coupling to the core planner.
Contains reusable utility functions for point cloud processing (cropping, filtering, RANSAC plane fitting), vector operations, and coordinate transformations. Stateless and minimally dependent (mainly on PCL and Eigen), making it highly reusable across robotics or computer vision projects. The utility module demonstrates non-obvious skill in numerical robustness and efficient point cloud operations.