我需要实现一个Tello命令,该命令在虚拟游戏杆上为 rc a b c d 。从不同的论坛上,我知道对于虚拟游戏杆,我们需要使用rc命令来移动Tello无人机。但是我不知道如何实现它。在他们的SDK文档中,他们将其称为
a:左/右(-100〜100)b:前进/后退(-100〜100)c:上/下(-100〜100)d:偏航(-100〜100)
这些负值是什么意思?如何使用rc命令移动无人机?
这是我正在使用的虚拟操纵杆代码:
JoystickView游戏杆=(JoystickView)findViewById(R.id.joystickView);
Clima
答案 0 :(得分:1)
-100至100的值通常是其各自轴的速度。根据坐标系设置和轴的控制模式,飞机沿着与该值对应的轴移动。根据您提供的代码,我假设强度值代表杆被推动/移动的百分比,角度值则显示杆被推动的方向。
对于虚拟摇杆,您需要通过访问飞行控制器来设置控制模式和坐标系:
setRollPitchControlMode(RollPitchControlMode.VELOCITY);
setYawControlMode(YawControlMode.ANGULAR_VELOCITY);
setVerticalControlMode(VerticalControlMode.VELOCITY);
setRollPitchCoordinateSystem(FlightCoordinateSystem.BODY);
上面选择的模式可确保虚拟控制器的行为与默认的物理遥控器相同。
另外,您需要先使用setVirtualStickModeEnabled
方法激活虚拟Sticks。
现在,要持续控制飞机,您需要发送至少5 Hz的virtualStickData:
SendVirtualStickDataTask task = new SendVirtualStickDataTask();
this.timer = new Timer();
this.timer.schedule(task, 0, 200);
在此示例中,SendVirtualStickDataTask
扩展了TimerTask
,仅通过{{1}中DJI SDK的sendVirtualStickFlightControlData
方法将当前的俯仰,侧倾,偏航和垂直油门值发送给无人机1}} TimerTask方法。
最后,当前的俯仰,横滚,偏航和垂直油门值都在您在问题中发布的run()
方法内设置。例如。您可以使用三角函数sin和cos确定强度值的x和y部分,如下所示:
onMove()
请注意,角度必须为弧度,您可能需要将角度/强度投射为浮动的。此外,根据确定角度值的方式,您需要相应地调整该值。 第二个操纵杆可用于控制垂直油门和偏航。您将需要一些微调和测试。
对于控制模式/坐标系,以下DJI SDK文档很有帮助(向下滚动至“ Virtual Sticks”): https://developer.dji.com/mobile-sdk/documentation/introduction/component-guide-flightController.html
DJI还提供了有关虚拟Sticks用法的基本代码示例: https://developer.dji.com/mobile-sdk/documentation/android-tutorials/SimulatorDemo.html
我强烈建议您使用DJI Flight Assistant 2软件测试代码,然后再尝试在现实世界中飞行。