К правилам, указанным тут, ОБЯЗАТЕЛЬНО добавляем номер тикета:
UAV-11 подправил зависимости, новый алгоритм
Если в рамках коммита делаются сразу несколько тикетов, пишем их через пробел:
UAV-12 UAV-32 исправил это и это
Коротко: https://www.javatpoint.com/java-naming-conventions
Подробно: https://www.oracle.com/java/technologies/javase/codeconventions-namingconventions.html
Называется MAVlink
https://ardupilot.org/dev/docs/mavlink-commands.html
у него есть свой MAVSDK - портирован на кучу языков, в т.ч. и на Java
https://mavsdk.mavlink.io/main/en/index.html
доки расписаны только для MAVSDK для c++ И Python:
https://mavsdk.mavlink.io/main/en/python/
список команд Mavlink:
https://mavlink.io/en/messages/common.html
Цикл работы:
mavsdk_server_win32.exe serial://COM3:115200
- он подключится порту и будет ждать подключения от программ на порту 50051 по дефолту void connect() {
System drone = new System();
Core.ConnectionState state = drone.getCore().getConnectionState().blockingFirst();
println("Connected to drone: " + state.getIsConnected());
println("Getting telemetry: ");
Telemetry telemetry = drone.getTelemetry();
Boolean armed = telemetry.getArmed().blockingFirst();
println("Armed: " + armed);
Telemetry.FlightMode flightMode = telemetry.getFlightMode().blockingFirst();
println("FlightMode: " + flightMode);
Telemetry.Health health = telemetry.getHealth().blockingFirst();
println("Health: ");
println("\tIsArmable: " + health.getIsArmable());
println("\tIsAccelerometerCalibrationOk: " + health.getIsAccelerometerCalibrationOk());
println("\tIsMagnetometerCalibrationOk: " + health.getIsMagnetometerCalibrationOk());
println("\tIsGyrometerCalibrationOk: " + health.getIsGyrometerCalibrationOk());
println("\tIsGlobalPositionOk: " + health.getIsGlobalPositionOk());
println("\tIsHomePositionOk: " + health.getIsHomePositionOk());
println("Battery: ");
telemetry.getBattery().subscribe(b -> {
String batText = String.format("Bat%d - %4.2f%%, %5.2fV", b.getId(), b.getRemainingPercent() * 100, b.getVoltageV());
panel.bottomTable.setParameter(1, batText);
});
println("Getting allowable flight modes:");
ActionServer.AllowableFlightModes fModes = drone.getActionServer().getAllowableFlightModes().blockingGet();
println("\tCan auto: " + fModes.getCanAutoMode());
println("\tCan guided: " + fModes.getCanGuidedMode());
println("\tCan stabilized: " + fModes.getCanStabilizeMode());
telemetry.getPosition().subscribe(p -> {
String coords = String.format("%9.6f, %9.6f", p.getLatitudeDeg(), p.getLongitudeDeg());
panel.topTable.setParameter(2, coords);
});
telemetry.getGpsInfo().subscribe(gpsInfo -> {
panel.bottomTable.setParameter(4, "SAT: " + gpsInfo.getNumSatellites());
panel.bottomTable.setParameter(9, "GPS: " + gpsInfo.getFixType());
});
telemetry.getAttitudeEuler().subscribe(ea -> {
String format = String.format("%5.1f, %5.1f, %5.1f",
ea.getPitchDeg(), ea.getYawDeg(), ea.getRollDeg());
// show pitch
int pitch = ea.getPitchDeg().intValue();
panel.centralScale.setPitch(pitch);
panel.backBurner.setElevation(pitch);
// show roll
int roll = ea.getRollDeg().intValue();
panel.headScale.setDegrees(roll);
panel.backBurner.setSlant(roll);
panel.centralScale.setSlant(roll);
// show yaw
int yaw = ea.getYawDeg().intValue();
panel.compass.setDegrees(yaw);
});
}
private void println(String s) {
java.lang.System.out.println(s);
}
Объекты, получаемые из System уже надо читать в доках по ссылкам выше.
http://ardupilot-mega.ru/index.php/manuals/missionplanner