Ejemplo n.º 1
0
void FilterApiTest::testFaceInterpretationFilter()
{
    // Input data to feed to the filter
    TimedXyzData inputData[] = {
        TimedXyzData(      0,   0,   0,-981),
        TimedXyzData(1000000,   0,   0, 981),
        TimedXyzData(2000000,   0,   0,-981),
        TimedXyzData(2100000,   0,   0, 981),
        TimedXyzData(2200000,   0,   0,-981)
    };

    // Expected output data
    PoseData expectedResult[] = {
        PoseData(      0, PoseData::FaceUp),
        PoseData(1000000, PoseData::FaceDown),
        PoseData(2000000, PoseData::FaceUp),
    };

    int numInputs = (sizeof(inputData) / sizeof(TimedXyzData));
    int numOutputs = (sizeof(expectedResult) / sizeof(PoseData));

    FilterBase* faceInterpreterFilter = OrientationInterpreter::factoryMethod();

    Bin filterBin;
    DummyAdaptor<TimedXyzData> dummyAdaptor;

    RingBuffer<PoseData> outputBuffer(10);

    filterBin.add(&dummyAdaptor, "adapter");
    filterBin.add(faceInterpreterFilter, "filter");
    filterBin.add(&outputBuffer, "buffer");
    filterBin.join("adapter", "source", "filter", "accsink");
    filterBin.join("filter", "face", "buffer", "sink");

    DummyDataEmitter<PoseData> dbusEmitter;
    Bin marshallingBin;
    marshallingBin.add(&dbusEmitter, "testdataemitter");
    outputBuffer.join(&dbusEmitter);

    // Setup data
    dummyAdaptor.setTestData(numInputs, inputData);
    dbusEmitter.setExpectedData(numOutputs, expectedResult);

    marshallingBin.start();
    filterBin.start();

    for (int j=1; j < numInputs; j++){
        dummyAdaptor.pushNewData();
    }

    filterBin.stop();
    marshallingBin.stop();

    QVERIFY2(numOutputs == dbusEmitter.numSamplesReceived(), "Too many/few outputs from filter.");

    delete faceInterpreterFilter;
}
Ejemplo n.º 2
0
//--------------------------------------------------------------------------------------------------
void initialiseTestPositions()
{
    // Set up positions so that the high resolution camera can be calibrated
    gHighResCalibrationPositions.clear();

    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), 0.0 ) ) );

    // Rotate around X
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
            cv::Vec3d( 0.0, Utilities::degToRad( 140.0 ), 0.0 ) ) );
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 220.0 ), 0.0 ) ) );

    // Rotate around Y
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( Utilities::degToRad( -40.0 ), Utilities::degToRad( 180.0 ), 0.0 ) ) );
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( Utilities::degToRad( 40.0 ), Utilities::degToRad( 180.0 ), 0.0 ) ) );

    // Rotate around Z
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), Utilities::degToRad( -40.0 ) ) ) );
    gHighResCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), Utilities::degToRad( 40.0 ) ) ) );

    // Set up positions so that the relative camera poses can be found
    gRelativeCalibrationPositions.clear();

    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), 0.0 ) ) );

    // Rotate around X
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.7 ),
            cv::Vec3d( 0.0, Utilities::degToRad( 140.0 ), 0.0 ) ) );
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.9 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 220.0 ), 0.0 ) ) );

    // Rotate around Y
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( Utilities::degToRad( -40.0 ), Utilities::degToRad( 180.0 ), 0.0 ) ) );
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.7 ),
        cv::Vec3d( Utilities::degToRad( 40.0 ), Utilities::degToRad( 180.0 ), 0.0 ) ) );

    // Rotate around Z
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.8 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), Utilities::degToRad( -40.0 ) ) ) );
    gRelativeCalibrationPositions.push_back(
        PoseData( cv::Vec3d( 0.0, 0.1, 0.9 ),
        cv::Vec3d( 0.0, Utilities::degToRad( 180.0 ), Utilities::degToRad( 40.0 ) ) ) );
}
Ejemplo n.º 3
0
void FilterApiTest::testOrientationInterpretationFilter()
{
    // Input data to feed to the filter
    TimedXyzData inputData[] = {
        TimedXyzData(      0,-981,   0,   0),
        TimedXyzData(1000000, 981,   0,   0),
        TimedXyzData(2000000,   0,-981,   0),
        TimedXyzData(3000000,   0, 981,   0),
        TimedXyzData(4000000,   0,   0, -981),
        TimedXyzData(5000000,   0,   0,  981)
    };

    // Expected output data
    PoseData expectedResult[] = {
        PoseData(      0, PoseData::RightUp),
        PoseData(1000000, PoseData::LeftUp),
        PoseData(2000000, PoseData::BottomDown),
        PoseData(3000000, PoseData::BottomUp),
        PoseData(4000000, PoseData::FaceUp),
        PoseData(5000000, PoseData::FaceDown)
    };

    QVERIFY2((sizeof(inputData) / sizeof(TimedXyzData)) ==
             (sizeof(expectedResult) / sizeof(PoseData)),
             "Test function error: Input and output count does not match.");

    int numInputs = (sizeof(inputData) / sizeof(TimedXyzData));

    // Build data pipeline
    Bin filterBin;
    DummyAdaptor<TimedXyzData> dummyAdaptor;

    FilterBase* orientationInterpreterFilter = OrientationInterpreter::factoryMethod();

    RingBuffer<PoseData> outputBuffer(10);

    filterBin.add(&dummyAdaptor, "adapter");
    filterBin.add(orientationInterpreterFilter, "orientationfilter");
    filterBin.add(&outputBuffer, "buffer");
    filterBin.join("adapter", "source", "orientationfilter", "accsink");
    filterBin.join("orientationfilter", "orientation", "buffer", "sink");

    DummyDataEmitter<PoseData> dbusEmitter;
    Bin marshallingBin;
    marshallingBin.add(&dbusEmitter, "testdataemitter");
    outputBuffer.join(&dbusEmitter);

    // Setup data
    dummyAdaptor.setTestData(numInputs, inputData);
    dbusEmitter.setExpectedData(numInputs, expectedResult);

    marshallingBin.start();
    filterBin.start();

    // Start sends data once, so start from index 1.
    for (int i = 0; i < numInputs; ++i) {
        dummyAdaptor.pushNewData();
    }

    filterBin.stop();
    marshallingBin.stop();

    QCOMPARE (dummyAdaptor.getDataCount(), dbusEmitter.numSamplesReceived());

    delete orientationInterpreterFilter;
}