超声波测距仪-软件

注解

本节介绍软件中的超声波测距仪。有关超声波测距仪的硬件指南,请参见:ref:docs/hardware/sensors/ultrasonics-hardware:Ultrasonics - Hardware

超声波传感器通常用于使用高频声音测量到物体的距离。通常,超声波测量在其“视场”内到最近物体的距离。

WPILib本地支持两种主要的超声波类型:

响应式超声波测距仪

Ultrasonic类(Java, C++)提供了响应式超声波测距仪的支持。由于响应式超声波测距仪(按名称)需要使用单独的引脚来发送脉冲和测量响应,因此在构造Ultrasonic实例时,用户必须为输出和输入指定DIO引脚号:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

强烈建议在“自动模式”下使用ping响应超声波,因为这将使WPILib确保多个传感器不会相互干扰:

// Starts the ultrasonic sensor running in automatic mode
ultrasonic.setAutomaticMode(true);

模拟超声波测距仪

一些超声波传感器仅返回与测量距离相对应的模拟电压。这些传感器可以简单地与AnalogPotentiometer类一起使用。

第三方超声波测距仪

第三方提供的其他超声传感器可能使用更复杂的通信协议(例如I2C或SPI)。WPILib不为任何此类超声波提供本地支持;它们通常将由供应商库控制。

在代码中使用超声波测距仪

超声波传感器对于确定自动阶段程序中的间距非常有用。例如,以下代码将驱动机器人前进,直到超声波测量到最近的物体12英寸(〜30厘米)的距离,然后停止:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

// Initialize motor controllers and drive
Spark left1 new Spark(0);
Spark left2 = new Spark(1);

Spark right1 = new Spark(2);
Spark right2 = new Spark(3);

SpeedControllerGroup leftMotors = new SpeedControllerGroup(left1, left2);
SpeedControllerGroup rightMotors = new SpeedControllerGroup(right1, right2);

DifferentialDrive drive = new DifferentialDrive(leftMotors, rightMotors);

@Override
public void robotInit() {
    // Start the ultrasonic in automatic mode
    ultrasonic.setAutomaticMode(true);
}

@Override
public void autonomousPeriodic() {
    if(ultrasonic.GetRangeInches() > 12) {
        drive.tankDrive(.5, .5);
    }
    else {
        drive.tankDrive(0, 0);
    }
}

此外,可以将响应式超声波测距仪发送到:ref:Shuffleboard <docs/software/wpilib-tools/shuffleboard/getting-started/shuffleboard-tour:Tour of Shuffleboard>,将以小部件显示它们:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

public void robotInit() {
    // Places a the ultrasonic on the dashboard
    Shuffleboard.getTab("Example tab").add(ultrasonic);
}