امتیاز موضوع:
  • 3 رأی - میانگین امتیازات: 4.67
  • 1
  • 2
  • 3
  • 4
  • 5
انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
نویسنده پیام
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,173
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6335 تشکر در 2084 ارسال )
ارسال: #12
RE: انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
(۲۳-بهمن-۱۳۹۲, ۲۱:۱۲:۱۰)ha_60 نوشته است: اول به صورت خلاصه می گن چی هست بعد امکانات و غیره رو توضیح می دن Biggrin
ولی از قیافش به نظر می یاد خوب باشه Biggrin
اول کمی در مورد این سنسور مطالعه می کنن بعد میان وسط بحث Biggrin
(هادی اعظم توبه شوخی کردیم ها فردا پودر نشیمBiggrin)

هیچی MPU6050 یه IMU هست همین هایی که ژایرو و شتاب سنج و قطب نما دارن البته ایشون قطب نما ندارن جدا بهش وصل میشه
حالا ایشون با استفاده از الگوریتم های موجود داده ها رو پردازش می کنه
و در نهایت وضعیت جسم رو بهمون نشون میده
این فیلم قشنگ روشنتون می کنه از قضیه البته سنسور فرق داره ولی نتیجه یکی هست
9 Degrees of Freedom - Razor IMU

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
(آخرین ویرایش در این ارسال: ۲۳-بهمن-۱۳۹۲, ۲۱:۲۳:۱۵، توسط behzady.)
۲۳-بهمن-۱۳۹۲, ۲۱:۱۸:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, Ambassador, salehjg
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,055
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8170 تشکر در 2772 ارسال )
ارسال: #13
RE: انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
خوب ، من كمي با اين فيلتر سر و كله زدم اشكالات رو كه بر خوردم مي گم تا دوستان هم نظرشون رو بگن.

اول از همه sampleFreq به نظر من چندان معني نمي دهه. دوستان در فركانس هاي مختلف update رو انجام بدن و مقدار sampleFreq رو هم متناسب با همون بذارن ، ببينن هموني مي شه كه بايد باشه؟!

در نتيجه اين قسمت هم از نظرم اشتباهه:
کد php:
//        q0 += qDot1 * (1.0f / sampleFreq);
//        q1 += qDot2 * (1.0f / sampleFreq);
//        q2 += qDot3 * (1.0f / sampleFreq);
//        q3 += qDot4 * (1.0f / sampleFreq); 
البته روبات روي زمين باشه بسته به كاربرد اشكالش چندان در نمي ياد.

از نظر من درستش اينه كه زمان خوندن جايرو محاسبه بشه ، مثلا interval بر حسب ms و به صورت زير استفاده بشه.
کد php:
        q0 += qDot1 * (interval/1000.0f);
        
q1 += qDot2 * (interval/1000.0f);
        
q2 += qDot3 * (interval/1000.0f);
        
q3 += qDot4 * (interval/1000.0f); 

كاربردتون اگر براي كاراي دقيق بود ، چيزي كه گفتم مدنظرتون باشه.

مورد ديگه اينكه من مگنتومتر هم داشتم و براي 9dof محاسبات رو انجام دادم.
متوجه شدم كه بسته به اينكه جهت ( heading ) به چه سمتي باشه ، بالا پايين شدن مقادير roll و pitch از اين جهت تاثير مي گيرن.
وقتي جهت حدودا بين + و - 30 درجه باشه ، خطاي محاسبات roll و pitch بيشتر مي شه. بدترين حالت اينه كه heading در 0 درجه باشه! حدود 1 درجه خطا دارهه ( مدام بالا پايين مي شه )
در باقيه زاويه ها ، مي زان خطا قابل قبول هست ، اما باز هم ميزان خطا ثابت نيست! ( اما در حد چند دهم و يا صدم درجه مي شه )

مورد ديگه اينكه با تاب دادن ماژول اون معكب سمت PC بچرخه تمام مسئله نيست ( البته من تستش نكردم و فكر نكنم برسم تستش كنم ، اما به طريق ديگه خروجي رو چك كردم. )( البته براي روبات هاي زميني در همين حد هم بايد كافي باشه ) ، اما وقتي موتورها روشن بشن ( مخصوصا در عمود پروازها ) نويز مكانيكي وحشتناكي درست مي كنن كه بخشيش بايد سخت افزاري حل بشه و بخشيش هنر فيلتر هست كه به صورت نرم افزاري حلش كنه و اصل عملكرد فيلتر اينجا مشخص مي شه!

در اين كدها ، ضريب Beta هرچي كمتر باشه ، سرعت پاسخگويي كمتر مي شه ، در عوض خطاي كمتري ايجاد مي شه. و هر چي بيشتر باشه هم بلعكس. اكثر مشكلات خطا هم گردن شتاب سنج هست. نيازهه يه فيلتر پايين گذر نرم افزاري هم تعبيه بشه( با همون ميانگين گيري ).
دوستان نقد و نظري از صحبت ها داريد بفرماييد.

براي تحليل بهتر نيازهه سمت PC اطلاعات رو روي نمودار نشون بدم و اثر موتورها رو چك كنم و عملكرد فيلتر رو در مقابل مقادير لحظه اي شتاب سنج چك كنم. الان مي رم سراغ اين قسمت و به نتيجه رسيدم خبرش رو مي دم.

منتظر نظر دوستان هستيم ...

۲۴-بهمن-۱۳۹۲, ۰۰:۴۱:۲۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, Ambassador, behzady, salehjg
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,055
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8170 تشکر در 2772 ارسال )
ارسال: #14
RE: انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
دوستان كمي تكلم كنيد :)

پروژه رو تحويل دادم و عملا ديگه نمي تونم روي الگوريتم تست بزنم، از چيزايي كه تو ذهنم مونده براتون مي گم.
توي اين 2-3 روزي كه باهاش درگير بودم چيزاي جديدي فهميدم كه به اين شرحه كه مي گم.
وقتي از 6Dof اش استفاده مي كنيم ، همه چيز خوبه . yaw هم محاسبه مي شه اما بعدا متوجه دريفتش مي شيم. اگر لرزش بهش وارد بشه ، yaw اش خيلي قاطي مي كنه و توي روبات اين لرزش وجود دارهه.
وقتي در هر كدوم از جهت هاي X , Y , Z سنسور رو با شتاب حركت بديم ، شاهد بالا پايين شدن مقادير Roll و Pitch هستيم كه نبايد اتفاق بيفته و اين مشكل رو شتاب سنج ايجاد مي كنه. سرعت يكنواخت شتابش 0 هست و شتابسنج خرابكاري نمي كنه.

وقتي از 9DOF اش استفاده مي كنيم ، چرخش yaw روي roll , pitch اثر جدي مي ذارهه و مثلا roll , pitch اي كه بايد 0 باشن الان يكيشون -1 و يكيشون 3 ! جالب اينه كه جبران هم نمي شن و در همونجا مي مونن!
اما سرعت پاسخگويي هر 2 ( هم 6dof , هم 9dof ) تا اينجاي كار خوبه.
yaw مشكلي ندارهه ، اما roll , pitch مشكل جدي دارن!
مي شه از شتاب سنج ميانگين گيري كرد ( فيلتر پايين گذر ) در اين صورت مشكلات ياد شدهه اصلاح مي شه ، اما اين باعث مي شه اطلاعات 3 محور شتاب سنج از orthogonal بودن خارج بشه. همينطور سرعت پاسخگويي رو كم مي كنه. هم سرعت اصلاح roll , pitch از ميزان انحراف ، و هم تعيين مقدار yaw .

خوب پس ميانگين گيري هم راه حل خوبي براي اين الگوريتم نيست.

من زمان كمي داشتم و مي خواستم روي پروژه تستش كنم و نتيجه رو ببينم، پردازنده اي هم كه استفاده مي كردم قدرت كافي رو داشت و نگران بهينه نبودن الگوريتم نبودم! فقط مي خواستم اصلاح بشه و نتيجه ي بهتري ببينم!

پس تابع 6dof و 9dof رو با هم استفاده كردم تا از نقاط قوت همديگه استفاده كنن.
6Dof در roll و pitch خوب بود و در yaw افتضاح.
9ِDof در yaw خوب بود و در roll , pitch افتضاح.

خوب بريم سراغ كد:
کد php:
            MadgwickAHRSupdate(gyro[0]*DEG2RADgyro[1]*DEG2RAD ,gyro[2]*DEG2RAD HADXL[0], HADXL[1], HADXL[2], X_MAGY_MAGZ_MAG);            
            
getRollPitchYaw(&roll_p,&pitch_p,&yaw);            
            
            
MadgwickAHRSupdateIMU(gyro[0]*DEG2RAD,gyro[1]*DEG2RAD,gyro[2]*DEG2RAD,HADXL[0],HADXL[1],HADXL[2]);                    

            
getRollPitchYaw(&roll,&pitch,&yaw_p); 

roll_p , pitch_p , yaw_p اطلاعاتي درش ذخيرهه مي شه كه صحيح نيستن و به كارمون نمي ياد.
roll , pitch , yaw حاويه اطلاعات صحيح هستن.

خوب هنوز مشكل حركت در راستاهاي x,y,z هست ، به دليل تاثير شتاب حركت و ذات شتاب سنج.
با انتخواب ضريب Beta زير 0.1 تا حدي مي زان خطا كم مي شه.
در تكان هاي ريز شديد هم عمليات زير موثر هست كه بايد در الگوريتم اعمالش كنيد.

تابع زير رو:
کد php:
        if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {

            
// Normalize accelerometer measurement
            
recipNorm InvSqrt_Opt(ax ax ay ay az az);
                        
ax *= recipNorm;
                        
ay *= recipNorm;
                        
az *= recipNorm;
                         
                             
HADXL_P[0] = ax;
                          
HADXL_P[1] = ay;
                          
HADXL_P[2] = az;
                     } 
به اين تغيير بديد ، براي هر 2 تابع:
کد php:
        if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {

            
// Normalize accelerometer measurement
            
recipNorm InvSqrt_Opt(ax ax ay ay az az);

            
acc_weight 1-(abst(1-recipNorm));
            if((
acc_weight >= 0) && (acc_weight <= 1)) /*{ acc_weight = 0; acc_div = 0; }*/
                     
{                
                        
                        
ax *= recipNorm;
                        
ay *= recipNorm;
                        
az *= recipNorm;
                         
                             
HADXL_P[0] = ax;
                          
HADXL_P[1] = ay;
                          
HADXL_P[2] = az;
                     } 

اين قسمت هم كه در پست قبلي گفتم ، كه به اين شكل تغيير بديد.
کد php:
        q0 += qDot1 * (interval/1000.0f);
        
q1 += qDot2 * (interval/1000.0f);
        
q2 += qDot3 * (interval/1000.0f);
        
q3 += qDot4 * (interval/1000.0f); 

البته هنوز اشكالات زيادي بعد از اصلاحاتي كه گفتم دارهه، اما همين هم اميدوار كننده هست ... :)
در كل اين الگوريتم رو توصيه نمي كنم ، مخصوصا براي كواد و ... .

يه ويدئو هم براي پيادهه سازيه اصلاحات فوق مي ذارم. امروز صبح ضبط كردم ، هنوز سر همش نكردم:)

۲۶-بهمن-۱۳۹۲, ۲۱:۵۴:۳۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : salehjg, Ambassador, babyy
A.Amiri آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 1
تاریخ عضویت: آبان ۱۳۹۲

تشکرها : 0
( 29 تشکر در 5 ارسال )
ارسال: #15
RE: انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
سلام ، در حال حاضر دارم با یه ماژول RMG146) 9Dof) پروژه رو ادامه می دم .
اما توی دو پست گذشته شما مطلب یا کدی در مورد Tilt Compensation ندیدم !
احتمال میدم دلیل اینکه خروجی مناسبی در محور yaw دریافت نمی کنید همین باشه !

نقل قول: اول از همه sampleFreq به نظر من چندان معني نمي دهه. دوستان در فركانس هاي مختلف update رو انجام بدن و مقدار sampleFreq رو هم متناسب با همون بذارن ، ببينن هموني مي شه كه بايد باشه؟!

این حرکت بر چه مبنایی انجام میشه ؟!!! ( به نظر درست نمیاد! )

در هر صورت من هم اگر کارم به نتیجه نهایی رسید اینجا گزارش می دم و کد ها رو هم منتشر می کنم .

موفق باشید .
(آخرین ویرایش در این ارسال: ۲۶-بهمن-۱۳۹۲, ۲۳:۰۷:۲۳، توسط A.Amiri.)
۲۶-بهمن-۱۳۹۲, ۲۳:۰۲:۰۵
ارسال‌ها
پاسخ
تشکر شده توسط : babyy, Ambassador, helma, salehjg
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,055
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8170 تشکر در 2772 ارسال )
ارسال: #16
RE: انتشار نسخه 1.0 PRO-IMU (متن باز + منطبق با پروتکل دايناميکسل)
منظور تون از Tilt Compensation ، جبرانسازيه خطايي هست كه با كج شدن مگنتومتر ايجاد مي شه؟
قائدتا اين بايد در همين الگوريتمي كه گذاشتيد در نظر گرفته شده باشه ديگه. اگر توي همين كدها هست ، قسمت مربوطه رو بي زحمت نشون بديد.
البته مشكل من yaw نبود ، بالا توضيح دادم ، خطاهايي كه در شرايط خاصي به وجود مي يان برام مهم بودهه و مطرح كردم ، چون مقدار لحظه اي خروجي ها براي كارم مهم بودهه. البته همينطور كه مي گيد ، جبرانسازي كجي براي yaw هم مثل باقيه قسمت ها در اين الگوريتم مشكل داشته اما بغرنج نبودهه.

به هر حال اين قسمت جبرانسازيه كجي هم اگر روش صحبت كنيد و راه حل هاتون رو بگيد خيلي خوبه.
مثلا ماتريس DCM اين خطاها رو اتوماتيك رفع مي كنه. در الگوريتمي هم كه خودم قبلا استفاده كرده بودم تقريبا اين موضوع رو رفع كردهه بودم. اما هر الگوريتمي سبك خودش رو دارهه ... .

-----------------

نقل قول: این حرکت بر چه مبنایی انجام میشه ؟!!! ( به نظر درست نمیاد! )
چرا بنظر درست نمي ياد Biggrin
شما از كجا مي تونيد مطمئن باشيد چندبار در ثانيه داريد محاسبات فيلتر رو انجام مي ديد؟!
به n دليل ممكنه تعداد دفعات عمليات محاسبه ي فيلتر در ثانيه عدد مد نظر شما در sampleFreq نباشه ، كه فكر مي كنم واضح باشه.
و در كارهاي دقيق مثل روبات هاي تعادلي كه بايد از الگوريتم هاي جبرانسازيه ديگه هم استفاده كنيد براي حفظ تعادل ، اين باعث مي شه روبات رفته رفته در زمان كوتاهي ناپايدار بشه و رفتار عجيبي از خودش نشون بدهه و در كل وا مي رهه ...!!
البته ( اون مكعب 3 بعدي در اين وضعيت خوب مي چرخه ) اما عملا ربات رفتارش نا پايدارهه ... !
من تجربه داشتم ، و دليل نهانش همين موردي هست كه خدمتتون گفتم ، اتفاقا رفتار روبات در اين شرايط خيلي هم خطرناك هست!
براي كاراي تعادلي تايمينگ حرف اول رو مي زنه و بسيار بسيار حساس و مهم هست.

اينم ويدئويي كه در در پست قبلي حرفش رو زدم ...
با اصلاحاتي كه بالا گفتم اين نتيجه رو گرفتم.
http://www.aparat.com/v/JDjw2

موفق باشيد.

۲۷-بهمن-۱۳۹۲, ۱۷:۴۱:۴۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, salehjg


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  LCDimg نسخه 1.2a salehjg 0 2,671 ۱۰-آذر-۱۳۹۱, ۲۱:۴۹:۵۳
آخرین ارسال: salehjg

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS