feat(capture): detect the flat pose for targets laid on the ground
This commit is contained in:
@@ -7,7 +7,7 @@ import 'package:bully/services/parallelism_service.dart';
|
||||
/// Vecteur de gravité mesuré par l'accéléromètre pour une pose donnée.
|
||||
///
|
||||
/// [pitch] et [roll] sont exprimés comme dans le service : le tangage vaut 0°
|
||||
/// appareil vertical et -90° appareil à plat caméra vers le sol.
|
||||
/// appareil vertical et +90° appareil à plat caméra vers le sol.
|
||||
({double x, double y, double z}) gravity({
|
||||
double pitch = 0,
|
||||
double roll = 0,
|
||||
@@ -68,30 +68,30 @@ void main() {
|
||||
|
||||
group('pose cible au sol', () {
|
||||
test('appareil à plat caméra vers le bas → aligné', () {
|
||||
final data = evaluatePose(ParallelismService(), pitch: -90);
|
||||
final data = evaluatePose(ParallelismService(), pitch: 90);
|
||||
|
||||
expect(data.pose, TargetPose.ground);
|
||||
expect(data.status, ParallelismStatus.aligned);
|
||||
expect(data.pitchDeviation, closeTo(0, 0.5));
|
||||
});
|
||||
|
||||
test('l\'écart se mesure par rapport à -90°, pas à 0°', () {
|
||||
final data = evaluatePose(ParallelismService(), pitch: -80);
|
||||
test('l\'écart se mesure par rapport à +90°, pas à 0°', () {
|
||||
final data = evaluatePose(ParallelismService(), pitch: 80);
|
||||
|
||||
expect(data.pose, TargetPose.ground);
|
||||
expect(data.pitchDeviation, closeTo(10, 0.5));
|
||||
expect(data.pitchDeviation, closeTo(-10, 0.5));
|
||||
expect(data.status, ParallelismStatus.aligned);
|
||||
});
|
||||
|
||||
test('à plat mais trop incliné → désaligné', () {
|
||||
final data = evaluatePose(ParallelismService(), pitch: -50);
|
||||
final data = evaluatePose(ParallelismService(), pitch: 50);
|
||||
|
||||
expect(data.status, ParallelismStatus.misaligned);
|
||||
});
|
||||
|
||||
test('à plat écran vers le haut → jamais aligné', () {
|
||||
// La caméra vise le plafond : le vert n'aurait aucun sens.
|
||||
final data = evaluatePose(ParallelismService(), pitch: 90);
|
||||
final data = evaluatePose(ParallelismService(), pitch: -90);
|
||||
|
||||
expect(data.pose, TargetPose.wall);
|
||||
expect(data.status, ParallelismStatus.misaligned);
|
||||
@@ -116,15 +116,15 @@ void main() {
|
||||
|
||||
expect(evaluatePose(service).pose, TargetPose.wall);
|
||||
// Pile à la frontière des deux poses : on garde celle déjà retenue.
|
||||
expect(evaluatePose(service, pitch: -45).pose, TargetPose.wall);
|
||||
expect(evaluatePose(service, pitch: 45).pose, TargetPose.wall);
|
||||
// Franchement du côté du sol : on bascule.
|
||||
expect(evaluatePose(service, pitch: -70).pose, TargetPose.ground);
|
||||
expect(evaluatePose(service, pitch: 70).pose, TargetPose.ground);
|
||||
});
|
||||
|
||||
test('stop() remet la pose et le statut à zéro', () {
|
||||
final service = ParallelismService();
|
||||
|
||||
expect(evaluatePose(service, pitch: -90).pose, TargetPose.ground);
|
||||
expect(evaluatePose(service, pitch: 90).pose, TargetPose.ground);
|
||||
service.stop();
|
||||
expect(evaluatePose(service).pose, TargetPose.wall);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user