我正在为 Rover 开发一个应用程序,以通过操纵杆进行管理。我需要创建遥控器来设置移动探测器的方向(左、右、前、后)。我试图通过以下代码来实现它:
ControlApi.getApi(mDrone).enableManualControl(true, new ControlApi.ManualControlStateListener() {
@Override
public void onManualControlToggled(boolean b) {
}
});
ControlApi.getApi(mDrone).manualControl(0, -0.5f, 0, new AbstractCommandListener() {
@Override
public void onSuccess() {
}
@Override
public void onError(int i) {
}
@Override
public void onTimeout() {
}
});
但我在 onError 块中收到错误 3。同样在此之前我无法启用手动控制它总是返回false。有人可以告诉我我做错了什么,或者引导我走向正确的道路吗?
如果有人可以帮助我,我会非常感激。问候!
更新
仍然没有结果现在我正在尝试使用
MavLinkCommands.sendManualControl(drone, x, y, z, r, button, new ICommandListener(){...});
但无法运行此方法,因为无人机为空。我像这样生成它:
MavLinkDroneManager mavLinkDroneManager =
new MavLinkDroneManager(mContext, mConnectionParameter, mHandler);
MavLinkDrone drone = mavLinkDroneManager.getDrone();
并且方法 getDrone 总是返回 null。
解决了
如果有人会遇到类似的问题,那么解决方法很简单。总的来说,您需要更详细地阅读 python 文档:)
您需要做的就是使用 MAVLink 命令 msg_rc_channels_override() 覆盖通道;带有解决方案的代码将如下所示:
VehicleApi.getApi(mDrone).setVehicleMode(VehicleMode.ROVER_MANUAL); //be sure the vehicle is in manual mode
VehicleApi.getApi(mDrone).arm(true); // and arm need to be true
默认情况下,chanel 1 是左右,chanel 3 是前后。如果它不起作用,请检查无人机连接的通道。将车辆左移设置 chanel 1 到 2000,右 - 1000;向前设置 chanel 3 - 2000,向后 - 1000;
我在 ArduRover 上对其进行了测试,但我认为它应该适用于 ArduPilot 和 ArduCopter。
msg_rc_channels_override rc_override = new msg_rc_channels_override();
rc_override.chan1_raw = 1000 //right; 2000 //left
rc_override.chan3_raw = 1000 //back; 2000 //forward
rc_override.target_system = 0;
rc_override.target_component = 0;
ExperimentalApi.getApi(mDrone).sendMavlinkMessage(new MavlinkMessageWrapper(rc_override));
有关更多说明,请查看此链接