dji-sdk - 如何在虚拟摇杆上实现 rc 命令?
问题描述
我需要实现一个 Tello 命令,它是虚拟操纵杆上的rc abcd 。从不同的论坛我了解到,对于虚拟摇杆,我们需要使用 rc 命令来移动 Tello 无人机。但我不知道如何实现它。在他们的 SDK 文档中,他们提到它为
a:左/右(-100~100) b:前/后(-100~100) c:上/下(-100~100) d:偏航(-100~100)
这些负值是什么意思?如何使用 rc 命令移动无人机?
这是我正在使用的虚拟操纵杆代码:
JoystickView 操纵杆 = (JoystickView) findViewById(R.id.joystickView);
joystick.setOnMoveListener(new JoystickView.OnMoveListener() {
@Override
public void onMove(int angle, int strength) {
// code goes here
}
});
解决方案
值 -100~100 通常是它们各自轴的速度。根据坐标系设置和轴的控制模式,飞行器沿该值对应的轴移动。根据您提供的代码,我假设强度值表示推动/移动摇杆的百分比,角度值表示推动摇杆的方向。
对于虚拟摇杆,您需要通过访问飞行控制器来设置控制模式和坐标系:
setRollPitchControlMode(RollPitchControlMode.VELOCITY);
setYawControlMode(YawControlMode.ANGULAR_VELOCITY);
setVerticalControlMode(VerticalControlMode.VELOCITY);
setRollPitchCoordinateSystem(FlightCoordinateSystem.BODY);
上面选择的模式确保虚拟控制器的行为与默认的物理遥控器相同。此外,您需要先使用该setVirtualStickModeEnabled
方法激活虚拟棒,然后才能使用它们。
现在为了持续控制飞机,您需要发送至少 5 Hz 的 virtualStickData:
SendVirtualStickDataTask task = new SendVirtualStickDataTask();
this.timer = new Timer();
this.timer.schedule(task, 0, 200);
在此示例中,通过DJI SDK的 TimerTask 方法中的方法SendVirtualStickDataTask
扩展TimerTask
并仅将当前俯仰、滚动、偏航和垂直油门值发送到无人机。sendVirtualStickFlightControlData
run()
最后,在您在问题中发布的方法中设置当前的俯仰、滚动、偏航和垂直油门值 onMove()
。例如,您可以使用三角函数 sin 和 cos 来确定强度值的 x 和 y 部分,如下所示:
pitch = Math.cos(angle)*strength;
roll = Math.sin(angle)*strength;
请注意,角度需要是弧度,您可能需要将角度/强度投射到浮动。此外,根据角度值的确定方式,您需要相应地调整该值。第二个操纵杆可用于控制垂直油门和偏航。您将需要一些微调和测试。
对于控制模式/坐标系,以下 DJI SDK 文档很有帮助(向下滚动到“虚拟摇杆”): https ://developer.dji.com/mobile-sdk/documentation/introduction/component-guide-flightController.html
DJI 还有一个虚拟棒使用的基本代码示例: https ://developer.dji.com/mobile-sdk/documentation/android-tutorials/SimulatorDemo.html
在您尝试在现实世界中飞行之前,我强烈建议您使用 DJI Flight Assistant 2 软件来测试您的代码。
推荐阅读
- mysql - 无法在专用服务器上导入 13Gb 数据库
- arrays - JSON 符号错误
- sql - 需要插入日期列以及时间和分钟
- python - 龟蟒中是否有触摸物体或颜色的命令?
- c - 静态全局变量 vs 函数静态变量 C 语言
- elasticsearch - 带有在 Kubernetes 上运行的插件的 Kibana
- node.js - 无论如何从带有节点js的spotify获取带有刷新令牌的新访问令牌?
- unit-testing - 在多文件项目中使用 dune + qtest
- terraform - 在地图中迭代地图
- nginx - .well-known/acme-challenge/xxxx 给 404 nginx