0

我正在为 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));

有关更多说明,请查看此链接

4

0 回答 0