java - 如何使用 VirtualSticks 实际控制无人机
问题描述
我正在努力使用 DJI SDK 向无人机发送命令。我正在使用 Phantom 4 V2.0 和 DJI SDK 4.15 版。有一个关于如何使用 VirtualSticks 来指挥无人机的教程,但仅适用于模拟器。我尝试使用相同的代码来驾驶真正的无人机,但没有成功。如果我通过提供的方法启动电机,它们将立即停止,可能是因为我的应用程序在摇杆空闲时向无人机发送的命令。这是代码:
screenJoystickLeft.setJoystickListener((joystick, pX, pY) -> {
if (Math.abs(pX) < 0.02) {
pX = 0;
}
if (Math.abs(pY) < 0.02) {
pY = 0;
}
float pitchJoyControlMaxSpeed = 10;
float rollJoyControlMaxSpeed = 10;
if (horizontalCoordinateFlag) {
if (rollPitchControlModeFlag) {
pitch = (float) (pitchJoyControlMaxSpeed * pX);
roll = (float) (rollJoyControlMaxSpeed * pY);
} else {
pitch = -(float) (pitchJoyControlMaxSpeed * pY);
roll = (float) (rollJoyControlMaxSpeed * pX);
}
}
if (null == sendVirtualStickDataTimer) {
sendVirtualStickDataTask = new SendVirtualStickDataTask();
sendVirtualStickDataTimer = new Timer();
sendVirtualStickDataTimer.schedule(sendVirtualStickDataTask, 100, 200);
}
});
screenJoystickRight.setJoystickListener((joystick, pX, pY) -> {
if (Math.abs(pX) < 0.02) {
pX = 0;
}
if (Math.abs(pY) < 0.02) {
pY = 0;
}
float verticalJoyControlMaxSpeed = 2;
float yawJoyControlMaxSpeed = 3;
yaw = yawJoyControlMaxSpeed * pX;
throttle = (verticalJoyControlMaxSpeed * pY) < 1 ? 1 : (verticalJoyControlMaxSpeed * pY);
if (null == sendVirtualStickDataTimer) {
sendVirtualStickDataTask = new SendVirtualStickDataTask();
sendVirtualStickDataTimer = new Timer();
sendVirtualStickDataTimer.schedule(sendVirtualStickDataTask, 0, 200);
}
Log.d(TAG, "Right vertical: " + pY);
});
关于如何修改我的代码以成功驾驶实际无人机的任何想法?有没有人以其他方式完成它?此代码取自DJI Demo GitHub。
解决方案
推荐阅读
- javascript - Java BigInteger 比 Android 上的 JavaScript 慢得多
- scala - Spark根据条件添加多列
- python - print(len(list_a)) 打印为两个,但 print(list_a) 打印为 []
- visual-studio - 是否可以导航到 VS 2017 中收集在任意文本文件而不是错误列表窗格中的 msbuild 错误?
- php - 给定 PHP 和 SQL 中的以下结构,我如何返回下一个可用的约会?
- microsoft-cognitive - 是否可以将照片中的人脸添加到没有 Face ID 的人?
- rust - 如何使用更高等级的特征边界使返回的 impl Fn 更通用?
- kendo-ui - Kendo UI 网格编辑器字段自定义验证
- c# - 如何发送 mailmessage.to 使收件人看不到彼此的电子邮件
- hive - 计算值之间的最大差异并记录两个值在 HIVE 中发生的时间