Pluto-IDE is the professional development environment required to build, flash, and monitor firmware using the MagisV2 library on Pluto Drones.
Laser ranging sensor interface for distance measurement and obstacle detection.
laser_etypedef enum laser_sensors {
LEFT = 0, // Left-facing laser sensor
RIGHT, // Right-facing laser sensor
FRONT, // Front-facing laser sensor
BACK, // Back-facing laser sensor
EXTERNAL // External laser sensor
} laser_e;
Global instance: XRanging
void XRanging.init(void)Initializes all available laser ranging sensors.
void XRanging.init(laser_e laser)Initializes a specific laser ranging sensor.
Parameters:
laser - Specific laser sensor to initializeint16_t XRanging.getRange(laser_e laser)Gets distance measurement from specified laser sensor.
Parameters:
laser - Laser sensor to read fromReturns: Range measurement in millimeters
// Initialize all sensors
XRanging.init();
// Or initialize specific sensors
XRanging.init(FRONT);
XRanging.init(BACK);
// Get distance measurements
int16_t frontDistance = XRanging.getRange(FRONT);
int16_t leftDistance = XRanging.getRange(LEFT);
int16_t rightDistance = XRanging.getRange(RIGHT);
int16_t backDistance = XRanging.getRange(BACK);
Monitor_Print("Front: ", frontDistance);
Monitor_Print("Left: ", leftDistance);
Monitor_Print("Right: ", rightDistance);
Monitor_Print("Back: ", backDistance);
// Obstacle avoidance
const int16_t SAFE_DISTANCE = 300; // 30cm
void obstacleAvoidance() {
int16_t front = XRanging.getRange(FRONT);
if (front < SAFE_DISTANCE) {
Monitor_Println("Obstacle detected!");
// Check sides for clear path
int16_t left = XRanging.getRange(LEFT);
int16_t right = XRanging.getRange(RIGHT);
if (left > right && left > SAFE_DISTANCE) {
// Turn left
setDesiredAngle(AG_YAW, -200);
} else if (right > SAFE_DISTANCE) {
// Turn right
setDesiredAngle(AG_YAW, 200);
} else {
// Move backward
Command_Land(120);
}
}
}
