引言
GY-US42超声波测距传感器成本低廉,测距范围20-720cm,拥有多种通信协议支持iic、uart、pwm三种模式,其iic协议和Maxsonar协议兼容,因此可以直接接入ardupilot。但是ardupilot默认Maxsonar测距代码并不兼容多个不同地址的设备同时运行,需要对其源码进行一定的修改。(下述源码修改基于4.0.0master版本)
改变
全局查找函数并定位
void RangeFinder::detect_instance(uint8_t instance, uint8_t& serial_instance)
修改case Type::MBI2C内容为如下:
case Type::MBI2C:
if(params[instance].address){
FOREACH_I2C(i) {
if (_add_backend(AP_RangeFinder_MaxsonarI2CXL::detect(state[instance], params[instance],
hal.i2c_mgr->get_device(i,params[instance].address)))) {//AP_RANGE_FINDER_MAXSONARI2CXL_DEFAULT_ADDR
break;
}
}
}
break;
结果
经如上修改后,进入地面站,读取参数列表,对RNGFND_X的参数进行设置,设置地址为7bit I2C地址的十进制形式(修改GY-US42地址的方法请参见官方手册,使用官方地面站进行修改。需要注意的是官方地面站填入的地址是8bit地址,需要除以2。),设置安装角度,设置RNGFND_TYPE为2。
重启飞控,即可看见多个GY-US42超声波传感器开始正常工作了。