[{"data":1,"prerenderedAt":10786},["ShallowReactive",2],{"projects":3},[4],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"_hidden":7,"status":11,"year":12,"image":13,"funded":7,"body":14,"_type":10779,"_id":10780,"_source":10781,"_file":10782,"_stem":10783,"_extension":10784,"locale":10785},"\u002Fprojects\u002F2026-omnicopter-control-research","projects",false,"","Omnicopter Control Research","A hardware-based research project for fully-actuated 6-DoF aerial vehicles","ongoing",2026,"assets\u002Fomnicopter_banner.svg",{"type":15,"children":16,"toc":10714},"root",[17,32,39,55,82,136,140,147,160,172,204,238,241,247,340,349,352,358,513,520,525,582,585,591,603,651,663,1092,1097,1395,1446,2148,2362,2368,2515,2518,2524,2535,2540,2568,2580,2661,2664,2670,2675,2699,2702,2708,2717,2729,2735,2740,2827,2833,2856,2862,2885,2891,2896,2957,2986,2989,2995,3004,3022,3027,3035,3041,3113,3119,3142,3148,3171,3177,3188,3211,3216,3239,3242,3248,3253,3259,3366,3372,3530,3533,3539,3594,3818,3867,3873,4201,4207,4354,4357,4363,4372,4377,4410,4413,4419,4424,4435,4443,4449,4454,4677,4682,4710,4716,4721,6453,6457,7262,7268,7340,7346,7446,7449,7455,7460,7465,7503,7509,7582,7588,7794,7800,7886,7889,7895,7904,7922,7928,8081,8087,8092,8182,8187,8587,8592,8901,8912,8918,8923,8999,9004,9571,9576,9582,9697,9700,9706,9712,9735,9741,9807,9813,9836,9842,9860,9866,9889,9892,9898,9903,10316,10319,10325,10330,10373,10376,10382,10494,10497,10503,10531,10534,10540,10546,10628,10634,10691,10694,10708],{"type":18,"tag":19,"props":20,"children":22},"element","p",{"align":21},"center",[23,26],{"type":24,"value":25},"text","\n  ",{"type":18,"tag":27,"props":28,"children":31},"img",{"src":13,"alt":29,"width":30},"Omnicopter Control Research Banner","100%",[],{"type":18,"tag":33,"props":34,"children":36},"h1",{"align":21,"id":35},"omnicopter-control-research",[37],{"type":24,"value":38},"🚁 Omnicopter Control Research",{"type":18,"tag":19,"props":40,"children":41},{"align":21},[42,43,49,53],{"type":24,"value":25},{"type":18,"tag":44,"props":45,"children":46},"b",{},[47],{"type":24,"value":48},"Optimal Control · Robust Control · Fault Diagnosis · Fault-Tolerant Control",{"type":18,"tag":50,"props":51,"children":52},"br",{},[],{"type":24,"value":54},"\n  A hardware-based research project for fully-actuated 6-DoF aerial vehicles.\n",{"type":18,"tag":19,"props":56,"children":57},{"align":21},[58,59,64,65,70,71,76,77],{"type":24,"value":25},{"type":18,"tag":27,"props":60,"children":63},{"src":61,"alt":62},"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Omnicopter-00B8D9?style=for-the-badge","platform",[],{"type":24,"value":25},{"type":18,"tag":27,"props":66,"children":69},{"src":67,"alt":68},"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fstatus-Hardware%20Built%20%2B%20Tested-36CFC9?style=for-the-badge","status",[],{"type":24,"value":25},{"type":18,"tag":27,"props":72,"children":75},{"src":73,"alt":74},"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ffocus-Optimal%20%7C%20Robust%20%7C%20Fault%20Control-8A63D2?style=for-the-badge","focus",[],{"type":24,"value":25},{"type":18,"tag":27,"props":78,"children":81},{"src":79,"alt":80},"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fflight-6--DoF%20Fully%20Actuated-FFB000?style=for-the-badge","6dof",[],{"type":18,"tag":19,"props":83,"children":84},{"align":21},[85,86,93,95,101,102,108,109,115,116,122,123,129,130],{"type":24,"value":25},{"type":18,"tag":87,"props":88,"children":90},"a",{"href":89},"#start-here",[91],{"type":24,"value":92},"Start Here",{"type":24,"value":94}," ·\n  ",{"type":18,"tag":87,"props":96,"children":98},{"href":97},"#what-is-an-omnicopter",[99],{"type":24,"value":100},"What is an Omnicopter?",{"type":24,"value":94},{"type":18,"tag":87,"props":103,"children":105},{"href":104},"#why-build-one",[106],{"type":24,"value":107},"Motivation",{"type":24,"value":94},{"type":18,"tag":87,"props":110,"children":112},{"href":111},"#implementation-path",[113],{"type":24,"value":114},"Implementation",{"type":24,"value":94},{"type":18,"tag":87,"props":117,"children":119},{"href":118},"#research-focus",[120],{"type":24,"value":121},"Research Focus",{"type":24,"value":94},{"type":18,"tag":87,"props":124,"children":126},{"href":125},"#media-gallery",[127],{"type":24,"value":128},"Media",{"type":24,"value":94},{"type":18,"tag":87,"props":131,"children":133},{"href":132},"#references",[134],{"type":24,"value":135},"References",{"type":18,"tag":137,"props":138,"children":139},"hr",{},[],{"type":18,"tag":141,"props":142,"children":144},"h2",{"id":143},"start-here",[145],{"type":24,"value":146},"🧭 Start Here",{"type":18,"tag":19,"props":148,"children":149},{},[150,152,158],{"type":24,"value":151},"This repository documents our exploration of ",{"type":18,"tag":153,"props":154,"children":155},"strong",{},[156],{"type":24,"value":157},"Omnicopter design, modeling, optimal control, robust control, and fault-tolerant control",{"type":24,"value":159},".",{"type":18,"tag":19,"props":161,"children":162},{},[163,165,170],{"type":24,"value":164},"An Omnicopter is not just “a drone with more propellers”. It is a ",{"type":18,"tag":153,"props":166,"children":167},{},[168],{"type":24,"value":169},"fully-actuated aerial vehicle",{"type":24,"value":171}," that can command force and torque in all three spatial dimensions. In practice, this means it can:",{"type":18,"tag":173,"props":174,"children":175},"ul",{},[176,189,194,199],{"type":18,"tag":177,"props":178,"children":179},"li",{},[180,182,187],{"type":24,"value":181},"🔼 move upward, downward, sideways, forward, and backward ",{"type":18,"tag":153,"props":183,"children":184},{},[185],{"type":24,"value":186},"without needing to tilt first",{"type":24,"value":188},";",{"type":18,"tag":177,"props":190,"children":191},{},[192],{"type":24,"value":193},"🔄 rotate around roll, pitch, and yaw while maintaining position;",{"type":18,"tag":177,"props":195,"children":196},{},[197],{"type":24,"value":198},"🧲 hover at unusual or even inverted attitudes when actuator limits allow;",{"type":18,"tag":177,"props":200,"children":201},{},[202],{"type":24,"value":203},"🛡️ use actuator redundancy for safer control allocation and fault recovery.",{"type":18,"tag":205,"props":206,"children":207},"blockquote",{},[208],{"type":18,"tag":19,"props":209,"children":210},{},[211,216,218,223,225,230,232,237],{"type":18,"tag":153,"props":212,"children":213},{},[214],{"type":24,"value":215},"Project statement:",{"type":24,"value":217}," build and test an Omnicopter hardware platform, then use it as a research testbed for ",{"type":18,"tag":153,"props":219,"children":220},{},[221],{"type":24,"value":222},"optimal control",{"type":24,"value":224},", ",{"type":18,"tag":153,"props":226,"children":227},{},[228],{"type":24,"value":229},"robust control",{"type":24,"value":231},", and ",{"type":18,"tag":153,"props":233,"children":234},{},[235],{"type":24,"value":236},"fault diagnosis \u002F fault-tolerant control",{"type":24,"value":159},{"type":18,"tag":137,"props":239,"children":240},{},[],{"type":18,"tag":141,"props":242,"children":244},{"id":243},"project-at-a-glance",[245],{"type":24,"value":246},"✨ Project at a Glance",{"type":18,"tag":248,"props":249,"children":250},"table",{},[251,270],{"type":18,"tag":252,"props":253,"children":254},"thead",{},[255],{"type":18,"tag":256,"props":257,"children":258},"tr",{},[259,265],{"type":18,"tag":260,"props":261,"children":262},"th",{},[263],{"type":24,"value":264},"Item",{"type":18,"tag":260,"props":266,"children":267},{},[268],{"type":24,"value":269},"Description",{"type":18,"tag":271,"props":272,"children":273},"tbody",{},[274,288,301,314,327],{"type":18,"tag":256,"props":275,"children":276},{},[277,283],{"type":18,"tag":278,"props":279,"children":280},"td",{},[281],{"type":24,"value":282},"🛩️ Vehicle type",{"type":18,"tag":278,"props":284,"children":285},{},[286],{"type":24,"value":287},"Omnidirectional \u002F fully-actuated multirotor UAV",{"type":18,"tag":256,"props":289,"children":290},{},[291,296],{"type":18,"tag":278,"props":292,"children":293},{},[294],{"type":24,"value":295},"🎯 Research target",{"type":18,"tag":278,"props":297,"children":298},{},[299],{"type":24,"value":300},"Optimal allocation, robust 6-DoF tracking, actuator\u002Fsensor fault diagnosis",{"type":18,"tag":256,"props":302,"children":303},{},[304,309],{"type":18,"tag":278,"props":305,"children":306},{},[307],{"type":24,"value":308},"🧱 Hardware status",{"type":18,"tag":278,"props":310,"children":311},{},[312],{"type":24,"value":313},"A complete Omnicopter hardware platform has been constructed and tested",{"type":18,"tag":256,"props":315,"children":316},{},[317,322],{"type":18,"tag":278,"props":318,"children":319},{},[320],{"type":24,"value":321},"🧠 Core challenge",{"type":18,"tag":278,"props":323,"children":324},{},[325],{"type":24,"value":326},"Convert a desired 6D wrench into safe, efficient, and fault-aware motor commands",{"type":18,"tag":256,"props":328,"children":329},{},[330,335],{"type":18,"tag":278,"props":331,"children":332},{},[333],{"type":24,"value":334},"🧪 Validation path",{"type":18,"tag":278,"props":336,"children":337},{},[338],{"type":24,"value":339},"Bench tests → simulation → tethered flight → free flight → fault-injection experiments",{"type":18,"tag":19,"props":341,"children":342},{"align":21},[343,344],{"type":24,"value":25},{"type":18,"tag":27,"props":345,"children":348},{"src":346,"alt":347,"width":30},"assets\u002Fresearch_roadmap.svg","Project roadmap",[],{"type":18,"tag":137,"props":350,"children":351},{},[],{"type":18,"tag":141,"props":353,"children":355},{"id":354},"media-gallery",[356],{"type":24,"value":357},"🎬 Media Gallery",{"type":18,"tag":248,"props":359,"children":360},{},[361],{"type":18,"tag":271,"props":362,"children":363},{},[364,440],{"type":18,"tag":256,"props":365,"children":366},{},[367,405],{"type":18,"tag":278,"props":368,"children":370},{"width":369,"align":21},"50%",[371,372,384,385,388,389,394,395,398,399],{"type":24,"value":25},{"type":18,"tag":87,"props":373,"children":375},{"href":374},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=nsPkQYugfzs",[376,378,383],{"type":24,"value":377},"\n    ",{"type":18,"tag":27,"props":379,"children":382},{"src":380,"alt":381,"width":30},"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002FnsPkQYugfzs\u002Fhqdefault.jpg","PX4 Based Omnicopter Using the New Dynamic Control Allocation",[],{"type":24,"value":25},{"type":24,"value":25},{"type":18,"tag":50,"props":386,"children":387},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":390,"children":391},{},[392],{"type":24,"value":393},"PX4-based Omnicopter with dynamic control allocation",{"type":24,"value":25},{"type":18,"tag":50,"props":396,"children":397},{},[],{"type":24,"value":25},{"type":18,"tag":400,"props":401,"children":402},"sub",{},[403],{"type":24,"value":404},"Useful reference for PX4 control allocation and practical 6-DoF flight.",{"type":18,"tag":278,"props":406,"children":407},{"width":369,"align":21},[408,409,420,421,424,425,430,431,434,435],{"type":24,"value":25},{"type":18,"tag":87,"props":410,"children":412},{"href":411},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0p9jmrf1eFM",[413,414,419],{"type":24,"value":377},{"type":18,"tag":27,"props":415,"children":418},{"src":416,"alt":417,"width":30},"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002F0p9jmrf1eFM\u002Fhqdefault.jpg","ArduCopter 6dof OmniCopter outside Lynchpin",[],{"type":24,"value":25},{"type":24,"value":25},{"type":18,"tag":50,"props":422,"children":423},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":426,"children":427},{},[428],{"type":24,"value":429},"ArduCopter 6-DoF OmniCopter outside demo",{"type":24,"value":25},{"type":18,"tag":50,"props":432,"children":433},{},[],{"type":24,"value":25},{"type":18,"tag":400,"props":436,"children":437},{},[438],{"type":24,"value":439},"Useful reference for Lynchpin-style outdoor demonstrations.",{"type":18,"tag":256,"props":441,"children":442},{},[443,478],{"type":18,"tag":278,"props":444,"children":445},{"width":369,"align":21},[446,447,458,459,462,463,468,469,472,473],{"type":24,"value":25},{"type":18,"tag":87,"props":448,"children":450},{"href":449},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sIi80LMLJSY",[451,452,457],{"type":24,"value":377},{"type":18,"tag":27,"props":453,"children":456},{"src":454,"alt":455,"width":30},"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002FsIi80LMLJSY\u002Fhqdefault.jpg","The Omnicopter ETH Zurich",[],{"type":24,"value":25},{"type":24,"value":25},{"type":18,"tag":50,"props":460,"children":461},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":464,"children":465},{},[466],{"type":24,"value":467},"ETH Zurich Omnicopter",{"type":24,"value":25},{"type":18,"tag":50,"props":470,"children":471},{},[],{"type":24,"value":25},{"type":18,"tag":400,"props":474,"children":475},{},[476],{"type":24,"value":477},"Original omni-directional six-degree-of-freedom flying machine.",{"type":18,"tag":278,"props":479,"children":480},{"width":369,"align":21},[481,482,493,494,497,498,503,504,507,508],{"type":24,"value":25},{"type":18,"tag":87,"props":483,"children":485},{"href":484},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0gR1ekapOAE",[486,487,492],{"type":24,"value":377},{"type":18,"tag":27,"props":488,"children":491},{"src":489,"alt":490,"width":30},"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002F0gR1ekapOAE\u002Fhqdefault.jpg","Fetching Omnicopter",[],{"type":24,"value":25},{"type":24,"value":25},{"type":18,"tag":50,"props":495,"children":496},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":499,"children":500},{},[501],{"type":24,"value":502},"Trajectory generation for fully-actuated multirotors",{"type":24,"value":25},{"type":18,"tag":50,"props":505,"children":506},{},[],{"type":24,"value":25},{"type":18,"tag":400,"props":509,"children":510},{},[511],{"type":24,"value":512},"Useful reference for trajectory-level optimal control ideas.",{"type":18,"tag":514,"props":515,"children":517},"h3",{"id":516},"our-hardware-evidence-slots",[518],{"type":24,"value":519},"📸 Our hardware evidence slots",{"type":18,"tag":19,"props":521,"children":522},{},[523],{"type":24,"value":524},"We have built such a system in last summer SEP, this project was awarded as FIRST price in 2025 UG student research showcase",{"type":18,"tag":248,"props":526,"children":527},{},[528],{"type":18,"tag":271,"props":529,"children":530},{},[531],{"type":18,"tag":256,"props":532,"children":533},{},[534,559],{"type":18,"tag":278,"props":535,"children":537},{"width":536,"align":21},"42.9%",[538,539,544,545,548,549,554,555,558],{"type":24,"value":25},{"type":18,"tag":27,"props":540,"children":543},{"src":541,"alt":542,"width":30},"assets\u002Fhardware_prototype.jpg","Our Omnicopter hardware prototype",[],{"type":24,"value":25},{"type":18,"tag":50,"props":546,"children":547},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":550,"children":551},{},[552],{"type":24,"value":553},"Hardware prototype photo",{"type":24,"value":25},{"type":18,"tag":50,"props":556,"children":557},{},[],{"type":24,"value":25},{"type":18,"tag":278,"props":560,"children":562},{"width":561,"align":21},"57.1%",[563,564,572,573,576,577],{"type":24,"value":25},{"type":18,"tag":565,"props":566,"children":569},"video",{"src":567,"controls":568,"width":30},"assets\u002Fbench_test_thumbnail.mp4",true,[570],{"type":24,"value":571},"\n    Your browser does not support the video tag.\n  ",{"type":24,"value":25},{"type":18,"tag":50,"props":574,"children":575},{},[],{"type":24,"value":25},{"type":18,"tag":44,"props":578,"children":579},{},[580],{"type":24,"value":581},"Bench \u002F tethered test video",{"type":18,"tag":137,"props":583,"children":584},{},[],{"type":18,"tag":141,"props":586,"children":588},{"id":587},"what-is-an-omnicopter",[589],{"type":24,"value":590},"🚁 What is an Omnicopter?",{"type":18,"tag":19,"props":592,"children":593},{},[594,596,601],{"type":24,"value":595},"A conventional multirotor is usually ",{"type":18,"tag":153,"props":597,"children":598},{},[599],{"type":24,"value":600},"under-actuated",{"type":24,"value":602},". It can generate thrust mainly along the body vertical axis, so horizontal motion requires the vehicle to tilt. This couples translation and rotation:",{"type":18,"tag":604,"props":605,"children":608},"pre",{"className":606,"code":607,"language":24,"meta":8,"style":8},"language-text shiki shiki-themes github-light github-dark","Want to move sideways?\n    → tilt the drone\n    → thrust vector gains horizontal component\n    → attitude and position are coupled\n",[609],{"type":18,"tag":610,"props":611,"children":612},"code",{"__ignoreMap":8},[613,624,633,642],{"type":18,"tag":614,"props":615,"children":618},"span",{"class":616,"line":617},"line",1,[619],{"type":18,"tag":614,"props":620,"children":621},{},[622],{"type":24,"value":623},"Want to move sideways?\n",{"type":18,"tag":614,"props":625,"children":627},{"class":616,"line":626},2,[628],{"type":18,"tag":614,"props":629,"children":630},{},[631],{"type":24,"value":632},"    → tilt the drone\n",{"type":18,"tag":614,"props":634,"children":636},{"class":616,"line":635},3,[637],{"type":18,"tag":614,"props":638,"children":639},{},[640],{"type":24,"value":641},"    → thrust vector gains horizontal component\n",{"type":18,"tag":614,"props":643,"children":645},{"class":616,"line":644},4,[646],{"type":18,"tag":614,"props":647,"children":648},{},[649],{"type":24,"value":650},"    → attitude and position are coupled\n",{"type":18,"tag":19,"props":652,"children":653},{},[654,656,661],{"type":24,"value":655},"An ",{"type":18,"tag":153,"props":657,"children":658},{},[659],{"type":24,"value":660},"Omnicopter",{"type":24,"value":662}," breaks this limitation by arranging rotor positions and thrust axes in 3D. The goal is to generate a full 6D wrench:",{"type":18,"tag":614,"props":664,"children":667},{"className":665},[666],"katex-display",[668],{"type":18,"tag":614,"props":669,"children":672},{"className":670},[671],"katex",[673,805],{"type":18,"tag":614,"props":674,"children":677},{"className":675},[676],"katex-mathml",[678],{"type":18,"tag":679,"props":680,"children":683},"math",{"xmlns":681,"display":682},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML","block",[684],{"type":18,"tag":685,"props":686,"children":687},"semantics",{},[688,798],{"type":18,"tag":689,"props":690,"children":691},"mrow",{},[692,699,705,759,763,768],{"type":18,"tag":693,"props":694,"children":696},"mi",{"mathvariant":695},"bold",[697],{"type":24,"value":698},"y",{"type":18,"tag":700,"props":701,"children":702},"mo",{},[703],{"type":24,"value":704},"=",{"type":18,"tag":689,"props":706,"children":707},{},[708,714,754],{"type":18,"tag":700,"props":709,"children":711},{"fence":710},"true",[712],{"type":24,"value":713},"[",{"type":18,"tag":715,"props":716,"children":719},"mtable",{"rowspacing":717,"columnalign":21,"columnspacing":718},"0.16em","1em",[720,739],{"type":18,"tag":721,"props":722,"children":723},"mtr",{},[724],{"type":18,"tag":725,"props":726,"children":727},"mtd",{},[728],{"type":18,"tag":729,"props":730,"children":733},"mstyle",{"scriptlevel":731,"displaystyle":732},"0","false",[734],{"type":18,"tag":693,"props":735,"children":736},{"mathvariant":695},[737],{"type":24,"value":738},"F",{"type":18,"tag":721,"props":740,"children":741},{},[742],{"type":18,"tag":725,"props":743,"children":744},{},[745],{"type":18,"tag":729,"props":746,"children":747},{"scriptlevel":731,"displaystyle":732},[748],{"type":18,"tag":693,"props":749,"children":751},{"mathvariant":750},"bold-italic",[752],{"type":24,"value":753},"τ",{"type":18,"tag":700,"props":755,"children":756},{"fence":710},[757],{"type":24,"value":758},"]",{"type":18,"tag":700,"props":760,"children":761},{},[762],{"type":24,"value":704},{"type":18,"tag":693,"props":764,"children":765},{},[766],{"type":24,"value":767},"M",{"type":18,"tag":769,"props":770,"children":771},"msub",{},[772,777],{"type":18,"tag":693,"props":773,"children":774},{"mathvariant":695},[775],{"type":24,"value":776},"f",{"type":18,"tag":689,"props":778,"children":779},{},[780,784,789,794],{"type":18,"tag":693,"props":781,"children":782},{},[783],{"type":24,"value":19},{"type":18,"tag":693,"props":785,"children":786},{},[787],{"type":24,"value":788},"r",{"type":18,"tag":693,"props":790,"children":791},{},[792],{"type":24,"value":793},"o",{"type":18,"tag":693,"props":795,"children":796},{},[797],{"type":24,"value":19},{"type":18,"tag":799,"props":800,"children":802},"annotation",{"encoding":801},"application\u002Fx-tex",[803],{"type":24,"value":804},"\\mathbf{y} =\n\\begin{bmatrix}\n\\mathbf{F} \\\\\n\\boldsymbol{\\tau}\n\\end{bmatrix}\n= M \\mathbf{f}_{prop}",{"type":18,"tag":614,"props":806,"children":809},{"className":807,"ariaHidden":710},[808],"katex-html",[810,845,991],{"type":18,"tag":614,"props":811,"children":814},{"className":812},[813],"base",[815,821,829,835,841],{"type":18,"tag":614,"props":816,"children":820},{"className":817,"style":819},[818],"strut","height:0.6389em;vertical-align:-0.1944em;",[],{"type":18,"tag":614,"props":822,"children":827},{"className":823,"style":826},[824,825],"mord","mathbf","margin-right:0.016em;",[828],{"type":24,"value":698},{"type":18,"tag":614,"props":830,"children":834},{"className":831,"style":833},[832],"mspace","margin-right:0.2778em;",[],{"type":18,"tag":614,"props":836,"children":839},{"className":837},[838],"mrel",[840],{"type":24,"value":704},{"type":18,"tag":614,"props":842,"children":844},{"className":843,"style":833},[832],[],{"type":18,"tag":614,"props":846,"children":848},{"className":847},[813],[849,854,978,982,987],{"type":18,"tag":614,"props":850,"children":853},{"className":851,"style":852},[818],"height:2.4em;vertical-align:-0.95em;",[],{"type":18,"tag":614,"props":855,"children":858},{"className":856},[857],"minner",[859,873,968],{"type":18,"tag":614,"props":860,"children":865},{"className":861,"style":864},[862,863],"mopen","delimcenter","top:0em;",[866],{"type":18,"tag":614,"props":867,"children":871},{"className":868},[869,870],"delimsizing","size3",[872],{"type":24,"value":713},{"type":18,"tag":614,"props":874,"children":876},{"className":875},[824],[877],{"type":18,"tag":614,"props":878,"children":880},{"className":879},[715],[881],{"type":18,"tag":614,"props":882,"children":885},{"className":883},[884],"col-align-c",[886],{"type":18,"tag":614,"props":887,"children":891},{"className":888},[889,890],"vlist-t","vlist-t2",[892,956],{"type":18,"tag":614,"props":893,"children":896},{"className":894},[895],"vlist-r",[897,949],{"type":18,"tag":614,"props":898,"children":902},{"className":899,"style":901},[900],"vlist","height:1.45em;",[903,922],{"type":18,"tag":614,"props":904,"children":906},{"style":905},"top:-3.61em;",[907,913],{"type":18,"tag":614,"props":908,"children":912},{"className":909,"style":911},[910],"pstrut","height:3em;",[],{"type":18,"tag":614,"props":914,"children":916},{"className":915},[824],[917],{"type":18,"tag":614,"props":918,"children":920},{"className":919},[824,825],[921],{"type":24,"value":738},{"type":18,"tag":614,"props":923,"children":925},{"style":924},"top:-2.41em;",[926,930],{"type":18,"tag":614,"props":927,"children":929},{"className":928,"style":911},[910],[],{"type":18,"tag":614,"props":931,"children":933},{"className":932},[824],[934],{"type":18,"tag":614,"props":935,"children":937},{"className":936},[824],[938],{"type":18,"tag":614,"props":939,"children":941},{"className":940},[824],[942],{"type":18,"tag":614,"props":943,"children":947},{"className":944,"style":946},[824,945],"boldsymbol","margin-right:0.1347em;",[948],{"type":24,"value":753},{"type":18,"tag":614,"props":950,"children":953},{"className":951},[952],"vlist-s",[954],{"type":24,"value":955},"​",{"type":18,"tag":614,"props":957,"children":959},{"className":958},[895],[960],{"type":18,"tag":614,"props":961,"children":964},{"className":962,"style":963},[900],"height:0.95em;",[965],{"type":18,"tag":614,"props":966,"children":967},{},[],{"type":18,"tag":614,"props":969,"children":972},{"className":970,"style":864},[971,863],"mclose",[973],{"type":18,"tag":614,"props":974,"children":976},{"className":975},[869,870],[977],{"type":24,"value":758},{"type":18,"tag":614,"props":979,"children":981},{"className":980,"style":833},[832],[],{"type":18,"tag":614,"props":983,"children":985},{"className":984},[838],[986],{"type":24,"value":704},{"type":18,"tag":614,"props":988,"children":990},{"className":989,"style":833},[832],[],{"type":18,"tag":614,"props":992,"children":994},{"className":993},[813],[995,1000,1007],{"type":18,"tag":614,"props":996,"children":999},{"className":997,"style":998},[818],"height:0.9805em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":1001,"children":1005},{"className":1002,"style":1004},[824,1003],"mathnormal","margin-right:0.109em;",[1006],{"type":24,"value":767},{"type":18,"tag":614,"props":1008,"children":1010},{"className":1009},[824],[1011,1016],{"type":18,"tag":614,"props":1012,"children":1014},{"className":1013,"style":1004},[824,825],[1015],{"type":24,"value":776},{"type":18,"tag":614,"props":1017,"children":1020},{"className":1018},[1019],"msupsub",[1021],{"type":18,"tag":614,"props":1022,"children":1024},{"className":1023},[889,890],[1025,1080],{"type":18,"tag":614,"props":1026,"children":1028},{"className":1027},[895],[1029,1075],{"type":18,"tag":614,"props":1030,"children":1033},{"className":1031,"style":1032},[900],"height:0.1514em;",[1034],{"type":18,"tag":614,"props":1035,"children":1037},{"style":1036},"top:-2.55em;margin-left:-0.109em;margin-right:0.05em;",[1038,1043],{"type":18,"tag":614,"props":1039,"children":1042},{"className":1040,"style":1041},[910],"height:2.7em;",[],{"type":18,"tag":614,"props":1044,"children":1049},{"className":1045},[1046,1047,870,1048],"sizing","reset-size6","mtight",[1050],{"type":18,"tag":614,"props":1051,"children":1053},{"className":1052},[824,1048],[1054,1059,1065,1070],{"type":18,"tag":614,"props":1055,"children":1057},{"className":1056},[824,1003,1048],[1058],{"type":24,"value":19},{"type":18,"tag":614,"props":1060,"children":1063},{"className":1061,"style":1062},[824,1003,1048],"margin-right:0.0278em;",[1064],{"type":24,"value":788},{"type":18,"tag":614,"props":1066,"children":1068},{"className":1067},[824,1003,1048],[1069],{"type":24,"value":793},{"type":18,"tag":614,"props":1071,"children":1073},{"className":1072},[824,1003,1048],[1074],{"type":24,"value":19},{"type":18,"tag":614,"props":1076,"children":1078},{"className":1077},[952],[1079],{"type":24,"value":955},{"type":18,"tag":614,"props":1081,"children":1083},{"className":1082},[895],[1084],{"type":18,"tag":614,"props":1085,"children":1088},{"className":1086,"style":1087},[900],"height:0.2861em;",[1089],{"type":18,"tag":614,"props":1090,"children":1091},{},[],{"type":18,"tag":19,"props":1093,"children":1094},{},[1095],{"type":24,"value":1096},"where:",{"type":18,"tag":173,"props":1098,"children":1099},{},[1100,1149,1206,1347],{"type":18,"tag":177,"props":1101,"children":1102},{},[1103,1147],{"type":18,"tag":614,"props":1104,"children":1106},{"className":1105},[671],[1107,1129],{"type":18,"tag":614,"props":1108,"children":1110},{"className":1109},[676],[1111],{"type":18,"tag":679,"props":1112,"children":1113},{"xmlns":681},[1114],{"type":18,"tag":685,"props":1115,"children":1116},{},[1117,1124],{"type":18,"tag":689,"props":1118,"children":1119},{},[1120],{"type":18,"tag":693,"props":1121,"children":1122},{"mathvariant":695},[1123],{"type":24,"value":738},{"type":18,"tag":799,"props":1125,"children":1126},{"encoding":801},[1127],{"type":24,"value":1128},"\\mathbf{F}",{"type":18,"tag":614,"props":1130,"children":1132},{"className":1131,"ariaHidden":710},[808],[1133],{"type":18,"tag":614,"props":1134,"children":1136},{"className":1135},[813],[1137,1142],{"type":18,"tag":614,"props":1138,"children":1141},{"className":1139,"style":1140},[818],"height:0.6861em;",[],{"type":18,"tag":614,"props":1143,"children":1145},{"className":1144},[824,825],[1146],{"type":24,"value":738},{"type":24,"value":1148}," is the 3D body force;",{"type":18,"tag":177,"props":1150,"children":1151},{},[1152,1204],{"type":18,"tag":614,"props":1153,"children":1155},{"className":1154},[671],[1156,1178],{"type":18,"tag":614,"props":1157,"children":1159},{"className":1158},[676],[1160],{"type":18,"tag":679,"props":1161,"children":1162},{"xmlns":681},[1163],{"type":18,"tag":685,"props":1164,"children":1165},{},[1166,1173],{"type":18,"tag":689,"props":1167,"children":1168},{},[1169],{"type":18,"tag":693,"props":1170,"children":1171},{"mathvariant":750},[1172],{"type":24,"value":753},{"type":18,"tag":799,"props":1174,"children":1175},{"encoding":801},[1176],{"type":24,"value":1177},"\\boldsymbol{\\tau}",{"type":18,"tag":614,"props":1179,"children":1181},{"className":1180,"ariaHidden":710},[808],[1182],{"type":18,"tag":614,"props":1183,"children":1185},{"className":1184},[813],[1186,1191],{"type":18,"tag":614,"props":1187,"children":1190},{"className":1188,"style":1189},[818],"height:0.4444em;",[],{"type":18,"tag":614,"props":1192,"children":1194},{"className":1193},[824],[1195],{"type":18,"tag":614,"props":1196,"children":1198},{"className":1197},[824],[1199],{"type":18,"tag":614,"props":1200,"children":1202},{"className":1201,"style":946},[824,945],[1203],{"type":24,"value":753},{"type":24,"value":1205}," is the 3D body torque;",{"type":18,"tag":177,"props":1207,"children":1208},{},[1209,1345],{"type":18,"tag":614,"props":1210,"children":1212},{"className":1211},[671],[1213,1257],{"type":18,"tag":614,"props":1214,"children":1216},{"className":1215},[676],[1217],{"type":18,"tag":679,"props":1218,"children":1219},{"xmlns":681},[1220],{"type":18,"tag":685,"props":1221,"children":1222},{},[1223,1252],{"type":18,"tag":689,"props":1224,"children":1225},{},[1226],{"type":18,"tag":769,"props":1227,"children":1228},{},[1229,1233],{"type":18,"tag":693,"props":1230,"children":1231},{"mathvariant":695},[1232],{"type":24,"value":776},{"type":18,"tag":689,"props":1234,"children":1235},{},[1236,1240,1244,1248],{"type":18,"tag":693,"props":1237,"children":1238},{},[1239],{"type":24,"value":19},{"type":18,"tag":693,"props":1241,"children":1242},{},[1243],{"type":24,"value":788},{"type":18,"tag":693,"props":1245,"children":1246},{},[1247],{"type":24,"value":793},{"type":18,"tag":693,"props":1249,"children":1250},{},[1251],{"type":24,"value":19},{"type":18,"tag":799,"props":1253,"children":1254},{"encoding":801},[1255],{"type":24,"value":1256},"\\mathbf{f}_{prop}",{"type":18,"tag":614,"props":1258,"children":1260},{"className":1259,"ariaHidden":710},[808],[1261],{"type":18,"tag":614,"props":1262,"children":1264},{"className":1263},[813],[1265,1269],{"type":18,"tag":614,"props":1266,"children":1268},{"className":1267,"style":998},[818],[],{"type":18,"tag":614,"props":1270,"children":1272},{"className":1271},[824],[1273,1278],{"type":18,"tag":614,"props":1274,"children":1276},{"className":1275,"style":1004},[824,825],[1277],{"type":24,"value":776},{"type":18,"tag":614,"props":1279,"children":1281},{"className":1280},[1019],[1282],{"type":18,"tag":614,"props":1283,"children":1285},{"className":1284},[889,890],[1286,1334],{"type":18,"tag":614,"props":1287,"children":1289},{"className":1288},[895],[1290,1329],{"type":18,"tag":614,"props":1291,"children":1293},{"className":1292,"style":1032},[900],[1294],{"type":18,"tag":614,"props":1295,"children":1296},{"style":1036},[1297,1301],{"type":18,"tag":614,"props":1298,"children":1300},{"className":1299,"style":1041},[910],[],{"type":18,"tag":614,"props":1302,"children":1304},{"className":1303},[1046,1047,870,1048],[1305],{"type":18,"tag":614,"props":1306,"children":1308},{"className":1307},[824,1048],[1309,1314,1319,1324],{"type":18,"tag":614,"props":1310,"children":1312},{"className":1311},[824,1003,1048],[1313],{"type":24,"value":19},{"type":18,"tag":614,"props":1315,"children":1317},{"className":1316,"style":1062},[824,1003,1048],[1318],{"type":24,"value":788},{"type":18,"tag":614,"props":1320,"children":1322},{"className":1321},[824,1003,1048],[1323],{"type":24,"value":793},{"type":18,"tag":614,"props":1325,"children":1327},{"className":1326},[824,1003,1048],[1328],{"type":24,"value":19},{"type":18,"tag":614,"props":1330,"children":1332},{"className":1331},[952],[1333],{"type":24,"value":955},{"type":18,"tag":614,"props":1335,"children":1337},{"className":1336},[895],[1338],{"type":18,"tag":614,"props":1339,"children":1341},{"className":1340,"style":1087},[900],[1342],{"type":18,"tag":614,"props":1343,"children":1344},{},[],{"type":24,"value":1346}," is the vector of propeller thrusts;",{"type":18,"tag":177,"props":1348,"children":1349},{},[1350,1393],{"type":18,"tag":614,"props":1351,"children":1353},{"className":1352},[671],[1354,1375],{"type":18,"tag":614,"props":1355,"children":1357},{"className":1356},[676],[1358],{"type":18,"tag":679,"props":1359,"children":1360},{"xmlns":681},[1361],{"type":18,"tag":685,"props":1362,"children":1363},{},[1364,1371],{"type":18,"tag":689,"props":1365,"children":1366},{},[1367],{"type":18,"tag":693,"props":1368,"children":1369},{},[1370],{"type":24,"value":767},{"type":18,"tag":799,"props":1372,"children":1373},{"encoding":801},[1374],{"type":24,"value":767},{"type":18,"tag":614,"props":1376,"children":1378},{"className":1377,"ariaHidden":710},[808],[1379],{"type":18,"tag":614,"props":1380,"children":1382},{"className":1381},[813],[1383,1388],{"type":18,"tag":614,"props":1384,"children":1387},{"className":1385,"style":1386},[818],"height:0.6833em;",[],{"type":18,"tag":614,"props":1389,"children":1391},{"className":1390,"style":1004},[824,1003],[1392],{"type":24,"value":767},{"type":24,"value":1394}," is the geometry-dependent allocation matrix.",{"type":18,"tag":19,"props":1396,"children":1397},{},[1398,1400,1444],{"type":24,"value":1399},"For rotor ",{"type":18,"tag":614,"props":1401,"children":1403},{"className":1402},[671],[1404,1426],{"type":18,"tag":614,"props":1405,"children":1407},{"className":1406},[676],[1408],{"type":18,"tag":679,"props":1409,"children":1410},{"xmlns":681},[1411],{"type":18,"tag":685,"props":1412,"children":1413},{},[1414,1422],{"type":18,"tag":689,"props":1415,"children":1416},{},[1417],{"type":18,"tag":693,"props":1418,"children":1419},{},[1420],{"type":24,"value":1421},"i",{"type":18,"tag":799,"props":1423,"children":1424},{"encoding":801},[1425],{"type":24,"value":1421},{"type":18,"tag":614,"props":1427,"children":1429},{"className":1428,"ariaHidden":710},[808],[1430],{"type":18,"tag":614,"props":1431,"children":1433},{"className":1432},[813],[1434,1439],{"type":18,"tag":614,"props":1435,"children":1438},{"className":1436,"style":1437},[818],"height:0.6595em;",[],{"type":18,"tag":614,"props":1440,"children":1442},{"className":1441},[824,1003],[1443],{"type":24,"value":1421},{"type":24,"value":1445},", a simplified force\u002Ftorque contribution is:",{"type":18,"tag":614,"props":1447,"children":1449},{"className":1448},[666],[1450],{"type":18,"tag":614,"props":1451,"children":1453},{"className":1452},[671],[1454,1592],{"type":18,"tag":614,"props":1455,"children":1457},{"className":1456},[676],[1458],{"type":18,"tag":679,"props":1459,"children":1460},{"xmlns":681,"display":682},[1461],{"type":18,"tag":685,"props":1462,"children":1463},{},[1464,1587],{"type":18,"tag":689,"props":1465,"children":1466},{},[1467,1471,1475,1488,1499,1511,1516,1520,1524,1528,1539,1550,1555,1566,1571,1582],{"type":18,"tag":693,"props":1468,"children":1469},{"mathvariant":695},[1470],{"type":24,"value":738},{"type":18,"tag":700,"props":1472,"children":1473},{},[1474],{"type":24,"value":704},{"type":18,"tag":1476,"props":1477,"children":1478},"munder",{},[1479,1484],{"type":18,"tag":700,"props":1480,"children":1481},{},[1482],{"type":24,"value":1483},"∑",{"type":18,"tag":693,"props":1485,"children":1486},{},[1487],{"type":24,"value":1421},{"type":18,"tag":769,"props":1489,"children":1490},{},[1491,1495],{"type":18,"tag":693,"props":1492,"children":1493},{},[1494],{"type":24,"value":776},{"type":18,"tag":693,"props":1496,"children":1497},{},[1498],{"type":24,"value":1421},{"type":18,"tag":769,"props":1500,"children":1501},{},[1502,1507],{"type":18,"tag":693,"props":1503,"children":1504},{"mathvariant":695},[1505],{"type":24,"value":1506},"x",{"type":18,"tag":693,"props":1508,"children":1509},{},[1510],{"type":24,"value":1421},{"type":18,"tag":700,"props":1512,"children":1513},{"separator":710},[1514],{"type":24,"value":1515},",",{"type":18,"tag":832,"props":1517,"children":1519},{"width":1518},"2em",[],{"type":18,"tag":693,"props":1521,"children":1522},{"mathvariant":750},[1523],{"type":24,"value":753},{"type":18,"tag":700,"props":1525,"children":1526},{},[1527],{"type":24,"value":704},{"type":18,"tag":1476,"props":1529,"children":1530},{},[1531,1535],{"type":18,"tag":700,"props":1532,"children":1533},{},[1534],{"type":24,"value":1483},{"type":18,"tag":693,"props":1536,"children":1537},{},[1538],{"type":24,"value":1421},{"type":18,"tag":769,"props":1540,"children":1541},{},[1542,1546],{"type":18,"tag":693,"props":1543,"children":1544},{},[1545],{"type":24,"value":776},{"type":18,"tag":693,"props":1547,"children":1548},{},[1549],{"type":24,"value":1421},{"type":18,"tag":700,"props":1551,"children":1552},{"stretchy":732},[1553],{"type":24,"value":1554},"(",{"type":18,"tag":769,"props":1556,"children":1557},{},[1558,1562],{"type":18,"tag":693,"props":1559,"children":1560},{"mathvariant":695},[1561],{"type":24,"value":19},{"type":18,"tag":693,"props":1563,"children":1564},{},[1565],{"type":24,"value":1421},{"type":18,"tag":700,"props":1567,"children":1568},{},[1569],{"type":24,"value":1570},"×",{"type":18,"tag":769,"props":1572,"children":1573},{},[1574,1578],{"type":18,"tag":693,"props":1575,"children":1576},{"mathvariant":695},[1577],{"type":24,"value":1506},{"type":18,"tag":693,"props":1579,"children":1580},{},[1581],{"type":24,"value":1421},{"type":18,"tag":700,"props":1583,"children":1584},{"stretchy":732},[1585],{"type":24,"value":1586},")",{"type":18,"tag":799,"props":1588,"children":1589},{"encoding":801},[1590],{"type":24,"value":1591},"\\mathbf{F} = \\sum_i f_i \\mathbf{x}_i,\n\\qquad\n\\boldsymbol{\\tau} = \\sum_i f_i (\\mathbf{p}_i \\times \\mathbf{x}_i)",{"type":18,"tag":614,"props":1593,"children":1595},{"className":1594,"ariaHidden":710},[808],[1596,1622,1868,2077],{"type":18,"tag":614,"props":1597,"children":1599},{"className":1598},[813],[1600,1604,1609,1613,1618],{"type":18,"tag":614,"props":1601,"children":1603},{"className":1602,"style":1140},[818],[],{"type":18,"tag":614,"props":1605,"children":1607},{"className":1606},[824,825],[1608],{"type":24,"value":738},{"type":18,"tag":614,"props":1610,"children":1612},{"className":1611,"style":833},[832],[],{"type":18,"tag":614,"props":1614,"children":1616},{"className":1615},[838],[1617],{"type":24,"value":704},{"type":18,"tag":614,"props":1619,"children":1621},{"className":1620,"style":833},[832],[],{"type":18,"tag":614,"props":1623,"children":1625},{"className":1624},[813],[1626,1631,1703,1708,1769,1827,1833,1838,1842,1855,1859,1864],{"type":18,"tag":614,"props":1627,"children":1630},{"className":1628,"style":1629},[818],"height:2.3277em;vertical-align:-1.2777em;",[],{"type":18,"tag":614,"props":1632,"children":1636},{"className":1633},[1634,1635],"mop","op-limits",[1637],{"type":18,"tag":614,"props":1638,"children":1640},{"className":1639},[889,890],[1641,1691],{"type":18,"tag":614,"props":1642,"children":1644},{"className":1643},[895],[1645,1686],{"type":18,"tag":614,"props":1646,"children":1649},{"className":1647,"style":1648},[900],"height:1.05em;",[1650,1668],{"type":18,"tag":614,"props":1651,"children":1653},{"style":1652},"top:-1.8723em;margin-left:0em;",[1654,1659],{"type":18,"tag":614,"props":1655,"children":1658},{"className":1656,"style":1657},[910],"height:3.05em;",[],{"type":18,"tag":614,"props":1660,"children":1662},{"className":1661},[1046,1047,870,1048],[1663],{"type":18,"tag":614,"props":1664,"children":1666},{"className":1665},[824,1003,1048],[1667],{"type":24,"value":1421},{"type":18,"tag":614,"props":1669,"children":1671},{"style":1670},"top:-3.05em;",[1672,1676],{"type":18,"tag":614,"props":1673,"children":1675},{"className":1674,"style":1657},[910],[],{"type":18,"tag":614,"props":1677,"children":1678},{},[1679],{"type":18,"tag":614,"props":1680,"children":1684},{"className":1681},[1634,1682,1683],"op-symbol","large-op",[1685],{"type":24,"value":1483},{"type":18,"tag":614,"props":1687,"children":1689},{"className":1688},[952],[1690],{"type":24,"value":955},{"type":18,"tag":614,"props":1692,"children":1694},{"className":1693},[895],[1695],{"type":18,"tag":614,"props":1696,"children":1699},{"className":1697,"style":1698},[900],"height:1.2777em;",[1700],{"type":18,"tag":614,"props":1701,"children":1702},{},[],{"type":18,"tag":614,"props":1704,"children":1707},{"className":1705,"style":1706},[832],"margin-right:0.1667em;",[],{"type":18,"tag":614,"props":1709,"children":1711},{"className":1710},[824],[1712,1718],{"type":18,"tag":614,"props":1713,"children":1716},{"className":1714,"style":1715},[824,1003],"margin-right:0.1076em;",[1717],{"type":24,"value":776},{"type":18,"tag":614,"props":1719,"children":1721},{"className":1720},[1019],[1722],{"type":18,"tag":614,"props":1723,"children":1725},{"className":1724},[889,890],[1726,1757],{"type":18,"tag":614,"props":1727,"children":1729},{"className":1728},[895],[1730,1752],{"type":18,"tag":614,"props":1731,"children":1734},{"className":1732,"style":1733},[900],"height:0.3117em;",[1735],{"type":18,"tag":614,"props":1736,"children":1738},{"style":1737},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[1739,1743],{"type":18,"tag":614,"props":1740,"children":1742},{"className":1741,"style":1041},[910],[],{"type":18,"tag":614,"props":1744,"children":1746},{"className":1745},[1046,1047,870,1048],[1747],{"type":18,"tag":614,"props":1748,"children":1750},{"className":1749},[824,1003,1048],[1751],{"type":24,"value":1421},{"type":18,"tag":614,"props":1753,"children":1755},{"className":1754},[952],[1756],{"type":24,"value":955},{"type":18,"tag":614,"props":1758,"children":1760},{"className":1759},[895],[1761],{"type":18,"tag":614,"props":1762,"children":1765},{"className":1763,"style":1764},[900],"height:0.15em;",[1766],{"type":18,"tag":614,"props":1767,"children":1768},{},[],{"type":18,"tag":614,"props":1770,"children":1772},{"className":1771},[824],[1773,1778],{"type":18,"tag":614,"props":1774,"children":1776},{"className":1775},[824,825],[1777],{"type":24,"value":1506},{"type":18,"tag":614,"props":1779,"children":1781},{"className":1780},[1019],[1782],{"type":18,"tag":614,"props":1783,"children":1785},{"className":1784},[889,890],[1786,1816],{"type":18,"tag":614,"props":1787,"children":1789},{"className":1788},[895],[1790,1811],{"type":18,"tag":614,"props":1791,"children":1793},{"className":1792,"style":1733},[900],[1794],{"type":18,"tag":614,"props":1795,"children":1797},{"style":1796},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[1798,1802],{"type":18,"tag":614,"props":1799,"children":1801},{"className":1800,"style":1041},[910],[],{"type":18,"tag":614,"props":1803,"children":1805},{"className":1804},[1046,1047,870,1048],[1806],{"type":18,"tag":614,"props":1807,"children":1809},{"className":1808},[824,1003,1048],[1810],{"type":24,"value":1421},{"type":18,"tag":614,"props":1812,"children":1814},{"className":1813},[952],[1815],{"type":24,"value":955},{"type":18,"tag":614,"props":1817,"children":1819},{"className":1818},[895],[1820],{"type":18,"tag":614,"props":1821,"children":1823},{"className":1822,"style":1764},[900],[1824],{"type":18,"tag":614,"props":1825,"children":1826},{},[],{"type":18,"tag":614,"props":1828,"children":1831},{"className":1829},[1830],"mpunct",[1832],{"type":24,"value":1515},{"type":18,"tag":614,"props":1834,"children":1837},{"className":1835,"style":1836},[832],"margin-right:2em;",[],{"type":18,"tag":614,"props":1839,"children":1841},{"className":1840,"style":1706},[832],[],{"type":18,"tag":614,"props":1843,"children":1845},{"className":1844},[824],[1846],{"type":18,"tag":614,"props":1847,"children":1849},{"className":1848},[824],[1850],{"type":18,"tag":614,"props":1851,"children":1853},{"className":1852,"style":946},[824,945],[1854],{"type":24,"value":753},{"type":18,"tag":614,"props":1856,"children":1858},{"className":1857,"style":833},[832],[],{"type":18,"tag":614,"props":1860,"children":1862},{"className":1861},[838],[1863],{"type":24,"value":704},{"type":18,"tag":614,"props":1865,"children":1867},{"className":1866,"style":833},[832],[],{"type":18,"tag":614,"props":1869,"children":1871},{"className":1870},[813],[1872,1876,1939,1943,2000,2005,2062,2067,2073],{"type":18,"tag":614,"props":1873,"children":1875},{"className":1874,"style":1629},[818],[],{"type":18,"tag":614,"props":1877,"children":1879},{"className":1878},[1634,1635],[1880],{"type":18,"tag":614,"props":1881,"children":1883},{"className":1882},[889,890],[1884,1928],{"type":18,"tag":614,"props":1885,"children":1887},{"className":1886},[895],[1888,1923],{"type":18,"tag":614,"props":1889,"children":1891},{"className":1890,"style":1648},[900],[1892,1908],{"type":18,"tag":614,"props":1893,"children":1894},{"style":1652},[1895,1899],{"type":18,"tag":614,"props":1896,"children":1898},{"className":1897,"style":1657},[910],[],{"type":18,"tag":614,"props":1900,"children":1902},{"className":1901},[1046,1047,870,1048],[1903],{"type":18,"tag":614,"props":1904,"children":1906},{"className":1905},[824,1003,1048],[1907],{"type":24,"value":1421},{"type":18,"tag":614,"props":1909,"children":1910},{"style":1670},[1911,1915],{"type":18,"tag":614,"props":1912,"children":1914},{"className":1913,"style":1657},[910],[],{"type":18,"tag":614,"props":1916,"children":1917},{},[1918],{"type":18,"tag":614,"props":1919,"children":1921},{"className":1920},[1634,1682,1683],[1922],{"type":24,"value":1483},{"type":18,"tag":614,"props":1924,"children":1926},{"className":1925},[952],[1927],{"type":24,"value":955},{"type":18,"tag":614,"props":1929,"children":1931},{"className":1930},[895],[1932],{"type":18,"tag":614,"props":1933,"children":1935},{"className":1934,"style":1698},[900],[1936],{"type":18,"tag":614,"props":1937,"children":1938},{},[],{"type":18,"tag":614,"props":1940,"children":1942},{"className":1941,"style":1706},[832],[],{"type":18,"tag":614,"props":1944,"children":1946},{"className":1945},[824],[1947,1952],{"type":18,"tag":614,"props":1948,"children":1950},{"className":1949,"style":1715},[824,1003],[1951],{"type":24,"value":776},{"type":18,"tag":614,"props":1953,"children":1955},{"className":1954},[1019],[1956],{"type":18,"tag":614,"props":1957,"children":1959},{"className":1958},[889,890],[1960,1989],{"type":18,"tag":614,"props":1961,"children":1963},{"className":1962},[895],[1964,1984],{"type":18,"tag":614,"props":1965,"children":1967},{"className":1966,"style":1733},[900],[1968],{"type":18,"tag":614,"props":1969,"children":1970},{"style":1737},[1971,1975],{"type":18,"tag":614,"props":1972,"children":1974},{"className":1973,"style":1041},[910],[],{"type":18,"tag":614,"props":1976,"children":1978},{"className":1977},[1046,1047,870,1048],[1979],{"type":18,"tag":614,"props":1980,"children":1982},{"className":1981},[824,1003,1048],[1983],{"type":24,"value":1421},{"type":18,"tag":614,"props":1985,"children":1987},{"className":1986},[952],[1988],{"type":24,"value":955},{"type":18,"tag":614,"props":1990,"children":1992},{"className":1991},[895],[1993],{"type":18,"tag":614,"props":1994,"children":1996},{"className":1995,"style":1764},[900],[1997],{"type":18,"tag":614,"props":1998,"children":1999},{},[],{"type":18,"tag":614,"props":2001,"children":2003},{"className":2002},[862],[2004],{"type":24,"value":1554},{"type":18,"tag":614,"props":2006,"children":2008},{"className":2007},[824],[2009,2014],{"type":18,"tag":614,"props":2010,"children":2012},{"className":2011},[824,825],[2013],{"type":24,"value":19},{"type":18,"tag":614,"props":2015,"children":2017},{"className":2016},[1019],[2018],{"type":18,"tag":614,"props":2019,"children":2021},{"className":2020},[889,890],[2022,2051],{"type":18,"tag":614,"props":2023,"children":2025},{"className":2024},[895],[2026,2046],{"type":18,"tag":614,"props":2027,"children":2029},{"className":2028,"style":1733},[900],[2030],{"type":18,"tag":614,"props":2031,"children":2032},{"style":1796},[2033,2037],{"type":18,"tag":614,"props":2034,"children":2036},{"className":2035,"style":1041},[910],[],{"type":18,"tag":614,"props":2038,"children":2040},{"className":2039},[1046,1047,870,1048],[2041],{"type":18,"tag":614,"props":2042,"children":2044},{"className":2043},[824,1003,1048],[2045],{"type":24,"value":1421},{"type":18,"tag":614,"props":2047,"children":2049},{"className":2048},[952],[2050],{"type":24,"value":955},{"type":18,"tag":614,"props":2052,"children":2054},{"className":2053},[895],[2055],{"type":18,"tag":614,"props":2056,"children":2058},{"className":2057,"style":1764},[900],[2059],{"type":18,"tag":614,"props":2060,"children":2061},{},[],{"type":18,"tag":614,"props":2063,"children":2066},{"className":2064,"style":2065},[832],"margin-right:0.2222em;",[],{"type":18,"tag":614,"props":2068,"children":2071},{"className":2069},[2070],"mbin",[2072],{"type":24,"value":1570},{"type":18,"tag":614,"props":2074,"children":2076},{"className":2075,"style":2065},[832],[],{"type":18,"tag":614,"props":2078,"children":2080},{"className":2079},[813],[2081,2086,2143],{"type":18,"tag":614,"props":2082,"children":2085},{"className":2083,"style":2084},[818],"height:1em;vertical-align:-0.25em;",[],{"type":18,"tag":614,"props":2087,"children":2089},{"className":2088},[824],[2090,2095],{"type":18,"tag":614,"props":2091,"children":2093},{"className":2092},[824,825],[2094],{"type":24,"value":1506},{"type":18,"tag":614,"props":2096,"children":2098},{"className":2097},[1019],[2099],{"type":18,"tag":614,"props":2100,"children":2102},{"className":2101},[889,890],[2103,2132],{"type":18,"tag":614,"props":2104,"children":2106},{"className":2105},[895],[2107,2127],{"type":18,"tag":614,"props":2108,"children":2110},{"className":2109,"style":1733},[900],[2111],{"type":18,"tag":614,"props":2112,"children":2113},{"style":1796},[2114,2118],{"type":18,"tag":614,"props":2115,"children":2117},{"className":2116,"style":1041},[910],[],{"type":18,"tag":614,"props":2119,"children":2121},{"className":2120},[1046,1047,870,1048],[2122],{"type":18,"tag":614,"props":2123,"children":2125},{"className":2124},[824,1003,1048],[2126],{"type":24,"value":1421},{"type":18,"tag":614,"props":2128,"children":2130},{"className":2129},[952],[2131],{"type":24,"value":955},{"type":18,"tag":614,"props":2133,"children":2135},{"className":2134},[895],[2136],{"type":18,"tag":614,"props":2137,"children":2139},{"className":2138,"style":1764},[900],[2140],{"type":18,"tag":614,"props":2141,"children":2142},{},[],{"type":18,"tag":614,"props":2144,"children":2146},{"className":2145},[971],[2147],{"type":24,"value":1586},{"type":18,"tag":19,"props":2149,"children":2150},{},[2151,2153,2255,2257,2360],{"type":24,"value":2152},"where ",{"type":18,"tag":614,"props":2154,"children":2156},{"className":2155},[671],[2157,2186],{"type":18,"tag":614,"props":2158,"children":2160},{"className":2159},[676],[2161],{"type":18,"tag":679,"props":2162,"children":2163},{"xmlns":681},[2164],{"type":18,"tag":685,"props":2165,"children":2166},{},[2167,2181],{"type":18,"tag":689,"props":2168,"children":2169},{},[2170],{"type":18,"tag":769,"props":2171,"children":2172},{},[2173,2177],{"type":18,"tag":693,"props":2174,"children":2175},{"mathvariant":695},[2176],{"type":24,"value":19},{"type":18,"tag":693,"props":2178,"children":2179},{},[2180],{"type":24,"value":1421},{"type":18,"tag":799,"props":2182,"children":2183},{"encoding":801},[2184],{"type":24,"value":2185},"\\mathbf{p}_i",{"type":18,"tag":614,"props":2187,"children":2189},{"className":2188,"ariaHidden":710},[808],[2190],{"type":18,"tag":614,"props":2191,"children":2193},{"className":2192},[813],[2194,2198],{"type":18,"tag":614,"props":2195,"children":2197},{"className":2196,"style":819},[818],[],{"type":18,"tag":614,"props":2199,"children":2201},{"className":2200},[824],[2202,2207],{"type":18,"tag":614,"props":2203,"children":2205},{"className":2204},[824,825],[2206],{"type":24,"value":19},{"type":18,"tag":614,"props":2208,"children":2210},{"className":2209},[1019],[2211],{"type":18,"tag":614,"props":2212,"children":2214},{"className":2213},[889,890],[2215,2244],{"type":18,"tag":614,"props":2216,"children":2218},{"className":2217},[895],[2219,2239],{"type":18,"tag":614,"props":2220,"children":2222},{"className":2221,"style":1733},[900],[2223],{"type":18,"tag":614,"props":2224,"children":2225},{"style":1796},[2226,2230],{"type":18,"tag":614,"props":2227,"children":2229},{"className":2228,"style":1041},[910],[],{"type":18,"tag":614,"props":2231,"children":2233},{"className":2232},[1046,1047,870,1048],[2234],{"type":18,"tag":614,"props":2235,"children":2237},{"className":2236},[824,1003,1048],[2238],{"type":24,"value":1421},{"type":18,"tag":614,"props":2240,"children":2242},{"className":2241},[952],[2243],{"type":24,"value":955},{"type":18,"tag":614,"props":2245,"children":2247},{"className":2246},[895],[2248],{"type":18,"tag":614,"props":2249,"children":2251},{"className":2250,"style":1764},[900],[2252],{"type":18,"tag":614,"props":2253,"children":2254},{},[],{"type":24,"value":2256}," is the rotor position relative to the center of mass and ",{"type":18,"tag":614,"props":2258,"children":2260},{"className":2259},[671],[2261,2290],{"type":18,"tag":614,"props":2262,"children":2264},{"className":2263},[676],[2265],{"type":18,"tag":679,"props":2266,"children":2267},{"xmlns":681},[2268],{"type":18,"tag":685,"props":2269,"children":2270},{},[2271,2285],{"type":18,"tag":689,"props":2272,"children":2273},{},[2274],{"type":18,"tag":769,"props":2275,"children":2276},{},[2277,2281],{"type":18,"tag":693,"props":2278,"children":2279},{"mathvariant":695},[2280],{"type":24,"value":1506},{"type":18,"tag":693,"props":2282,"children":2283},{},[2284],{"type":24,"value":1421},{"type":18,"tag":799,"props":2286,"children":2287},{"encoding":801},[2288],{"type":24,"value":2289},"\\mathbf{x}_i",{"type":18,"tag":614,"props":2291,"children":2293},{"className":2292,"ariaHidden":710},[808],[2294],{"type":18,"tag":614,"props":2295,"children":2297},{"className":2296},[813],[2298,2303],{"type":18,"tag":614,"props":2299,"children":2302},{"className":2300,"style":2301},[818],"height:0.5944em;vertical-align:-0.15em;",[],{"type":18,"tag":614,"props":2304,"children":2306},{"className":2305},[824],[2307,2312],{"type":18,"tag":614,"props":2308,"children":2310},{"className":2309},[824,825],[2311],{"type":24,"value":1506},{"type":18,"tag":614,"props":2313,"children":2315},{"className":2314},[1019],[2316],{"type":18,"tag":614,"props":2317,"children":2319},{"className":2318},[889,890],[2320,2349],{"type":18,"tag":614,"props":2321,"children":2323},{"className":2322},[895],[2324,2344],{"type":18,"tag":614,"props":2325,"children":2327},{"className":2326,"style":1733},[900],[2328],{"type":18,"tag":614,"props":2329,"children":2330},{"style":1796},[2331,2335],{"type":18,"tag":614,"props":2332,"children":2334},{"className":2333,"style":1041},[910],[],{"type":18,"tag":614,"props":2336,"children":2338},{"className":2337},[1046,1047,870,1048],[2339],{"type":18,"tag":614,"props":2340,"children":2342},{"className":2341},[824,1003,1048],[2343],{"type":24,"value":1421},{"type":18,"tag":614,"props":2345,"children":2347},{"className":2346},[952],[2348],{"type":24,"value":955},{"type":18,"tag":614,"props":2350,"children":2352},{"className":2351},[895],[2353],{"type":18,"tag":614,"props":2354,"children":2356},{"className":2355,"style":1764},[900],[2357],{"type":18,"tag":614,"props":2358,"children":2359},{},[],{"type":24,"value":2361}," is the rotor thrust-axis direction.",{"type":18,"tag":514,"props":2363,"children":2365},{"id":2364},"conventional-multirotor-vs-omnicopter",[2366],{"type":24,"value":2367},"🧩 Conventional multirotor vs. Omnicopter",{"type":18,"tag":248,"props":2369,"children":2370},{},[2371,2392],{"type":18,"tag":252,"props":2372,"children":2373},{},[2374],{"type":18,"tag":256,"props":2375,"children":2376},{},[2377,2382,2388],{"type":18,"tag":260,"props":2378,"children":2379},{},[2380],{"type":24,"value":2381},"Capability",{"type":18,"tag":260,"props":2383,"children":2385},{"align":2384},"right",[2386],{"type":24,"value":2387},"Conventional quad \u002F octocopter",{"type":18,"tag":260,"props":2389,"children":2390},{"align":2384},[2391],{"type":24,"value":660},{"type":18,"tag":271,"props":2393,"children":2394},{},[2395,2412,2429,2446,2462,2479,2497],{"type":18,"tag":256,"props":2396,"children":2397},{},[2398,2403,2408],{"type":18,"tag":278,"props":2399,"children":2400},{},[2401],{"type":24,"value":2402},"Move up\u002Fdown without tilting",{"type":18,"tag":278,"props":2404,"children":2405},{"align":2384},[2406],{"type":24,"value":2407},"✅",{"type":18,"tag":278,"props":2409,"children":2410},{"align":2384},[2411],{"type":24,"value":2407},{"type":18,"tag":256,"props":2413,"children":2414},{},[2415,2420,2425],{"type":18,"tag":278,"props":2416,"children":2417},{},[2418],{"type":24,"value":2419},"Move sideways without tilting",{"type":18,"tag":278,"props":2421,"children":2422},{"align":2384},[2423],{"type":24,"value":2424},"❌",{"type":18,"tag":278,"props":2426,"children":2427},{"align":2384},[2428],{"type":24,"value":2407},{"type":18,"tag":256,"props":2430,"children":2431},{},[2432,2437,2441],{"type":18,"tag":278,"props":2433,"children":2434},{},[2435],{"type":24,"value":2436},"Hover at arbitrary attitude",{"type":18,"tag":278,"props":2438,"children":2439},{"align":2384},[2440],{"type":24,"value":2424},{"type":18,"tag":278,"props":2442,"children":2443},{"align":2384},[2444],{"type":24,"value":2445},"✅, within actuator limits",{"type":18,"tag":256,"props":2447,"children":2448},{},[2449,2454,2458],{"type":18,"tag":278,"props":2450,"children":2451},{},[2452],{"type":24,"value":2453},"Independently command 3D force",{"type":18,"tag":278,"props":2455,"children":2456},{"align":2384},[2457],{"type":24,"value":2424},{"type":18,"tag":278,"props":2459,"children":2460},{"align":2384},[2461],{"type":24,"value":2407},{"type":18,"tag":256,"props":2463,"children":2464},{},[2465,2470,2475],{"type":18,"tag":278,"props":2466,"children":2467},{},[2468],{"type":24,"value":2469},"Independently command 3D torque",{"type":18,"tag":278,"props":2471,"children":2472},{"align":2384},[2473],{"type":24,"value":2474},"Mostly limited",{"type":18,"tag":278,"props":2476,"children":2477},{"align":2384},[2478],{"type":24,"value":2407},{"type":18,"tag":256,"props":2480,"children":2481},{},[2482,2487,2492],{"type":18,"tag":278,"props":2483,"children":2484},{},[2485],{"type":24,"value":2486},"Actuator redundancy for fault recovery",{"type":18,"tag":278,"props":2488,"children":2489},{"align":2384},[2490],{"type":24,"value":2491},"Limited",{"type":18,"tag":278,"props":2493,"children":2494},{"align":2384},[2495],{"type":24,"value":2496},"Stronger, depending on configuration",{"type":18,"tag":256,"props":2498,"children":2499},{},[2500,2505,2510],{"type":18,"tag":278,"props":2501,"children":2502},{},[2503],{"type":24,"value":2504},"Control difficulty",{"type":18,"tag":278,"props":2506,"children":2507},{"align":2384},[2508],{"type":24,"value":2509},"Medium",{"type":18,"tag":278,"props":2511,"children":2512},{"align":2384},[2513],{"type":24,"value":2514},"High",{"type":18,"tag":137,"props":2516,"children":2517},{},[],{"type":18,"tag":141,"props":2519,"children":2521},{"id":2520},"why-build-one",[2522],{"type":24,"value":2523},"💡 Why Build One?",{"type":18,"tag":19,"props":2525,"children":2526},{},[2527,2529,2534],{"type":24,"value":2528},"The design motivation is simple: ",{"type":18,"tag":153,"props":2530,"children":2531},{},[2532],{"type":24,"value":2533},"many aerial robotics tasks require force control, not just position control",{"type":24,"value":159},{"type":18,"tag":19,"props":2536,"children":2537},{},[2538],{"type":24,"value":2539},"Traditional multirotors are excellent for photography, mapping, inspection, and general flight. However, their under-actuation becomes a bottleneck when the vehicle needs to:",{"type":18,"tag":173,"props":2541,"children":2542},{},[2543,2548,2553,2558,2563],{"type":18,"tag":177,"props":2544,"children":2545},{},[2546],{"type":24,"value":2547},"🧱 interact physically with walls, ceilings, tools, or objects;",{"type":18,"tag":177,"props":2549,"children":2550},{},[2551],{"type":24,"value":2552},"🪛 apply force while maintaining a chosen attitude;",{"type":18,"tag":177,"props":2554,"children":2555},{},[2556],{"type":24,"value":2557},"🧭 fly through constrained spaces without pointing the whole body in the direction of motion;",{"type":18,"tag":177,"props":2559,"children":2560},{},[2561],{"type":24,"value":2562},"🧪 test advanced control allocation and fault-tolerant control algorithms;",{"type":18,"tag":177,"props":2564,"children":2565},{},[2566],{"type":24,"value":2567},"🛟 survive partial actuator degradation by redistributing control effort.",{"type":18,"tag":19,"props":2569,"children":2570},{},[2571,2573,2578],{"type":24,"value":2572},"For our project, the Omnicopter is valuable not because it is easy to fly, but because it is a ",{"type":18,"tag":153,"props":2574,"children":2575},{},[2576],{"type":24,"value":2577},"rich control problem",{"type":24,"value":2579},":",{"type":18,"tag":604,"props":2581,"children":2583},{"className":606,"code":2582,"language":24,"meta":8,"style":8},"Geometry design\n    ↓\n6D force\u002Ftorque map\n    ↓\nOptimal control allocation\n    ↓\nRobust tracking under uncertainty\n    ↓\nFault diagnosis and recovery\n",[2584],{"type":18,"tag":610,"props":2585,"children":2586},{"__ignoreMap":8},[2587,2595,2603,2611,2618,2627,2635,2644,2652],{"type":18,"tag":614,"props":2588,"children":2589},{"class":616,"line":617},[2590],{"type":18,"tag":614,"props":2591,"children":2592},{},[2593],{"type":24,"value":2594},"Geometry design\n",{"type":18,"tag":614,"props":2596,"children":2597},{"class":616,"line":626},[2598],{"type":18,"tag":614,"props":2599,"children":2600},{},[2601],{"type":24,"value":2602},"    ↓\n",{"type":18,"tag":614,"props":2604,"children":2605},{"class":616,"line":635},[2606],{"type":18,"tag":614,"props":2607,"children":2608},{},[2609],{"type":24,"value":2610},"6D force\u002Ftorque map\n",{"type":18,"tag":614,"props":2612,"children":2613},{"class":616,"line":644},[2614],{"type":18,"tag":614,"props":2615,"children":2616},{},[2617],{"type":24,"value":2602},{"type":18,"tag":614,"props":2619,"children":2621},{"class":616,"line":2620},5,[2622],{"type":18,"tag":614,"props":2623,"children":2624},{},[2625],{"type":24,"value":2626},"Optimal control allocation\n",{"type":18,"tag":614,"props":2628,"children":2630},{"class":616,"line":2629},6,[2631],{"type":18,"tag":614,"props":2632,"children":2633},{},[2634],{"type":24,"value":2602},{"type":18,"tag":614,"props":2636,"children":2638},{"class":616,"line":2637},7,[2639],{"type":18,"tag":614,"props":2640,"children":2641},{},[2642],{"type":24,"value":2643},"Robust tracking under uncertainty\n",{"type":18,"tag":614,"props":2645,"children":2647},{"class":616,"line":2646},8,[2648],{"type":18,"tag":614,"props":2649,"children":2650},{},[2651],{"type":24,"value":2602},{"type":18,"tag":614,"props":2653,"children":2655},{"class":616,"line":2654},9,[2656],{"type":18,"tag":614,"props":2657,"children":2658},{},[2659],{"type":24,"value":2660},"Fault diagnosis and recovery\n",{"type":18,"tag":137,"props":2662,"children":2663},{},[],{"type":18,"tag":141,"props":2665,"children":2667},{"id":2666},"implementation-path",[2668],{"type":24,"value":2669},"🧱 Implementation Path",{"type":18,"tag":19,"props":2671,"children":2672},{},[2673],{"type":24,"value":2674},"An Omnicopter can be implemented in several ways. Our project focuses on two useful reference families:",{"type":18,"tag":2676,"props":2677,"children":2678},"ol",{},[2679,2689],{"type":18,"tag":177,"props":2680,"children":2681},{},[2682,2687],{"type":18,"tag":153,"props":2683,"children":2684},{},[2685],{"type":24,"value":2686},"ETH-style cubic Omnicopter",{"type":24,"value":2688}," — an eight-rotor, fixed-pitch, reversible-propeller configuration.",{"type":18,"tag":177,"props":2690,"children":2691},{},[2692,2697],{"type":18,"tag":153,"props":2693,"children":2694},{},[2695],{"type":24,"value":2696},"Lynchpin-style tangential Omnicopter",{"type":24,"value":2698}," — a modular 6-DoF concept based on a geometric frame and tangential thrust logic.",{"type":18,"tag":137,"props":2700,"children":2701},{},[],{"type":18,"tag":141,"props":2703,"children":2705},{"id":2704},"eth-style-cubic-configuration",[2706],{"type":24,"value":2707},"🔷 ETH-style Cubic Configuration",{"type":18,"tag":19,"props":2709,"children":2710},{"align":21},[2711,2712],{"type":24,"value":25},{"type":18,"tag":27,"props":2713,"children":2716},{"src":2714,"alt":2715,"width":30},"assets\u002Feth_cube_geometry.svg","ETH-style cubic Omnicopter geometry",[],{"type":18,"tag":19,"props":2718,"children":2719},{},[2720,2722,2727],{"type":24,"value":2721},"The ETH-style Omnicopter is one of the most important reference designs for this project. It uses ",{"type":18,"tag":153,"props":2723,"children":2724},{},[2725],{"type":24,"value":2726},"eight fixed-pitch rotors",{"type":24,"value":2728}," mounted around a symmetric cube-like frame. The rotors are not all pointing in the same direction. Instead, their thrust axes are arranged so that the combined actuator set can generate force and torque in all three dimensions.",{"type":18,"tag":514,"props":2730,"children":2732},{"id":2731},"eth-design-logic",[2733],{"type":24,"value":2734},"🧠 ETH design logic",{"type":18,"tag":19,"props":2736,"children":2737},{},[2738],{"type":24,"value":2739},"The ETH configuration follows several key ideas:",{"type":18,"tag":248,"props":2741,"children":2742},{},[2743,2759],{"type":18,"tag":252,"props":2744,"children":2745},{},[2746],{"type":18,"tag":256,"props":2747,"children":2748},{},[2749,2754],{"type":18,"tag":260,"props":2750,"children":2751},{},[2752],{"type":24,"value":2753},"Design idea",{"type":18,"tag":260,"props":2755,"children":2756},{},[2757],{"type":24,"value":2758},"Why it matters",{"type":18,"tag":271,"props":2760,"children":2761},{},[2762,2775,2788,2801,2814],{"type":18,"tag":256,"props":2763,"children":2764},{},[2765,2770],{"type":18,"tag":278,"props":2766,"children":2767},{},[2768],{"type":24,"value":2769},"🧊 Symmetric 3D frame",{"type":18,"tag":278,"props":2771,"children":2772},{},[2773],{"type":24,"value":2774},"Makes the vehicle dynamics closer to orientation-invariant",{"type":18,"tag":256,"props":2776,"children":2777},{},[2778,2783],{"type":18,"tag":278,"props":2779,"children":2780},{},[2781],{"type":24,"value":2782},"🌀 Tilted thrust axes",{"type":18,"tag":278,"props":2784,"children":2785},{},[2786],{"type":24,"value":2787},"Allows force generation beyond the body vertical direction",{"type":18,"tag":256,"props":2789,"children":2790},{},[2791,2796],{"type":18,"tag":278,"props":2792,"children":2793},{},[2794],{"type":24,"value":2795},"🔁 Reversible motor-propeller actuators",{"type":18,"tag":278,"props":2797,"children":2798},{},[2799],{"type":24,"value":2800},"Allows positive and negative thrust along each rotor axis",{"type":18,"tag":256,"props":2802,"children":2803},{},[2804,2809],{"type":18,"tag":278,"props":2805,"children":2806},{},[2807],{"type":24,"value":2808},"🎛️ Over-actuation",{"type":18,"tag":278,"props":2810,"children":2811},{},[2812],{"type":24,"value":2813},"More actuators than 6D wrench dimensions creates redundancy",{"type":18,"tag":256,"props":2815,"children":2816},{},[2817,2822],{"type":18,"tag":278,"props":2818,"children":2819},{},[2820],{"type":24,"value":2821},"🧮 Control allocation",{"type":18,"tag":278,"props":2823,"children":2824},{},[2825],{"type":24,"value":2826},"Converts desired force\u002Ftorque into individual motor commands",{"type":18,"tag":514,"props":2828,"children":2830},{"id":2829},"advantages",[2831],{"type":24,"value":2832},"✅ Advantages",{"type":18,"tag":173,"props":2834,"children":2835},{},[2836,2841,2846,2851],{"type":18,"tag":177,"props":2837,"children":2838},{},[2839],{"type":24,"value":2840},"Strong theoretical foundation for 6-DoF force\u002Ftorque authority.",{"type":18,"tag":177,"props":2842,"children":2843},{},[2844],{"type":24,"value":2845},"Compatible with optimization-based allocation and null-space methods.",{"type":18,"tag":177,"props":2847,"children":2848},{},[2849],{"type":24,"value":2850},"Suitable for studying arbitrary-attitude hover and decoupled translation\u002Frotation.",{"type":18,"tag":177,"props":2852,"children":2853},{},[2854],{"type":24,"value":2855},"Closely connected to PX4 Omnicopter documentation and open-source implementation references.",{"type":18,"tag":514,"props":2857,"children":2859},{"id":2858},"️-practical-issues",[2860],{"type":24,"value":2861},"⚠️ Practical issues",{"type":18,"tag":173,"props":2863,"children":2864},{},[2865,2870,2875,2880],{"type":18,"tag":177,"props":2866,"children":2867},{},[2868],{"type":24,"value":2869},"Bidirectional propellers and ESC 3D mode need careful setup.",{"type":18,"tag":177,"props":2871,"children":2872},{},[2873],{"type":24,"value":2874},"Motor reversal is slower than same-direction thrust changes.",{"type":18,"tag":177,"props":2876,"children":2877},{},[2878],{"type":24,"value":2879},"Aerodynamic interference between nearby rotors can produce model mismatch.",{"type":18,"tag":177,"props":2881,"children":2882},{},[2883],{"type":24,"value":2884},"A pseudo-inverse allocator can command infeasible thrusts unless constraints are handled.",{"type":18,"tag":514,"props":2886,"children":2888},{"id":2887},"why-it-is-useful-for-us",[2889],{"type":24,"value":2890},"📌 Why it is useful for us",{"type":18,"tag":19,"props":2892,"children":2893},{},[2894],{"type":24,"value":2895},"The ETH configuration is a strong baseline for our research because it gives a clear mathematical structure:",{"type":18,"tag":604,"props":2897,"children":2899},{"className":606,"code":2898,"language":24,"meta":8,"style":8},"Desired position + attitude\n        ↓\nDesired 3D force + 3D torque\n        ↓\nAllocation matrix M\n        ↓\n8 reversible rotor thrust commands\n",[2900],{"type":18,"tag":610,"props":2901,"children":2902},{"__ignoreMap":8},[2903,2911,2919,2927,2934,2942,2949],{"type":18,"tag":614,"props":2904,"children":2905},{"class":616,"line":617},[2906],{"type":18,"tag":614,"props":2907,"children":2908},{},[2909],{"type":24,"value":2910},"Desired position + attitude\n",{"type":18,"tag":614,"props":2912,"children":2913},{"class":616,"line":626},[2914],{"type":18,"tag":614,"props":2915,"children":2916},{},[2917],{"type":24,"value":2918},"        ↓\n",{"type":18,"tag":614,"props":2920,"children":2921},{"class":616,"line":635},[2922],{"type":18,"tag":614,"props":2923,"children":2924},{},[2925],{"type":24,"value":2926},"Desired 3D force + 3D torque\n",{"type":18,"tag":614,"props":2928,"children":2929},{"class":616,"line":644},[2930],{"type":18,"tag":614,"props":2931,"children":2932},{},[2933],{"type":24,"value":2918},{"type":18,"tag":614,"props":2935,"children":2936},{"class":616,"line":2620},[2937],{"type":18,"tag":614,"props":2938,"children":2939},{},[2940],{"type":24,"value":2941},"Allocation matrix M\n",{"type":18,"tag":614,"props":2943,"children":2944},{"class":616,"line":2629},[2945],{"type":18,"tag":614,"props":2946,"children":2947},{},[2948],{"type":24,"value":2918},{"type":18,"tag":614,"props":2950,"children":2951},{"class":616,"line":2637},[2952],{"type":18,"tag":614,"props":2953,"children":2954},{},[2955],{"type":24,"value":2956},"8 reversible rotor thrust commands\n",{"type":18,"tag":19,"props":2958,"children":2959},{},[2960,2962,2967,2968,2973,2974,2979,2980,2985],{"type":24,"value":2961},"This is ideal for studying ",{"type":18,"tag":153,"props":2963,"children":2964},{},[2965],{"type":24,"value":2966},"optimal allocation",{"type":24,"value":224},{"type":18,"tag":153,"props":2969,"children":2970},{},[2971],{"type":24,"value":2972},"actuator saturation",{"type":24,"value":224},{"type":18,"tag":153,"props":2975,"children":2976},{},[2977],{"type":24,"value":2978},"null-space optimization",{"type":24,"value":231},{"type":18,"tag":153,"props":2981,"children":2982},{},[2983],{"type":24,"value":2984},"fault-tolerant reconfiguration",{"type":24,"value":159},{"type":18,"tag":137,"props":2987,"children":2988},{},[],{"type":18,"tag":141,"props":2990,"children":2992},{"id":2991},"lynchpin-style-tangential-configuration",[2993],{"type":24,"value":2994},"🟣 Lynchpin-style Tangential Configuration",{"type":18,"tag":19,"props":2996,"children":2997},{"align":21},[2998,2999],{"type":24,"value":25},{"type":18,"tag":27,"props":3000,"children":3003},{"src":3001,"alt":3002,"width":30},"assets\u002Flynchpin_geometry.svg","Lynchpin-style Omnicopter geometry",[],{"type":18,"tag":19,"props":3005,"children":3006},{},[3007,3009,3014,3016,3021],{"type":24,"value":3008},"The Lynchpin-style configuration is another useful reference because it approaches 6-DoF flight from a different geometric intuition. Instead of emphasizing a cube-like 8-rotor layout, it uses a ",{"type":18,"tag":153,"props":3010,"children":3011},{},[3012],{"type":24,"value":3013},"collapsed-dodecahedron-inspired modular frame",{"type":24,"value":3015}," and places motors\u002Fpropellers around the frame in a way that supports ",{"type":18,"tag":153,"props":3017,"children":3018},{},[3019],{"type":24,"value":3020},"tangential omnidirectional flight",{"type":24,"value":159},{"type":18,"tag":19,"props":3023,"children":3024},{},[3025],{"type":24,"value":3026},"The Lynchpin contest requirement can be summarized as:",{"type":18,"tag":205,"props":3028,"children":3029},{},[3030],{"type":18,"tag":19,"props":3031,"children":3032},{},[3033],{"type":24,"value":3034},"The drone should rotate into any orientation while maintaining position, and it should move in any direction regardless of its orientation.",{"type":18,"tag":514,"props":3036,"children":3038},{"id":3037},"lynchpin-design-logic",[3039],{"type":24,"value":3040},"🧠 Lynchpin design logic",{"type":18,"tag":248,"props":3042,"children":3043},{},[3044,3058],{"type":18,"tag":252,"props":3045,"children":3046},{},[3047],{"type":18,"tag":256,"props":3048,"children":3049},{},[3050,3054],{"type":18,"tag":260,"props":3051,"children":3052},{},[3053],{"type":24,"value":2753},{"type":18,"tag":260,"props":3055,"children":3056},{},[3057],{"type":24,"value":2758},{"type":18,"tag":271,"props":3059,"children":3060},{},[3061,3074,3087,3100],{"type":18,"tag":256,"props":3062,"children":3063},{},[3064,3069],{"type":18,"tag":278,"props":3065,"children":3066},{},[3067],{"type":24,"value":3068},"🧬 Modular geometry",{"type":18,"tag":278,"props":3070,"children":3071},{},[3072],{"type":24,"value":3073},"Supports repeated geometric units and possible multi-drone \u002F structure ideas",{"type":18,"tag":256,"props":3075,"children":3076},{},[3077,3082],{"type":18,"tag":278,"props":3078,"children":3079},{},[3080],{"type":24,"value":3081},"🧭 Tangential thrust layout",{"type":18,"tag":278,"props":3083,"children":3084},{},[3085],{"type":24,"value":3086},"Produces forces around a 3D shell rather than only along one body axis",{"type":18,"tag":256,"props":3088,"children":3089},{},[3090,3095],{"type":18,"tag":278,"props":3091,"children":3092},{},[3093],{"type":24,"value":3094},"🔄 Independent position and orientation control",{"type":18,"tag":278,"props":3096,"children":3097},{},[3098],{"type":24,"value":3099},"The pilot\u002Fcontroller should command position and attitude separately",{"type":18,"tag":256,"props":3101,"children":3102},{},[3103,3108],{"type":18,"tag":278,"props":3104,"children":3105},{},[3106],{"type":24,"value":3107},"🛠️ Hobby-grade feasibility",{"type":18,"tag":278,"props":3109,"children":3110},{},[3111],{"type":24,"value":3112},"Demonstrations have used common multirotor components and open autopilot stacks",{"type":18,"tag":514,"props":3114,"children":3116},{"id":3115},"advantages-compared-to-eth-style",[3117],{"type":24,"value":3118},"✅ Advantages (compared to ETH-style)",{"type":18,"tag":173,"props":3120,"children":3121},{},[3122,3127,3132,3137],{"type":18,"tag":177,"props":3123,"children":3124},{},[3125],{"type":24,"value":3126},"Attractive geometry for modular aerial robotics.",{"type":18,"tag":177,"props":3128,"children":3129},{},[3130],{"type":24,"value":3131},"Potentially fewer propulsion units than an 8-rotor cubic configuration.",{"type":18,"tag":177,"props":3133,"children":3134},{},[3135],{"type":24,"value":3136},"Good conceptual reference for arbitrary-attitude motion.",{"type":18,"tag":177,"props":3138,"children":3139},{},[3140],{"type":24,"value":3141},"Useful for comparing how geometry affects allocation conditioning and fault tolerance.",{"type":18,"tag":514,"props":3143,"children":3145},{"id":3144},"️-practical-issues-compared-to-eth-style",[3146],{"type":24,"value":3147},"⚠️ Practical issues (compared to ETH-style)",{"type":18,"tag":173,"props":3149,"children":3150},{},[3151,3156,3161,3166],{"type":18,"tag":177,"props":3152,"children":3153},{},[3154],{"type":24,"value":3155},"Less standardized than the ETH\u002FPX4-style reference design.",{"type":18,"tag":177,"props":3157,"children":3158},{},[3159],{"type":24,"value":3160},"Geometry and actuator directions must be modelled very carefully.",{"type":18,"tag":177,"props":3162,"children":3163},{},[3164],{"type":24,"value":3165},"Fewer actuators may reduce redundancy for fault-tolerant allocation.",{"type":18,"tag":177,"props":3167,"children":3168},{},[3169],{"type":24,"value":3170},"The controller must still handle bidirectional thrust, actuator limits, and motor dynamics.",{"type":18,"tag":514,"props":3172,"children":3174},{"id":3173},"why-the-lynchpin-style-config-is-useful-for-us",[3175],{"type":24,"value":3176},"📌 Why the Lynchpin-style config is useful for us",{"type":18,"tag":19,"props":3178,"children":3179},{},[3180,3182,3187],{"type":24,"value":3181},"The Lynchpin-style configuration is useful as a ",{"type":18,"tag":153,"props":3183,"children":3184},{},[3185],{"type":24,"value":3186},"comparison case",{"type":24,"value":2579},{"type":18,"tag":604,"props":3189,"children":3191},{"className":606,"code":3190,"language":24,"meta":8,"style":8},"ETH-style:      symmetry + 8 rotors + allocation redundancy\nLynchpin-style: modular geometry + tangential logic + compact 6-DoF concept\n",[3192],{"type":18,"tag":610,"props":3193,"children":3194},{"__ignoreMap":8},[3195,3203],{"type":18,"tag":614,"props":3196,"children":3197},{"class":616,"line":617},[3198],{"type":18,"tag":614,"props":3199,"children":3200},{},[3201],{"type":24,"value":3202},"ETH-style:      symmetry + 8 rotors + allocation redundancy\n",{"type":18,"tag":614,"props":3204,"children":3205},{"class":616,"line":626},[3206],{"type":18,"tag":614,"props":3207,"children":3208},{},[3209],{"type":24,"value":3210},"Lynchpin-style: modular geometry + tangential logic + compact 6-DoF concept\n",{"type":18,"tag":19,"props":3212,"children":3213},{},[3214],{"type":24,"value":3215},"By comparing both, we can ask research questions such as:",{"type":18,"tag":173,"props":3217,"children":3218},{},[3219,3224,3229,3234],{"type":18,"tag":177,"props":3220,"children":3221},{},[3222],{"type":24,"value":3223},"Which geometry gives better force\u002Ftorque isotropy?",{"type":18,"tag":177,"props":3225,"children":3226},{},[3227],{"type":24,"value":3228},"Which configuration gives a better-conditioned allocation matrix?",{"type":18,"tag":177,"props":3230,"children":3231},{},[3232],{"type":24,"value":3233},"How much actuator redundancy is needed for safe fault recovery?",{"type":18,"tag":177,"props":3235,"children":3236},{},[3237],{"type":24,"value":3238},"Which design is more efficient for arbitrary-attitude hovering?",{"type":18,"tag":137,"props":3240,"children":3241},{},[],{"type":18,"tag":141,"props":3243,"children":3245},{"id":3244},"️-our-hardware-progress",[3246],{"type":24,"value":3247},"🛠️ Our Hardware Progress",{"type":18,"tag":19,"props":3249,"children":3250},{},[3251],{"type":24,"value":3252},"We have already constructed a complete Omnicopter hardware platform and performed initial tests. This platform is intended to serve as the physical testbed for the control research in this repository.",{"type":18,"tag":514,"props":3254,"children":3256},{"id":3255},"current-progress",[3257],{"type":24,"value":3258},"✅ Current progress",{"type":18,"tag":173,"props":3260,"children":3263},{"className":3261},[3262],"contains-task-list",[3264,3276,3285,3294,3303,3312,3321,3330,3339,3348,3357],{"type":18,"tag":177,"props":3265,"children":3268},{"className":3266},[3267],"task-list-item",[3269,3274],{"type":18,"tag":3270,"props":3271,"children":3273},"input",{"checked":568,"disabled":568,"type":3272},"checkbox",[],{"type":24,"value":3275}," Reviewed ETH Omnicopter and Lynchpin-style design references.",{"type":18,"tag":177,"props":3277,"children":3279},{"className":3278},[3267],[3280,3283],{"type":18,"tag":3270,"props":3281,"children":3282},{"checked":568,"disabled":568,"type":3272},[],{"type":24,"value":3284}," Selected a feasible Omnicopter hardware configuration for research use.",{"type":18,"tag":177,"props":3286,"children":3288},{"className":3287},[3267],[3289,3292],{"type":18,"tag":3270,"props":3290,"children":3291},{"checked":568,"disabled":568,"type":3272},[],{"type":24,"value":3293}," Built a complete Omnicopter hardware platform.",{"type":18,"tag":177,"props":3295,"children":3297},{"className":3296},[3267],[3298,3301],{"type":18,"tag":3270,"props":3299,"children":3300},{"checked":568,"disabled":568,"type":3272},[],{"type":24,"value":3302}," Performed initial hardware-level tests.",{"type":18,"tag":177,"props":3304,"children":3306},{"className":3305},[3267],[3307,3310],{"type":18,"tag":3270,"props":3308,"children":3309},{"checked":568,"disabled":568,"type":3272},[],{"type":24,"value":3311}," Prepared the platform for control-oriented experiments.",{"type":18,"tag":177,"props":3313,"children":3315},{"className":3314},[3267],[3316,3319],{"type":18,"tag":3270,"props":3317,"children":3318},{"disabled":568,"type":3272},[],{"type":24,"value":3320}," Identify or refine the thrust\u002Ftorque allocation matrix.",{"type":18,"tag":177,"props":3322,"children":3324},{"className":3323},[3267],[3325,3328],{"type":18,"tag":3270,"props":3326,"children":3327},{"disabled":568,"type":3272},[],{"type":24,"value":3329}," Build a simulation model for controller validation.",{"type":18,"tag":177,"props":3331,"children":3333},{"className":3332},[3267],[3334,3337],{"type":18,"tag":3270,"props":3335,"children":3336},{"disabled":568,"type":3272},[],{"type":24,"value":3338}," Implement constrained optimal allocation.",{"type":18,"tag":177,"props":3340,"children":3342},{"className":3341},[3267],[3343,3346],{"type":18,"tag":3270,"props":3344,"children":3345},{"disabled":568,"type":3272},[],{"type":24,"value":3347}," Add robust tracking controller.",{"type":18,"tag":177,"props":3349,"children":3351},{"className":3350},[3267],[3352,3355],{"type":18,"tag":3270,"props":3353,"children":3354},{"disabled":568,"type":3272},[],{"type":24,"value":3356}," Add fault diagnosis and fault-tolerant reallocation.",{"type":18,"tag":177,"props":3358,"children":3360},{"className":3359},[3267],[3361,3364],{"type":18,"tag":3270,"props":3362,"children":3363},{"disabled":568,"type":3272},[],{"type":24,"value":3365}," Validate with repeatable flight experiments.",{"type":18,"tag":514,"props":3367,"children":3369},{"id":3368},"hardware-test-evidence-to-add",[3370],{"type":24,"value":3371},"🧪 Hardware test evidence to add",{"type":18,"tag":248,"props":3373,"children":3374},{},[3375,3396],{"type":18,"tag":252,"props":3376,"children":3377},{},[3378],{"type":18,"tag":256,"props":3379,"children":3380},{},[3381,3386,3391],{"type":18,"tag":260,"props":3382,"children":3383},{},[3384],{"type":24,"value":3385},"Evidence",{"type":18,"tag":260,"props":3387,"children":3388},{},[3389],{"type":24,"value":3390},"Suggested file path",{"type":18,"tag":260,"props":3392,"children":3393},{},[3394],{"type":24,"value":3395},"README insertion",{"type":18,"tag":271,"props":3397,"children":3398},{},[3399,3420,3442,3464,3486,3508],{"type":18,"tag":256,"props":3400,"children":3401},{},[3402,3407,3415],{"type":18,"tag":278,"props":3403,"children":3404},{},[3405],{"type":24,"value":3406},"Prototype overview photo",{"type":18,"tag":278,"props":3408,"children":3409},{},[3410],{"type":18,"tag":610,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":24,"value":541},{"type":18,"tag":278,"props":3416,"children":3417},{},[3418],{"type":24,"value":3419},"Replace the placeholder in the media section",{"type":18,"tag":256,"props":3421,"children":3422},{},[3423,3428,3437],{"type":18,"tag":278,"props":3424,"children":3425},{},[3426],{"type":24,"value":3427},"Wiring \u002F ESC close-up",{"type":18,"tag":278,"props":3429,"children":3430},{},[3431],{"type":18,"tag":610,"props":3432,"children":3434},{"className":3433},[],[3435],{"type":24,"value":3436},"assets\u002Fwiring_closeup.jpg",{"type":18,"tag":278,"props":3438,"children":3439},{},[3440],{"type":24,"value":3441},"Add below this table",{"type":18,"tag":256,"props":3443,"children":3444},{},[3445,3450,3459],{"type":18,"tag":278,"props":3446,"children":3447},{},[3448],{"type":24,"value":3449},"Motor direction test",{"type":18,"tag":278,"props":3451,"children":3452},{},[3453],{"type":18,"tag":610,"props":3454,"children":3456},{"className":3455},[],[3457],{"type":24,"value":3458},"assets\u002Fmotor_test_thumbnail.jpg",{"type":18,"tag":278,"props":3460,"children":3461},{},[3462],{"type":24,"value":3463},"Link to video attachment or YouTube",{"type":18,"tag":256,"props":3465,"children":3466},{},[3467,3472,3481],{"type":18,"tag":278,"props":3468,"children":3469},{},[3470],{"type":24,"value":3471},"Bench thrust test plot",{"type":18,"tag":278,"props":3473,"children":3474},{},[3475],{"type":18,"tag":610,"props":3476,"children":3478},{"className":3477},[],[3479],{"type":24,"value":3480},"assets\u002Fthrust_test_plot.png",{"type":18,"tag":278,"props":3482,"children":3483},{},[3484],{"type":24,"value":3485},"Add in the modeling section",{"type":18,"tag":256,"props":3487,"children":3488},{},[3489,3494,3503],{"type":18,"tag":278,"props":3490,"children":3491},{},[3492],{"type":24,"value":3493},"Tethered flight video",{"type":18,"tag":278,"props":3495,"children":3496},{},[3497],{"type":18,"tag":610,"props":3498,"children":3500},{"className":3499},[],[3501],{"type":24,"value":3502},"assets\u002Ftethered_test_thumbnail.jpg",{"type":18,"tag":278,"props":3504,"children":3505},{},[3506],{"type":24,"value":3507},"Link to GitHub user-attachment video",{"type":18,"tag":256,"props":3509,"children":3510},{},[3511,3516,3525],{"type":18,"tag":278,"props":3512,"children":3513},{},[3514],{"type":24,"value":3515},"Flight log plot",{"type":18,"tag":278,"props":3517,"children":3518},{},[3519],{"type":18,"tag":610,"props":3520,"children":3522},{"className":3521},[],[3523],{"type":24,"value":3524},"assets\u002Flog_position_attitude.png",{"type":18,"tag":278,"props":3526,"children":3527},{},[3528],{"type":24,"value":3529},"Add in the experiment section",{"type":18,"tag":137,"props":3531,"children":3532},{},[],{"type":18,"tag":141,"props":3534,"children":3536},{"id":3535},"modeling-foundation",[3537],{"type":24,"value":3538},"🧮 Modeling Foundation",{"type":18,"tag":19,"props":3540,"children":3541},{},[3542,3544,3549,3551,3593],{"type":24,"value":3543},"The Omnicopter can be modelled as a rigid body with six controllable degrees of freedom. The key object is the ",{"type":18,"tag":153,"props":3545,"children":3546},{},[3547],{"type":24,"value":3548},"allocation matrix",{"type":24,"value":3550}," ",{"type":18,"tag":614,"props":3552,"children":3554},{"className":3553},[671],[3555,3576],{"type":18,"tag":614,"props":3556,"children":3558},{"className":3557},[676],[3559],{"type":18,"tag":679,"props":3560,"children":3561},{"xmlns":681},[3562],{"type":18,"tag":685,"props":3563,"children":3564},{},[3565,3572],{"type":18,"tag":689,"props":3566,"children":3567},{},[3568],{"type":18,"tag":693,"props":3569,"children":3570},{},[3571],{"type":24,"value":767},{"type":18,"tag":799,"props":3573,"children":3574},{"encoding":801},[3575],{"type":24,"value":767},{"type":18,"tag":614,"props":3577,"children":3579},{"className":3578,"ariaHidden":710},[808],[3580],{"type":18,"tag":614,"props":3581,"children":3583},{"className":3582},[813],[3584,3588],{"type":18,"tag":614,"props":3585,"children":3587},{"className":3586,"style":1386},[818],[],{"type":18,"tag":614,"props":3589,"children":3591},{"className":3590,"style":1004},[824,1003],[3592],{"type":24,"value":767},{"type":24,"value":2579},{"type":18,"tag":614,"props":3595,"children":3597},{"className":3596},[666],[3598],{"type":18,"tag":614,"props":3599,"children":3601},{"className":3600},[671],[3602,3673],{"type":18,"tag":614,"props":3603,"children":3605},{"className":3604},[676],[3606],{"type":18,"tag":679,"props":3607,"children":3608},{"xmlns":681,"display":682},[3609],{"type":18,"tag":685,"props":3610,"children":3611},{},[3612,3668],{"type":18,"tag":689,"props":3613,"children":3614},{},[3615,3655,3659,3663],{"type":18,"tag":689,"props":3616,"children":3617},{},[3618,3622,3651],{"type":18,"tag":700,"props":3619,"children":3620},{"fence":710},[3621],{"type":24,"value":713},{"type":18,"tag":715,"props":3623,"children":3624},{"rowspacing":717,"columnalign":21,"columnspacing":718},[3625,3638],{"type":18,"tag":721,"props":3626,"children":3627},{},[3628],{"type":18,"tag":725,"props":3629,"children":3630},{},[3631],{"type":18,"tag":729,"props":3632,"children":3633},{"scriptlevel":731,"displaystyle":732},[3634],{"type":18,"tag":693,"props":3635,"children":3636},{"mathvariant":695},[3637],{"type":24,"value":738},{"type":18,"tag":721,"props":3639,"children":3640},{},[3641],{"type":18,"tag":725,"props":3642,"children":3643},{},[3644],{"type":18,"tag":729,"props":3645,"children":3646},{"scriptlevel":731,"displaystyle":732},[3647],{"type":18,"tag":693,"props":3648,"children":3649},{"mathvariant":750},[3650],{"type":24,"value":753},{"type":18,"tag":700,"props":3652,"children":3653},{"fence":710},[3654],{"type":24,"value":758},{"type":18,"tag":700,"props":3656,"children":3657},{},[3658],{"type":24,"value":704},{"type":18,"tag":693,"props":3660,"children":3661},{},[3662],{"type":24,"value":767},{"type":18,"tag":693,"props":3664,"children":3665},{"mathvariant":695},[3666],{"type":24,"value":3667},"u",{"type":18,"tag":799,"props":3669,"children":3670},{"encoding":801},[3671],{"type":24,"value":3672},"\\begin{bmatrix}\n\\mathbf{F} \\\\\n\\boldsymbol{\\tau}\n\\end{bmatrix}\n= M\\mathbf{u}",{"type":18,"tag":614,"props":3674,"children":3676},{"className":3675,"ariaHidden":710},[808],[3677,3800],{"type":18,"tag":614,"props":3678,"children":3680},{"className":3679},[813],[3681,3685,3787,3791,3796],{"type":18,"tag":614,"props":3682,"children":3684},{"className":3683,"style":852},[818],[],{"type":18,"tag":614,"props":3686,"children":3688},{"className":3687},[857],[3689,3698,3778],{"type":18,"tag":614,"props":3690,"children":3692},{"className":3691,"style":864},[862,863],[3693],{"type":18,"tag":614,"props":3694,"children":3696},{"className":3695},[869,870],[3697],{"type":24,"value":713},{"type":18,"tag":614,"props":3699,"children":3701},{"className":3700},[824],[3702],{"type":18,"tag":614,"props":3703,"children":3705},{"className":3704},[715],[3706],{"type":18,"tag":614,"props":3707,"children":3709},{"className":3708},[884],[3710],{"type":18,"tag":614,"props":3711,"children":3713},{"className":3712},[889,890],[3714,3767],{"type":18,"tag":614,"props":3715,"children":3717},{"className":3716},[895],[3718,3762],{"type":18,"tag":614,"props":3719,"children":3721},{"className":3720,"style":901},[900],[3722,3738],{"type":18,"tag":614,"props":3723,"children":3724},{"style":905},[3725,3729],{"type":18,"tag":614,"props":3726,"children":3728},{"className":3727,"style":911},[910],[],{"type":18,"tag":614,"props":3730,"children":3732},{"className":3731},[824],[3733],{"type":18,"tag":614,"props":3734,"children":3736},{"className":3735},[824,825],[3737],{"type":24,"value":738},{"type":18,"tag":614,"props":3739,"children":3740},{"style":924},[3741,3745],{"type":18,"tag":614,"props":3742,"children":3744},{"className":3743,"style":911},[910],[],{"type":18,"tag":614,"props":3746,"children":3748},{"className":3747},[824],[3749],{"type":18,"tag":614,"props":3750,"children":3752},{"className":3751},[824],[3753],{"type":18,"tag":614,"props":3754,"children":3756},{"className":3755},[824],[3757],{"type":18,"tag":614,"props":3758,"children":3760},{"className":3759,"style":946},[824,945],[3761],{"type":24,"value":753},{"type":18,"tag":614,"props":3763,"children":3765},{"className":3764},[952],[3766],{"type":24,"value":955},{"type":18,"tag":614,"props":3768,"children":3770},{"className":3769},[895],[3771],{"type":18,"tag":614,"props":3772,"children":3774},{"className":3773,"style":963},[900],[3775],{"type":18,"tag":614,"props":3776,"children":3777},{},[],{"type":18,"tag":614,"props":3779,"children":3781},{"className":3780,"style":864},[971,863],[3782],{"type":18,"tag":614,"props":3783,"children":3785},{"className":3784},[869,870],[3786],{"type":24,"value":758},{"type":18,"tag":614,"props":3788,"children":3790},{"className":3789,"style":833},[832],[],{"type":18,"tag":614,"props":3792,"children":3794},{"className":3793},[838],[3795],{"type":24,"value":704},{"type":18,"tag":614,"props":3797,"children":3799},{"className":3798,"style":833},[832],[],{"type":18,"tag":614,"props":3801,"children":3803},{"className":3802},[813],[3804,3808,3813],{"type":18,"tag":614,"props":3805,"children":3807},{"className":3806,"style":1386},[818],[],{"type":18,"tag":614,"props":3809,"children":3811},{"className":3810,"style":1004},[824,1003],[3812],{"type":24,"value":767},{"type":18,"tag":614,"props":3814,"children":3816},{"className":3815},[824,825],[3817],{"type":24,"value":3667},{"type":18,"tag":19,"props":3819,"children":3820},{},[3821,3822,3865],{"type":24,"value":2152},{"type":18,"tag":614,"props":3823,"children":3825},{"className":3824},[671],[3826,3848],{"type":18,"tag":614,"props":3827,"children":3829},{"className":3828},[676],[3830],{"type":18,"tag":679,"props":3831,"children":3832},{"xmlns":681},[3833],{"type":18,"tag":685,"props":3834,"children":3835},{},[3836,3843],{"type":18,"tag":689,"props":3837,"children":3838},{},[3839],{"type":18,"tag":693,"props":3840,"children":3841},{"mathvariant":695},[3842],{"type":24,"value":3667},{"type":18,"tag":799,"props":3844,"children":3845},{"encoding":801},[3846],{"type":24,"value":3847},"\\mathbf{u}",{"type":18,"tag":614,"props":3849,"children":3851},{"className":3850,"ariaHidden":710},[808],[3852],{"type":18,"tag":614,"props":3853,"children":3855},{"className":3854},[813],[3856,3860],{"type":18,"tag":614,"props":3857,"children":3859},{"className":3858,"style":1189},[818],[],{"type":18,"tag":614,"props":3861,"children":3863},{"className":3862},[824,825],[3864],{"type":24,"value":3667},{"type":24,"value":3866}," represents individual actuator thrust commands.",{"type":18,"tag":514,"props":3868,"children":3870},{"id":3869},"what-we-need-to-identify",[3871],{"type":24,"value":3872},"🔍 What we need to identify",{"type":18,"tag":248,"props":3874,"children":3875},{},[3876,3892],{"type":18,"tag":252,"props":3877,"children":3878},{},[3879],{"type":18,"tag":256,"props":3880,"children":3881},{},[3882,3887],{"type":18,"tag":260,"props":3883,"children":3884},{},[3885],{"type":24,"value":3886},"Model item",{"type":18,"tag":260,"props":3888,"children":3889},{},[3890],{"type":24,"value":3891},"Why we need it",{"type":18,"tag":271,"props":3893,"children":3894},{},[3895,4009,4123,4136,4149,4162,4175,4188],{"type":18,"tag":256,"props":3896,"children":3897},{},[3898,4004],{"type":18,"tag":278,"props":3899,"children":3900},{},[3901,3903],{"type":24,"value":3902},"Rotor position",{"type":18,"tag":614,"props":3904,"children":3906},{"className":3905},[671],[3907,3935],{"type":18,"tag":614,"props":3908,"children":3910},{"className":3909},[676],[3911],{"type":18,"tag":679,"props":3912,"children":3913},{"xmlns":681},[3914],{"type":18,"tag":685,"props":3915,"children":3916},{},[3917,3931],{"type":18,"tag":689,"props":3918,"children":3919},{},[3920],{"type":18,"tag":769,"props":3921,"children":3922},{},[3923,3927],{"type":18,"tag":693,"props":3924,"children":3925},{"mathvariant":695},[3926],{"type":24,"value":19},{"type":18,"tag":693,"props":3928,"children":3929},{},[3930],{"type":24,"value":1421},{"type":18,"tag":799,"props":3932,"children":3933},{"encoding":801},[3934],{"type":24,"value":2185},{"type":18,"tag":614,"props":3936,"children":3938},{"className":3937,"ariaHidden":710},[808],[3939],{"type":18,"tag":614,"props":3940,"children":3942},{"className":3941},[813],[3943,3947],{"type":18,"tag":614,"props":3944,"children":3946},{"className":3945,"style":819},[818],[],{"type":18,"tag":614,"props":3948,"children":3950},{"className":3949},[824],[3951,3956],{"type":18,"tag":614,"props":3952,"children":3954},{"className":3953},[824,825],[3955],{"type":24,"value":19},{"type":18,"tag":614,"props":3957,"children":3959},{"className":3958},[1019],[3960],{"type":18,"tag":614,"props":3961,"children":3963},{"className":3962},[889,890],[3964,3993],{"type":18,"tag":614,"props":3965,"children":3967},{"className":3966},[895],[3968,3988],{"type":18,"tag":614,"props":3969,"children":3971},{"className":3970,"style":1733},[900],[3972],{"type":18,"tag":614,"props":3973,"children":3974},{"style":1796},[3975,3979],{"type":18,"tag":614,"props":3976,"children":3978},{"className":3977,"style":1041},[910],[],{"type":18,"tag":614,"props":3980,"children":3982},{"className":3981},[1046,1047,870,1048],[3983],{"type":18,"tag":614,"props":3984,"children":3986},{"className":3985},[824,1003,1048],[3987],{"type":24,"value":1421},{"type":18,"tag":614,"props":3989,"children":3991},{"className":3990},[952],[3992],{"type":24,"value":955},{"type":18,"tag":614,"props":3994,"children":3996},{"className":3995},[895],[3997],{"type":18,"tag":614,"props":3998,"children":4000},{"className":3999,"style":1764},[900],[4001],{"type":18,"tag":614,"props":4002,"children":4003},{},[],{"type":18,"tag":278,"props":4005,"children":4006},{},[4007],{"type":24,"value":4008},"Determines torque from off-center thrust",{"type":18,"tag":256,"props":4010,"children":4011},{},[4012,4118],{"type":18,"tag":278,"props":4013,"children":4014},{},[4015,4017],{"type":24,"value":4016},"Rotor axis",{"type":18,"tag":614,"props":4018,"children":4020},{"className":4019},[671],[4021,4049],{"type":18,"tag":614,"props":4022,"children":4024},{"className":4023},[676],[4025],{"type":18,"tag":679,"props":4026,"children":4027},{"xmlns":681},[4028],{"type":18,"tag":685,"props":4029,"children":4030},{},[4031,4045],{"type":18,"tag":689,"props":4032,"children":4033},{},[4034],{"type":18,"tag":769,"props":4035,"children":4036},{},[4037,4041],{"type":18,"tag":693,"props":4038,"children":4039},{"mathvariant":695},[4040],{"type":24,"value":1506},{"type":18,"tag":693,"props":4042,"children":4043},{},[4044],{"type":24,"value":1421},{"type":18,"tag":799,"props":4046,"children":4047},{"encoding":801},[4048],{"type":24,"value":2289},{"type":18,"tag":614,"props":4050,"children":4052},{"className":4051,"ariaHidden":710},[808],[4053],{"type":18,"tag":614,"props":4054,"children":4056},{"className":4055},[813],[4057,4061],{"type":18,"tag":614,"props":4058,"children":4060},{"className":4059,"style":2301},[818],[],{"type":18,"tag":614,"props":4062,"children":4064},{"className":4063},[824],[4065,4070],{"type":18,"tag":614,"props":4066,"children":4068},{"className":4067},[824,825],[4069],{"type":24,"value":1506},{"type":18,"tag":614,"props":4071,"children":4073},{"className":4072},[1019],[4074],{"type":18,"tag":614,"props":4075,"children":4077},{"className":4076},[889,890],[4078,4107],{"type":18,"tag":614,"props":4079,"children":4081},{"className":4080},[895],[4082,4102],{"type":18,"tag":614,"props":4083,"children":4085},{"className":4084,"style":1733},[900],[4086],{"type":18,"tag":614,"props":4087,"children":4088},{"style":1796},[4089,4093],{"type":18,"tag":614,"props":4090,"children":4092},{"className":4091,"style":1041},[910],[],{"type":18,"tag":614,"props":4094,"children":4096},{"className":4095},[1046,1047,870,1048],[4097],{"type":18,"tag":614,"props":4098,"children":4100},{"className":4099},[824,1003,1048],[4101],{"type":24,"value":1421},{"type":18,"tag":614,"props":4103,"children":4105},{"className":4104},[952],[4106],{"type":24,"value":955},{"type":18,"tag":614,"props":4108,"children":4110},{"className":4109},[895],[4111],{"type":18,"tag":614,"props":4112,"children":4114},{"className":4113,"style":1764},[900],[4115],{"type":18,"tag":614,"props":4116,"children":4117},{},[],{"type":18,"tag":278,"props":4119,"children":4120},{},[4121],{"type":24,"value":4122},"Determines the direction of generated force",{"type":18,"tag":256,"props":4124,"children":4125},{},[4126,4131],{"type":18,"tag":278,"props":4127,"children":4128},{},[4129],{"type":24,"value":4130},"Thrust coefficient",{"type":18,"tag":278,"props":4132,"children":4133},{},[4134],{"type":24,"value":4135},"Maps command \u002F RPM to thrust",{"type":18,"tag":256,"props":4137,"children":4138},{},[4139,4144],{"type":18,"tag":278,"props":4140,"children":4141},{},[4142],{"type":24,"value":4143},"Drag torque coefficient",{"type":18,"tag":278,"props":4145,"children":4146},{},[4147],{"type":24,"value":4148},"Improves yaw and torque prediction",{"type":18,"tag":256,"props":4150,"children":4151},{},[4152,4157],{"type":18,"tag":278,"props":4153,"children":4154},{},[4155],{"type":24,"value":4156},"Motor reversal delay",{"type":18,"tag":278,"props":4158,"children":4159},{},[4160],{"type":24,"value":4161},"Important for bidirectional thrust allocation",{"type":18,"tag":256,"props":4163,"children":4164},{},[4165,4170],{"type":18,"tag":278,"props":4166,"children":4167},{},[4168],{"type":24,"value":4169},"Saturation limits",{"type":18,"tag":278,"props":4171,"children":4172},{},[4173],{"type":24,"value":4174},"Required for feasible optimal control",{"type":18,"tag":256,"props":4176,"children":4177},{},[4178,4183],{"type":18,"tag":278,"props":4179,"children":4180},{},[4181],{"type":24,"value":4182},"Rate limits",{"type":18,"tag":278,"props":4184,"children":4185},{},[4186],{"type":24,"value":4187},"Prevents unrealistic thrust changes",{"type":18,"tag":256,"props":4189,"children":4190},{},[4191,4196],{"type":18,"tag":278,"props":4192,"children":4193},{},[4194],{"type":24,"value":4195},"Aerodynamic interference",{"type":18,"tag":278,"props":4197,"children":4198},{},[4199],{"type":24,"value":4200},"Important for robust control and compensation",{"type":18,"tag":514,"props":4202,"children":4204},{"id":4203},"suggested-identification-workflow",[4205],{"type":24,"value":4206},"🧪 Suggested identification workflow",{"type":18,"tag":604,"props":4208,"children":4210},{"className":606,"code":4209,"language":24,"meta":8,"style":8},"1. Measure geometry\n   p_i, x_i, center of mass, frame axes\n\n2. Static actuator calibration\n   command -> thrust, command -> current, command -> RPM\n\n3. Dynamic actuator calibration\n   thrust step response, reversal delay, rate limit\n\n4. Build initial allocation matrix\n   y = M u\n\n5. Validate against IMU \u002F motion capture \u002F log data\n   predicted acceleration vs measured acceleration\n\n6. Update model\n   add bias, scaling, saturation, coupling, disturbance terms\n",[4211],{"type":18,"tag":610,"props":4212,"children":4213},{"__ignoreMap":8},[4214,4222,4230,4238,4246,4254,4261,4269,4277,4284,4293,4302,4310,4319,4328,4336,4345],{"type":18,"tag":614,"props":4215,"children":4216},{"class":616,"line":617},[4217],{"type":18,"tag":614,"props":4218,"children":4219},{},[4220],{"type":24,"value":4221},"1. Measure geometry\n",{"type":18,"tag":614,"props":4223,"children":4224},{"class":616,"line":626},[4225],{"type":18,"tag":614,"props":4226,"children":4227},{},[4228],{"type":24,"value":4229},"   p_i, x_i, center of mass, frame axes\n",{"type":18,"tag":614,"props":4231,"children":4232},{"class":616,"line":635},[4233],{"type":18,"tag":614,"props":4234,"children":4235},{"emptyLinePlaceholder":568},[4236],{"type":24,"value":4237},"\n",{"type":18,"tag":614,"props":4239,"children":4240},{"class":616,"line":644},[4241],{"type":18,"tag":614,"props":4242,"children":4243},{},[4244],{"type":24,"value":4245},"2. Static actuator calibration\n",{"type":18,"tag":614,"props":4247,"children":4248},{"class":616,"line":2620},[4249],{"type":18,"tag":614,"props":4250,"children":4251},{},[4252],{"type":24,"value":4253},"   command -> thrust, command -> current, command -> RPM\n",{"type":18,"tag":614,"props":4255,"children":4256},{"class":616,"line":2629},[4257],{"type":18,"tag":614,"props":4258,"children":4259},{"emptyLinePlaceholder":568},[4260],{"type":24,"value":4237},{"type":18,"tag":614,"props":4262,"children":4263},{"class":616,"line":2637},[4264],{"type":18,"tag":614,"props":4265,"children":4266},{},[4267],{"type":24,"value":4268},"3. Dynamic actuator calibration\n",{"type":18,"tag":614,"props":4270,"children":4271},{"class":616,"line":2646},[4272],{"type":18,"tag":614,"props":4273,"children":4274},{},[4275],{"type":24,"value":4276},"   thrust step response, reversal delay, rate limit\n",{"type":18,"tag":614,"props":4278,"children":4279},{"class":616,"line":2654},[4280],{"type":18,"tag":614,"props":4281,"children":4282},{"emptyLinePlaceholder":568},[4283],{"type":24,"value":4237},{"type":18,"tag":614,"props":4285,"children":4287},{"class":616,"line":4286},10,[4288],{"type":18,"tag":614,"props":4289,"children":4290},{},[4291],{"type":24,"value":4292},"4. Build initial allocation matrix\n",{"type":18,"tag":614,"props":4294,"children":4296},{"class":616,"line":4295},11,[4297],{"type":18,"tag":614,"props":4298,"children":4299},{},[4300],{"type":24,"value":4301},"   y = M u\n",{"type":18,"tag":614,"props":4303,"children":4305},{"class":616,"line":4304},12,[4306],{"type":18,"tag":614,"props":4307,"children":4308},{"emptyLinePlaceholder":568},[4309],{"type":24,"value":4237},{"type":18,"tag":614,"props":4311,"children":4313},{"class":616,"line":4312},13,[4314],{"type":18,"tag":614,"props":4315,"children":4316},{},[4317],{"type":24,"value":4318},"5. Validate against IMU \u002F motion capture \u002F log data\n",{"type":18,"tag":614,"props":4320,"children":4322},{"class":616,"line":4321},14,[4323],{"type":18,"tag":614,"props":4324,"children":4325},{},[4326],{"type":24,"value":4327},"   predicted acceleration vs measured acceleration\n",{"type":18,"tag":614,"props":4329,"children":4331},{"class":616,"line":4330},15,[4332],{"type":18,"tag":614,"props":4333,"children":4334},{"emptyLinePlaceholder":568},[4335],{"type":24,"value":4237},{"type":18,"tag":614,"props":4337,"children":4339},{"class":616,"line":4338},16,[4340],{"type":18,"tag":614,"props":4341,"children":4342},{},[4343],{"type":24,"value":4344},"6. Update model\n",{"type":18,"tag":614,"props":4346,"children":4348},{"class":616,"line":4347},17,[4349],{"type":18,"tag":614,"props":4350,"children":4351},{},[4352],{"type":24,"value":4353},"   add bias, scaling, saturation, coupling, disturbance terms\n",{"type":18,"tag":137,"props":4355,"children":4356},{},[],{"type":18,"tag":141,"props":4358,"children":4360},{"id":4359},"research-focus",[4361],{"type":24,"value":4362},"🧠 Research Focus",{"type":18,"tag":19,"props":4364,"children":4365},{"align":21},[4366,4367],{"type":24,"value":25},{"type":18,"tag":27,"props":4368,"children":4371},{"src":4369,"alt":4370,"width":30},"assets\u002Fcontrol_stack.svg","Omnicopter control stack",[],{"type":18,"tag":19,"props":4373,"children":4374},{},[4375],{"type":24,"value":4376},"This project lands on three major control directions:",{"type":18,"tag":2676,"props":4378,"children":4379},{},[4380,4390,4400],{"type":18,"tag":177,"props":4381,"children":4382},{},[4383,4388],{"type":18,"tag":153,"props":4384,"children":4385},{},[4386],{"type":24,"value":4387},"Optimal Control",{"type":24,"value":4389}," — make the 6D motion and motor allocation efficient and constraint-aware.",{"type":18,"tag":177,"props":4391,"children":4392},{},[4393,4398],{"type":18,"tag":153,"props":4394,"children":4395},{},[4396],{"type":24,"value":4397},"Robust Control",{"type":24,"value":4399}," — maintain stable tracking under modeling errors, disturbances, and aerodynamic coupling.",{"type":18,"tag":177,"props":4401,"children":4402},{},[4403,4408],{"type":18,"tag":153,"props":4404,"children":4405},{},[4406],{"type":24,"value":4407},"Fault Diagnosis \u002F Fault-Tolerant Control",{"type":24,"value":4409}," — detect degraded actuators or sensors and reconfigure the controller.",{"type":18,"tag":137,"props":4411,"children":4412},{},[],{"type":18,"tag":141,"props":4414,"children":4416},{"id":4415},"_1-optimal-control",[4417],{"type":24,"value":4418},"🎯 1. Optimal Control",{"type":18,"tag":19,"props":4420,"children":4421},{},[4422],{"type":24,"value":4423},"Optimal control is used when we want the vehicle to satisfy motion goals while minimizing a cost and respecting constraints.",{"type":18,"tag":19,"props":4425,"children":4426},{},[4427,4429,4434],{"type":24,"value":4428},"For an Omnicopter, the most immediate optimal-control problem is ",{"type":18,"tag":153,"props":4430,"children":4431},{},[4432],{"type":24,"value":4433},"control allocation",{"type":24,"value":2579},{"type":18,"tag":205,"props":4436,"children":4437},{},[4438],{"type":18,"tag":19,"props":4439,"children":4440},{},[4441],{"type":24,"value":4442},"Given a desired 6D wrench, choose motor thrusts that generate it safely and efficiently.",{"type":18,"tag":514,"props":4444,"children":4446},{"id":4445},"baseline-allocation",[4447],{"type":24,"value":4448},"🧩 Baseline allocation",{"type":18,"tag":19,"props":4450,"children":4451},{},[4452],{"type":24,"value":4453},"A simple baseline is the pseudo-inverse allocator:",{"type":18,"tag":614,"props":4455,"children":4457},{"className":4456},[666],[4458],{"type":18,"tag":614,"props":4459,"children":4461},{"className":4460},[671],[4462,4526],{"type":18,"tag":614,"props":4463,"children":4465},{"className":4464},[676],[4466],{"type":18,"tag":679,"props":4467,"children":4468},{"xmlns":681,"display":682},[4469],{"type":18,"tag":685,"props":4470,"children":4471},{},[4472,4521],{"type":18,"tag":689,"props":4473,"children":4474},{},[4475,4479,4483,4496],{"type":18,"tag":693,"props":4476,"children":4477},{"mathvariant":695},[4478],{"type":24,"value":3667},{"type":18,"tag":700,"props":4480,"children":4481},{},[4482],{"type":24,"value":704},{"type":18,"tag":4484,"props":4485,"children":4486},"msup",{},[4487,4491],{"type":18,"tag":693,"props":4488,"children":4489},{},[4490],{"type":24,"value":767},{"type":18,"tag":700,"props":4492,"children":4493},{},[4494],{"type":24,"value":4495},"†",{"type":18,"tag":769,"props":4497,"children":4498},{},[4499,4503],{"type":18,"tag":693,"props":4500,"children":4501},{"mathvariant":695},[4502],{"type":24,"value":698},{"type":18,"tag":689,"props":4504,"children":4505},{},[4506,4511,4516],{"type":18,"tag":693,"props":4507,"children":4508},{},[4509],{"type":24,"value":4510},"d",{"type":18,"tag":693,"props":4512,"children":4513},{},[4514],{"type":24,"value":4515},"e",{"type":18,"tag":693,"props":4517,"children":4518},{},[4519],{"type":24,"value":4520},"s",{"type":18,"tag":799,"props":4522,"children":4523},{"encoding":801},[4524],{"type":24,"value":4525},"\\mathbf{u} = M^\\dagger \\mathbf{y}_{des}",{"type":18,"tag":614,"props":4527,"children":4529},{"className":4528,"ariaHidden":710},[808],[4530,4556],{"type":18,"tag":614,"props":4531,"children":4533},{"className":4532},[813],[4534,4538,4543,4547,4552],{"type":18,"tag":614,"props":4535,"children":4537},{"className":4536,"style":1189},[818],[],{"type":18,"tag":614,"props":4539,"children":4541},{"className":4540},[824,825],[4542],{"type":24,"value":3667},{"type":18,"tag":614,"props":4544,"children":4546},{"className":4545,"style":833},[832],[],{"type":18,"tag":614,"props":4548,"children":4550},{"className":4549},[838],[4551],{"type":24,"value":704},{"type":18,"tag":614,"props":4553,"children":4555},{"className":4554,"style":833},[832],[],{"type":18,"tag":614,"props":4557,"children":4559},{"className":4558},[813],[4560,4565,4608],{"type":18,"tag":614,"props":4561,"children":4564},{"className":4562,"style":4563},[818],"height:1.0935em;vertical-align:-0.1944em;",[],{"type":18,"tag":614,"props":4566,"children":4568},{"className":4567},[824],[4569,4574],{"type":18,"tag":614,"props":4570,"children":4572},{"className":4571,"style":1004},[824,1003],[4573],{"type":24,"value":767},{"type":18,"tag":614,"props":4575,"children":4577},{"className":4576},[1019],[4578],{"type":18,"tag":614,"props":4579,"children":4581},{"className":4580},[889],[4582],{"type":18,"tag":614,"props":4583,"children":4585},{"className":4584},[895],[4586],{"type":18,"tag":614,"props":4587,"children":4590},{"className":4588,"style":4589},[900],"height:0.8991em;",[4591],{"type":18,"tag":614,"props":4592,"children":4594},{"style":4593},"top:-3.113em;margin-right:0.05em;",[4595,4599],{"type":18,"tag":614,"props":4596,"children":4598},{"className":4597,"style":1041},[910],[],{"type":18,"tag":614,"props":4600,"children":4602},{"className":4601},[1046,1047,870,1048],[4603],{"type":18,"tag":614,"props":4604,"children":4606},{"className":4605},[2070,1048],[4607],{"type":24,"value":4495},{"type":18,"tag":614,"props":4609,"children":4611},{"className":4610},[824],[4612,4617],{"type":18,"tag":614,"props":4613,"children":4615},{"className":4614,"style":826},[824,825],[4616],{"type":24,"value":698},{"type":18,"tag":614,"props":4618,"children":4620},{"className":4619},[1019],[4621],{"type":18,"tag":614,"props":4622,"children":4624},{"className":4623},[889,890],[4625,4666],{"type":18,"tag":614,"props":4626,"children":4628},{"className":4627},[895],[4629,4661],{"type":18,"tag":614,"props":4630,"children":4633},{"className":4631,"style":4632},[900],"height:0.3361em;",[4634],{"type":18,"tag":614,"props":4635,"children":4637},{"style":4636},"top:-2.55em;margin-left:-0.016em;margin-right:0.05em;",[4638,4642],{"type":18,"tag":614,"props":4639,"children":4641},{"className":4640,"style":1041},[910],[],{"type":18,"tag":614,"props":4643,"children":4645},{"className":4644},[1046,1047,870,1048],[4646],{"type":18,"tag":614,"props":4647,"children":4649},{"className":4648},[824,1048],[4650,4655],{"type":18,"tag":614,"props":4651,"children":4653},{"className":4652},[824,1003,1048],[4654],{"type":24,"value":4510},{"type":18,"tag":614,"props":4656,"children":4658},{"className":4657},[824,1003,1048],[4659],{"type":24,"value":4660},"es",{"type":18,"tag":614,"props":4662,"children":4664},{"className":4663},[952],[4665],{"type":24,"value":955},{"type":18,"tag":614,"props":4667,"children":4669},{"className":4668},[895],[4670],{"type":18,"tag":614,"props":4671,"children":4673},{"className":4672,"style":1764},[900],[4674],{"type":18,"tag":614,"props":4675,"children":4676},{},[],{"type":18,"tag":19,"props":4678,"children":4679},{},[4680],{"type":24,"value":4681},"This is easy to implement, but it may fail when:",{"type":18,"tag":173,"props":4683,"children":4684},{},[4685,4690,4695,4700,4705],{"type":18,"tag":177,"props":4686,"children":4687},{},[4688],{"type":24,"value":4689},"one or more motors saturate;",{"type":18,"tag":177,"props":4691,"children":4692},{},[4693],{"type":24,"value":4694},"thrust commands require impossible reversal timing;",{"type":18,"tag":177,"props":4696,"children":4697},{},[4698],{"type":24,"value":4699},"the desired wrench is outside the attainable wrench set;",{"type":18,"tag":177,"props":4701,"children":4702},{},[4703],{"type":24,"value":4704},"a motor is degraded or failed;",{"type":18,"tag":177,"props":4706,"children":4707},{},[4708],{"type":24,"value":4709},"we want to minimize energy, noise, heat, or current.",{"type":18,"tag":514,"props":4711,"children":4713},{"id":4712},"️-better-allocation-constrained-qp",[4714],{"type":24,"value":4715},"⚖️ Better allocation: constrained QP",{"type":18,"tag":19,"props":4717,"children":4718},{},[4719],{"type":24,"value":4720},"A more practical allocator can be written as a quadratic program:",{"type":18,"tag":614,"props":4722,"children":4724},{"className":4723},[666],[4725],{"type":18,"tag":614,"props":4726,"children":4728},{"className":4727},[671],[4729,5228],{"type":18,"tag":614,"props":4730,"children":4732},{"className":4731},[676],[4733],{"type":18,"tag":679,"props":4734,"children":4735},{"xmlns":681,"display":682},[4736],{"type":18,"tag":685,"props":4737,"children":4738},{},[4739,5223],{"type":18,"tag":715,"props":4740,"children":4744},{"rowspacing":4741,"columnalign":4742,"columnspacing":4743},"0.25em","right left","0em",[4745,5013,5104],{"type":18,"tag":721,"props":4746,"children":4747},{},[4748,4780],{"type":18,"tag":725,"props":4749,"children":4750},{},[4751],{"type":18,"tag":729,"props":4752,"children":4753},{"scriptlevel":731,"displaystyle":710},[4754],{"type":18,"tag":689,"props":4755,"children":4756},{},[4757,4777],{"type":18,"tag":1476,"props":4758,"children":4759},{},[4760,4773],{"type":18,"tag":689,"props":4761,"children":4762},{},[4763,4768],{"type":18,"tag":693,"props":4764,"children":4765},{},[4766],{"type":24,"value":4767},"min",{"type":18,"tag":700,"props":4769,"children":4770},{},[4771],{"type":24,"value":4772},"⁡",{"type":18,"tag":693,"props":4774,"children":4775},{"mathvariant":695},[4776],{"type":24,"value":3667},{"type":18,"tag":832,"props":4778,"children":4779},{"width":718},[],{"type":18,"tag":725,"props":4781,"children":4782},{},[4783],{"type":18,"tag":729,"props":4784,"children":4785},{"scriptlevel":731,"displaystyle":710},[4786],{"type":18,"tag":689,"props":4787,"children":4788},{},[4789,4792,4798,4802,4806,4811,4833,4852,4857,4862,4866,4870,4874,4901,4912,4916,4921,4944,4948,4952,4956,4960,4965,5001,5005,5009],{"type":18,"tag":689,"props":4790,"children":4791},{},[],{"type":18,"tag":693,"props":4793,"children":4795},{"mathvariant":4794},"normal",[4796],{"type":24,"value":4797},"∥",{"type":18,"tag":693,"props":4799,"children":4800},{},[4801],{"type":24,"value":767},{"type":18,"tag":693,"props":4803,"children":4804},{"mathvariant":695},[4805],{"type":24,"value":3667},{"type":18,"tag":700,"props":4807,"children":4808},{},[4809],{"type":24,"value":4810},"−",{"type":18,"tag":769,"props":4812,"children":4813},{},[4814,4818],{"type":18,"tag":693,"props":4815,"children":4816},{"mathvariant":695},[4817],{"type":24,"value":698},{"type":18,"tag":689,"props":4819,"children":4820},{},[4821,4825,4829],{"type":18,"tag":693,"props":4822,"children":4823},{},[4824],{"type":24,"value":4510},{"type":18,"tag":693,"props":4826,"children":4827},{},[4828],{"type":24,"value":4515},{"type":18,"tag":693,"props":4830,"children":4831},{},[4832],{"type":24,"value":4520},{"type":18,"tag":4834,"props":4835,"children":4836},"msubsup",{},[4837,4841,4846],{"type":18,"tag":693,"props":4838,"children":4839},{"mathvariant":4794},[4840],{"type":24,"value":4797},{"type":18,"tag":693,"props":4842,"children":4843},{},[4844],{"type":24,"value":4845},"Q",{"type":18,"tag":4847,"props":4848,"children":4849},"mn",{},[4850],{"type":24,"value":4851},"2",{"type":18,"tag":700,"props":4853,"children":4854},{},[4855],{"type":24,"value":4856},"+",{"type":18,"tag":693,"props":4858,"children":4859},{},[4860],{"type":24,"value":4861},"λ",{"type":18,"tag":693,"props":4863,"children":4864},{"mathvariant":4794},[4865],{"type":24,"value":4797},{"type":18,"tag":693,"props":4867,"children":4868},{"mathvariant":695},[4869],{"type":24,"value":3667},{"type":18,"tag":700,"props":4871,"children":4872},{},[4873],{"type":24,"value":4810},{"type":18,"tag":769,"props":4875,"children":4876},{},[4877,4881],{"type":18,"tag":693,"props":4878,"children":4879},{"mathvariant":695},[4880],{"type":24,"value":3667},{"type":18,"tag":689,"props":4882,"children":4883},{},[4884,4888,4892,4896],{"type":18,"tag":693,"props":4885,"children":4886},{},[4887],{"type":24,"value":19},{"type":18,"tag":693,"props":4889,"children":4890},{},[4891],{"type":24,"value":788},{"type":18,"tag":693,"props":4893,"children":4894},{},[4895],{"type":24,"value":4515},{"type":18,"tag":693,"props":4897,"children":4898},{},[4899],{"type":24,"value":4900},"v",{"type":18,"tag":4484,"props":4902,"children":4903},{},[4904,4908],{"type":18,"tag":693,"props":4905,"children":4906},{"mathvariant":4794},[4907],{"type":24,"value":4797},{"type":18,"tag":4847,"props":4909,"children":4910},{},[4911],{"type":24,"value":4851},{"type":18,"tag":700,"props":4913,"children":4914},{},[4915],{"type":24,"value":4856},{"type":18,"tag":693,"props":4917,"children":4918},{},[4919],{"type":24,"value":4920},"ρ",{"type":18,"tag":769,"props":4922,"children":4923},{},[4924,4929],{"type":18,"tag":693,"props":4925,"children":4926},{},[4927],{"type":24,"value":4928},"J",{"type":18,"tag":689,"props":4930,"children":4931},{},[4932,4936,4940],{"type":18,"tag":693,"props":4933,"children":4934},{},[4935],{"type":24,"value":788},{"type":18,"tag":693,"props":4937,"children":4938},{},[4939],{"type":24,"value":4515},{"type":18,"tag":693,"props":4941,"children":4942},{},[4943],{"type":24,"value":4900},{"type":18,"tag":700,"props":4945,"children":4946},{"stretchy":732},[4947],{"type":24,"value":1554},{"type":18,"tag":693,"props":4949,"children":4950},{"mathvariant":695},[4951],{"type":24,"value":3667},{"type":18,"tag":700,"props":4953,"children":4954},{"stretchy":732},[4955],{"type":24,"value":1586},{"type":18,"tag":700,"props":4957,"children":4958},{},[4959],{"type":24,"value":4856},{"type":18,"tag":693,"props":4961,"children":4962},{},[4963],{"type":24,"value":4964},"η",{"type":18,"tag":769,"props":4966,"children":4967},{},[4968,4972],{"type":18,"tag":693,"props":4969,"children":4970},{},[4971],{"type":24,"value":4928},{"type":18,"tag":689,"props":4973,"children":4974},{},[4975,4979,4984,4988,4992,4997],{"type":18,"tag":693,"props":4976,"children":4977},{},[4978],{"type":24,"value":4515},{"type":18,"tag":693,"props":4980,"children":4981},{},[4982],{"type":24,"value":4983},"n",{"type":18,"tag":693,"props":4985,"children":4986},{},[4987],{"type":24,"value":4515},{"type":18,"tag":693,"props":4989,"children":4990},{},[4991],{"type":24,"value":788},{"type":18,"tag":693,"props":4993,"children":4994},{},[4995],{"type":24,"value":4996},"g",{"type":18,"tag":693,"props":4998,"children":4999},{},[5000],{"type":24,"value":698},{"type":18,"tag":700,"props":5002,"children":5003},{"stretchy":732},[5004],{"type":24,"value":1554},{"type":18,"tag":693,"props":5006,"children":5007},{"mathvariant":695},[5008],{"type":24,"value":3667},{"type":18,"tag":700,"props":5010,"children":5011},{"stretchy":732},[5012],{"type":24,"value":1586},{"type":18,"tag":721,"props":5014,"children":5015},{},[5016,5034],{"type":18,"tag":725,"props":5017,"children":5018},{},[5019],{"type":18,"tag":729,"props":5020,"children":5021},{"scriptlevel":731,"displaystyle":710},[5022],{"type":18,"tag":689,"props":5023,"children":5024},{},[5025,5031],{"type":18,"tag":5026,"props":5027,"children":5028},"mtext",{},[5029],{"type":24,"value":5030},"s.t.",{"type":18,"tag":832,"props":5032,"children":5033},{"width":718},[],{"type":18,"tag":725,"props":5035,"children":5036},{},[5037],{"type":18,"tag":729,"props":5038,"children":5039},{"scriptlevel":731,"displaystyle":710},[5040],{"type":18,"tag":689,"props":5041,"children":5042},{},[5043,5046,5069,5074,5078,5082],{"type":18,"tag":689,"props":5044,"children":5045},{},[],{"type":18,"tag":769,"props":5047,"children":5048},{},[5049,5053],{"type":18,"tag":693,"props":5050,"children":5051},{"mathvariant":695},[5052],{"type":24,"value":3667},{"type":18,"tag":689,"props":5054,"children":5055},{},[5056,5061,5065],{"type":18,"tag":693,"props":5057,"children":5058},{},[5059],{"type":24,"value":5060},"m",{"type":18,"tag":693,"props":5062,"children":5063},{},[5064],{"type":24,"value":1421},{"type":18,"tag":693,"props":5066,"children":5067},{},[5068],{"type":24,"value":4983},{"type":18,"tag":700,"props":5070,"children":5071},{},[5072],{"type":24,"value":5073},"≤",{"type":18,"tag":693,"props":5075,"children":5076},{"mathvariant":695},[5077],{"type":24,"value":3667},{"type":18,"tag":700,"props":5079,"children":5080},{},[5081],{"type":24,"value":5073},{"type":18,"tag":769,"props":5083,"children":5084},{},[5085,5089],{"type":18,"tag":693,"props":5086,"children":5087},{"mathvariant":695},[5088],{"type":24,"value":3667},{"type":18,"tag":689,"props":5090,"children":5091},{},[5092,5096,5100],{"type":18,"tag":693,"props":5093,"children":5094},{},[5095],{"type":24,"value":5060},{"type":18,"tag":693,"props":5097,"children":5098},{},[5099],{"type":24,"value":87},{"type":18,"tag":693,"props":5101,"children":5102},{},[5103],{"type":24,"value":1506},{"type":18,"tag":721,"props":5105,"children":5106},{},[5107,5116],{"type":18,"tag":725,"props":5108,"children":5109},{},[5110],{"type":18,"tag":729,"props":5111,"children":5112},{"scriptlevel":731,"displaystyle":710},[5113],{"type":18,"tag":689,"props":5114,"children":5115},{},[],{"type":18,"tag":725,"props":5117,"children":5118},{},[5119],{"type":18,"tag":729,"props":5120,"children":5121},{"scriptlevel":731,"displaystyle":710},[5122],{"type":18,"tag":689,"props":5123,"children":5124},{},[5125,5128,5133,5155,5159,5163,5167,5193,5197,5201],{"type":18,"tag":689,"props":5126,"children":5127},{},[],{"type":18,"tag":693,"props":5129,"children":5130},{"mathvariant":4794},[5131],{"type":24,"value":5132},"Δ",{"type":18,"tag":769,"props":5134,"children":5135},{},[5136,5140],{"type":18,"tag":693,"props":5137,"children":5138},{"mathvariant":695},[5139],{"type":24,"value":3667},{"type":18,"tag":689,"props":5141,"children":5142},{},[5143,5147,5151],{"type":18,"tag":693,"props":5144,"children":5145},{},[5146],{"type":24,"value":5060},{"type":18,"tag":693,"props":5148,"children":5149},{},[5150],{"type":24,"value":1421},{"type":18,"tag":693,"props":5152,"children":5153},{},[5154],{"type":24,"value":4983},{"type":18,"tag":700,"props":5156,"children":5157},{},[5158],{"type":24,"value":5073},{"type":18,"tag":693,"props":5160,"children":5161},{"mathvariant":695},[5162],{"type":24,"value":3667},{"type":18,"tag":700,"props":5164,"children":5165},{},[5166],{"type":24,"value":4810},{"type":18,"tag":769,"props":5168,"children":5169},{},[5170,5174],{"type":18,"tag":693,"props":5171,"children":5172},{"mathvariant":695},[5173],{"type":24,"value":3667},{"type":18,"tag":689,"props":5175,"children":5176},{},[5177,5181,5185,5189],{"type":18,"tag":693,"props":5178,"children":5179},{},[5180],{"type":24,"value":19},{"type":18,"tag":693,"props":5182,"children":5183},{},[5184],{"type":24,"value":788},{"type":18,"tag":693,"props":5186,"children":5187},{},[5188],{"type":24,"value":4515},{"type":18,"tag":693,"props":5190,"children":5191},{},[5192],{"type":24,"value":4900},{"type":18,"tag":700,"props":5194,"children":5195},{},[5196],{"type":24,"value":5073},{"type":18,"tag":693,"props":5198,"children":5199},{"mathvariant":4794},[5200],{"type":24,"value":5132},{"type":18,"tag":769,"props":5202,"children":5203},{},[5204,5208],{"type":18,"tag":693,"props":5205,"children":5206},{"mathvariant":695},[5207],{"type":24,"value":3667},{"type":18,"tag":689,"props":5209,"children":5210},{},[5211,5215,5219],{"type":18,"tag":693,"props":5212,"children":5213},{},[5214],{"type":24,"value":5060},{"type":18,"tag":693,"props":5216,"children":5217},{},[5218],{"type":24,"value":87},{"type":18,"tag":693,"props":5220,"children":5221},{},[5222],{"type":24,"value":1506},{"type":18,"tag":799,"props":5224,"children":5225},{"encoding":801},[5226],{"type":24,"value":5227},"\\begin{aligned}\n\\min_{\\mathbf{u}} \\quad &\n\\|M\\mathbf{u} - \\mathbf{y}_{des}\\|_Q^2\n+ \\lambda \\|\\mathbf{u} - \\mathbf{u}_{prev}\\|^2\n+ \\rho J_{rev}(\\mathbf{u})\n+ \\eta J_{energy}(\\mathbf{u}) \\\\\n\\text{s.t.} \\quad &\n\\mathbf{u}_{min} \\leq \\mathbf{u} \\leq \\mathbf{u}_{max} \\\\\n& \\Delta \\mathbf{u}_{min} \\leq \\mathbf{u} - \\mathbf{u}_{prev} \\leq \\Delta \\mathbf{u}_{max}\n\\end{aligned}",{"type":18,"tag":614,"props":5229,"children":5231},{"className":5230,"ariaHidden":710},[808],[5232],{"type":18,"tag":614,"props":5233,"children":5235},{"className":5234},[813],[5236,5241],{"type":18,"tag":614,"props":5237,"children":5240},{"className":5238,"style":5239},[818],"height:4.5641em;vertical-align:-2.0321em;",[],{"type":18,"tag":614,"props":5242,"children":5244},{"className":5243},[824],[5245],{"type":18,"tag":614,"props":5246,"children":5248},{"className":5247},[715],[5249,5409],{"type":18,"tag":614,"props":5250,"children":5253},{"className":5251},[5252],"col-align-r",[5254],{"type":18,"tag":614,"props":5255,"children":5257},{"className":5256},[889,890],[5258,5397],{"type":18,"tag":614,"props":5259,"children":5261},{"className":5260},[895],[5262,5392],{"type":18,"tag":614,"props":5263,"children":5266},{"className":5264,"style":5265},[900],"height:2.5321em;",[5267,5355,5380],{"type":18,"tag":614,"props":5268,"children":5270},{"style":5269},"top:-4.6679em;",[5271,5275],{"type":18,"tag":614,"props":5272,"children":5274},{"className":5273,"style":911},[910],[],{"type":18,"tag":614,"props":5276,"children":5278},{"className":5277},[824],[5279,5350],{"type":18,"tag":614,"props":5280,"children":5282},{"className":5281},[1634,1635],[5283],{"type":18,"tag":614,"props":5284,"children":5286},{"className":5285},[889,890],[5287,5338],{"type":18,"tag":614,"props":5288,"children":5290},{"className":5289},[895],[5291,5333],{"type":18,"tag":614,"props":5292,"children":5295},{"className":5293,"style":5294},[900],"height:0.6679em;",[5296,5317],{"type":18,"tag":614,"props":5297,"children":5299},{"style":5298},"top:-2.4em;margin-left:0em;",[5300,5304],{"type":18,"tag":614,"props":5301,"children":5303},{"className":5302,"style":911},[910],[],{"type":18,"tag":614,"props":5305,"children":5307},{"className":5306},[1046,1047,870,1048],[5308],{"type":18,"tag":614,"props":5309,"children":5311},{"className":5310},[824,1048],[5312],{"type":18,"tag":614,"props":5313,"children":5315},{"className":5314},[824,825,1048],[5316],{"type":24,"value":3667},{"type":18,"tag":614,"props":5318,"children":5320},{"style":5319},"top:-3em;",[5321,5325],{"type":18,"tag":614,"props":5322,"children":5324},{"className":5323,"style":911},[910],[],{"type":18,"tag":614,"props":5326,"children":5327},{},[5328],{"type":18,"tag":614,"props":5329,"children":5331},{"className":5330},[1634],[5332],{"type":24,"value":4767},{"type":18,"tag":614,"props":5334,"children":5336},{"className":5335},[952],[5337],{"type":24,"value":955},{"type":18,"tag":614,"props":5339,"children":5341},{"className":5340},[895],[5342],{"type":18,"tag":614,"props":5343,"children":5346},{"className":5344,"style":5345},[900],"height:0.7em;",[5347],{"type":18,"tag":614,"props":5348,"children":5349},{},[],{"type":18,"tag":614,"props":5351,"children":5354},{"className":5352,"style":5353},[832],"margin-right:1em;",[],{"type":18,"tag":614,"props":5356,"children":5358},{"style":5357},"top:-2.8279em;",[5359,5363],{"type":18,"tag":614,"props":5360,"children":5362},{"className":5361,"style":911},[910],[],{"type":18,"tag":614,"props":5364,"children":5366},{"className":5365},[824],[5367,5376],{"type":18,"tag":614,"props":5368,"children":5370},{"className":5369},[824,24],[5371],{"type":18,"tag":614,"props":5372,"children":5374},{"className":5373},[824],[5375],{"type":24,"value":5030},{"type":18,"tag":614,"props":5377,"children":5379},{"className":5378,"style":5353},[832],[],{"type":18,"tag":614,"props":5381,"children":5383},{"style":5382},"top:-1.3279em;",[5384,5388],{"type":18,"tag":614,"props":5385,"children":5387},{"className":5386,"style":911},[910],[],{"type":18,"tag":614,"props":5389,"children":5391},{"className":5390},[824],[],{"type":18,"tag":614,"props":5393,"children":5395},{"className":5394},[952],[5396],{"type":24,"value":955},{"type":18,"tag":614,"props":5398,"children":5400},{"className":5399},[895],[5401],{"type":18,"tag":614,"props":5402,"children":5405},{"className":5403,"style":5404},[900],"height:2.0321em;",[5406],{"type":18,"tag":614,"props":5407,"children":5408},{},[],{"type":18,"tag":614,"props":5410,"children":5413},{"className":5411},[5412],"col-align-l",[5414],{"type":18,"tag":614,"props":5415,"children":5417},{"className":5416},[889,890],[5418,6442],{"type":18,"tag":614,"props":5419,"children":5421},{"className":5420},[895],[5422,6437],{"type":18,"tag":614,"props":5423,"children":5425},{"className":5424,"style":5265},[900],[5426,5991,6165],{"type":18,"tag":614,"props":5427,"children":5428},{"style":5269},[5429,5433],{"type":18,"tag":614,"props":5430,"children":5432},{"className":5431,"style":911},[910],[],{"type":18,"tag":614,"props":5434,"children":5436},{"className":5435},[824],[5437,5441,5446,5451,5456,5460,5465,5469,5535,5611,5615,5620,5624,5629,5634,5639,5643,5648,5652,5729,5770,5774,5779,5783,5788,5861,5866,5871,5876,5880,5885,5889,5894,5976,5981,5986],{"type":18,"tag":614,"props":5438,"children":5440},{"className":5439},[824],[],{"type":18,"tag":614,"props":5442,"children":5444},{"className":5443},[824],[5445],{"type":24,"value":4797},{"type":18,"tag":614,"props":5447,"children":5449},{"className":5448,"style":1004},[824,1003],[5450],{"type":24,"value":767},{"type":18,"tag":614,"props":5452,"children":5454},{"className":5453},[824,825],[5455],{"type":24,"value":3667},{"type":18,"tag":614,"props":5457,"children":5459},{"className":5458,"style":2065},[832],[],{"type":18,"tag":614,"props":5461,"children":5463},{"className":5462},[2070],[5464],{"type":24,"value":4810},{"type":18,"tag":614,"props":5466,"children":5468},{"className":5467,"style":2065},[832],[],{"type":18,"tag":614,"props":5470,"children":5472},{"className":5471},[824],[5473,5478],{"type":18,"tag":614,"props":5474,"children":5476},{"className":5475,"style":826},[824,825],[5477],{"type":24,"value":698},{"type":18,"tag":614,"props":5479,"children":5481},{"className":5480},[1019],[5482],{"type":18,"tag":614,"props":5483,"children":5485},{"className":5484},[889,890],[5486,5524],{"type":18,"tag":614,"props":5487,"children":5489},{"className":5488},[895],[5490,5519],{"type":18,"tag":614,"props":5491,"children":5493},{"className":5492,"style":4632},[900],[5494],{"type":18,"tag":614,"props":5495,"children":5496},{"style":4636},[5497,5501],{"type":18,"tag":614,"props":5498,"children":5500},{"className":5499,"style":1041},[910],[],{"type":18,"tag":614,"props":5502,"children":5504},{"className":5503},[1046,1047,870,1048],[5505],{"type":18,"tag":614,"props":5506,"children":5508},{"className":5507},[824,1048],[5509,5514],{"type":18,"tag":614,"props":5510,"children":5512},{"className":5511},[824,1003,1048],[5513],{"type":24,"value":4510},{"type":18,"tag":614,"props":5515,"children":5517},{"className":5516},[824,1003,1048],[5518],{"type":24,"value":4660},{"type":18,"tag":614,"props":5520,"children":5522},{"className":5521},[952],[5523],{"type":24,"value":955},{"type":18,"tag":614,"props":5525,"children":5527},{"className":5526},[895],[5528],{"type":18,"tag":614,"props":5529,"children":5531},{"className":5530,"style":1764},[900],[5532],{"type":18,"tag":614,"props":5533,"children":5534},{},[],{"type":18,"tag":614,"props":5536,"children":5538},{"className":5537},[824],[5539,5544],{"type":18,"tag":614,"props":5540,"children":5542},{"className":5541},[824],[5543],{"type":24,"value":4797},{"type":18,"tag":614,"props":5545,"children":5547},{"className":5546},[1019],[5548],{"type":18,"tag":614,"props":5549,"children":5551},{"className":5550},[889,890],[5552,5599],{"type":18,"tag":614,"props":5553,"children":5555},{"className":5554},[895],[5556,5594],{"type":18,"tag":614,"props":5557,"children":5560},{"className":5558,"style":5559},[900],"height:0.8641em;",[5561,5578],{"type":18,"tag":614,"props":5562,"children":5564},{"style":5563},"top:-2.453em;margin-left:0em;margin-right:0.05em;",[5565,5569],{"type":18,"tag":614,"props":5566,"children":5568},{"className":5567,"style":1041},[910],[],{"type":18,"tag":614,"props":5570,"children":5572},{"className":5571},[1046,1047,870,1048],[5573],{"type":18,"tag":614,"props":5574,"children":5576},{"className":5575},[824,1003,1048],[5577],{"type":24,"value":4845},{"type":18,"tag":614,"props":5579,"children":5580},{"style":4593},[5581,5585],{"type":18,"tag":614,"props":5582,"children":5584},{"className":5583,"style":1041},[910],[],{"type":18,"tag":614,"props":5586,"children":5588},{"className":5587},[1046,1047,870,1048],[5589],{"type":18,"tag":614,"props":5590,"children":5592},{"className":5591},[824,1048],[5593],{"type":24,"value":4851},{"type":18,"tag":614,"props":5595,"children":5597},{"className":5596},[952],[5598],{"type":24,"value":955},{"type":18,"tag":614,"props":5600,"children":5602},{"className":5601},[895],[5603],{"type":18,"tag":614,"props":5604,"children":5607},{"className":5605,"style":5606},[900],"height:0.3831em;",[5608],{"type":18,"tag":614,"props":5609,"children":5610},{},[],{"type":18,"tag":614,"props":5612,"children":5614},{"className":5613,"style":2065},[832],[],{"type":18,"tag":614,"props":5616,"children":5618},{"className":5617},[2070],[5619],{"type":24,"value":4856},{"type":18,"tag":614,"props":5621,"children":5623},{"className":5622,"style":2065},[832],[],{"type":18,"tag":614,"props":5625,"children":5627},{"className":5626},[824,1003],[5628],{"type":24,"value":4861},{"type":18,"tag":614,"props":5630,"children":5632},{"className":5631},[824],[5633],{"type":24,"value":4797},{"type":18,"tag":614,"props":5635,"children":5637},{"className":5636},[824,825],[5638],{"type":24,"value":3667},{"type":18,"tag":614,"props":5640,"children":5642},{"className":5641,"style":2065},[832],[],{"type":18,"tag":614,"props":5644,"children":5646},{"className":5645},[2070],[5647],{"type":24,"value":4810},{"type":18,"tag":614,"props":5649,"children":5651},{"className":5650,"style":2065},[832],[],{"type":18,"tag":614,"props":5653,"children":5655},{"className":5654},[824],[5656,5661],{"type":18,"tag":614,"props":5657,"children":5659},{"className":5658},[824,825],[5660],{"type":24,"value":3667},{"type":18,"tag":614,"props":5662,"children":5664},{"className":5663},[1019],[5665],{"type":18,"tag":614,"props":5666,"children":5668},{"className":5667},[889,890],[5669,5718],{"type":18,"tag":614,"props":5670,"children":5672},{"className":5671},[895],[5673,5713],{"type":18,"tag":614,"props":5674,"children":5676},{"className":5675,"style":1032},[900],[5677],{"type":18,"tag":614,"props":5678,"children":5679},{"style":1796},[5680,5684],{"type":18,"tag":614,"props":5681,"children":5683},{"className":5682,"style":1041},[910],[],{"type":18,"tag":614,"props":5685,"children":5687},{"className":5686},[1046,1047,870,1048],[5688],{"type":18,"tag":614,"props":5689,"children":5691},{"className":5690},[824,1048],[5692,5697,5702,5707],{"type":18,"tag":614,"props":5693,"children":5695},{"className":5694},[824,1003,1048],[5696],{"type":24,"value":19},{"type":18,"tag":614,"props":5698,"children":5700},{"className":5699,"style":1062},[824,1003,1048],[5701],{"type":24,"value":788},{"type":18,"tag":614,"props":5703,"children":5705},{"className":5704},[824,1003,1048],[5706],{"type":24,"value":4515},{"type":18,"tag":614,"props":5708,"children":5711},{"className":5709,"style":5710},[824,1003,1048],"margin-right:0.0359em;",[5712],{"type":24,"value":4900},{"type":18,"tag":614,"props":5714,"children":5716},{"className":5715},[952],[5717],{"type":24,"value":955},{"type":18,"tag":614,"props":5719,"children":5721},{"className":5720},[895],[5722],{"type":18,"tag":614,"props":5723,"children":5725},{"className":5724,"style":1087},[900],[5726],{"type":18,"tag":614,"props":5727,"children":5728},{},[],{"type":18,"tag":614,"props":5730,"children":5732},{"className":5731},[824],[5733,5738],{"type":18,"tag":614,"props":5734,"children":5736},{"className":5735},[824],[5737],{"type":24,"value":4797},{"type":18,"tag":614,"props":5739,"children":5741},{"className":5740},[1019],[5742],{"type":18,"tag":614,"props":5743,"children":5745},{"className":5744},[889],[5746],{"type":18,"tag":614,"props":5747,"children":5749},{"className":5748},[895],[5750],{"type":18,"tag":614,"props":5751,"children":5753},{"className":5752,"style":5559},[900],[5754],{"type":18,"tag":614,"props":5755,"children":5756},{"style":4593},[5757,5761],{"type":18,"tag":614,"props":5758,"children":5760},{"className":5759,"style":1041},[910],[],{"type":18,"tag":614,"props":5762,"children":5764},{"className":5763},[1046,1047,870,1048],[5765],{"type":18,"tag":614,"props":5766,"children":5768},{"className":5767},[824,1048],[5769],{"type":24,"value":4851},{"type":18,"tag":614,"props":5771,"children":5773},{"className":5772,"style":2065},[832],[],{"type":18,"tag":614,"props":5775,"children":5777},{"className":5776},[2070],[5778],{"type":24,"value":4856},{"type":18,"tag":614,"props":5780,"children":5782},{"className":5781,"style":2065},[832],[],{"type":18,"tag":614,"props":5784,"children":5786},{"className":5785},[824,1003],[5787],{"type":24,"value":4920},{"type":18,"tag":614,"props":5789,"children":5791},{"className":5790},[824],[5792,5798],{"type":18,"tag":614,"props":5793,"children":5796},{"className":5794,"style":5795},[824,1003],"margin-right:0.0962em;",[5797],{"type":24,"value":4928},{"type":18,"tag":614,"props":5799,"children":5801},{"className":5800},[1019],[5802],{"type":18,"tag":614,"props":5803,"children":5805},{"className":5804},[889,890],[5806,5850],{"type":18,"tag":614,"props":5807,"children":5809},{"className":5808},[895],[5810,5845],{"type":18,"tag":614,"props":5811,"children":5813},{"className":5812,"style":1032},[900],[5814],{"type":18,"tag":614,"props":5815,"children":5817},{"style":5816},"top:-2.55em;margin-left:-0.0962em;margin-right:0.05em;",[5818,5822],{"type":18,"tag":614,"props":5819,"children":5821},{"className":5820,"style":1041},[910],[],{"type":18,"tag":614,"props":5823,"children":5825},{"className":5824},[1046,1047,870,1048],[5826],{"type":18,"tag":614,"props":5827,"children":5829},{"className":5828},[824,1048],[5830,5835,5840],{"type":18,"tag":614,"props":5831,"children":5833},{"className":5832,"style":1062},[824,1003,1048],[5834],{"type":24,"value":788},{"type":18,"tag":614,"props":5836,"children":5838},{"className":5837},[824,1003,1048],[5839],{"type":24,"value":4515},{"type":18,"tag":614,"props":5841,"children":5843},{"className":5842,"style":5710},[824,1003,1048],[5844],{"type":24,"value":4900},{"type":18,"tag":614,"props":5846,"children":5848},{"className":5847},[952],[5849],{"type":24,"value":955},{"type":18,"tag":614,"props":5851,"children":5853},{"className":5852},[895],[5854],{"type":18,"tag":614,"props":5855,"children":5857},{"className":5856,"style":1764},[900],[5858],{"type":18,"tag":614,"props":5859,"children":5860},{},[],{"type":18,"tag":614,"props":5862,"children":5864},{"className":5863},[862],[5865],{"type":24,"value":1554},{"type":18,"tag":614,"props":5867,"children":5869},{"className":5868},[824,825],[5870],{"type":24,"value":3667},{"type":18,"tag":614,"props":5872,"children":5874},{"className":5873},[971],[5875],{"type":24,"value":1586},{"type":18,"tag":614,"props":5877,"children":5879},{"className":5878,"style":2065},[832],[],{"type":18,"tag":614,"props":5881,"children":5883},{"className":5882},[2070],[5884],{"type":24,"value":4856},{"type":18,"tag":614,"props":5886,"children":5888},{"className":5887,"style":2065},[832],[],{"type":18,"tag":614,"props":5890,"children":5892},{"className":5891,"style":5710},[824,1003],[5893],{"type":24,"value":4964},{"type":18,"tag":614,"props":5895,"children":5897},{"className":5896},[824],[5898,5903],{"type":18,"tag":614,"props":5899,"children":5901},{"className":5900,"style":5795},[824,1003],[5902],{"type":24,"value":4928},{"type":18,"tag":614,"props":5904,"children":5906},{"className":5905},[1019],[5907],{"type":18,"tag":614,"props":5908,"children":5910},{"className":5909},[889,890],[5911,5965],{"type":18,"tag":614,"props":5912,"children":5914},{"className":5913},[895],[5915,5960],{"type":18,"tag":614,"props":5916,"children":5918},{"className":5917,"style":1032},[900],[5919],{"type":18,"tag":614,"props":5920,"children":5921},{"style":5816},[5922,5926],{"type":18,"tag":614,"props":5923,"children":5925},{"className":5924,"style":1041},[910],[],{"type":18,"tag":614,"props":5927,"children":5929},{"className":5928},[1046,1047,870,1048],[5930],{"type":18,"tag":614,"props":5931,"children":5933},{"className":5932},[824,1048],[5934,5939,5944,5950,5955],{"type":18,"tag":614,"props":5935,"children":5937},{"className":5936},[824,1003,1048],[5938],{"type":24,"value":4515},{"type":18,"tag":614,"props":5940,"children":5942},{"className":5941},[824,1003,1048],[5943],{"type":24,"value":4983},{"type":18,"tag":614,"props":5945,"children":5947},{"className":5946,"style":1062},[824,1003,1048],[5948],{"type":24,"value":5949},"er",{"type":18,"tag":614,"props":5951,"children":5953},{"className":5952,"style":5710},[824,1003,1048],[5954],{"type":24,"value":4996},{"type":18,"tag":614,"props":5956,"children":5958},{"className":5957,"style":5710},[824,1003,1048],[5959],{"type":24,"value":698},{"type":18,"tag":614,"props":5961,"children":5963},{"className":5962},[952],[5964],{"type":24,"value":955},{"type":18,"tag":614,"props":5966,"children":5968},{"className":5967},[895],[5969],{"type":18,"tag":614,"props":5970,"children":5972},{"className":5971,"style":1087},[900],[5973],{"type":18,"tag":614,"props":5974,"children":5975},{},[],{"type":18,"tag":614,"props":5977,"children":5979},{"className":5978},[862],[5980],{"type":24,"value":1554},{"type":18,"tag":614,"props":5982,"children":5984},{"className":5983},[824,825],[5985],{"type":24,"value":3667},{"type":18,"tag":614,"props":5987,"children":5989},{"className":5988},[971],[5990],{"type":24,"value":1586},{"type":18,"tag":614,"props":5992,"children":5993},{"style":5357},[5994,5998],{"type":18,"tag":614,"props":5995,"children":5997},{"className":5996,"style":911},[910],[],{"type":18,"tag":614,"props":5999,"children":6001},{"className":6000},[824],[6002,6006,6067,6071,6076,6080,6085,6089,6094,6098],{"type":18,"tag":614,"props":6003,"children":6005},{"className":6004},[824],[],{"type":18,"tag":614,"props":6007,"children":6009},{"className":6008},[824],[6010,6015],{"type":18,"tag":614,"props":6011,"children":6013},{"className":6012},[824,825],[6014],{"type":24,"value":3667},{"type":18,"tag":614,"props":6016,"children":6018},{"className":6017},[1019],[6019],{"type":18,"tag":614,"props":6020,"children":6022},{"className":6021},[889,890],[6023,6056],{"type":18,"tag":614,"props":6024,"children":6026},{"className":6025},[895],[6027,6051],{"type":18,"tag":614,"props":6028,"children":6030},{"className":6029,"style":1733},[900],[6031],{"type":18,"tag":614,"props":6032,"children":6033},{"style":1796},[6034,6038],{"type":18,"tag":614,"props":6035,"children":6037},{"className":6036,"style":1041},[910],[],{"type":18,"tag":614,"props":6039,"children":6041},{"className":6040},[1046,1047,870,1048],[6042],{"type":18,"tag":614,"props":6043,"children":6045},{"className":6044},[824,1048],[6046],{"type":18,"tag":614,"props":6047,"children":6049},{"className":6048},[824,1003,1048],[6050],{"type":24,"value":4767},{"type":18,"tag":614,"props":6052,"children":6054},{"className":6053},[952],[6055],{"type":24,"value":955},{"type":18,"tag":614,"props":6057,"children":6059},{"className":6058},[895],[6060],{"type":18,"tag":614,"props":6061,"children":6063},{"className":6062,"style":1764},[900],[6064],{"type":18,"tag":614,"props":6065,"children":6066},{},[],{"type":18,"tag":614,"props":6068,"children":6070},{"className":6069,"style":833},[832],[],{"type":18,"tag":614,"props":6072,"children":6074},{"className":6073},[838],[6075],{"type":24,"value":5073},{"type":18,"tag":614,"props":6077,"children":6079},{"className":6078,"style":833},[832],[],{"type":18,"tag":614,"props":6081,"children":6083},{"className":6082},[824,825],[6084],{"type":24,"value":3667},{"type":18,"tag":614,"props":6086,"children":6088},{"className":6087,"style":833},[832],[],{"type":18,"tag":614,"props":6090,"children":6092},{"className":6091},[838],[6093],{"type":24,"value":5073},{"type":18,"tag":614,"props":6095,"children":6097},{"className":6096,"style":833},[832],[],{"type":18,"tag":614,"props":6099,"children":6101},{"className":6100},[824],[6102,6107],{"type":18,"tag":614,"props":6103,"children":6105},{"className":6104},[824,825],[6106],{"type":24,"value":3667},{"type":18,"tag":614,"props":6108,"children":6110},{"className":6109},[1019],[6111],{"type":18,"tag":614,"props":6112,"children":6114},{"className":6113},[889,890],[6115,6154],{"type":18,"tag":614,"props":6116,"children":6118},{"className":6117},[895],[6119,6149],{"type":18,"tag":614,"props":6120,"children":6122},{"className":6121,"style":1032},[900],[6123],{"type":18,"tag":614,"props":6124,"children":6125},{"style":1796},[6126,6130],{"type":18,"tag":614,"props":6127,"children":6129},{"className":6128,"style":1041},[910],[],{"type":18,"tag":614,"props":6131,"children":6133},{"className":6132},[1046,1047,870,1048],[6134],{"type":18,"tag":614,"props":6135,"children":6137},{"className":6136},[824,1048],[6138,6144],{"type":18,"tag":614,"props":6139,"children":6141},{"className":6140},[824,1003,1048],[6142],{"type":24,"value":6143},"ma",{"type":18,"tag":614,"props":6145,"children":6147},{"className":6146},[824,1003,1048],[6148],{"type":24,"value":1506},{"type":18,"tag":614,"props":6150,"children":6152},{"className":6151},[952],[6153],{"type":24,"value":955},{"type":18,"tag":614,"props":6155,"children":6157},{"className":6156},[895],[6158],{"type":18,"tag":614,"props":6159,"children":6161},{"className":6160,"style":1764},[900],[6162],{"type":18,"tag":614,"props":6163,"children":6164},{},[],{"type":18,"tag":614,"props":6166,"children":6167},{"style":5382},[6168,6172],{"type":18,"tag":614,"props":6169,"children":6171},{"className":6170,"style":911},[910],[],{"type":18,"tag":614,"props":6173,"children":6175},{"className":6174},[824],[6176,6180,6185,6246,6250,6255,6259,6264,6268,6273,6277,6353,6357,6362,6366,6371],{"type":18,"tag":614,"props":6177,"children":6179},{"className":6178},[824],[],{"type":18,"tag":614,"props":6181,"children":6183},{"className":6182},[824],[6184],{"type":24,"value":5132},{"type":18,"tag":614,"props":6186,"children":6188},{"className":6187},[824],[6189,6194],{"type":18,"tag":614,"props":6190,"children":6192},{"className":6191},[824,825],[6193],{"type":24,"value":3667},{"type":18,"tag":614,"props":6195,"children":6197},{"className":6196},[1019],[6198],{"type":18,"tag":614,"props":6199,"children":6201},{"className":6200},[889,890],[6202,6235],{"type":18,"tag":614,"props":6203,"children":6205},{"className":6204},[895],[6206,6230],{"type":18,"tag":614,"props":6207,"children":6209},{"className":6208,"style":1733},[900],[6210],{"type":18,"tag":614,"props":6211,"children":6212},{"style":1796},[6213,6217],{"type":18,"tag":614,"props":6214,"children":6216},{"className":6215,"style":1041},[910],[],{"type":18,"tag":614,"props":6218,"children":6220},{"className":6219},[1046,1047,870,1048],[6221],{"type":18,"tag":614,"props":6222,"children":6224},{"className":6223},[824,1048],[6225],{"type":18,"tag":614,"props":6226,"children":6228},{"className":6227},[824,1003,1048],[6229],{"type":24,"value":4767},{"type":18,"tag":614,"props":6231,"children":6233},{"className":6232},[952],[6234],{"type":24,"value":955},{"type":18,"tag":614,"props":6236,"children":6238},{"className":6237},[895],[6239],{"type":18,"tag":614,"props":6240,"children":6242},{"className":6241,"style":1764},[900],[6243],{"type":18,"tag":614,"props":6244,"children":6245},{},[],{"type":18,"tag":614,"props":6247,"children":6249},{"className":6248,"style":833},[832],[],{"type":18,"tag":614,"props":6251,"children":6253},{"className":6252},[838],[6254],{"type":24,"value":5073},{"type":18,"tag":614,"props":6256,"children":6258},{"className":6257,"style":833},[832],[],{"type":18,"tag":614,"props":6260,"children":6262},{"className":6261},[824,825],[6263],{"type":24,"value":3667},{"type":18,"tag":614,"props":6265,"children":6267},{"className":6266,"style":2065},[832],[],{"type":18,"tag":614,"props":6269,"children":6271},{"className":6270},[2070],[6272],{"type":24,"value":4810},{"type":18,"tag":614,"props":6274,"children":6276},{"className":6275,"style":2065},[832],[],{"type":18,"tag":614,"props":6278,"children":6280},{"className":6279},[824],[6281,6286],{"type":18,"tag":614,"props":6282,"children":6284},{"className":6283},[824,825],[6285],{"type":24,"value":3667},{"type":18,"tag":614,"props":6287,"children":6289},{"className":6288},[1019],[6290],{"type":18,"tag":614,"props":6291,"children":6293},{"className":6292},[889,890],[6294,6342],{"type":18,"tag":614,"props":6295,"children":6297},{"className":6296},[895],[6298,6337],{"type":18,"tag":614,"props":6299,"children":6301},{"className":6300,"style":1032},[900],[6302],{"type":18,"tag":614,"props":6303,"children":6304},{"style":1796},[6305,6309],{"type":18,"tag":614,"props":6306,"children":6308},{"className":6307,"style":1041},[910],[],{"type":18,"tag":614,"props":6310,"children":6312},{"className":6311},[1046,1047,870,1048],[6313],{"type":18,"tag":614,"props":6314,"children":6316},{"className":6315},[824,1048],[6317,6322,6327,6332],{"type":18,"tag":614,"props":6318,"children":6320},{"className":6319},[824,1003,1048],[6321],{"type":24,"value":19},{"type":18,"tag":614,"props":6323,"children":6325},{"className":6324,"style":1062},[824,1003,1048],[6326],{"type":24,"value":788},{"type":18,"tag":614,"props":6328,"children":6330},{"className":6329},[824,1003,1048],[6331],{"type":24,"value":4515},{"type":18,"tag":614,"props":6333,"children":6335},{"className":6334,"style":5710},[824,1003,1048],[6336],{"type":24,"value":4900},{"type":18,"tag":614,"props":6338,"children":6340},{"className":6339},[952],[6341],{"type":24,"value":955},{"type":18,"tag":614,"props":6343,"children":6345},{"className":6344},[895],[6346],{"type":18,"tag":614,"props":6347,"children":6349},{"className":6348,"style":1087},[900],[6350],{"type":18,"tag":614,"props":6351,"children":6352},{},[],{"type":18,"tag":614,"props":6354,"children":6356},{"className":6355,"style":833},[832],[],{"type":18,"tag":614,"props":6358,"children":6360},{"className":6359},[838],[6361],{"type":24,"value":5073},{"type":18,"tag":614,"props":6363,"children":6365},{"className":6364,"style":833},[832],[],{"type":18,"tag":614,"props":6367,"children":6369},{"className":6368},[824],[6370],{"type":24,"value":5132},{"type":18,"tag":614,"props":6372,"children":6374},{"className":6373},[824],[6375,6380],{"type":18,"tag":614,"props":6376,"children":6378},{"className":6377},[824,825],[6379],{"type":24,"value":3667},{"type":18,"tag":614,"props":6381,"children":6383},{"className":6382},[1019],[6384],{"type":18,"tag":614,"props":6385,"children":6387},{"className":6386},[889,890],[6388,6426],{"type":18,"tag":614,"props":6389,"children":6391},{"className":6390},[895],[6392,6421],{"type":18,"tag":614,"props":6393,"children":6395},{"className":6394,"style":1032},[900],[6396],{"type":18,"tag":614,"props":6397,"children":6398},{"style":1796},[6399,6403],{"type":18,"tag":614,"props":6400,"children":6402},{"className":6401,"style":1041},[910],[],{"type":18,"tag":614,"props":6404,"children":6406},{"className":6405},[1046,1047,870,1048],[6407],{"type":18,"tag":614,"props":6408,"children":6410},{"className":6409},[824,1048],[6411,6416],{"type":18,"tag":614,"props":6412,"children":6414},{"className":6413},[824,1003,1048],[6415],{"type":24,"value":6143},{"type":18,"tag":614,"props":6417,"children":6419},{"className":6418},[824,1003,1048],[6420],{"type":24,"value":1506},{"type":18,"tag":614,"props":6422,"children":6424},{"className":6423},[952],[6425],{"type":24,"value":955},{"type":18,"tag":614,"props":6427,"children":6429},{"className":6428},[895],[6430],{"type":18,"tag":614,"props":6431,"children":6433},{"className":6432,"style":1764},[900],[6434],{"type":18,"tag":614,"props":6435,"children":6436},{},[],{"type":18,"tag":614,"props":6438,"children":6440},{"className":6439},[952],[6441],{"type":24,"value":955},{"type":18,"tag":614,"props":6443,"children":6445},{"className":6444},[895],[6446],{"type":18,"tag":614,"props":6447,"children":6449},{"className":6448,"style":5404},[900],[6450],{"type":18,"tag":614,"props":6451,"children":6452},{},[],{"type":18,"tag":19,"props":6454,"children":6455},{},[6456],{"type":24,"value":1096},{"type":18,"tag":173,"props":6458,"children":6459},{},[6460,6732,6969,7102,7257],{"type":18,"tag":177,"props":6461,"children":6462},{},[6463,6730],{"type":18,"tag":614,"props":6464,"children":6466},{"className":6465},[671],[6467,6538],{"type":18,"tag":614,"props":6468,"children":6470},{"className":6469},[676],[6471],{"type":18,"tag":679,"props":6472,"children":6473},{"xmlns":681},[6474],{"type":18,"tag":685,"props":6475,"children":6476},{},[6477,6533],{"type":18,"tag":689,"props":6478,"children":6479},{},[6480,6484,6488,6492,6496,6518],{"type":18,"tag":693,"props":6481,"children":6482},{"mathvariant":4794},[6483],{"type":24,"value":4797},{"type":18,"tag":693,"props":6485,"children":6486},{},[6487],{"type":24,"value":767},{"type":18,"tag":693,"props":6489,"children":6490},{"mathvariant":695},[6491],{"type":24,"value":3667},{"type":18,"tag":700,"props":6493,"children":6494},{},[6495],{"type":24,"value":4810},{"type":18,"tag":769,"props":6497,"children":6498},{},[6499,6503],{"type":18,"tag":693,"props":6500,"children":6501},{"mathvariant":695},[6502],{"type":24,"value":698},{"type":18,"tag":689,"props":6504,"children":6505},{},[6506,6510,6514],{"type":18,"tag":693,"props":6507,"children":6508},{},[6509],{"type":24,"value":4510},{"type":18,"tag":693,"props":6511,"children":6512},{},[6513],{"type":24,"value":4515},{"type":18,"tag":693,"props":6515,"children":6516},{},[6517],{"type":24,"value":4520},{"type":18,"tag":4834,"props":6519,"children":6520},{},[6521,6525,6529],{"type":18,"tag":693,"props":6522,"children":6523},{"mathvariant":4794},[6524],{"type":24,"value":4797},{"type":18,"tag":693,"props":6526,"children":6527},{},[6528],{"type":24,"value":4845},{"type":18,"tag":4847,"props":6530,"children":6531},{},[6532],{"type":24,"value":4851},{"type":18,"tag":799,"props":6534,"children":6535},{"encoding":801},[6536],{"type":24,"value":6537},"\\|M\\mathbf{u} - \\mathbf{y}_{des}\\|_Q^2",{"type":18,"tag":614,"props":6539,"children":6541},{"className":6540,"ariaHidden":710},[808],[6542,6578],{"type":18,"tag":614,"props":6543,"children":6545},{"className":6544},[813],[6546,6550,6555,6560,6565,6569,6574],{"type":18,"tag":614,"props":6547,"children":6549},{"className":6548,"style":2084},[818],[],{"type":18,"tag":614,"props":6551,"children":6553},{"className":6552},[824],[6554],{"type":24,"value":4797},{"type":18,"tag":614,"props":6556,"children":6558},{"className":6557,"style":1004},[824,1003],[6559],{"type":24,"value":767},{"type":18,"tag":614,"props":6561,"children":6563},{"className":6562},[824,825],[6564],{"type":24,"value":3667},{"type":18,"tag":614,"props":6566,"children":6568},{"className":6567,"style":2065},[832],[],{"type":18,"tag":614,"props":6570,"children":6572},{"className":6571},[2070],[6573],{"type":24,"value":4810},{"type":18,"tag":614,"props":6575,"children":6577},{"className":6576,"style":2065},[832],[],{"type":18,"tag":614,"props":6579,"children":6581},{"className":6580},[813],[6582,6587,6653],{"type":18,"tag":614,"props":6583,"children":6586},{"className":6584,"style":6585},[818],"height:1.2255em;vertical-align:-0.4114em;",[],{"type":18,"tag":614,"props":6588,"children":6590},{"className":6589},[824],[6591,6596],{"type":18,"tag":614,"props":6592,"children":6594},{"className":6593,"style":826},[824,825],[6595],{"type":24,"value":698},{"type":18,"tag":614,"props":6597,"children":6599},{"className":6598},[1019],[6600],{"type":18,"tag":614,"props":6601,"children":6603},{"className":6602},[889,890],[6604,6642],{"type":18,"tag":614,"props":6605,"children":6607},{"className":6606},[895],[6608,6637],{"type":18,"tag":614,"props":6609,"children":6611},{"className":6610,"style":4632},[900],[6612],{"type":18,"tag":614,"props":6613,"children":6614},{"style":4636},[6615,6619],{"type":18,"tag":614,"props":6616,"children":6618},{"className":6617,"style":1041},[910],[],{"type":18,"tag":614,"props":6620,"children":6622},{"className":6621},[1046,1047,870,1048],[6623],{"type":18,"tag":614,"props":6624,"children":6626},{"className":6625},[824,1048],[6627,6632],{"type":18,"tag":614,"props":6628,"children":6630},{"className":6629},[824,1003,1048],[6631],{"type":24,"value":4510},{"type":18,"tag":614,"props":6633,"children":6635},{"className":6634},[824,1003,1048],[6636],{"type":24,"value":4660},{"type":18,"tag":614,"props":6638,"children":6640},{"className":6639},[952],[6641],{"type":24,"value":955},{"type":18,"tag":614,"props":6643,"children":6645},{"className":6644},[895],[6646],{"type":18,"tag":614,"props":6647,"children":6649},{"className":6648,"style":1764},[900],[6650],{"type":18,"tag":614,"props":6651,"children":6652},{},[],{"type":18,"tag":614,"props":6654,"children":6656},{"className":6655},[824],[6657,6662],{"type":18,"tag":614,"props":6658,"children":6660},{"className":6659},[824],[6661],{"type":24,"value":4797},{"type":18,"tag":614,"props":6663,"children":6665},{"className":6664},[1019],[6666],{"type":18,"tag":614,"props":6667,"children":6669},{"className":6668},[889,890],[6670,6718],{"type":18,"tag":614,"props":6671,"children":6673},{"className":6672},[895],[6674,6713],{"type":18,"tag":614,"props":6675,"children":6678},{"className":6676,"style":6677},[900],"height:0.8141em;",[6679,6696],{"type":18,"tag":614,"props":6680,"children":6682},{"style":6681},"top:-2.4247em;margin-left:0em;margin-right:0.05em;",[6683,6687],{"type":18,"tag":614,"props":6684,"children":6686},{"className":6685,"style":1041},[910],[],{"type":18,"tag":614,"props":6688,"children":6690},{"className":6689},[1046,1047,870,1048],[6691],{"type":18,"tag":614,"props":6692,"children":6694},{"className":6693},[824,1003,1048],[6695],{"type":24,"value":4845},{"type":18,"tag":614,"props":6697,"children":6699},{"style":6698},"top:-3.063em;margin-right:0.05em;",[6700,6704],{"type":18,"tag":614,"props":6701,"children":6703},{"className":6702,"style":1041},[910],[],{"type":18,"tag":614,"props":6705,"children":6707},{"className":6706},[1046,1047,870,1048],[6708],{"type":18,"tag":614,"props":6709,"children":6711},{"className":6710},[824,1048],[6712],{"type":24,"value":4851},{"type":18,"tag":614,"props":6714,"children":6716},{"className":6715},[952],[6717],{"type":24,"value":955},{"type":18,"tag":614,"props":6719,"children":6721},{"className":6720},[895],[6722],{"type":18,"tag":614,"props":6723,"children":6726},{"className":6724,"style":6725},[900],"height:0.4114em;",[6727],{"type":18,"tag":614,"props":6728,"children":6729},{},[],{"type":24,"value":6731}," tracks the desired wrench;",{"type":18,"tag":177,"props":6733,"children":6734},{},[6735,6967],{"type":18,"tag":614,"props":6736,"children":6738},{"className":6737},[671],[6739,6806],{"type":18,"tag":614,"props":6740,"children":6742},{"className":6741},[676],[6743],{"type":18,"tag":679,"props":6744,"children":6745},{"xmlns":681},[6746],{"type":18,"tag":685,"props":6747,"children":6748},{},[6749,6801],{"type":18,"tag":689,"props":6750,"children":6751},{},[6752,6756,6760,6764,6790],{"type":18,"tag":693,"props":6753,"children":6754},{"mathvariant":4794},[6755],{"type":24,"value":4797},{"type":18,"tag":693,"props":6757,"children":6758},{"mathvariant":695},[6759],{"type":24,"value":3667},{"type":18,"tag":700,"props":6761,"children":6762},{},[6763],{"type":24,"value":4810},{"type":18,"tag":769,"props":6765,"children":6766},{},[6767,6771],{"type":18,"tag":693,"props":6768,"children":6769},{"mathvariant":695},[6770],{"type":24,"value":3667},{"type":18,"tag":689,"props":6772,"children":6773},{},[6774,6778,6782,6786],{"type":18,"tag":693,"props":6775,"children":6776},{},[6777],{"type":24,"value":19},{"type":18,"tag":693,"props":6779,"children":6780},{},[6781],{"type":24,"value":788},{"type":18,"tag":693,"props":6783,"children":6784},{},[6785],{"type":24,"value":4515},{"type":18,"tag":693,"props":6787,"children":6788},{},[6789],{"type":24,"value":4900},{"type":18,"tag":4484,"props":6791,"children":6792},{},[6793,6797],{"type":18,"tag":693,"props":6794,"children":6795},{"mathvariant":4794},[6796],{"type":24,"value":4797},{"type":18,"tag":4847,"props":6798,"children":6799},{},[6800],{"type":24,"value":4851},{"type":18,"tag":799,"props":6802,"children":6803},{"encoding":801},[6804],{"type":24,"value":6805},"\\|\\mathbf{u} - \\mathbf{u}_{prev}\\|^2",{"type":18,"tag":614,"props":6807,"children":6809},{"className":6808,"ariaHidden":710},[808],[6810,6841],{"type":18,"tag":614,"props":6811,"children":6813},{"className":6812},[813],[6814,6818,6823,6828,6832,6837],{"type":18,"tag":614,"props":6815,"children":6817},{"className":6816,"style":2084},[818],[],{"type":18,"tag":614,"props":6819,"children":6821},{"className":6820},[824],[6822],{"type":24,"value":4797},{"type":18,"tag":614,"props":6824,"children":6826},{"className":6825},[824,825],[6827],{"type":24,"value":3667},{"type":18,"tag":614,"props":6829,"children":6831},{"className":6830,"style":2065},[832],[],{"type":18,"tag":614,"props":6833,"children":6835},{"className":6834},[2070],[6836],{"type":24,"value":4810},{"type":18,"tag":614,"props":6838,"children":6840},{"className":6839,"style":2065},[832],[],{"type":18,"tag":614,"props":6842,"children":6844},{"className":6843},[813],[6845,6850,6926],{"type":18,"tag":614,"props":6846,"children":6849},{"className":6847,"style":6848},[818],"height:1.1002em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":6851,"children":6853},{"className":6852},[824],[6854,6859],{"type":18,"tag":614,"props":6855,"children":6857},{"className":6856},[824,825],[6858],{"type":24,"value":3667},{"type":18,"tag":614,"props":6860,"children":6862},{"className":6861},[1019],[6863],{"type":18,"tag":614,"props":6864,"children":6866},{"className":6865},[889,890],[6867,6915],{"type":18,"tag":614,"props":6868,"children":6870},{"className":6869},[895],[6871,6910],{"type":18,"tag":614,"props":6872,"children":6874},{"className":6873,"style":1032},[900],[6875],{"type":18,"tag":614,"props":6876,"children":6877},{"style":1796},[6878,6882],{"type":18,"tag":614,"props":6879,"children":6881},{"className":6880,"style":1041},[910],[],{"type":18,"tag":614,"props":6883,"children":6885},{"className":6884},[1046,1047,870,1048],[6886],{"type":18,"tag":614,"props":6887,"children":6889},{"className":6888},[824,1048],[6890,6895,6900,6905],{"type":18,"tag":614,"props":6891,"children":6893},{"className":6892},[824,1003,1048],[6894],{"type":24,"value":19},{"type":18,"tag":614,"props":6896,"children":6898},{"className":6897,"style":1062},[824,1003,1048],[6899],{"type":24,"value":788},{"type":18,"tag":614,"props":6901,"children":6903},{"className":6902},[824,1003,1048],[6904],{"type":24,"value":4515},{"type":18,"tag":614,"props":6906,"children":6908},{"className":6907,"style":5710},[824,1003,1048],[6909],{"type":24,"value":4900},{"type":18,"tag":614,"props":6911,"children":6913},{"className":6912},[952],[6914],{"type":24,"value":955},{"type":18,"tag":614,"props":6916,"children":6918},{"className":6917},[895],[6919],{"type":18,"tag":614,"props":6920,"children":6922},{"className":6921,"style":1087},[900],[6923],{"type":18,"tag":614,"props":6924,"children":6925},{},[],{"type":18,"tag":614,"props":6927,"children":6929},{"className":6928},[824],[6930,6935],{"type":18,"tag":614,"props":6931,"children":6933},{"className":6932},[824],[6934],{"type":24,"value":4797},{"type":18,"tag":614,"props":6936,"children":6938},{"className":6937},[1019],[6939],{"type":18,"tag":614,"props":6940,"children":6942},{"className":6941},[889],[6943],{"type":18,"tag":614,"props":6944,"children":6946},{"className":6945},[895],[6947],{"type":18,"tag":614,"props":6948,"children":6950},{"className":6949,"style":6677},[900],[6951],{"type":18,"tag":614,"props":6952,"children":6953},{"style":6698},[6954,6958],{"type":18,"tag":614,"props":6955,"children":6957},{"className":6956,"style":1041},[910],[],{"type":18,"tag":614,"props":6959,"children":6961},{"className":6960},[1046,1047,870,1048],[6962],{"type":18,"tag":614,"props":6963,"children":6965},{"className":6964},[824,1048],[6966],{"type":24,"value":4851},{"type":24,"value":6968}," discourages aggressive thrust changes;",{"type":18,"tag":177,"props":6970,"children":6971},{},[6972,7100],{"type":18,"tag":614,"props":6973,"children":6975},{"className":6974},[671],[6976,7016],{"type":18,"tag":614,"props":6977,"children":6979},{"className":6978},[676],[6980],{"type":18,"tag":679,"props":6981,"children":6982},{"xmlns":681},[6983],{"type":18,"tag":685,"props":6984,"children":6985},{},[6986,7011],{"type":18,"tag":689,"props":6987,"children":6988},{},[6989],{"type":18,"tag":769,"props":6990,"children":6991},{},[6992,6996],{"type":18,"tag":693,"props":6993,"children":6994},{},[6995],{"type":24,"value":4928},{"type":18,"tag":689,"props":6997,"children":6998},{},[6999,7003,7007],{"type":18,"tag":693,"props":7000,"children":7001},{},[7002],{"type":24,"value":788},{"type":18,"tag":693,"props":7004,"children":7005},{},[7006],{"type":24,"value":4515},{"type":18,"tag":693,"props":7008,"children":7009},{},[7010],{"type":24,"value":4900},{"type":18,"tag":799,"props":7012,"children":7013},{"encoding":801},[7014],{"type":24,"value":7015},"J_{rev}",{"type":18,"tag":614,"props":7017,"children":7019},{"className":7018,"ariaHidden":710},[808],[7020],{"type":18,"tag":614,"props":7021,"children":7023},{"className":7022},[813],[7024,7029],{"type":18,"tag":614,"props":7025,"children":7028},{"className":7026,"style":7027},[818],"height:0.8333em;vertical-align:-0.15em;",[],{"type":18,"tag":614,"props":7030,"children":7032},{"className":7031},[824],[7033,7038],{"type":18,"tag":614,"props":7034,"children":7036},{"className":7035,"style":5795},[824,1003],[7037],{"type":24,"value":4928},{"type":18,"tag":614,"props":7039,"children":7041},{"className":7040},[1019],[7042],{"type":18,"tag":614,"props":7043,"children":7045},{"className":7044},[889,890],[7046,7089],{"type":18,"tag":614,"props":7047,"children":7049},{"className":7048},[895],[7050,7084],{"type":18,"tag":614,"props":7051,"children":7053},{"className":7052,"style":1032},[900],[7054],{"type":18,"tag":614,"props":7055,"children":7056},{"style":5816},[7057,7061],{"type":18,"tag":614,"props":7058,"children":7060},{"className":7059,"style":1041},[910],[],{"type":18,"tag":614,"props":7062,"children":7064},{"className":7063},[1046,1047,870,1048],[7065],{"type":18,"tag":614,"props":7066,"children":7068},{"className":7067},[824,1048],[7069,7074,7079],{"type":18,"tag":614,"props":7070,"children":7072},{"className":7071,"style":1062},[824,1003,1048],[7073],{"type":24,"value":788},{"type":18,"tag":614,"props":7075,"children":7077},{"className":7076},[824,1003,1048],[7078],{"type":24,"value":4515},{"type":18,"tag":614,"props":7080,"children":7082},{"className":7081,"style":5710},[824,1003,1048],[7083],{"type":24,"value":4900},{"type":18,"tag":614,"props":7085,"children":7087},{"className":7086},[952],[7088],{"type":24,"value":955},{"type":18,"tag":614,"props":7090,"children":7092},{"className":7091},[895],[7093],{"type":18,"tag":614,"props":7094,"children":7096},{"className":7095,"style":1764},[900],[7097],{"type":18,"tag":614,"props":7098,"children":7099},{},[],{"type":24,"value":7101}," penalizes motor reversal;",{"type":18,"tag":177,"props":7103,"children":7104},{},[7105,7255],{"type":18,"tag":614,"props":7106,"children":7108},{"className":7107},[671],[7109,7161],{"type":18,"tag":614,"props":7110,"children":7112},{"className":7111},[676],[7113],{"type":18,"tag":679,"props":7114,"children":7115},{"xmlns":681},[7116],{"type":18,"tag":685,"props":7117,"children":7118},{},[7119,7156],{"type":18,"tag":689,"props":7120,"children":7121},{},[7122],{"type":18,"tag":769,"props":7123,"children":7124},{},[7125,7129],{"type":18,"tag":693,"props":7126,"children":7127},{},[7128],{"type":24,"value":4928},{"type":18,"tag":689,"props":7130,"children":7131},{},[7132,7136,7140,7144,7148,7152],{"type":18,"tag":693,"props":7133,"children":7134},{},[7135],{"type":24,"value":4515},{"type":18,"tag":693,"props":7137,"children":7138},{},[7139],{"type":24,"value":4983},{"type":18,"tag":693,"props":7141,"children":7142},{},[7143],{"type":24,"value":4515},{"type":18,"tag":693,"props":7145,"children":7146},{},[7147],{"type":24,"value":788},{"type":18,"tag":693,"props":7149,"children":7150},{},[7151],{"type":24,"value":4996},{"type":18,"tag":693,"props":7153,"children":7154},{},[7155],{"type":24,"value":698},{"type":18,"tag":799,"props":7157,"children":7158},{"encoding":801},[7159],{"type":24,"value":7160},"J_{energy}",{"type":18,"tag":614,"props":7162,"children":7164},{"className":7163,"ariaHidden":710},[808],[7165],{"type":18,"tag":614,"props":7166,"children":7168},{"className":7167},[813],[7169,7174],{"type":18,"tag":614,"props":7170,"children":7173},{"className":7171,"style":7172},[818],"height:0.9694em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":7175,"children":7177},{"className":7176},[824],[7178,7183],{"type":18,"tag":614,"props":7179,"children":7181},{"className":7180,"style":5795},[824,1003],[7182],{"type":24,"value":4928},{"type":18,"tag":614,"props":7184,"children":7186},{"className":7185},[1019],[7187],{"type":18,"tag":614,"props":7188,"children":7190},{"className":7189},[889,890],[7191,7244],{"type":18,"tag":614,"props":7192,"children":7194},{"className":7193},[895],[7195,7239],{"type":18,"tag":614,"props":7196,"children":7198},{"className":7197,"style":1032},[900],[7199],{"type":18,"tag":614,"props":7200,"children":7201},{"style":5816},[7202,7206],{"type":18,"tag":614,"props":7203,"children":7205},{"className":7204,"style":1041},[910],[],{"type":18,"tag":614,"props":7207,"children":7209},{"className":7208},[1046,1047,870,1048],[7210],{"type":18,"tag":614,"props":7211,"children":7213},{"className":7212},[824,1048],[7214,7219,7224,7229,7234],{"type":18,"tag":614,"props":7215,"children":7217},{"className":7216},[824,1003,1048],[7218],{"type":24,"value":4515},{"type":18,"tag":614,"props":7220,"children":7222},{"className":7221},[824,1003,1048],[7223],{"type":24,"value":4983},{"type":18,"tag":614,"props":7225,"children":7227},{"className":7226,"style":1062},[824,1003,1048],[7228],{"type":24,"value":5949},{"type":18,"tag":614,"props":7230,"children":7232},{"className":7231,"style":5710},[824,1003,1048],[7233],{"type":24,"value":4996},{"type":18,"tag":614,"props":7235,"children":7237},{"className":7236,"style":5710},[824,1003,1048],[7238],{"type":24,"value":698},{"type":18,"tag":614,"props":7240,"children":7242},{"className":7241},[952],[7243],{"type":24,"value":955},{"type":18,"tag":614,"props":7245,"children":7247},{"className":7246},[895],[7248],{"type":18,"tag":614,"props":7249,"children":7251},{"className":7250,"style":1087},[900],[7252],{"type":18,"tag":614,"props":7253,"children":7254},{},[],{"type":24,"value":7256}," penalizes current \u002F power consumption;",{"type":18,"tag":177,"props":7258,"children":7259},{},[7260],{"type":24,"value":7261},"constraints enforce actuator limits.",{"type":18,"tag":514,"props":7263,"children":7265},{"id":7264},"optimal-control-research-questions",[7266],{"type":24,"value":7267},"🧭 Optimal-control research questions",{"type":18,"tag":173,"props":7269,"children":7270},{},[7271,7276,7325,7330,7335],{"type":18,"tag":177,"props":7272,"children":7273},{},[7274],{"type":24,"value":7275},"How can we allocate thrust while avoiding unnecessary motor reversal?",{"type":18,"tag":177,"props":7277,"children":7278},{},[7279,7281,7323],{"type":24,"value":7280},"Can we use the null space of ",{"type":18,"tag":614,"props":7282,"children":7284},{"className":7283},[671],[7285,7306],{"type":18,"tag":614,"props":7286,"children":7288},{"className":7287},[676],[7289],{"type":18,"tag":679,"props":7290,"children":7291},{"xmlns":681},[7292],{"type":18,"tag":685,"props":7293,"children":7294},{},[7295,7302],{"type":18,"tag":689,"props":7296,"children":7297},{},[7298],{"type":18,"tag":693,"props":7299,"children":7300},{},[7301],{"type":24,"value":767},{"type":18,"tag":799,"props":7303,"children":7304},{"encoding":801},[7305],{"type":24,"value":767},{"type":18,"tag":614,"props":7307,"children":7309},{"className":7308,"ariaHidden":710},[808],[7310],{"type":18,"tag":614,"props":7311,"children":7313},{"className":7312},[813],[7314,7318],{"type":18,"tag":614,"props":7315,"children":7317},{"className":7316,"style":1386},[818],[],{"type":18,"tag":614,"props":7319,"children":7321},{"className":7320,"style":1004},[824,1003],[7322],{"type":24,"value":767},{"type":24,"value":7324}," to minimize energy without changing the produced wrench?",{"type":18,"tag":177,"props":7326,"children":7327},{},[7328],{"type":24,"value":7329},"How should force and torque tracking be weighted when full tracking is infeasible?",{"type":18,"tag":177,"props":7331,"children":7332},{},[7333],{"type":24,"value":7334},"Can MPC improve arbitrary-attitude trajectory tracking compared with cascaded PID control?",{"type":18,"tag":177,"props":7336,"children":7337},{},[7338],{"type":24,"value":7339},"How do ETH-style and Lynchpin-style geometries differ in attainable wrench space?",{"type":18,"tag":514,"props":7341,"children":7343},{"id":7342},"planned-experiments",[7344],{"type":24,"value":7345},"🧪 Planned experiments",{"type":18,"tag":248,"props":7347,"children":7348},{},[7349,7365],{"type":18,"tag":252,"props":7350,"children":7351},{},[7352],{"type":18,"tag":256,"props":7353,"children":7354},{},[7355,7360],{"type":18,"tag":260,"props":7356,"children":7357},{},[7358],{"type":24,"value":7359},"Experiment",{"type":18,"tag":260,"props":7361,"children":7362},{},[7363],{"type":24,"value":7364},"Metric",{"type":18,"tag":271,"props":7366,"children":7367},{},[7368,7381,7394,7407,7420,7433],{"type":18,"tag":256,"props":7369,"children":7370},{},[7371,7376],{"type":18,"tag":278,"props":7372,"children":7373},{},[7374],{"type":24,"value":7375},"Static wrench tracking",{"type":18,"tag":278,"props":7377,"children":7378},{},[7379],{"type":24,"value":7380},"force\u002Ftorque error",{"type":18,"tag":256,"props":7382,"children":7383},{},[7384,7389],{"type":18,"tag":278,"props":7385,"children":7386},{},[7387],{"type":24,"value":7388},"Arbitrary-attitude hover",{"type":18,"tag":278,"props":7390,"children":7391},{},[7392],{"type":24,"value":7393},"position and attitude RMS error",{"type":18,"tag":256,"props":7395,"children":7396},{},[7397,7402],{"type":18,"tag":278,"props":7398,"children":7399},{},[7400],{"type":24,"value":7401},"Circular trajectory tracking",{"type":18,"tag":278,"props":7403,"children":7404},{},[7405],{"type":24,"value":7406},"position error, motor usage",{"type":18,"tag":256,"props":7408,"children":7409},{},[7410,7415],{"type":18,"tag":278,"props":7411,"children":7412},{},[7413],{"type":24,"value":7414},"Motor reversal penalty test",{"type":18,"tag":278,"props":7416,"children":7417},{},[7418],{"type":24,"value":7419},"reversal count, tracking degradation",{"type":18,"tag":256,"props":7421,"children":7422},{},[7423,7428],{"type":18,"tag":278,"props":7424,"children":7425},{},[7426],{"type":24,"value":7427},"Energy-aware allocation",{"type":18,"tag":278,"props":7429,"children":7430},{},[7431],{"type":24,"value":7432},"current draw, flight time estimate",{"type":18,"tag":256,"props":7434,"children":7435},{},[7436,7441],{"type":18,"tag":278,"props":7437,"children":7438},{},[7439],{"type":24,"value":7440},"Geometry comparison",{"type":18,"tag":278,"props":7442,"children":7443},{},[7444],{"type":24,"value":7445},"condition number, attainable wrench radius",{"type":18,"tag":137,"props":7447,"children":7448},{},[],{"type":18,"tag":141,"props":7450,"children":7452},{"id":7451},"_2-robust-control",[7453],{"type":24,"value":7454},"🤖 2. Robust Control",{"type":18,"tag":19,"props":7456,"children":7457},{},[7458],{"type":24,"value":7459},"Robust control addresses the gap between the clean mathematical model and the real flying machine.",{"type":18,"tag":19,"props":7461,"children":7462},{},[7463],{"type":24,"value":7464},"In the real platform, we must expect:",{"type":18,"tag":173,"props":7466,"children":7467},{},[7468,7473,7478,7483,7488,7493,7498],{"type":18,"tag":177,"props":7469,"children":7470},{},[7471],{"type":24,"value":7472},"🌬️ aerodynamic interference between rotors;",{"type":18,"tag":177,"props":7474,"children":7475},{},[7476],{"type":24,"value":7477},"📦 payload and center-of-mass changes;",{"type":18,"tag":177,"props":7479,"children":7480},{},[7481],{"type":24,"value":7482},"🧱 frame vibration and flexibility;",{"type":18,"tag":177,"props":7484,"children":7485},{},[7486],{"type":24,"value":7487},"🔁 motor reversal delay;",{"type":18,"tag":177,"props":7489,"children":7490},{},[7491],{"type":24,"value":7492},"📉 inaccurate thrust coefficients;",{"type":18,"tag":177,"props":7494,"children":7495},{},[7496],{"type":24,"value":7497},"🧲 sensor noise, bias, and magnetic disturbance;",{"type":18,"tag":177,"props":7499,"children":7500},{},[7501],{"type":24,"value":7502},"💨 external disturbances such as wind or contact forces.",{"type":18,"tag":514,"props":7504,"children":7506},{"id":7505},"candidate-robust-control-structure",[7507],{"type":24,"value":7508},"🧠 Candidate robust-control structure",{"type":18,"tag":604,"props":7510,"children":7514},{"className":7511,"code":7512,"language":7513,"meta":8,"style":8},"language-mermaid shiki shiki-themes github-light github-dark","flowchart LR\n    Ref[Reference trajectory] --> Nominal[Nominal 6-DoF controller]\n    Nominal --> Alloc[Constrained allocator]\n    Alloc --> Vehicle[Omnicopter hardware]\n    Vehicle --> Est[State estimator]\n    Est --> DOB[Disturbance observer]\n    DOB --> Nominal\n    Est --> Nominal\n","mermaid",[7515],{"type":18,"tag":610,"props":7516,"children":7517},{"__ignoreMap":8},[7518,7526,7534,7542,7550,7558,7566,7574],{"type":18,"tag":614,"props":7519,"children":7520},{"class":616,"line":617},[7521],{"type":18,"tag":614,"props":7522,"children":7523},{},[7524],{"type":24,"value":7525},"flowchart LR\n",{"type":18,"tag":614,"props":7527,"children":7528},{"class":616,"line":626},[7529],{"type":18,"tag":614,"props":7530,"children":7531},{},[7532],{"type":24,"value":7533},"    Ref[Reference trajectory] --> Nominal[Nominal 6-DoF controller]\n",{"type":18,"tag":614,"props":7535,"children":7536},{"class":616,"line":635},[7537],{"type":18,"tag":614,"props":7538,"children":7539},{},[7540],{"type":24,"value":7541},"    Nominal --> Alloc[Constrained allocator]\n",{"type":18,"tag":614,"props":7543,"children":7544},{"class":616,"line":644},[7545],{"type":18,"tag":614,"props":7546,"children":7547},{},[7548],{"type":24,"value":7549},"    Alloc --> Vehicle[Omnicopter hardware]\n",{"type":18,"tag":614,"props":7551,"children":7552},{"class":616,"line":2620},[7553],{"type":18,"tag":614,"props":7554,"children":7555},{},[7556],{"type":24,"value":7557},"    Vehicle --> Est[State estimator]\n",{"type":18,"tag":614,"props":7559,"children":7560},{"class":616,"line":2629},[7561],{"type":18,"tag":614,"props":7562,"children":7563},{},[7564],{"type":24,"value":7565},"    Est --> DOB[Disturbance observer]\n",{"type":18,"tag":614,"props":7567,"children":7568},{"class":616,"line":2637},[7569],{"type":18,"tag":614,"props":7570,"children":7571},{},[7572],{"type":24,"value":7573},"    DOB --> Nominal\n",{"type":18,"tag":614,"props":7575,"children":7576},{"class":616,"line":2646},[7577],{"type":18,"tag":614,"props":7578,"children":7579},{},[7580],{"type":24,"value":7581},"    Est --> Nominal\n",{"type":18,"tag":514,"props":7583,"children":7585},{"id":7584},"methods-we-can-investigate",[7586],{"type":24,"value":7587},"🔧 Methods we can investigate",{"type":18,"tag":248,"props":7589,"children":7590},{},[7591,7607],{"type":18,"tag":252,"props":7592,"children":7593},{},[7594],{"type":18,"tag":256,"props":7595,"children":7596},{},[7597,7602],{"type":18,"tag":260,"props":7598,"children":7599},{},[7600],{"type":24,"value":7601},"Method",{"type":18,"tag":260,"props":7603,"children":7604},{},[7605],{"type":24,"value":7606},"Role in this project",{"type":18,"tag":271,"props":7608,"children":7609},{},[7610,7623,7636,7649,7768,7781],{"type":18,"tag":256,"props":7611,"children":7612},{},[7613,7618],{"type":18,"tag":278,"props":7614,"children":7615},{},[7616],{"type":24,"value":7617},"Disturbance observer",{"type":18,"tag":278,"props":7619,"children":7620},{},[7621],{"type":24,"value":7622},"Estimate unmodeled force\u002Ftorque disturbance",{"type":18,"tag":256,"props":7624,"children":7625},{},[7626,7631],{"type":18,"tag":278,"props":7627,"children":7628},{},[7629],{"type":24,"value":7630},"Tube MPC",{"type":18,"tag":278,"props":7632,"children":7633},{},[7634],{"type":24,"value":7635},"Keep trajectory tracking stable under bounded uncertainty",{"type":18,"tag":256,"props":7637,"children":7638},{},[7639,7644],{"type":18,"tag":278,"props":7640,"children":7641},{},[7642],{"type":24,"value":7643},"Sliding-mode control",{"type":18,"tag":278,"props":7645,"children":7646},{},[7647],{"type":24,"value":7648},"Improve robustness to matched disturbances",{"type":18,"tag":256,"props":7650,"children":7651},{},[7652,7763],{"type":18,"tag":278,"props":7653,"children":7654},{},[7655,7761],{"type":18,"tag":614,"props":7656,"children":7658},{"className":7657},[671],[7659,7690],{"type":18,"tag":614,"props":7660,"children":7662},{"className":7661},[676],[7663],{"type":18,"tag":679,"props":7664,"children":7665},{"xmlns":681},[7666],{"type":18,"tag":685,"props":7667,"children":7668},{},[7669,7685],{"type":18,"tag":689,"props":7670,"children":7671},{},[7672],{"type":18,"tag":769,"props":7673,"children":7674},{},[7675,7680],{"type":18,"tag":693,"props":7676,"children":7677},{},[7678],{"type":24,"value":7679},"H",{"type":18,"tag":693,"props":7681,"children":7682},{"mathvariant":4794},[7683],{"type":24,"value":7684},"∞",{"type":18,"tag":799,"props":7686,"children":7687},{"encoding":801},[7688],{"type":24,"value":7689},"H_\\infty",{"type":18,"tag":614,"props":7691,"children":7693},{"className":7692,"ariaHidden":710},[808],[7694],{"type":18,"tag":614,"props":7695,"children":7697},{"className":7696},[813],[7698,7702],{"type":18,"tag":614,"props":7699,"children":7701},{"className":7700,"style":7027},[818],[],{"type":18,"tag":614,"props":7703,"children":7705},{"className":7704},[824],[7706,7712],{"type":18,"tag":614,"props":7707,"children":7710},{"className":7708,"style":7709},[824,1003],"margin-right:0.0813em;",[7711],{"type":24,"value":7679},{"type":18,"tag":614,"props":7713,"children":7715},{"className":7714},[1019],[7716],{"type":18,"tag":614,"props":7717,"children":7719},{"className":7718},[889,890],[7720,7750],{"type":18,"tag":614,"props":7721,"children":7723},{"className":7722},[895],[7724,7745],{"type":18,"tag":614,"props":7725,"children":7727},{"className":7726,"style":1032},[900],[7728],{"type":18,"tag":614,"props":7729,"children":7731},{"style":7730},"top:-2.55em;margin-left:-0.0813em;margin-right:0.05em;",[7732,7736],{"type":18,"tag":614,"props":7733,"children":7735},{"className":7734,"style":1041},[910],[],{"type":18,"tag":614,"props":7737,"children":7739},{"className":7738},[1046,1047,870,1048],[7740],{"type":18,"tag":614,"props":7741,"children":7743},{"className":7742},[824,1048],[7744],{"type":24,"value":7684},{"type":18,"tag":614,"props":7746,"children":7748},{"className":7747},[952],[7749],{"type":24,"value":955},{"type":18,"tag":614,"props":7751,"children":7753},{"className":7752},[895],[7754],{"type":18,"tag":614,"props":7755,"children":7757},{"className":7756,"style":1764},[900],[7758],{"type":18,"tag":614,"props":7759,"children":7760},{},[],{"type":24,"value":7762}," control",{"type":18,"tag":278,"props":7764,"children":7765},{},[7766],{"type":24,"value":7767},"Design for worst-case disturbance attenuation",{"type":18,"tag":256,"props":7769,"children":7770},{},[7771,7776],{"type":18,"tag":278,"props":7772,"children":7773},{},[7774],{"type":24,"value":7775},"Adaptive control",{"type":18,"tag":278,"props":7777,"children":7778},{},[7779],{"type":24,"value":7780},"Update uncertain parameters online",{"type":18,"tag":256,"props":7782,"children":7783},{},[7784,7789],{"type":18,"tag":278,"props":7785,"children":7786},{},[7787],{"type":24,"value":7788},"Learning compensation",{"type":18,"tag":278,"props":7790,"children":7791},{},[7792],{"type":24,"value":7793},"Learn repeatable aerodynamic coupling from logs",{"type":18,"tag":514,"props":7795,"children":7797},{"id":7796},"robust-control-experiments",[7798],{"type":24,"value":7799},"🧪 Robust-control experiments",{"type":18,"tag":248,"props":7801,"children":7802},{},[7803,7818],{"type":18,"tag":252,"props":7804,"children":7805},{},[7806],{"type":18,"tag":256,"props":7807,"children":7808},{},[7809,7813],{"type":18,"tag":260,"props":7810,"children":7811},{},[7812],{"type":24,"value":7359},{"type":18,"tag":260,"props":7814,"children":7815},{},[7816],{"type":24,"value":7817},"What we learn",{"type":18,"tag":271,"props":7819,"children":7820},{},[7821,7834,7847,7860,7873],{"type":18,"tag":256,"props":7822,"children":7823},{},[7824,7829],{"type":18,"tag":278,"props":7825,"children":7826},{},[7827],{"type":24,"value":7828},"Payload shift test",{"type":18,"tag":278,"props":7830,"children":7831},{},[7832],{"type":24,"value":7833},"sensitivity to center-of-mass error",{"type":18,"tag":256,"props":7835,"children":7836},{},[7837,7842],{"type":18,"tag":278,"props":7838,"children":7839},{},[7840],{"type":24,"value":7841},"Fan disturbance test",{"type":18,"tag":278,"props":7843,"children":7844},{},[7845],{"type":24,"value":7846},"disturbance rejection capability",{"type":18,"tag":256,"props":7848,"children":7849},{},[7850,7855],{"type":18,"tag":278,"props":7851,"children":7852},{},[7853],{"type":24,"value":7854},"Thrust coefficient mismatch",{"type":18,"tag":278,"props":7856,"children":7857},{},[7858],{"type":24,"value":7859},"model-error tolerance",{"type":18,"tag":256,"props":7861,"children":7862},{},[7863,7868],{"type":18,"tag":278,"props":7864,"children":7865},{},[7866],{"type":24,"value":7867},"Aggressive attitude transition",{"type":18,"tag":278,"props":7869,"children":7870},{},[7871],{"type":24,"value":7872},"coupling between translation and rotation",{"type":18,"tag":256,"props":7874,"children":7875},{},[7876,7881],{"type":18,"tag":278,"props":7877,"children":7878},{},[7879],{"type":24,"value":7880},"Repeated trajectory learning",{"type":18,"tag":278,"props":7882,"children":7883},{},[7884],{"type":24,"value":7885},"whether systematic errors can be compensated",{"type":18,"tag":137,"props":7887,"children":7888},{},[],{"type":18,"tag":141,"props":7890,"children":7892},{"id":7891},"_3-fault-diagnosis-and-fault-tolerant-control",[7893],{"type":24,"value":7894},"📈 3. Fault Diagnosis and Fault-Tolerant Control",{"type":18,"tag":19,"props":7896,"children":7897},{"align":21},[7898,7899],{"type":24,"value":25},{"type":18,"tag":27,"props":7900,"children":7903},{"src":7901,"alt":7902,"width":30},"assets\u002Ffault_control.svg","Fault diagnosis and fault-tolerant control",[],{"type":18,"tag":19,"props":7905,"children":7906},{},[7907,7909,7914,7916,7921],{"type":24,"value":7908},"Fault control is the final landing point of this project. Because an Omnicopter is over-actuated or geometrically redundant, it provides an excellent platform for studying ",{"type":18,"tag":153,"props":7910,"children":7911},{},[7912],{"type":24,"value":7913},"fault diagnosis",{"type":24,"value":7915}," and ",{"type":18,"tag":153,"props":7917,"children":7918},{},[7919],{"type":24,"value":7920},"fault-tolerant control allocation",{"type":24,"value":159},{"type":18,"tag":514,"props":7923,"children":7925},{"id":7924},"️-faults-we-care-about",[7926],{"type":24,"value":7927},"⚠️ Faults we care about",{"type":18,"tag":248,"props":7929,"children":7930},{},[7931,7952],{"type":18,"tag":252,"props":7932,"children":7933},{},[7934],{"type":18,"tag":256,"props":7935,"children":7936},{},[7937,7942,7947],{"type":18,"tag":260,"props":7938,"children":7939},{},[7940],{"type":24,"value":7941},"Fault type",{"type":18,"tag":260,"props":7943,"children":7944},{},[7945],{"type":24,"value":7946},"Example",{"type":18,"tag":260,"props":7948,"children":7949},{},[7950],{"type":24,"value":7951},"Expected symptom",{"type":18,"tag":271,"props":7953,"children":7954},{},[7955,7973,7991,8009,8027,8045,8063],{"type":18,"tag":256,"props":7956,"children":7957},{},[7958,7963,7968],{"type":18,"tag":278,"props":7959,"children":7960},{},[7961],{"type":24,"value":7962},"Motor loss of effectiveness",{"type":18,"tag":278,"props":7964,"children":7965},{},[7966],{"type":24,"value":7967},"motor produces only 70% thrust",{"type":18,"tag":278,"props":7969,"children":7970},{},[7971],{"type":24,"value":7972},"acceleration smaller than predicted",{"type":18,"tag":256,"props":7974,"children":7975},{},[7976,7981,7986],{"type":18,"tag":278,"props":7977,"children":7978},{},[7979],{"type":24,"value":7980},"ESC reversal failure",{"type":18,"tag":278,"props":7982,"children":7983},{},[7984],{"type":24,"value":7985},"motor cannot switch direction reliably",{"type":18,"tag":278,"props":7987,"children":7988},{},[7989],{"type":24,"value":7990},"large transient error near zero thrust",{"type":18,"tag":256,"props":7992,"children":7993},{},[7994,7999,8004],{"type":18,"tag":278,"props":7995,"children":7996},{},[7997],{"type":24,"value":7998},"Propeller damage",{"type":18,"tag":278,"props":8000,"children":8001},{},[8002],{"type":24,"value":8003},"reduced thrust or increased vibration",{"type":18,"tag":278,"props":8005,"children":8006},{},[8007],{"type":24,"value":8008},"residual bias + vibration signature",{"type":18,"tag":256,"props":8010,"children":8011},{},[8012,8017,8022],{"type":18,"tag":278,"props":8013,"children":8014},{},[8015],{"type":24,"value":8016},"Motor saturation",{"type":18,"tag":278,"props":8018,"children":8019},{},[8020],{"type":24,"value":8021},"command exceeds physical limit",{"type":18,"tag":278,"props":8023,"children":8024},{},[8025],{"type":24,"value":8026},"wrench tracking error",{"type":18,"tag":256,"props":8028,"children":8029},{},[8030,8035,8040],{"type":18,"tag":278,"props":8031,"children":8032},{},[8033],{"type":24,"value":8034},"IMU bias",{"type":18,"tag":278,"props":8036,"children":8037},{},[8038],{"type":24,"value":8039},"wrong acceleration \u002F attitude estimate",{"type":18,"tag":278,"props":8041,"children":8042},{},[8043],{"type":24,"value":8044},"persistent state-estimation residual",{"type":18,"tag":256,"props":8046,"children":8047},{},[8048,8053,8058],{"type":18,"tag":278,"props":8049,"children":8050},{},[8051],{"type":24,"value":8052},"Magnetometer disturbance",{"type":18,"tag":278,"props":8054,"children":8055},{},[8056],{"type":24,"value":8057},"yaw drift",{"type":18,"tag":278,"props":8059,"children":8060},{},[8061],{"type":24,"value":8062},"heading residual",{"type":18,"tag":256,"props":8064,"children":8065},{},[8066,8071,8076],{"type":18,"tag":278,"props":8067,"children":8068},{},[8069],{"type":24,"value":8070},"Battery voltage sag",{"type":18,"tag":278,"props":8072,"children":8073},{},[8074],{"type":24,"value":8075},"reduced maximum thrust",{"type":18,"tag":278,"props":8077,"children":8078},{},[8079],{"type":24,"value":8080},"growing saturation under load",{"type":18,"tag":514,"props":8082,"children":8084},{"id":8083},"fault-diagnosis-idea",[8085],{"type":24,"value":8086},"🔍 Fault diagnosis idea",{"type":18,"tag":19,"props":8088,"children":8089},{},[8090],{"type":24,"value":8091},"Use the model to predict what should happen, then compare it with what actually happens:",{"type":18,"tag":604,"props":8093,"children":8095},{"className":606,"code":8094,"language":24,"meta":8,"style":8},"motor commands\n    ↓\npredicted force \u002F torque\n    ↓\npredicted acceleration \u002F angular acceleration\n    ↓\ncompare with IMU + estimator\n    ↓\nresidual\n    ↓\nfault detection + isolation\n",[8096],{"type":18,"tag":610,"props":8097,"children":8098},{"__ignoreMap":8},[8099,8107,8114,8122,8129,8137,8144,8152,8159,8167,8174],{"type":18,"tag":614,"props":8100,"children":8101},{"class":616,"line":617},[8102],{"type":18,"tag":614,"props":8103,"children":8104},{},[8105],{"type":24,"value":8106},"motor commands\n",{"type":18,"tag":614,"props":8108,"children":8109},{"class":616,"line":626},[8110],{"type":18,"tag":614,"props":8111,"children":8112},{},[8113],{"type":24,"value":2602},{"type":18,"tag":614,"props":8115,"children":8116},{"class":616,"line":635},[8117],{"type":18,"tag":614,"props":8118,"children":8119},{},[8120],{"type":24,"value":8121},"predicted force \u002F torque\n",{"type":18,"tag":614,"props":8123,"children":8124},{"class":616,"line":644},[8125],{"type":18,"tag":614,"props":8126,"children":8127},{},[8128],{"type":24,"value":2602},{"type":18,"tag":614,"props":8130,"children":8131},{"class":616,"line":2620},[8132],{"type":18,"tag":614,"props":8133,"children":8134},{},[8135],{"type":24,"value":8136},"predicted acceleration \u002F angular acceleration\n",{"type":18,"tag":614,"props":8138,"children":8139},{"class":616,"line":2629},[8140],{"type":18,"tag":614,"props":8141,"children":8142},{},[8143],{"type":24,"value":2602},{"type":18,"tag":614,"props":8145,"children":8146},{"class":616,"line":2637},[8147],{"type":18,"tag":614,"props":8148,"children":8149},{},[8150],{"type":24,"value":8151},"compare with IMU + estimator\n",{"type":18,"tag":614,"props":8153,"children":8154},{"class":616,"line":2646},[8155],{"type":18,"tag":614,"props":8156,"children":8157},{},[8158],{"type":24,"value":2602},{"type":18,"tag":614,"props":8160,"children":8161},{"class":616,"line":2654},[8162],{"type":18,"tag":614,"props":8163,"children":8164},{},[8165],{"type":24,"value":8166},"residual\n",{"type":18,"tag":614,"props":8168,"children":8169},{"class":616,"line":4286},[8170],{"type":18,"tag":614,"props":8171,"children":8172},{},[8173],{"type":24,"value":2602},{"type":18,"tag":614,"props":8175,"children":8176},{"class":616,"line":4295},[8177],{"type":18,"tag":614,"props":8178,"children":8179},{},[8180],{"type":24,"value":8181},"fault detection + isolation\n",{"type":18,"tag":19,"props":8183,"children":8184},{},[8185],{"type":24,"value":8186},"A simple residual can be defined as:",{"type":18,"tag":614,"props":8188,"children":8190},{"className":8189},[666],[8191],{"type":18,"tag":614,"props":8192,"children":8194},{"className":8193},[671],[8195,8301],{"type":18,"tag":614,"props":8196,"children":8198},{"className":8197},[676],[8199],{"type":18,"tag":679,"props":8200,"children":8201},{"xmlns":681,"display":682},[8202],{"type":18,"tag":685,"props":8203,"children":8204},{},[8205,8296],{"type":18,"tag":689,"props":8206,"children":8207},{},[8208,8220,8224,8258,8262],{"type":18,"tag":769,"props":8209,"children":8210},{},[8211,8215],{"type":18,"tag":693,"props":8212,"children":8213},{"mathvariant":695},[8214],{"type":24,"value":788},{"type":18,"tag":693,"props":8216,"children":8217},{},[8218],{"type":24,"value":8219},"k",{"type":18,"tag":700,"props":8221,"children":8222},{},[8223],{"type":24,"value":704},{"type":18,"tag":769,"props":8225,"children":8226},{},[8227,8231],{"type":18,"tag":693,"props":8228,"children":8229},{"mathvariant":695},[8230],{"type":24,"value":87},{"type":18,"tag":689,"props":8232,"children":8233},{},[8234,8238,8242,8246,8250,8254],{"type":18,"tag":693,"props":8235,"children":8236},{},[8237],{"type":24,"value":5060},{"type":18,"tag":693,"props":8239,"children":8240},{},[8241],{"type":24,"value":4515},{"type":18,"tag":693,"props":8243,"children":8244},{},[8245],{"type":24,"value":87},{"type":18,"tag":693,"props":8247,"children":8248},{},[8249],{"type":24,"value":4520},{"type":18,"tag":700,"props":8251,"children":8252},{"separator":710},[8253],{"type":24,"value":1515},{"type":18,"tag":693,"props":8255,"children":8256},{},[8257],{"type":24,"value":8219},{"type":18,"tag":700,"props":8259,"children":8260},{},[8261],{"type":24,"value":4810},{"type":18,"tag":769,"props":8263,"children":8264},{},[8265,8269],{"type":18,"tag":693,"props":8266,"children":8267},{"mathvariant":695},[8268],{"type":24,"value":87},{"type":18,"tag":689,"props":8270,"children":8271},{},[8272,8276,8280,8284,8288,8292],{"type":18,"tag":693,"props":8273,"children":8274},{},[8275],{"type":24,"value":19},{"type":18,"tag":693,"props":8277,"children":8278},{},[8279],{"type":24,"value":788},{"type":18,"tag":693,"props":8281,"children":8282},{},[8283],{"type":24,"value":4515},{"type":18,"tag":693,"props":8285,"children":8286},{},[8287],{"type":24,"value":4510},{"type":18,"tag":700,"props":8289,"children":8290},{"separator":710},[8291],{"type":24,"value":1515},{"type":18,"tag":693,"props":8293,"children":8294},{},[8295],{"type":24,"value":8219},{"type":18,"tag":799,"props":8297,"children":8298},{"encoding":801},[8299],{"type":24,"value":8300},"\\mathbf{r}_k = \\mathbf{a}_{meas,k} - \\mathbf{a}_{pred,k}",{"type":18,"tag":614,"props":8302,"children":8304},{"className":8303,"ariaHidden":710},[808],[8305,8384,8492],{"type":18,"tag":614,"props":8306,"children":8308},{"className":8307},[813],[8309,8313,8371,8375,8380],{"type":18,"tag":614,"props":8310,"children":8312},{"className":8311,"style":2301},[818],[],{"type":18,"tag":614,"props":8314,"children":8316},{"className":8315},[824],[8317,8322],{"type":18,"tag":614,"props":8318,"children":8320},{"className":8319},[824,825],[8321],{"type":24,"value":788},{"type":18,"tag":614,"props":8323,"children":8325},{"className":8324},[1019],[8326],{"type":18,"tag":614,"props":8327,"children":8329},{"className":8328},[889,890],[8330,8360],{"type":18,"tag":614,"props":8331,"children":8333},{"className":8332},[895],[8334,8355],{"type":18,"tag":614,"props":8335,"children":8337},{"className":8336,"style":4632},[900],[8338],{"type":18,"tag":614,"props":8339,"children":8340},{"style":1796},[8341,8345],{"type":18,"tag":614,"props":8342,"children":8344},{"className":8343,"style":1041},[910],[],{"type":18,"tag":614,"props":8346,"children":8348},{"className":8347},[1046,1047,870,1048],[8349],{"type":18,"tag":614,"props":8350,"children":8353},{"className":8351,"style":8352},[824,1003,1048],"margin-right:0.0315em;",[8354],{"type":24,"value":8219},{"type":18,"tag":614,"props":8356,"children":8358},{"className":8357},[952],[8359],{"type":24,"value":955},{"type":18,"tag":614,"props":8361,"children":8363},{"className":8362},[895],[8364],{"type":18,"tag":614,"props":8365,"children":8367},{"className":8366,"style":1764},[900],[8368],{"type":18,"tag":614,"props":8369,"children":8370},{},[],{"type":18,"tag":614,"props":8372,"children":8374},{"className":8373,"style":833},[832],[],{"type":18,"tag":614,"props":8376,"children":8378},{"className":8377},[838],[8379],{"type":24,"value":704},{"type":18,"tag":614,"props":8381,"children":8383},{"className":8382,"style":833},[832],[],{"type":18,"tag":614,"props":8385,"children":8387},{"className":8386},[813],[8388,8393,8479,8483,8488],{"type":18,"tag":614,"props":8389,"children":8392},{"className":8390,"style":8391},[818],"height:0.8694em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":8394,"children":8396},{"className":8395},[824],[8397,8402],{"type":18,"tag":614,"props":8398,"children":8400},{"className":8399},[824,825],[8401],{"type":24,"value":87},{"type":18,"tag":614,"props":8403,"children":8405},{"className":8404},[1019],[8406],{"type":18,"tag":614,"props":8407,"children":8409},{"className":8408},[889,890],[8410,8468],{"type":18,"tag":614,"props":8411,"children":8413},{"className":8412},[895],[8414,8463],{"type":18,"tag":614,"props":8415,"children":8417},{"className":8416,"style":4632},[900],[8418],{"type":18,"tag":614,"props":8419,"children":8420},{"style":1796},[8421,8425],{"type":18,"tag":614,"props":8422,"children":8424},{"className":8423,"style":1041},[910],[],{"type":18,"tag":614,"props":8426,"children":8428},{"className":8427},[1046,1047,870,1048],[8429],{"type":18,"tag":614,"props":8430,"children":8432},{"className":8431},[824,1048],[8433,8438,8443,8448,8453,8458],{"type":18,"tag":614,"props":8434,"children":8436},{"className":8435},[824,1003,1048],[8437],{"type":24,"value":5060},{"type":18,"tag":614,"props":8439,"children":8441},{"className":8440},[824,1003,1048],[8442],{"type":24,"value":4515},{"type":18,"tag":614,"props":8444,"children":8446},{"className":8445},[824,1003,1048],[8447],{"type":24,"value":87},{"type":18,"tag":614,"props":8449,"children":8451},{"className":8450},[824,1003,1048],[8452],{"type":24,"value":4520},{"type":18,"tag":614,"props":8454,"children":8456},{"className":8455},[1830,1048],[8457],{"type":24,"value":1515},{"type":18,"tag":614,"props":8459,"children":8461},{"className":8460,"style":8352},[824,1003,1048],[8462],{"type":24,"value":8219},{"type":18,"tag":614,"props":8464,"children":8466},{"className":8465},[952],[8467],{"type":24,"value":955},{"type":18,"tag":614,"props":8469,"children":8471},{"className":8470},[895],[8472],{"type":18,"tag":614,"props":8473,"children":8475},{"className":8474,"style":1087},[900],[8476],{"type":18,"tag":614,"props":8477,"children":8478},{},[],{"type":18,"tag":614,"props":8480,"children":8482},{"className":8481,"style":2065},[832],[],{"type":18,"tag":614,"props":8484,"children":8486},{"className":8485},[2070],[8487],{"type":24,"value":4810},{"type":18,"tag":614,"props":8489,"children":8491},{"className":8490,"style":2065},[832],[],{"type":18,"tag":614,"props":8493,"children":8495},{"className":8494},[813],[8496,8501],{"type":18,"tag":614,"props":8497,"children":8500},{"className":8498,"style":8499},[818],"height:0.7305em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":8502,"children":8504},{"className":8503},[824],[8505,8510],{"type":18,"tag":614,"props":8506,"children":8508},{"className":8507},[824,825],[8509],{"type":24,"value":87},{"type":18,"tag":614,"props":8511,"children":8513},{"className":8512},[1019],[8514],{"type":18,"tag":614,"props":8515,"children":8517},{"className":8516},[889,890],[8518,8576],{"type":18,"tag":614,"props":8519,"children":8521},{"className":8520},[895],[8522,8571],{"type":18,"tag":614,"props":8523,"children":8525},{"className":8524,"style":4632},[900],[8526],{"type":18,"tag":614,"props":8527,"children":8528},{"style":1796},[8529,8533],{"type":18,"tag":614,"props":8530,"children":8532},{"className":8531,"style":1041},[910],[],{"type":18,"tag":614,"props":8534,"children":8536},{"className":8535},[1046,1047,870,1048],[8537],{"type":18,"tag":614,"props":8538,"children":8540},{"className":8539},[824,1048],[8541,8546,8551,8556,8561,8566],{"type":18,"tag":614,"props":8542,"children":8544},{"className":8543},[824,1003,1048],[8545],{"type":24,"value":19},{"type":18,"tag":614,"props":8547,"children":8549},{"className":8548,"style":1062},[824,1003,1048],[8550],{"type":24,"value":788},{"type":18,"tag":614,"props":8552,"children":8554},{"className":8553},[824,1003,1048],[8555],{"type":24,"value":4515},{"type":18,"tag":614,"props":8557,"children":8559},{"className":8558},[824,1003,1048],[8560],{"type":24,"value":4510},{"type":18,"tag":614,"props":8562,"children":8564},{"className":8563},[1830,1048],[8565],{"type":24,"value":1515},{"type":18,"tag":614,"props":8567,"children":8569},{"className":8568,"style":8352},[824,1003,1048],[8570],{"type":24,"value":8219},{"type":18,"tag":614,"props":8572,"children":8574},{"className":8573},[952],[8575],{"type":24,"value":955},{"type":18,"tag":614,"props":8577,"children":8579},{"className":8578},[895],[8580],{"type":18,"tag":614,"props":8581,"children":8583},{"className":8582,"style":1087},[900],[8584],{"type":18,"tag":614,"props":8585,"children":8586},{},[],{"type":18,"tag":19,"props":8588,"children":8589},{},[8590],{"type":24,"value":8591},"or at the wrench level:",{"type":18,"tag":614,"props":8593,"children":8595},{"className":8594},[666],[8596],{"type":18,"tag":614,"props":8597,"children":8599},{"className":8598},[671],[8600,8692],{"type":18,"tag":614,"props":8601,"children":8603},{"className":8602},[676],[8604],{"type":18,"tag":679,"props":8605,"children":8606},{"xmlns":681,"display":682},[8607],{"type":18,"tag":685,"props":8608,"children":8609},{},[8610,8687],{"type":18,"tag":689,"props":8611,"children":8612},{},[8613,8624,8628,8675,8679,8683],{"type":18,"tag":769,"props":8614,"children":8615},{},[8616,8620],{"type":18,"tag":693,"props":8617,"children":8618},{"mathvariant":695},[8619],{"type":24,"value":788},{"type":18,"tag":693,"props":8621,"children":8622},{},[8623],{"type":24,"value":698},{"type":18,"tag":700,"props":8625,"children":8626},{},[8627],{"type":24,"value":704},{"type":18,"tag":769,"props":8629,"children":8630},{},[8631,8635],{"type":18,"tag":693,"props":8632,"children":8633},{"mathvariant":695},[8634],{"type":24,"value":698},{"type":18,"tag":689,"props":8636,"children":8637},{},[8638,8642,8646,8651,8655,8659,8663,8667,8671],{"type":18,"tag":693,"props":8639,"children":8640},{},[8641],{"type":24,"value":4515},{"type":18,"tag":693,"props":8643,"children":8644},{},[8645],{"type":24,"value":4520},{"type":18,"tag":693,"props":8647,"children":8648},{},[8649],{"type":24,"value":8650},"t",{"type":18,"tag":693,"props":8652,"children":8653},{},[8654],{"type":24,"value":1421},{"type":18,"tag":693,"props":8656,"children":8657},{},[8658],{"type":24,"value":5060},{"type":18,"tag":693,"props":8660,"children":8661},{},[8662],{"type":24,"value":87},{"type":18,"tag":693,"props":8664,"children":8665},{},[8666],{"type":24,"value":8650},{"type":18,"tag":693,"props":8668,"children":8669},{},[8670],{"type":24,"value":4515},{"type":18,"tag":693,"props":8672,"children":8673},{},[8674],{"type":24,"value":4510},{"type":18,"tag":700,"props":8676,"children":8677},{},[8678],{"type":24,"value":4810},{"type":18,"tag":693,"props":8680,"children":8681},{},[8682],{"type":24,"value":767},{"type":18,"tag":693,"props":8684,"children":8685},{"mathvariant":695},[8686],{"type":24,"value":3667},{"type":18,"tag":799,"props":8688,"children":8689},{"encoding":801},[8690],{"type":24,"value":8691},"\\mathbf{r}_y = \\mathbf{y}_{estimated} - M\\mathbf{u}",{"type":18,"tag":614,"props":8693,"children":8695},{"className":8694,"ariaHidden":710},[808],[8696,8774,8883],{"type":18,"tag":614,"props":8697,"children":8699},{"className":8698},[813],[8700,8704,8761,8765,8770],{"type":18,"tag":614,"props":8701,"children":8703},{"className":8702,"style":8499},[818],[],{"type":18,"tag":614,"props":8705,"children":8707},{"className":8706},[824],[8708,8713],{"type":18,"tag":614,"props":8709,"children":8711},{"className":8710},[824,825],[8712],{"type":24,"value":788},{"type":18,"tag":614,"props":8714,"children":8716},{"className":8715},[1019],[8717],{"type":18,"tag":614,"props":8718,"children":8720},{"className":8719},[889,890],[8721,8750],{"type":18,"tag":614,"props":8722,"children":8724},{"className":8723},[895],[8725,8745],{"type":18,"tag":614,"props":8726,"children":8728},{"className":8727,"style":1032},[900],[8729],{"type":18,"tag":614,"props":8730,"children":8731},{"style":1796},[8732,8736],{"type":18,"tag":614,"props":8733,"children":8735},{"className":8734,"style":1041},[910],[],{"type":18,"tag":614,"props":8737,"children":8739},{"className":8738},[1046,1047,870,1048],[8740],{"type":18,"tag":614,"props":8741,"children":8743},{"className":8742,"style":5710},[824,1003,1048],[8744],{"type":24,"value":698},{"type":18,"tag":614,"props":8746,"children":8748},{"className":8747},[952],[8749],{"type":24,"value":955},{"type":18,"tag":614,"props":8751,"children":8753},{"className":8752},[895],[8754],{"type":18,"tag":614,"props":8755,"children":8757},{"className":8756,"style":1087},[900],[8758],{"type":18,"tag":614,"props":8759,"children":8760},{},[],{"type":18,"tag":614,"props":8762,"children":8764},{"className":8763,"style":833},[832],[],{"type":18,"tag":614,"props":8766,"children":8768},{"className":8767},[838],[8769],{"type":24,"value":704},{"type":18,"tag":614,"props":8771,"children":8773},{"className":8772,"style":833},[832],[],{"type":18,"tag":614,"props":8775,"children":8777},{"className":8776},[813],[8778,8783,8870,8874,8879],{"type":18,"tag":614,"props":8779,"children":8782},{"className":8780,"style":8781},[818],"height:0.7778em;vertical-align:-0.1944em;",[],{"type":18,"tag":614,"props":8784,"children":8786},{"className":8785},[824],[8787,8792],{"type":18,"tag":614,"props":8788,"children":8790},{"className":8789,"style":826},[824,825],[8791],{"type":24,"value":698},{"type":18,"tag":614,"props":8793,"children":8795},{"className":8794},[1019],[8796],{"type":18,"tag":614,"props":8797,"children":8799},{"className":8798},[889,890],[8800,8859],{"type":18,"tag":614,"props":8801,"children":8803},{"className":8802},[895],[8804,8854],{"type":18,"tag":614,"props":8805,"children":8807},{"className":8806,"style":4632},[900],[8808],{"type":18,"tag":614,"props":8809,"children":8810},{"style":4636},[8811,8815],{"type":18,"tag":614,"props":8812,"children":8814},{"className":8813,"style":1041},[910],[],{"type":18,"tag":614,"props":8816,"children":8818},{"className":8817},[1046,1047,870,1048],[8819],{"type":18,"tag":614,"props":8820,"children":8822},{"className":8821},[824,1048],[8823,8828,8833,8839,8844,8849],{"type":18,"tag":614,"props":8824,"children":8826},{"className":8825},[824,1003,1048],[8827],{"type":24,"value":4660},{"type":18,"tag":614,"props":8829,"children":8831},{"className":8830},[824,1003,1048],[8832],{"type":24,"value":8650},{"type":18,"tag":614,"props":8834,"children":8836},{"className":8835},[824,1003,1048],[8837],{"type":24,"value":8838},"ima",{"type":18,"tag":614,"props":8840,"children":8842},{"className":8841},[824,1003,1048],[8843],{"type":24,"value":8650},{"type":18,"tag":614,"props":8845,"children":8847},{"className":8846},[824,1003,1048],[8848],{"type":24,"value":4515},{"type":18,"tag":614,"props":8850,"children":8852},{"className":8851},[824,1003,1048],[8853],{"type":24,"value":4510},{"type":18,"tag":614,"props":8855,"children":8857},{"className":8856},[952],[8858],{"type":24,"value":955},{"type":18,"tag":614,"props":8860,"children":8862},{"className":8861},[895],[8863],{"type":18,"tag":614,"props":8864,"children":8866},{"className":8865,"style":1764},[900],[8867],{"type":18,"tag":614,"props":8868,"children":8869},{},[],{"type":18,"tag":614,"props":8871,"children":8873},{"className":8872,"style":2065},[832],[],{"type":18,"tag":614,"props":8875,"children":8877},{"className":8876},[2070],[8878],{"type":24,"value":4810},{"type":18,"tag":614,"props":8880,"children":8882},{"className":8881,"style":2065},[832],[],{"type":18,"tag":614,"props":8884,"children":8886},{"className":8885},[813],[8887,8891,8896],{"type":18,"tag":614,"props":8888,"children":8890},{"className":8889,"style":1386},[818],[],{"type":18,"tag":614,"props":8892,"children":8894},{"className":8893,"style":1004},[824,1003],[8895],{"type":24,"value":767},{"type":18,"tag":614,"props":8897,"children":8899},{"className":8898},[824,825],[8900],{"type":24,"value":3667},{"type":18,"tag":19,"props":8902,"children":8903},{},[8904,8906,8911],{"type":24,"value":8905},"The goal is not only to detect that something is wrong, but also to identify ",{"type":18,"tag":153,"props":8907,"children":8908},{},[8909],{"type":24,"value":8910},"which actuator or sensor is responsible",{"type":24,"value":159},{"type":18,"tag":514,"props":8913,"children":8915},{"id":8914},"fault-tolerant-reallocation",[8916],{"type":24,"value":8917},"🧩 Fault-tolerant reallocation",{"type":18,"tag":19,"props":8919,"children":8920},{},[8921],{"type":24,"value":8922},"Once a fault is identified, the allocator can be reconfigured:",{"type":18,"tag":604,"props":8924,"children":8926},{"className":606,"code":8925,"language":24,"meta":8,"style":8},"normal allocation matrix M\n        ↓ fault detected\nmodified allocation matrix M_fault\n        ↓\nnew actuator constraints\n        ↓\nredistributed motor commands\n        ↓\ndegraded but stable flight\n",[8927],{"type":18,"tag":610,"props":8928,"children":8929},{"__ignoreMap":8},[8930,8938,8946,8954,8961,8969,8976,8984,8991],{"type":18,"tag":614,"props":8931,"children":8932},{"class":616,"line":617},[8933],{"type":18,"tag":614,"props":8934,"children":8935},{},[8936],{"type":24,"value":8937},"normal allocation matrix M\n",{"type":18,"tag":614,"props":8939,"children":8940},{"class":616,"line":626},[8941],{"type":18,"tag":614,"props":8942,"children":8943},{},[8944],{"type":24,"value":8945},"        ↓ fault detected\n",{"type":18,"tag":614,"props":8947,"children":8948},{"class":616,"line":635},[8949],{"type":18,"tag":614,"props":8950,"children":8951},{},[8952],{"type":24,"value":8953},"modified allocation matrix M_fault\n",{"type":18,"tag":614,"props":8955,"children":8956},{"class":616,"line":644},[8957],{"type":18,"tag":614,"props":8958,"children":8959},{},[8960],{"type":24,"value":2918},{"type":18,"tag":614,"props":8962,"children":8963},{"class":616,"line":2620},[8964],{"type":18,"tag":614,"props":8965,"children":8966},{},[8967],{"type":24,"value":8968},"new actuator constraints\n",{"type":18,"tag":614,"props":8970,"children":8971},{"class":616,"line":2629},[8972],{"type":18,"tag":614,"props":8973,"children":8974},{},[8975],{"type":24,"value":2918},{"type":18,"tag":614,"props":8977,"children":8978},{"class":616,"line":2637},[8979],{"type":18,"tag":614,"props":8980,"children":8981},{},[8982],{"type":24,"value":8983},"redistributed motor commands\n",{"type":18,"tag":614,"props":8985,"children":8986},{"class":616,"line":2646},[8987],{"type":18,"tag":614,"props":8988,"children":8989},{},[8990],{"type":24,"value":2918},{"type":18,"tag":614,"props":8992,"children":8993},{"class":616,"line":2654},[8994],{"type":18,"tag":614,"props":8995,"children":8996},{},[8997],{"type":24,"value":8998},"degraded but stable flight\n",{"type":18,"tag":19,"props":9000,"children":9001},{},[9002],{"type":24,"value":9003},"For example, if motor 3 loses effectiveness, we can model it as:",{"type":18,"tag":614,"props":9005,"children":9007},{"className":9006},[666],[9008],{"type":18,"tag":614,"props":9009,"children":9011},{"className":9010},[671],[9012,9173],{"type":18,"tag":614,"props":9013,"children":9015},{"className":9014},[676],[9016],{"type":18,"tag":679,"props":9017,"children":9018},{"xmlns":681,"display":682},[9019],{"type":18,"tag":685,"props":9020,"children":9021},{},[9022,9168],{"type":18,"tag":689,"props":9023,"children":9024},{},[9025,9070,9074,9086,9132,9136,9139,9143,9148,9159,9163],{"type":18,"tag":769,"props":9026,"children":9027},{},[9028,9032],{"type":18,"tag":693,"props":9029,"children":9030},{"mathvariant":695},[9031],{"type":24,"value":3667},{"type":18,"tag":689,"props":9033,"children":9034},{},[9035,9039,9044,9048,9052,9056,9061,9065],{"type":18,"tag":693,"props":9036,"children":9037},{},[9038],{"type":24,"value":87},{"type":18,"tag":693,"props":9040,"children":9041},{},[9042],{"type":24,"value":9043},"c",{"type":18,"tag":693,"props":9045,"children":9046},{},[9047],{"type":24,"value":8650},{"type":18,"tag":693,"props":9049,"children":9050},{},[9051],{"type":24,"value":3667},{"type":18,"tag":693,"props":9053,"children":9054},{},[9055],{"type":24,"value":87},{"type":18,"tag":693,"props":9057,"children":9058},{},[9059],{"type":24,"value":9060},"l",{"type":18,"tag":700,"props":9062,"children":9063},{"separator":710},[9064],{"type":24,"value":1515},{"type":18,"tag":4847,"props":9066,"children":9067},{},[9068],{"type":24,"value":9069},"3",{"type":18,"tag":700,"props":9071,"children":9072},{},[9073],{"type":24,"value":704},{"type":18,"tag":769,"props":9075,"children":9076},{},[9077,9082],{"type":18,"tag":693,"props":9078,"children":9079},{},[9080],{"type":24,"value":9081},"α",{"type":18,"tag":4847,"props":9083,"children":9084},{},[9085],{"type":24,"value":9069},{"type":18,"tag":769,"props":9087,"children":9088},{},[9089,9093],{"type":18,"tag":693,"props":9090,"children":9091},{"mathvariant":695},[9092],{"type":24,"value":3667},{"type":18,"tag":689,"props":9094,"children":9095},{},[9096,9100,9104,9108,9112,9116,9120,9124,9128],{"type":18,"tag":693,"props":9097,"children":9098},{},[9099],{"type":24,"value":9043},{"type":18,"tag":693,"props":9101,"children":9102},{},[9103],{"type":24,"value":793},{"type":18,"tag":693,"props":9105,"children":9106},{},[9107],{"type":24,"value":5060},{"type":18,"tag":693,"props":9109,"children":9110},{},[9111],{"type":24,"value":5060},{"type":18,"tag":693,"props":9113,"children":9114},{},[9115],{"type":24,"value":87},{"type":18,"tag":693,"props":9117,"children":9118},{},[9119],{"type":24,"value":4983},{"type":18,"tag":693,"props":9121,"children":9122},{},[9123],{"type":24,"value":4510},{"type":18,"tag":700,"props":9125,"children":9126},{"separator":710},[9127],{"type":24,"value":1515},{"type":18,"tag":4847,"props":9129,"children":9130},{},[9131],{"type":24,"value":9069},{"type":18,"tag":700,"props":9133,"children":9134},{"separator":710},[9135],{"type":24,"value":1515},{"type":18,"tag":832,"props":9137,"children":9138},{"width":718},[],{"type":18,"tag":4847,"props":9140,"children":9141},{},[9142],{"type":24,"value":731},{"type":18,"tag":700,"props":9144,"children":9145},{},[9146],{"type":24,"value":9147},"\u003C",{"type":18,"tag":769,"props":9149,"children":9150},{},[9151,9155],{"type":18,"tag":693,"props":9152,"children":9153},{},[9154],{"type":24,"value":9081},{"type":18,"tag":4847,"props":9156,"children":9157},{},[9158],{"type":24,"value":9069},{"type":18,"tag":700,"props":9160,"children":9161},{},[9162],{"type":24,"value":9147},{"type":18,"tag":4847,"props":9164,"children":9165},{},[9166],{"type":24,"value":9167},"1",{"type":18,"tag":799,"props":9169,"children":9170},{"encoding":801},[9171],{"type":24,"value":9172},"\\mathbf{u}_{actual,3} = \\alpha_3 \\mathbf{u}_{command,3},\n\\quad 0 \u003C \\alpha_3 \u003C 1",{"type":18,"tag":614,"props":9174,"children":9176},{"className":9175,"ariaHidden":710},[808],[9177,9295,9478,9557],{"type":18,"tag":614,"props":9178,"children":9180},{"className":9179},[813],[9181,9185,9282,9286,9291],{"type":18,"tag":614,"props":9182,"children":9184},{"className":9183,"style":8499},[818],[],{"type":18,"tag":614,"props":9186,"children":9188},{"className":9187},[824],[9189,9194],{"type":18,"tag":614,"props":9190,"children":9192},{"className":9191},[824,825],[9193],{"type":24,"value":3667},{"type":18,"tag":614,"props":9195,"children":9197},{"className":9196},[1019],[9198],{"type":18,"tag":614,"props":9199,"children":9201},{"className":9200},[889,890],[9202,9271],{"type":18,"tag":614,"props":9203,"children":9205},{"className":9204},[895],[9206,9266],{"type":18,"tag":614,"props":9207,"children":9209},{"className":9208,"style":4632},[900],[9210],{"type":18,"tag":614,"props":9211,"children":9212},{"style":1796},[9213,9217],{"type":18,"tag":614,"props":9214,"children":9216},{"className":9215,"style":1041},[910],[],{"type":18,"tag":614,"props":9218,"children":9220},{"className":9219},[1046,1047,870,1048],[9221],{"type":18,"tag":614,"props":9222,"children":9224},{"className":9223},[824,1048],[9225,9230,9235,9240,9245,9250,9256,9261],{"type":18,"tag":614,"props":9226,"children":9228},{"className":9227},[824,1003,1048],[9229],{"type":24,"value":87},{"type":18,"tag":614,"props":9231,"children":9233},{"className":9232},[824,1003,1048],[9234],{"type":24,"value":9043},{"type":18,"tag":614,"props":9236,"children":9238},{"className":9237},[824,1003,1048],[9239],{"type":24,"value":8650},{"type":18,"tag":614,"props":9241,"children":9243},{"className":9242},[824,1003,1048],[9244],{"type":24,"value":3667},{"type":18,"tag":614,"props":9246,"children":9248},{"className":9247},[824,1003,1048],[9249],{"type":24,"value":87},{"type":18,"tag":614,"props":9251,"children":9254},{"className":9252,"style":9253},[824,1003,1048],"margin-right:0.0197em;",[9255],{"type":24,"value":9060},{"type":18,"tag":614,"props":9257,"children":9259},{"className":9258},[1830,1048],[9260],{"type":24,"value":1515},{"type":18,"tag":614,"props":9262,"children":9264},{"className":9263},[824,1048],[9265],{"type":24,"value":9069},{"type":18,"tag":614,"props":9267,"children":9269},{"className":9268},[952],[9270],{"type":24,"value":955},{"type":18,"tag":614,"props":9272,"children":9274},{"className":9273},[895],[9275],{"type":18,"tag":614,"props":9276,"children":9278},{"className":9277,"style":1087},[900],[9279],{"type":18,"tag":614,"props":9280,"children":9281},{},[],{"type":18,"tag":614,"props":9283,"children":9285},{"className":9284,"style":833},[832],[],{"type":18,"tag":614,"props":9287,"children":9289},{"className":9288},[838],[9290],{"type":24,"value":704},{"type":18,"tag":614,"props":9292,"children":9294},{"className":9293,"style":833},[832],[],{"type":18,"tag":614,"props":9296,"children":9298},{"className":9297},[813],[9299,9304,9364,9447,9452,9456,9460,9465,9469,9474],{"type":18,"tag":614,"props":9300,"children":9303},{"className":9301,"style":9302},[818],"height:0.9305em;vertical-align:-0.2861em;",[],{"type":18,"tag":614,"props":9305,"children":9307},{"className":9306},[824],[9308,9314],{"type":18,"tag":614,"props":9309,"children":9312},{"className":9310,"style":9311},[824,1003],"margin-right:0.0037em;",[9313],{"type":24,"value":9081},{"type":18,"tag":614,"props":9315,"children":9317},{"className":9316},[1019],[9318],{"type":18,"tag":614,"props":9319,"children":9321},{"className":9320},[889,890],[9322,9353],{"type":18,"tag":614,"props":9323,"children":9325},{"className":9324},[895],[9326,9348],{"type":18,"tag":614,"props":9327,"children":9330},{"className":9328,"style":9329},[900],"height:0.3011em;",[9331],{"type":18,"tag":614,"props":9332,"children":9334},{"style":9333},"top:-2.55em;margin-left:-0.0037em;margin-right:0.05em;",[9335,9339],{"type":18,"tag":614,"props":9336,"children":9338},{"className":9337,"style":1041},[910],[],{"type":18,"tag":614,"props":9340,"children":9342},{"className":9341},[1046,1047,870,1048],[9343],{"type":18,"tag":614,"props":9344,"children":9346},{"className":9345},[824,1048],[9347],{"type":24,"value":9069},{"type":18,"tag":614,"props":9349,"children":9351},{"className":9350},[952],[9352],{"type":24,"value":955},{"type":18,"tag":614,"props":9354,"children":9356},{"className":9355},[895],[9357],{"type":18,"tag":614,"props":9358,"children":9360},{"className":9359,"style":1764},[900],[9361],{"type":18,"tag":614,"props":9362,"children":9363},{},[],{"type":18,"tag":614,"props":9365,"children":9367},{"className":9366},[824],[9368,9373],{"type":18,"tag":614,"props":9369,"children":9371},{"className":9370},[824,825],[9372],{"type":24,"value":3667},{"type":18,"tag":614,"props":9374,"children":9376},{"className":9375},[1019],[9377],{"type":18,"tag":614,"props":9378,"children":9380},{"className":9379},[889,890],[9381,9436],{"type":18,"tag":614,"props":9382,"children":9384},{"className":9383},[895],[9385,9431],{"type":18,"tag":614,"props":9386,"children":9388},{"className":9387,"style":4632},[900],[9389],{"type":18,"tag":614,"props":9390,"children":9391},{"style":1796},[9392,9396],{"type":18,"tag":614,"props":9393,"children":9395},{"className":9394,"style":1041},[910],[],{"type":18,"tag":614,"props":9397,"children":9399},{"className":9398},[1046,1047,870,1048],[9400],{"type":18,"tag":614,"props":9401,"children":9403},{"className":9402},[824,1048],[9404,9410,9416,9421,9426],{"type":18,"tag":614,"props":9405,"children":9407},{"className":9406},[824,1003,1048],[9408],{"type":24,"value":9409},"co",{"type":18,"tag":614,"props":9411,"children":9413},{"className":9412},[824,1003,1048],[9414],{"type":24,"value":9415},"mman",{"type":18,"tag":614,"props":9417,"children":9419},{"className":9418},[824,1003,1048],[9420],{"type":24,"value":4510},{"type":18,"tag":614,"props":9422,"children":9424},{"className":9423},[1830,1048],[9425],{"type":24,"value":1515},{"type":18,"tag":614,"props":9427,"children":9429},{"className":9428},[824,1048],[9430],{"type":24,"value":9069},{"type":18,"tag":614,"props":9432,"children":9434},{"className":9433},[952],[9435],{"type":24,"value":955},{"type":18,"tag":614,"props":9437,"children":9439},{"className":9438},[895],[9440],{"type":18,"tag":614,"props":9441,"children":9443},{"className":9442,"style":1087},[900],[9444],{"type":18,"tag":614,"props":9445,"children":9446},{},[],{"type":18,"tag":614,"props":9448,"children":9450},{"className":9449},[1830],[9451],{"type":24,"value":1515},{"type":18,"tag":614,"props":9453,"children":9455},{"className":9454,"style":5353},[832],[],{"type":18,"tag":614,"props":9457,"children":9459},{"className":9458,"style":1706},[832],[],{"type":18,"tag":614,"props":9461,"children":9463},{"className":9462},[824],[9464],{"type":24,"value":731},{"type":18,"tag":614,"props":9466,"children":9468},{"className":9467,"style":833},[832],[],{"type":18,"tag":614,"props":9470,"children":9472},{"className":9471},[838],[9473],{"type":24,"value":9147},{"type":18,"tag":614,"props":9475,"children":9477},{"className":9476,"style":833},[832],[],{"type":18,"tag":614,"props":9479,"children":9481},{"className":9480},[813],[9482,9487,9544,9548,9553],{"type":18,"tag":614,"props":9483,"children":9486},{"className":9484,"style":9485},[818],"height:0.6891em;vertical-align:-0.15em;",[],{"type":18,"tag":614,"props":9488,"children":9490},{"className":9489},[824],[9491,9496],{"type":18,"tag":614,"props":9492,"children":9494},{"className":9493,"style":9311},[824,1003],[9495],{"type":24,"value":9081},{"type":18,"tag":614,"props":9497,"children":9499},{"className":9498},[1019],[9500],{"type":18,"tag":614,"props":9501,"children":9503},{"className":9502},[889,890],[9504,9533],{"type":18,"tag":614,"props":9505,"children":9507},{"className":9506},[895],[9508,9528],{"type":18,"tag":614,"props":9509,"children":9511},{"className":9510,"style":9329},[900],[9512],{"type":18,"tag":614,"props":9513,"children":9514},{"style":9333},[9515,9519],{"type":18,"tag":614,"props":9516,"children":9518},{"className":9517,"style":1041},[910],[],{"type":18,"tag":614,"props":9520,"children":9522},{"className":9521},[1046,1047,870,1048],[9523],{"type":18,"tag":614,"props":9524,"children":9526},{"className":9525},[824,1048],[9527],{"type":24,"value":9069},{"type":18,"tag":614,"props":9529,"children":9531},{"className":9530},[952],[9532],{"type":24,"value":955},{"type":18,"tag":614,"props":9534,"children":9536},{"className":9535},[895],[9537],{"type":18,"tag":614,"props":9538,"children":9540},{"className":9539,"style":1764},[900],[9541],{"type":18,"tag":614,"props":9542,"children":9543},{},[],{"type":18,"tag":614,"props":9545,"children":9547},{"className":9546,"style":833},[832],[],{"type":18,"tag":614,"props":9549,"children":9551},{"className":9550},[838],[9552],{"type":24,"value":9147},{"type":18,"tag":614,"props":9554,"children":9556},{"className":9555,"style":833},[832],[],{"type":18,"tag":614,"props":9558,"children":9560},{"className":9559},[813],[9561,9566],{"type":18,"tag":614,"props":9562,"children":9565},{"className":9563,"style":9564},[818],"height:0.6444em;",[],{"type":18,"tag":614,"props":9567,"children":9569},{"className":9568},[824],[9570],{"type":24,"value":9167},{"type":18,"tag":19,"props":9572,"children":9573},{},[9574],{"type":24,"value":9575},"Then the allocator should avoid relying too much on motor 3 and redistribute the remaining wrench among healthy motors.",{"type":18,"tag":514,"props":9577,"children":9579},{"id":9578},"fault-control-experiments",[9580],{"type":24,"value":9581},"🧪 Fault-control experiments",{"type":18,"tag":248,"props":9583,"children":9584},{},[9585,9605],{"type":18,"tag":252,"props":9586,"children":9587},{},[9588],{"type":18,"tag":256,"props":9589,"children":9590},{},[9591,9596,9600],{"type":18,"tag":260,"props":9592,"children":9593},{},[9594],{"type":24,"value":9595},"Stage",{"type":18,"tag":260,"props":9597,"children":9598},{},[9599],{"type":24,"value":7359},{"type":18,"tag":260,"props":9601,"children":9602},{},[9603],{"type":24,"value":9604},"Safety level",{"type":18,"tag":271,"props":9606,"children":9607},{},[9608,9626,9643,9661,9679],{"type":18,"tag":256,"props":9609,"children":9610},{},[9611,9616,9621],{"type":18,"tag":278,"props":9612,"children":9613},{},[9614],{"type":24,"value":9615},"Simulation",{"type":18,"tag":278,"props":9617,"children":9618},{},[9619],{"type":24,"value":9620},"inject motor scaling faults",{"type":18,"tag":278,"props":9622,"children":9623},{},[9624],{"type":24,"value":9625},"safe",{"type":18,"tag":256,"props":9627,"children":9628},{},[9629,9634,9639],{"type":18,"tag":278,"props":9630,"children":9631},{},[9632],{"type":24,"value":9633},"Bench test",{"type":18,"tag":278,"props":9635,"children":9636},{},[9637],{"type":24,"value":9638},"command-limited motor degradation",{"type":18,"tag":278,"props":9640,"children":9641},{},[9642],{"type":24,"value":9625},{"type":18,"tag":256,"props":9644,"children":9645},{},[9646,9651,9656],{"type":18,"tag":278,"props":9647,"children":9648},{},[9649],{"type":24,"value":9650},"Tethered flight",{"type":18,"tag":278,"props":9652,"children":9653},{},[9654],{"type":24,"value":9655},"reduced authority on one motor",{"type":18,"tag":278,"props":9657,"children":9658},{},[9659],{"type":24,"value":9660},"medium",{"type":18,"tag":256,"props":9662,"children":9663},{},[9664,9669,9674],{"type":18,"tag":278,"props":9665,"children":9666},{},[9667],{"type":24,"value":9668},"Free flight",{"type":18,"tag":278,"props":9670,"children":9671},{},[9672],{"type":24,"value":9673},"mild degradation with recovery",{"type":18,"tag":278,"props":9675,"children":9676},{},[9677],{"type":24,"value":9678},"high caution",{"type":18,"tag":256,"props":9680,"children":9681},{},[9682,9687,9692],{"type":18,"tag":278,"props":9683,"children":9684},{},[9685],{"type":24,"value":9686},"Comparative study",{"type":18,"tag":278,"props":9688,"children":9689},{},[9690],{"type":24,"value":9691},"ETH vs Lynchpin fault tolerance",{"type":18,"tag":278,"props":9693,"children":9694},{},[9695],{"type":24,"value":9696},"analysis + simulation first",{"type":18,"tag":137,"props":9698,"children":9699},{},[],{"type":18,"tag":141,"props":9701,"children":9703},{"id":9702},"experiment-plan",[9704],{"type":24,"value":9705},"🧪 Experiment Plan",{"type":18,"tag":514,"props":9707,"children":9709},{"id":9708},"phase-1-safe-hardware-validation",[9710],{"type":24,"value":9711},"Phase 1 — Safe hardware validation",{"type":18,"tag":173,"props":9713,"children":9714},{},[9715,9720,9725,9730],{"type":18,"tag":177,"props":9716,"children":9717},{},[9718],{"type":24,"value":9719},"Verify motor order and thrust directions.",{"type":18,"tag":177,"props":9721,"children":9722},{},[9723],{"type":24,"value":9724},"Confirm ESC 3D \u002F bidirectional mode behavior.",{"type":18,"tag":177,"props":9726,"children":9727},{},[9728],{"type":24,"value":9729},"Check vibration, current draw, and thermal behavior.",{"type":18,"tag":177,"props":9731,"children":9732},{},[9733],{"type":24,"value":9734},"Record motor command, RPM\u002Fcurrent if available, IMU data, and battery voltage.",{"type":18,"tag":514,"props":9736,"children":9738},{"id":9737},"phase-2-model-identification",[9739],{"type":24,"value":9740},"Phase 2 — Model identification",{"type":18,"tag":173,"props":9742,"children":9743},{},[9744,9792,9797,9802],{"type":18,"tag":177,"props":9745,"children":9746},{},[9747,9749,9791],{"type":24,"value":9748},"Measure geometry and build ",{"type":18,"tag":614,"props":9750,"children":9752},{"className":9751},[671],[9753,9774],{"type":18,"tag":614,"props":9754,"children":9756},{"className":9755},[676],[9757],{"type":18,"tag":679,"props":9758,"children":9759},{"xmlns":681},[9760],{"type":18,"tag":685,"props":9761,"children":9762},{},[9763,9770],{"type":18,"tag":689,"props":9764,"children":9765},{},[9766],{"type":18,"tag":693,"props":9767,"children":9768},{},[9769],{"type":24,"value":767},{"type":18,"tag":799,"props":9771,"children":9772},{"encoding":801},[9773],{"type":24,"value":767},{"type":18,"tag":614,"props":9775,"children":9777},{"className":9776,"ariaHidden":710},[808],[9778],{"type":18,"tag":614,"props":9779,"children":9781},{"className":9780},[813],[9782,9786],{"type":18,"tag":614,"props":9783,"children":9785},{"className":9784,"style":1386},[818],[],{"type":18,"tag":614,"props":9787,"children":9789},{"className":9788,"style":1004},[824,1003],[9790],{"type":24,"value":767},{"type":24,"value":159},{"type":18,"tag":177,"props":9793,"children":9794},{},[9795],{"type":24,"value":9796},"Estimate thrust coefficients.",{"type":18,"tag":177,"props":9798,"children":9799},{},[9800],{"type":24,"value":9801},"Identify actuator delay and reversal timing.",{"type":18,"tag":177,"props":9803,"children":9804},{},[9805],{"type":24,"value":9806},"Validate predicted acceleration against logs.",{"type":18,"tag":514,"props":9808,"children":9810},{"id":9809},"phase-3-control-allocation",[9811],{"type":24,"value":9812},"Phase 3 — Control allocation",{"type":18,"tag":173,"props":9814,"children":9815},{},[9816,9821,9826,9831],{"type":18,"tag":177,"props":9817,"children":9818},{},[9819],{"type":24,"value":9820},"Implement pseudo-inverse allocation as baseline.",{"type":18,"tag":177,"props":9822,"children":9823},{},[9824],{"type":24,"value":9825},"Implement constrained QP allocation.",{"type":18,"tag":177,"props":9827,"children":9828},{},[9829],{"type":24,"value":9830},"Add saturation and rate-limit handling.",{"type":18,"tag":177,"props":9832,"children":9833},{},[9834],{"type":24,"value":9835},"Add reversal penalty and energy penalty.",{"type":18,"tag":514,"props":9837,"children":9839},{"id":9838},"phase-4-robust-control",[9840],{"type":24,"value":9841},"Phase 4 — Robust control",{"type":18,"tag":173,"props":9843,"children":9844},{},[9845,9850,9855],{"type":18,"tag":177,"props":9846,"children":9847},{},[9848],{"type":24,"value":9849},"Add disturbance observer or robust feedback layer.",{"type":18,"tag":177,"props":9851,"children":9852},{},[9853],{"type":24,"value":9854},"Test against payload shift and external disturbance.",{"type":18,"tag":177,"props":9856,"children":9857},{},[9858],{"type":24,"value":9859},"Compare nominal controller vs. robust controller.",{"type":18,"tag":514,"props":9861,"children":9863},{"id":9862},"phase-5-fault-diagnosis-and-recovery",[9864],{"type":24,"value":9865},"Phase 5 — Fault diagnosis and recovery",{"type":18,"tag":173,"props":9867,"children":9868},{},[9869,9874,9879,9884],{"type":18,"tag":177,"props":9870,"children":9871},{},[9872],{"type":24,"value":9873},"Design residual generator.",{"type":18,"tag":177,"props":9875,"children":9876},{},[9877],{"type":24,"value":9878},"Inject software faults in simulation.",{"type":18,"tag":177,"props":9880,"children":9881},{},[9882],{"type":24,"value":9883},"Validate detection thresholds.",{"type":18,"tag":177,"props":9885,"children":9886},{},[9887],{"type":24,"value":9888},"Reconfigure allocation after detected faults.",{"type":18,"tag":137,"props":9890,"children":9891},{},[],{"type":18,"tag":141,"props":9893,"children":9895},{"id":9894},"suggested-repository-structure",[9896],{"type":24,"value":9897},"🧰 Suggested Repository Structure",{"type":18,"tag":19,"props":9899,"children":9900},{},[9901],{"type":24,"value":9902},"Inspired by robotics course\u002Fproject repositories, this repository should separate documentation, hardware, control code, simulation, experiments, and references.",{"type":18,"tag":604,"props":9904,"children":9906},{"className":606,"code":9905,"language":24,"meta":8,"style":8},"omnicopter-control-research\u002F\n├── README.md\n├── assets\u002F\n│   ├── omnicopter_banner.svg\n│   ├── eth_cube_geometry.svg\n│   ├── lynchpin_geometry.svg\n│   ├── control_stack.svg\n│   ├── fault_control.svg\n│   ├── research_roadmap.svg\n│   ├── hardware_prototype.jpg\n│   └── bench_test_thumbnail.jpg\n├── docs\u002F\n│   ├── eth_configuration.md\n│   ├── lynchpin_configuration.md\n│   ├── modeling_notes.md\n│   ├── control_allocation.md\n│   ├── robust_control.md\n│   ├── fault_diagnosis.md\n│   ├── experiment_logbook.md\n│   └── image_generation_prompts.md\n├── hardware\u002F\n│   ├── bom.md\n│   ├── wiring.md\n│   ├── esc_configuration.md\n│   ├── safety_checklist.md\n│   └── cad\u002F\n├── firmware\u002F\n│   ├── px4_notes.md\n│   ├── ardupilot_notes.md\n│   └── parameters\u002F\n├── simulation\u002F\n│   ├── gazebo\u002F\n│   ├── matlab\u002F\n│   └── python\u002F\n├── control\u002F\n│   ├── allocation\u002F\n│   ├── mpc\u002F\n│   ├── robust_control\u002F\n│   └── fault_tolerant_control\u002F\n├── experiments\u002F\n│   ├── bench_tests\u002F\n│   ├── tethered_tests\u002F\n│   ├── flight_tests\u002F\n│   └── fault_injection\u002F\n└── references\u002F\n    ├── papers.md\n    └── links.md\n",[9907],{"type":18,"tag":610,"props":9908,"children":9909},{"__ignoreMap":8},[9910,9918,9926,9934,9942,9950,9958,9966,9974,9982,9990,9998,10006,10014,10022,10030,10038,10046,10055,10064,10073,10082,10091,10100,10109,10118,10127,10136,10145,10154,10163,10172,10181,10190,10199,10208,10217,10226,10235,10244,10253,10262,10271,10280,10289,10298,10307],{"type":18,"tag":614,"props":9911,"children":9912},{"class":616,"line":617},[9913],{"type":18,"tag":614,"props":9914,"children":9915},{},[9916],{"type":24,"value":9917},"omnicopter-control-research\u002F\n",{"type":18,"tag":614,"props":9919,"children":9920},{"class":616,"line":626},[9921],{"type":18,"tag":614,"props":9922,"children":9923},{},[9924],{"type":24,"value":9925},"├── README.md\n",{"type":18,"tag":614,"props":9927,"children":9928},{"class":616,"line":635},[9929],{"type":18,"tag":614,"props":9930,"children":9931},{},[9932],{"type":24,"value":9933},"├── assets\u002F\n",{"type":18,"tag":614,"props":9935,"children":9936},{"class":616,"line":644},[9937],{"type":18,"tag":614,"props":9938,"children":9939},{},[9940],{"type":24,"value":9941},"│   ├── omnicopter_banner.svg\n",{"type":18,"tag":614,"props":9943,"children":9944},{"class":616,"line":2620},[9945],{"type":18,"tag":614,"props":9946,"children":9947},{},[9948],{"type":24,"value":9949},"│   ├── eth_cube_geometry.svg\n",{"type":18,"tag":614,"props":9951,"children":9952},{"class":616,"line":2629},[9953],{"type":18,"tag":614,"props":9954,"children":9955},{},[9956],{"type":24,"value":9957},"│   ├── lynchpin_geometry.svg\n",{"type":18,"tag":614,"props":9959,"children":9960},{"class":616,"line":2637},[9961],{"type":18,"tag":614,"props":9962,"children":9963},{},[9964],{"type":24,"value":9965},"│   ├── control_stack.svg\n",{"type":18,"tag":614,"props":9967,"children":9968},{"class":616,"line":2646},[9969],{"type":18,"tag":614,"props":9970,"children":9971},{},[9972],{"type":24,"value":9973},"│   ├── fault_control.svg\n",{"type":18,"tag":614,"props":9975,"children":9976},{"class":616,"line":2654},[9977],{"type":18,"tag":614,"props":9978,"children":9979},{},[9980],{"type":24,"value":9981},"│   ├── research_roadmap.svg\n",{"type":18,"tag":614,"props":9983,"children":9984},{"class":616,"line":4286},[9985],{"type":18,"tag":614,"props":9986,"children":9987},{},[9988],{"type":24,"value":9989},"│   ├── hardware_prototype.jpg\n",{"type":18,"tag":614,"props":9991,"children":9992},{"class":616,"line":4295},[9993],{"type":18,"tag":614,"props":9994,"children":9995},{},[9996],{"type":24,"value":9997},"│   └── bench_test_thumbnail.jpg\n",{"type":18,"tag":614,"props":9999,"children":10000},{"class":616,"line":4304},[10001],{"type":18,"tag":614,"props":10002,"children":10003},{},[10004],{"type":24,"value":10005},"├── docs\u002F\n",{"type":18,"tag":614,"props":10007,"children":10008},{"class":616,"line":4312},[10009],{"type":18,"tag":614,"props":10010,"children":10011},{},[10012],{"type":24,"value":10013},"│   ├── eth_configuration.md\n",{"type":18,"tag":614,"props":10015,"children":10016},{"class":616,"line":4321},[10017],{"type":18,"tag":614,"props":10018,"children":10019},{},[10020],{"type":24,"value":10021},"│   ├── lynchpin_configuration.md\n",{"type":18,"tag":614,"props":10023,"children":10024},{"class":616,"line":4330},[10025],{"type":18,"tag":614,"props":10026,"children":10027},{},[10028],{"type":24,"value":10029},"│   ├── modeling_notes.md\n",{"type":18,"tag":614,"props":10031,"children":10032},{"class":616,"line":4338},[10033],{"type":18,"tag":614,"props":10034,"children":10035},{},[10036],{"type":24,"value":10037},"│   ├── control_allocation.md\n",{"type":18,"tag":614,"props":10039,"children":10040},{"class":616,"line":4347},[10041],{"type":18,"tag":614,"props":10042,"children":10043},{},[10044],{"type":24,"value":10045},"│   ├── robust_control.md\n",{"type":18,"tag":614,"props":10047,"children":10049},{"class":616,"line":10048},18,[10050],{"type":18,"tag":614,"props":10051,"children":10052},{},[10053],{"type":24,"value":10054},"│   ├── fault_diagnosis.md\n",{"type":18,"tag":614,"props":10056,"children":10058},{"class":616,"line":10057},19,[10059],{"type":18,"tag":614,"props":10060,"children":10061},{},[10062],{"type":24,"value":10063},"│   ├── experiment_logbook.md\n",{"type":18,"tag":614,"props":10065,"children":10067},{"class":616,"line":10066},20,[10068],{"type":18,"tag":614,"props":10069,"children":10070},{},[10071],{"type":24,"value":10072},"│   └── image_generation_prompts.md\n",{"type":18,"tag":614,"props":10074,"children":10076},{"class":616,"line":10075},21,[10077],{"type":18,"tag":614,"props":10078,"children":10079},{},[10080],{"type":24,"value":10081},"├── hardware\u002F\n",{"type":18,"tag":614,"props":10083,"children":10085},{"class":616,"line":10084},22,[10086],{"type":18,"tag":614,"props":10087,"children":10088},{},[10089],{"type":24,"value":10090},"│   ├── bom.md\n",{"type":18,"tag":614,"props":10092,"children":10094},{"class":616,"line":10093},23,[10095],{"type":18,"tag":614,"props":10096,"children":10097},{},[10098],{"type":24,"value":10099},"│   ├── wiring.md\n",{"type":18,"tag":614,"props":10101,"children":10103},{"class":616,"line":10102},24,[10104],{"type":18,"tag":614,"props":10105,"children":10106},{},[10107],{"type":24,"value":10108},"│   ├── esc_configuration.md\n",{"type":18,"tag":614,"props":10110,"children":10112},{"class":616,"line":10111},25,[10113],{"type":18,"tag":614,"props":10114,"children":10115},{},[10116],{"type":24,"value":10117},"│   ├── safety_checklist.md\n",{"type":18,"tag":614,"props":10119,"children":10121},{"class":616,"line":10120},26,[10122],{"type":18,"tag":614,"props":10123,"children":10124},{},[10125],{"type":24,"value":10126},"│   └── cad\u002F\n",{"type":18,"tag":614,"props":10128,"children":10130},{"class":616,"line":10129},27,[10131],{"type":18,"tag":614,"props":10132,"children":10133},{},[10134],{"type":24,"value":10135},"├── firmware\u002F\n",{"type":18,"tag":614,"props":10137,"children":10139},{"class":616,"line":10138},28,[10140],{"type":18,"tag":614,"props":10141,"children":10142},{},[10143],{"type":24,"value":10144},"│   ├── px4_notes.md\n",{"type":18,"tag":614,"props":10146,"children":10148},{"class":616,"line":10147},29,[10149],{"type":18,"tag":614,"props":10150,"children":10151},{},[10152],{"type":24,"value":10153},"│   ├── ardupilot_notes.md\n",{"type":18,"tag":614,"props":10155,"children":10157},{"class":616,"line":10156},30,[10158],{"type":18,"tag":614,"props":10159,"children":10160},{},[10161],{"type":24,"value":10162},"│   └── parameters\u002F\n",{"type":18,"tag":614,"props":10164,"children":10166},{"class":616,"line":10165},31,[10167],{"type":18,"tag":614,"props":10168,"children":10169},{},[10170],{"type":24,"value":10171},"├── simulation\u002F\n",{"type":18,"tag":614,"props":10173,"children":10175},{"class":616,"line":10174},32,[10176],{"type":18,"tag":614,"props":10177,"children":10178},{},[10179],{"type":24,"value":10180},"│   ├── gazebo\u002F\n",{"type":18,"tag":614,"props":10182,"children":10184},{"class":616,"line":10183},33,[10185],{"type":18,"tag":614,"props":10186,"children":10187},{},[10188],{"type":24,"value":10189},"│   ├── matlab\u002F\n",{"type":18,"tag":614,"props":10191,"children":10193},{"class":616,"line":10192},34,[10194],{"type":18,"tag":614,"props":10195,"children":10196},{},[10197],{"type":24,"value":10198},"│   └── python\u002F\n",{"type":18,"tag":614,"props":10200,"children":10202},{"class":616,"line":10201},35,[10203],{"type":18,"tag":614,"props":10204,"children":10205},{},[10206],{"type":24,"value":10207},"├── control\u002F\n",{"type":18,"tag":614,"props":10209,"children":10211},{"class":616,"line":10210},36,[10212],{"type":18,"tag":614,"props":10213,"children":10214},{},[10215],{"type":24,"value":10216},"│   ├── allocation\u002F\n",{"type":18,"tag":614,"props":10218,"children":10220},{"class":616,"line":10219},37,[10221],{"type":18,"tag":614,"props":10222,"children":10223},{},[10224],{"type":24,"value":10225},"│   ├── mpc\u002F\n",{"type":18,"tag":614,"props":10227,"children":10229},{"class":616,"line":10228},38,[10230],{"type":18,"tag":614,"props":10231,"children":10232},{},[10233],{"type":24,"value":10234},"│   ├── robust_control\u002F\n",{"type":18,"tag":614,"props":10236,"children":10238},{"class":616,"line":10237},39,[10239],{"type":18,"tag":614,"props":10240,"children":10241},{},[10242],{"type":24,"value":10243},"│   └── fault_tolerant_control\u002F\n",{"type":18,"tag":614,"props":10245,"children":10247},{"class":616,"line":10246},40,[10248],{"type":18,"tag":614,"props":10249,"children":10250},{},[10251],{"type":24,"value":10252},"├── experiments\u002F\n",{"type":18,"tag":614,"props":10254,"children":10256},{"class":616,"line":10255},41,[10257],{"type":18,"tag":614,"props":10258,"children":10259},{},[10260],{"type":24,"value":10261},"│   ├── bench_tests\u002F\n",{"type":18,"tag":614,"props":10263,"children":10265},{"class":616,"line":10264},42,[10266],{"type":18,"tag":614,"props":10267,"children":10268},{},[10269],{"type":24,"value":10270},"│   ├── tethered_tests\u002F\n",{"type":18,"tag":614,"props":10272,"children":10274},{"class":616,"line":10273},43,[10275],{"type":18,"tag":614,"props":10276,"children":10277},{},[10278],{"type":24,"value":10279},"│   ├── flight_tests\u002F\n",{"type":18,"tag":614,"props":10281,"children":10283},{"class":616,"line":10282},44,[10284],{"type":18,"tag":614,"props":10285,"children":10286},{},[10287],{"type":24,"value":10288},"│   └── fault_injection\u002F\n",{"type":18,"tag":614,"props":10290,"children":10292},{"class":616,"line":10291},45,[10293],{"type":18,"tag":614,"props":10294,"children":10295},{},[10296],{"type":24,"value":10297},"└── references\u002F\n",{"type":18,"tag":614,"props":10299,"children":10301},{"class":616,"line":10300},46,[10302],{"type":18,"tag":614,"props":10303,"children":10304},{},[10305],{"type":24,"value":10306},"    ├── papers.md\n",{"type":18,"tag":614,"props":10308,"children":10310},{"class":616,"line":10309},47,[10311],{"type":18,"tag":614,"props":10312,"children":10313},{},[10314],{"type":24,"value":10315},"    └── links.md\n",{"type":18,"tag":137,"props":10317,"children":10318},{},[],{"type":18,"tag":141,"props":10320,"children":10322},{"id":10321},"safety-rules",[10323],{"type":24,"value":10324},"✅ Safety Rules",{"type":18,"tag":19,"props":10326,"children":10327},{},[10328],{"type":24,"value":10329},"Omnicopters are experimental aerial vehicles with bidirectional thrust. Treat every test as high-risk.",{"type":18,"tag":173,"props":10331,"children":10332},{},[10333,10338,10343,10348,10353,10358,10363,10368],{"type":18,"tag":177,"props":10334,"children":10335},{},[10336],{"type":24,"value":10337},"🧤 Remove propellers during firmware, ESC, and motor-order tests.",{"type":18,"tag":177,"props":10339,"children":10340},{},[10341],{"type":24,"value":10342},"🧯 Keep a fire-safe LiPo charging and storage setup.",{"type":18,"tag":177,"props":10344,"children":10345},{},[10346],{"type":24,"value":10347},"🛑 Use a physical kill switch and a clear emergency stop procedure.",{"type":18,"tag":177,"props":10349,"children":10350},{},[10351],{"type":24,"value":10352},"🧍 Keep all people outside the propeller disk danger zone.",{"type":18,"tag":177,"props":10354,"children":10355},{},[10356],{"type":24,"value":10357},"🪢 Use tethered tests before free flight.",{"type":18,"tag":177,"props":10359,"children":10360},{},[10361],{"type":24,"value":10362},"🔋 Monitor battery voltage, current, and motor temperature.",{"type":18,"tag":177,"props":10364,"children":10365},{},[10366],{"type":24,"value":10367},"🧪 Test one change at a time and log everything.",{"type":18,"tag":177,"props":10369,"children":10370},{},[10371],{"type":24,"value":10372},"📝 Write down the exact firmware version, parameter file, and hardware configuration for each test.",{"type":18,"tag":137,"props":10374,"children":10375},{},[],{"type":18,"tag":141,"props":10377,"children":10379},{"id":10378},"evaluation-metrics",[10380],{"type":24,"value":10381},"📊 Evaluation Metrics",{"type":18,"tag":248,"props":10383,"children":10384},{},[10385,10400],{"type":18,"tag":252,"props":10386,"children":10387},{},[10388],{"type":18,"tag":256,"props":10389,"children":10390},{},[10391,10396],{"type":18,"tag":260,"props":10392,"children":10393},{},[10394],{"type":24,"value":10395},"Category",{"type":18,"tag":260,"props":10397,"children":10398},{},[10399],{"type":24,"value":7364},{"type":18,"tag":271,"props":10401,"children":10402},{},[10403,10416,10429,10442,10455,10468,10481],{"type":18,"tag":256,"props":10404,"children":10405},{},[10406,10411],{"type":18,"tag":278,"props":10407,"children":10408},{},[10409],{"type":24,"value":10410},"Tracking",{"type":18,"tag":278,"props":10412,"children":10413},{},[10414],{"type":24,"value":10415},"position RMS error, attitude RMS error, max error",{"type":18,"tag":256,"props":10417,"children":10418},{},[10419,10424],{"type":18,"tag":278,"props":10420,"children":10421},{},[10422],{"type":24,"value":10423},"Allocation",{"type":18,"tag":278,"props":10425,"children":10426},{},[10427],{"type":24,"value":10428},"wrench error, saturation count, reversal count",{"type":18,"tag":256,"props":10430,"children":10431},{},[10432,10437],{"type":18,"tag":278,"props":10433,"children":10434},{},[10435],{"type":24,"value":10436},"Efficiency",{"type":18,"tag":278,"props":10438,"children":10439},{},[10440],{"type":24,"value":10441},"average current, estimated power, thermal load",{"type":18,"tag":256,"props":10443,"children":10444},{},[10445,10450],{"type":18,"tag":278,"props":10446,"children":10447},{},[10448],{"type":24,"value":10449},"Robustness",{"type":18,"tag":278,"props":10451,"children":10452},{},[10453],{"type":24,"value":10454},"disturbance rejection time, overshoot, steady-state error",{"type":18,"tag":256,"props":10456,"children":10457},{},[10458,10463],{"type":18,"tag":278,"props":10459,"children":10460},{},[10461],{"type":24,"value":10462},"Fault diagnosis",{"type":18,"tag":278,"props":10464,"children":10465},{},[10466],{"type":24,"value":10467},"detection delay, false positive rate, isolation accuracy",{"type":18,"tag":256,"props":10469,"children":10470},{},[10471,10476],{"type":18,"tag":278,"props":10472,"children":10473},{},[10474],{"type":24,"value":10475},"Fault tolerance",{"type":18,"tag":278,"props":10477,"children":10478},{},[10479],{"type":24,"value":10480},"stable recovery time, residual tracking performance",{"type":18,"tag":256,"props":10482,"children":10483},{},[10484,10489],{"type":18,"tag":278,"props":10485,"children":10486},{},[10487],{"type":24,"value":10488},"Safety",{"type":18,"tag":278,"props":10490,"children":10491},{},[10492],{"type":24,"value":10493},"number of aborted tests, failsafe trigger correctness",{"type":18,"tag":137,"props":10495,"children":10496},{},[],{"type":18,"tag":141,"props":10498,"children":10500},{"id":10499},"key-takeaways",[10501],{"type":24,"value":10502},"🧾 Key Takeaways",{"type":18,"tag":173,"props":10504,"children":10505},{},[10506,10511,10516,10521,10526],{"type":18,"tag":177,"props":10507,"children":10508},{},[10509],{"type":24,"value":10510},"🚁 An Omnicopter is a 6-DoF multirotor capable of generating force and torque in 3D.",{"type":18,"tag":177,"props":10512,"children":10513},{},[10514],{"type":24,"value":10515},"🧊 The ETH-style cubic design is a strong baseline because it is symmetric, over-actuated, and well connected to PX4 references.",{"type":18,"tag":177,"props":10517,"children":10518},{},[10519],{"type":24,"value":10520},"🟣 The Lynchpin-style design is a useful comparison because it emphasizes modular tangential geometry and independent position\u002Forientation control.",{"type":18,"tag":177,"props":10522,"children":10523},{},[10524],{"type":24,"value":10525},"🛠️ Our hardware platform has already been built and tested, making this project suitable for real control experiments.",{"type":18,"tag":177,"props":10527,"children":10528},{},[10529],{"type":24,"value":10530},"🎯 The main research value is not only flying the vehicle, but building a pipeline for optimal, robust, and fault-aware control.",{"type":18,"tag":137,"props":10532,"children":10533},{},[],{"type":18,"tag":141,"props":10535,"children":10537},{"id":10536},"references",[10538],{"type":24,"value":10539},"🔗 References",{"type":18,"tag":514,"props":10541,"children":10543},{"id":10542},"papers-and-technical-sources",[10544],{"type":24,"value":10545},"Papers and technical sources",{"type":18,"tag":2676,"props":10547,"children":10548},{},[10549,10567,10583,10598,10613],{"type":18,"tag":177,"props":10550,"children":10551},{},[10552,10557,10559,10565],{"type":18,"tag":153,"props":10553,"children":10554},{},[10555],{"type":24,"value":10556},"D. Brescianini and R. D'Andrea",{"type":24,"value":10558},", “Design, Modeling and Control of an Omni-Directional Aerial Vehicle,” ",{"type":18,"tag":10560,"props":10561,"children":10562},"em",{},[10563],{"type":24,"value":10564},"IEEE International Conference on Robotics and Automation (ICRA)",{"type":24,"value":10566},", 2016.",{"type":18,"tag":177,"props":10568,"children":10569},{},[10570,10575,10576],{"type":18,"tag":153,"props":10571,"children":10572},{},[10573],{"type":24,"value":10574},"PX4 Documentation — Omnicopter Build Guide",{"type":24,"value":3550},{"type":18,"tag":87,"props":10577,"children":10581},{"href":10578,"rel":10579},"https:\u002F\u002Fdocs.px4.io\u002Fmain\u002Fen\u002Fframes_multicopter\u002Fomnicopter",[10580],"nofollow",[10582],{"type":24,"value":10578},{"type":18,"tag":177,"props":10584,"children":10585},{},[10586,10591,10592],{"type":18,"tag":153,"props":10587,"children":10588},{},[10589],{"type":24,"value":10590},"PX4 Documentation — Control Allocation",{"type":24,"value":3550},{"type":18,"tag":87,"props":10593,"children":10596},{"href":10594,"rel":10595},"https:\u002F\u002Fdocs.px4.io\u002Fmain\u002Fen\u002Fconcept\u002Fcontrol_allocation",[10580],[10597],{"type":24,"value":10594},{"type":18,"tag":177,"props":10599,"children":10600},{},[10601,10606,10607],{"type":18,"tag":153,"props":10602,"children":10603},{},[10604],{"type":24,"value":10605},"Terry's Lynchpins — Lynchpin Drone Contest",{"type":24,"value":3550},{"type":18,"tag":87,"props":10608,"children":10611},{"href":10609,"rel":10610},"https:\u002F\u002Fwww.terryslynchpins.com\u002Fcontest",[10580],[10612],{"type":24,"value":10609},{"type":18,"tag":177,"props":10614,"children":10615},{},[10616,10621,10622],{"type":18,"tag":153,"props":10617,"children":10618},{},[10619],{"type":24,"value":10620},"Awesome Tech Designs — Omnicopter taxonomy and examples",{"type":24,"value":3550},{"type":18,"tag":87,"props":10623,"children":10626},{"href":10624,"rel":10625},"https:\u002F\u002Fgithub.com\u002Fbpodchezertsev\u002Fawesome-tech-designs\u002Fblob\u002Fmain\u002FOmnicopter.md",[10580],[10627],{"type":24,"value":10624},{"type":18,"tag":514,"props":10629,"children":10631},{"id":10630},"videos",[10632],{"type":24,"value":10633},"Videos",{"type":18,"tag":2676,"props":10635,"children":10636},{},[10637,10650,10664,10678],{"type":18,"tag":177,"props":10638,"children":10639},{},[10640,10644,10645],{"type":18,"tag":153,"props":10641,"children":10642},{},[10643],{"type":24,"value":381},{"type":24,"value":3550},{"type":18,"tag":87,"props":10646,"children":10648},{"href":374,"rel":10647},[10580],[10649],{"type":24,"value":374},{"type":18,"tag":177,"props":10651,"children":10652},{},[10653,10658,10659],{"type":18,"tag":153,"props":10654,"children":10655},{},[10656],{"type":24,"value":10657},"ArduCopter 6DoF — OmniCopter — outside (Lynchpin)",{"type":24,"value":3550},{"type":18,"tag":87,"props":10660,"children":10662},{"href":411,"rel":10661},[10580],[10663],{"type":24,"value":411},{"type":18,"tag":177,"props":10665,"children":10666},{},[10667,10672,10673],{"type":18,"tag":153,"props":10668,"children":10669},{},[10670],{"type":24,"value":10671},"The Omnicopter — ETH Zurich",{"type":24,"value":3550},{"type":18,"tag":87,"props":10674,"children":10676},{"href":449,"rel":10675},[10580],[10677],{"type":24,"value":449},{"type":18,"tag":177,"props":10679,"children":10680},{},[10681,10685,10686],{"type":18,"tag":153,"props":10682,"children":10683},{},[10684],{"type":24,"value":490},{"type":24,"value":3550},{"type":18,"tag":87,"props":10687,"children":10689},{"href":484,"rel":10688},[10580],[10690],{"type":24,"value":484},{"type":18,"tag":137,"props":10692,"children":10693},{},[],{"type":18,"tag":19,"props":10695,"children":10696},{"align":21},[10697,10698,10703,10706],{"type":24,"value":25},{"type":18,"tag":44,"props":10699,"children":10700},{},[10701],{"type":24,"value":10702},"Built with carbon rods, reversible thrust, logs, unstable prototypes, and too much control theory.",{"type":18,"tag":50,"props":10704,"children":10705},{},[],{"type":24,"value":10707},"\n  🚁🧠🛠️📈\n",{"type":18,"tag":10709,"props":10710,"children":10711},"style",{},[10712],{"type":24,"value":10713},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dusk .shiki span {color: var(--shiki-dusk);background: var(--shiki-dusk-bg);font-style: var(--shiki-dusk-font-style);font-weight: var(--shiki-dusk-font-weight);text-decoration: var(--shiki-dusk-text-decoration);}html.dusk .shiki span {color: var(--shiki-dusk);background: var(--shiki-dusk-bg);font-style: var(--shiki-dusk-font-style);font-weight: var(--shiki-dusk-font-weight);text-decoration: var(--shiki-dusk-text-decoration);}",{"title":8,"searchDepth":626,"depth":626,"links":10715},[10716,10717,10718,10721,10724,10725,10726,10732,10738,10742,10746,10747,10753,10758,10764,10771,10772,10773,10774,10775],{"id":143,"depth":626,"text":146},{"id":243,"depth":626,"text":246},{"id":354,"depth":626,"text":357,"children":10719},[10720],{"id":516,"depth":635,"text":519},{"id":587,"depth":626,"text":590,"children":10722},[10723],{"id":2364,"depth":635,"text":2367},{"id":2520,"depth":626,"text":2523},{"id":2666,"depth":626,"text":2669},{"id":2704,"depth":626,"text":2707,"children":10727},[10728,10729,10730,10731],{"id":2731,"depth":635,"text":2734},{"id":2829,"depth":635,"text":2832},{"id":2858,"depth":635,"text":2861},{"id":2887,"depth":635,"text":2890},{"id":2991,"depth":626,"text":2994,"children":10733},[10734,10735,10736,10737],{"id":3037,"depth":635,"text":3040},{"id":3115,"depth":635,"text":3118},{"id":3144,"depth":635,"text":3147},{"id":3173,"depth":635,"text":3176},{"id":3244,"depth":626,"text":3247,"children":10739},[10740,10741],{"id":3255,"depth":635,"text":3258},{"id":3368,"depth":635,"text":3371},{"id":3535,"depth":626,"text":3538,"children":10743},[10744,10745],{"id":3869,"depth":635,"text":3872},{"id":4203,"depth":635,"text":4206},{"id":4359,"depth":626,"text":4362},{"id":4415,"depth":626,"text":4418,"children":10748},[10749,10750,10751,10752],{"id":4445,"depth":635,"text":4448},{"id":4712,"depth":635,"text":4715},{"id":7264,"depth":635,"text":7267},{"id":7342,"depth":635,"text":7345},{"id":7451,"depth":626,"text":7454,"children":10754},[10755,10756,10757],{"id":7505,"depth":635,"text":7508},{"id":7584,"depth":635,"text":7587},{"id":7796,"depth":635,"text":7799},{"id":7891,"depth":626,"text":7894,"children":10759},[10760,10761,10762,10763],{"id":7924,"depth":635,"text":7927},{"id":8083,"depth":635,"text":8086},{"id":8914,"depth":635,"text":8917},{"id":9578,"depth":635,"text":9581},{"id":9702,"depth":626,"text":9705,"children":10765},[10766,10767,10768,10769,10770],{"id":9708,"depth":635,"text":9711},{"id":9737,"depth":635,"text":9740},{"id":9809,"depth":635,"text":9812},{"id":9838,"depth":635,"text":9841},{"id":9862,"depth":635,"text":9865},{"id":9894,"depth":626,"text":9897},{"id":10321,"depth":626,"text":10324},{"id":10378,"depth":626,"text":10381},{"id":10499,"depth":626,"text":10502},{"id":10536,"depth":626,"text":10539,"children":10776},[10777,10778],{"id":10542,"depth":635,"text":10545},{"id":10630,"depth":635,"text":10633},"markdown","content:projects:2026-omnicopter-control-research:index.md","content","projects\u002F2026-omnicopter-control-research\u002Findex.md","projects\u002F2026-omnicopter-control-research\u002Findex","md","en",1782613927532]