मैं MATLAB में एक फ़ंक्शन बना रहा हूं जिसे मैं c ++ लाइब्रेरी के रूप में निर्यात करना चाहता हूं। फ़ंक्शन एक्सेलेरोमीटर और जाइरोस्कोप डेटा लेता है, और imufilter के माध्यम से अभिविन्यास की गणना करता है . यहाँ दिया गया है कि यह कैसे काम करता है:

% when 10 samples come in, call below function
function [orientation] = runtime_get_orientation(accelerometer, gyro)
    FUSE = imufilter('SampleRate', 50, 'AccelerometerNoise', 0.002, ...
           'LinearAccelerationNoise', 0.003, ...
           'GyroscopeNoise', 0.444, 'GyroscopeDriftNoise', 0.445);
    [orientation,~] = FUSE(accelerometer, gyro);
end

नोट: मैं एक रीयलटाइम सिस्टम बना रहा हूं जो समय के साथ इस फ़ंक्शन को कॉल करेगा। Ex: 10 नमूने आते हैं, और फिर मैं इस फ़ंक्शन को कॉल करता हूं। 10 और आ, और मैं उसे फिर बुलाता हूं।

मुझे जो समस्या दिखाई दे रही है वह यह है कि हर बार जब मैं फ़ंक्शन पर कॉल करता हूं तो FUSE ऑब्जेक्ट स्थिति फिर से सेट हो जाती है। मतलब, मैट्रिक्स जो समय के साथ त्रुटि स्थिति को बनाए रखता है और इसे समायोजित करता है, मिटा दिया जाता है। यदि मैं FUSE ऑब्जेक्ट को फ़ंक्शन में पास करता हूं, जैसा कि नीचे दिखाया गया है, तो राज्य रखा जाता है और मैं अभिविन्यास देख सकता हूं जो समझ में आता है।

% define FUSE object outside of the function
FUSE = imufilter('SampleRate', 50, 'AccelerometerNoise', 0.002, ...
           'LinearAccelerationNoise', 0.003, ...
           'GyroscopeNoise', 0.444, 'GyroscopeDriftNoise', 0.445);
% when 10 samples come in, call below function

function [orientation] = runtime_get_orientation(accelerometer, gyro, FUSE)
    [orientation,~] = FUSE(accelerometer, gyro);
end

मैं FUSE ऑब्जेक्ट की ऑब्जेक्ट स्थिति को कॉलिंग फ़ंक्शन पर वापस करना चाहता हूं, ताकि मैं इसे एक तर्क के रूप में वापस पास कर सकूं। मुझे उम्मीद है कि यह किसी प्रकार का मैट्रिक्स ऑब्जेक्ट है। मैं ऐसा करना चाहता हूं क्योंकि मैं अंततः इसे एक सी ++ फ़ंक्शन के रूप में निर्यात करना चाहता हूं, और जो मैं बता सकता हूं उससे एक FUSE ऑब्जेक्ट निर्यात करना संभव नहीं हो सकता है।

मैं FUSE ऑब्जेक्ट की स्थिति को कोडजेन/सी++ अनुकूल रखने के लिए क्या कर सकता हूं?

0
angryip 5 जिंदा 2020, 03:38

1 उत्तर

सबसे बढ़िया उत्तर

एक सरल उपाय यह है कि फ़ंक्शन में डेटा को एक स्थिर चर बनाया जाए। इस तरह, आप केवल पहली बार फ़ंक्शन को कॉल करने पर फ़िल्टर बना सकते हैं, और आपको फ़ंक्शन के बाहर इसके बारे में जानने की आवश्यकता नहीं है।

MATLAB में एक स्थिर चर घोषित करने के लिए, persistent कीवर्ड।

1
Cris Luengo 7 जिंदा 2020, 14:52