diff --git a/.github/workflows/flaw_checker.yml b/.github/workflows/flaw_checker.yml new file mode 100644 index 0000000000000..53060bfabc94b --- /dev/null +++ b/.github/workflows/flaw_checker.yml @@ -0,0 +1,81 @@ +name: Check for flaws +# So far: + # Modifications of translations files + # Broken internal links + +on: + pull_request: + types: [opened, edited, synchronize] + +jobs: + check_flaws: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: '16' + + - name: Create logs directory + run: | + mkdir logs + + - name: Get changed english files + id: get_changed_markdown_english + uses: tj-actions/changed-files@v35 + with: + json: true + # Below are used to output files to a directory. May use in flaw checker. + #write_output_files: true + #output_dir: "./logs" + files: | + en/**/*.md + + - name: Save JSON file containg files to link check + run: | + echo "${{ steps.get_changed_markdown_english.outputs.all_changed_files }}" + echo "${{ steps.get_changed_markdown_english.outputs.all_changed_files }}" > ./logs/prFiles.json + + - name: Archive production artifacts + uses: actions/upload-artifact@v3 + with: + name: dist-without-markdown + path: | + logs + + - name: Run link checker + id: link-check + run: | + npm -g install markdown_link_checker_sc@0.0.117 + markdown_link_checker_sc -r ${{ github.workspace }} -d en -f ./logs/prFiles.json -i assets > ./logs/errorsFilteredByPrPages.md + + - name: Read errorsFilteredByPrPages.md file + id: read-errors-by-page + uses: juliangruber/read-file-action@v1 + with: + path: ./logs/errorsFilteredByPrPages.md + + - name: Echo Errors by Page + run: echo "${{ steps.read-errors-by-page.outputs.content }}" + + - name: Find Comment + uses: peter-evans/find-comment@v2 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: Found flaws + + - name: Create or update comment + uses: peter-evans/create-or-update-comment@v3 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + Found flaws + ${{ steps.read-errors-by-page.outputs.content }} + edit-mode: replace + diff --git a/.github/workflows/testenv.yml b/.github/workflows/testenv.yml deleted file mode 100644 index 611db1ade4a1a..0000000000000 --- a/.github/workflows/testenv.yml +++ /dev/null @@ -1,38 +0,0 @@ -# Test 2 - -name: CI - -# Controls when the workflow will run -on: - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - # Get branch name for pull or merge via env file (https://stackoverflow.com/a/64210623/894359) - - - name: Get branch name (merge) - if: github.event_name != 'pull_request' - shell: bash - run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | tr / -)" >> $GITHUB_ENV - - name: Get branch name (pull request) - if: github.event_name == 'pull_request' - shell: bash - run: echo "BRANCH_NAME=$(echo ${GITHUB_HEAD_REF} | tr / -)" >> $GITHUB_ENV - - - name: Debug - run: echo DEBUG env.BRANCH_NAME is ${{ env.BRANCH_NAME }} - - - diff --git a/.vuepress/public/en/config/failsafe/index.js b/.vuepress/public/en/config/failsafe/index.js index ab2c537c1839c..8f05a60c047af 100644 --- a/.vuepress/public/en/config/failsafe/index.js +++ b/.vuepress/public/en/config/failsafe/index.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",function(ex){if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",function(reason){throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="index.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["C"];updateMemoryViews();wasmTable=Module["asm"]["aa"];addOnInit(Module["asm"]["D"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return{[name]:function(){return body.apply(this,arguments)}}[name]}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i>2])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=v=>{throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_date_now(){return Date.now()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process.hrtime();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=()=>performance.now();function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_fdstat_get(fd,pbuf){var type=fd==1||fd==2?2:abort();HEAP8[pbuf>>0]=type;return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={"g":___cxa_throw,"t":__embind_register_bigint,"z":__embind_register_bool,"o":__embind_register_class,"l":__embind_register_class_constructor,"e":__embind_register_class_function,"a":__embind_register_class_property,"y":__embind_register_emval,"n":__embind_register_float,"c":__embind_register_function,"d":__embind_register_integer,"b":__embind_register_memory_view,"m":__embind_register_std_string,"i":__embind_register_std_wstring,"A":__embind_register_void,"p":__emval_decref,"q":__emval_incref,"r":__emval_take_value,"f":_abort,"B":_emscripten_date_now,"k":_emscripten_get_now,"x":_emscripten_memcpy_big,"h":_emscripten_resize_heap,"w":_exit,"u":_fd_close,"v":_fd_fdstat_get,"s":_fd_seek,"j":_fd_write};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["D"]).apply(null,arguments)};var _param_get=Module["_param_get"]=function(){return(_param_get=Module["_param_get"]=Module["asm"]["E"]).apply(null,arguments)};var _iprintf=Module["_iprintf"]=function(){return(_iprintf=Module["_iprintf"]=Module["asm"]["F"]).apply(null,arguments)};var _param_set_used=Module["_param_set_used"]=function(){return(_param_set_used=Module["_param_set_used"]=Module["asm"]["G"]).apply(null,arguments)};var __Znwm=Module["__Znwm"]=function(){return(__Znwm=Module["__Znwm"]=Module["asm"]["H"]).apply(null,arguments)};var _strlen=Module["_strlen"]=function(){return(_strlen=Module["_strlen"]=Module["asm"]["I"]).apply(null,arguments)};var _memmove=Module["_memmove"]=function(){return(_memmove=Module["_memmove"]=Module["asm"]["J"]).apply(null,arguments)};var __ZdlPv=Module["__ZdlPv"]=function(){return(__ZdlPv=Module["__ZdlPv"]=Module["asm"]["K"]).apply(null,arguments)};var _memcmp=Module["_memcmp"]=function(){return(_memcmp=Module["_memcmp"]=Module["asm"]["L"]).apply(null,arguments)};var _puts=Module["_puts"]=function(){return(_puts=Module["_puts"]=Module["asm"]["M"]).apply(null,arguments)};var _memcpy=Module["_memcpy"]=function(){return(_memcpy=Module["_memcpy"]=Module["asm"]["N"]).apply(null,arguments)};var _memset=Module["_memset"]=function(){return(_memset=Module["_memset"]=Module["asm"]["O"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["P"]).apply(null,arguments)};var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=function(){return(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=Module["asm"]["Q"]).apply(null,arguments)};var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=function(){return(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=Module["asm"]["R"]).apply(null,arguments)};var __ZNSt11logic_errorC2EPKc=Module["__ZNSt11logic_errorC2EPKc"]=function(){return(__ZNSt11logic_errorC2EPKc=Module["__ZNSt11logic_errorC2EPKc"]=Module["asm"]["S"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=function(){return(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=Module["asm"]["T"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=function(){return(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=Module["asm"]["U"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"]=Module["asm"]["V"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"]=Module["asm"]["W"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm"]=Module["asm"]["X"]).apply(null,arguments)};var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=function(){return(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=Module["asm"]["Y"]).apply(null,arguments)};var ___cxa_atexit=Module["___cxa_atexit"]=function(){return(___cxa_atexit=Module["___cxa_atexit"]=Module["asm"]["Z"]).apply(null,arguments)};var __embind_register_bindings=Module["__embind_register_bindings"]=function(){return(__embind_register_bindings=Module["__embind_register_bindings"]=Module["asm"]["_"]).apply(null,arguments)};var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=function(){return(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=Module["asm"]["$"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ba"]).apply(null,arguments)};var _strdup=Module["_strdup"]=function(){return(_strdup=Module["_strdup"]=Module["asm"]["ca"]).apply(null,arguments)};var __embind_initialize_bindings=Module["__embind_initialize_bindings"]=function(){return(__embind_initialize_bindings=Module["__embind_initialize_bindings"]=Module["asm"]["da"]).apply(null,arguments)};var ___syscall_uname=Module["___syscall_uname"]=function(){return(___syscall_uname=Module["___syscall_uname"]=Module["asm"]["ea"]).apply(null,arguments)};var ___syscall_setpgid=Module["___syscall_setpgid"]=function(){return(___syscall_setpgid=Module["___syscall_setpgid"]=Module["asm"]["fa"]).apply(null,arguments)};var ___syscall_sync=Module["___syscall_sync"]=function(){return(___syscall_sync=Module["___syscall_sync"]=Module["asm"]["ga"]).apply(null,arguments)};var ___syscall_getsid=Module["___syscall_getsid"]=function(){return(___syscall_getsid=Module["___syscall_getsid"]=Module["asm"]["ha"]).apply(null,arguments)};var ___syscall_getpgid=Module["___syscall_getpgid"]=function(){return(___syscall_getpgid=Module["___syscall_getpgid"]=Module["asm"]["ia"]).apply(null,arguments)};var ___syscall_getpid=Module["___syscall_getpid"]=function(){return(___syscall_getpid=Module["___syscall_getpid"]=Module["asm"]["ja"]).apply(null,arguments)};var ___syscall_getppid=Module["___syscall_getppid"]=function(){return(___syscall_getppid=Module["___syscall_getppid"]=Module["asm"]["ka"]).apply(null,arguments)};var ___syscall_link=Module["___syscall_link"]=function(){return(___syscall_link=Module["___syscall_link"]=Module["asm"]["la"]).apply(null,arguments)};var ___syscall_getgroups32=Module["___syscall_getgroups32"]=function(){return(___syscall_getgroups32=Module["___syscall_getgroups32"]=Module["asm"]["ma"]).apply(null,arguments)};var ___syscall_setsid=Module["___syscall_setsid"]=function(){return(___syscall_setsid=Module["___syscall_setsid"]=Module["asm"]["na"]).apply(null,arguments)};var ___syscall_umask=Module["___syscall_umask"]=function(){return(___syscall_umask=Module["___syscall_umask"]=Module["asm"]["oa"]).apply(null,arguments)};var ___syscall_setrlimit=Module["___syscall_setrlimit"]=function(){return(___syscall_setrlimit=Module["___syscall_setrlimit"]=Module["asm"]["pa"]).apply(null,arguments)};var ___syscall_getrusage=Module["___syscall_getrusage"]=function(){return(___syscall_getrusage=Module["___syscall_getrusage"]=Module["asm"]["qa"]).apply(null,arguments)};var ___syscall_getpriority=Module["___syscall_getpriority"]=function(){return(___syscall_getpriority=Module["___syscall_getpriority"]=Module["asm"]["ra"]).apply(null,arguments)};var ___syscall_setpriority=Module["___syscall_setpriority"]=function(){return(___syscall_setpriority=Module["___syscall_setpriority"]=Module["asm"]["sa"]).apply(null,arguments)};var ___syscall_setdomainname=Module["___syscall_setdomainname"]=function(){return(___syscall_setdomainname=Module["___syscall_setdomainname"]=Module["asm"]["ta"]).apply(null,arguments)};var ___syscall_getuid32=Module["___syscall_getuid32"]=function(){return(___syscall_getuid32=Module["___syscall_getuid32"]=Module["asm"]["ua"]).apply(null,arguments)};var ___syscall_getgid32=Module["___syscall_getgid32"]=function(){return(___syscall_getgid32=Module["___syscall_getgid32"]=Module["asm"]["va"]).apply(null,arguments)};var ___syscall_geteuid32=Module["___syscall_geteuid32"]=function(){return(___syscall_geteuid32=Module["___syscall_geteuid32"]=Module["asm"]["wa"]).apply(null,arguments)};var ___syscall_getegid32=Module["___syscall_getegid32"]=function(){return(___syscall_getegid32=Module["___syscall_getegid32"]=Module["asm"]["xa"]).apply(null,arguments)};var ___syscall_getresuid32=Module["___syscall_getresuid32"]=function(){return(___syscall_getresuid32=Module["___syscall_getresuid32"]=Module["asm"]["ya"]).apply(null,arguments)};var ___syscall_getresgid32=Module["___syscall_getresgid32"]=function(){return(___syscall_getresgid32=Module["___syscall_getresgid32"]=Module["asm"]["za"]).apply(null,arguments)};var ___syscall_pause=Module["___syscall_pause"]=function(){return(___syscall_pause=Module["___syscall_pause"]=Module["asm"]["Aa"]).apply(null,arguments)};var ___syscall_madvise=Module["___syscall_madvise"]=function(){return(___syscall_madvise=Module["___syscall_madvise"]=Module["asm"]["Ba"]).apply(null,arguments)};var ___syscall_mlock=Module["___syscall_mlock"]=function(){return(___syscall_mlock=Module["___syscall_mlock"]=Module["asm"]["Ca"]).apply(null,arguments)};var ___syscall_munlock=Module["___syscall_munlock"]=function(){return(___syscall_munlock=Module["___syscall_munlock"]=Module["asm"]["Da"]).apply(null,arguments)};var ___syscall_mprotect=Module["___syscall_mprotect"]=function(){return(___syscall_mprotect=Module["___syscall_mprotect"]=Module["asm"]["Ea"]).apply(null,arguments)};var ___syscall_mremap=Module["___syscall_mremap"]=function(){return(___syscall_mremap=Module["___syscall_mremap"]=Module["asm"]["Fa"]).apply(null,arguments)};var ___syscall_mlockall=Module["___syscall_mlockall"]=function(){return(___syscall_mlockall=Module["___syscall_mlockall"]=Module["asm"]["Ga"]).apply(null,arguments)};var ___syscall_munlockall=Module["___syscall_munlockall"]=function(){return(___syscall_munlockall=Module["___syscall_munlockall"]=Module["asm"]["Ha"]).apply(null,arguments)};var ___syscall_prlimit64=Module["___syscall_prlimit64"]=function(){return(___syscall_prlimit64=Module["___syscall_prlimit64"]=Module["asm"]["Ia"]).apply(null,arguments)};var ___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=function(){return(___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=Module["asm"]["Ja"]).apply(null,arguments)};var ___syscall_setsockopt=Module["___syscall_setsockopt"]=function(){return(___syscall_setsockopt=Module["___syscall_setsockopt"]=Module["asm"]["Ka"]).apply(null,arguments)};var ___syscall_acct=Module["___syscall_acct"]=function(){return(___syscall_acct=Module["___syscall_acct"]=Module["asm"]["La"]).apply(null,arguments)};var ___syscall_mincore=Module["___syscall_mincore"]=function(){return(___syscall_mincore=Module["___syscall_mincore"]=Module["asm"]["Ma"]).apply(null,arguments)};var ___syscall_pipe2=Module["___syscall_pipe2"]=function(){return(___syscall_pipe2=Module["___syscall_pipe2"]=Module["asm"]["Na"]).apply(null,arguments)};var ___syscall_pselect6=Module["___syscall_pselect6"]=function(){return(___syscall_pselect6=Module["___syscall_pselect6"]=Module["asm"]["Oa"]).apply(null,arguments)};var ___syscall_recvmmsg=Module["___syscall_recvmmsg"]=function(){return(___syscall_recvmmsg=Module["___syscall_recvmmsg"]=Module["asm"]["Pa"]).apply(null,arguments)};var ___syscall_sendmmsg=Module["___syscall_sendmmsg"]=function(){return(___syscall_sendmmsg=Module["___syscall_sendmmsg"]=Module["asm"]["Qa"]).apply(null,arguments)};var ___syscall_shutdown=Module["___syscall_shutdown"]=function(){return(___syscall_shutdown=Module["___syscall_shutdown"]=Module["asm"]["Ra"]).apply(null,arguments)};var ___syscall_socketpair=Module["___syscall_socketpair"]=function(){return(___syscall_socketpair=Module["___syscall_socketpair"]=Module["asm"]["Sa"]).apply(null,arguments)};var ___syscall_wait4=Module["___syscall_wait4"]=function(){return(___syscall_wait4=Module["___syscall_wait4"]=Module["asm"]["Ta"]).apply(null,arguments)};var _atexit=Module["_atexit"]=function(){return(_atexit=Module["_atexit"]=Module["asm"]["Ua"]).apply(null,arguments)};var ___cxa_finalize=Module["___cxa_finalize"]=function(){return(___cxa_finalize=Module["___cxa_finalize"]=Module["asm"]["Va"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var ___fpclassifyl=Module["___fpclassifyl"]=function(){return(___fpclassifyl=Module["___fpclassifyl"]=Module["asm"]["Wa"]).apply(null,arguments)};var ___overflow=Module["___overflow"]=function(){return(___overflow=Module["___overflow"]=Module["asm"]["Xa"]).apply(null,arguments)};var ___uflow=Module["___uflow"]=function(){return(___uflow=Module["___uflow"]=Module["asm"]["Ya"]).apply(null,arguments)};var _btowc=Module["_btowc"]=function(){return(_btowc=Module["_btowc"]=Module["asm"]["Za"]).apply(null,arguments)};var _copysignl=Module["_copysignl"]=function(){return(_copysignl=Module["_copysignl"]=Module["asm"]["_a"]).apply(null,arguments)};var _emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=function(){return(_emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=Module["asm"]["$a"]).apply(null,arguments)};var _emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=function(){return(_emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=Module["asm"]["ab"]).apply(null,arguments)};var _fabsl=Module["_fabsl"]=function(){return(_fabsl=Module["_fabsl"]=Module["asm"]["bb"]).apply(null,arguments)};var _fmodl=Module["_fmodl"]=function(){return(_fmodl=Module["_fmodl"]=Module["asm"]["cb"]).apply(null,arguments)};var _fprintf=Module["_fprintf"]=function(){return(_fprintf=Module["_fprintf"]=Module["asm"]["db"]).apply(null,arguments)};var _fiprintf=Module["_fiprintf"]=function(){return(_fiprintf=Module["_fiprintf"]=Module["asm"]["eb"]).apply(null,arguments)};var ___small_fprintf=Module["___small_fprintf"]=function(){return(___small_fprintf=Module["___small_fprintf"]=Module["asm"]["fb"]).apply(null,arguments)};var _fputs=Module["_fputs"]=function(){return(_fputs=Module["_fputs"]=Module["asm"]["gb"]).apply(null,arguments)};var _fputs_unlocked=Module["_fputs_unlocked"]=function(){return(_fputs_unlocked=Module["_fputs_unlocked"]=Module["asm"]["hb"]).apply(null,arguments)};var ___fputwc_unlocked=Module["___fputwc_unlocked"]=function(){return(___fputwc_unlocked=Module["___fputwc_unlocked"]=Module["asm"]["ib"]).apply(null,arguments)};var _fputwc=Module["_fputwc"]=function(){return(_fputwc=Module["_fputwc"]=Module["asm"]["jb"]).apply(null,arguments)};var _fputwc_unlocked=Module["_fputwc_unlocked"]=function(){return(_fputwc_unlocked=Module["_fputwc_unlocked"]=Module["asm"]["kb"]).apply(null,arguments)};var _putwc_unlocked=Module["_putwc_unlocked"]=function(){return(_putwc_unlocked=Module["_putwc_unlocked"]=Module["asm"]["lb"]).apply(null,arguments)};var _frexp=Module["_frexp"]=function(){return(_frexp=Module["_frexp"]=Module["asm"]["mb"]).apply(null,arguments)};var _fwide=Module["_fwide"]=function(){return(_fwide=Module["_fwide"]=Module["asm"]["nb"]).apply(null,arguments)};var _fwrite=Module["_fwrite"]=function(){return(_fwrite=Module["_fwrite"]=Module["asm"]["ob"]).apply(null,arguments)};var _fwrite_unlocked=Module["_fwrite_unlocked"]=function(){return(_fwrite_unlocked=Module["_fwrite_unlocked"]=Module["asm"]["pb"]).apply(null,arguments)};var _getpid=Module["_getpid"]=function(){return(_getpid=Module["_getpid"]=Module["asm"]["qb"]).apply(null,arguments)};var ___intscan=Module["___intscan"]=function(){return(___intscan=Module["___intscan"]=Module["asm"]["rb"]).apply(null,arguments)};var _isdigit=Module["_isdigit"]=function(){return(_isdigit=Module["_isdigit"]=Module["asm"]["sb"]).apply(null,arguments)};var ___isdigit_l=Module["___isdigit_l"]=function(){return(___isdigit_l=Module["___isdigit_l"]=Module["asm"]["tb"]).apply(null,arguments)};var _isdigit_l=Module["_isdigit_l"]=function(){return(_isdigit_l=Module["_isdigit_l"]=Module["asm"]["ub"]).apply(null,arguments)};var _isspace=Module["_isspace"]=function(){return(_isspace=Module["_isspace"]=Module["asm"]["vb"]).apply(null,arguments)};var ___isspace_l=Module["___isspace_l"]=function(){return(___isspace_l=Module["___isspace_l"]=Module["asm"]["wb"]).apply(null,arguments)};var _isspace_l=Module["_isspace_l"]=function(){return(_isspace_l=Module["_isspace_l"]=Module["asm"]["xb"]).apply(null,arguments)};var _iswspace=Module["_iswspace"]=function(){return(_iswspace=Module["_iswspace"]=Module["asm"]["yb"]).apply(null,arguments)};var ___iswspace_l=Module["___iswspace_l"]=function(){return(___iswspace_l=Module["___iswspace_l"]=Module["asm"]["zb"]).apply(null,arguments)};var _iswspace_l=Module["_iswspace_l"]=function(){return(_iswspace_l=Module["_iswspace_l"]=Module["asm"]["Ab"]).apply(null,arguments)};var _emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=function(){return(_emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=Module["asm"]["Bb"]).apply(null,arguments)};var _emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=function(){return(_emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=Module["asm"]["Cb"]).apply(null,arguments)};var _emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=function(){return(_emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=Module["asm"]["Db"]).apply(null,arguments)};var _emscripten_futex_wait=Module["_emscripten_futex_wait"]=function(){return(_emscripten_futex_wait=Module["_emscripten_futex_wait"]=Module["asm"]["Eb"]).apply(null,arguments)};var _emscripten_futex_wake=Module["_emscripten_futex_wake"]=function(){return(_emscripten_futex_wake=Module["_emscripten_futex_wake"]=Module["asm"]["Fb"]).apply(null,arguments)};var _emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=function(){return(_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=Module["asm"]["Gb"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Hb"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["Ib"]).apply(null,arguments)};var __emscripten_yield=Module["__emscripten_yield"]=function(){return(__emscripten_yield=Module["__emscripten_yield"]=Module["asm"]["Jb"]).apply(null,arguments)};var __emscripten_check_timers=Module["__emscripten_check_timers"]=function(){return(__emscripten_check_timers=Module["__emscripten_check_timers"]=Module["asm"]["Kb"]).apply(null,arguments)};var _pthread_mutex_init=Module["_pthread_mutex_init"]=function(){return(_pthread_mutex_init=Module["_pthread_mutex_init"]=Module["asm"]["Lb"]).apply(null,arguments)};var _pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=function(){return(_pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=Module["asm"]["Mb"]).apply(null,arguments)};var _pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=function(){return(_pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=Module["asm"]["Nb"]).apply(null,arguments)};var _pthread_barrier_init=Module["_pthread_barrier_init"]=function(){return(_pthread_barrier_init=Module["_pthread_barrier_init"]=Module["asm"]["Ob"]).apply(null,arguments)};var _pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=function(){return(_pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=Module["asm"]["Pb"]).apply(null,arguments)};var _pthread_barrier_wait=Module["_pthread_barrier_wait"]=function(){return(_pthread_barrier_wait=Module["_pthread_barrier_wait"]=Module["asm"]["Qb"]).apply(null,arguments)};var _pthread_getspecific=Module["_pthread_getspecific"]=function(){return(_pthread_getspecific=Module["_pthread_getspecific"]=Module["asm"]["Rb"]).apply(null,arguments)};var _pthread_setspecific=Module["_pthread_setspecific"]=function(){return(_pthread_setspecific=Module["_pthread_setspecific"]=Module["asm"]["Sb"]).apply(null,arguments)};var _pthread_cond_wait=Module["_pthread_cond_wait"]=function(){return(_pthread_cond_wait=Module["_pthread_cond_wait"]=Module["asm"]["Tb"]).apply(null,arguments)};var _pthread_cond_signal=Module["_pthread_cond_signal"]=function(){return(_pthread_cond_signal=Module["_pthread_cond_signal"]=Module["asm"]["Ub"]).apply(null,arguments)};var _pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=function(){return(_pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=Module["asm"]["Vb"]).apply(null,arguments)};var _pthread_cond_init=Module["_pthread_cond_init"]=function(){return(_pthread_cond_init=Module["_pthread_cond_init"]=Module["asm"]["Wb"]).apply(null,arguments)};var _pthread_cond_destroy=Module["_pthread_cond_destroy"]=function(){return(_pthread_cond_destroy=Module["_pthread_cond_destroy"]=Module["asm"]["Xb"]).apply(null,arguments)};var _pthread_atfork=Module["_pthread_atfork"]=function(){return(_pthread_atfork=Module["_pthread_atfork"]=Module["asm"]["Yb"]).apply(null,arguments)};var _pthread_cancel=Module["_pthread_cancel"]=function(){return(_pthread_cancel=Module["_pthread_cancel"]=Module["asm"]["Zb"]).apply(null,arguments)};var _pthread_testcancel=Module["_pthread_testcancel"]=function(){return(_pthread_testcancel=Module["_pthread_testcancel"]=Module["asm"]["_b"]).apply(null,arguments)};var ___pthread_detach=Module["___pthread_detach"]=function(){return(___pthread_detach=Module["___pthread_detach"]=Module["asm"]["$b"]).apply(null,arguments)};var _pthread_equal=Module["_pthread_equal"]=function(){return(_pthread_equal=Module["_pthread_equal"]=Module["asm"]["ac"]).apply(null,arguments)};var _pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=function(){return(_pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=Module["asm"]["bc"]).apply(null,arguments)};var _pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=function(){return(_pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=Module["asm"]["cc"]).apply(null,arguments)};var _pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=function(){return(_pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=Module["asm"]["dc"]).apply(null,arguments)};var _pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=function(){return(_pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=Module["asm"]["ec"]).apply(null,arguments)};var _pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=function(){return(_pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=Module["asm"]["fc"]).apply(null,arguments)};var _pthread_condattr_init=Module["_pthread_condattr_init"]=function(){return(_pthread_condattr_init=Module["_pthread_condattr_init"]=Module["asm"]["gc"]).apply(null,arguments)};var _pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=function(){return(_pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=Module["asm"]["hc"]).apply(null,arguments)};var _pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=function(){return(_pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=Module["asm"]["ic"]).apply(null,arguments)};var _pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=function(){return(_pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=Module["asm"]["jc"]).apply(null,arguments)};var _pthread_attr_init=Module["_pthread_attr_init"]=function(){return(_pthread_attr_init=Module["_pthread_attr_init"]=Module["asm"]["kc"]).apply(null,arguments)};var _pthread_getattr_np=Module["_pthread_getattr_np"]=function(){return(_pthread_getattr_np=Module["_pthread_getattr_np"]=Module["asm"]["lc"]).apply(null,arguments)};var _pthread_setcancelstate=Module["_pthread_setcancelstate"]=function(){return(_pthread_setcancelstate=Module["_pthread_setcancelstate"]=Module["asm"]["mc"]).apply(null,arguments)};var _pthread_setcanceltype=Module["_pthread_setcanceltype"]=function(){return(_pthread_setcanceltype=Module["_pthread_setcanceltype"]=Module["asm"]["nc"]).apply(null,arguments)};var _pthread_rwlock_init=Module["_pthread_rwlock_init"]=function(){return(_pthread_rwlock_init=Module["_pthread_rwlock_init"]=Module["asm"]["oc"]).apply(null,arguments)};var _pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=function(){return(_pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=Module["asm"]["pc"]).apply(null,arguments)};var _pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=function(){return(_pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=Module["asm"]["qc"]).apply(null,arguments)};var _pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=function(){return(_pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=Module["asm"]["rc"]).apply(null,arguments)};var _pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=function(){return(_pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=Module["asm"]["sc"]).apply(null,arguments)};var _pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=function(){return(_pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=Module["asm"]["tc"]).apply(null,arguments)};var _pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=function(){return(_pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=Module["asm"]["uc"]).apply(null,arguments)};var _pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=function(){return(_pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=Module["asm"]["vc"]).apply(null,arguments)};var _pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=function(){return(_pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=Module["asm"]["wc"]).apply(null,arguments)};var _pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=function(){return(_pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=Module["asm"]["xc"]).apply(null,arguments)};var _pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=function(){return(_pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=Module["asm"]["yc"]).apply(null,arguments)};var _pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=function(){return(_pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=Module["asm"]["zc"]).apply(null,arguments)};var _pthread_spin_init=Module["_pthread_spin_init"]=function(){return(_pthread_spin_init=Module["_pthread_spin_init"]=Module["asm"]["Ac"]).apply(null,arguments)};var _pthread_spin_destroy=Module["_pthread_spin_destroy"]=function(){return(_pthread_spin_destroy=Module["_pthread_spin_destroy"]=Module["asm"]["Bc"]).apply(null,arguments)};var _pthread_spin_lock=Module["_pthread_spin_lock"]=function(){return(_pthread_spin_lock=Module["_pthread_spin_lock"]=Module["asm"]["Cc"]).apply(null,arguments)};var _pthread_spin_trylock=Module["_pthread_spin_trylock"]=function(){return(_pthread_spin_trylock=Module["_pthread_spin_trylock"]=Module["asm"]["Dc"]).apply(null,arguments)};var _pthread_spin_unlock=Module["_pthread_spin_unlock"]=function(){return(_pthread_spin_unlock=Module["_pthread_spin_unlock"]=Module["asm"]["Ec"]).apply(null,arguments)};var _sem_init=Module["_sem_init"]=function(){return(_sem_init=Module["_sem_init"]=Module["asm"]["Fc"]).apply(null,arguments)};var _sem_post=Module["_sem_post"]=function(){return(_sem_post=Module["_sem_post"]=Module["asm"]["Gc"]).apply(null,arguments)};var _sem_wait=Module["_sem_wait"]=function(){return(_sem_wait=Module["_sem_wait"]=Module["asm"]["Hc"]).apply(null,arguments)};var _sem_trywait=Module["_sem_trywait"]=function(){return(_sem_trywait=Module["_sem_trywait"]=Module["asm"]["Ic"]).apply(null,arguments)};var _sem_destroy=Module["_sem_destroy"]=function(){return(_sem_destroy=Module["_sem_destroy"]=Module["asm"]["Jc"]).apply(null,arguments)};var ___lock=Module["___lock"]=function(){return(___lock=Module["___lock"]=Module["asm"]["Kc"]).apply(null,arguments)};var ___unlock=Module["___unlock"]=function(){return(___unlock=Module["___unlock"]=Module["asm"]["Lc"]).apply(null,arguments)};var _emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=function(){return(_emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=Module["asm"]["Mc"]).apply(null,arguments)};var _pthread_mutex_lock=Module["_pthread_mutex_lock"]=function(){return(_pthread_mutex_lock=Module["_pthread_mutex_lock"]=Module["asm"]["Nc"]).apply(null,arguments)};var _pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=function(){return(_pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=Module["asm"]["Oc"]).apply(null,arguments)};var _pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=function(){return(_pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=Module["asm"]["Pc"]).apply(null,arguments)};var _pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=function(){return(_pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=Module["asm"]["Qc"]).apply(null,arguments)};var _emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=function(){return(_emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=Module["asm"]["Rc"]).apply(null,arguments)};var _pthread_create=Module["_pthread_create"]=function(){return(_pthread_create=Module["_pthread_create"]=Module["asm"]["Sc"]).apply(null,arguments)};var _emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=function(){return(_emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=Module["asm"]["Tc"]).apply(null,arguments)};var _pthread_join=Module["_pthread_join"]=function(){return(_pthread_join=Module["_pthread_join"]=Module["asm"]["Uc"]).apply(null,arguments)};var _pthread_key_delete=Module["_pthread_key_delete"]=function(){return(_pthread_key_delete=Module["_pthread_key_delete"]=Module["asm"]["Vc"]).apply(null,arguments)};var _pthread_key_create=Module["_pthread_key_create"]=function(){return(_pthread_key_create=Module["_pthread_key_create"]=Module["asm"]["Wc"]).apply(null,arguments)};var _pthread_once=Module["_pthread_once"]=function(){return(_pthread_once=Module["_pthread_once"]=Module["asm"]["Xc"]).apply(null,arguments)};var _pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=function(){return(_pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=Module["asm"]["Yc"]).apply(null,arguments)};var _pthread_exit=Module["_pthread_exit"]=function(){return(_pthread_exit=Module["_pthread_exit"]=Module["asm"]["Zc"]).apply(null,arguments)};var _emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=function(){return(_emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=Module["asm"]["_c"]).apply(null,arguments)};var _pthread_detach=Module["_pthread_detach"]=function(){return(_pthread_detach=Module["_pthread_detach"]=Module["asm"]["$c"]).apply(null,arguments)};var _thrd_detach=Module["_thrd_detach"]=function(){return(_thrd_detach=Module["_thrd_detach"]=Module["asm"]["ad"]).apply(null,arguments)};var _lseek=Module["_lseek"]=function(){return(_lseek=Module["_lseek"]=Module["asm"]["bd"]).apply(null,arguments)};var _lseek64=Module["_lseek64"]=function(){return(_lseek64=Module["_lseek64"]=Module["asm"]["cd"]).apply(null,arguments)};var _mbtowc=Module["_mbtowc"]=function(){return(_mbtowc=Module["_mbtowc"]=Module["asm"]["dd"]).apply(null,arguments)};var _memchr=Module["_memchr"]=function(){return(_memchr=Module["_memchr"]=Module["asm"]["ed"]).apply(null,arguments)};var _printf=Module["_printf"]=function(){return(_printf=Module["_printf"]=Module["asm"]["fd"]).apply(null,arguments)};var _vfprintf=Module["_vfprintf"]=function(){return(_vfprintf=Module["_vfprintf"]=Module["asm"]["gd"]).apply(null,arguments)};var _vfiprintf=Module["_vfiprintf"]=function(){return(_vfiprintf=Module["_vfiprintf"]=Module["asm"]["hd"]).apply(null,arguments)};var ___small_printf=Module["___small_printf"]=function(){return(___small_printf=Module["___small_printf"]=Module["asm"]["id"]).apply(null,arguments)};var ___small_vfprintf=Module["___small_vfprintf"]=function(){return(___small_vfprintf=Module["___small_vfprintf"]=Module["asm"]["jd"]).apply(null,arguments)};var ___get_tp=Module["___get_tp"]=function(){return(___get_tp=Module["___get_tp"]=Module["asm"]["kd"]).apply(null,arguments)};var _emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=function(){return(_emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=Module["asm"]["ld"]).apply(null,arguments)};var _scalbn=Module["_scalbn"]=function(){return(_scalbn=Module["_scalbn"]=Module["asm"]["md"]).apply(null,arguments)};var _scalbnl=Module["_scalbnl"]=function(){return(_scalbnl=Module["_scalbnl"]=Module["asm"]["nd"]).apply(null,arguments)};var _snprintf=Module["_snprintf"]=function(){return(_snprintf=Module["_snprintf"]=Module["asm"]["od"]).apply(null,arguments)};var ___wasi_syscall_ret=Module["___wasi_syscall_ret"]=function(){return(___wasi_syscall_ret=Module["___wasi_syscall_ret"]=Module["asm"]["pd"]).apply(null,arguments)};var _strcmp=Module["_strcmp"]=function(){return(_strcmp=Module["_strcmp"]=Module["asm"]["qd"]).apply(null,arguments)};var ___strerror_l=Module["___strerror_l"]=function(){return(___strerror_l=Module["___strerror_l"]=Module["asm"]["rd"]).apply(null,arguments)};var _strerror=Module["_strerror"]=function(){return(_strerror=Module["_strerror"]=Module["asm"]["sd"]).apply(null,arguments)};var _strerror_l=Module["_strerror_l"]=function(){return(_strerror_l=Module["_strerror_l"]=Module["asm"]["td"]).apply(null,arguments)};var _strnlen=Module["_strnlen"]=function(){return(_strnlen=Module["_strnlen"]=Module["asm"]["ud"]).apply(null,arguments)};var _strtof=Module["_strtof"]=function(){return(_strtof=Module["_strtof"]=Module["asm"]["vd"]).apply(null,arguments)};var _strtod=Module["_strtod"]=function(){return(_strtod=Module["_strtod"]=Module["asm"]["wd"]).apply(null,arguments)};var _strtold=Module["_strtold"]=function(){return(_strtold=Module["_strtold"]=Module["asm"]["xd"]).apply(null,arguments)};var _strtoull=Module["_strtoull"]=function(){return(_strtoull=Module["_strtoull"]=Module["asm"]["yd"]).apply(null,arguments)};var _strtoll=Module["_strtoll"]=function(){return(_strtoll=Module["_strtoll"]=Module["asm"]["zd"]).apply(null,arguments)};var _strtoul=Module["_strtoul"]=function(){return(_strtoul=Module["_strtoul"]=Module["asm"]["Ad"]).apply(null,arguments)};var _strtol=Module["_strtol"]=function(){return(_strtol=Module["_strtol"]=Module["asm"]["Bd"]).apply(null,arguments)};var _strtoimax=Module["_strtoimax"]=function(){return(_strtoimax=Module["_strtoimax"]=Module["asm"]["Cd"]).apply(null,arguments)};var _strtoumax=Module["_strtoumax"]=function(){return(_strtoumax=Module["_strtoumax"]=Module["asm"]["Dd"]).apply(null,arguments)};var ___strtol_internal=Module["___strtol_internal"]=function(){return(___strtol_internal=Module["___strtol_internal"]=Module["asm"]["Ed"]).apply(null,arguments)};var ___strtoul_internal=Module["___strtoul_internal"]=function(){return(___strtoul_internal=Module["___strtoul_internal"]=Module["asm"]["Fd"]).apply(null,arguments)};var ___strtoll_internal=Module["___strtoll_internal"]=function(){return(___strtoll_internal=Module["___strtoll_internal"]=Module["asm"]["Gd"]).apply(null,arguments)};var ___strtoull_internal=Module["___strtoull_internal"]=function(){return(___strtoull_internal=Module["___strtoull_internal"]=Module["asm"]["Hd"]).apply(null,arguments)};var ___strtoimax_internal=Module["___strtoimax_internal"]=function(){return(___strtoimax_internal=Module["___strtoimax_internal"]=Module["asm"]["Id"]).apply(null,arguments)};var ___strtoumax_internal=Module["___strtoumax_internal"]=function(){return(___strtoumax_internal=Module["___strtoumax_internal"]=Module["asm"]["Jd"]).apply(null,arguments)};var _swprintf=Module["_swprintf"]=function(){return(_swprintf=Module["_swprintf"]=Module["asm"]["Kd"]).apply(null,arguments)};var ___vfprintf_internal=Module["___vfprintf_internal"]=function(){return(___vfprintf_internal=Module["___vfprintf_internal"]=Module["asm"]["Ld"]).apply(null,arguments)};var _wctomb=Module["_wctomb"]=function(){return(_wctomb=Module["_wctomb"]=Module["asm"]["Md"]).apply(null,arguments)};var ___trunctfdf2=Module["___trunctfdf2"]=function(){return(___trunctfdf2=Module["___trunctfdf2"]=Module["asm"]["Nd"]).apply(null,arguments)};var _vfwprintf=Module["_vfwprintf"]=function(){return(_vfwprintf=Module["_vfwprintf"]=Module["asm"]["Od"]).apply(null,arguments)};var _vsnprintf=Module["_vsnprintf"]=function(){return(_vsnprintf=Module["_vsnprintf"]=Module["asm"]["Pd"]).apply(null,arguments)};var _vsniprintf=Module["_vsniprintf"]=function(){return(_vsniprintf=Module["_vsniprintf"]=Module["asm"]["Qd"]).apply(null,arguments)};var ___small_vsnprintf=Module["___small_vsnprintf"]=function(){return(___small_vsnprintf=Module["___small_vsnprintf"]=Module["asm"]["Rd"]).apply(null,arguments)};var _vswprintf=Module["_vswprintf"]=function(){return(_vswprintf=Module["_vswprintf"]=Module["asm"]["Sd"]).apply(null,arguments)};var ___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=function(){return(___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=Module["asm"]["Td"]).apply(null,arguments)};var _wcrtomb=Module["_wcrtomb"]=function(){return(_wcrtomb=Module["_wcrtomb"]=Module["asm"]["Ud"]).apply(null,arguments)};var _wcschr=Module["_wcschr"]=function(){return(_wcschr=Module["_wcschr"]=Module["asm"]["Vd"]).apply(null,arguments)};var _wcslen=Module["_wcslen"]=function(){return(_wcslen=Module["_wcslen"]=Module["asm"]["Wd"]).apply(null,arguments)};var _wcsnlen=Module["_wcsnlen"]=function(){return(_wcsnlen=Module["_wcsnlen"]=Module["asm"]["Xd"]).apply(null,arguments)};var _wcstof=Module["_wcstof"]=function(){return(_wcstof=Module["_wcstof"]=Module["asm"]["Yd"]).apply(null,arguments)};var _wcstod=Module["_wcstod"]=function(){return(_wcstod=Module["_wcstod"]=Module["asm"]["Zd"]).apply(null,arguments)};var _wcstold=Module["_wcstold"]=function(){return(_wcstold=Module["_wcstold"]=Module["asm"]["_d"]).apply(null,arguments)};var _wcstoull=Module["_wcstoull"]=function(){return(_wcstoull=Module["_wcstoull"]=Module["asm"]["$d"]).apply(null,arguments)};var _wcstoll=Module["_wcstoll"]=function(){return(_wcstoll=Module["_wcstoll"]=Module["asm"]["ae"]).apply(null,arguments)};var _wcstoul=Module["_wcstoul"]=function(){return(_wcstoul=Module["_wcstoul"]=Module["asm"]["be"]).apply(null,arguments)};var _wcstol=Module["_wcstol"]=function(){return(_wcstol=Module["_wcstol"]=Module["asm"]["ce"]).apply(null,arguments)};var _wcstoimax=Module["_wcstoimax"]=function(){return(_wcstoimax=Module["_wcstoimax"]=Module["asm"]["de"]).apply(null,arguments)};var _wcstoumax=Module["_wcstoumax"]=function(){return(_wcstoumax=Module["_wcstoumax"]=Module["asm"]["ee"]).apply(null,arguments)};var _wmemchr=Module["_wmemchr"]=function(){return(_wmemchr=Module["_wmemchr"]=Module["asm"]["fe"]).apply(null,arguments)};var _wmemcmp=Module["_wmemcmp"]=function(){return(_wmemcmp=Module["_wmemcmp"]=Module["asm"]["ge"]).apply(null,arguments)};var ___libc_malloc=Module["___libc_malloc"]=function(){return(___libc_malloc=Module["___libc_malloc"]=Module["asm"]["he"]).apply(null,arguments)};var ___libc_free=Module["___libc_free"]=function(){return(___libc_free=Module["___libc_free"]=Module["asm"]["ie"]).apply(null,arguments)};var ___libc_calloc=Module["___libc_calloc"]=function(){return(___libc_calloc=Module["___libc_calloc"]=Module["asm"]["je"]).apply(null,arguments)};var ___libc_realloc=Module["___libc_realloc"]=function(){return(___libc_realloc=Module["___libc_realloc"]=Module["asm"]["ke"]).apply(null,arguments)};var _sbrk=Module["_sbrk"]=function(){return(_sbrk=Module["_sbrk"]=Module["asm"]["le"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["me"]).apply(null,arguments)};var _calloc=Module["_calloc"]=function(){return(_calloc=Module["_calloc"]=Module["asm"]["ne"]).apply(null,arguments)};var _realloc=Module["_realloc"]=function(){return(_realloc=Module["_realloc"]=Module["asm"]["oe"]).apply(null,arguments)};var _realloc_in_place=Module["_realloc_in_place"]=function(){return(_realloc_in_place=Module["_realloc_in_place"]=Module["asm"]["pe"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["qe"]).apply(null,arguments)};var _posix_memalign=Module["_posix_memalign"]=function(){return(_posix_memalign=Module["_posix_memalign"]=Module["asm"]["re"]).apply(null,arguments)};var _valloc=Module["_valloc"]=function(){return(_valloc=Module["_valloc"]=Module["asm"]["se"]).apply(null,arguments)};var _pvalloc=Module["_pvalloc"]=function(){return(_pvalloc=Module["_pvalloc"]=Module["asm"]["te"]).apply(null,arguments)};var _mallinfo=Module["_mallinfo"]=function(){return(_mallinfo=Module["_mallinfo"]=Module["asm"]["ue"]).apply(null,arguments)};var _mallopt=Module["_mallopt"]=function(){return(_mallopt=Module["_mallopt"]=Module["asm"]["ve"]).apply(null,arguments)};var _malloc_trim=Module["_malloc_trim"]=function(){return(_malloc_trim=Module["_malloc_trim"]=Module["asm"]["we"]).apply(null,arguments)};var _malloc_usable_size=Module["_malloc_usable_size"]=function(){return(_malloc_usable_size=Module["_malloc_usable_size"]=Module["asm"]["xe"]).apply(null,arguments)};var _malloc_footprint=Module["_malloc_footprint"]=function(){return(_malloc_footprint=Module["_malloc_footprint"]=Module["asm"]["ye"]).apply(null,arguments)};var _malloc_max_footprint=Module["_malloc_max_footprint"]=function(){return(_malloc_max_footprint=Module["_malloc_max_footprint"]=Module["asm"]["ze"]).apply(null,arguments)};var _malloc_footprint_limit=Module["_malloc_footprint_limit"]=function(){return(_malloc_footprint_limit=Module["_malloc_footprint_limit"]=Module["asm"]["Ae"]).apply(null,arguments)};var _malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=function(){return(_malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=Module["asm"]["Be"]).apply(null,arguments)};var _independent_calloc=Module["_independent_calloc"]=function(){return(_independent_calloc=Module["_independent_calloc"]=Module["asm"]["Ce"]).apply(null,arguments)};var _independent_comalloc=Module["_independent_comalloc"]=function(){return(_independent_comalloc=Module["_independent_comalloc"]=Module["asm"]["De"]).apply(null,arguments)};var _bulk_free=Module["_bulk_free"]=function(){return(_bulk_free=Module["_bulk_free"]=Module["asm"]["Ee"]).apply(null,arguments)};var _emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=function(){return(_emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=Module["asm"]["Fe"]).apply(null,arguments)};var _emscripten_builtin_free=Module["_emscripten_builtin_free"]=function(){return(_emscripten_builtin_free=Module["_emscripten_builtin_free"]=Module["asm"]["Ge"]).apply(null,arguments)};var _emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=function(){return(_emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=Module["asm"]["He"]).apply(null,arguments)};var _emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=function(){return(_emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=Module["asm"]["Ie"]).apply(null,arguments)};var _brk=Module["_brk"]=function(){return(_brk=Module["_brk"]=Module["asm"]["Je"]).apply(null,arguments)};var ___addtf3=Module["___addtf3"]=function(){return(___addtf3=Module["___addtf3"]=Module["asm"]["Ke"]).apply(null,arguments)};var ___ashlti3=Module["___ashlti3"]=function(){return(___ashlti3=Module["___ashlti3"]=Module["asm"]["Le"]).apply(null,arguments)};var ___letf2=Module["___letf2"]=function(){return(___letf2=Module["___letf2"]=Module["asm"]["Me"]).apply(null,arguments)};var ___getf2=Module["___getf2"]=function(){return(___getf2=Module["___getf2"]=Module["asm"]["Ne"]).apply(null,arguments)};var ___unordtf2=Module["___unordtf2"]=function(){return(___unordtf2=Module["___unordtf2"]=Module["asm"]["Oe"]).apply(null,arguments)};var ___eqtf2=Module["___eqtf2"]=function(){return(___eqtf2=Module["___eqtf2"]=Module["asm"]["Pe"]).apply(null,arguments)};var ___lttf2=Module["___lttf2"]=function(){return(___lttf2=Module["___lttf2"]=Module["asm"]["Qe"]).apply(null,arguments)};var ___netf2=Module["___netf2"]=function(){return(___netf2=Module["___netf2"]=Module["asm"]["Re"]).apply(null,arguments)};var ___gttf2=Module["___gttf2"]=function(){return(___gttf2=Module["___gttf2"]=Module["asm"]["Se"]).apply(null,arguments)};var ___divtf3=Module["___divtf3"]=function(){return(___divtf3=Module["___divtf3"]=Module["asm"]["Te"]).apply(null,arguments)};var ___extenddftf2=Module["___extenddftf2"]=function(){return(___extenddftf2=Module["___extenddftf2"]=Module["asm"]["Ue"]).apply(null,arguments)};var ___extendsftf2=Module["___extendsftf2"]=function(){return(___extendsftf2=Module["___extendsftf2"]=Module["asm"]["Ve"]).apply(null,arguments)};var ___floatsitf=Module["___floatsitf"]=function(){return(___floatsitf=Module["___floatsitf"]=Module["asm"]["We"]).apply(null,arguments)};var ___floatunsitf=Module["___floatunsitf"]=function(){return(___floatunsitf=Module["___floatunsitf"]=Module["asm"]["Xe"]).apply(null,arguments)};var ___fe_getround=Module["___fe_getround"]=function(){return(___fe_getround=Module["___fe_getround"]=Module["asm"]["Ye"]).apply(null,arguments)};var ___fe_raise_inexact=Module["___fe_raise_inexact"]=function(){return(___fe_raise_inexact=Module["___fe_raise_inexact"]=Module["asm"]["Ze"]).apply(null,arguments)};var ___lshrti3=Module["___lshrti3"]=function(){return(___lshrti3=Module["___lshrti3"]=Module["asm"]["_e"]).apply(null,arguments)};var ___multf3=Module["___multf3"]=function(){return(___multf3=Module["___multf3"]=Module["asm"]["$e"]).apply(null,arguments)};var ___multi3=Module["___multi3"]=function(){return(___multi3=Module["___multi3"]=Module["asm"]["af"]).apply(null,arguments)};var _emscripten_stack_get_current=Module["_emscripten_stack_get_current"]=function(){return(_emscripten_stack_get_current=Module["_emscripten_stack_get_current"]=Module["asm"]["bf"]).apply(null,arguments)};var ___subtf3=Module["___subtf3"]=function(){return(___subtf3=Module["___subtf3"]=Module["asm"]["cf"]).apply(null,arguments)};var ___trunctfsf2=Module["___trunctfsf2"]=function(){return(___trunctfsf2=Module["___trunctfsf2"]=Module["asm"]["df"]).apply(null,arguments)};var __ZNSt3__212__libcpp_clzB6v15007Ej=Module["__ZNSt3__212__libcpp_clzB6v15007Ej"]=function(){return(__ZNSt3__212__libcpp_clzB6v15007Ej=Module["__ZNSt3__212__libcpp_clzB6v15007Ej"]=Module["asm"]["ef"]).apply(null,arguments)};var __ZNKSt3__26__lessImmEclB6v15007ERKmS3_=Module["__ZNKSt3__26__lessImmEclB6v15007ERKmS3_"]=function(){return(__ZNKSt3__26__lessImmEclB6v15007ERKmS3_=Module["__ZNKSt3__26__lessImmEclB6v15007ERKmS3_"]=Module["asm"]["ff"]).apply(null,arguments)};var __ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_=Module["__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_"]=function(){return(__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_=Module["__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_"]=Module["asm"]["gf"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["hf"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=Module["asm"]["jf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej=Module["__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej"]=function(){return(__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej=Module["__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej"]=Module["asm"]["kf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj=Module["__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj"]=function(){return(__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj=Module["__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj"]=Module["asm"]["lf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__base_10_u32B6v15007EPcj=Module["__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj=Module["__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj"]=Module["asm"]["mf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append1B6v15007EPcj=Module["__ZNSt3__26__itoa9__append1B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append1B6v15007EPcj=Module["__ZNSt3__26__itoa9__append1B6v15007EPcj"]=Module["asm"]["nf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append2B6v15007EPcj=Module["__ZNSt3__26__itoa9__append2B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append2B6v15007EPcj=Module["__ZNSt3__26__itoa9__append2B6v15007EPcj"]=Module["asm"]["of"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append3B6v15007EPcj=Module["__ZNSt3__26__itoa9__append3B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append3B6v15007EPcj=Module["__ZNSt3__26__itoa9__append3B6v15007EPcj"]=Module["asm"]["pf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append4B6v15007EPcj=Module["__ZNSt3__26__itoa9__append4B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append4B6v15007EPcj=Module["__ZNSt3__26__itoa9__append4B6v15007EPcj"]=Module["asm"]["qf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append5B6v15007EPcj=Module["__ZNSt3__26__itoa9__append5B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append5B6v15007EPcj=Module["__ZNSt3__26__itoa9__append5B6v15007EPcj"]=Module["asm"]["rf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append6B6v15007EPcj=Module["__ZNSt3__26__itoa9__append6B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append6B6v15007EPcj=Module["__ZNSt3__26__itoa9__append6B6v15007EPcj"]=Module["asm"]["sf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append7B6v15007EPcj=Module["__ZNSt3__26__itoa9__append7B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append7B6v15007EPcj=Module["__ZNSt3__26__itoa9__append7B6v15007EPcj"]=Module["asm"]["tf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append8B6v15007EPcj=Module["__ZNSt3__26__itoa9__append8B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append8B6v15007EPcj=Module["__ZNSt3__26__itoa9__append8B6v15007EPcj"]=Module["asm"]["uf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append9B6v15007EPcj=Module["__ZNSt3__26__itoa9__append9B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append9B6v15007EPcj=Module["__ZNSt3__26__itoa9__append9B6v15007EPcj"]=Module["asm"]["vf"]).apply(null,arguments)};var __ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_"]=function(){return(__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_"]=Module["asm"]["wf"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["xf"]).apply(null,arguments)};var __ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_"]=function(){return(__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_"]=Module["asm"]["yf"]).apply(null,arguments)};var __ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=function(){return(__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=Module["asm"]["zf"]).apply(null,arguments)};var __ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_"]=function(){return(__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_"]=Module["asm"]["Af"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=Module["asm"]["Bf"]).apply(null,arguments)};var __ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_"]=function(){return(__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_"]=Module["asm"]["Cf"]).apply(null,arguments)};var __ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_"]=function(){return(__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_"]=Module["asm"]["Df"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=Module["asm"]["Ef"]).apply(null,arguments)};var __ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=function(){return(__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=Module["asm"]["Ff"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_"]=Module["asm"]["Gf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_"]=Module["asm"]["Hf"]).apply(null,arguments)};var __ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=Module["asm"]["If"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Jf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_"]=Module["asm"]["Kf"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=Module["asm"]["Lf"]).apply(null,arguments)};var __ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=Module["asm"]["Mf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_"]=Module["asm"]["Nf"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IKcEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_"]=function(){return(__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_"]=Module["asm"]["Of"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IcEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IcEEPT_S2_"]=function(){return(__ZNSt3__212__to_addressB6v15007IcEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IcEEPT_S2_"]=Module["asm"]["Pf"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=Module["asm"]["Qf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Rf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc"]=Module["asm"]["Sf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_"]=Module["asm"]["Tf"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev"]=Module["asm"]["Uf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev"]=Module["asm"]["Vf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_"]=Module["asm"]["Wf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev"]=Module["asm"]["Xf"]).apply(null,arguments)};var __ZNSt3__23minB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23minB6v15007ImEERKT_S3_S3_"]=function(){return(__ZNSt3__23minB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23minB6v15007ImEERKT_S3_S3_"]=Module["asm"]["Yf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev"]=Module["asm"]["Zf"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE7compareEPKcS3_m=Module["__ZNSt3__211char_traitsIcE7compareEPKcS3_m"]=function(){return(__ZNSt3__211char_traitsIcE7compareEPKcS3_m=Module["__ZNSt3__211char_traitsIcE7compareEPKcS3_m"]=Module["asm"]["_f"]).apply(null,arguments)};var __ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=function(){return(__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=Module["asm"]["$f"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6lengthEPKc=Module["__ZNSt3__211char_traitsIcE6lengthEPKc"]=function(){return(__ZNSt3__211char_traitsIcE6lengthEPKc=Module["__ZNSt3__211char_traitsIcE6lengthEPKc"]=Module["asm"]["ag"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev"]=Module["asm"]["bg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=Module["asm"]["cg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["dg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev"]=Module["asm"]["eg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm"]=Module["asm"]["fg"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["gg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em"]=Module["asm"]["hg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["ig"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6assignERcRKc=Module["__ZNSt3__211char_traitsIcE6assignERcRKc"]=function(){return(__ZNSt3__211char_traitsIcE6assignERcRKc=Module["__ZNSt3__211char_traitsIcE6assignERcRKc"]=Module["asm"]["jg"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["kg"]).apply(null,arguments)};var __ZNSt3__29allocatorIcE10deallocateB6v15007EPcm=Module["__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm"]=function(){return(__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm=Module["__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm"]=Module["asm"]["lg"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["mg"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["ng"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc=Module["__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc"]=function(){return(__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc=Module["__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc"]=Module["asm"]["og"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["pg"]).apply(null,arguments)};var __ZNSt3__219__libcpp_deallocateB6v15007EPvmm=Module["__ZNSt3__219__libcpp_deallocateB6v15007EPvmm"]=function(){return(__ZNSt3__219__libcpp_deallocateB6v15007EPvmm=Module["__ZNSt3__219__libcpp_deallocateB6v15007EPvmm"]=Module["asm"]["qg"]).apply(null,arguments)};var __ZNSt3__224__is_overaligned_for_newB6v15007Em=Module["__ZNSt3__224__is_overaligned_for_newB6v15007Em"]=function(){return(__ZNSt3__224__is_overaligned_for_newB6v15007Em=Module["__ZNSt3__224__is_overaligned_for_newB6v15007Em"]=Module["asm"]["rg"]).apply(null,arguments)};var __ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_"]=function(){return(__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_"]=Module["asm"]["sg"]).apply(null,arguments)};var __ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_"]=function(){return(__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_"]=Module["asm"]["tg"]).apply(null,arguments)};var __ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_"]=function(){return(__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_"]=Module["asm"]["ug"]).apply(null,arguments)};var __ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_"]=function(){return(__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_"]=Module["asm"]["vg"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["wg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=Module["asm"]["xg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_"]=Module["asm"]["yg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["zg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev"]=Module["asm"]["Ag"]).apply(null,arguments)};var __ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Bg"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["Cg"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Dg"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["Eg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em"]=Module["asm"]["Fg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev"]=Module["asm"]["Gg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=Module["asm"]["Hg"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsImE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsImE3maxB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsImE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsImE3maxB6v15007Ev"]=Module["asm"]["Ig"]).apply(null,arguments)};var __ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=function(){return(__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=Module["asm"]["Jg"]).apply(null,arguments)};var __ZNSt3__29allocatorIcE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIcE8allocateB6v15007Em"]=function(){return(__ZNSt3__29allocatorIcE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIcE8allocateB6v15007Em"]=Module["asm"]["Kg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em"]=Module["asm"]["Lg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm"]=Module["asm"]["Mg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm"]=Module["asm"]["Ng"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc"]=Module["asm"]["Og"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em"]=Module["asm"]["Pg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em"]=Module["asm"]["Qg"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev"]=Module["asm"]["Rg"]).apply(null,arguments)};var __ZNSt3__217__libcpp_allocateB6v15007Emm=Module["__ZNSt3__217__libcpp_allocateB6v15007Emm"]=function(){return(__ZNSt3__217__libcpp_allocateB6v15007Emm=Module["__ZNSt3__217__libcpp_allocateB6v15007Emm"]=Module["asm"]["Sg"]).apply(null,arguments)};var __ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_"]=function(){return(__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_"]=Module["asm"]["Tg"]).apply(null,arguments)};var __ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_"]=function(){return(__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_"]=Module["asm"]["Ug"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev"]=Module["asm"]["Vg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev"]=Module["asm"]["Wg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=Module["asm"]["Xg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev"]=Module["asm"]["Yg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em"]=Module["asm"]["Zg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=Module["asm"]["_g"]).apply(null,arguments)};var __ZNSt3__23maxB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23maxB6v15007ImEERKT_S3_S3_"]=function(){return(__ZNSt3__23maxB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23maxB6v15007ImEERKT_S3_S3_"]=Module["asm"]["$g"]).apply(null,arguments)};var __ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=function(){return(__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=Module["asm"]["ah"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["bh"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_"]=function(){return(__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_"]=Module["asm"]["ch"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev"]=Module["asm"]["dh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em"]=Module["asm"]["eh"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=Module["asm"]["fh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev"]=Module["asm"]["gh"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["hh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev"]=Module["asm"]["ih"]).apply(null,arguments)};var __ZNSt3__29allocatorIcEC2B6v15007Ev=Module["__ZNSt3__29allocatorIcEC2B6v15007Ev"]=function(){return(__ZNSt3__29allocatorIcEC2B6v15007Ev=Module["__ZNSt3__29allocatorIcEC2B6v15007Ev"]=Module["asm"]["jh"]).apply(null,arguments)};var __ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev"]=function(){return(__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev"]=Module["asm"]["kh"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=Module["asm"]["lh"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=Module["asm"]["mh"]).apply(null,arguments)};var __ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_"]=function(){return(__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_"]=Module["asm"]["nh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm"]=Module["asm"]["oh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=Module["asm"]["ph"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em"]=Module["asm"]["qh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm"]=Module["asm"]["rh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4copyEPcPKcm=Module["__ZNSt3__211char_traitsIcE4copyEPcPKcm"]=function(){return(__ZNSt3__211char_traitsIcE4copyEPcPKcm=Module["__ZNSt3__211char_traitsIcE4copyEPcPKcm"]=Module["asm"]["sh"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["th"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE11to_int_typeEc=Module["__ZNSt3__211char_traitsIcE11to_int_typeEc"]=function(){return(__ZNSt3__211char_traitsIcE11to_int_typeEc=Module["__ZNSt3__211char_traitsIcE11to_int_typeEc"]=Module["asm"]["uh"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsIiE3minB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3minB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsIiE3minB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3minB6v15007Ev"]=Module["asm"]["vh"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsIiE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev"]=Module["asm"]["wh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE2eqEcc=Module["__ZNSt3__211char_traitsIcE2eqEcc"]=function(){return(__ZNSt3__211char_traitsIcE2eqEcc=Module["__ZNSt3__211char_traitsIcE2eqEcc"]=Module["asm"]["xh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4copyEPwPKwm=Module["__ZNSt3__211char_traitsIwE4copyEPwPKwm"]=function(){return(__ZNSt3__211char_traitsIwE4copyEPwPKwm=Module["__ZNSt3__211char_traitsIwE4copyEPwPKwm"]=Module["asm"]["yh"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["zh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE2eqEww=Module["__ZNSt3__211char_traitsIwE2eqEww"]=function(){return(__ZNSt3__211char_traitsIwE2eqEww=Module["__ZNSt3__211char_traitsIwE2eqEww"]=Module["asm"]["Ah"]).apply(null,arguments)};var __ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Bh"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev"]=Module["asm"]["Ch"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=Module["asm"]["Dh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em"]=Module["asm"]["Eh"]).apply(null,arguments)};var __ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_"]=function(){return(__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_"]=Module["asm"]["Fh"]).apply(null,arguments)};var __ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=function(){return(__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=Module["asm"]["Gh"]).apply(null,arguments)};var __ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_"]=function(){return(__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_"]=Module["asm"]["Hh"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=Module["asm"]["Ih"]).apply(null,arguments)};var __ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_"]=function(){return(__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_"]=Module["asm"]["Jh"]).apply(null,arguments)};var __ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_"]=function(){return(__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_"]=Module["asm"]["Kh"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=Module["asm"]["Lh"]).apply(null,arguments)};var __ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=function(){return(__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=Module["asm"]["Mh"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_"]=Module["asm"]["Nh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_"]=Module["asm"]["Oh"]).apply(null,arguments)};var __ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=Module["asm"]["Ph"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Qh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_"]=Module["asm"]["Rh"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=Module["asm"]["Sh"]).apply(null,arguments)};var __ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=Module["asm"]["Th"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_"]=Module["asm"]["Uh"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IKwEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_"]=function(){return(__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_"]=Module["asm"]["Vh"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IwEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IwEEPT_S2_"]=function(){return(__ZNSt3__212__to_addressB6v15007IwEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IwEEPT_S2_"]=Module["asm"]["Wh"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=Module["asm"]["Xh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Yh"]).apply(null,arguments)};var __ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_=Module["__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_"]=function(){return(__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_=Module["__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_"]=Module["asm"]["Zh"]).apply(null,arguments)};var __ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE=Module["__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE"]=function(){return(__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE=Module["__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE"]=Module["asm"]["_h"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev"]=Module["asm"]["$h"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev"]=Module["asm"]["ai"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=Module["asm"]["bi"]).apply(null,arguments)};var __ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["ci"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=Module["asm"]["di"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev"]=Module["asm"]["ei"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=Module["asm"]["fi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev"]=Module["asm"]["gi"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_"]=function(){return(__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_"]=Module["asm"]["hi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev"]=Module["asm"]["ii"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=Module["asm"]["ji"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_"]=function(){return(__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_"]=Module["asm"]["ki"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw"]=Module["asm"]["li"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev"]=Module["asm"]["mi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=Module["asm"]["ni"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev"]=Module["asm"]["oi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev"]=Module["asm"]["pi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev"]=Module["asm"]["qi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev"]=Module["asm"]["ri"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=Module["asm"]["si"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["ti"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["ui"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["vi"]).apply(null,arguments)};var __ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=function(){return(__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=Module["asm"]["wi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev"]=Module["asm"]["xi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev"]=Module["asm"]["yi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPcEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPcEplB6v15007El"]=function(){return(__ZNKSt3__211__wrap_iterIPcEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPcEplB6v15007El"]=Module["asm"]["zi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=Module["asm"]["Ai"]).apply(null,arguments)};var __ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=function(){return(__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=Module["asm"]["Bi"]).apply(null,arguments)};var __ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["Ci"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["Di"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6assignERwRKw=Module["__ZNSt3__211char_traitsIwE6assignERwRKw"]=function(){return(__ZNSt3__211char_traitsIwE6assignERwRKw=Module["__ZNSt3__211char_traitsIwE6assignERwRKw"]=Module["asm"]["Ei"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em"]=Module["asm"]["Fi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["Gi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em"]=Module["asm"]["Hi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev"]=Module["asm"]["Ii"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em"]=Module["asm"]["Ji"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=Module["asm"]["Ki"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev"]=Module["asm"]["Li"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev"]=Module["asm"]["Mi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPwEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPwEplB6v15007El"]=function(){return(__ZNKSt3__211__wrap_iterIPwEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPwEplB6v15007El"]=Module["asm"]["Ni"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev"]=Module["asm"]["Oi"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6lengthEPKw=Module["__ZNSt3__211char_traitsIwE6lengthEPKw"]=function(){return(__ZNSt3__211char_traitsIwE6lengthEPKw=Module["__ZNSt3__211char_traitsIwE6lengthEPKw"]=Module["asm"]["Pi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em"]=Module["asm"]["Qi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm"]=Module["asm"]["Ri"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Si"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Ti"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev"]=Module["asm"]["Ui"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em"]=Module["asm"]["Vi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em"]=Module["asm"]["Wi"]).apply(null,arguments)};var __ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=function(){return(__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=Module["asm"]["Xi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm"]=Module["asm"]["Yi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw"]=Module["asm"]["Zi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em"]=Module["asm"]["_i"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev"]=Module["asm"]["$i"]).apply(null,arguments)};var __ZNSt3__29allocatorIwEC2B6v15007Ev=Module["__ZNSt3__29allocatorIwEC2B6v15007Ev"]=function(){return(__ZNSt3__29allocatorIwEC2B6v15007Ev=Module["__ZNSt3__29allocatorIwEC2B6v15007Ev"]=Module["asm"]["aj"]).apply(null,arguments)};var __ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev"]=function(){return(__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev"]=Module["asm"]["bj"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=Module["asm"]["cj"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw=Module["__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw"]=function(){return(__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw=Module["__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw"]=Module["asm"]["dj"]).apply(null,arguments)};var __ZNSt3__29allocatorIwE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIwE8allocateB6v15007Em"]=function(){return(__ZNSt3__29allocatorIwE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIwE8allocateB6v15007Em"]=Module["asm"]["ej"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["fj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm"]=Module["asm"]["gj"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["hj"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["ij"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["jj"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["kj"]).apply(null,arguments)};var __ZNSt3__221__convert_to_integralB6v15007Em=Module["__ZNSt3__221__convert_to_integralB6v15007Em"]=function(){return(__ZNSt3__221__convert_to_integralB6v15007Em=Module["__ZNSt3__221__convert_to_integralB6v15007Em"]=Module["asm"]["lj"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm"]=Module["asm"]["mj"]).apply(null,arguments)};var __ZNSt3__29allocatorIwE10deallocateB6v15007EPwm=Module["__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm"]=function(){return(__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm=Module["__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm"]=Module["asm"]["nj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev"]=Module["asm"]["oj"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["pj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["qj"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_"]=function(){return(__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_"]=Module["asm"]["rj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev"]=Module["asm"]["sj"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPcEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPcEpLB6v15007El"]=function(){return(__ZNSt3__211__wrap_iterIPcEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPcEpLB6v15007El"]=Module["asm"]["tj"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=Module["asm"]["uj"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=Module["asm"]["vj"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPwEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPwEpLB6v15007El"]=function(){return(__ZNSt3__211__wrap_iterIPwEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPwEpLB6v15007El"]=Module["asm"]["wj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm"]=Module["asm"]["xj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em"]=Module["asm"]["yj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev"]=Module["asm"]["zj"]).apply(null,arguments)};var __ZSt17__throw_bad_allocv=Module["__ZSt17__throw_bad_allocv"]=function(){return(__ZSt17__throw_bad_allocv=Module["__ZSt17__throw_bad_allocv"]=Module["asm"]["Aj"]).apply(null,arguments)};var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=function(){return(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=Module["asm"]["Bj"]).apply(null,arguments)};var __ZnwmRKSt9nothrow_t=Module["__ZnwmRKSt9nothrow_t"]=function(){return(__ZnwmRKSt9nothrow_t=Module["__ZnwmRKSt9nothrow_t"]=Module["asm"]["Cj"]).apply(null,arguments)};var __Znam=Module["__Znam"]=function(){return(__Znam=Module["__Znam"]=Module["asm"]["Dj"]).apply(null,arguments)};var __ZnamRKSt9nothrow_t=Module["__ZnamRKSt9nothrow_t"]=function(){return(__ZnamRKSt9nothrow_t=Module["__ZnamRKSt9nothrow_t"]=Module["asm"]["Ej"]).apply(null,arguments)};var __ZdlPvRKSt9nothrow_t=Module["__ZdlPvRKSt9nothrow_t"]=function(){return(__ZdlPvRKSt9nothrow_t=Module["__ZdlPvRKSt9nothrow_t"]=Module["asm"]["Fj"]).apply(null,arguments)};var __ZdlPvm=Module["__ZdlPvm"]=function(){return(__ZdlPvm=Module["__ZdlPvm"]=Module["asm"]["Gj"]).apply(null,arguments)};var __ZdaPv=Module["__ZdaPv"]=function(){return(__ZdaPv=Module["__ZdaPv"]=Module["asm"]["Hj"]).apply(null,arguments)};var __ZdaPvRKSt9nothrow_t=Module["__ZdaPvRKSt9nothrow_t"]=function(){return(__ZdaPvRKSt9nothrow_t=Module["__ZdaPvRKSt9nothrow_t"]=Module["asm"]["Ij"]).apply(null,arguments)};var __ZdaPvm=Module["__ZdaPvm"]=function(){return(__ZdaPvm=Module["__ZdaPvm"]=Module["asm"]["Jj"]).apply(null,arguments)};var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=function(){return(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=Module["asm"]["Kj"]).apply(null,arguments)};var __ZNSt3__222__libcpp_aligned_allocB6v15007Emm=Module["__ZNSt3__222__libcpp_aligned_allocB6v15007Emm"]=function(){return(__ZNSt3__222__libcpp_aligned_allocB6v15007Emm=Module["__ZNSt3__222__libcpp_aligned_allocB6v15007Emm"]=Module["asm"]["Lj"]).apply(null,arguments)};var __ZnwmSt11align_val_tRKSt9nothrow_t=Module["__ZnwmSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZnwmSt11align_val_tRKSt9nothrow_t=Module["__ZnwmSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Mj"]).apply(null,arguments)};var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=function(){return(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=Module["asm"]["Nj"]).apply(null,arguments)};var __ZnamSt11align_val_tRKSt9nothrow_t=Module["__ZnamSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZnamSt11align_val_tRKSt9nothrow_t=Module["__ZnamSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Oj"]).apply(null,arguments)};var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=function(){return(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=Module["asm"]["Pj"]).apply(null,arguments)};var __ZNSt3__221__libcpp_aligned_freeB6v15007EPv=Module["__ZNSt3__221__libcpp_aligned_freeB6v15007EPv"]=function(){return(__ZNSt3__221__libcpp_aligned_freeB6v15007EPv=Module["__ZNSt3__221__libcpp_aligned_freeB6v15007EPv"]=Module["asm"]["Qj"]).apply(null,arguments)};var __ZdlPvSt11align_val_tRKSt9nothrow_t=Module["__ZdlPvSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZdlPvSt11align_val_tRKSt9nothrow_t=Module["__ZdlPvSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Rj"]).apply(null,arguments)};var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=function(){return(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=Module["asm"]["Sj"]).apply(null,arguments)};var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=function(){return(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=Module["asm"]["Tj"]).apply(null,arguments)};var __ZdaPvSt11align_val_tRKSt9nothrow_t=Module["__ZdaPvSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZdaPvSt11align_val_tRKSt9nothrow_t=Module["__ZdaPvSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Uj"]).apply(null,arguments)};var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=function(){return(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=Module["asm"]["Vj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev"]=Module["asm"]["Wj"]).apply(null,arguments)};var __ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm=Module["__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm"]=function(){return(__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm=Module["__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm"]=Module["asm"]["Xj"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm"]=Module["asm"]["Yj"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["Zj"]).apply(null,arguments)};var __ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["_j"]).apply(null,arguments)};var __ZNSt9exceptionC2B6v15007Ev=Module["__ZNSt9exceptionC2B6v15007Ev"]=function(){return(__ZNSt9exceptionC2B6v15007Ev=Module["__ZNSt9exceptionC2B6v15007Ev"]=Module["asm"]["$j"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringC2EPKc=Module["__ZNSt3__218__libcpp_refstringC2EPKc"]=function(){return(__ZNSt3__218__libcpp_refstringC2EPKc=Module["__ZNSt3__218__libcpp_refstringC2EPKc"]=Module["asm"]["ak"]).apply(null,arguments)};var __ZNSt11logic_errorC2ERKS_=Module["__ZNSt11logic_errorC2ERKS_"]=function(){return(__ZNSt11logic_errorC2ERKS_=Module["__ZNSt11logic_errorC2ERKS_"]=Module["asm"]["bk"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringC2ERKS0_=Module["__ZNSt3__218__libcpp_refstringC2ERKS0_"]=function(){return(__ZNSt3__218__libcpp_refstringC2ERKS0_=Module["__ZNSt3__218__libcpp_refstringC2ERKS0_"]=Module["asm"]["ck"]).apply(null,arguments)};var __ZNKSt3__218__libcpp_refstring15__uses_refcountEv=Module["__ZNKSt3__218__libcpp_refstring15__uses_refcountEv"]=function(){return(__ZNKSt3__218__libcpp_refstring15__uses_refcountEv=Module["__ZNKSt3__218__libcpp_refstring15__uses_refcountEv"]=Module["asm"]["dk"]).apply(null,arguments)};var __ZNSt11logic_erroraSERKS_=Module["__ZNSt11logic_erroraSERKS_"]=function(){return(__ZNSt11logic_erroraSERKS_=Module["__ZNSt11logic_erroraSERKS_"]=Module["asm"]["ek"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringaSERKS0_=Module["__ZNSt3__218__libcpp_refstringaSERKS0_"]=function(){return(__ZNSt3__218__libcpp_refstringaSERKS0_=Module["__ZNSt3__218__libcpp_refstringaSERKS0_"]=Module["asm"]["fk"]).apply(null,arguments)};var __ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["gk"]).apply(null,arguments)};var __ZNSt13runtime_errorC2EPKc=Module["__ZNSt13runtime_errorC2EPKc"]=function(){return(__ZNSt13runtime_errorC2EPKc=Module["__ZNSt13runtime_errorC2EPKc"]=Module["asm"]["hk"]).apply(null,arguments)};var __ZNSt13runtime_errorC2ERKS_=Module["__ZNSt13runtime_errorC2ERKS_"]=function(){return(__ZNSt13runtime_errorC2ERKS_=Module["__ZNSt13runtime_errorC2ERKS_"]=Module["asm"]["ik"]).apply(null,arguments)};var __ZNSt13runtime_erroraSERKS_=Module["__ZNSt13runtime_erroraSERKS_"]=function(){return(__ZNSt13runtime_erroraSERKS_=Module["__ZNSt13runtime_erroraSERKS_"]=Module["asm"]["jk"]).apply(null,arguments)};var __ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["kk"]).apply(null,arguments)};var __ZNSt11logic_errorC1EPKc=Module["__ZNSt11logic_errorC1EPKc"]=function(){return(__ZNSt11logic_errorC1EPKc=Module["__ZNSt11logic_errorC1EPKc"]=Module["asm"]["lk"]).apply(null,arguments)};var __ZNSt11logic_errorC1ERKS_=Module["__ZNSt11logic_errorC1ERKS_"]=function(){return(__ZNSt11logic_errorC1ERKS_=Module["__ZNSt11logic_errorC1ERKS_"]=Module["asm"]["mk"]).apply(null,arguments)};var __ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["nk"]).apply(null,arguments)};var __ZNSt13runtime_errorC1EPKc=Module["__ZNSt13runtime_errorC1EPKc"]=function(){return(__ZNSt13runtime_errorC1EPKc=Module["__ZNSt13runtime_errorC1EPKc"]=Module["asm"]["ok"]).apply(null,arguments)};var __ZNSt13runtime_errorC1ERKS_=Module["__ZNSt13runtime_errorC1ERKS_"]=function(){return(__ZNSt13runtime_errorC1ERKS_=Module["__ZNSt13runtime_errorC1ERKS_"]=Module["asm"]["pk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm"]=Module["asm"]["qk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4moveEPcPKcm=Module["__ZNSt3__211char_traitsIcE4moveEPcPKcm"]=function(){return(__ZNSt3__211char_traitsIcE4moveEPcPKcm=Module["__ZNSt3__211char_traitsIcE4moveEPcPKcm"]=Module["asm"]["rk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc"]=Module["asm"]["sk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm"]=Module["asm"]["tk"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["uk"]).apply(null,arguments)};var __ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_"]=function(){return(__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_"]=Module["asm"]["vk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm"]=Module["asm"]["wk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc"]=Module["asm"]["xk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm"]=Module["asm"]["yk"]).apply(null,arguments)};var __ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["zk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4findEPKcmRS2_=Module["__ZNSt3__211char_traitsIcE4findEPKcmRS2_"]=function(){return(__ZNSt3__211char_traitsIcE4findEPKcmRS2_=Module["__ZNSt3__211char_traitsIcE4findEPKcmRS2_"]=Module["asm"]["Ak"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"]=Module["asm"]["Bk"]).apply(null,arguments)};var __ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Ck"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm"]=Module["asm"]["Dk"]).apply(null,arguments)};var __ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Ek"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc"]=Module["asm"]["Fk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"]=Module["asm"]["Gk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6assignEPcmc=Module["__ZNSt3__211char_traitsIcE6assignEPcmc"]=function(){return(__ZNSt3__211char_traitsIcE6assignEPcmc=Module["__ZNSt3__211char_traitsIcE6assignEPcmc"]=Module["asm"]["Hk"]).apply(null,arguments)};var __ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=Module["asm"]["Ik"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc"]=Module["asm"]["Jk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"]=Module["asm"]["Kk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=Module["asm"]["Lk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm"]=Module["asm"]["Mk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm"]=Module["asm"]["Nk"]).apply(null,arguments)};var __ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Ok"]).apply(null,arguments)};var __ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_"]=function(){return(__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_"]=Module["asm"]["Pk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc"]=Module["asm"]["Qk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm"]=Module["asm"]["Rk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc"]=Module["asm"]["Sk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"]=Module["asm"]["Tk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em"]=Module["asm"]["Uk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm"]=Module["asm"]["Vk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm"]=Module["asm"]["Wk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"]=Module["asm"]["Xk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_"]=Module["asm"]["Yk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm"]=Module["asm"]["Zk"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["_k"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc"]=Module["asm"]["$k"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc"]=Module["asm"]["al"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm"]=Module["asm"]["bl"]).apply(null,arguments)};var __ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["cl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"]=Module["asm"]["dl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc"]=Module["asm"]["el"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm"]=Module["asm"]["fl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc"]=Module["asm"]["gl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm"]=Module["asm"]["hl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm"]=Module["asm"]["il"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc"]=Module["asm"]["jl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm"]=Module["asm"]["kl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc"]=Module["asm"]["ll"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=Module["asm"]["ml"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm"]=Module["asm"]["nl"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["ol"]).apply(null,arguments)};var __ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_"]=function(){return(__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_"]=Module["asm"]["pl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm"]=Module["asm"]["ql"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=Module["asm"]["rl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc"]=Module["asm"]["sl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm"]=Module["asm"]["tl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc"]=Module["asm"]["ul"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc"]=Module["asm"]["vl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm"]=Module["asm"]["wl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm"]=Module["asm"]["xl"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4moveEPwPKwm=Module["__ZNSt3__211char_traitsIwE4moveEPwPKwm"]=function(){return(__ZNSt3__211char_traitsIwE4moveEPwPKwm=Module["__ZNSt3__211char_traitsIwE4moveEPwPKwm"]=Module["asm"]["yl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw"]=Module["asm"]["zl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm"]=Module["asm"]["Al"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Bl"]).apply(null,arguments)};var __ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_"]=function(){return(__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_"]=Module["asm"]["Cl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm"]=Module["asm"]["Dl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw"]=Module["asm"]["El"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm"]=Module["asm"]["Fl"]).apply(null,arguments)};var __ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Gl"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4findEPKwmRS2_=Module["__ZNSt3__211char_traitsIwE4findEPKwmRS2_"]=function(){return(__ZNSt3__211char_traitsIwE4findEPKwmRS2_=Module["__ZNSt3__211char_traitsIwE4findEPKwmRS2_"]=Module["asm"]["Hl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"]=Module["asm"]["Il"]).apply(null,arguments)};var __ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["Jl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm"]=Module["asm"]["Kl"]).apply(null,arguments)};var __ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Ll"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw"]=Module["asm"]["Ml"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm"]=Module["asm"]["Nl"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6assignEPwmw=Module["__ZNSt3__211char_traitsIwE6assignEPwmw"]=function(){return(__ZNSt3__211char_traitsIwE6assignEPwmw=Module["__ZNSt3__211char_traitsIwE6assignEPwmw"]=Module["asm"]["Ol"]).apply(null,arguments)};var __ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=Module["asm"]["Pl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw"]=Module["asm"]["Ql"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm"]=Module["asm"]["Rl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm"]=Module["asm"]["Sl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=Module["asm"]["Tl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm"]=Module["asm"]["Ul"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm"]=Module["asm"]["Vl"]).apply(null,arguments)};var __ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Wl"]).apply(null,arguments)};var __ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_"]=function(){return(__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_"]=Module["asm"]["Xl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw"]=Module["asm"]["Yl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm"]=Module["asm"]["Zl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw"]=Module["asm"]["_l"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm"]=Module["asm"]["$l"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em"]=Module["asm"]["am"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm"]=Module["asm"]["bm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm"]=Module["asm"]["cm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm"]=Module["asm"]["dm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_"]=Module["asm"]["em"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm"]=Module["asm"]["fm"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["gm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw"]=Module["asm"]["hm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw"]=Module["asm"]["im"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm"]=Module["asm"]["jm"]).apply(null,arguments)};var __ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["km"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm"]=Module["asm"]["lm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm"]=Module["asm"]["mm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"]=Module["asm"]["nm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw"]=Module["asm"]["om"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm"]=Module["asm"]["pm"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["qm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw"]=Module["asm"]["rm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm"]=Module["asm"]["sm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm"]=Module["asm"]["tm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw"]=Module["asm"]["um"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm"]=Module["asm"]["vm"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE7compareEPKwS3_m=Module["__ZNSt3__211char_traitsIwE7compareEPKwS3_m"]=function(){return(__ZNSt3__211char_traitsIwE7compareEPKwS3_m=Module["__ZNSt3__211char_traitsIwE7compareEPKwS3_m"]=Module["asm"]["wm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw"]=Module["asm"]["xm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=Module["asm"]["ym"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm"]=Module["asm"]["zm"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Am"]).apply(null,arguments)};var __ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_"]=function(){return(__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_"]=Module["asm"]["Bm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm"]=Module["asm"]["Cm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev"]=Module["asm"]["Dm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=Module["asm"]["Em"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm"]=Module["asm"]["Fm"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_"]=Module["asm"]["Gm"]).apply(null,arguments)};var __ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm=Module["__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm"]=function(){return(__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm=Module["__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm"]=Module["asm"]["Hm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw"]=Module["asm"]["Im"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm"]=Module["asm"]["Jm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw"]=Module["asm"]["Km"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"]=Module["asm"]["Lm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm"]=Module["asm"]["Mm"]).apply(null,arguments)};var __ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_=Module["__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_"]=function(){return(__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_=Module["__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_"]=Module["asm"]["Nm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_"]=Module["asm"]["Om"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m"]=Module["asm"]["Pm"]).apply(null,arguments)};var __ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Qm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev"]=Module["asm"]["Rm"]).apply(null,arguments)};var __ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Sm"]).apply(null,arguments)};var __ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Tm"]).apply(null,arguments)};var __ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Um"]).apply(null,arguments)};var __ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Vm"]).apply(null,arguments)};var __ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Wm"]).apply(null,arguments)};var __ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Xm"]).apply(null,arguments)};var __ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Ym"]).apply(null,arguments)};var __ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["Zm"]).apply(null,arguments)};var __ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["_m"]).apply(null,arguments)};var __ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["$m"]).apply(null,arguments)};var __ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["an"]).apply(null,arguments)};var __ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["bn"]).apply(null,arguments)};var __ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["cn"]).apply(null,arguments)};var __ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["dn"]).apply(null,arguments)};var __ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["en"]).apply(null,arguments)};var __ZNSt3__29to_stringEi=Module["__ZNSt3__29to_stringEi"]=function(){return(__ZNSt3__29to_stringEi=Module["__ZNSt3__29to_stringEi"]=Module["asm"]["fn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["gn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_"]=Module["asm"]["hn"]).apply(null,arguments)};var __ZNSt3__29to_stringEl=Module["__ZNSt3__29to_stringEl"]=function(){return(__ZNSt3__29to_stringEl=Module["__ZNSt3__29to_stringEl"]=Module["asm"]["jn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["kn"]).apply(null,arguments)};var __ZNSt3__29to_stringEx=Module["__ZNSt3__29to_stringEx"]=function(){return(__ZNSt3__29to_stringEx=Module["__ZNSt3__29to_stringEx"]=Module["asm"]["ln"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["mn"]).apply(null,arguments)};var __ZNSt3__29to_stringEj=Module["__ZNSt3__29to_stringEj"]=function(){return(__ZNSt3__29to_stringEj=Module["__ZNSt3__29to_stringEj"]=Module["asm"]["nn"]).apply(null,arguments)};var __ZNSt3__29to_stringEm=Module["__ZNSt3__29to_stringEm"]=function(){return(__ZNSt3__29to_stringEm=Module["__ZNSt3__29to_stringEm"]=Module["asm"]["on"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["pn"]).apply(null,arguments)};var __ZNSt3__29to_stringEy=Module["__ZNSt3__29to_stringEy"]=function(){return(__ZNSt3__29to_stringEy=Module["__ZNSt3__29to_stringEy"]=Module["asm"]["qn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["rn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEi=Module["__ZNSt3__210to_wstringEi"]=function(){return(__ZNSt3__210to_wstringEi=Module["__ZNSt3__210to_wstringEi"]=Module["asm"]["sn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_"]=Module["asm"]["tn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEl=Module["__ZNSt3__210to_wstringEl"]=function(){return(__ZNSt3__210to_wstringEl=Module["__ZNSt3__210to_wstringEl"]=Module["asm"]["un"]).apply(null,arguments)};var __ZNSt3__210to_wstringEx=Module["__ZNSt3__210to_wstringEx"]=function(){return(__ZNSt3__210to_wstringEx=Module["__ZNSt3__210to_wstringEx"]=Module["asm"]["vn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEj=Module["__ZNSt3__210to_wstringEj"]=function(){return(__ZNSt3__210to_wstringEj=Module["__ZNSt3__210to_wstringEj"]=Module["asm"]["wn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEm=Module["__ZNSt3__210to_wstringEm"]=function(){return(__ZNSt3__210to_wstringEm=Module["__ZNSt3__210to_wstringEm"]=Module["asm"]["xn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEy=Module["__ZNSt3__210to_wstringEy"]=function(){return(__ZNSt3__210to_wstringEy=Module["__ZNSt3__210to_wstringEy"]=Module["asm"]["yn"]).apply(null,arguments)};var __ZNSt3__29to_stringEf=Module["__ZNSt3__29to_stringEf"]=function(){return(__ZNSt3__29to_stringEf=Module["__ZNSt3__29to_stringEf"]=Module["asm"]["zn"]).apply(null,arguments)};var __ZNSt3__29to_stringEd=Module["__ZNSt3__29to_stringEd"]=function(){return(__ZNSt3__29to_stringEd=Module["__ZNSt3__29to_stringEd"]=Module["asm"]["An"]).apply(null,arguments)};var __ZNSt3__29to_stringEe=Module["__ZNSt3__29to_stringEe"]=function(){return(__ZNSt3__29to_stringEe=Module["__ZNSt3__29to_stringEe"]=Module["asm"]["Bn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEf=Module["__ZNSt3__210to_wstringEf"]=function(){return(__ZNSt3__210to_wstringEf=Module["__ZNSt3__210to_wstringEf"]=Module["asm"]["Cn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev"]=Module["asm"]["Dn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em"]=Module["asm"]["En"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_"]=Module["asm"]["Fn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEd=Module["__ZNSt3__210to_wstringEd"]=function(){return(__ZNSt3__210to_wstringEd=Module["__ZNSt3__210to_wstringEd"]=Module["asm"]["Gn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEe=Module["__ZNSt3__210to_wstringEe"]=function(){return(__ZNSt3__210to_wstringEe=Module["__ZNSt3__210to_wstringEe"]=Module["asm"]["Hn"]).apply(null,arguments)};var __ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=function(){return(__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=Module["asm"]["In"]).apply(null,arguments)};var __ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_"]=function(){return(__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_"]=Module["asm"]["Jn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Kn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Ln"]).apply(null,arguments)};var __ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=Module["asm"]["Mn"]).apply(null,arguments)};var __ZNKSt3__210__identityclIRKcEEOT_S5_=Module["__ZNKSt3__210__identityclIRKcEEOT_S5_"]=function(){return(__ZNKSt3__210__identityclIRKcEEOT_S5_=Module["__ZNKSt3__210__identityclIRKcEEOT_S5_"]=Module["asm"]["Nn"]).apply(null,arguments)};var __ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=Module["asm"]["On"]).apply(null,arguments)};var __ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=function(){return(__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=Module["asm"]["Pn"]).apply(null,arguments)};var __ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_"]=function(){return(__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_"]=Module["asm"]["Qn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Rn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Sn"]).apply(null,arguments)};var __ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=Module["asm"]["Tn"]).apply(null,arguments)};var __ZNKSt3__210__identityclIRKwEEOT_S5_=Module["__ZNKSt3__210__identityclIRKwEEOT_S5_"]=function(){return(__ZNKSt3__210__identityclIRKwEEOT_S5_=Module["__ZNKSt3__210__identityclIRKwEEOT_S5_"]=Module["asm"]["Un"]).apply(null,arguments)};var __ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=Module["asm"]["Vn"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev"]=Module["asm"]["Wn"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev"]=Module["asm"]["Xn"]).apply(null,arguments)};var __ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_=Module["__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_"]=function(){return(__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_=Module["__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_"]=Module["asm"]["Yn"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=Module["asm"]["Zn"]).apply(null,arguments)};var __ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_"]=function(){return(__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_"]=Module["asm"]["_n"]).apply(null,arguments)};var __ZNSt3__212__complementB6v15007IjEET_S1_=Module["__ZNSt3__212__complementB6v15007IjEET_S1_"]=function(){return(__ZNSt3__212__complementB6v15007IjEET_S1_=Module["__ZNSt3__212__complementB6v15007IjEET_S1_"]=Module["asm"]["$n"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=Module["asm"]["ao"]).apply(null,arguments)};var __ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_"]=function(){return(__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_"]=Module["asm"]["bo"]).apply(null,arguments)};var __ZNSt3__212__complementB6v15007IyEET_S1_=Module["__ZNSt3__212__complementB6v15007IyEET_S1_"]=function(){return(__ZNSt3__212__complementB6v15007IyEET_S1_=Module["__ZNSt3__212__complementB6v15007IyEET_S1_"]=Module["asm"]["co"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=Module["asm"]["eo"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey=Module["__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey"]=function(){return(__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey=Module["__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey"]=Module["asm"]["fo"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy=Module["__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy"]=function(){return(__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy=Module["__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy"]=Module["asm"]["go"]).apply(null,arguments)};var __ZNSt3__212__libcpp_clzB6v15007Ey=Module["__ZNSt3__212__libcpp_clzB6v15007Ey"]=function(){return(__ZNSt3__212__libcpp_clzB6v15007Ey=Module["__ZNSt3__212__libcpp_clzB6v15007Ey"]=Module["asm"]["ho"]).apply(null,arguments)};var __ZNSt3__26__itoa13__base_10_u64B6v15007EPcy=Module["__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy"]=function(){return(__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy=Module["__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy"]=Module["asm"]["io"]).apply(null,arguments)};var __ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_"]=function(){return(__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_"]=Module["asm"]["jo"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=Module["asm"]["ko"]).apply(null,arguments)};var __ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_"]=function(){return(__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_"]=Module["asm"]["lo"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_"]=Module["asm"]["mo"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_"]=Module["asm"]["no"]).apply(null,arguments)};var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=function(){return(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=Module["asm"]["oo"]).apply(null,arguments)};var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=function(){return(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=Module["asm"]["po"]).apply(null,arguments)};var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=function(){return(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=Module["asm"]["qo"]).apply(null,arguments)};var ___gxx_personality_v0=Module["___gxx_personality_v0"]=function(){return(___gxx_personality_v0=Module["___gxx_personality_v0"]=Module["asm"]["ro"]).apply(null,arguments)};var ___cxa_free_exception=Module["___cxa_free_exception"]=function(){return(___cxa_free_exception=Module["___cxa_free_exception"]=Module["asm"]["so"]).apply(null,arguments)};var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=function(){return(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=Module["asm"]["to"]).apply(null,arguments)};var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=function(){return(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=Module["asm"]["uo"]).apply(null,arguments)};var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=function(){return(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=Module["asm"]["vo"]).apply(null,arguments)};var __ZSt9terminatev=Module["__ZSt9terminatev"]=function(){return(__ZSt9terminatev=Module["__ZSt9terminatev"]=Module["asm"]["wo"]).apply(null,arguments)};var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=function(){return(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=Module["asm"]["xo"]).apply(null,arguments)};var ___dynamic_cast=Module["___dynamic_cast"]=function(){return(___dynamic_cast=Module["___dynamic_cast"]=Module["asm"]["yo"]).apply(null,arguments)};var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=function(){return(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=Module["asm"]["zo"]).apply(null,arguments)};var ___cxa_can_catch=Module["___cxa_can_catch"]=function(){return(___cxa_can_catch=Module["___cxa_can_catch"]=Module["asm"]["Ao"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["Bo"]).apply(null,arguments)};var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=function(){return(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=Module["asm"]["Co"]).apply(null,arguments)};var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=function(){return(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=Module["asm"]["Do"]).apply(null,arguments)};var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=function(){return(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=Module["asm"]["Eo"]).apply(null,arguments)};var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=function(){return(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=Module["asm"]["Fo"]).apply(null,arguments)};var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=function(){return(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=Module["asm"]["Go"]).apply(null,arguments)};var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=function(){return(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=Module["asm"]["Ho"]).apply(null,arguments)};var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=function(){return(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=Module["asm"]["Io"]).apply(null,arguments)};var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=function(){return(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=Module["asm"]["Jo"]).apply(null,arguments)};var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=function(){return(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=Module["asm"]["Ko"]).apply(null,arguments)};var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=function(){return(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=Module["asm"]["Lo"]).apply(null,arguments)};var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=function(){return(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=Module["asm"]["Mo"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=function(){return(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=Module["asm"]["No"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=function(){return(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=Module["asm"]["Oo"]).apply(null,arguments)};var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=function(){return(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=Module["asm"]["Po"]).apply(null,arguments)};var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=function(){return(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=Module["asm"]["Qo"]).apply(null,arguments)};var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=function(){return(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=Module["asm"]["Ro"]).apply(null,arguments)};var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=function(){return(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=Module["asm"]["So"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=function(){return(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=Module["asm"]["To"]).apply(null,arguments)};var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=function(){return(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=Module["asm"]["Uo"]).apply(null,arguments)};var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=function(){return(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=Module["asm"]["Vo"]).apply(null,arguments)};var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=function(){return(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=Module["asm"]["Wo"]).apply(null,arguments)};var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=function(){return(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=Module["asm"]["Xo"]).apply(null,arguments)};var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=function(){return(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=Module["asm"]["Yo"]).apply(null,arguments)};var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=function(){return(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=Module["asm"]["Zo"]).apply(null,arguments)};var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=function(){return(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=Module["asm"]["_o"]).apply(null,arguments)};var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=function(){return(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=Module["asm"]["$o"]).apply(null,arguments)};var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=function(){return(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=Module["asm"]["ap"]).apply(null,arguments)};var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=function(){return(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=Module["asm"]["bp"]).apply(null,arguments)};var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=function(){return(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=Module["asm"]["cp"]).apply(null,arguments)};var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=function(){return(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=Module["asm"]["dp"]).apply(null,arguments)};var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=function(){return(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=Module["asm"]["ep"]).apply(null,arguments)};var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=function(){return(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=Module["asm"]["fp"]).apply(null,arguments)};var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=function(){return(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=Module["asm"]["gp"]).apply(null,arguments)};var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=function(){return(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=Module["asm"]["hp"]).apply(null,arguments)};var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=function(){return(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=Module["asm"]["ip"]).apply(null,arguments)};var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=function(){return(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=Module["asm"]["jp"]).apply(null,arguments)};var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=function(){return(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=Module["asm"]["kp"]).apply(null,arguments)};var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=function(){return(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=Module["asm"]["lp"]).apply(null,arguments)};var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=function(){return(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=Module["asm"]["mp"]).apply(null,arguments)};var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=function(){return(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=Module["asm"]["np"]).apply(null,arguments)};var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=function(){return(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=Module["asm"]["op"]).apply(null,arguments)};var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=function(){return(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=Module["asm"]["pp"]).apply(null,arguments)};var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=function(){return(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=Module["asm"]["qp"]).apply(null,arguments)};var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=function(){return(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=Module["asm"]["rp"]).apply(null,arguments)};var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=function(){return(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=Module["asm"]["sp"]).apply(null,arguments)};var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=function(){return(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=Module["asm"]["tp"]).apply(null,arguments)};var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=function(){return(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=Module["asm"]["up"]).apply(null,arguments)};var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=function(){return(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=Module["asm"]["vp"]).apply(null,arguments)};var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=function(){return(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=Module["asm"]["wp"]).apply(null,arguments)};var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=function(){return(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=Module["asm"]["xp"]).apply(null,arguments)};var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=function(){return(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=Module["asm"]["yp"]).apply(null,arguments)};var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=function(){return(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=Module["asm"]["zp"]).apply(null,arguments)};var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=function(){return(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=Module["asm"]["Ap"]).apply(null,arguments)};var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=function(){return(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=Module["asm"]["Bp"]).apply(null,arguments)};var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=function(){return(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=Module["asm"]["Cp"]).apply(null,arguments)};var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=function(){return(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=Module["asm"]["Dp"]).apply(null,arguments)};var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=function(){return(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=Module["asm"]["Ep"]).apply(null,arguments)};var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=function(){return(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=Module["asm"]["Fp"]).apply(null,arguments)};var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=function(){return(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=Module["asm"]["Gp"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Hp"]).apply(null,arguments)};var __ZTIPK16failsafe_flags_s=Module["__ZTIPK16failsafe_flags_s"]=47808;var __ZTIP16failsafe_flags_s=Module["__ZTIP16failsafe_flags_s"]=47792;var __ZTI16failsafe_flags_s=Module["__ZTI16failsafe_flags_s"]=47784;var __ZTIb=Module["__ZTIb"]=32072;var __ZTIh=Module["__ZTIh"]=32228;var __ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47968;var __ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47952;var __ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47896;var __ZTISt12length_error=Module["__ZTISt12length_error"]=34188;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=34148;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=33960;var __ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=47884;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=34240;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=34200;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=33460;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=33592;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=33500;var __ZTS16failsafe_flags_s=Module["__ZTS16failsafe_flags_s"]=25709;var __ZTSP16failsafe_flags_s=Module["__ZTSP16failsafe_flags_s"]=25728;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=33712;var __ZTSPK16failsafe_flags_s=Module["__ZTSPK16failsafe_flags_s"]=25748;var __ZTIi=Module["__ZTIi"]=32436;var __ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=25797;var __ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=25860;var __ZTIv=Module["__ZTIv"]=31964;var __ZTIf=Module["__ZTIf"]=32908;var __ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=25955;var __ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=26042;var __ZTIm=Module["__ZTIm"]=32592;var __ZTIc=Module["__ZTIc"]=32176;var __ZTIa=Module["__ZTIa"]=32280;var __ZTIs=Module["__ZTIs"]=32332;var __ZTIt=Module["__ZTIt"]=32384;var __ZTIj=Module["__ZTIj"]=32488;var __ZTIl=Module["__ZTIl"]=32540;var __ZTIx=Module["__ZTIx"]=32644;var __ZTIy=Module["__ZTIy"]=32696;var __ZTId=Module["__ZTId"]=32960;var __ZTINSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE=Module["__ZTINSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE"]=26232;var __ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=26304;var __ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=26380;var __ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=26456;var __ZTIN10emscripten11memory_viewIcEE=Module["__ZTIN10emscripten11memory_viewIcEE"]=26496;var __ZTIN10emscripten11memory_viewIaEE=Module["__ZTIN10emscripten11memory_viewIaEE"]=26536;var __ZTIN10emscripten11memory_viewIhEE=Module["__ZTIN10emscripten11memory_viewIhEE"]=26576;var __ZTIN10emscripten11memory_viewIsEE=Module["__ZTIN10emscripten11memory_viewIsEE"]=26616;var __ZTIN10emscripten11memory_viewItEE=Module["__ZTIN10emscripten11memory_viewItEE"]=26656;var __ZTIN10emscripten11memory_viewIiEE=Module["__ZTIN10emscripten11memory_viewIiEE"]=26696;var __ZTIN10emscripten11memory_viewIjEE=Module["__ZTIN10emscripten11memory_viewIjEE"]=26736;var __ZTIN10emscripten11memory_viewIlEE=Module["__ZTIN10emscripten11memory_viewIlEE"]=26776;var __ZTIN10emscripten11memory_viewImEE=Module["__ZTIN10emscripten11memory_viewImEE"]=26816;var __ZTIN10emscripten11memory_viewIfEE=Module["__ZTIN10emscripten11memory_viewIfEE"]=26856;var __ZTIN10emscripten11memory_viewIdEE=Module["__ZTIN10emscripten11memory_viewIdEE"]=26896;var __ZTSNSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE=Module["__ZTSNSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE"]=26166;var __ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=26240;var __ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=26312;var __ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=26388;var __ZTSN10emscripten11memory_viewIcEE=Module["__ZTSN10emscripten11memory_viewIcEE"]=26464;var __ZTSN10emscripten11memory_viewIaEE=Module["__ZTSN10emscripten11memory_viewIaEE"]=26504;var __ZTSN10emscripten11memory_viewIhEE=Module["__ZTSN10emscripten11memory_viewIhEE"]=26544;var __ZTSN10emscripten11memory_viewIsEE=Module["__ZTSN10emscripten11memory_viewIsEE"]=26584;var __ZTSN10emscripten11memory_viewItEE=Module["__ZTSN10emscripten11memory_viewItEE"]=26624;var __ZTSN10emscripten11memory_viewIiEE=Module["__ZTSN10emscripten11memory_viewIiEE"]=26664;var __ZTSN10emscripten11memory_viewIjEE=Module["__ZTSN10emscripten11memory_viewIjEE"]=26704;var __ZTSN10emscripten11memory_viewIlEE=Module["__ZTSN10emscripten11memory_viewIlEE"]=26744;var __ZTSN10emscripten11memory_viewImEE=Module["__ZTSN10emscripten11memory_viewImEE"]=26784;var __ZTSN10emscripten11memory_viewIfEE=Module["__ZTSN10emscripten11memory_viewIfEE"]=26824;var __ZTSN10emscripten11memory_viewIdEE=Module["__ZTSN10emscripten11memory_viewIdEE"]=26864;var _stderr=Module["_stderr"]=30608;var _stdout=Module["_stdout"]=26904;var __ZNSt3__26__itoa7__tableIvE10__pow10_32E=Module["__ZNSt3__26__itoa7__tableIvE10__pow10_32E"]=31120;var __ZNSt3__26__itoa7__tableIvE16__digits_base_10E=Module["__ZNSt3__26__itoa7__tableIvE16__digits_base_10E"]=31168;var __ZSt7nothrow=Module["__ZSt7nothrow"]=27392;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=33972;var __ZTVSt9exception=Module["__ZTVSt9exception"]=33808;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=33992;var __ZNSt3__26__itoa7__tableIvE10__pow10_64E=Module["__ZNSt3__26__itoa7__tableIvE10__pow10_64E"]=31376;var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE"]=31084;var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE"]=31088;var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=48412;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=48408;var ___cxa_new_handler=Module["___cxa_new_handler"]=51264;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=31572;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=31620;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=31668;var __ZTIDn=Module["__ZTIDn"]=32016;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=31716;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=31768;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=31828;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=31536;var __ZTISt9type_info=Module["__ZTISt9type_info"]=34508;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=31584;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=31632;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=31680;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=31728;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=31780;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=31852;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=31880;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=31948;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=31908;var __ZTSv=Module["__ZTSv"]=31960;var __ZTSPv=Module["__ZTSPv"]=31972;var __ZTIPv=Module["__ZTIPv"]=31976;var __ZTSPKv=Module["__ZTSPKv"]=31992;var __ZTIPKv=Module["__ZTIPKv"]=31996;var __ZTSDn=Module["__ZTSDn"]=32012;var __ZTSPDn=Module["__ZTSPDn"]=32024;var __ZTIPDn=Module["__ZTIPDn"]=32028;var __ZTSPKDn=Module["__ZTSPKDn"]=32044;var __ZTIPKDn=Module["__ZTIPKDn"]=32052;var __ZTSb=Module["__ZTSb"]=32068;var __ZTSPb=Module["__ZTSPb"]=32080;var __ZTIPb=Module["__ZTIPb"]=32084;var __ZTSPKb=Module["__ZTSPKb"]=32100;var __ZTIPKb=Module["__ZTIPKb"]=32104;var __ZTSw=Module["__ZTSw"]=32120;var __ZTIw=Module["__ZTIw"]=32124;var __ZTSPw=Module["__ZTSPw"]=32132;var __ZTIPw=Module["__ZTIPw"]=32136;var __ZTSPKw=Module["__ZTSPKw"]=32152;var __ZTIPKw=Module["__ZTIPKw"]=32156;var __ZTSc=Module["__ZTSc"]=32172;var __ZTSPc=Module["__ZTSPc"]=32184;var __ZTIPc=Module["__ZTIPc"]=32188;var __ZTSPKc=Module["__ZTSPKc"]=32204;var __ZTIPKc=Module["__ZTIPKc"]=32208;var __ZTSh=Module["__ZTSh"]=32224;var __ZTSPh=Module["__ZTSPh"]=32236;var __ZTIPh=Module["__ZTIPh"]=32240;var __ZTSPKh=Module["__ZTSPKh"]=32256;var __ZTIPKh=Module["__ZTIPKh"]=32260;var __ZTSa=Module["__ZTSa"]=32276;var __ZTSPa=Module["__ZTSPa"]=32288;var __ZTIPa=Module["__ZTIPa"]=32292;var __ZTSPKa=Module["__ZTSPKa"]=32308;var __ZTIPKa=Module["__ZTIPKa"]=32312;var __ZTSs=Module["__ZTSs"]=32328;var __ZTSPs=Module["__ZTSPs"]=32340;var __ZTIPs=Module["__ZTIPs"]=32344;var __ZTSPKs=Module["__ZTSPKs"]=32360;var __ZTIPKs=Module["__ZTIPKs"]=32364;var __ZTSt=Module["__ZTSt"]=32380;var __ZTSPt=Module["__ZTSPt"]=32392;var __ZTIPt=Module["__ZTIPt"]=32396;var __ZTSPKt=Module["__ZTSPKt"]=32412;var __ZTIPKt=Module["__ZTIPKt"]=32416;var __ZTSi=Module["__ZTSi"]=32432;var __ZTSPi=Module["__ZTSPi"]=32444;var __ZTIPi=Module["__ZTIPi"]=32448;var __ZTSPKi=Module["__ZTSPKi"]=32464;var __ZTIPKi=Module["__ZTIPKi"]=32468;var __ZTSj=Module["__ZTSj"]=32484;var __ZTSPj=Module["__ZTSPj"]=32496;var __ZTIPj=Module["__ZTIPj"]=32500;var __ZTSPKj=Module["__ZTSPKj"]=32516;var __ZTIPKj=Module["__ZTIPKj"]=32520;var __ZTSl=Module["__ZTSl"]=32536;var __ZTSPl=Module["__ZTSPl"]=32548;var __ZTIPl=Module["__ZTIPl"]=32552;var __ZTSPKl=Module["__ZTSPKl"]=32568;var __ZTIPKl=Module["__ZTIPKl"]=32572;var __ZTSm=Module["__ZTSm"]=32588;var __ZTSPm=Module["__ZTSPm"]=32600;var __ZTIPm=Module["__ZTIPm"]=32604;var __ZTSPKm=Module["__ZTSPKm"]=32620;var __ZTIPKm=Module["__ZTIPKm"]=32624;var __ZTSx=Module["__ZTSx"]=32640;var __ZTSPx=Module["__ZTSPx"]=32652;var __ZTIPx=Module["__ZTIPx"]=32656;var __ZTSPKx=Module["__ZTSPKx"]=32672;var __ZTIPKx=Module["__ZTIPKx"]=32676;var __ZTSy=Module["__ZTSy"]=32692;var __ZTSPy=Module["__ZTSPy"]=32704;var __ZTIPy=Module["__ZTIPy"]=32708;var __ZTSPKy=Module["__ZTSPKy"]=32724;var __ZTIPKy=Module["__ZTIPKy"]=32728;var __ZTSn=Module["__ZTSn"]=32744;var __ZTIn=Module["__ZTIn"]=32748;var __ZTSPn=Module["__ZTSPn"]=32756;var __ZTIPn=Module["__ZTIPn"]=32760;var __ZTSPKn=Module["__ZTSPKn"]=32776;var __ZTIPKn=Module["__ZTIPKn"]=32780;var __ZTSo=Module["__ZTSo"]=32796;var __ZTIo=Module["__ZTIo"]=32800;var __ZTSPo=Module["__ZTSPo"]=32808;var __ZTIPo=Module["__ZTIPo"]=32812;var __ZTSPKo=Module["__ZTSPKo"]=32828;var __ZTIPKo=Module["__ZTIPKo"]=32832;var __ZTSDh=Module["__ZTSDh"]=32848;var __ZTIDh=Module["__ZTIDh"]=32852;var __ZTSPDh=Module["__ZTSPDh"]=32860;var __ZTIPDh=Module["__ZTIPDh"]=32864;var __ZTSPKDh=Module["__ZTSPKDh"]=32880;var __ZTIPKDh=Module["__ZTIPKDh"]=32888;var __ZTSf=Module["__ZTSf"]=32904;var __ZTSPf=Module["__ZTSPf"]=32916;var __ZTIPf=Module["__ZTIPf"]=32920;var __ZTSPKf=Module["__ZTSPKf"]=32936;var __ZTIPKf=Module["__ZTIPKf"]=32940;var __ZTSd=Module["__ZTSd"]=32956;var __ZTSPd=Module["__ZTSPd"]=32968;var __ZTIPd=Module["__ZTIPd"]=32972;var __ZTSPKd=Module["__ZTSPKd"]=32988;var __ZTIPKd=Module["__ZTIPKd"]=32992;var __ZTSe=Module["__ZTSe"]=33008;var __ZTIe=Module["__ZTIe"]=33012;var __ZTSPe=Module["__ZTSPe"]=33020;var __ZTIPe=Module["__ZTIPe"]=33024;var __ZTSPKe=Module["__ZTSPKe"]=33040;var __ZTIPKe=Module["__ZTIPKe"]=33044;var __ZTSg=Module["__ZTSg"]=33060;var __ZTIg=Module["__ZTIg"]=33064;var __ZTSPg=Module["__ZTSPg"]=33072;var __ZTIPg=Module["__ZTIPg"]=33076;var __ZTSPKg=Module["__ZTSPKg"]=33092;var __ZTIPKg=Module["__ZTIPKg"]=33096;var __ZTSDu=Module["__ZTSDu"]=33112;var __ZTIDu=Module["__ZTIDu"]=33116;var __ZTSPDu=Module["__ZTSPDu"]=33124;var __ZTIPDu=Module["__ZTIPDu"]=33128;var __ZTSPKDu=Module["__ZTSPKDu"]=33144;var __ZTIPKDu=Module["__ZTIPKDu"]=33152;var __ZTSDs=Module["__ZTSDs"]=33168;var __ZTIDs=Module["__ZTIDs"]=33172;var __ZTSPDs=Module["__ZTSPDs"]=33180;var __ZTIPDs=Module["__ZTIPDs"]=33184;var __ZTSPKDs=Module["__ZTSPKDs"]=33200;var __ZTIPKDs=Module["__ZTIPKDs"]=33208;var __ZTSDi=Module["__ZTSDi"]=33224;var __ZTIDi=Module["__ZTIDi"]=33228;var __ZTSPDi=Module["__ZTSPDi"]=33236;var __ZTIPDi=Module["__ZTIPDi"]=33240;var __ZTSPKDi=Module["__ZTSPKDi"]=33256;var __ZTIPKDi=Module["__ZTIPKDi"]=33264;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=33280;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=33344;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=33308;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=33356;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=33384;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=33448;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=33412;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=33580;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=33540;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=33672;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=33632;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=33684;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=33740;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=33768;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=33788;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=33920;var __ZTISt9exception=Module["__ZTISt9exception"]=33844;var __ZTSSt9exception=Module["__ZTSSt9exception"]=33828;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=33852;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=33892;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=33872;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=33904;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=33932;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=34068;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=34308;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=34012;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=34080;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=34032;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=34049;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=34092;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=34136;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=34112;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=34168;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=34220;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=34252;var __ZTISt11range_error=Module["__ZTISt11range_error"]=34320;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=34272;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=34288;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=34332;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=34372;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=34352;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=34384;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=34424;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=34404;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=34436;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=34456;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=34528;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=34556;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=34476;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=34492;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=34516;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=34540;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="index.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["C"];updateMemoryViews();wasmTable=Module["asm"]["_"];addOnInit(Module["asm"]["D"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return{[name]:function(){return body.apply(this,arguments)}}[name]}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationRegistry=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}var registeredPointers={};function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}var delayFunction=undefined;function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function attachFinalizer(handle){if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$:$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+embindRepr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAP32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast)}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast)}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError("Cannot construct "+name+" due to unbound types",[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError("Tried to invoke ctor of "+name+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(registeredClass.constructor_body).toString()+") parameters instead!")}return body.apply(this,arguments)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i>2])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function newFunc(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>{throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=v=>{throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}function HandleAllocator(){this.allocated=[undefined];this.freelist=[];this.get=function(id){return this.allocated[id]};this.allocate=function(handle){let id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id};this.free=function(id){this.allocated[id]=undefined;this.freelist.push(id)}}var emval_handles=new HandleAllocator;function __emval_decref(handle){if(handle>=emval_handles.reserved&&0===--emval_handles.get(handle).refcount){emval_handles.free(handle)}}function count_emval_handles(){var count=0;for(var i=emval_handles.reserved;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles.get(handle).value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{return emval_handles.allocate({refcount:1,value:value})}}}};function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function embindRepr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>HEAPU16;shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>HEAPU32;shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emval_incref(handle){if(handle>4){emval_handles.get(handle).refcount+=1}}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_take_value(type,arg){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)}function _abort(){abort("")}function _emscripten_date_now(){return Date.now()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process.hrtime();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=()=>performance.now();function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_fdstat_get(fd,pbuf){var rightsBase=0;var rightsInheriting=0;var flags=0;{var type=fd==0||fd==1||fd==2?2:abort();if(fd==0){rightsBase=2}else if(fd==1||fd==2){rightsBase=64}flags=1}HEAP8[pbuf>>0]=type;HEAP16[pbuf+2>>1]=flags;tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>2]=tempI64[0],HEAP32[pbuf+12>>2]=tempI64[1];tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>2]=tempI64[0],HEAP32[pbuf+20>>2]=tempI64[1];return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_embind();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={"f":___cxa_throw,"s":__embind_register_bigint,"z":__embind_register_bool,"n":__embind_register_class,"k":__embind_register_class_constructor,"e":__embind_register_class_function,"a":__embind_register_class_property,"y":__embind_register_emval,"m":__embind_register_float,"c":__embind_register_function,"d":__embind_register_integer,"b":__embind_register_memory_view,"l":__embind_register_std_string,"h":__embind_register_std_wstring,"A":__embind_register_void,"o":__emval_decref,"p":__emval_incref,"q":__emval_take_value,"g":_abort,"B":_emscripten_date_now,"j":_emscripten_get_now,"x":_emscripten_memcpy_big,"u":_emscripten_resize_heap,"w":_exit,"t":_fd_close,"v":_fd_fdstat_get,"r":_fd_seek,"i":_fd_write};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["D"]).apply(null,arguments)};var _param_get=Module["_param_get"]=function(){return(_param_get=Module["_param_get"]=Module["asm"]["E"]).apply(null,arguments)};var _iprintf=Module["_iprintf"]=function(){return(_iprintf=Module["_iprintf"]=Module["asm"]["F"]).apply(null,arguments)};var _param_set_used=Module["_param_set_used"]=function(){return(_param_set_used=Module["_param_set_used"]=Module["asm"]["G"]).apply(null,arguments)};var __Znwm=Module["__Znwm"]=function(){return(__Znwm=Module["__Znwm"]=Module["asm"]["H"]).apply(null,arguments)};var _strlen=Module["_strlen"]=function(){return(_strlen=Module["_strlen"]=Module["asm"]["I"]).apply(null,arguments)};var _memmove=Module["_memmove"]=function(){return(_memmove=Module["_memmove"]=Module["asm"]["J"]).apply(null,arguments)};var __ZdlPv=Module["__ZdlPv"]=function(){return(__ZdlPv=Module["__ZdlPv"]=Module["asm"]["K"]).apply(null,arguments)};var _memcmp=function(){return(_memcmp=Module["asm"]["memcmp"]).apply(null,arguments)};var _puts=Module["_puts"]=function(){return(_puts=Module["_puts"]=Module["asm"]["L"]).apply(null,arguments)};var _memcpy=function(){return(_memcpy=Module["asm"]["memcpy"]).apply(null,arguments)};var _memset=Module["_memset"]=function(){return(_memset=Module["_memset"]=Module["asm"]["M"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["N"]).apply(null,arguments)};var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=function(){return(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=Module["asm"]["O"]).apply(null,arguments)};var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=function(){return(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=Module["asm"]["P"]).apply(null,arguments)};var __ZNSt11logic_errorC2EPKc=Module["__ZNSt11logic_errorC2EPKc"]=function(){return(__ZNSt11logic_errorC2EPKc=Module["__ZNSt11logic_errorC2EPKc"]=Module["asm"]["Q"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=function(){return(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=Module["asm"]["R"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=function(){return(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=Module["asm"]["S"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE25__init_copy_ctor_externalEPKcm"]=Module["asm"]["T"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb1EEERS5_PKcm"]=Module["asm"]["U"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_no_aliasILb0EEERS5_PKcm"]=Module["asm"]["V"]).apply(null,arguments)};var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=function(){return(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=Module["asm"]["W"]).apply(null,arguments)};var ___cxa_atexit=Module["___cxa_atexit"]=function(){return(___cxa_atexit=Module["___cxa_atexit"]=Module["asm"]["X"]).apply(null,arguments)};var __embind_register_bindings=Module["__embind_register_bindings"]=function(){return(__embind_register_bindings=Module["__embind_register_bindings"]=Module["asm"]["Y"]).apply(null,arguments)};var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=function(){return(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=Module["asm"]["Z"]).apply(null,arguments)};var ___getTypeName=function(){return(___getTypeName=Module["asm"]["$"]).apply(null,arguments)};var _strdup=Module["_strdup"]=function(){return(_strdup=Module["_strdup"]=Module["asm"]["aa"]).apply(null,arguments)};var __embind_initialize_bindings=Module["__embind_initialize_bindings"]=function(){return(__embind_initialize_bindings=Module["__embind_initialize_bindings"]=Module["asm"]["ba"]).apply(null,arguments)};var ___syscall_uname=Module["___syscall_uname"]=function(){return(___syscall_uname=Module["___syscall_uname"]=Module["asm"]["ca"]).apply(null,arguments)};var ___syscall_setpgid=Module["___syscall_setpgid"]=function(){return(___syscall_setpgid=Module["___syscall_setpgid"]=Module["asm"]["da"]).apply(null,arguments)};var ___syscall_sync=Module["___syscall_sync"]=function(){return(___syscall_sync=Module["___syscall_sync"]=Module["asm"]["ea"]).apply(null,arguments)};var ___syscall_getsid=Module["___syscall_getsid"]=function(){return(___syscall_getsid=Module["___syscall_getsid"]=Module["asm"]["fa"]).apply(null,arguments)};var ___syscall_getpgid=Module["___syscall_getpgid"]=function(){return(___syscall_getpgid=Module["___syscall_getpgid"]=Module["asm"]["ga"]).apply(null,arguments)};var ___syscall_getpid=Module["___syscall_getpid"]=function(){return(___syscall_getpid=Module["___syscall_getpid"]=Module["asm"]["ha"]).apply(null,arguments)};var ___syscall_getppid=Module["___syscall_getppid"]=function(){return(___syscall_getppid=Module["___syscall_getppid"]=Module["asm"]["ia"]).apply(null,arguments)};var ___syscall_linkat=Module["___syscall_linkat"]=function(){return(___syscall_linkat=Module["___syscall_linkat"]=Module["asm"]["ja"]).apply(null,arguments)};var ___syscall_getgroups32=Module["___syscall_getgroups32"]=function(){return(___syscall_getgroups32=Module["___syscall_getgroups32"]=Module["asm"]["ka"]).apply(null,arguments)};var ___syscall_setsid=Module["___syscall_setsid"]=function(){return(___syscall_setsid=Module["___syscall_setsid"]=Module["asm"]["la"]).apply(null,arguments)};var ___syscall_umask=Module["___syscall_umask"]=function(){return(___syscall_umask=Module["___syscall_umask"]=Module["asm"]["ma"]).apply(null,arguments)};var ___syscall_setrlimit=Module["___syscall_setrlimit"]=function(){return(___syscall_setrlimit=Module["___syscall_setrlimit"]=Module["asm"]["na"]).apply(null,arguments)};var ___syscall_getrusage=Module["___syscall_getrusage"]=function(){return(___syscall_getrusage=Module["___syscall_getrusage"]=Module["asm"]["oa"]).apply(null,arguments)};var ___syscall_getpriority=Module["___syscall_getpriority"]=function(){return(___syscall_getpriority=Module["___syscall_getpriority"]=Module["asm"]["pa"]).apply(null,arguments)};var ___syscall_setpriority=Module["___syscall_setpriority"]=function(){return(___syscall_setpriority=Module["___syscall_setpriority"]=Module["asm"]["qa"]).apply(null,arguments)};var ___syscall_setdomainname=Module["___syscall_setdomainname"]=function(){return(___syscall_setdomainname=Module["___syscall_setdomainname"]=Module["asm"]["ra"]).apply(null,arguments)};var ___syscall_getuid32=Module["___syscall_getuid32"]=function(){return(___syscall_getuid32=Module["___syscall_getuid32"]=Module["asm"]["sa"]).apply(null,arguments)};var ___syscall_getgid32=Module["___syscall_getgid32"]=function(){return(___syscall_getgid32=Module["___syscall_getgid32"]=Module["asm"]["ta"]).apply(null,arguments)};var ___syscall_geteuid32=Module["___syscall_geteuid32"]=function(){return(___syscall_geteuid32=Module["___syscall_geteuid32"]=Module["asm"]["ua"]).apply(null,arguments)};var ___syscall_getegid32=Module["___syscall_getegid32"]=function(){return(___syscall_getegid32=Module["___syscall_getegid32"]=Module["asm"]["va"]).apply(null,arguments)};var ___syscall_getresuid32=Module["___syscall_getresuid32"]=function(){return(___syscall_getresuid32=Module["___syscall_getresuid32"]=Module["asm"]["wa"]).apply(null,arguments)};var ___syscall_getresgid32=Module["___syscall_getresgid32"]=function(){return(___syscall_getresgid32=Module["___syscall_getresgid32"]=Module["asm"]["xa"]).apply(null,arguments)};var ___syscall_pause=Module["___syscall_pause"]=function(){return(___syscall_pause=Module["___syscall_pause"]=Module["asm"]["ya"]).apply(null,arguments)};var ___syscall_madvise=Module["___syscall_madvise"]=function(){return(___syscall_madvise=Module["___syscall_madvise"]=Module["asm"]["za"]).apply(null,arguments)};var ___syscall_mlock=Module["___syscall_mlock"]=function(){return(___syscall_mlock=Module["___syscall_mlock"]=Module["asm"]["Aa"]).apply(null,arguments)};var ___syscall_munlock=Module["___syscall_munlock"]=function(){return(___syscall_munlock=Module["___syscall_munlock"]=Module["asm"]["Ba"]).apply(null,arguments)};var ___syscall_mprotect=Module["___syscall_mprotect"]=function(){return(___syscall_mprotect=Module["___syscall_mprotect"]=Module["asm"]["Ca"]).apply(null,arguments)};var ___syscall_mremap=Module["___syscall_mremap"]=function(){return(___syscall_mremap=Module["___syscall_mremap"]=Module["asm"]["Da"]).apply(null,arguments)};var ___syscall_mlockall=Module["___syscall_mlockall"]=function(){return(___syscall_mlockall=Module["___syscall_mlockall"]=Module["asm"]["Ea"]).apply(null,arguments)};var ___syscall_munlockall=Module["___syscall_munlockall"]=function(){return(___syscall_munlockall=Module["___syscall_munlockall"]=Module["asm"]["Fa"]).apply(null,arguments)};var ___syscall_prlimit64=Module["___syscall_prlimit64"]=function(){return(___syscall_prlimit64=Module["___syscall_prlimit64"]=Module["asm"]["Ga"]).apply(null,arguments)};var ___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=function(){return(___syscall_ugetrlimit=Module["___syscall_ugetrlimit"]=Module["asm"]["Ha"]).apply(null,arguments)};var ___syscall_setsockopt=Module["___syscall_setsockopt"]=function(){return(___syscall_setsockopt=Module["___syscall_setsockopt"]=Module["asm"]["Ia"]).apply(null,arguments)};var ___syscall_acct=Module["___syscall_acct"]=function(){return(___syscall_acct=Module["___syscall_acct"]=Module["asm"]["Ja"]).apply(null,arguments)};var ___syscall_mincore=Module["___syscall_mincore"]=function(){return(___syscall_mincore=Module["___syscall_mincore"]=Module["asm"]["Ka"]).apply(null,arguments)};var ___syscall_pipe2=Module["___syscall_pipe2"]=function(){return(___syscall_pipe2=Module["___syscall_pipe2"]=Module["asm"]["La"]).apply(null,arguments)};var ___syscall_pselect6=Module["___syscall_pselect6"]=function(){return(___syscall_pselect6=Module["___syscall_pselect6"]=Module["asm"]["Ma"]).apply(null,arguments)};var ___syscall_recvmmsg=Module["___syscall_recvmmsg"]=function(){return(___syscall_recvmmsg=Module["___syscall_recvmmsg"]=Module["asm"]["Na"]).apply(null,arguments)};var ___syscall_sendmmsg=Module["___syscall_sendmmsg"]=function(){return(___syscall_sendmmsg=Module["___syscall_sendmmsg"]=Module["asm"]["Oa"]).apply(null,arguments)};var ___syscall_shutdown=Module["___syscall_shutdown"]=function(){return(___syscall_shutdown=Module["___syscall_shutdown"]=Module["asm"]["Pa"]).apply(null,arguments)};var ___syscall_socketpair=Module["___syscall_socketpair"]=function(){return(___syscall_socketpair=Module["___syscall_socketpair"]=Module["asm"]["Qa"]).apply(null,arguments)};var ___syscall_wait4=Module["___syscall_wait4"]=function(){return(___syscall_wait4=Module["___syscall_wait4"]=Module["asm"]["Ra"]).apply(null,arguments)};var _atexit=Module["_atexit"]=function(){return(_atexit=Module["_atexit"]=Module["asm"]["Sa"]).apply(null,arguments)};var ___cxa_finalize=Module["___cxa_finalize"]=function(){return(___cxa_finalize=Module["___cxa_finalize"]=Module["asm"]["Ta"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var ___fpclassifyl=Module["___fpclassifyl"]=function(){return(___fpclassifyl=Module["___fpclassifyl"]=Module["asm"]["Ua"]).apply(null,arguments)};var ___overflow=Module["___overflow"]=function(){return(___overflow=Module["___overflow"]=Module["asm"]["Va"]).apply(null,arguments)};var ___uflow=Module["___uflow"]=function(){return(___uflow=Module["___uflow"]=Module["asm"]["Wa"]).apply(null,arguments)};var _btowc=Module["_btowc"]=function(){return(_btowc=Module["_btowc"]=Module["asm"]["Xa"]).apply(null,arguments)};var _copysignl=Module["_copysignl"]=function(){return(_copysignl=Module["_copysignl"]=Module["asm"]["Ya"]).apply(null,arguments)};var _emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=function(){return(_emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=Module["asm"]["Za"]).apply(null,arguments)};var _emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=function(){return(_emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=Module["asm"]["_a"]).apply(null,arguments)};var ___memset=Module["___memset"]=function(){return(___memset=Module["___memset"]=Module["asm"]["$a"]).apply(null,arguments)};var _emscripten_builtin_memset=Module["_emscripten_builtin_memset"]=function(){return(_emscripten_builtin_memset=Module["_emscripten_builtin_memset"]=Module["asm"]["ab"]).apply(null,arguments)};var _fabsl=Module["_fabsl"]=function(){return(_fabsl=Module["_fabsl"]=Module["asm"]["bb"]).apply(null,arguments)};var _fmodl=Module["_fmodl"]=function(){return(_fmodl=Module["_fmodl"]=Module["asm"]["cb"]).apply(null,arguments)};var _fprintf=Module["_fprintf"]=function(){return(_fprintf=Module["_fprintf"]=Module["asm"]["db"]).apply(null,arguments)};var _fiprintf=Module["_fiprintf"]=function(){return(_fiprintf=Module["_fiprintf"]=Module["asm"]["eb"]).apply(null,arguments)};var ___small_fprintf=Module["___small_fprintf"]=function(){return(___small_fprintf=Module["___small_fprintf"]=Module["asm"]["fb"]).apply(null,arguments)};var _fputs=Module["_fputs"]=function(){return(_fputs=Module["_fputs"]=Module["asm"]["gb"]).apply(null,arguments)};var _fputs_unlocked=Module["_fputs_unlocked"]=function(){return(_fputs_unlocked=Module["_fputs_unlocked"]=Module["asm"]["hb"]).apply(null,arguments)};var ___fputwc_unlocked=Module["___fputwc_unlocked"]=function(){return(___fputwc_unlocked=Module["___fputwc_unlocked"]=Module["asm"]["ib"]).apply(null,arguments)};var _fputwc=Module["_fputwc"]=function(){return(_fputwc=Module["_fputwc"]=Module["asm"]["jb"]).apply(null,arguments)};var _fputwc_unlocked=Module["_fputwc_unlocked"]=function(){return(_fputwc_unlocked=Module["_fputwc_unlocked"]=Module["asm"]["kb"]).apply(null,arguments)};var _putwc_unlocked=Module["_putwc_unlocked"]=function(){return(_putwc_unlocked=Module["_putwc_unlocked"]=Module["asm"]["lb"]).apply(null,arguments)};var _frexp=Module["_frexp"]=function(){return(_frexp=Module["_frexp"]=Module["asm"]["mb"]).apply(null,arguments)};var _fwide=Module["_fwide"]=function(){return(_fwide=Module["_fwide"]=Module["asm"]["nb"]).apply(null,arguments)};var _fwrite=Module["_fwrite"]=function(){return(_fwrite=Module["_fwrite"]=Module["asm"]["ob"]).apply(null,arguments)};var _fwrite_unlocked=Module["_fwrite_unlocked"]=function(){return(_fwrite_unlocked=Module["_fwrite_unlocked"]=Module["asm"]["pb"]).apply(null,arguments)};var _getpid=Module["_getpid"]=function(){return(_getpid=Module["_getpid"]=Module["asm"]["qb"]).apply(null,arguments)};var ___intscan=Module["___intscan"]=function(){return(___intscan=Module["___intscan"]=Module["asm"]["rb"]).apply(null,arguments)};var _isdigit=Module["_isdigit"]=function(){return(_isdigit=Module["_isdigit"]=Module["asm"]["sb"]).apply(null,arguments)};var ___isdigit_l=Module["___isdigit_l"]=function(){return(___isdigit_l=Module["___isdigit_l"]=Module["asm"]["tb"]).apply(null,arguments)};var _isdigit_l=Module["_isdigit_l"]=function(){return(_isdigit_l=Module["_isdigit_l"]=Module["asm"]["ub"]).apply(null,arguments)};var _isspace=Module["_isspace"]=function(){return(_isspace=Module["_isspace"]=Module["asm"]["vb"]).apply(null,arguments)};var ___isspace_l=Module["___isspace_l"]=function(){return(___isspace_l=Module["___isspace_l"]=Module["asm"]["wb"]).apply(null,arguments)};var _isspace_l=Module["_isspace_l"]=function(){return(_isspace_l=Module["_isspace_l"]=Module["asm"]["xb"]).apply(null,arguments)};var _iswspace=Module["_iswspace"]=function(){return(_iswspace=Module["_iswspace"]=Module["asm"]["yb"]).apply(null,arguments)};var ___iswspace_l=Module["___iswspace_l"]=function(){return(___iswspace_l=Module["___iswspace_l"]=Module["asm"]["zb"]).apply(null,arguments)};var _iswspace_l=Module["_iswspace_l"]=function(){return(_iswspace_l=Module["_iswspace_l"]=Module["asm"]["Ab"]).apply(null,arguments)};var _emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=function(){return(_emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=Module["asm"]["Bb"]).apply(null,arguments)};var _emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=function(){return(_emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=Module["asm"]["Cb"]).apply(null,arguments)};var _emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=function(){return(_emscripten_force_num_logical_cores=Module["_emscripten_force_num_logical_cores"]=Module["asm"]["Db"]).apply(null,arguments)};var _emscripten_futex_wait=Module["_emscripten_futex_wait"]=function(){return(_emscripten_futex_wait=Module["_emscripten_futex_wait"]=Module["asm"]["Eb"]).apply(null,arguments)};var _emscripten_futex_wake=Module["_emscripten_futex_wake"]=function(){return(_emscripten_futex_wake=Module["_emscripten_futex_wake"]=Module["asm"]["Fb"]).apply(null,arguments)};var _emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=function(){return(_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=Module["asm"]["Gb"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Hb"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["Ib"]).apply(null,arguments)};var __emscripten_yield=Module["__emscripten_yield"]=function(){return(__emscripten_yield=Module["__emscripten_yield"]=Module["asm"]["Jb"]).apply(null,arguments)};var __emscripten_check_timers=Module["__emscripten_check_timers"]=function(){return(__emscripten_check_timers=Module["__emscripten_check_timers"]=Module["asm"]["Kb"]).apply(null,arguments)};var _pthread_mutex_init=Module["_pthread_mutex_init"]=function(){return(_pthread_mutex_init=Module["_pthread_mutex_init"]=Module["asm"]["Lb"]).apply(null,arguments)};var _pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=function(){return(_pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=Module["asm"]["Mb"]).apply(null,arguments)};var _pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=function(){return(_pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=Module["asm"]["Nb"]).apply(null,arguments)};var _pthread_barrier_init=Module["_pthread_barrier_init"]=function(){return(_pthread_barrier_init=Module["_pthread_barrier_init"]=Module["asm"]["Ob"]).apply(null,arguments)};var _pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=function(){return(_pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=Module["asm"]["Pb"]).apply(null,arguments)};var _pthread_barrier_wait=Module["_pthread_barrier_wait"]=function(){return(_pthread_barrier_wait=Module["_pthread_barrier_wait"]=Module["asm"]["Qb"]).apply(null,arguments)};var _pthread_getspecific=Module["_pthread_getspecific"]=function(){return(_pthread_getspecific=Module["_pthread_getspecific"]=Module["asm"]["Rb"]).apply(null,arguments)};var _pthread_setspecific=Module["_pthread_setspecific"]=function(){return(_pthread_setspecific=Module["_pthread_setspecific"]=Module["asm"]["Sb"]).apply(null,arguments)};var _pthread_cond_wait=Module["_pthread_cond_wait"]=function(){return(_pthread_cond_wait=Module["_pthread_cond_wait"]=Module["asm"]["Tb"]).apply(null,arguments)};var _pthread_cond_signal=Module["_pthread_cond_signal"]=function(){return(_pthread_cond_signal=Module["_pthread_cond_signal"]=Module["asm"]["Ub"]).apply(null,arguments)};var _pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=function(){return(_pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=Module["asm"]["Vb"]).apply(null,arguments)};var _pthread_cond_init=Module["_pthread_cond_init"]=function(){return(_pthread_cond_init=Module["_pthread_cond_init"]=Module["asm"]["Wb"]).apply(null,arguments)};var _pthread_cond_destroy=Module["_pthread_cond_destroy"]=function(){return(_pthread_cond_destroy=Module["_pthread_cond_destroy"]=Module["asm"]["Xb"]).apply(null,arguments)};var _pthread_atfork=Module["_pthread_atfork"]=function(){return(_pthread_atfork=Module["_pthread_atfork"]=Module["asm"]["Yb"]).apply(null,arguments)};var _pthread_cancel=Module["_pthread_cancel"]=function(){return(_pthread_cancel=Module["_pthread_cancel"]=Module["asm"]["Zb"]).apply(null,arguments)};var _pthread_testcancel=Module["_pthread_testcancel"]=function(){return(_pthread_testcancel=Module["_pthread_testcancel"]=Module["asm"]["_b"]).apply(null,arguments)};var ___pthread_detach=Module["___pthread_detach"]=function(){return(___pthread_detach=Module["___pthread_detach"]=Module["asm"]["$b"]).apply(null,arguments)};var _pthread_equal=Module["_pthread_equal"]=function(){return(_pthread_equal=Module["_pthread_equal"]=Module["asm"]["ac"]).apply(null,arguments)};var _pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=function(){return(_pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=Module["asm"]["bc"]).apply(null,arguments)};var _pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=function(){return(_pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=Module["asm"]["cc"]).apply(null,arguments)};var _pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=function(){return(_pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=Module["asm"]["dc"]).apply(null,arguments)};var _pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=function(){return(_pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=Module["asm"]["ec"]).apply(null,arguments)};var _pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=function(){return(_pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=Module["asm"]["fc"]).apply(null,arguments)};var _pthread_condattr_init=Module["_pthread_condattr_init"]=function(){return(_pthread_condattr_init=Module["_pthread_condattr_init"]=Module["asm"]["gc"]).apply(null,arguments)};var _pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=function(){return(_pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=Module["asm"]["hc"]).apply(null,arguments)};var _pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=function(){return(_pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=Module["asm"]["ic"]).apply(null,arguments)};var _pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=function(){return(_pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=Module["asm"]["jc"]).apply(null,arguments)};var _pthread_attr_init=Module["_pthread_attr_init"]=function(){return(_pthread_attr_init=Module["_pthread_attr_init"]=Module["asm"]["kc"]).apply(null,arguments)};var _pthread_getattr_np=Module["_pthread_getattr_np"]=function(){return(_pthread_getattr_np=Module["_pthread_getattr_np"]=Module["asm"]["lc"]).apply(null,arguments)};var _pthread_setcancelstate=Module["_pthread_setcancelstate"]=function(){return(_pthread_setcancelstate=Module["_pthread_setcancelstate"]=Module["asm"]["mc"]).apply(null,arguments)};var _pthread_setcanceltype=Module["_pthread_setcanceltype"]=function(){return(_pthread_setcanceltype=Module["_pthread_setcanceltype"]=Module["asm"]["nc"]).apply(null,arguments)};var _pthread_rwlock_init=Module["_pthread_rwlock_init"]=function(){return(_pthread_rwlock_init=Module["_pthread_rwlock_init"]=Module["asm"]["oc"]).apply(null,arguments)};var _pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=function(){return(_pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=Module["asm"]["pc"]).apply(null,arguments)};var _pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=function(){return(_pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=Module["asm"]["qc"]).apply(null,arguments)};var _pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=function(){return(_pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=Module["asm"]["rc"]).apply(null,arguments)};var _pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=function(){return(_pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=Module["asm"]["sc"]).apply(null,arguments)};var _pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=function(){return(_pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=Module["asm"]["tc"]).apply(null,arguments)};var _pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=function(){return(_pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=Module["asm"]["uc"]).apply(null,arguments)};var _pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=function(){return(_pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=Module["asm"]["vc"]).apply(null,arguments)};var _pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=function(){return(_pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=Module["asm"]["wc"]).apply(null,arguments)};var _pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=function(){return(_pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=Module["asm"]["xc"]).apply(null,arguments)};var _pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=function(){return(_pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=Module["asm"]["yc"]).apply(null,arguments)};var _pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=function(){return(_pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=Module["asm"]["zc"]).apply(null,arguments)};var _pthread_spin_init=Module["_pthread_spin_init"]=function(){return(_pthread_spin_init=Module["_pthread_spin_init"]=Module["asm"]["Ac"]).apply(null,arguments)};var _pthread_spin_destroy=Module["_pthread_spin_destroy"]=function(){return(_pthread_spin_destroy=Module["_pthread_spin_destroy"]=Module["asm"]["Bc"]).apply(null,arguments)};var _pthread_spin_lock=Module["_pthread_spin_lock"]=function(){return(_pthread_spin_lock=Module["_pthread_spin_lock"]=Module["asm"]["Cc"]).apply(null,arguments)};var _pthread_spin_trylock=Module["_pthread_spin_trylock"]=function(){return(_pthread_spin_trylock=Module["_pthread_spin_trylock"]=Module["asm"]["Dc"]).apply(null,arguments)};var _pthread_spin_unlock=Module["_pthread_spin_unlock"]=function(){return(_pthread_spin_unlock=Module["_pthread_spin_unlock"]=Module["asm"]["Ec"]).apply(null,arguments)};var _sem_init=Module["_sem_init"]=function(){return(_sem_init=Module["_sem_init"]=Module["asm"]["Fc"]).apply(null,arguments)};var _sem_post=Module["_sem_post"]=function(){return(_sem_post=Module["_sem_post"]=Module["asm"]["Gc"]).apply(null,arguments)};var _sem_wait=Module["_sem_wait"]=function(){return(_sem_wait=Module["_sem_wait"]=Module["asm"]["Hc"]).apply(null,arguments)};var _sem_trywait=Module["_sem_trywait"]=function(){return(_sem_trywait=Module["_sem_trywait"]=Module["asm"]["Ic"]).apply(null,arguments)};var _sem_destroy=Module["_sem_destroy"]=function(){return(_sem_destroy=Module["_sem_destroy"]=Module["asm"]["Jc"]).apply(null,arguments)};var ___lock=Module["___lock"]=function(){return(___lock=Module["___lock"]=Module["asm"]["Kc"]).apply(null,arguments)};var ___unlock=Module["___unlock"]=function(){return(___unlock=Module["___unlock"]=Module["asm"]["Lc"]).apply(null,arguments)};var _emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=function(){return(_emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=Module["asm"]["Mc"]).apply(null,arguments)};var _pthread_mutex_lock=Module["_pthread_mutex_lock"]=function(){return(_pthread_mutex_lock=Module["_pthread_mutex_lock"]=Module["asm"]["Nc"]).apply(null,arguments)};var _pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=function(){return(_pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=Module["asm"]["Oc"]).apply(null,arguments)};var _pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=function(){return(_pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=Module["asm"]["Pc"]).apply(null,arguments)};var _pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=function(){return(_pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=Module["asm"]["Qc"]).apply(null,arguments)};var _emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=function(){return(_emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=Module["asm"]["Rc"]).apply(null,arguments)};var _pthread_create=Module["_pthread_create"]=function(){return(_pthread_create=Module["_pthread_create"]=Module["asm"]["Sc"]).apply(null,arguments)};var _emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=function(){return(_emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=Module["asm"]["Tc"]).apply(null,arguments)};var _pthread_join=Module["_pthread_join"]=function(){return(_pthread_join=Module["_pthread_join"]=Module["asm"]["Uc"]).apply(null,arguments)};var _pthread_key_delete=Module["_pthread_key_delete"]=function(){return(_pthread_key_delete=Module["_pthread_key_delete"]=Module["asm"]["Vc"]).apply(null,arguments)};var _pthread_key_create=Module["_pthread_key_create"]=function(){return(_pthread_key_create=Module["_pthread_key_create"]=Module["asm"]["Wc"]).apply(null,arguments)};var _pthread_once=Module["_pthread_once"]=function(){return(_pthread_once=Module["_pthread_once"]=Module["asm"]["Xc"]).apply(null,arguments)};var _pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=function(){return(_pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=Module["asm"]["Yc"]).apply(null,arguments)};var _pthread_exit=Module["_pthread_exit"]=function(){return(_pthread_exit=Module["_pthread_exit"]=Module["asm"]["Zc"]).apply(null,arguments)};var _emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=function(){return(_emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=Module["asm"]["_c"]).apply(null,arguments)};var _pthread_detach=Module["_pthread_detach"]=function(){return(_pthread_detach=Module["_pthread_detach"]=Module["asm"]["$c"]).apply(null,arguments)};var _thrd_detach=Module["_thrd_detach"]=function(){return(_thrd_detach=Module["_thrd_detach"]=Module["asm"]["ad"]).apply(null,arguments)};var _lseek=Module["_lseek"]=function(){return(_lseek=Module["_lseek"]=Module["asm"]["bd"]).apply(null,arguments)};var _lseek64=Module["_lseek64"]=function(){return(_lseek64=Module["_lseek64"]=Module["asm"]["cd"]).apply(null,arguments)};var _mbtowc=Module["_mbtowc"]=function(){return(_mbtowc=Module["_mbtowc"]=Module["asm"]["dd"]).apply(null,arguments)};var _memchr=Module["_memchr"]=function(){return(_memchr=Module["_memchr"]=Module["asm"]["ed"]).apply(null,arguments)};var _printf=Module["_printf"]=function(){return(_printf=Module["_printf"]=Module["asm"]["fd"]).apply(null,arguments)};var _vfprintf=Module["_vfprintf"]=function(){return(_vfprintf=Module["_vfprintf"]=Module["asm"]["gd"]).apply(null,arguments)};var _vfiprintf=Module["_vfiprintf"]=function(){return(_vfiprintf=Module["_vfiprintf"]=Module["asm"]["hd"]).apply(null,arguments)};var ___small_printf=Module["___small_printf"]=function(){return(___small_printf=Module["___small_printf"]=Module["asm"]["id"]).apply(null,arguments)};var ___small_vfprintf=Module["___small_vfprintf"]=function(){return(___small_vfprintf=Module["___small_vfprintf"]=Module["asm"]["jd"]).apply(null,arguments)};var ___get_tp=Module["___get_tp"]=function(){return(___get_tp=Module["___get_tp"]=Module["asm"]["kd"]).apply(null,arguments)};var _emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=function(){return(_emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=Module["asm"]["ld"]).apply(null,arguments)};var _emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=function(){return(_emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=Module["asm"]["md"]).apply(null,arguments)};var _sbrk=Module["_sbrk"]=function(){return(_sbrk=Module["_sbrk"]=Module["asm"]["nd"]).apply(null,arguments)};var _brk=Module["_brk"]=function(){return(_brk=Module["_brk"]=Module["asm"]["od"]).apply(null,arguments)};var _scalbn=Module["_scalbn"]=function(){return(_scalbn=Module["_scalbn"]=Module["asm"]["pd"]).apply(null,arguments)};var _scalbnl=Module["_scalbnl"]=function(){return(_scalbnl=Module["_scalbnl"]=Module["asm"]["qd"]).apply(null,arguments)};var _snprintf=Module["_snprintf"]=function(){return(_snprintf=Module["_snprintf"]=Module["asm"]["rd"]).apply(null,arguments)};var ___wasi_syscall_ret=Module["___wasi_syscall_ret"]=function(){return(___wasi_syscall_ret=Module["___wasi_syscall_ret"]=Module["asm"]["sd"]).apply(null,arguments)};var _strcmp=Module["_strcmp"]=function(){return(_strcmp=Module["_strcmp"]=Module["asm"]["td"]).apply(null,arguments)};var ___strerror_l=Module["___strerror_l"]=function(){return(___strerror_l=Module["___strerror_l"]=Module["asm"]["ud"]).apply(null,arguments)};var _strerror=Module["_strerror"]=function(){return(_strerror=Module["_strerror"]=Module["asm"]["vd"]).apply(null,arguments)};var _strerror_l=Module["_strerror_l"]=function(){return(_strerror_l=Module["_strerror_l"]=Module["asm"]["wd"]).apply(null,arguments)};var _strnlen=Module["_strnlen"]=function(){return(_strnlen=Module["_strnlen"]=Module["asm"]["xd"]).apply(null,arguments)};var _strtof=Module["_strtof"]=function(){return(_strtof=Module["_strtof"]=Module["asm"]["yd"]).apply(null,arguments)};var _strtod=Module["_strtod"]=function(){return(_strtod=Module["_strtod"]=Module["asm"]["zd"]).apply(null,arguments)};var _strtold=Module["_strtold"]=function(){return(_strtold=Module["_strtold"]=Module["asm"]["Ad"]).apply(null,arguments)};var _strtoull=Module["_strtoull"]=function(){return(_strtoull=Module["_strtoull"]=Module["asm"]["Bd"]).apply(null,arguments)};var _strtoll=Module["_strtoll"]=function(){return(_strtoll=Module["_strtoll"]=Module["asm"]["Cd"]).apply(null,arguments)};var _strtoul=Module["_strtoul"]=function(){return(_strtoul=Module["_strtoul"]=Module["asm"]["Dd"]).apply(null,arguments)};var _strtol=Module["_strtol"]=function(){return(_strtol=Module["_strtol"]=Module["asm"]["Ed"]).apply(null,arguments)};var _strtoimax=Module["_strtoimax"]=function(){return(_strtoimax=Module["_strtoimax"]=Module["asm"]["Fd"]).apply(null,arguments)};var _strtoumax=Module["_strtoumax"]=function(){return(_strtoumax=Module["_strtoumax"]=Module["asm"]["Gd"]).apply(null,arguments)};var ___strtol_internal=Module["___strtol_internal"]=function(){return(___strtol_internal=Module["___strtol_internal"]=Module["asm"]["Hd"]).apply(null,arguments)};var ___strtoul_internal=Module["___strtoul_internal"]=function(){return(___strtoul_internal=Module["___strtoul_internal"]=Module["asm"]["Id"]).apply(null,arguments)};var ___strtoll_internal=Module["___strtoll_internal"]=function(){return(___strtoll_internal=Module["___strtoll_internal"]=Module["asm"]["Jd"]).apply(null,arguments)};var ___strtoull_internal=Module["___strtoull_internal"]=function(){return(___strtoull_internal=Module["___strtoull_internal"]=Module["asm"]["Kd"]).apply(null,arguments)};var ___strtoimax_internal=Module["___strtoimax_internal"]=function(){return(___strtoimax_internal=Module["___strtoimax_internal"]=Module["asm"]["Ld"]).apply(null,arguments)};var ___strtoumax_internal=Module["___strtoumax_internal"]=function(){return(___strtoumax_internal=Module["___strtoumax_internal"]=Module["asm"]["Md"]).apply(null,arguments)};var _swprintf=Module["_swprintf"]=function(){return(_swprintf=Module["_swprintf"]=Module["asm"]["Nd"]).apply(null,arguments)};var ___vfprintf_internal=Module["___vfprintf_internal"]=function(){return(___vfprintf_internal=Module["___vfprintf_internal"]=Module["asm"]["Od"]).apply(null,arguments)};var _wctomb=Module["_wctomb"]=function(){return(_wctomb=Module["_wctomb"]=Module["asm"]["Pd"]).apply(null,arguments)};var ___trunctfdf2=Module["___trunctfdf2"]=function(){return(___trunctfdf2=Module["___trunctfdf2"]=Module["asm"]["Qd"]).apply(null,arguments)};var _vfwprintf=Module["_vfwprintf"]=function(){return(_vfwprintf=Module["_vfwprintf"]=Module["asm"]["Rd"]).apply(null,arguments)};var _vsnprintf=Module["_vsnprintf"]=function(){return(_vsnprintf=Module["_vsnprintf"]=Module["asm"]["Sd"]).apply(null,arguments)};var _vsniprintf=Module["_vsniprintf"]=function(){return(_vsniprintf=Module["_vsniprintf"]=Module["asm"]["Td"]).apply(null,arguments)};var ___small_vsnprintf=Module["___small_vsnprintf"]=function(){return(___small_vsnprintf=Module["___small_vsnprintf"]=Module["asm"]["Ud"]).apply(null,arguments)};var _vswprintf=Module["_vswprintf"]=function(){return(_vswprintf=Module["_vswprintf"]=Module["asm"]["Vd"]).apply(null,arguments)};var ___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=function(){return(___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=Module["asm"]["Wd"]).apply(null,arguments)};var _wcrtomb=Module["_wcrtomb"]=function(){return(_wcrtomb=Module["_wcrtomb"]=Module["asm"]["Xd"]).apply(null,arguments)};var _wcschr=Module["_wcschr"]=function(){return(_wcschr=Module["_wcschr"]=Module["asm"]["Yd"]).apply(null,arguments)};var _wcslen=Module["_wcslen"]=function(){return(_wcslen=Module["_wcslen"]=Module["asm"]["Zd"]).apply(null,arguments)};var _wcsnlen=Module["_wcsnlen"]=function(){return(_wcsnlen=Module["_wcsnlen"]=Module["asm"]["_d"]).apply(null,arguments)};var _wcstof=Module["_wcstof"]=function(){return(_wcstof=Module["_wcstof"]=Module["asm"]["$d"]).apply(null,arguments)};var _wcstod=Module["_wcstod"]=function(){return(_wcstod=Module["_wcstod"]=Module["asm"]["ae"]).apply(null,arguments)};var _wcstold=Module["_wcstold"]=function(){return(_wcstold=Module["_wcstold"]=Module["asm"]["be"]).apply(null,arguments)};var _wcstoull=Module["_wcstoull"]=function(){return(_wcstoull=Module["_wcstoull"]=Module["asm"]["ce"]).apply(null,arguments)};var _wcstoll=Module["_wcstoll"]=function(){return(_wcstoll=Module["_wcstoll"]=Module["asm"]["de"]).apply(null,arguments)};var _wcstoul=Module["_wcstoul"]=function(){return(_wcstoul=Module["_wcstoul"]=Module["asm"]["ee"]).apply(null,arguments)};var _wcstol=Module["_wcstol"]=function(){return(_wcstol=Module["_wcstol"]=Module["asm"]["fe"]).apply(null,arguments)};var _wcstoimax=Module["_wcstoimax"]=function(){return(_wcstoimax=Module["_wcstoimax"]=Module["asm"]["ge"]).apply(null,arguments)};var _wcstoumax=Module["_wcstoumax"]=function(){return(_wcstoumax=Module["_wcstoumax"]=Module["asm"]["he"]).apply(null,arguments)};var _wmemchr=Module["_wmemchr"]=function(){return(_wmemchr=Module["_wmemchr"]=Module["asm"]["ie"]).apply(null,arguments)};var _wmemcmp=Module["_wmemcmp"]=function(){return(_wmemcmp=Module["_wmemcmp"]=Module["asm"]["je"]).apply(null,arguments)};var ___libc_malloc=Module["___libc_malloc"]=function(){return(___libc_malloc=Module["___libc_malloc"]=Module["asm"]["ke"]).apply(null,arguments)};var ___libc_free=Module["___libc_free"]=function(){return(___libc_free=Module["___libc_free"]=Module["asm"]["le"]).apply(null,arguments)};var ___libc_calloc=Module["___libc_calloc"]=function(){return(___libc_calloc=Module["___libc_calloc"]=Module["asm"]["me"]).apply(null,arguments)};var ___libc_realloc=Module["___libc_realloc"]=function(){return(___libc_realloc=Module["___libc_realloc"]=Module["asm"]["ne"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["oe"]).apply(null,arguments)};var _calloc=Module["_calloc"]=function(){return(_calloc=Module["_calloc"]=Module["asm"]["pe"]).apply(null,arguments)};var _realloc=Module["_realloc"]=function(){return(_realloc=Module["_realloc"]=Module["asm"]["qe"]).apply(null,arguments)};var _realloc_in_place=Module["_realloc_in_place"]=function(){return(_realloc_in_place=Module["_realloc_in_place"]=Module["asm"]["re"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["se"]).apply(null,arguments)};var _posix_memalign=Module["_posix_memalign"]=function(){return(_posix_memalign=Module["_posix_memalign"]=Module["asm"]["te"]).apply(null,arguments)};var _valloc=Module["_valloc"]=function(){return(_valloc=Module["_valloc"]=Module["asm"]["ue"]).apply(null,arguments)};var _pvalloc=Module["_pvalloc"]=function(){return(_pvalloc=Module["_pvalloc"]=Module["asm"]["ve"]).apply(null,arguments)};var _mallinfo=Module["_mallinfo"]=function(){return(_mallinfo=Module["_mallinfo"]=Module["asm"]["we"]).apply(null,arguments)};var _mallopt=Module["_mallopt"]=function(){return(_mallopt=Module["_mallopt"]=Module["asm"]["xe"]).apply(null,arguments)};var _malloc_trim=Module["_malloc_trim"]=function(){return(_malloc_trim=Module["_malloc_trim"]=Module["asm"]["ye"]).apply(null,arguments)};var _malloc_usable_size=Module["_malloc_usable_size"]=function(){return(_malloc_usable_size=Module["_malloc_usable_size"]=Module["asm"]["ze"]).apply(null,arguments)};var _malloc_footprint=Module["_malloc_footprint"]=function(){return(_malloc_footprint=Module["_malloc_footprint"]=Module["asm"]["Ae"]).apply(null,arguments)};var _malloc_max_footprint=Module["_malloc_max_footprint"]=function(){return(_malloc_max_footprint=Module["_malloc_max_footprint"]=Module["asm"]["Be"]).apply(null,arguments)};var _malloc_footprint_limit=Module["_malloc_footprint_limit"]=function(){return(_malloc_footprint_limit=Module["_malloc_footprint_limit"]=Module["asm"]["Ce"]).apply(null,arguments)};var _malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=function(){return(_malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=Module["asm"]["De"]).apply(null,arguments)};var _independent_calloc=Module["_independent_calloc"]=function(){return(_independent_calloc=Module["_independent_calloc"]=Module["asm"]["Ee"]).apply(null,arguments)};var _independent_comalloc=Module["_independent_comalloc"]=function(){return(_independent_comalloc=Module["_independent_comalloc"]=Module["asm"]["Fe"]).apply(null,arguments)};var _bulk_free=Module["_bulk_free"]=function(){return(_bulk_free=Module["_bulk_free"]=Module["asm"]["Ge"]).apply(null,arguments)};var _emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=function(){return(_emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=Module["asm"]["He"]).apply(null,arguments)};var _emscripten_builtin_free=Module["_emscripten_builtin_free"]=function(){return(_emscripten_builtin_free=Module["_emscripten_builtin_free"]=Module["asm"]["Ie"]).apply(null,arguments)};var _emscripten_builtin_memalign=function(){return(_emscripten_builtin_memalign=Module["asm"]["emscripten_builtin_memalign"]).apply(null,arguments)};var ___addtf3=Module["___addtf3"]=function(){return(___addtf3=Module["___addtf3"]=Module["asm"]["Je"]).apply(null,arguments)};var ___ashlti3=Module["___ashlti3"]=function(){return(___ashlti3=Module["___ashlti3"]=Module["asm"]["Ke"]).apply(null,arguments)};var ___letf2=Module["___letf2"]=function(){return(___letf2=Module["___letf2"]=Module["asm"]["Le"]).apply(null,arguments)};var ___getf2=Module["___getf2"]=function(){return(___getf2=Module["___getf2"]=Module["asm"]["Me"]).apply(null,arguments)};var ___unordtf2=Module["___unordtf2"]=function(){return(___unordtf2=Module["___unordtf2"]=Module["asm"]["Ne"]).apply(null,arguments)};var ___eqtf2=Module["___eqtf2"]=function(){return(___eqtf2=Module["___eqtf2"]=Module["asm"]["Oe"]).apply(null,arguments)};var ___lttf2=Module["___lttf2"]=function(){return(___lttf2=Module["___lttf2"]=Module["asm"]["Pe"]).apply(null,arguments)};var ___netf2=Module["___netf2"]=function(){return(___netf2=Module["___netf2"]=Module["asm"]["Qe"]).apply(null,arguments)};var ___gttf2=Module["___gttf2"]=function(){return(___gttf2=Module["___gttf2"]=Module["asm"]["Re"]).apply(null,arguments)};var ___divtf3=Module["___divtf3"]=function(){return(___divtf3=Module["___divtf3"]=Module["asm"]["Se"]).apply(null,arguments)};var ___extenddftf2=Module["___extenddftf2"]=function(){return(___extenddftf2=Module["___extenddftf2"]=Module["asm"]["Te"]).apply(null,arguments)};var ___extendsftf2=Module["___extendsftf2"]=function(){return(___extendsftf2=Module["___extendsftf2"]=Module["asm"]["Ue"]).apply(null,arguments)};var ___floatsitf=Module["___floatsitf"]=function(){return(___floatsitf=Module["___floatsitf"]=Module["asm"]["Ve"]).apply(null,arguments)};var ___floatunsitf=Module["___floatunsitf"]=function(){return(___floatunsitf=Module["___floatunsitf"]=Module["asm"]["We"]).apply(null,arguments)};var ___fe_getround=Module["___fe_getround"]=function(){return(___fe_getround=Module["___fe_getround"]=Module["asm"]["Xe"]).apply(null,arguments)};var ___fe_raise_inexact=Module["___fe_raise_inexact"]=function(){return(___fe_raise_inexact=Module["___fe_raise_inexact"]=Module["asm"]["Ye"]).apply(null,arguments)};var ___lshrti3=Module["___lshrti3"]=function(){return(___lshrti3=Module["___lshrti3"]=Module["asm"]["Ze"]).apply(null,arguments)};var ___multf3=Module["___multf3"]=function(){return(___multf3=Module["___multf3"]=Module["asm"]["_e"]).apply(null,arguments)};var ___multi3=Module["___multi3"]=function(){return(___multi3=Module["___multi3"]=Module["asm"]["$e"]).apply(null,arguments)};var _emscripten_stack_get_current=Module["_emscripten_stack_get_current"]=function(){return(_emscripten_stack_get_current=Module["_emscripten_stack_get_current"]=Module["asm"]["af"]).apply(null,arguments)};var ___subtf3=Module["___subtf3"]=function(){return(___subtf3=Module["___subtf3"]=Module["asm"]["bf"]).apply(null,arguments)};var ___trunctfsf2=Module["___trunctfsf2"]=function(){return(___trunctfsf2=Module["___trunctfsf2"]=Module["asm"]["cf"]).apply(null,arguments)};var __ZNSt3__212__libcpp_clzB6v15007Ej=Module["__ZNSt3__212__libcpp_clzB6v15007Ej"]=function(){return(__ZNSt3__212__libcpp_clzB6v15007Ej=Module["__ZNSt3__212__libcpp_clzB6v15007Ej"]=Module["asm"]["df"]).apply(null,arguments)};var __ZNKSt3__26__lessImmEclB6v15007ERKmS3_=Module["__ZNKSt3__26__lessImmEclB6v15007ERKmS3_"]=function(){return(__ZNKSt3__26__lessImmEclB6v15007ERKmS3_=Module["__ZNKSt3__26__lessImmEclB6v15007ERKmS3_"]=Module["asm"]["ef"]).apply(null,arguments)};var __ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_=Module["__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_"]=function(){return(__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_=Module["__ZNSt3__24swapB6v15007IiEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableIS2_EE5valueEvE4typeERS2_S5_"]=Module["asm"]["ff"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IjLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["gf"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IjEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=Module["asm"]["hf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej=Module["__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej"]=function(){return(__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej=Module["__ZNSt3__26__itoa13__traits_baseIjvE7__widthB6v15007Ej"]=Module["asm"]["jf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj=Module["__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj"]=function(){return(__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj=Module["__ZNSt3__26__itoa13__traits_baseIjvE9__convertB6v15007EPcj"]=Module["asm"]["kf"]).apply(null,arguments)};var __ZNSt3__26__itoa13__base_10_u32B6v15007EPcj=Module["__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj=Module["__ZNSt3__26__itoa13__base_10_u32B6v15007EPcj"]=Module["asm"]["lf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append1B6v15007EPcj=Module["__ZNSt3__26__itoa9__append1B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append1B6v15007EPcj=Module["__ZNSt3__26__itoa9__append1B6v15007EPcj"]=Module["asm"]["mf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append2B6v15007EPcj=Module["__ZNSt3__26__itoa9__append2B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append2B6v15007EPcj=Module["__ZNSt3__26__itoa9__append2B6v15007EPcj"]=Module["asm"]["nf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append3B6v15007EPcj=Module["__ZNSt3__26__itoa9__append3B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append3B6v15007EPcj=Module["__ZNSt3__26__itoa9__append3B6v15007EPcj"]=Module["asm"]["of"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append4B6v15007EPcj=Module["__ZNSt3__26__itoa9__append4B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append4B6v15007EPcj=Module["__ZNSt3__26__itoa9__append4B6v15007EPcj"]=Module["asm"]["pf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append5B6v15007EPcj=Module["__ZNSt3__26__itoa9__append5B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append5B6v15007EPcj=Module["__ZNSt3__26__itoa9__append5B6v15007EPcj"]=Module["asm"]["qf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append6B6v15007EPcj=Module["__ZNSt3__26__itoa9__append6B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append6B6v15007EPcj=Module["__ZNSt3__26__itoa9__append6B6v15007EPcj"]=Module["asm"]["rf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append7B6v15007EPcj=Module["__ZNSt3__26__itoa9__append7B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append7B6v15007EPcj=Module["__ZNSt3__26__itoa9__append7B6v15007EPcj"]=Module["asm"]["sf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append8B6v15007EPcj=Module["__ZNSt3__26__itoa9__append8B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append8B6v15007EPcj=Module["__ZNSt3__26__itoa9__append8B6v15007EPcj"]=Module["asm"]["tf"]).apply(null,arguments)};var __ZNSt3__26__itoa9__append9B6v15007EPcj=Module["__ZNSt3__26__itoa9__append9B6v15007EPcj"]=function(){return(__ZNSt3__26__itoa9__append9B6v15007EPcj=Module["__ZNSt3__26__itoa9__append9B6v15007EPcj"]=Module["asm"]["uf"]).apply(null,arguments)};var __ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_"]=function(){return(__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IjEEPcS2_T_"]=Module["asm"]["vf"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKciPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["wf"]).apply(null,arguments)};var __ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_"]=function(){return(__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKcPcEET0_T_S5_S4_"]=Module["asm"]["xf"]).apply(null,arguments)};var __ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=function(){return(__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKcS2_PcLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=Module["asm"]["yf"]).apply(null,arguments)};var __ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_"]=function(){return(__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKcS2_EEDaT_T0_"]=Module["asm"]["zf"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPcNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=Module["asm"]["Af"]).apply(null,arguments)};var __ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_"]=function(){return(__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKccvEENS_4pairIPT_PT0_EES4_S4_S6_"]=Module["asm"]["Bf"]).apply(null,arguments)};var __ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_"]=function(){return(__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKcS2_S2_EET0_S3_T1_"]=Module["asm"]["Cf"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPcS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=Module["asm"]["Df"]).apply(null,arguments)};var __ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=function(){return(__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKcPcEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=Module["asm"]["Ef"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__unwrapB6v15007ES2_S2_"]=Module["asm"]["Ff"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__unwrapB6v15007ES1_"]=Module["asm"]["Gf"]).apply(null,arguments)};var __ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcPcEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=Module["asm"]["Hf"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKcS2_E8__rewrapB6v15007ES2_S2_"]=Module["asm"]["If"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPcLb1EE8__rewrapB6v15007ES1_S1_"]=Module["asm"]["Jf"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKcNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=Module["asm"]["Kf"]).apply(null,arguments)};var __ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=Module["asm"]["Lf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__unwrapB6v15007ES2_"]=Module["asm"]["Mf"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IKcEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_"]=function(){return(__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKcEEPT_S3_"]=Module["asm"]["Nf"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IcEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IcEEPT_S2_"]=function(){return(__ZNSt3__212__to_addressB6v15007IcEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IcEEPT_S2_"]=Module["asm"]["Of"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKcS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=Module["asm"]["Pf"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKcLb1EE8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Qf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IDnEEPKc"]=Module["asm"]["Rf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007EOS5_"]=Module["asm"]["Sf"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5c_strB6v15007Ev"]=Module["asm"]["Tf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4sizeB6v15007Ev"]=Module["asm"]["Uf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE7compareES3_"]=Module["asm"]["Vf"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007Ev"]=Module["asm"]["Wf"]).apply(null,arguments)};var __ZNSt3__23minB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23minB6v15007ImEERKT_S3_S3_"]=function(){return(__ZNSt3__23minB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23minB6v15007ImEERKT_S3_S3_"]=Module["asm"]["Xf"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE4dataB6v15007Ev"]=Module["asm"]["Yf"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE7compareEPKcS3_m=Module["__ZNSt3__211char_traitsIcE7compareEPKcS3_m"]=function(){return(__ZNSt3__211char_traitsIcE7compareEPKcS3_m=Module["__ZNSt3__211char_traitsIcE7compareEPKcS3_m"]=Module["asm"]["Zf"]).apply(null,arguments)};var __ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=function(){return(__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23minB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=Module["asm"]["_f"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6lengthEPKc=Module["__ZNSt3__211char_traitsIcE6lengthEPKc"]=function(){return(__ZNSt3__211char_traitsIcE6lengthEPKc=Module["__ZNSt3__211char_traitsIcE6lengthEPKc"]=Module["asm"]["$f"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longB6v15007Ev"]=Module["asm"]["ag"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=Module["asm"]["bg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["cg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__get_long_capB6v15007Ev"]=Module["asm"]["dg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE10deallocateB6v15007ERS2_Pcm"]=Module["asm"]["eg"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["fg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__set_short_sizeB6v15007Em"]=Module["asm"]["gg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["hg"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6assignERcRKc=Module["__ZNSt3__211char_traitsIcE6assignERcRKc"]=function(){return(__ZNSt3__211char_traitsIcE6assignERcRKc=Module["__ZNSt3__211char_traitsIcE6assignERcRKc"]=Module["asm"]["ig"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["jg"]).apply(null,arguments)};var __ZNSt3__29allocatorIcE10deallocateB6v15007EPcm=Module["__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm"]=function(){return(__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm=Module["__ZNSt3__29allocatorIcE10deallocateB6v15007EPcm"]=Module["asm"]["kg"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["lg"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["mg"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc=Module["__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc"]=function(){return(__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc=Module["__ZNSt3__214pointer_traitsIPcE10pointer_toB6v15007ERc"]=Module["asm"]["ng"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["og"]).apply(null,arguments)};var __ZNSt3__219__libcpp_deallocateB6v15007EPvmm=Module["__ZNSt3__219__libcpp_deallocateB6v15007EPvmm"]=function(){return(__ZNSt3__219__libcpp_deallocateB6v15007EPvmm=Module["__ZNSt3__219__libcpp_deallocateB6v15007EPvmm"]=Module["asm"]["pg"]).apply(null,arguments)};var __ZNSt3__224__is_overaligned_for_newB6v15007Em=Module["__ZNSt3__224__is_overaligned_for_newB6v15007Em"]=function(){return(__ZNSt3__224__is_overaligned_for_newB6v15007Em=Module["__ZNSt3__224__is_overaligned_for_newB6v15007Em"]=Module["asm"]["qg"]).apply(null,arguments)};var __ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_"]=function(){return(__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJSt11align_val_tEEEvPvmDpT_"]=Module["asm"]["rg"]).apply(null,arguments)};var __ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_"]=function(){return(__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_=Module["__ZNSt3__227__do_deallocate_handle_sizeB6v15007IJEEEvPvmDpT_"]=Module["asm"]["sg"]).apply(null,arguments)};var __ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_"]=function(){return(__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvSt11align_val_tEEEvDpT_"]=Module["asm"]["tg"]).apply(null,arguments)};var __ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_"]=function(){return(__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_=Module["__ZNSt3__224__libcpp_operator_deleteB6v15007IJPvEEEvDpT_"]=Module["asm"]["ug"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["vg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7__allocB6v15007Ev"]=Module["asm"]["wg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE37select_on_container_copy_constructionB6v15007IS2_vvEES2_RKS2_"]=Module["asm"]["xg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["yg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__get_long_sizeB6v15007Ev"]=Module["asm"]["zg"]).apply(null,arguments)};var __ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Ag"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["Bg"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Cg"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["Dg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__fits_in_ssoB6v15007Em"]=Module["asm"]["Eg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8max_sizeB6v15007Ev"]=Module["asm"]["Fg"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=Module["asm"]["Gg"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsImE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsImE3maxB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsImE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsImE3maxB6v15007Ev"]=Module["asm"]["Hg"]).apply(null,arguments)};var __ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=function(){return(__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIcEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=Module["asm"]["Ig"]).apply(null,arguments)};var __ZNSt3__29allocatorIcE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIcE8allocateB6v15007Em"]=function(){return(__ZNSt3__29allocatorIcE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIcE8allocateB6v15007Em"]=Module["asm"]["Jg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE11__recommendB6v15007Em"]=Module["asm"]["Kg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__align_itB6v15007ILm16EEEmm"]=Module["asm"]["Lg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__begin_lifetimeB6v15007EPcm"]=Module["asm"]["Mg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__set_long_pointerB6v15007EPc"]=Module["asm"]["Ng"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capB6v15007Em"]=Module["asm"]["Og"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE15__set_long_sizeB6v15007Em"]=Module["asm"]["Pg"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsImLb1EE3maxB6v15007Ev"]=Module["asm"]["Qg"]).apply(null,arguments)};var __ZNSt3__217__libcpp_allocateB6v15007Emm=Module["__ZNSt3__217__libcpp_allocateB6v15007Emm"]=function(){return(__ZNSt3__217__libcpp_allocateB6v15007Emm=Module["__ZNSt3__217__libcpp_allocateB6v15007Emm"]=Module["asm"]["Rg"]).apply(null,arguments)};var __ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_"]=function(){return(__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmSt11align_val_tEEEPvDpT_"]=Module["asm"]["Sg"]).apply(null,arguments)};var __ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_"]=function(){return(__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_=Module["__ZNSt3__221__libcpp_operator_newB6v15007IJmEEEPvDpT_"]=Module["asm"]["Tg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataB6v15007Ev"]=Module["asm"]["Ug"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4sizeB6v15007Ev"]=Module["asm"]["Vg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=Module["asm"]["Wg"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16__get_short_sizeB6v15007Ev"]=Module["asm"]["Xg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE27__invalidate_iterators_pastB6v15007Em"]=Module["asm"]["Yg"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerB6v15007Ev"]=Module["asm"]["Zg"]).apply(null,arguments)};var __ZNSt3__23maxB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23maxB6v15007ImEERKT_S3_S3_"]=function(){return(__ZNSt3__23maxB6v15007ImEERKT_S3_S3_=Module["__ZNSt3__23maxB6v15007ImEERKT_S3_S3_"]=Module["asm"]["_g"]).apply(null,arguments)};var __ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=function(){return(__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_=Module["__ZNSt3__23maxB6v15007ImNS_6__lessImmEEEERKT_S5_S5_T0_"]=Module["asm"]["$g"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["ah"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_"]=function(){return(__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKcE10pointer_toB6v15007ERS1_"]=Module["asm"]["bh"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8capacityB6v15007Ev"]=Module["asm"]["ch"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE10__set_sizeB6v15007Em"]=Module["asm"]["dh"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=Module["asm"]["eh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__default_initB6v15007Ev"]=Module["asm"]["fh"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["gh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__zeroB6v15007Ev"]=Module["asm"]["hh"]).apply(null,arguments)};var __ZNSt3__29allocatorIcEC2B6v15007Ev=Module["__ZNSt3__29allocatorIcEC2B6v15007Ev"]=function(){return(__ZNSt3__29allocatorIcEC2B6v15007Ev=Module["__ZNSt3__29allocatorIcEC2B6v15007Ev"]=Module["asm"]["ih"]).apply(null,arguments)};var __ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev"]=function(){return(__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIcEEEC2B6v15007Ev"]=Module["asm"]["jh"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=Module["asm"]["kh"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=Module["asm"]["lh"]).apply(null,arguments)};var __ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_"]=function(){return(__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_S8_"]=Module["asm"]["mh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcm"]=Module["asm"]["nh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=Module["asm"]["oh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endB6v15007Em"]=Module["asm"]["ph"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__null_terminate_atB6v15007EPcm"]=Module["asm"]["qh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4copyEPcPKcm=Module["__ZNSt3__211char_traitsIcE4copyEPcPKcm"]=function(){return(__ZNSt3__211char_traitsIcE4copyEPcPKcm=Module["__ZNSt3__211char_traitsIcE4copyEPcPKcm"]=Module["asm"]["rh"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKcmPcEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["sh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE11to_int_typeEc=Module["__ZNSt3__211char_traitsIcE11to_int_typeEc"]=function(){return(__ZNSt3__211char_traitsIcE11to_int_typeEc=Module["__ZNSt3__211char_traitsIcE11to_int_typeEc"]=Module["asm"]["th"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsIiE3minB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3minB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsIiE3minB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3minB6v15007Ev"]=Module["asm"]["uh"]).apply(null,arguments)};var __ZNSt3__214numeric_limitsIiE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev"]=function(){return(__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev=Module["__ZNSt3__214numeric_limitsIiE3maxB6v15007Ev"]=Module["asm"]["vh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE2eqEcc=Module["__ZNSt3__211char_traitsIcE2eqEcc"]=function(){return(__ZNSt3__211char_traitsIcE2eqEcc=Module["__ZNSt3__211char_traitsIcE2eqEcc"]=Module["asm"]["wh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4copyEPwPKwm=Module["__ZNSt3__211char_traitsIwE4copyEPwPKwm"]=function(){return(__ZNSt3__211char_traitsIwE4copyEPwPKwm=Module["__ZNSt3__211char_traitsIwE4copyEPwPKwm"]=Module["asm"]["xh"]).apply(null,arguments)};var __ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=function(){return(__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_=Module["__ZNSt3__26copy_nB6v15007IPKwmPwEENS_9enable_ifIXsr33__is_cpp17_random_access_iteratorIT_EE5valueET1_E4typeES5_T0_S6_"]=Module["asm"]["yh"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE2eqEww=Module["__ZNSt3__211char_traitsIwE2eqEww"]=function(){return(__ZNSt3__211char_traitsIwE2eqEww=Module["__ZNSt3__211char_traitsIwE2eqEww"]=Module["asm"]["zh"]).apply(null,arguments)};var __ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Ah"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13get_allocatorB6v15007Ev"]=Module["asm"]["Bh"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=Module["asm"]["Ch"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeB6v15007Em"]=Module["asm"]["Dh"]).apply(null,arguments)};var __ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_"]=function(){return(__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_=Module["__ZNSt3__24copyB6v15007IPKwPwEET0_T_S5_S4_"]=Module["asm"]["Eh"]).apply(null,arguments)};var __ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=function(){return(__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_=Module["__ZNSt3__26__copyB6v15007IPKwS2_PwLi0EEENS_4pairIT_T1_EES5_T0_S6_"]=Module["asm"]["Fh"]).apply(null,arguments)};var __ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_"]=function(){return(__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_=Module["__ZNSt3__214__unwrap_rangeB6v15007IPKwS2_EEDaT_T0_"]=Module["asm"]["Gh"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_=Module["__ZNSt3__213__unwrap_iterB6v15007IPwNS_18__unwrap_iter_implIS1_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES5_"]=Module["asm"]["Hh"]).apply(null,arguments)};var __ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_"]=function(){return(__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_=Module["__ZNSt3__211__copy_implB6v15007IKwwvEENS_4pairIPT_PT0_EES4_S4_S6_"]=Module["asm"]["Ih"]).apply(null,arguments)};var __ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_"]=function(){return(__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_=Module["__ZNSt3__214__rewrap_rangeB6v15007IPKwS2_S2_EET0_S3_T1_"]=Module["asm"]["Jh"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPwS1_NS_18__unwrap_iter_implIS1_Lb1EEEEET_S4_T0_"]=Module["asm"]["Kh"]).apply(null,arguments)};var __ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=function(){return(__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_=Module["__ZNSt3__29make_pairB6v15007IPKwPwEENS_4pairINS_18__unwrap_ref_decayIT_E4typeENS5_IT0_E4typeEEEOS6_OS9_"]=Module["asm"]["Lh"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__unwrapB6v15007ES2_S2_"]=Module["asm"]["Mh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__unwrapB6v15007ES1_"]=Module["asm"]["Nh"]).apply(null,arguments)};var __ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwPwEC2B6v15007IS2_S3_LPv0EEEOT_OT0_"]=Module["asm"]["Oh"]).apply(null,arguments)};var __ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__219__unwrap_range_implIPKwS2_E8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Ph"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_=Module["__ZNSt3__218__unwrap_iter_implIPwLb1EE8__rewrapB6v15007ES1_S1_"]=Module["asm"]["Qh"]).apply(null,arguments)};var __ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=function(){return(__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_=Module["__ZNSt3__213__unwrap_iterB6v15007IPKwNS_18__unwrap_iter_implIS2_Lb1EEELi0EEEDTclsrT0_8__unwrapclsr3stdE7declvalIT_EEEES6_"]=Module["asm"]["Rh"]).apply(null,arguments)};var __ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IS2_S2_LPv0EEEOT_OT0_"]=Module["asm"]["Sh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__unwrapB6v15007ES2_"]=Module["asm"]["Th"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IKwEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_"]=function(){return(__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_=Module["__ZNSt3__212__to_addressB6v15007IKwEEPT_S3_"]=Module["asm"]["Uh"]).apply(null,arguments)};var __ZNSt3__212__to_addressB6v15007IwEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IwEEPT_S2_"]=function(){return(__ZNSt3__212__to_addressB6v15007IwEEPT_S2_=Module["__ZNSt3__212__to_addressB6v15007IwEEPT_S2_"]=Module["asm"]["Vh"]).apply(null,arguments)};var __ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=function(){return(__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_=Module["__ZNSt3__213__rewrap_iterB6v15007IPKwS2_NS_18__unwrap_iter_implIS2_Lb1EEEEET_S5_T0_"]=Module["asm"]["Wh"]).apply(null,arguments)};var __ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_"]=function(){return(__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_=Module["__ZNSt3__218__unwrap_iter_implIPKwLb1EE8__rewrapB6v15007ES2_S2_"]=Module["asm"]["Xh"]).apply(null,arguments)};var __ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_=Module["__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_"]=function(){return(__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_=Module["__ZNSt3__28distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_"]=Module["asm"]["Yh"]).apply(null,arguments)};var __ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE=Module["__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE"]=function(){return(__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE=Module["__ZNSt3__210__distanceB6v15007IPcEENS_15iterator_traitsIT_E15difference_typeES3_S3_NS_26random_access_iterator_tagE"]=Module["asm"]["Zh"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3minB6v15007Ev"]=Module["asm"]["_h"]).apply(null,arguments)};var __ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev"]=function(){return(__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev=Module["__ZNSt3__223__libcpp_numeric_limitsIiLb1EE3maxB6v15007Ev"]=Module["asm"]["$h"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagESA_EEOT_OT0_"]=Module["asm"]["ai"]).apply(null,arguments)};var __ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__219__debug_db_insert_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["bi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixB6v15007Em"]=Module["asm"]["ci"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4sizeB6v15007Ev"]=Module["asm"]["di"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=Module["asm"]["ei"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5beginB6v15007Ev"]=Module["asm"]["fi"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_"]=function(){return(__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPcEC2B6v15007EPKvS1_"]=Module["asm"]["gi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5beginB6v15007Ev"]=Module["asm"]["hi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=Module["asm"]["ii"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_"]=function(){return(__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_=Module["__ZNSt3__211__wrap_iterIPwEC2B6v15007EPKvS1_"]=Module["asm"]["ji"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007Emw"]=Module["asm"]["ki"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4dataB6v15007Ev"]=Module["asm"]["li"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerB6v15007Ev"]=Module["asm"]["mi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__is_longB6v15007Ev"]=Module["asm"]["ni"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__get_long_sizeB6v15007Ev"]=Module["asm"]["oi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__get_short_sizeB6v15007Ev"]=Module["asm"]["pi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__default_initB6v15007Ev"]=Module["asm"]["qi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=Module["asm"]["ri"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["si"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E5firstB6v15007Ev"]=Module["asm"]["ti"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["ui"]).apply(null,arguments)};var __ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=function(){return(__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKcPcEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=Module["asm"]["vi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPcE4baseB6v15007Ev"]=Module["asm"]["wi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKcE4baseB6v15007Ev"]=Module["asm"]["xi"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPcEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPcEplB6v15007El"]=function(){return(__ZNKSt3__211__wrap_iterIPcEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPcEplB6v15007El"]=Module["asm"]["yi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixB6v15007Em"]=Module["asm"]["zi"]).apply(null,arguments)};var __ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=function(){return(__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE=Module["__ZNSt3__2miB6v15007IPKwPwEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_11__wrap_iterIT_EERKNS5_IT0_EE"]=Module["asm"]["Ai"]).apply(null,arguments)};var __ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__225__debug_db_invalidate_allB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["Bi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__get_long_pointerB6v15007Ev"]=Module["asm"]["Ci"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6assignERwRKw=Module["__ZNSt3__211char_traitsIwE6assignERwRKw"]=function(){return(__ZNSt3__211char_traitsIwE6assignERwRKw=Module["__ZNSt3__211char_traitsIwE6assignERwRKw"]=Module["asm"]["Di"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE15__set_long_sizeB6v15007Em"]=Module["asm"]["Ei"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["Fi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__set_short_sizeB6v15007Em"]=Module["asm"]["Gi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8capacityB6v15007Ev"]=Module["asm"]["Hi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeB6v15007Em"]=Module["asm"]["Ii"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7__allocB6v15007Ev"]=Module["asm"]["Ji"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPwE4baseB6v15007Ev"]=Module["asm"]["Ki"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev"]=function(){return(__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev=Module["__ZNKSt3__211__wrap_iterIPKwE4baseB6v15007Ev"]=Module["asm"]["Li"]).apply(null,arguments)};var __ZNKSt3__211__wrap_iterIPwEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPwEplB6v15007El"]=function(){return(__ZNKSt3__211__wrap_iterIPwEplB6v15007El=Module["__ZNKSt3__211__wrap_iterIPwEplB6v15007El"]=Module["asm"]["Mi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5c_strB6v15007Ev"]=Module["asm"]["Ni"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6lengthEPKw=Module["__ZNSt3__211char_traitsIwE6lengthEPKw"]=function(){return(__ZNSt3__211char_traitsIwE6lengthEPKw=Module["__ZNSt3__211char_traitsIwE6lengthEPKw"]=Module["asm"]["Oi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE27__invalidate_iterators_pastB6v15007Em"]=Module["asm"]["Pi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwm"]=Module["asm"]["Qi"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Ri"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007ENS_18__default_init_tagE"]=Module["asm"]["Si"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8max_sizeB6v15007Ev"]=Module["asm"]["Ti"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__fits_in_ssoB6v15007Em"]=Module["asm"]["Ui"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendB6v15007Em"]=Module["asm"]["Vi"]).apply(null,arguments)};var __ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=function(){return(__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m=Module["__ZNSt3__219__allocate_at_leastB6v15007INS_9allocatorIwEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m"]=Module["asm"]["Wi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16__begin_lifetimeB6v15007EPwm"]=Module["asm"]["Xi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__set_long_pointerB6v15007EPw"]=Module["asm"]["Yi"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capB6v15007Em"]=Module["asm"]["Zi"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_length_errorB6v15007Ev"]=Module["asm"]["_i"]).apply(null,arguments)};var __ZNSt3__29allocatorIwEC2B6v15007Ev=Module["__ZNSt3__29allocatorIwEC2B6v15007Ev"]=function(){return(__ZNSt3__29allocatorIwEC2B6v15007Ev=Module["__ZNSt3__29allocatorIwEC2B6v15007Ev"]=Module["asm"]["$i"]).apply(null,arguments)};var __ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev"]=function(){return(__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev=Module["__ZNSt3__216__non_trivial_ifILb1ENS_9allocatorIwEEEC2B6v15007Ev"]=Module["asm"]["aj"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE8max_sizeB6v15007IS2_vvEEmRKS2_"]=Module["asm"]["bj"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw=Module["__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw"]=function(){return(__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw=Module["__ZNSt3__214pointer_traitsIPwE10pointer_toB6v15007ERw"]=Module["asm"]["cj"]).apply(null,arguments)};var __ZNSt3__29allocatorIwE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIwE8allocateB6v15007Em"]=function(){return(__ZNSt3__29allocatorIwE8allocateB6v15007Em=Module["__ZNSt3__29allocatorIwE8allocateB6v15007Em"]=Module["asm"]["dj"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["ej"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__align_itB6v15007ILm4EEEmm"]=Module["asm"]["fj"]).apply(null,arguments)};var __ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=function(){return(__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev=Module["__ZNKSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_E6secondB6v15007Ev"]=Module["asm"]["gj"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["hj"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["ij"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EE5__getB6v15007Ev"]=Module["asm"]["jj"]).apply(null,arguments)};var __ZNSt3__221__convert_to_integralB6v15007Em=Module["__ZNSt3__221__convert_to_integralB6v15007Em"]=function(){return(__ZNSt3__221__convert_to_integralB6v15007Em=Module["__ZNSt3__221__convert_to_integralB6v15007Em"]=Module["asm"]["kj"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm=Module["__ZNSt3__216allocator_traitsINS_9allocatorIwEEE10deallocateB6v15007ERS2_Pwm"]=Module["asm"]["lj"]).apply(null,arguments)};var __ZNSt3__29allocatorIwE10deallocateB6v15007EPwm=Module["__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm"]=function(){return(__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm=Module["__ZNSt3__29allocatorIwE10deallocateB6v15007EPwm"]=Module["asm"]["mj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__get_long_capB6v15007Ev"]=Module["asm"]["nj"]).apply(null,arguments)};var __ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=function(){return(__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev=Module["__ZNKSt3__222__compressed_pair_elemINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repELi0ELb0EE5__getB6v15007Ev"]=Module["asm"]["oj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__get_short_pointerB6v15007Ev"]=Module["asm"]["pj"]).apply(null,arguments)};var __ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_"]=function(){return(__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_=Module["__ZNSt3__214pointer_traitsIPKwE10pointer_toB6v15007ERS1_"]=Module["asm"]["qj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__zeroB6v15007Ev"]=Module["asm"]["rj"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPcEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPcEpLB6v15007El"]=function(){return(__ZNSt3__211__wrap_iterIPcEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPcEpLB6v15007El"]=Module["asm"]["sj"]).apply(null,arguments)};var __ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=function(){return(__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_=Module["__ZNSt3__217__compressed_pairINS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5__repES5_EC2B6v15007INS_18__default_init_tagERKS5_EEOT_OT0_"]=Module["asm"]["tj"]).apply(null,arguments)};var __ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=function(){return(__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_=Module["__ZNSt3__222__compressed_pair_elemINS_9allocatorIwEELi1ELb1EEC2B6v15007IRKS2_vEEOT_"]=Module["asm"]["uj"]).apply(null,arguments)};var __ZNSt3__211__wrap_iterIPwEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPwEpLB6v15007El"]=function(){return(__ZNSt3__211__wrap_iterIPwEpLB6v15007El=Module["__ZNSt3__211__wrap_iterIPwEpLB6v15007El"]=Module["asm"]["vj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE19__null_terminate_atB6v15007EPwm"]=Module["asm"]["wj"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endB6v15007Em"]=Module["asm"]["xj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE20__throw_out_of_rangeB6v15007Ev"]=Module["asm"]["yj"]).apply(null,arguments)};var __ZSt17__throw_bad_allocv=Module["__ZSt17__throw_bad_allocv"]=function(){return(__ZSt17__throw_bad_allocv=Module["__ZSt17__throw_bad_allocv"]=Module["asm"]["zj"]).apply(null,arguments)};var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=function(){return(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=Module["asm"]["Aj"]).apply(null,arguments)};var __ZnwmRKSt9nothrow_t=Module["__ZnwmRKSt9nothrow_t"]=function(){return(__ZnwmRKSt9nothrow_t=Module["__ZnwmRKSt9nothrow_t"]=Module["asm"]["Bj"]).apply(null,arguments)};var __Znam=Module["__Znam"]=function(){return(__Znam=Module["__Znam"]=Module["asm"]["Cj"]).apply(null,arguments)};var __ZnamRKSt9nothrow_t=Module["__ZnamRKSt9nothrow_t"]=function(){return(__ZnamRKSt9nothrow_t=Module["__ZnamRKSt9nothrow_t"]=Module["asm"]["Dj"]).apply(null,arguments)};var __ZdlPvRKSt9nothrow_t=Module["__ZdlPvRKSt9nothrow_t"]=function(){return(__ZdlPvRKSt9nothrow_t=Module["__ZdlPvRKSt9nothrow_t"]=Module["asm"]["Ej"]).apply(null,arguments)};var __ZdlPvm=Module["__ZdlPvm"]=function(){return(__ZdlPvm=Module["__ZdlPvm"]=Module["asm"]["Fj"]).apply(null,arguments)};var __ZdaPv=Module["__ZdaPv"]=function(){return(__ZdaPv=Module["__ZdaPv"]=Module["asm"]["Gj"]).apply(null,arguments)};var __ZdaPvRKSt9nothrow_t=Module["__ZdaPvRKSt9nothrow_t"]=function(){return(__ZdaPvRKSt9nothrow_t=Module["__ZdaPvRKSt9nothrow_t"]=Module["asm"]["Hj"]).apply(null,arguments)};var __ZdaPvm=Module["__ZdaPvm"]=function(){return(__ZdaPvm=Module["__ZdaPvm"]=Module["asm"]["Ij"]).apply(null,arguments)};var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=function(){return(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=Module["asm"]["Jj"]).apply(null,arguments)};var __ZNSt3__222__libcpp_aligned_allocB6v15007Emm=Module["__ZNSt3__222__libcpp_aligned_allocB6v15007Emm"]=function(){return(__ZNSt3__222__libcpp_aligned_allocB6v15007Emm=Module["__ZNSt3__222__libcpp_aligned_allocB6v15007Emm"]=Module["asm"]["Kj"]).apply(null,arguments)};var __ZnwmSt11align_val_tRKSt9nothrow_t=Module["__ZnwmSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZnwmSt11align_val_tRKSt9nothrow_t=Module["__ZnwmSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Lj"]).apply(null,arguments)};var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=function(){return(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=Module["asm"]["Mj"]).apply(null,arguments)};var __ZnamSt11align_val_tRKSt9nothrow_t=Module["__ZnamSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZnamSt11align_val_tRKSt9nothrow_t=Module["__ZnamSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Nj"]).apply(null,arguments)};var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=function(){return(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=Module["asm"]["Oj"]).apply(null,arguments)};var __ZNSt3__221__libcpp_aligned_freeB6v15007EPv=Module["__ZNSt3__221__libcpp_aligned_freeB6v15007EPv"]=function(){return(__ZNSt3__221__libcpp_aligned_freeB6v15007EPv=Module["__ZNSt3__221__libcpp_aligned_freeB6v15007EPv"]=Module["asm"]["Pj"]).apply(null,arguments)};var __ZdlPvSt11align_val_tRKSt9nothrow_t=Module["__ZdlPvSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZdlPvSt11align_val_tRKSt9nothrow_t=Module["__ZdlPvSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Qj"]).apply(null,arguments)};var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=function(){return(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=Module["asm"]["Rj"]).apply(null,arguments)};var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=function(){return(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=Module["asm"]["Sj"]).apply(null,arguments)};var __ZdaPvSt11align_val_tRKSt9nothrow_t=Module["__ZdaPvSt11align_val_tRKSt9nothrow_t"]=function(){return(__ZdaPvSt11align_val_tRKSt9nothrow_t=Module["__ZdaPvSt11align_val_tRKSt9nothrow_t"]=Module["asm"]["Tj"]).apply(null,arguments)};var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=function(){return(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=Module["asm"]["Uj"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEcvNS_17basic_string_viewIcS2_EEB6v15007Ev"]=Module["asm"]["Vj"]).apply(null,arguments)};var __ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm=Module["__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm"]=function(){return(__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm=Module["__ZNSt3__217basic_string_viewIcNS_11char_traitsIcEEEC2B6v15007EPKcm"]=Module["asm"]["Wj"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm"]=function(){return(__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIcNS_11char_traitsIcEEE6substrB6v15007Emm"]=Module["asm"]["Xj"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["Yj"]).apply(null,arguments)};var __ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["Zj"]).apply(null,arguments)};var __ZNSt9exceptionC2B6v15007Ev=Module["__ZNSt9exceptionC2B6v15007Ev"]=function(){return(__ZNSt9exceptionC2B6v15007Ev=Module["__ZNSt9exceptionC2B6v15007Ev"]=Module["asm"]["_j"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringC2EPKc=Module["__ZNSt3__218__libcpp_refstringC2EPKc"]=function(){return(__ZNSt3__218__libcpp_refstringC2EPKc=Module["__ZNSt3__218__libcpp_refstringC2EPKc"]=Module["asm"]["$j"]).apply(null,arguments)};var __ZNSt11logic_errorC2ERKS_=Module["__ZNSt11logic_errorC2ERKS_"]=function(){return(__ZNSt11logic_errorC2ERKS_=Module["__ZNSt11logic_errorC2ERKS_"]=Module["asm"]["ak"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringC2ERKS0_=Module["__ZNSt3__218__libcpp_refstringC2ERKS0_"]=function(){return(__ZNSt3__218__libcpp_refstringC2ERKS0_=Module["__ZNSt3__218__libcpp_refstringC2ERKS0_"]=Module["asm"]["bk"]).apply(null,arguments)};var __ZNKSt3__218__libcpp_refstring15__uses_refcountEv=Module["__ZNKSt3__218__libcpp_refstring15__uses_refcountEv"]=function(){return(__ZNKSt3__218__libcpp_refstring15__uses_refcountEv=Module["__ZNKSt3__218__libcpp_refstring15__uses_refcountEv"]=Module["asm"]["ck"]).apply(null,arguments)};var __ZNSt11logic_erroraSERKS_=Module["__ZNSt11logic_erroraSERKS_"]=function(){return(__ZNSt11logic_erroraSERKS_=Module["__ZNSt11logic_erroraSERKS_"]=Module["asm"]["dk"]).apply(null,arguments)};var __ZNSt3__218__libcpp_refstringaSERKS0_=Module["__ZNSt3__218__libcpp_refstringaSERKS0_"]=function(){return(__ZNSt3__218__libcpp_refstringaSERKS0_=Module["__ZNSt3__218__libcpp_refstringaSERKS0_"]=Module["asm"]["ek"]).apply(null,arguments)};var __ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC2ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["fk"]).apply(null,arguments)};var __ZNSt13runtime_errorC2EPKc=Module["__ZNSt13runtime_errorC2EPKc"]=function(){return(__ZNSt13runtime_errorC2EPKc=Module["__ZNSt13runtime_errorC2EPKc"]=Module["asm"]["gk"]).apply(null,arguments)};var __ZNSt13runtime_errorC2ERKS_=Module["__ZNSt13runtime_errorC2ERKS_"]=function(){return(__ZNSt13runtime_errorC2ERKS_=Module["__ZNSt13runtime_errorC2ERKS_"]=Module["asm"]["hk"]).apply(null,arguments)};var __ZNSt13runtime_erroraSERKS_=Module["__ZNSt13runtime_erroraSERKS_"]=function(){return(__ZNSt13runtime_erroraSERKS_=Module["__ZNSt13runtime_erroraSERKS_"]=Module["asm"]["ik"]).apply(null,arguments)};var __ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt11logic_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["jk"]).apply(null,arguments)};var __ZNSt11logic_errorC1EPKc=Module["__ZNSt11logic_errorC1EPKc"]=function(){return(__ZNSt11logic_errorC1EPKc=Module["__ZNSt11logic_errorC1EPKc"]=Module["asm"]["kk"]).apply(null,arguments)};var __ZNSt11logic_errorC1ERKS_=Module["__ZNSt11logic_errorC1ERKS_"]=function(){return(__ZNSt11logic_errorC1ERKS_=Module["__ZNSt11logic_errorC1ERKS_"]=Module["asm"]["lk"]).apply(null,arguments)};var __ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=function(){return(__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE=Module["__ZNSt13runtime_errorC1ERKNSt3__212basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"]=Module["asm"]["mk"]).apply(null,arguments)};var __ZNSt13runtime_errorC1EPKc=Module["__ZNSt13runtime_errorC1EPKc"]=function(){return(__ZNSt13runtime_errorC1EPKc=Module["__ZNSt13runtime_errorC1EPKc"]=Module["asm"]["nk"]).apply(null,arguments)};var __ZNSt13runtime_errorC1ERKS_=Module["__ZNSt13runtime_errorC1ERKS_"]=function(){return(__ZNSt13runtime_errorC1ERKS_=Module["__ZNSt13runtime_errorC1ERKS_"]=Module["asm"]["ok"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKcm"]=Module["asm"]["pk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4moveEPcPKcm=Module["__ZNSt3__211char_traitsIcE4moveEPcPKcm"]=function(){return(__ZNSt3__211char_traitsIcE4moveEPcPKcm=Module["__ZNSt3__211char_traitsIcE4moveEPcPKcm"]=Module["asm"]["qk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEmmmmmmPKc"]=Module["asm"]["rk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEPKcmm"]=Module["asm"]["sk"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["tk"]).apply(null,arguments)};var __ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_"]=function(){return(__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKcS2_DoFbccEEET_S4_S4_T0_S5_RT1_"]=Module["asm"]["uk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcmm"]=Module["asm"]["vk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc"]=Module["asm"]["wk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE16find_last_not_ofEPKcmm"]=Module["asm"]["xk"]).apply(null,arguments)};var __ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["yk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE4findEPKcmRS2_=Module["__ZNSt3__211char_traitsIcE4findEPKcmRS2_"]=function(){return(__ZNSt3__211char_traitsIcE4findEPKcmRS2_=Module["__ZNSt3__211char_traitsIcE4findEPKcmRS2_"]=Module["asm"]["zk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"]=Module["asm"]["Ak"]).apply(null,arguments)};var __ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=function(){return(__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEEvPT_"]=Module["asm"]["Bk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17find_first_not_ofEPKcmm"]=Module["asm"]["Ck"]).apply(null,arguments)};var __ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Dk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmmc"]=Module["asm"]["Ek"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"]=Module["asm"]["Fk"]).apply(null,arguments)};var __ZNSt3__211char_traitsIcE6assignEPcmc=Module["__ZNSt3__211char_traitsIcE6assignEPcmc"]=function(){return(__ZNSt3__211char_traitsIcE6assignEPcmc=Module["__ZNSt3__211char_traitsIcE6assignEPcmc"]=Module["asm"]["Gk"]).apply(null,arguments)};var __ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=Module["asm"]["Hk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc"]=Module["asm"]["Ik"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"]=Module["asm"]["Jk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=Module["asm"]["Kk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm"]=Module["asm"]["Lk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm"]=Module["asm"]["Mk"]).apply(null,arguments)};var __ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Nk"]).apply(null,arguments)};var __ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_"]=function(){return(__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKcS2_RDoFbccEEET_S5_S5_T0_S6_OT1_"]=Module["asm"]["Ok"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmmc"]=Module["asm"]["Pk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKcm"]=Module["asm"]["Qk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE17__assign_externalEPKc"]=Module["asm"]["Rk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"]=Module["asm"]["Sk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__shrink_or_extendB6v15007Em"]=Module["asm"]["Tk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm"]=Module["asm"]["Uk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_mm"]=Module["asm"]["Vk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"]=Module["asm"]["Wk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_mmRKS4_"]=Module["asm"]["Xk"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEcm"]=Module["asm"]["Yk"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["Zk"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc"]=Module["asm"]["_k"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc"]=Module["asm"]["$k"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12find_last_ofEPKcmm"]=Module["asm"]["al"]).apply(null,arguments)};var __ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["bl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"]=Module["asm"]["cl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEmc"]=Module["asm"]["dl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5rfindEcm"]=Module["asm"]["el"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEmc"]=Module["asm"]["fl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE26__erase_external_with_moveEmm"]=Module["asm"]["gl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_mm"]=Module["asm"]["hl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEPKc"]=Module["asm"]["il"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm"]=Module["asm"]["jl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKc"]=Module["asm"]["kl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE2atEm"]=Module["asm"]["ll"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4findEPKcmm"]=Module["asm"]["ml"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IcmNS_11char_traitsIcEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["nl"]).apply(null,arguments)};var __ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_"]=function(){return(__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIcNS_11char_traitsIcEEEEPKT_S5_S5_S5_S5_"]=Module["asm"]["ol"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmRKS5_mm"]=Module["asm"]["pl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareB6v15007INS_17basic_string_viewIcS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIcS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=Module["asm"]["ql"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc"]=Module["asm"]["rl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmRKS5_mm"]=Module["asm"]["sl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc"]=Module["asm"]["tl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc"]=Module["asm"]["ul"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmRKS5_mm"]=Module["asm"]["vl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKwm"]=Module["asm"]["wl"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4moveEPwPKwm=Module["__ZNSt3__211char_traitsIwE4moveEPwPKwm"]=function(){return(__ZNSt3__211char_traitsIwE4moveEPwPKwm=Module["__ZNSt3__211char_traitsIwE4moveEPwPKwm"]=Module["asm"]["xl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEmmmmmmPKw"]=Module["asm"]["yl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEPKwmm"]=Module["asm"]["zl"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Al"]).apply(null,arguments)};var __ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_"]=function(){return(__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_=Module["__ZNSt3__218__find_end_classicB6v15007IPKwS2_DoFbwwEEET_S4_S4_T0_S5_RT1_"]=Module["asm"]["Bl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwmm"]=Module["asm"]["Cl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmPKw"]=Module["asm"]["Dl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE16find_last_not_ofEPKwmm"]=Module["asm"]["El"]).apply(null,arguments)};var __ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__222__str_find_last_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Fl"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE4findEPKwmRS2_=Module["__ZNSt3__211char_traitsIwE4findEPKwmRS2_"]=function(){return(__ZNSt3__211char_traitsIwE4findEPKwmRS2_=Module["__ZNSt3__211char_traitsIwE4findEPKwmRS2_"]=Module["asm"]["Gl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"]=Module["asm"]["Hl"]).apply(null,arguments)};var __ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=function(){return(__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_=Module["__ZNSt3__218__debug_db_erase_cB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_"]=Module["asm"]["Il"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17find_first_not_ofEPKwmm"]=Module["asm"]["Jl"]).apply(null,arguments)};var __ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__223__str_find_first_not_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Kl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmmw"]=Module["asm"]["Ll"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEmmmmmm"]=Module["asm"]["Ml"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE6assignEPwmw=Module["__ZNSt3__211char_traitsIwE6assignEPwmw"]=function(){return(__ZNSt3__211char_traitsIwE6assignEPwmw=Module["__ZNSt3__211char_traitsIwE6assignEPwmw"]=Module["asm"]["Nl"]).apply(null,arguments)};var __ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__26fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=Module["asm"]["Ol"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw"]=Module["asm"]["Pl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwm"]=Module["asm"]["Ql"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE25__init_copy_ctor_externalEPKwm"]=Module["asm"]["Rl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=Module["asm"]["Sl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKwm"]=Module["asm"]["Tl"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13find_first_ofEPKwmm"]=Module["asm"]["Ul"]).apply(null,arguments)};var __ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__219__str_find_first_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["Vl"]).apply(null,arguments)};var __ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_"]=function(){return(__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_=Module["__ZNSt3__218__find_first_of_ceIPKwS2_RDoFbwwEEET_S5_S5_T0_S6_OT1_"]=Module["asm"]["Wl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmmw"]=Module["asm"]["Xl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKwm"]=Module["asm"]["Yl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_externalEPKw"]=Module["asm"]["Zl"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEm"]=Module["asm"]["_l"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE18__shrink_or_extendB6v15007Em"]=Module["asm"]["$l"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwm"]=Module["asm"]["am"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_mm"]=Module["asm"]["bm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4copyEPwmm"]=Module["asm"]["cm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_mmRKS4_"]=Module["asm"]["dm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEwm"]=Module["asm"]["em"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["fm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEmw"]=Module["asm"]["gm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmPKw"]=Module["asm"]["hm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12find_last_ofEPKwmm"]=Module["asm"]["im"]).apply(null,arguments)};var __ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__218__str_find_last_ofB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["jm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb0EEERS5_PKwm"]=Module["asm"]["km"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE17__assign_no_aliasILb1EEERS5_PKwm"]=Module["asm"]["lm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"]=Module["asm"]["mm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEmw"]=Module["asm"]["nm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE5rfindEwm"]=Module["asm"]["om"]).apply(null,arguments)};var __ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=function(){return(__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_=Module["__ZNSt3__211__str_rfindB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S4_S3_"]=Module["asm"]["pm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEmw"]=Module["asm"]["qm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE26__erase_external_with_moveEmm"]=Module["asm"]["rm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_mm"]=Module["asm"]["sm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEPKw"]=Module["asm"]["tm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKwm"]=Module["asm"]["um"]).apply(null,arguments)};var __ZNSt3__211char_traitsIwE7compareEPKwS3_m=Module["__ZNSt3__211char_traitsIwE7compareEPKwS3_m"]=function(){return(__ZNSt3__211char_traitsIwE7compareEPKwS3_m=Module["__ZNSt3__211char_traitsIwE7compareEPKwS3_m"]=Module["asm"]["vm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmPKw"]=Module["asm"]["wm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE2atEm"]=Module["asm"]["xm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4findEPKwmm"]=Module["asm"]["ym"]).apply(null,arguments)};var __ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=function(){return(__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_=Module["__ZNSt3__210__str_findB6v15007IwmNS_11char_traitsIwEELm4294967295EEET0_PKT_S3_S6_S3_S3_"]=Module["asm"]["zm"]).apply(null,arguments)};var __ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_"]=function(){return(__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_=Module["__ZNSt3__218__search_substringIwNS_11char_traitsIwEEEEPKT_S5_S5_S5_S5_"]=Module["asm"]["Am"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareEmmRKS5_mm"]=Module["asm"]["Bm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEcvNS_17basic_string_viewIwS2_EEB6v15007Ev"]=Module["asm"]["Cm"]).apply(null,arguments)};var __ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=function(){return(__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm=Module["__ZNKSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7compareB6v15007INS_17basic_string_viewIwS2_EEEENS_9enable_ifIXaasr33__can_be_converted_to_string_viewIwS2_T_EE5valuentsr17__is_same_uncvrefISA_S5_EE5valueEiE4typeEmmRKSA_mm"]=Module["asm"]["Dm"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE6substrB6v15007Emm"]=Module["asm"]["Em"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE7compareES3_"]=Module["asm"]["Fm"]).apply(null,arguments)};var __ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm=Module["__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm"]=function(){return(__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm=Module["__ZNSt3__217basic_string_viewIwNS_11char_traitsIwEEEC2B6v15007EPKwm"]=Module["asm"]["Gm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKw"]=Module["asm"]["Hm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEmmRKS5_mm"]=Module["asm"]["Im"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw"]=Module["asm"]["Jm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw"]=Module["asm"]["Km"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEmRKS5_mm"]=Module["asm"]["Lm"]).apply(null,arguments)};var __ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_=Module["__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_"]=function(){return(__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_=Module["__ZNSt3__2plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_"]=Module["asm"]["Mm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007ENS_24__uninitialized_size_tagEmRKS4_"]=Module["asm"]["Nm"]).apply(null,arguments)};var __ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m"]=function(){return(__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m=Module["__ZNSt3__216allocator_traitsINS_9allocatorIcEEE8allocateB6v15007ERS2_m"]=Module["asm"]["Om"]).apply(null,arguments)};var __ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Pm"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev"]=Module["asm"]["Qm"]).apply(null,arguments)};var __ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Rm"]).apply(null,arguments)};var __ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Sm"]).apply(null,arguments)};var __ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Tm"]).apply(null,arguments)};var __ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=function(){return(__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPmi"]=Module["asm"]["Um"]).apply(null,arguments)};var __ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Vm"]).apply(null,arguments)};var __ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Wm"]).apply(null,arguments)};var __ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=function(){return(__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPm"]=Module["asm"]["Xm"]).apply(null,arguments)};var __ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stoiERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["Ym"]).apply(null,arguments)};var __ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__24stolERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["Zm"]).apply(null,arguments)};var __ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stoulERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["_m"]).apply(null,arguments)};var __ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__25stollERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["$m"]).apply(null,arguments)};var __ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=function(){return(__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi=Module["__ZNSt3__26stoullERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPmi"]=Module["asm"]["an"]).apply(null,arguments)};var __ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stofERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["bn"]).apply(null,arguments)};var __ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__24stodERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["cn"]).apply(null,arguments)};var __ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=function(){return(__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm=Module["__ZNSt3__25stoldERKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEPm"]=Module["asm"]["dn"]).apply(null,arguments)};var __ZNSt3__29to_stringEi=Module["__ZNSt3__29to_stringEi"]=function(){return(__ZNSt3__29to_stringEi=Module["__ZNSt3__29to_stringEi"]=Module["asm"]["en"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IiLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["fn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B6v15007IPcvEET_S8_"]=Module["asm"]["gn"]).apply(null,arguments)};var __ZNSt3__29to_stringEl=Module["__ZNSt3__29to_stringEl"]=function(){return(__ZNSt3__29to_stringEl=Module["__ZNSt3__29to_stringEl"]=Module["asm"]["hn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IlLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["jn"]).apply(null,arguments)};var __ZNSt3__29to_stringEx=Module["__ZNSt3__29to_stringEx"]=function(){return(__ZNSt3__29to_stringEx=Module["__ZNSt3__29to_stringEx"]=Module["asm"]["kn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IxLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["ln"]).apply(null,arguments)};var __ZNSt3__29to_stringEj=Module["__ZNSt3__29to_stringEj"]=function(){return(__ZNSt3__29to_stringEj=Module["__ZNSt3__29to_stringEj"]=Module["asm"]["mn"]).apply(null,arguments)};var __ZNSt3__29to_stringEm=Module["__ZNSt3__29to_stringEm"]=function(){return(__ZNSt3__29to_stringEm=Module["__ZNSt3__29to_stringEm"]=Module["asm"]["nn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007ImLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["on"]).apply(null,arguments)};var __ZNSt3__29to_stringEy=Module["__ZNSt3__29to_stringEy"]=function(){return(__ZNSt3__29to_stringEy=Module["__ZNSt3__29to_stringEy"]=Module["asm"]["pn"]).apply(null,arguments)};var __ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_"]=function(){return(__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_=Module["__ZNSt3__28to_charsB6v15007IyLi0EEENS_15to_chars_resultEPcS2_T_"]=Module["asm"]["qn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEi=Module["__ZNSt3__210to_wstringEi"]=function(){return(__ZNSt3__210to_wstringEi=Module["__ZNSt3__210to_wstringEi"]=Module["asm"]["rn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007IPcvEET_S8_"]=Module["asm"]["sn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEl=Module["__ZNSt3__210to_wstringEl"]=function(){return(__ZNSt3__210to_wstringEl=Module["__ZNSt3__210to_wstringEl"]=Module["asm"]["tn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEx=Module["__ZNSt3__210to_wstringEx"]=function(){return(__ZNSt3__210to_wstringEx=Module["__ZNSt3__210to_wstringEx"]=Module["asm"]["un"]).apply(null,arguments)};var __ZNSt3__210to_wstringEj=Module["__ZNSt3__210to_wstringEj"]=function(){return(__ZNSt3__210to_wstringEj=Module["__ZNSt3__210to_wstringEj"]=Module["asm"]["vn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEm=Module["__ZNSt3__210to_wstringEm"]=function(){return(__ZNSt3__210to_wstringEm=Module["__ZNSt3__210to_wstringEm"]=Module["asm"]["wn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEy=Module["__ZNSt3__210to_wstringEy"]=function(){return(__ZNSt3__210to_wstringEy=Module["__ZNSt3__210to_wstringEy"]=Module["asm"]["xn"]).apply(null,arguments)};var __ZNSt3__29to_stringEf=Module["__ZNSt3__29to_stringEf"]=function(){return(__ZNSt3__29to_stringEf=Module["__ZNSt3__29to_stringEf"]=Module["asm"]["yn"]).apply(null,arguments)};var __ZNSt3__29to_stringEd=Module["__ZNSt3__29to_stringEd"]=function(){return(__ZNSt3__29to_stringEd=Module["__ZNSt3__29to_stringEd"]=Module["asm"]["zn"]).apply(null,arguments)};var __ZNSt3__29to_stringEe=Module["__ZNSt3__29to_stringEe"]=function(){return(__ZNSt3__29to_stringEe=Module["__ZNSt3__29to_stringEe"]=Module["asm"]["An"]).apply(null,arguments)};var __ZNSt3__210to_wstringEf=Module["__ZNSt3__210to_wstringEf"]=function(){return(__ZNSt3__210to_wstringEf=Module["__ZNSt3__210to_wstringEf"]=Module["asm"]["Bn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev"]=Module["asm"]["Cn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeB6v15007Em"]=Module["asm"]["Dn"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2B6v15007EOS5_"]=Module["asm"]["En"]).apply(null,arguments)};var __ZNSt3__210to_wstringEd=Module["__ZNSt3__210to_wstringEd"]=function(){return(__ZNSt3__210to_wstringEd=Module["__ZNSt3__210to_wstringEd"]=Module["asm"]["Fn"]).apply(null,arguments)};var __ZNSt3__210to_wstringEe=Module["__ZNSt3__210to_wstringEe"]=function(){return(__ZNSt3__210to_wstringEe=Module["__ZNSt3__210to_wstringEe"]=Module["asm"]["Gn"]).apply(null,arguments)};var __ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=function(){return(__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKcS3_S3_S3_DoFbccENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=Module["asm"]["Hn"]).apply(null,arguments)};var __ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_"]=function(){return(__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKcEET_S6_S6_"]=Module["asm"]["In"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKcEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Jn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbccEJRKcS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Kn"]).apply(null,arguments)};var __ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKcS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=Module["asm"]["Ln"]).apply(null,arguments)};var __ZNKSt3__210__identityclIRKcEEOT_S5_=Module["__ZNKSt3__210__identityclIRKcEEOT_S5_"]=function(){return(__ZNKSt3__210__identityclIRKcEEOT_S5_=Module["__ZNKSt3__210__identityclIRKcEEOT_S5_"]=Module["asm"]["Mn"]).apply(null,arguments)};var __ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPcmcEET_S2_T0_RKT1_"]=Module["asm"]["Nn"]).apply(null,arguments)};var __ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=function(){return(__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_=Module["__ZNSt3__215__find_end_implB6v15007INS_17_ClassicAlgPolicyEPKwS3_S3_S3_DoFbwwENS_10__identityES5_EENS_4pairIT0_S7_EES7_T1_T2_T3_RT4_RT5_RT6_NS_20forward_iterator_tagESI_"]=Module["asm"]["On"]).apply(null,arguments)};var __ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_"]=function(){return(__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_=Module["__ZNSt3__28_IterOpsINS_17_ClassicAlgPolicyEE4nextB6v15007IPKwEET_S6_S6_"]=Module["asm"]["Pn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRNS_10__identityEJRKwEEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Qn"]).apply(null,arguments)};var __ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=function(){return(__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_=Module["__ZNSt3__28__invokeB6v15007IRDoFbwwEJRKwS4_EEEDTclclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOS5_DpOS6_"]=Module["asm"]["Rn"]).apply(null,arguments)};var __ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=function(){return(__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_=Module["__ZNSt3__24pairIPKwS2_EC2B6v15007IRS2_S5_LPv0EEEOT_OT0_"]=Module["asm"]["Sn"]).apply(null,arguments)};var __ZNKSt3__210__identityclIRKwEEOT_S5_=Module["__ZNKSt3__210__identityclIRKwEEOT_S5_"]=function(){return(__ZNKSt3__210__identityclIRKwEEOT_S5_=Module["__ZNKSt3__210__identityclIRKwEEOT_S5_"]=Module["asm"]["Tn"]).apply(null,arguments)};var __ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=function(){return(__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_=Module["__ZNSt3__28__fill_nB6v15007IPwmwEET_S2_T0_RKT1_"]=Module["asm"]["Un"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4sizeB6v15007Ev"]=Module["asm"]["Vn"]).apply(null,arguments)};var __ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev"]=function(){return(__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev=Module["__ZNKSt3__217basic_string_viewIwNS_11char_traitsIwEEE4dataB6v15007Ev"]=Module["asm"]["Wn"]).apply(null,arguments)};var __ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_=Module["__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_"]=function(){return(__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_=Module["__ZNSt3__2plB6v15007IcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6_"]=Module["asm"]["Xn"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IiEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=Module["asm"]["Yn"]).apply(null,arguments)};var __ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_"]=function(){return(__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IiEENS_13make_unsignedIT_E4typeES2_"]=Module["asm"]["Zn"]).apply(null,arguments)};var __ZNSt3__212__complementB6v15007IjEET_S1_=Module["__ZNSt3__212__complementB6v15007IjEET_S1_"]=function(){return(__ZNSt3__212__complementB6v15007IjEET_S1_=Module["__ZNSt3__212__complementB6v15007IjEET_S1_"]=Module["asm"]["_n"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IxEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb1EEE"]=Module["asm"]["$n"]).apply(null,arguments)};var __ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_"]=function(){return(__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_=Module["__ZNSt3__218__to_unsigned_likeB6v15007IxEENS_13make_unsignedIT_E4typeES2_"]=Module["asm"]["ao"]).apply(null,arguments)};var __ZNSt3__212__complementB6v15007IyEET_S1_=Module["__ZNSt3__212__complementB6v15007IyEET_S1_"]=function(){return(__ZNSt3__212__complementB6v15007IyEET_S1_=Module["__ZNSt3__212__complementB6v15007IyEET_S1_"]=Module["asm"]["bo"]).apply(null,arguments)};var __ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=function(){return(__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE=Module["__ZNSt3__215__to_chars_itoaB6v15007IyEENS_15to_chars_resultEPcS2_T_NS_17integral_constantIbLb0EEE"]=Module["asm"]["co"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey=Module["__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey"]=function(){return(__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey=Module["__ZNSt3__26__itoa13__traits_baseIyvE7__widthB6v15007Ey"]=Module["asm"]["eo"]).apply(null,arguments)};var __ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy=Module["__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy"]=function(){return(__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy=Module["__ZNSt3__26__itoa13__traits_baseIyvE9__convertB6v15007EPcy"]=Module["asm"]["fo"]).apply(null,arguments)};var __ZNSt3__212__libcpp_clzB6v15007Ey=Module["__ZNSt3__212__libcpp_clzB6v15007Ey"]=function(){return(__ZNSt3__212__libcpp_clzB6v15007Ey=Module["__ZNSt3__212__libcpp_clzB6v15007Ey"]=Module["asm"]["go"]).apply(null,arguments)};var __ZNSt3__26__itoa13__base_10_u64B6v15007EPcy=Module["__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy"]=function(){return(__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy=Module["__ZNSt3__26__itoa13__base_10_u64B6v15007EPcy"]=Module["asm"]["ho"]).apply(null,arguments)};var __ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_"]=function(){return(__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_=Module["__ZNSt3__26__itoa10__append10B6v15007IyEEPcS2_T_"]=Module["asm"]["io"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPcEENS_9enable_ifIXsr27__is_cpp17_forward_iteratorIT_EE5valueEvE4typeES9_S9_"]=Module["asm"]["jo"]).apply(null,arguments)};var __ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_"]=function(){return(__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_=Module["__ZNSt3__215__debug_db_swapB6v15007INS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEEEEvPT_S8_"]=Module["asm"]["ko"]).apply(null,arguments)};var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_"]=Module["asm"]["lo"]).apply(null,arguments)};var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_"]=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_mmRKS4_"]=Module["asm"]["mo"]).apply(null,arguments)};var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=function(){return(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=Module["asm"]["no"]).apply(null,arguments)};var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=function(){return(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=Module["asm"]["oo"]).apply(null,arguments)};var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=function(){return(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=Module["asm"]["po"]).apply(null,arguments)};var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=function(){return(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=Module["asm"]["qo"]).apply(null,arguments)};var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=function(){return(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=Module["asm"]["ro"]).apply(null,arguments)};var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=function(){return(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=Module["asm"]["so"]).apply(null,arguments)};var __ZSt9terminatev=Module["__ZSt9terminatev"]=function(){return(__ZSt9terminatev=Module["__ZSt9terminatev"]=Module["asm"]["to"]).apply(null,arguments)};var ___cxa_increment_exception_refcount=function(){return(___cxa_increment_exception_refcount=Module["asm"]["__cxa_increment_exception_refcount"]).apply(null,arguments)};var ___cxa_decrement_exception_refcount=function(){return(___cxa_decrement_exception_refcount=Module["asm"]["__cxa_decrement_exception_refcount"]).apply(null,arguments)};var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=function(){return(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=Module["asm"]["uo"]).apply(null,arguments)};var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=function(){return(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=Module["asm"]["vo"]).apply(null,arguments)};var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=function(){return(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=Module["asm"]["wo"]).apply(null,arguments)};var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=function(){return(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=Module["asm"]["xo"]).apply(null,arguments)};var ___cxa_free_exception=Module["___cxa_free_exception"]=function(){return(___cxa_free_exception=Module["___cxa_free_exception"]=Module["asm"]["yo"]).apply(null,arguments)};var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=function(){return(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=Module["asm"]["zo"]).apply(null,arguments)};var ___dynamic_cast=Module["___dynamic_cast"]=function(){return(___dynamic_cast=Module["___dynamic_cast"]=Module["asm"]["Ao"]).apply(null,arguments)};var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=function(){return(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=Module["asm"]["Bo"]).apply(null,arguments)};var ___cxa_can_catch=function(){return(___cxa_can_catch=Module["asm"]["__cxa_can_catch"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["Co"]).apply(null,arguments)};var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=function(){return(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=Module["asm"]["Do"]).apply(null,arguments)};var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=function(){return(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=Module["asm"]["Eo"]).apply(null,arguments)};var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=function(){return(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=Module["asm"]["Fo"]).apply(null,arguments)};var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=function(){return(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=Module["asm"]["Go"]).apply(null,arguments)};var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=function(){return(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=Module["asm"]["Ho"]).apply(null,arguments)};var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=function(){return(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=Module["asm"]["Io"]).apply(null,arguments)};var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=function(){return(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=Module["asm"]["Jo"]).apply(null,arguments)};var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=function(){return(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=Module["asm"]["Ko"]).apply(null,arguments)};var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=function(){return(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=Module["asm"]["Lo"]).apply(null,arguments)};var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=function(){return(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=Module["asm"]["Mo"]).apply(null,arguments)};var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=function(){return(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=Module["asm"]["No"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=function(){return(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=Module["asm"]["Oo"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=function(){return(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=Module["asm"]["Po"]).apply(null,arguments)};var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=function(){return(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=Module["asm"]["Qo"]).apply(null,arguments)};var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=function(){return(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=Module["asm"]["Ro"]).apply(null,arguments)};var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=function(){return(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=Module["asm"]["So"]).apply(null,arguments)};var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=function(){return(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=Module["asm"]["To"]).apply(null,arguments)};var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=function(){return(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=Module["asm"]["Uo"]).apply(null,arguments)};var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=function(){return(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=Module["asm"]["Vo"]).apply(null,arguments)};var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=function(){return(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=Module["asm"]["Wo"]).apply(null,arguments)};var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=function(){return(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=Module["asm"]["Xo"]).apply(null,arguments)};var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=function(){return(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=Module["asm"]["Yo"]).apply(null,arguments)};var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=function(){return(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=Module["asm"]["Zo"]).apply(null,arguments)};var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=function(){return(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=Module["asm"]["_o"]).apply(null,arguments)};var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=function(){return(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=Module["asm"]["$o"]).apply(null,arguments)};var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=function(){return(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=Module["asm"]["ap"]).apply(null,arguments)};var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=function(){return(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=Module["asm"]["bp"]).apply(null,arguments)};var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=function(){return(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=Module["asm"]["cp"]).apply(null,arguments)};var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=function(){return(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=Module["asm"]["dp"]).apply(null,arguments)};var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=function(){return(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=Module["asm"]["ep"]).apply(null,arguments)};var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=function(){return(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=Module["asm"]["fp"]).apply(null,arguments)};var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=function(){return(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=Module["asm"]["gp"]).apply(null,arguments)};var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=function(){return(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=Module["asm"]["hp"]).apply(null,arguments)};var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=function(){return(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=Module["asm"]["ip"]).apply(null,arguments)};var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=function(){return(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=Module["asm"]["jp"]).apply(null,arguments)};var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=function(){return(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=Module["asm"]["kp"]).apply(null,arguments)};var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=function(){return(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=Module["asm"]["lp"]).apply(null,arguments)};var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=function(){return(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=Module["asm"]["mp"]).apply(null,arguments)};var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=function(){return(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=Module["asm"]["np"]).apply(null,arguments)};var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=function(){return(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=Module["asm"]["op"]).apply(null,arguments)};var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=function(){return(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=Module["asm"]["pp"]).apply(null,arguments)};var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=function(){return(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=Module["asm"]["qp"]).apply(null,arguments)};var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=function(){return(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=Module["asm"]["rp"]).apply(null,arguments)};var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=function(){return(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=Module["asm"]["sp"]).apply(null,arguments)};var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=function(){return(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=Module["asm"]["tp"]).apply(null,arguments)};var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=function(){return(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=Module["asm"]["up"]).apply(null,arguments)};var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=function(){return(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=Module["asm"]["vp"]).apply(null,arguments)};var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=function(){return(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=Module["asm"]["wp"]).apply(null,arguments)};var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=function(){return(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=Module["asm"]["xp"]).apply(null,arguments)};var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=function(){return(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=Module["asm"]["yp"]).apply(null,arguments)};var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=function(){return(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=Module["asm"]["zp"]).apply(null,arguments)};var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=function(){return(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=Module["asm"]["Ap"]).apply(null,arguments)};var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=function(){return(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=Module["asm"]["Bp"]).apply(null,arguments)};var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=function(){return(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=Module["asm"]["Cp"]).apply(null,arguments)};var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=function(){return(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=Module["asm"]["Dp"]).apply(null,arguments)};var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=function(){return(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=Module["asm"]["Ep"]).apply(null,arguments)};var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=function(){return(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=Module["asm"]["Fp"]).apply(null,arguments)};var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=function(){return(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=Module["asm"]["Gp"]).apply(null,arguments)};var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=function(){return(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=Module["asm"]["Hp"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ip"]).apply(null,arguments)};var __ZTIPK16failsafe_flags_s=Module["__ZTIPK16failsafe_flags_s"]=48096;var __ZTIP16failsafe_flags_s=Module["__ZTIP16failsafe_flags_s"]=48080;var __ZTI16failsafe_flags_s=Module["__ZTI16failsafe_flags_s"]=48072;var __ZTIb=Module["__ZTIb"]=32312;var __ZTIh=Module["__ZTIh"]=32468;var __ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=48256;var __ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=48240;var __ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=48184;var __ZTISt12length_error=Module["__ZTISt12length_error"]=34428;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=34388;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=34200;var __ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=48172;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=34480;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=34440;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=33700;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=33832;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=33740;var __ZTS16failsafe_flags_s=Module["__ZTS16failsafe_flags_s"]=25868;var __ZTSP16failsafe_flags_s=Module["__ZTSP16failsafe_flags_s"]=25887;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=33952;var __ZTSPK16failsafe_flags_s=Module["__ZTSPK16failsafe_flags_s"]=25907;var __ZTIi=Module["__ZTIi"]=32676;var __ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=25956;var __ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=26019;var __ZTIv=Module["__ZTIv"]=32204;var __ZTIf=Module["__ZTIf"]=33148;var __ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=26114;var __ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=26201;var __ZTIm=Module["__ZTIm"]=32832;var __ZTIc=Module["__ZTIc"]=32416;var __ZTIa=Module["__ZTIa"]=32520;var __ZTIs=Module["__ZTIs"]=32572;var __ZTIt=Module["__ZTIt"]=32624;var __ZTIj=Module["__ZTIj"]=32728;var __ZTIl=Module["__ZTIl"]=32780;var __ZTIx=Module["__ZTIx"]=32884;var __ZTIy=Module["__ZTIy"]=32936;var __ZTId=Module["__ZTId"]=33200;var __ZTINSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE=Module["__ZTINSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE"]=26388;var __ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=26460;var __ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=26536;var __ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=26612;var __ZTIN10emscripten11memory_viewIcEE=Module["__ZTIN10emscripten11memory_viewIcEE"]=26652;var __ZTIN10emscripten11memory_viewIaEE=Module["__ZTIN10emscripten11memory_viewIaEE"]=26692;var __ZTIN10emscripten11memory_viewIhEE=Module["__ZTIN10emscripten11memory_viewIhEE"]=26732;var __ZTIN10emscripten11memory_viewIsEE=Module["__ZTIN10emscripten11memory_viewIsEE"]=26772;var __ZTIN10emscripten11memory_viewItEE=Module["__ZTIN10emscripten11memory_viewItEE"]=26812;var __ZTIN10emscripten11memory_viewIiEE=Module["__ZTIN10emscripten11memory_viewIiEE"]=26852;var __ZTIN10emscripten11memory_viewIjEE=Module["__ZTIN10emscripten11memory_viewIjEE"]=26892;var __ZTIN10emscripten11memory_viewIlEE=Module["__ZTIN10emscripten11memory_viewIlEE"]=26932;var __ZTIN10emscripten11memory_viewImEE=Module["__ZTIN10emscripten11memory_viewImEE"]=26972;var __ZTIN10emscripten11memory_viewIxEE=Module["__ZTIN10emscripten11memory_viewIxEE"]=27012;var __ZTIN10emscripten11memory_viewIyEE=Module["__ZTIN10emscripten11memory_viewIyEE"]=27052;var __ZTIN10emscripten11memory_viewIfEE=Module["__ZTIN10emscripten11memory_viewIfEE"]=27092;var __ZTIN10emscripten11memory_viewIdEE=Module["__ZTIN10emscripten11memory_viewIdEE"]=27132;var __ZTSNSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE=Module["__ZTSNSt3__212basic_stringIhNS_11char_traitsIhEENS_9allocatorIhEEEE"]=26325;var __ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=26396;var __ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=26468;var __ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=26544;var __ZTSN10emscripten11memory_viewIcEE=Module["__ZTSN10emscripten11memory_viewIcEE"]=26620;var __ZTSN10emscripten11memory_viewIaEE=Module["__ZTSN10emscripten11memory_viewIaEE"]=26660;var __ZTSN10emscripten11memory_viewIhEE=Module["__ZTSN10emscripten11memory_viewIhEE"]=26700;var __ZTSN10emscripten11memory_viewIsEE=Module["__ZTSN10emscripten11memory_viewIsEE"]=26740;var __ZTSN10emscripten11memory_viewItEE=Module["__ZTSN10emscripten11memory_viewItEE"]=26780;var __ZTSN10emscripten11memory_viewIiEE=Module["__ZTSN10emscripten11memory_viewIiEE"]=26820;var __ZTSN10emscripten11memory_viewIjEE=Module["__ZTSN10emscripten11memory_viewIjEE"]=26860;var __ZTSN10emscripten11memory_viewIlEE=Module["__ZTSN10emscripten11memory_viewIlEE"]=26900;var __ZTSN10emscripten11memory_viewImEE=Module["__ZTSN10emscripten11memory_viewImEE"]=26940;var __ZTSN10emscripten11memory_viewIxEE=Module["__ZTSN10emscripten11memory_viewIxEE"]=26980;var __ZTSN10emscripten11memory_viewIyEE=Module["__ZTSN10emscripten11memory_viewIyEE"]=27020;var __ZTSN10emscripten11memory_viewIfEE=Module["__ZTSN10emscripten11memory_viewIfEE"]=27060;var __ZTSN10emscripten11memory_viewIdEE=Module["__ZTSN10emscripten11memory_viewIdEE"]=27100;var _stderr=Module["_stderr"]=30848;var _stdout=Module["_stdout"]=27140;var __ZNSt3__26__itoa7__tableIvE10__pow10_32E=Module["__ZNSt3__26__itoa7__tableIvE10__pow10_32E"]=31360;var __ZNSt3__26__itoa7__tableIvE16__digits_base_10E=Module["__ZNSt3__26__itoa7__tableIvE16__digits_base_10E"]=31408;var __ZSt7nothrow=Module["__ZSt7nothrow"]=27632;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=34212;var __ZTVSt9exception=Module["__ZTVSt9exception"]=34048;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=34232;var __ZNSt3__26__itoa7__tableIvE10__pow10_64E=Module["__ZNSt3__26__itoa7__tableIvE10__pow10_64E"]=31616;var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE=Module["__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4nposE"]=31324;var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE=Module["__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE4nposE"]=31328;var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=48700;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=48696;var ___cxa_new_handler=Module["___cxa_new_handler"]=51552;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=31812;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=31860;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=31908;var __ZTIDn=Module["__ZTIDn"]=32256;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=31956;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=32008;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=32068;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=31776;var __ZTISt9type_info=Module["__ZTISt9type_info"]=34748;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=31824;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=31872;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=31920;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=31968;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=32020;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=32092;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=32120;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=32188;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=32148;var __ZTSv=Module["__ZTSv"]=32200;var __ZTSPv=Module["__ZTSPv"]=32212;var __ZTIPv=Module["__ZTIPv"]=32216;var __ZTSPKv=Module["__ZTSPKv"]=32232;var __ZTIPKv=Module["__ZTIPKv"]=32236;var __ZTSDn=Module["__ZTSDn"]=32252;var __ZTSPDn=Module["__ZTSPDn"]=32264;var __ZTIPDn=Module["__ZTIPDn"]=32268;var __ZTSPKDn=Module["__ZTSPKDn"]=32284;var __ZTIPKDn=Module["__ZTIPKDn"]=32292;var __ZTSb=Module["__ZTSb"]=32308;var __ZTSPb=Module["__ZTSPb"]=32320;var __ZTIPb=Module["__ZTIPb"]=32324;var __ZTSPKb=Module["__ZTSPKb"]=32340;var __ZTIPKb=Module["__ZTIPKb"]=32344;var __ZTSw=Module["__ZTSw"]=32360;var __ZTIw=Module["__ZTIw"]=32364;var __ZTSPw=Module["__ZTSPw"]=32372;var __ZTIPw=Module["__ZTIPw"]=32376;var __ZTSPKw=Module["__ZTSPKw"]=32392;var __ZTIPKw=Module["__ZTIPKw"]=32396;var __ZTSc=Module["__ZTSc"]=32412;var __ZTSPc=Module["__ZTSPc"]=32424;var __ZTIPc=Module["__ZTIPc"]=32428;var __ZTSPKc=Module["__ZTSPKc"]=32444;var __ZTIPKc=Module["__ZTIPKc"]=32448;var __ZTSh=Module["__ZTSh"]=32464;var __ZTSPh=Module["__ZTSPh"]=32476;var __ZTIPh=Module["__ZTIPh"]=32480;var __ZTSPKh=Module["__ZTSPKh"]=32496;var __ZTIPKh=Module["__ZTIPKh"]=32500;var __ZTSa=Module["__ZTSa"]=32516;var __ZTSPa=Module["__ZTSPa"]=32528;var __ZTIPa=Module["__ZTIPa"]=32532;var __ZTSPKa=Module["__ZTSPKa"]=32548;var __ZTIPKa=Module["__ZTIPKa"]=32552;var __ZTSs=Module["__ZTSs"]=32568;var __ZTSPs=Module["__ZTSPs"]=32580;var __ZTIPs=Module["__ZTIPs"]=32584;var __ZTSPKs=Module["__ZTSPKs"]=32600;var __ZTIPKs=Module["__ZTIPKs"]=32604;var __ZTSt=Module["__ZTSt"]=32620;var __ZTSPt=Module["__ZTSPt"]=32632;var __ZTIPt=Module["__ZTIPt"]=32636;var __ZTSPKt=Module["__ZTSPKt"]=32652;var __ZTIPKt=Module["__ZTIPKt"]=32656;var __ZTSi=Module["__ZTSi"]=32672;var __ZTSPi=Module["__ZTSPi"]=32684;var __ZTIPi=Module["__ZTIPi"]=32688;var __ZTSPKi=Module["__ZTSPKi"]=32704;var __ZTIPKi=Module["__ZTIPKi"]=32708;var __ZTSj=Module["__ZTSj"]=32724;var __ZTSPj=Module["__ZTSPj"]=32736;var __ZTIPj=Module["__ZTIPj"]=32740;var __ZTSPKj=Module["__ZTSPKj"]=32756;var __ZTIPKj=Module["__ZTIPKj"]=32760;var __ZTSl=Module["__ZTSl"]=32776;var __ZTSPl=Module["__ZTSPl"]=32788;var __ZTIPl=Module["__ZTIPl"]=32792;var __ZTSPKl=Module["__ZTSPKl"]=32808;var __ZTIPKl=Module["__ZTIPKl"]=32812;var __ZTSm=Module["__ZTSm"]=32828;var __ZTSPm=Module["__ZTSPm"]=32840;var __ZTIPm=Module["__ZTIPm"]=32844;var __ZTSPKm=Module["__ZTSPKm"]=32860;var __ZTIPKm=Module["__ZTIPKm"]=32864;var __ZTSx=Module["__ZTSx"]=32880;var __ZTSPx=Module["__ZTSPx"]=32892;var __ZTIPx=Module["__ZTIPx"]=32896;var __ZTSPKx=Module["__ZTSPKx"]=32912;var __ZTIPKx=Module["__ZTIPKx"]=32916;var __ZTSy=Module["__ZTSy"]=32932;var __ZTSPy=Module["__ZTSPy"]=32944;var __ZTIPy=Module["__ZTIPy"]=32948;var __ZTSPKy=Module["__ZTSPKy"]=32964;var __ZTIPKy=Module["__ZTIPKy"]=32968;var __ZTSn=Module["__ZTSn"]=32984;var __ZTIn=Module["__ZTIn"]=32988;var __ZTSPn=Module["__ZTSPn"]=32996;var __ZTIPn=Module["__ZTIPn"]=33e3;var __ZTSPKn=Module["__ZTSPKn"]=33016;var __ZTIPKn=Module["__ZTIPKn"]=33020;var __ZTSo=Module["__ZTSo"]=33036;var __ZTIo=Module["__ZTIo"]=33040;var __ZTSPo=Module["__ZTSPo"]=33048;var __ZTIPo=Module["__ZTIPo"]=33052;var __ZTSPKo=Module["__ZTSPKo"]=33068;var __ZTIPKo=Module["__ZTIPKo"]=33072;var __ZTSDh=Module["__ZTSDh"]=33088;var __ZTIDh=Module["__ZTIDh"]=33092;var __ZTSPDh=Module["__ZTSPDh"]=33100;var __ZTIPDh=Module["__ZTIPDh"]=33104;var __ZTSPKDh=Module["__ZTSPKDh"]=33120;var __ZTIPKDh=Module["__ZTIPKDh"]=33128;var __ZTSf=Module["__ZTSf"]=33144;var __ZTSPf=Module["__ZTSPf"]=33156;var __ZTIPf=Module["__ZTIPf"]=33160;var __ZTSPKf=Module["__ZTSPKf"]=33176;var __ZTIPKf=Module["__ZTIPKf"]=33180;var __ZTSd=Module["__ZTSd"]=33196;var __ZTSPd=Module["__ZTSPd"]=33208;var __ZTIPd=Module["__ZTIPd"]=33212;var __ZTSPKd=Module["__ZTSPKd"]=33228;var __ZTIPKd=Module["__ZTIPKd"]=33232;var __ZTSe=Module["__ZTSe"]=33248;var __ZTIe=Module["__ZTIe"]=33252;var __ZTSPe=Module["__ZTSPe"]=33260;var __ZTIPe=Module["__ZTIPe"]=33264;var __ZTSPKe=Module["__ZTSPKe"]=33280;var __ZTIPKe=Module["__ZTIPKe"]=33284;var __ZTSg=Module["__ZTSg"]=33300;var __ZTIg=Module["__ZTIg"]=33304;var __ZTSPg=Module["__ZTSPg"]=33312;var __ZTIPg=Module["__ZTIPg"]=33316;var __ZTSPKg=Module["__ZTSPKg"]=33332;var __ZTIPKg=Module["__ZTIPKg"]=33336;var __ZTSDu=Module["__ZTSDu"]=33352;var __ZTIDu=Module["__ZTIDu"]=33356;var __ZTSPDu=Module["__ZTSPDu"]=33364;var __ZTIPDu=Module["__ZTIPDu"]=33368;var __ZTSPKDu=Module["__ZTSPKDu"]=33384;var __ZTIPKDu=Module["__ZTIPKDu"]=33392;var __ZTSDs=Module["__ZTSDs"]=33408;var __ZTIDs=Module["__ZTIDs"]=33412;var __ZTSPDs=Module["__ZTSPDs"]=33420;var __ZTIPDs=Module["__ZTIPDs"]=33424;var __ZTSPKDs=Module["__ZTSPKDs"]=33440;var __ZTIPKDs=Module["__ZTIPKDs"]=33448;var __ZTSDi=Module["__ZTSDi"]=33464;var __ZTIDi=Module["__ZTIDi"]=33468;var __ZTSPDi=Module["__ZTSPDi"]=33476;var __ZTIPDi=Module["__ZTIPDi"]=33480;var __ZTSPKDi=Module["__ZTSPKDi"]=33496;var __ZTIPKDi=Module["__ZTIPKDi"]=33504;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=33520;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=33584;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=33548;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=33596;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=33624;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=33688;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=33652;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=33820;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=33780;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=33912;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=33872;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=33924;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=33980;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=34008;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=34028;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=34160;var __ZTISt9exception=Module["__ZTISt9exception"]=34084;var __ZTSSt9exception=Module["__ZTSSt9exception"]=34068;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=34092;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=34132;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=34112;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=34144;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=34172;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=34308;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=34548;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=34252;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=34320;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=34272;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=34289;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=34332;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=34376;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=34352;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=34408;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=34460;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=34492;var __ZTISt11range_error=Module["__ZTISt11range_error"]=34560;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=34512;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=34528;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=34572;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=34612;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=34592;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=34624;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=34664;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=34644;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=34676;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=34696;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=34768;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=34796;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=34716;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=34732;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=34756;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=34780;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); diff --git a/.vuepress/public/en/config/failsafe/index.wasm b/.vuepress/public/en/config/failsafe/index.wasm index f29f383eb07ae..8a3df49c02009 100755 Binary files a/.vuepress/public/en/config/failsafe/index.wasm and b/.vuepress/public/en/config/failsafe/index.wasm differ diff --git a/.vuepress/public/en/config/failsafe/parameters.json b/.vuepress/public/en/config/failsafe/parameters.json index 7fc38f25bd0ef..2bfaeb4dc73db 100644 --- a/.vuepress/public/en/config/failsafe/parameters.json +++ b/.vuepress/public/en/config/failsafe/parameters.json @@ -6855,7 +6855,7 @@ "index": 0 }, { - "description": "use optical flow", + "description": "unused", "index": 1 }, { @@ -6871,7 +6871,7 @@ "index": 4 }, { - "description": "multi-rotor drag fusion", + "description": "unused", "index": 5 }, { @@ -6890,12 +6890,12 @@ "category": "Standard", "default": 0, "group": "EKF2", - "longDesc": "Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead", + "longDesc": "Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead", "max": 511, "min": 0, "name": "EKF2_AID_MASK", "rebootRequired": true, - "shortDesc": "Integer bitmask controlling data fusion and aiding methods", + "shortDesc": "Will be removed after v1.14 release", "type": "Int32" }, { @@ -6916,7 +6916,7 @@ "decimalPlaces": 1, "default": 0.0, "group": "EKF2", - "longDesc": "A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.", + "longDesc": "A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.", "min": 0.0, "name": "EKF2_ARSP_THR", "shortDesc": "Airspeed fusion threshold", @@ -6965,7 +6965,7 @@ "category": "Standard", "default": 1, "group": "EKF2", - "longDesc": "If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).", + "longDesc": "If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).", "name": "EKF2_BARO_CTRL", "shortDesc": "Barometric sensor height aiding", "type": "Int32", @@ -7022,7 +7022,7 @@ "decimalPlaces": 1, "default": 100.0, "group": "EKF2", - "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", + "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_X", @@ -7035,7 +7035,7 @@ "decimalPlaces": 1, "default": 100.0, "group": "EKF2", - "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", + "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_Y", @@ -7093,6 +7093,25 @@ "shortDesc": "Integer bitmask controlling handling of magnetic declination", "type": "Int32" }, + { + "category": "Standard", + "default": 0, + "group": "EKF2", + "longDesc": "Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.", + "name": "EKF2_DRAG_CTRL", + "shortDesc": "Multirotor wind estimation selection", + "type": "Int32", + "values": [ + { + "description": "Disabled", + "value": 0 + }, + { + "description": "Enabled", + "value": 1 + } + ] + }, { "category": "Standard", "decimalPlaces": 2, @@ -7781,7 +7800,7 @@ "category": "Standard", "default": 0, "group": "EKF2", - "longDesc": "Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.", + "longDesc": "Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).", "name": "EKF2_MAG_TYPE", "rebootRequired": true, "shortDesc": "Type of magnetometer fusion", @@ -7816,7 +7835,7 @@ { "category": "Standard", "decimalPlaces": 2, - "default": 0.25, + "default": 0.2, "group": "EKF2", "longDesc": "This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.", "max": 1.0, @@ -7831,7 +7850,7 @@ "decimalPlaces": 2, "default": 0.15, "group": "EKF2", - "longDesc": "This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.", + "longDesc": "This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.", "max": 1.0, "min": 0.0, "name": "EKF2_MCOEF", @@ -7898,6 +7917,25 @@ "type": "Int32", "units": "us" }, + { + "category": "Standard", + "default": 0, + "group": "EKF2", + "longDesc": "Enable optical flow fusion.", + "name": "EKF2_OF_CTRL", + "shortDesc": "Optical flow aiding", + "type": "Int32", + "values": [ + { + "description": "Disabled", + "value": 0 + }, + { + "description": "Enabled", + "value": 1 + } + ] + }, { "category": "Standard", "decimalPlaces": 1, @@ -8157,7 +8195,7 @@ "category": "Standard", "default": 5.0, "group": "EKF2", - "longDesc": "If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", + "longDesc": "If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", "max": 10.0, "min": 1.0, "name": "EKF2_RNG_A_HMAX", @@ -8181,7 +8219,7 @@ "category": "Standard", "default": 1.0, "group": "EKF2", - "longDesc": "If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", + "longDesc": "If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", "max": 2.0, "min": 0.1, "name": "EKF2_RNG_A_VMAX", @@ -8193,7 +8231,7 @@ "category": "Standard", "default": 1, "group": "EKF2", - "longDesc": "WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in \"conditional\" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.", + "longDesc": "WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in \"conditional\" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.", "name": "EKF2_RNG_CTRL", "shortDesc": "Range sensor height aiding", "type": "Int32", @@ -9894,6 +9932,32 @@ "type": "Float", "units": "deg" }, + { + "category": "Standard", + "decimalPlaces": 2, + "default": 0.0, + "group": "FW TECS", + "increment": 0.01, + "longDesc": "Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.", + "max": 1.0, + "min": 0.0, + "name": "FW_THR_ASPD_MAX", + "shortDesc": "Throttle at max airspeed", + "type": "Float" + }, + { + "category": "Standard", + "decimalPlaces": 2, + "default": 0.0, + "group": "FW TECS", + "increment": 0.01, + "longDesc": "Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.", + "max": 1.0, + "min": 0.0, + "name": "FW_THR_ASPD_MIN", + "shortDesc": "Throttle at min airspeed", + "type": "Float" + }, { "category": "Standard", "decimalPlaces": 2, @@ -10043,7 +10107,7 @@ { "category": "Standard", "decimalPlaces": 2, - "default": 0.3, + "default": 0.1, "group": "FW TECS", "increment": 0.05, "longDesc": "This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.", @@ -10556,7 +10620,7 @@ "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial. Auto-detection will probe all protocols, and thus is a bit slower.", - "max": 5, + "max": 7, "min": 0, "name": "GPS_1_PROTOCOL", "rebootRequired": true, @@ -10590,6 +10654,10 @@ { "description": "NMEA (generic)", "value": 6 + }, + { + "description": "Septentrio (SBF)", + "value": 7 } ] }, @@ -10632,7 +10700,7 @@ "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial. Auto-detection will probe all protocols, and thus is a bit slower.", - "max": 5, + "max": 6, "min": 0, "name": "GPS_2_PROTOCOL", "rebootRequired": true, @@ -10694,6 +10762,20 @@ } ] }, + { + "category": "Standard", + "decimalPlaces": 3, + "default": 0.0, + "group": "GPS", + "longDesc": "Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the \"roll\" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.", + "max": 90.0, + "min": -90.0, + "name": "GPS_PITCH_OFFSET", + "rebootRequired": true, + "shortDesc": "Pitch offset for dual antenna GPS", + "type": "Float", + "units": "deg" + }, { "category": "Standard", "default": 0, @@ -10837,10 +10919,10 @@ }, { "category": "Standard", - "decimalPlaces": 0, + "decimalPlaces": 3, "default": 0.0, "group": "GPS", - "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.", + "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).", "max": 360.0, "min": 0.0, "name": "GPS_YAW_OFFSET", @@ -11214,7 +11296,20 @@ "default": 0.0, "group": "Geometry", "increment": 0.1, - "longDesc": "This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch", + "longDesc": "This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0\u00b0 collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)", + "max": 2.0, + "min": -2.0, + "name": "CA_HELI_YAW_CP_O", + "shortDesc": "Offset for yaw compensation based on collective pitch", + "type": "Float" + }, + { + "category": "Standard", + "decimalPlaces": 3, + "default": 0.0, + "group": "Geometry", + "increment": 0.1, + "longDesc": "This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_CP_S", @@ -16646,36 +16741,6 @@ } ] }, - { - "category": "System", - "default": 0, - "group": "Micro XRCE-DDS", - "longDesc": "XRCE DDS domain ID", - "name": "XRCE_DDS_DOM_ID", - "rebootRequired": true, - "shortDesc": "XRCE DDS domain ID", - "type": "Int32" - }, - { - "category": "System", - "default": 1, - "group": "Micro XRCE-DDS", - "longDesc": "XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.", - "name": "XRCE_DDS_KEY", - "rebootRequired": true, - "shortDesc": "XRCE DDS key", - "type": "Int32" - }, - { - "category": "Standard", - "default": 8888, - "group": "Micro XRCE-DDS", - "longDesc": "If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.", - "name": "XRCE_DDS_UDP_PRT", - "rebootRequired": true, - "shortDesc": "Micro DDS UDP Port", - "type": "Int32" - }, { "category": "Standard", "default": 30, @@ -16708,25 +16773,11 @@ "default": 900.0, "group": "Mission", "increment": 100.0, - "longDesc": "Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.", + "longDesc": "Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.", "max": 10000.0, - "min": 0.0, + "min": -1.0, "name": "MIS_DIST_1WP", - "shortDesc": "Maximal horizontal distance from home to first waypoint", - "type": "Float", - "units": "m" - }, - { - "category": "Standard", - "decimalPlaces": 1, - "default": 900.0, - "group": "Mission", - "increment": 100.0, - "longDesc": "Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.", - "max": 10000.0, - "min": 0.0, - "name": "MIS_DIST_WPS", - "shortDesc": "Maximal horizontal distance between waypoint", + "shortDesc": "Maximal horizontal distance from current position to first waypoint", "type": "Float", "units": "m" }, @@ -17014,25 +17065,36 @@ "category": "Standard", "default": 500.0, "group": "Mission", - "longDesc": "Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation", + "longDesc": "Defines a crosstrack horizontal distance", "min": 500.0, - "name": "NAV_TRAFF_A_RADM", - "shortDesc": "Set NAV TRAFFIC AVOID RADIUS MANNED", + "name": "NAV_TRAFF_A_HOR", + "shortDesc": "Set NAV TRAFFIC AVOID horizontal distance", "type": "Float", "units": "m" }, { "category": "Standard", - "default": 10.0, + "default": 500.0, "group": "Mission", - "longDesc": "Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation", "max": 500.0, "min": 10.0, - "name": "NAV_TRAFF_A_RADU", - "shortDesc": "Set NAV TRAFFIC AVOID RADIUS", + "name": "NAV_TRAFF_A_VER", + "shortDesc": "Set NAV TRAFFIC AVOID vertical distance", "type": "Float", "units": "m" }, + { + "category": "Standard", + "default": 60, + "group": "Mission", + "longDesc": "Minimum acceptable time until collsion. Assumes constant speed over 3d distance.", + "max": 900000000, + "min": 1, + "name": "NAV_TRAFF_COLL_T", + "shortDesc": "Estimated time until collision", + "type": "Int32", + "units": "s" + }, { "category": "Standard", "decimalPlaces": 1, @@ -17331,30 +17393,6 @@ } ] }, - { - "category": "Standard", - "decimalPlaces": 3, - "default": 0.0, - "group": "Mount", - "longDesc": "if required for the gimbal (only in AUX output mode)", - "max": 1.0, - "min": -1.0, - "name": "MNT_OB_LOCK_MODE", - "shortDesc": "Mixer value for selecting a locking mode", - "type": "Float" - }, - { - "category": "Standard", - "decimalPlaces": 3, - "default": -1.0, - "group": "Mount", - "longDesc": "if required by the gimbal (only in AUX output mode)", - "max": 1.0, - "min": -1.0, - "name": "MNT_OB_NORM_MODE", - "shortDesc": "Mixer value for selecting normal mode", - "type": "Float" - }, { "category": "Standard", "decimalPlaces": 1, @@ -17839,6 +17877,18 @@ "type": "Float", "units": "m/s" }, + { + "category": "Standard", + "decimalPlaces": 1, + "default": 1000.0, + "group": "Multicopter Position Control", + "longDesc": "When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.", + "min": 0.0, + "name": "MPC_LAND_RADIUS", + "shortDesc": "User assisted landing radius", + "type": "Float", + "units": "m" + }, { "category": "Standard", "default": 0, @@ -18788,6 +18838,17 @@ "shortDesc": "Yaw rate integrator limit", "type": "Float" }, + { + "category": "Standard", + "default": 0, + "group": "OSD", + "longDesc": "Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon", + "max": 8, + "min": -8, + "name": "OSD_CH_HEIGHT", + "shortDesc": "OSD Crosshairs Height", + "type": "Int32" + }, { "category": "Standard", "default": 500, @@ -18894,7 +18955,7 @@ "index": 17 }, { - "description": "(unused) CROSSHAIRS", + "description": "CROSSHAIRS", "index": 18 }, { @@ -25339,6 +25400,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO0_OFF", @@ -25395,6 +25457,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO1_OFF", @@ -25451,6 +25514,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO2_OFF", @@ -25507,6 +25571,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO3_OFF", @@ -25782,6 +25847,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_XOFF", @@ -25792,6 +25858,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_YOFF", @@ -25802,6 +25869,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_ZOFF", @@ -26040,6 +26108,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_XOFF", @@ -26050,6 +26119,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_YOFF", @@ -26060,6 +26130,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_ZOFF", @@ -26298,6 +26369,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_XOFF", @@ -26308,6 +26380,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_YOFF", @@ -26318,6 +26391,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_ZOFF", @@ -26556,6 +26630,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_XOFF", @@ -26566,6 +26641,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_YOFF", @@ -26576,6 +26652,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_ZOFF", @@ -26814,6 +26891,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between X component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -26824,6 +26902,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XODIAG", @@ -26833,6 +26912,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XOFF", @@ -26843,6 +26923,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -26854,6 +26935,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Y component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -26864,6 +26946,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YODIAG", @@ -26873,6 +26956,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YOFF", @@ -26883,6 +26967,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -26894,6 +26979,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Z component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -26913,6 +26999,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_ZOFF", @@ -26923,6 +27010,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27162,6 +27250,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between X component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27172,6 +27261,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XODIAG", @@ -27181,6 +27271,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XOFF", @@ -27191,6 +27282,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27202,6 +27294,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Y component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27212,6 +27305,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YODIAG", @@ -27221,6 +27315,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YOFF", @@ -27231,6 +27326,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27242,6 +27338,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Z component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27261,6 +27358,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_ZOFF", @@ -27271,6 +27369,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27510,6 +27609,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between X component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27520,6 +27620,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XODIAG", @@ -27529,6 +27630,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XOFF", @@ -27539,6 +27641,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27550,6 +27653,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Y component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27560,6 +27664,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YODIAG", @@ -27569,6 +27674,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YOFF", @@ -27579,6 +27685,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27590,6 +27697,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Z component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27609,6 +27717,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_ZOFF", @@ -27619,6 +27728,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27858,6 +27968,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between X component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27868,6 +27979,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XODIAG", @@ -27877,6 +27989,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XOFF", @@ -27887,6 +28000,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27898,6 +28012,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Y component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27908,6 +28023,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YODIAG", @@ -27917,6 +28033,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YOFF", @@ -27927,6 +28044,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -27938,6 +28056,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between Z component of magnetometer in body frame axis and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA]", @@ -27957,6 +28076,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_ZOFF", @@ -27967,6 +28087,7 @@ }, { "category": "System", + "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, @@ -31426,6 +31547,48 @@ } ] }, + { + "category": "Standard", + "default": 2130706433, + "group": "UXRCE-DDS Client", + "longDesc": "If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.", + "name": "UXRCE_DDS_AG_IP", + "rebootRequired": true, + "shortDesc": "uXRCE-DDS Agent IP address", + "type": "Int32" + }, + { + "category": "System", + "default": 0, + "group": "UXRCE-DDS Client", + "longDesc": "uXRCE-DDS domain ID", + "name": "UXRCE_DDS_DOM_ID", + "rebootRequired": true, + "shortDesc": "uXRCE-DDS domain ID", + "type": "Int32" + }, + { + "category": "System", + "default": 1, + "group": "UXRCE-DDS Client", + "longDesc": "uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.", + "name": "UXRCE_DDS_KEY", + "rebootRequired": true, + "shortDesc": "uXRCE-DDS Session key", + "type": "Int32" + }, + { + "category": "Standard", + "default": 8888, + "group": "UXRCE-DDS Client", + "longDesc": "If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.", + "max": 65535, + "min": 0, + "name": "UXRCE_DDS_PRT", + "rebootRequired": true, + "shortDesc": "uXRCE-DDS UDP Port", + "type": "Int32" + }, { "category": "Standard", "decimalPlaces": 2, @@ -31497,14 +31660,14 @@ { "category": "Standard", "decimalPlaces": 2, - "default": 4.0, + "default": 10.0, "group": "VTOL Attitude Control", "increment": 1.0, - "longDesc": "Time in seconds used for a back transition", + "longDesc": "Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.", "max": 20.0, "min": 0.1, "name": "VT_B_TRANS_DUR", - "shortDesc": "Duration of a back transition", + "shortDesc": "Maximum duration of a back transition", "type": "Float", "units": "s" }, @@ -31520,19 +31683,6 @@ "type": "Float", "units": "s" }, - { - "category": "Standard", - "decimalPlaces": 2, - "default": 0.0, - "group": "VTOL Attitude Control", - "increment": 0.01, - "longDesc": "standard vtol: pusher tailsitter, tiltrotor: main throttle", - "max": 1.0, - "min": -1.0, - "name": "VT_B_TRANS_THR", - "shortDesc": "Target throttle value for the transition to hover flight", - "type": "Float" - }, { "category": "Standard", "default": 1, @@ -31672,11 +31822,11 @@ "default": 0.0, "group": "VTOL Attitude Control", "increment": 1.0, - "longDesc": "Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL", + "longDesc": "Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.", "max": 200.0, "min": 0.0, "name": "VT_FW_MIN_ALT", - "shortDesc": "QuadChute Altitude", + "shortDesc": "Quad-chute altitude", "type": "Float", "units": "m" }, @@ -31685,7 +31835,7 @@ "default": 0, "group": "VTOL Attitude Control", "increment": 1, - "longDesc": "Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.", + "longDesc": "Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.", "min": 0, "name": "VT_FW_QC_HMAX", "shortDesc": "Quad-chute maximum height", @@ -31740,7 +31890,7 @@ "max": 1.0, "min": 0.0, "name": "VT_F_TRANS_THR", - "shortDesc": "Target throttle value for the transition to fixed wing flight", + "shortDesc": "Target throttle value for the transition to fixed-wing flight", "type": "Float" }, { @@ -31753,7 +31903,7 @@ "max": 30.0, "min": 1.0, "name": "VT_F_TR_OL_TM", - "shortDesc": "Airspeed less front transition time (open loop)", + "shortDesc": "Airspeed-less front transition time (open loop)", "type": "Float", "units": "s" }, @@ -31815,7 +31965,7 @@ { "category": "Standard", "decimalPlaces": 1, - "default": 10.0, + "default": 20.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.", @@ -32002,5 +32152,40 @@ ] } ], + "translation": { + "items": { + "parameters": { + "list": { + "items": { + "bitmask": { + "list": { + "key": "index", + "translate": [ + "description" + ] + } + }, + "values": { + "list": { + "key": "value", + "translate": [ + "description" + ] + } + } + }, + "key": "name", + "translate": [ + "shortDesc", + "longDesc" + ], + "translate-global": [ + "category", + "group" + ] + } + } + } + }, "version": 1 } \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_full.json b/.vuepress/public/en/middleware/graph_full.json index b4eb25301ec53..3436c893e8003 100644 --- a/.vuepress/public/en/middleware/graph_full.json +++ b/.vuepress/public/en/middleware/graph_full.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_fw_path_navigation", "name": "fw_path_navigation", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_spektrum_rc", "name": "spektrum_rc", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_modal_io", "name": "modal_io", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d84178", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d89441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4173d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#8bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#68d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#d8419b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#6141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#4181d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#9241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41d87a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#41d8c7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#6841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d8cc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#4cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#41d873", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d88641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#add841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#99d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d89d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d841a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d87141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#53d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#41b2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#8441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#9f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#a6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#5ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41d86d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41b9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#c941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d86a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#41d8b9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#41ced8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d8a241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#c9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#7dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#61d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#417ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#c241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_1", "name": "actuator_controls_1", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d8d241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d8c0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41a4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#415fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d841d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#7641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#bb41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d8416a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#d88d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#6fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41d85f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41c7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#416dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#4c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#76d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#45d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d896", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#41d8ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#418fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d841cc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d8c541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#bbd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#92d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d881", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41c0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#4158d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#4541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#5341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#8b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d841c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d86341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d89b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41d858", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#ad41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#d8415c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d85c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d8b741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#41d851", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d8a4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#9941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uwb_distance", "name": "uwb_distance", "type": "topic", "color": "#d84194", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d84186", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#9fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#41d8ab", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#41abd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#419dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#4196d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#5a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d841b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#d84171", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#c2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#84d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d8b2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#4151d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#7d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d84163", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#6f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#d041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#d8418d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d87841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#a641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#41d88f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_led_control", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#7641d8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#7d41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d8a4", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41d858", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41c0d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d8b2", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#45d841", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d881", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#84d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d8b741", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#84d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#8441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41d858", "style": "dashed"}, {"source": "m_modal_io", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d89b41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41d858", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#41d8b2", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#45d841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#d84171", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_landing_target_pose", "color": "#41d866", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_uwb_distance", "color": "#d84194", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#bb41d8", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#41a4d8", "style": "dashed"}, {"source": "m_spektrum_rc", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#41d88f", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#41d88f", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41c0d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d89d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#d84e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#6141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d8b2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#9fd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#6f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#41d8ce", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d87141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41d8d5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d87841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41c7d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#8bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41b2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d89441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d89b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#9f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d8a941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#41a4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#68d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#c241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_actuator_controls_0", "color": "#61d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d8b041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#4cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#45d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d841cc", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d841be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d841b0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d866", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#d8419b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41d86d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#41d87a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d84163", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41d888", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d8414e", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d87841", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#41ced8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d841d2", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#4158d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#add841", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#d8415c", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d86341", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d841c5", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#414ad8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_0", "color": "#61d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d8cc41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#7dd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d8416a", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841be", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_1", "color": "#d84147", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d866", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#41d843", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_actuator_controls_0", "color": "#61d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#9241d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841be", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#8b41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d841a9", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#a6d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#d84141", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#4181d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#8bd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_actuator_controls_2", "color": "#b4d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#4166d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d85c41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d841a2", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84155", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#414ad8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d85c41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#c241d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d8a241", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d8416a", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d87141", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#d041d8", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841be", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4173d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841be", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d8c541", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#d841b0", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#41d85f", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#416dd8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#9f41d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#41d851", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#4196d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#419dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#418fd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#b4d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41b9d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#41d8c7", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d86341", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#b441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d841c5", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#5341d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41a4d8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#415fd8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_actuator_controls_0", "color": "#61d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d87141", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88641", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d7d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d87141", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d8414e", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#6841d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#9f41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#a641d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#6fd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#5ad841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#53d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#416dd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d841b0", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41d85f", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d8414e", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d8d241", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d87141", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41b9d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d87f41", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#41d8b9", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#41d8b2", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#4143d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d84178", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d0d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d8417f", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d84163", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#41d84a", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d89d", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41b2d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d88d41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d89b41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#4188d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d0d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#c9d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#c2d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#4143d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d84178", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#d8417f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#41d88f", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#4151d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#41d89d", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#41d8ab", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#bbd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#4143d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d84178", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#d8417f", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#d85541", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d84186", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#4c41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#ad41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d0d841", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#92d841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d896", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#d8418d", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_launch_detection_status", "color": "#41d5d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_vehicle_local_position_setpoint", "color": "#4173d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_status", "color": "#9241d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_landing_status", "color": "#d741d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_flaps_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_orbit_status", "color": "#9941d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_tecs_status", "color": "#41abd8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_spoilers_setpoint", "color": "#d8416a", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_landing_gear", "color": "#d85c41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d84741", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d86a41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#41d873", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d841b7", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#c941d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d8be41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d8c0", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d84163", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#76d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#6fd841", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#417ad8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#5a41d8", "style": "dashed"}, {"source": "t_input_rc", "target": "m_tests", "color": "#4188d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#4c41d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#4158d8", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#d88d41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#9f41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#41d8ab", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#417ad8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#76d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina226", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina228", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina220", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_voxlpm", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina238", "color": "#61d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#bbd841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#41d8b2", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#ad41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d84186", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_linux_pwm_out", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d841a2", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d8a4", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_px4io", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d85c41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d896", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#d84171", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#45d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#92d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#84d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d896", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#4196d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_uavcan", "color": "#b4d841", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#4cd841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#45d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d85c41", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#41d851", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_modal_io", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_modal_io", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_modal_io", "color": "#41ced8", "style": "normal"}, {"source": "t_led_control", "target": "m_modal_io", "color": "#4196d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_modal_io", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_modal_io", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_modal_io", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_modal_io", "color": "#b4d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_modal_io", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_modal_io", "color": "#d8d241", "style": "normal"}, {"source": "t_landing_gear", "target": "m_modal_io", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_modal_io", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pca9685_pwm_out", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d86a41", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#7d41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#d841a2", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#4196d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_tap_esc", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#d85c41", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#41d851", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#d86a41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#bbd841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#41d851", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#41d8b2", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#d8414e", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#41d85f", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#9f41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#415fd8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d86341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#9f41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#92d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#4196d8", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#4196d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#4196d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#4196d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#92d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#4151d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d84163", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d86341", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d8414e", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#41d8b2", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#41a4d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d8414e", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#84d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_dshot", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#9f41d8", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#d84171", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#d84e41", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d85541", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d86341", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d87141", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d87841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d87f41", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d8b041", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d0d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#c2d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#bbd841", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_mavlink", "color": "#b4d841", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#a6d841", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#9fd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#92d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#8bd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#6fd841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mavlink", "color": "#61d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#5ad841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#45d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#41d843", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d84a", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41d85f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d881", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41d888", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41d896", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d8b2", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#41d8b9", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#41d8c0", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#41d8c7", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#41d8ce", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#41ced8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41c0d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41b9d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#41abd8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#41a4d8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#4181d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#4188d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#418fd8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#417ad8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#4173d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#416dd8", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#415fd8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#4158d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#4151d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#4143d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#4c41d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#5341d8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#5a41d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#6841d8", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#7641d8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#8441d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#8b41d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#9941d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#9f41d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#a641d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#b441d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#c941d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#d041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d841b0", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d841a9", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#d84178", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d8417f", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d84163", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_controls_1", "target": "m_mavlink", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d896", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#41d8ab", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d84741", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d8b2", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d8c0", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#6841d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#7d41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d86341", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#92d841", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d87841", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41c7d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41b9d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#7dd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#9f41d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#a641d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#b441d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#6fd841", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#bb41d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#418fd8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#c941d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#d041d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#417ad8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d8b741", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d8be41", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#5341d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#53d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#5ad841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d841d2", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#415fd8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#41d843", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d84a", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#c2d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d841c5", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41d858", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d841b0", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#4151d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d841a2", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41d85f", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41d86d", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#bbd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d84186", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84155", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#41d8c0", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#d88d41", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#6fd841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#41d8ab", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d841c5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d841a2", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#68d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d896", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d8419b", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4173d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#415fd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#41d8c7", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#41abd8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d86341", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d84155", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#d841c5", "style": "normal"}, {"source": "t_uwb_distance", "target": "m_landing_target_estimator", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#9f41d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d89b41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d896", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#41d8ab", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d85541", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d84186", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#d841b0", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#c241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#41d8c7", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#d841b0", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41c0d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d8414e", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#8bd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#419dd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d841a2", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#8bd841", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#6141d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#41d87a", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#41b9d8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d89441", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#41d8c7", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d841c5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mc_autotune_attitude_control", "color": "#61d841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d841c5", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#9f41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#d86341", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#c2d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#41ced8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#41d873", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#41b9d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#415fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d87141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#41ced8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#c241d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d8414e", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#c241d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d896", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41d89d", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#bbd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#41b2d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#41d84a", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#76d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d896", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#d041d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#4158d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d896", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d866", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d741d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#9f41d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41a4d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#a641d8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#6f41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d86341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d841c5", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41d85f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#41b9d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#7dd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#9f41d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#6841d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d84163", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d87141", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#84d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_status", "color": "#61d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#41ced8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#41d873", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d87141", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41d89d", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#9f41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#76d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d896", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#76d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d89d", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d8be41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41b9d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#415fd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d84163", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d84a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#6fd841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#9f41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#415fd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#4151d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_esc_battery", "color": "#61d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#41d5d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#c241d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#41ced8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#bbd841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d8c0", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#9f41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#415fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#6fd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d87f41", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d8a941", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#4188d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#41d843", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#41d8ab", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d84186", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out_sim", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84178", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d84178", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#4c41d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#41d8b9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d896", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#41d8b9", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#4c41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#d841a2", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#d84741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#bbd841", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_gz_bridge", "color": "#b4d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d8d241", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#ad41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#d85c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#d841c5", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_simulator", "color": "#61d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_path_navigation", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_path_navigation", "color": "#41d896", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_path_navigation", "color": "#c241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_path_navigation", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_path_navigation", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_path_navigation", "color": "#41b9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_path_navigation", "color": "#9f41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_path_navigation", "color": "#415fd8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_path_navigation", "color": "#a641d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_path_navigation", "color": "#41d8c7", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_path_navigation", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_path_navigation", "color": "#d8414e", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d8cc41", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#4541d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d88641", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d8416a", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#add841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#99d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#41ced8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#6fd841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#c941d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#41d8ab", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#84d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#5ad841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d84186", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d8c0", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#41d843", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#c9d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#c2d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d896", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d841a2", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d841cc", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d841c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#92d841", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_modal_io", "name": "modal_io", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#41c7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#41d8ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#7941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d8415d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d85d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#d87241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#8741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41ced8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#d5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#80d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#41d89c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#d84180", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#c7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#64d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#41d84f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d8c741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#48d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d848", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#5d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#ced841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#416bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#4f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d86441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d86b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#a3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#4fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#41d85d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41d8c0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d841d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#d8b141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#95d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#41aad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#4195d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#aa41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d8d541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41d895", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#41a3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#419cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d84172", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8aa41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#9c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d841ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#9cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d84195", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d8416b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#41d856", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#41d8a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41d8b1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d84156", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d88041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#d88741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#4164d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d841c0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#d841aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d84164", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d8c7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41b1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#8041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#c741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#ce41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#87d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#79d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d864", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d86b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#4156d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#a341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d8418e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d8c041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#414fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#6441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#6b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#9541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d841a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84187", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41c0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#41b8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#d841b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d8a341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8b841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d8ce41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uwb_distance", "name": "uwb_distance", "type": "topic", "color": "#41d8aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#415dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d88e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d89541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#aad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#8ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#72d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#4148d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#8e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d841c7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#6bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#4841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#d84179", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#41d8b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#7241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d85641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#d841b1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d87941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#5dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_led_control", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#d88741", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#41d8b8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41c0d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d8a341", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#6441d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d8418e", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#4841d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d8c041", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#d84179", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#d84179", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#56d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#d8b141", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41c0d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#c0d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41c0d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#4841d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#d8418e", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#8e41d8", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_landing_target_pose", "color": "#41d88e", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_uwb_distance", "color": "#41d8aa", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#d841aa", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#41d8b1", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#5dd841", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#5dd841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#6441d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#41ced8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#87d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#80d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#7241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d85641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d85d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d87941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#a341d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#41aad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#c741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41d848", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d841d5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d88e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d841c7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#d841b8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d84195", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#95d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d8418e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#d84180", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d88e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d84172", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#41d8b1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#4141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#c0d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#4841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#b1d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#4f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d8414f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#5d41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d8c7", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d87941", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#9541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d84156", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d841a3", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d86441", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#5641d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d841ce", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#41b8d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d87241", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#ced841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#b141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d848", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d841c0", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#414fd8", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d88e", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d88041", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#64d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d848", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d8419c", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41ced8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#41a3d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#c7d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#418ed8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#4164d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#41d887", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#4156d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d86b41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84187", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d8ce41", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d87241", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d84195", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d8416b", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d8ce41", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#95d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d841c0", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#414fd8", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#d84841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d848", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#4187d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#8741d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d848", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#41aad8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#8041d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#41b1d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#8ed841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41d8b1", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#b841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d841a3", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#48d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#5641d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41d895", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#79d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d84164", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d89c41", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#41d856", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#95d841", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#95d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#41d84f", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#64d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#d8415d", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#414fd8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#4148d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#8741d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#415dd8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#d8ce41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#d841c0", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#41d85d", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#4141d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#8041d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41b1d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#41aad8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#4195d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#4172d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d8c741", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d8d541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#4141d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#41d8d5", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d84f41", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#95d841", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41d895", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41d8c0", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#9c41d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#4841d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#41d864", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41c7d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#7241d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#7941d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#41d89c", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#41d8ce", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41c7d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#7941d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#6bd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#5dd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#aa41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#ce41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d841d5", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#41d872", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#41d89c", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#c0d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#9cd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#41d8ce", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41c7d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d8b841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#7941d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#41d5d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#aad841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d541d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#41d89c", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#d841d5", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#41d8ce", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#d84148", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#6b41d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#d84141", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#d841b1", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d86b", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#b8d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8aa41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#416bd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#72d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#419cd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#7241d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#c041d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#4180d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#41d8a3", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#41d8d5", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d841", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d89541", "style": "dashed"}, {"source": "t_input_rc", "target": "m_tests", "color": "#41d872", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#41d5d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#9541d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#ce41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#41d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina226", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina228", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina220", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_voxlpm", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina238", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#d841a3", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#d541d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#4841d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#6b41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d8b841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d8ce41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d841a3", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#4156d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#6b41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d86b41", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d8a341", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#8e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d86b", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d8418e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d841a3", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#4141d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#d84179", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d8aa41", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#8ed841", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d86b", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#41d879", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d84f41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d8418e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#b8d841", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#4f41d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_modal_io", "color": "#d8aa41", "style": "normal"}, {"source": "t_led_control", "target": "m_modal_io", "color": "#8ed841", "style": "normal"}, {"source": "t_gripper", "target": "m_modal_io", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_modal_io", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_modal_io", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_modal_io", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_modal_io", "color": "#d541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_modal_io", "color": "#d841ce", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_modal_io", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_modal_io", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_modal_io", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_modal_io", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#6b41d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#d8aa41", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#8ed841", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d86b", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#41d879", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#6b41d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#41d879", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#41aad8", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d84141", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41d872", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#a3d841", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#5641d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#41b1d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#41aad8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#d841a3", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#8ed841", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#8ed841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#8ed841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#8ed841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#41aad8", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#a3d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#d84141", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#7241d8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#5641d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#41d895", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#41d8b1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#d841a3", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#4141d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#d84179", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#6b41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#41aad8", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#8e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d86b", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#d84841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d86b41", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#d87241", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d87941", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d88041", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#d88741", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d88e41", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d89c41", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d89541", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#d8b141", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d8c041", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d8c741", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#d8d541", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#c7d841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#a3d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#95d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#87d841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#79d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#72d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#6bd841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#64d841", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#5dd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41d848", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#41d856", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d864", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41d86b", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d872", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#41d880", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d88e", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#41d887", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#41d89c", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#41d8b1", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#41d8c0", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#41d8ce", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#41d8d5", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#41c7d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#41b8d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41b1d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#41aad8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#41a3d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#419cd8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#418ed8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#4179d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#4172d8", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#4164d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#415dd8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#4841d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#5641d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#6441d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#6b41d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#7241d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#7941d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#8041d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#8741d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#9c41d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#9541d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#c041d8", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d841ce", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d841c7", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#d841b8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d841a3", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d8419c", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d8418e", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d84164", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#d84841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41c0d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#79d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41b1d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d86b41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#6bd841", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d87941", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#41aad8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#56d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#b141d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#419cd8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#c041d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#4195d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d88041", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#4179d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#4172d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d89c41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#41d856", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d864", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d841a3", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8b841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84187", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41d895", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d8c741", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d8d541", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d84172", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#41d8a3", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d84164", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d84156", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#4841d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#b8d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#41d8d5", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#a3d841", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#5641d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41d8c0", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d8c7", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d84148", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#6b41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#c041d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#ce41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#41d8d5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d841a3", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#80d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#8741d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#41aad8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d841ce", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d841a3", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d84187", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#41d895", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d5d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#4141d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#5641d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#4141d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#c0d841", "style": "normal"}, {"source": "t_uwb_distance", "target": "m_landing_target_estimator", "color": "#41d8aa", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d86b", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8b841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#4141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#d84195", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#a3d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d848", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d841ce", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41ced8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#a3d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#4141d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#4141d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#48d841", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#d84180", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d85d41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#a3d841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#5d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d86b41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41d8c0", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#4fd841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#41d84f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d841a3", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d848", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d841ce", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#6bd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d841a3", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d841a3", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#416bd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#41d895", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#95d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#41aad8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#d84195", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d8416b", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d84195", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d841ce", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#41d864", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#aa41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d841d5", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#6b41d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#9541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d86b", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d841a3", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#64d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d8415d", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d86b", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41d8b1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d841a3", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d85641", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#a3d841", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#5641d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d841a3", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#b141d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#7241d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d8c741", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#41d895", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41b1d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#95d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d848", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d841ce", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#d87241", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d848", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d86b41", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#d84179", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_status", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d841a3", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#95d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#416bd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d841ce", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d86b41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#41d86b", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#d84195", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#d841a3", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#a3d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#41d895", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#d86b41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#41d856", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#aa41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d841d5", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#4180d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d864", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#72d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#7241d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#41d8a3", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d841d5", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#41d856", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#41d8d5", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#d87241", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#41d895", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d86b41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_esc_battery", "color": "#41d880", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d841a3", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d84195", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#c041d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#41d85d", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#41d880", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d841ce", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#41d8d5", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#6b41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41d8c0", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d8414f", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d872", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d88041", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8b841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d841a3", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#6b41d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41d8ce", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#7941d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#41d8ce", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#41d89c", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#41d8ce", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#7941d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#4141d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#9c41d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#41d5d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#9c41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#d841a3", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#41d8ce", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d8aa41", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d86b", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#b8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d541d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#4156d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#d8ce41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#d86b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#6b41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_simulator", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d86b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d86b", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#ced841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#4fd841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#41d880", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d86441", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41d8c0", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d841c0", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#414fd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8b841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#419cd8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#c041d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d88041", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#d84179", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#9cd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#72d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d8d541", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d841ce", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#6bd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#41d8d5", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d86b", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d841a3", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d86b41", "style": "normal"}]} \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_full_no_mavlink.json b/.vuepress/public/en/middleware/graph_full_no_mavlink.json index 33f5e5ef05e08..b5ced00be4152 100644 --- a/.vuepress/public/en/middleware/graph_full_no_mavlink.json +++ b/.vuepress/public/en/middleware/graph_full_no_mavlink.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_fw_path_navigation", "name": "fw_path_navigation", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_spektrum_rc", "name": "spektrum_rc", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_modal_io", "name": "modal_io", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d88b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#4144d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#41bcd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#88d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41d885", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#41d8b3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d8418b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d85341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#41d8aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#41d8cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41cfd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#415fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d841b9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d84194", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d86f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d8c6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#417bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#d8419d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#a441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d84178", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d8b941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8d541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#6c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#9ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#47d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#41d844", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d897", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#41c6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#4185d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d841d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d89d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d8c341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#b6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#add841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#6cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#8841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#a4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#91d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d84d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#41b3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#c9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#41d869", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#9a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d85c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d856", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41aad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#b641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#c941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d841a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d86641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d87841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d89441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d87b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#4156d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#9141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d841cc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d8415c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d84153", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#bfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d8416f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d8cc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#41d85f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41d8bc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uwb_distance", "name": "uwb_distance", "type": "topic", "color": "#4197d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d8a741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#7ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#414dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#4741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d8414a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#ad41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d841c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#bf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#4169d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d84166", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d84a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#7e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_led_control", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#bf41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d2d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#bfd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d84153", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d841c3", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d841a7", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#ad41d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#ad41d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#41d8bc", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#bfd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d8416f", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#bfd841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#d841c3", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#d841a7", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#7ed841", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_landing_target_pose", "color": "#d841d5", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_uwb_distance", "color": "#4197d8", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#41b3d8", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#d8c341", "style": "dashed"}, {"source": "m_spektrum_rc", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d84153", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#8841d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d84a41", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#5041d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d841b9", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d86641", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d87841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#6c41d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41bcd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d85341", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d8415c", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#a4d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_0", "color": "#4185d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d897", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d841d5", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#91d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_actuator_controls_0", "color": "#4185d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d8418b", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41d885", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_gimbal", "target": "t_actuator_controls_2", "color": "#9ad841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d841cc", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d84194", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d841b0", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41bcd8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#41c6d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d841b0", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d241d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d8415c", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#a4d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#417bd8", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#75d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#9141d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#88d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#5941d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#d86f41", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#6341d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d8cc41", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d8a741", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d85c41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#a441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#5041d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d84d", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#414dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#9ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#4156d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d8b041", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d87841", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d8c341", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#6cd841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_actuator_controls_0", "color": "#4185d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#417bd8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#41a1d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#417bd8", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#c9d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d86f41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#41d869", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#5941d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#6341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#c9d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#41d8a1", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d84178", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d8c6", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#7e41d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d89d41", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#417bd8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#a441d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#59d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d8b941", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#d841c3", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d84166", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8b3", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#4144d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#c941d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#41d844", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#4144d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d8419d", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8b3", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#7541d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d8416f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41d8d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41cfd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#4169d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#d84141", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#9a41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8b3", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d88241", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#d89441", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#4172d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#4144d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#63d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#41d85f", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#41cfd8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#41d87b", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#50d841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d856", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_vehicle_local_position_setpoint", "color": "#88d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_tecs_status", "color": "#4741d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_landing_status", "color": "#d88b41", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_launch_detection_status", "color": "#41d8aa", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_landing_gear", "color": "#d841b0", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_flaps_setpoint", "color": "#d8415c", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_spoilers_setpoint", "color": "#a4d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_status", "color": "#d8418b", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8d541", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d84182", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#b641d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#41d872", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#b6d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d84166", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#add841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41aad8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d8414a", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#41d869", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#47d841", "style": "dashed"}, {"source": "t_input_rc", "target": "m_tests", "color": "#4169d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#9a41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#d86f41", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#d86641", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#47d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#41aad8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina226", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina228", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina220", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_voxlpm", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina238", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#d841c3", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#41d85f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_linux_pwm_out", "color": "#9ad841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d8d541", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d2d841", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#b641d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_px4io", "color": "#9ad841", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#7ed841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d856", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d841a7", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#c9d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d87841", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#ad41d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d8cc41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d89441", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d841a7", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_uavcan", "color": "#9ad841", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d8a741", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_modal_io", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_modal_io", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_modal_io", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_modal_io", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_modal_io", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_modal_io", "color": "#d84194", "style": "normal"}, {"source": "t_led_control", "target": "m_modal_io", "color": "#d8a741", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_modal_io", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_modal_io", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_modal_io", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_modal_io", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_modal_io", "color": "#6c41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pca9685_pwm_out", "color": "#9ad841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#bf41d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#d8cc41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#d84194", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#d8a741", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_tap_esc", "color": "#9ad841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d89441", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d8cc41", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#d841c3", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#c9d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41d87b", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#5041d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d87841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#6cd841", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#d86f41", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#d87841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d8a741", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#d8a741", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#d8a741", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d8a741", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d87841", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d87b", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#5041d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d84166", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#c9d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#a441d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#d8c341", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#d841c3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#c9d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d87b", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#ad41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out", "color": "#9ad841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_dshot", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d856", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#7ed841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#59d841", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d84a41", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d85c41", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#47d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d84d", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d87841", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#4156d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#41d85f", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#41d869", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d841cc", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#41d872", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d87b", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d841c3", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#5041d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d89441", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#6341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d84194", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d897", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#b6d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#41d8a1", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#add841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#7541d8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41d8bc", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d84178", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d8c6", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#7e41d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#91d841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#8841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#a441d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#75d841", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#41b3d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#b641d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#4172d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#6cd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#c941d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#63d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#b6d841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#41d8d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#41d869", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d87841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d841cc", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#88d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#4741d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#c9d841", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#6cd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#d8b041", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d86f41", "style": "normal"}, {"source": "t_uwb_distance", "target": "m_landing_target_estimator", "color": "#4197d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d8416f", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d856", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#41d85f", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#c9d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d86f41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#d8b041", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#d241d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d84153", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#6341d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41d885", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#a441d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41d885", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d856", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#414dd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#d8b041", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#59d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#41a1d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84194", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mc_autotune_attitude_control", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d87841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#9141d8", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#6c41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#7541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d87841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d84182", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#a441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#417bd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#d241d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#a441d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d241d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#41c6d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#a441d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#d8419d", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d856", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d841d5", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#c941d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41cfd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d87b", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d86641", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#a441d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#5041d8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d88b41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d87841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d841d5", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#7e41d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d8418b", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d8c341", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#a441d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#41d8a1", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d84166", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d87841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#41d897", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#c9d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#417bd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#c9d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#41bcd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#ad41d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_status", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d87841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d84182", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#a441d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d87b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#417bd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#c9d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#d8419d", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41cfd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#a441d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#add841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d856", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d841d5", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d87841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#6cd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#c941d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d8414a", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41cfd8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#c9d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#41bcd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#a441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#6c41d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#63d841", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_esc_battery", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d87841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#9141d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#b6d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d241d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#41d8aa", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d89441", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d86f41", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#6c41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#41d869", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#59d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#4169d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#91d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#41d85f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out_sim", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#4144d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#4144d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d8b941", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#9a41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#41d87b", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#d8b941", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d8d541", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d88241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#d89441", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#d84194", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d89d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#b641d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_gz_bridge", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d856", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_simulator", "color": "#4185d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_path_navigation", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_path_navigation", "color": "#a441d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_path_navigation", "color": "#d241d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_path_navigation", "color": "#d86f41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_path_navigation", "color": "#6341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_path_navigation", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_path_navigation", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_path_navigation", "color": "#d87841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_path_navigation", "color": "#6cd841", "style": "normal"}, {"source": "t_wind", "target": "m_fw_path_navigation", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_path_navigation", "color": "#6c41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_path_navigation", "color": "#d8b041", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d85341", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#59d841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d841b9", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#415fd8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d8415c", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#a4d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#41d8cf", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d87841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d84141", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#41d872", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#91d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#b6d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#41d85f", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#7541d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#41d844", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#ad41d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d84178", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d8414a", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#41d869", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d87b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d87841", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_modal_io", "name": "modal_io", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#a241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d8a841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#73d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#4147d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#8fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#419bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d841b1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#69d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#8f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#85d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d84153", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#bed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#44d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d863", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41d4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#6941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#c7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d8ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d8419e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d841d7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#41d85a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#41d8a5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d8418c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d89541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#a2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#41d8b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#41a5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#4163d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d84179", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d85341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d87941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d88c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d8d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d8416f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d86641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d892", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#4441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d841a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#4192d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#be41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d8d741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41d876", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41b7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#7341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d8415d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41cad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d84195", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d86f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d847", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uwb_distance", "name": "uwb_distance", "type": "topic", "color": "#4176d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#8541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d89e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#7cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#41d89b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d84166", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d8414a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d8b141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d8c1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41c1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#415ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#c741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d85d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#7c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d84a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_led_control", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#c741d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#b441d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#d85d41", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d847", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41d876", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d841bb", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d8b141", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#d85d41", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#41d8c1", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d88241", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41d8c1", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#b441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_modal_io", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#d85d41", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d84195", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#b441d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#d8b141", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#d841bb", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#9841d8", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_landing_target_pose", "color": "#d84179", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_uwb_distance", "color": "#4176d8", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#60d841", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#d87941", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#d85d41", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41d876", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d84a41", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d8c441", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#abd841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#41d85a", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#98d841", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d88c41", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d863", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4147d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#41d86c", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#a2d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d0d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d87f", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#44d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d86641", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#85d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d0d841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#44d841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d84179", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#4188d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#d0d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d841b1", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d87f", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#44d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#be41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#8fd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d8d741", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41d4d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#8541d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4147d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#41d8b7", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d89541", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#8541d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8ca", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d86641", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#41d86c", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#41d850", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d87f", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#7341d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4d41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d87f", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#d84141", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#c7d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#bed841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d86f41", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#7cd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#8f41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d8c441", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#4192d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d8ae", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#417fd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#bed841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#98d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#b4d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d8414a", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d87941", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#4150d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d0d841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#44d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8ca", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#419bd8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8ca", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4d41d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#41d86c", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#56d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#d841b1", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#6941d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#d86641", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#8541d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#d8a841", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d841a8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d84141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d841d7", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#69d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d841a8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d8419e", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#416cd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#4441d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#c7d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#bed841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8ca", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d85341", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#417fd8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d84182", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d8418c", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#d8b141", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#73d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#a241d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d041d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#ab41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#a241d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#d85d41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#ab41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#41a5d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#73d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d841cd", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#4dd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d84195", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#415ad8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#6041d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#73d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#a241d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#d84166", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d8cd41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#41c1d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#4dd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#41cad8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#d8415d", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#41d892", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#d89e41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#ab41d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#7c41d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d888", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#41d8a5", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d84153", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d841c4", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#4441d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d8416f", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41aed8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#41d89b", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d8d4", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d041d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d8bb41", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#4163d8", "style": "dashed"}, {"source": "t_input_rc", "target": "m_tests", "color": "#d85d41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#41d892", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#d89e41", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#c7d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#4163d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#41aed8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina226", "color": "#44d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina228", "color": "#44d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina220", "color": "#44d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_voxlpm", "color": "#44d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina238", "color": "#44d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#d8415d", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#41cad8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#d8b141", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d8cd41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#41d8a5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d888", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#98d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#41d8a5", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d888", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d841bb", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#d841a8", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d8c1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41d4d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d841bb", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#7cd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d8415d", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d86f41", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#41d8a5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_modal_io", "color": "#41d4d8", "style": "normal"}, {"source": "t_led_control", "target": "m_modal_io", "color": "#7cd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_modal_io", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_modal_io", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_modal_io", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_modal_io", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_modal_io", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_modal_io", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_modal_io", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_modal_io", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_modal_io", "color": "#41d8a5", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_modal_io", "color": "#41d85a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#41d8a5", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#c741d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#41d4d8", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#7cd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d888", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#d86f41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#41d8a5", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d8415d", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d86f41", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#d8b141", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#d84141", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#d841a8", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#d85d41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#bed841", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#98d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#c7d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#7cd841", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#7cd841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#7cd841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#7cd841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#7cd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#bed841", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#98d841", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d8c441", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41c1d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41b7d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d041d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#d8b141", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#417fd8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#d87941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#98d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#41d8c1", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41b7d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#41d8a5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#41d8a5", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d888", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d84a41", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#a2d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d8d4", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d88241", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41d4d8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#b441d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41c1d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d88c41", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41b7d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#c741d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d841d7", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d89e41", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d8b141", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d8bb41", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#69d841", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#60d841", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d8c441", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#4188d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#4192d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8cd41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#417fd8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d8d741", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#41d850", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d8419e", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d84182", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#4163d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#415ad8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#4150d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#4441d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#5641d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d8416f", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#bed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d8415d", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#b4d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d841c4", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#d89e41", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#d841cd", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#98d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#8f41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#56d841", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#417fd8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d8d741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4d41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#c7d841", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d84195", "style": "normal"}, {"source": "t_uwb_distance", "target": "m_landing_target_estimator", "color": "#4176d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d89e41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8cd41", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d888", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#8f41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#bed841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#d89541", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#8fd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d841a8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41d876", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41d4d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#8f41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#8fd841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d8414a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#98d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d84182", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#419bd8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#98d841", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#c7d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#7341d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#415ad8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d84153", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#41d85a", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#d89541", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#41d8b7", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d89541", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#41d85a", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d84179", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#6041d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d8415d", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#41aed8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41b7d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#41d850", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d84179", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d8c441", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d841b1", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#bed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#98d841", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#416cd8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d8a841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d87941", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#d84141", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#69d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#a2d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#98d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d041d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#98d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d8c1", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_status", "color": "#44d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d84153", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#41d85a", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#4150d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#8f41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#bed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#98d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#d89541", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#6041d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#41aed8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d84179", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#4441d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#5641d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41aed8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d041d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#41d89b", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#4150d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#4150d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_esc_battery", "color": "#44d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41c1d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#4150d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#44d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#6941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#98d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d8415d", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d89541", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#7341d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d8d4", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d85d41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d84182", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8cd41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d89e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#41d8a5", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#73d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#ab41d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#73d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#d841a8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#41d892", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d8418c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#41b7d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#41d892", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#d8418c", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#a241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#41d4d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d85341", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#d8415d", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#7c41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#41d8a5", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_simulator", "color": "#44d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d888", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#44d841", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d86641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#98d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d84182", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#85d841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d863", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#4441d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#4188d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8cd41", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d8c1", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#41d89b", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d8d4", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d841d7", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d89e41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#415ad8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#41a5d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#41d85a", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d8bb41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#98d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41b7d8", "style": "normal"}]} \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_px4_fmu-v2.json b/.vuepress/public/en/middleware/graph_px4_fmu-v2.json index 74a916f67a7d1..203449d75a964 100644 --- a/.vuepress/public/en/middleware/graph_px4_fmu-v2.json +++ b/.vuepress/public/en/middleware/graph_px4_fmu-v2.json @@ -1 +1 @@ -{"nodes": [{"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#a241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d84b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#6c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#8241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d8ad41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d85641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#add841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41d8a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41b8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d84161", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#c341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41d856", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#9741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d84197", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8418c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#d8b841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#61d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#41a2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4161d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d8a241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#82d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#6cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d8414b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d86141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#4bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#418cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#4182d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#4156d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d841c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d84177", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d87741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#77d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d877", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41d8c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#cd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#d841b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d897", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#41c3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4197d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#7741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#ad41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d841ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d84156", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#a2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41d8ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#6141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d8416c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d89741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d8c341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#4b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#c3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#97d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#41d882", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#41d8b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#41add8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d841a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d86c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d88c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#4177d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#cdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d861", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d88c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_board_adc", "target": "t_adc_report", "color": "#8c41d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d8c341", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d8cd41", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d88c", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#cd41d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d84156", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#d89741", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#c3d841", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#c3d841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#d84182", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#d89741", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#d84182", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#4182d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#77d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d84141", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#41d8ad", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#414bd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#41d8b8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#4182d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#41d8cd", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#d8d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#56d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#77d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#41d8d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d84141", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d8416c", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#41d8ad", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#41d8d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#7741d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4197d8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#41d8b8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#a2d841", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#82d841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d861", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d8cd", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d84197", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#41d8d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d84141", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#41c3d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d8d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d85641", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#6141d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41d8ad", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d8ad41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#77d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8418c", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#6c41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#8cd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#41cdd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d88c41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#4bd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#c341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#416cd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#d841cd", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d841c3", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d84177", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4161d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#41a2d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#4b41d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41d856", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d8cd", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d841a2", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d8d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#ad41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41d8a2", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#4b41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#b8d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#add841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#97d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#8cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d8cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#7741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#8241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d84b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d86c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d87741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#9741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#56d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#4bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d89741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#41a2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41d84b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#b841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d8a241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#418cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d861", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#4177d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#416cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#cd41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#4156d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_actuator_controls_0", "color": "#d8b841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#d841b8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#4141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#41d882", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d88c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#d84182", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d8d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#5641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#cdd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#c3d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#8241d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#a241d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d841ad", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d86c", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#d84161", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4197d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d86141", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d877", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d8a241", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41d856", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d8cd", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#61d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d88241", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d897", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d8d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#6141d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41b8d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#41add8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#6cd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41d8c3", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#9741d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#4177d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d841c3", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d8414b", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#41d8d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#8c41d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#cd41d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out", "color": "#61d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8418c", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#4b41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#77d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#41d8ad", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#4197d8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#414bd8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_px4io", "color": "#61d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#4b41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d8418c", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#77d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#d8d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#41d8ad", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#41d8d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#8c41d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_status", "color": "#d8b841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#4197d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#8cd841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#82d841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d8cd", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#7741d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#77d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#41cdd8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41b8d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d86141", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#6cd841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#9741d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d88c41", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#ad41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#4bd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d89741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4197d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#418cd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41d856", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#416cd8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#c341d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d841d8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d8416c", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d841c3", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d877", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d8c341", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d88c", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d8cd41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d84182", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d897", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41d8a2", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d8d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#5641d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#6141d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#c3d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d8414b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4197d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41b8d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#41d86c", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d85641", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d84161", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4197d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#add841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#41add8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41d856", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41d8c3", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#4177d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d8d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d841c3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4197d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d84197", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#8241d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d8d841", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#6141d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4197d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d84197", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#416cd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d841c3", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#d8b841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#41a2d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d8414b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4197d8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d87741", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#7741d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4197d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41b8d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d84b41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d86141", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d86c41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#d88241", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d88c41", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d8a241", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mavlink", "color": "#d8b841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d8cd41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d8d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#b8d841", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#a2d841", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#97d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#8cd841", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_mavlink", "color": "#61d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#56d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#4bd841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41d84b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41d856", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d861", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d84156", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d877", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#41d882", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d88c", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d897", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d8cd", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#41cdd8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#41c3d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#41b8d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#41add8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4197d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#4182d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#4177d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#416cd8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#5641d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#6141d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#6c41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#8241d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#9741d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#a241d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#b841d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#d841cd", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d841c3", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#d841b8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d84197", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#d84182", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#d8414b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4197d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d84197", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#8241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#4bd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d84197", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4161d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#41a2d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4197d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d84197", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#7741d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d8ad41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4197d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#b8d841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41d856", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#416cd8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d88c41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d8d841", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#6141d8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#cdd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41b8d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#56d841", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#4156d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#41add8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#4141d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#9741d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d84197", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d84182", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#41cdd8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#8c41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d841c3", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d89741", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#c3d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d8414b", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d841d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#76d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#417dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d84c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d8d441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#ba41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#c541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d841c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#53d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#41d844", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#5f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#41d8c1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#c5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#bad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#a3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#5fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d8b241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d8c941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#afd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#41d889", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d841b2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d84185", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#415bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#5341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#8141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d87941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d89041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84179", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d8414c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d8a741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#48d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41abd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#a341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#af41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d88541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#41d8ab", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#4189d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d84163", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d86341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#81d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#41c1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d841a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4144d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#7641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d84190", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d87d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#41d85b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_board_adc", "target": "t_adc_report", "color": "#41d866", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d88541", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#8cd841", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#7641d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#8141d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#4194d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#81d841", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#81d841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#41d8ab", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#4144d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4144d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#a341d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#afd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#415bd8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d141d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#4189d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#c5d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#4172d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#d84190", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#afd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d8a741", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d86341", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d141d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d8416e", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#415bd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#a341d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d8416e", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d87941", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#c5d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#41b6d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d87d", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41abd8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#a341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#4172d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d89041", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d850", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#41cdd8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#af41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d86341", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d8416e", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d8414c", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d141d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#41d8c1", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#8c41d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#415bd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d841c9", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#41d85b", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d8b241", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d8be41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d8c941", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d8d441", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d84185", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#41d889", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d1d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#98d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d84163", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4841d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#bad841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#53d841", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#c5d841", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#41c1d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d84163", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d84c41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#4172d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84179", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#76d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#48d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#419fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#ba41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d841d4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#41d844", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d87941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d841c9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#4172d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d841b2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#4150d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41d872", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4144d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d8c941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d87d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#5f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d8d441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#d84190", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#6a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#7641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#8141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#41d89f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d8416e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#41d8ab", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#c5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#bad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#41d8b6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d8cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#a3d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#9841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d84157", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#8cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#81d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#76d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d841be", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41d894", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#c5d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#417dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#5341d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41abd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#4172d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#6ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#4166d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d8d441", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#53d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#9841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d8414c", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d8419c", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#41d844", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#5fd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d84185", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d89c41", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#419fd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d86e41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d841a7", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d8416e", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d866", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#8141d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d86341", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d84163", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#4172d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d84c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#41d8c1", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d141d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#415bd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#a341d8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#4189d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d84163", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#4172d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d84c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#41d8c1", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d8414c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d141d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d8416e", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d8414c", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41abd8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#6ad841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d84c41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#5fd841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#53d841", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d86e41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d141d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#41d844", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d88541", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#4172d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d87941", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#4166d8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d8a741", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#41d85b", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d8b241", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#415bd8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#4150d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d8419c", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4144d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d8c941", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d8be41", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#5341d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d87d", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d8d441", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#5f41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d84185", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84179", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#7641d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d1d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#41d8ab", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#c5d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#81d841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d8414c", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#8cd841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d850", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d8419c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#4172d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d85741", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d8cd", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d84185", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#53d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#419fd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d841a7", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#ba41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#41b6d8", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#76d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d841c9", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#bad841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#5fd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d8414c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d141d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d87941", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#4172d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d84c41", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d8414c", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d8419c", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d84c41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d85741", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d87941", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d89041", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#d8b241", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d8be41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d8c941", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d8d441", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#c5d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#afd841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#76d841", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#5fd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#53d841", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#48d841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#41d844", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#41d85b", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41d872", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d87d", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#41d889", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d8cd", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#41c1d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#41b6d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41abd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#419fd8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#4194d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#417dd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#4172d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4144d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#5341d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#6a41d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#7641d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#8141d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#9841d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#af41d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#c541d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d141d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d841d4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d841a7", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d8419c", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#d84190", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d84185", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d8c941", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#76d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d84c41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d841c9", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#bad841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#41b6d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d87941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d84c41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#c541d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d8414c", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#4172d8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#41d8b6", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d8d441", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#53d841", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#41d85b", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d8414c", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d84190", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d841b2", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d8419c", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#41b6d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#41d844", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#5fd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d841a7", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4144d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#a3d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#41d8ab", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d866", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#81d841", "style": "normal"}]} \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_px4_fmu-v4.json b/.vuepress/public/en/middleware/graph_px4_fmu-v4.json index 36df1f50f532b..6c03a8bd31395 100644 --- a/.vuepress/public/en/middleware/graph_px4_fmu-v4.json +++ b/.vuepress/public/en/middleware/graph_px4_fmu-v4.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_path_navigation", "name": "fw_path_navigation", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#41d8a5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#ce41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d84191", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#416ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#41d8ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#d841af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#4ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41d8bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#d8cc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d8a741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d8d341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d841d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d8af41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#a2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#76d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d8c541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#9bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#7ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#419ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#6f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#9441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d84d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d841a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#4341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#8541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d84183", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#ced841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#43d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#41d896", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_actuator_controls_1", "name": "actuator_controls_1", "type": "topic", "color": "#4154d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#6841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#a241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d8416d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d86541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41d86a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#aa41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d841c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#d8a041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#6fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#41d845", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d86d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#41d854", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41d88f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#4163d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d841a0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d88341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#52d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#5241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d89141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d85b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d8ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41bbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41acd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#41a5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#4a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d84165", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#41d863", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#7641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d841cc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#68d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#418fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#c7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#aad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#85d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#415bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#414dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#7e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#94d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41c2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4145d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#9b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#41d89e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41d8c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#c741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#41cad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#4196d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#94d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#4171d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#94d841", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41bbd8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41bbd8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#d84841", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#d84841", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#d84841", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41d8d1", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#9b41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#6041d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#b8d841", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d84199", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d84148", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#41d8d1", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#41d89e", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d8d1", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#c741d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#5941d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#9b41d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41d8d1", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#9b41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#5941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#b1d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d84141", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#c0d841", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d8ac", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#4196d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d841c5", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d8b641", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d87b41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#7641d8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d84f41", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#9bd841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d841cc", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#ced841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#41d8d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#8c41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d86d41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#41d854", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d87441", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d8c541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d841a7", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#4163d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#4341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#c0d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#a2d841", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d85e41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#6841d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d641d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d84d", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d8ca", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_landing_gear", "color": "#d85e41", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_orbit_status", "color": "#418fd8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_flaps_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_spoilers_setpoint", "color": "#41d845", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_vehicle_local_position_setpoint", "color": "#d841af", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_launch_detection_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_landing_status", "color": "#d84191", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_tecs_status", "color": "#7e41d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_status", "color": "#d8a741", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#41d845", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d84d", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#7ed841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#419ed8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#d8bd41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d8d341", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_actuator_controls_2", "color": "#41d1d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#59d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d84157", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d8418a", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#d8a041", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#8541d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d8416d", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#41cad8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#8c41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#41d854", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#d8c541", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#4163d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d8414f", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d85e41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d8417b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41acd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#8c41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d84841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#b141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#60d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41c2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#b841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d84d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#c741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#41d863", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d89941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d8af41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#41d86a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#4196d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d8c541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#d8cc41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#4179d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#416ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#41d871", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#415bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d841a0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d84199", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#41d879", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d84183", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#5241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#d84174", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41d88f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_actuator_controls_0", "color": "#41d896", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#d8416d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#c0d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#b8d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d84165", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#d8415e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d8b4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41d8bb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d84157", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41d8c2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d84148", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d84d", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d8ca", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#b141d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#d841af", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d89141", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d84d", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#7ed841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d841d3", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#419ed8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41d86a", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#52d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d87b41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d841b6", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d85b", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#41d1d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#414dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#6fd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#8541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d841cc", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#9441d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_actuator_controls_0", "color": "#41d896", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#7ed841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#b141d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d8a741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#419ed8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d86541", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d84841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#4187d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d86d41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#8cd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#aa41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41d8c2", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#41d8d1", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#41d887", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d6d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#41a5d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#85d841", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#b8d841", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#4145d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#41b4d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#4ad841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d841bd", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d8a5", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d88a41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#c7d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#ce41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41d8c2", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d85741", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#d88341", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#4180d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#7ed841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_actuator_controls_0", "color": "#41d896", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#419ed8", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#b141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#41d845", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#43d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#a241d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_0", "color": "#41d896", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#7ed841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_1", "color": "#4154d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#76d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#b141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#419ed8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#c041d8", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#aad841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#68d841", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#b8d841", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#8c41d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#41d89e", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d85e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#d88341", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_dshot", "color": "#41d1d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#c041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d6d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#ced841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#41a5d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d84199", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d88a41", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#aad841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#aad841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d85e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#d88341", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pca9685_pwm_out", "color": "#41d1d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#c041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d6d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#ced841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#41a5d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina226", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d87b41", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d85e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d88341", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out", "color": "#41d1d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#c041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d6d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#ced841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#41a5d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#c0d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d84165", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#41a5d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#d84165", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d87b41", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#d84165", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#9b41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#d84165", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#41d8c2", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d841cc", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#68d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d85e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#d88341", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_uavcan", "color": "#41d1d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#c041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d6d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#ced841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d84199", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#41d879", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#aad841", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#68d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#41a5d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#8c41d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#43d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#c0d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#4163d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#8541d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#a2d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41d8c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#8c41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41d8b4", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_status", "color": "#41d896", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#c0d841", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41bbd8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#8c41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#9441d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#9b41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#85d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#6fd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d85741", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d86541", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#52d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#43d841", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d88341", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d86d41", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d85b", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d88a41", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41acd8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d841cc", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#41a5d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#4196d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d841c5", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d8c541", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#4171d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#4163d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d841a7", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d6d841", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d841a0", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4145d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#c7d841", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d84183", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d8417b", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#4341d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#41d89e", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#c0d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#b8d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d84165", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#8541d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#a2d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#9441d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#4a41d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#41d845", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#7ed841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#76d841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#419ed8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d86541", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d88341", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#4187d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#8cd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d8b4", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#8541d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41d8c2", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_esc_battery", "color": "#41d896", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#9b41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d87b41", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#d88341", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d84165", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#b141d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d84f41", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#d841cc", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d8417b", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d84f41", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_path_navigation", "color": "#8c41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_path_navigation", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_path_navigation", "color": "#d8417b", "style": "normal"}, {"source": "t_wind", "target": "m_fw_path_navigation", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_path_navigation", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_path_navigation", "color": "#d88341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_path_navigation", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_path_navigation", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_path_navigation", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_path_navigation", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_path_navigation", "color": "#d84f41", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_path_navigation", "color": "#41d880", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d8417b", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d84d", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#8541d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d84165", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d84f41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#d88341", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#d8cc41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#d841b6", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#416ad8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#414dd8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#8541d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d8af41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#c7d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d88a41", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d87b41", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d86d41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#8c41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#aa41d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#41d896", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#6f41d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#41a5d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#c0d841", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d84148", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#d88341", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41d8b4", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#8541d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#41a5d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d85741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d8417b", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#5241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d88341", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d84165", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4145d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d87b41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d84841", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d8414f", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d84f41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d85741", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d86d41", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d88341", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#d8a041", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d8a741", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d8b641", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d8c541", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#c0d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#b8d841", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#b1d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#a2d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#8cd841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#85d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#6fd841", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#59d841", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#4ad841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#52d841", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#41d854", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d84d", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d85b", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#41d863", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#41d86a", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#41d871", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#41d887", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mavlink", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#41d8a5", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d8ac", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41d8c2", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#41d8ca", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41d8d1", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_mavlink", "color": "#41d1d8", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41c2d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41bbd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#41a5d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#418fd8", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#4196d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#4180d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#4163d8", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#415bd8", "style": "normal"}, {"source": "t_actuator_controls_1", "target": "m_mavlink", "color": "#4154d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4145d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#4341d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#6041d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#7641d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#8c41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#9441d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#9b41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#aa41d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#b141d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#ce41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d841cc", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d841bd", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#d841af", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d84199", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d8418a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d8417b", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#d84174", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#d8416d", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d84165", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d84157", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d84f41", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d87b41", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mc_autotune_attitude_control", "color": "#41d896", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d841d3", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#6841d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d84f41", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#41d880", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d84d", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d87b41", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#8541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d84165", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#8c41d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41d86a", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d87b41", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d8416d", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#60d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#8541d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d841cc", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d8a741", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#9441d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#c741d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#d8c541", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d84f41", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#41d880", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#4341d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d84841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#8cd841", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d88a41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4145d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d84f41", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d89941", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d85e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#d88341", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out_sim", "color": "#41d1d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#c041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d6d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#ced841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#41a5d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d841bd", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d841bd", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#ce41d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#4ad841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d841bd", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#41d887", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#d88341", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#c7d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#85d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d88a41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#41d84d", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#c0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#d88341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#d841af", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#c0d841", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d8415e", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d8bb", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#8541d8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41acd8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d841cc", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d84f41", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d8418b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#4161d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#41d8ab", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d8419a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#89d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#4186d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4170d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41a4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#b541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#d841ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#9041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#5441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#bd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#7241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#7a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d84193", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#90d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#5cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#41d895", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d8c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#4195d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#c441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d841b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d8c741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#c4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#bdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#41b3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d89a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#b5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#72d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d86d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#6b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#6bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d861", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d89d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#ae41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d8bf41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#81d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#54d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#41d8b3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#cc41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d841a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#9fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#45d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#4541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#a741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d84166", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d87c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#d88441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#a7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d8a4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#8941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d841bf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d8416d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#d8a241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d8b841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41c9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#419dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d841d6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d841c7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d8ce41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d8d641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#ccd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#aed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#7ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d868", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41bad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#4177d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#5c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d86641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#41d877", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d84184", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d88b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d89341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#41d870", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#41d886", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#41d8ba", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d859", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d8c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41abd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#9f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#4159d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41c2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#8141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d8417c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#4168d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#41d8c9", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#41d87f", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41d8c9", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d8ce41", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d8ce41", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#72d841", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#72d841", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#72d841", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#417fd8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41abd8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d859", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d841c7", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d868", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#41d859", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#41d877", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#417fd8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#4159d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#417fd8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#41c2d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#d84184", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41abd8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#417fd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#41b3d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41abd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#d84184", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#81d841", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d84175", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41bad8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#41d8d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#54d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#90d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d86d41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#7ad841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d841a9", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d8d641", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d8417c", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#7a41d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8b041", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d85741", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d8c2", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d87c41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#d88441", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d841bf", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#4168d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#bdd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d84175", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#c4d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#b5d841", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#4143d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d84f41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#63d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#41d8b3", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d8c741", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4186d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#4195d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#41d886", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#d84f41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#d84157", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#d85e41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4170d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#5c41d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#d8419a", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#5c41d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d8c741", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41d1d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d8a941", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#a741d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#d87541", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#9fd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#d8a241", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d341d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d84841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d89d", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#6341d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#d88441", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#c4d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#d841bf", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#41d8c2", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d84148", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#ccd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d84f41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41d8d1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#41d8ba", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#89d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d8c2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#8141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#8941d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#72d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#9041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#41d1d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#ae41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41c2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41a4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#41d843", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#41d84a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d89a41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d89341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#cc41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#d841ce", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d841c7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d859", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#418ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d841b8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d8c741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#41d877", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d84193", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d8417c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#41d88e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#4152d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#c4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#4143d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d8416d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d84175", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#aed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d89d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d8a4", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d8c741", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4186d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#4177d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4170d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d841b0", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d8c741", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d3d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#9841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d84841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d8b841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#7ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#5441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d8c2", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#45d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d841a9", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#cc41d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#5cd841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#c441d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d84157", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#41d895", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41d852", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d87c41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#414ad8", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#72d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#8141d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d8bf41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d841a2", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d841d6", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#417fd8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#4d41d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#6b41d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d88b41", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#41d859", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#9f41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#419dd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#41d8ab", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8414f", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#8141d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#41d870", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#b541d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#a7d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8418b", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#4161d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d84166", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41c9d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#c441d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d895", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#4541d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d895", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#7241d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d861", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#5c41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#6bd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#c441d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d86641", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#98d841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#4dd841", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#41d859", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d8c9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#c4d841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#4159d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d841d6", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d84f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d86641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#4d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41d8d1", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#d8a241", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d841c7", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d8414f", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#98d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#98d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#98d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d841d6", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d84f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d86641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#4d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41d8d1", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina226", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#7ad841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d841d6", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d84f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d86641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#4d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41d8d1", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#7ad841", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#41d8c9", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#aed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#4d41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#41d8c2", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#aed841", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#aed841", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#8141d8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d841a9", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41abd8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#4dd841", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#98d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d841d6", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d8b041", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d841c7", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d84f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41c9d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#4dd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d86641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#4d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41d8d1", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d84193", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d84175", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#d841bf", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#7ad841", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#8141d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#6bd841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d841b8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_status", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#7ad841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d8c9", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d8ce41", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41d1d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d8c2", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d84841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d85741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d8c2", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#72d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#6bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41d8d1", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#5cd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d87c41", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#54d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41c9d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d88b41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#45d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41abd8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d89a41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#419dd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d841d6", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d859", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d841bf", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d8b841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d861", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#41d870", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d8bf41", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d841a2", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41d87f", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#4168d8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d84184", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d8417c", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d3d841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#4159d8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#ccd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#c4d841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#bdd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d84166", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#b5d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#4d41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#aed841", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#6341d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8414f", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d8a4", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#90d841", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#41d895", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#7241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#7ad841", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#5c41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#c441d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#5cd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#419dd8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d87c41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d841b8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41c9d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#7ad841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#8141d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d8bf41", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d89d", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_esc_battery", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#7ad841", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#aed841", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#6341d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d8d641", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d86d41", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#4177d8", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d86d41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#81d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#7ad841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#c4d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#41c9d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#41d8c2", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#5441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#4168d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d84841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#7a41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d86d41", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d8c741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d84841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41d1d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41c9d8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#89d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d8c2", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#5441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41d8d1", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#41d84a", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#9041d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8414f", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d84166", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#41d870", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#7ad841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#a7d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d87c41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#41d870", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#d841a2", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#4195d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d87c41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#c4d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#4143d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d86d41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#4d41d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#4177d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d84175", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#41d877", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#419dd8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d841b8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#4d41d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d89d", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d8415e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#7ad841", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#aed841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41d8d1", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#9f41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#7ad841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#5cd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#7ad841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#d84841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d85741", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d86d41", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#d88441", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d87c41", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d88b41", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d89341", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d8a941", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d8b841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d8c741", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d8ce41", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d8d641", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#c4d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#b5d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#aed841", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#9fd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#7ad841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#72d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#5cd841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#45d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#41d843", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d859", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d868", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d861", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#41d886", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d89d", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#41d8ab", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#41d8ba", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d8c2", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41d8d1", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#41d1d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41c9d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41c2d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41bad8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#41b3d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41abd8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#419dd8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#4186d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#417fd8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#4170d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#4168d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#4161d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#4152d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#414ad8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#4d41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#5441d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#6341d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#6b41d8", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#8941d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#8141d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#9f41d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#a741d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#b541d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#c441d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#cc41d8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d341d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d841c7", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#d841bf", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#d841a2", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d8418b", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d8417c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d84175", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d84157", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d84166", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d86d41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#7ad841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d841b0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#c4d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d84841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#7a41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d86d41", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d8c741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#c4d841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d8c2", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d841a9", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d8419a", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#4168d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#cc41d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d89d", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41c2d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#5cd841", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#c4d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d8c2", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#5441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d87c41", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#414ad8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#9f41d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d84166", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#b5d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d86d41", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d8c9", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#ae41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#72d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#41d870", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d841a2", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8414f", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d841d6", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d84f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#41d8b3", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d86641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#4d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41d8d1", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#d8a241", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#4161d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41d8ab", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#4161d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#b541d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#4161d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#6b41d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#417fd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8414f", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#41d870", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d88b41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d8c741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#c4d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d84841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#7ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41c9d8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41a4d8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d841ce", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4170d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d841a9", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#41d886", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#ccd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#5441d8", "style": "normal"}]} \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_px4_fmu-v5.json b/.vuepress/public/en/middleware/graph_px4_fmu-v5.json index 86ac3d1312425..dff791b5dd1f0 100644 --- a/.vuepress/public/en/middleware/graph_px4_fmu-v5.json +++ b/.vuepress/public/en/middleware/graph_px4_fmu-v5.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_path_navigation", "name": "fw_path_navigation", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#5bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#80d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#8e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41bfd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41d8bf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#ba41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d8bc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#c1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#87d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41b7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d89841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d8cb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#d7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#8ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d8a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#418cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#5b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#c841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d841ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#bad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d88c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#5441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#d841cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d8d241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#41d86f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#41d87d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#41d89a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#416fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d84198", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#a4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#45d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d8c6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#41b0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#7141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#9541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_actuator_controls_1", "name": "actuator_controls_1", "type": "topic", "color": "#d841bc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#419ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#417dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d841b5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d84189", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d8b541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#4167d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#a441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d84191", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#54d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d859", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#4159d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#8041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d8416c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d84156", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d86541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#95d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#71d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d867", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#7841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#c141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d88941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41d876", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d884", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#b341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d841d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84165", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41d8b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#4184d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d8419f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d89f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d8ae41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#c8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#41a2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#4193d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d8a641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#b3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#78d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#41d8b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#4176d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d85641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#8741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#d86c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d893", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d841a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#41c6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d89141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#d8c441", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#d8c441", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#4193d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d841d2", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d841d2", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#41d86f", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#41d86f", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#41d86f", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#d85e41", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d8cd", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d84141", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#8741d8", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#6a41d8", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#d86c41", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41d893", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d8419f", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d8ae41", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#41d893", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#41d893", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#d8419f", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#d85e41", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#5441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#d85e41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#d8419f", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#417dd8", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#41d859", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d884", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d8417b", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#6341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d8415e", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d88941", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d84198", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41d8b0", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#41d843", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#4184d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d89841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d87b41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#8ed841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#87d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#41d89a", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#8041d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#54d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#4dd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d89141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d859", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#bad841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#4159d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#41b0d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#41a2d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#7141d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d88c", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#9dd841", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#8e41d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_status", "color": "#41d8d5", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_landing_status", "color": "#d84841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_landing_gear", "color": "#41a2d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_tecs_status", "color": "#b3d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_vehicle_local_position_setpoint", "color": "#41d5d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_flaps_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_orbit_status", "color": "#c8d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_launch_detection_status", "color": "#d7d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_spoilers_setpoint", "color": "#d8b541", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d88c", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#5b41d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#d841ae", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d8b541", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#d84174", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#a441d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41bfd8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_actuator_controls_2", "color": "#ab41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#41d87d", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d84191", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#41d860", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d0d841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d8c6", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#6ad841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#4159d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#8ed841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#4dd841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#8041d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d8a641", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84165", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#418cd8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#41a2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d88c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#8ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#6a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d85641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d893", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#80d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d8a2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#41d8a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41d8bf", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#41d8b7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d8c6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#8741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_actuator_controls_0", "color": "#9541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#63d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d88241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#41c6d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#4dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#41bfd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#ba41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#45d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41b7d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#41d852", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41a9d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#41b0d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d841cb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d841c4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d8bc41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d841b5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d841a6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d8cb41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d8d241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41d859", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d8415e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#41d86f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d84156", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#95d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d88c", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#8e41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41b7d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41d5d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41d876", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d88c", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#5b41d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d84f41", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#d841ae", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d867", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#9d41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#41cdd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d841b5", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#ab41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d88941", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41d8b0", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d0d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#c1d841", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#c841d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41b7d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#41d8d5", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#5b41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#d841ae", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_actuator_controls_0", "color": "#9541d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#419ad8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#54d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#41d86f", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d86541", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#78d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d841a6", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d84189", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#d8416c", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#b341d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#c141d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#416fd8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#4160d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#8741d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#4541d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d84182", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#5bd841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8414f", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d841a6", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#414ad8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#7841d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#4d41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#4176d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#4167d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#71d841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d841ae", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#5b41d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_actuator_controls_0", "color": "#9541d8", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41b7d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41b7d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#5b41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#abd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_1", "color": "#d841bc", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#4152d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d841ae", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#a4d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d8b541", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_0", "color": "#9541d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#41d84a", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#d87441", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d89f41", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#8741d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#4dd841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#d86c41", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_dshot", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#71d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#c141d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#41d84a", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d87b41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#414ad8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d87441", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d87441", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#4dd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#8ed841", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d88941", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#41d8b0", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41d859", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#8041d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#417dd8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pca9685_pwm_out", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#71d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#c141d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#41d84a", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_ina226", "color": "#9541d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#71d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#c141d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#41d84a", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d87b41", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#c141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#b341d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_px4io", "color": "#ab41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#71d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#418cd8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d8ae41", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#41d84a", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#41d859", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d852", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#41d859", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#b341d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#41d859", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d852", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#d85e41", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d841a6", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#41d8b0", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d89f41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d84141", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_uavcan", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#71d841", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d8cb41", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d89f41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#c141d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#41d84a", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d87441", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d0d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#4dd841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#4152d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d88941", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d841a6", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41d859", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#8041d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#d841cb", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41d8a2", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d86541", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#41d859", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_status", "color": "#9541d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41bfd8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#8ed841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#87d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d85e41", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#41d89a", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#d86c41", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41d8b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#71d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#7841d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#6ad841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#8041d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#8741d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#9d41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#b341d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#41d843", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d89141", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#c141d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#c841d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d741d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#419ad8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#4193d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d8d241", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d8419f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d0d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#418cd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d859", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#417dd8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#4176d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d84189", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#4167d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#4160d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d867", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#bad841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84165", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d8415e", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#4152d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d84156", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#41d86f", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#a4d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4541d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#5b41d8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d841ae", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d84148", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#c841d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d8b541", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d88941", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d841a6", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d86541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#78d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#7841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d0d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d8c6", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#417dd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d84189", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d88941", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#d85e41", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_esc_battery", "color": "#9541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d852", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#71d841", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d88941", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#41d8b0", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41d876", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d84198", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#418cd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#417dd8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#8e41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#418cd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d88941", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_path_navigation", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_path_navigation", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_path_navigation", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_path_navigation", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_path_navigation", "color": "#d88941", "style": "normal"}, {"source": "t_wind", "target": "m_fw_path_navigation", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_path_navigation", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_path_navigation", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_path_navigation", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_path_navigation", "color": "#418cd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_path_navigation", "color": "#417dd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_path_navigation", "color": "#c1d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d88c", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d88941", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d89841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#418cd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#417dd8", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#41cdd8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#80d841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d8bc41", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41bfd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d0d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#418cd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#c1d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d88941", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#4167d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#414ad8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#4176d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#419ad8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#b341d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41d876", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d84198", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#d7d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#417dd8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#9541d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#6a41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#d841cb", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d8c6", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41d8a2", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#d86541", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#71d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#7841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#d0d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d852", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d841c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#71d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#418cd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d88941", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d88941", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#c841d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d85641", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d85e41", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d88241", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d88941", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d89141", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d8a641", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#d0d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#c1d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#b3d841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#a4d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#95d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#8ed841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#78d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#71d841", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#5bd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#4dd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41d859", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#41d860", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d867", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#41d86f", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#41d87d", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d884", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d88c", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d893", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#41d89a", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#41d8a9", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#41d8b7", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41d8b0", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d8c6", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d8cd", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#41bfd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41b7d8", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41a9d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#419ad8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#418cd8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#4184d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#417dd8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#416fd8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#4159d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#4160d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#4167d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#4d41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4541d8", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#4143d8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#5441d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#6341d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#7841d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#8041d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#8741d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#8e41d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mavlink", "color": "#9541d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#9d41d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#a441d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_mavlink", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#b341d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#c841d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d741d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d841d2", "style": "normal"}, {"source": "t_actuator_controls_1", "target": "m_mavlink", "color": "#d841bc", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d841b5", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d841a6", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d84198", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d84182", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#d84174", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#d8416c", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d8415e", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d8414f", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#418cd8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#8e41d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d88941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mc_autotune_attitude_control", "color": "#9541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#7141d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d84198", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d88c", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d84198", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d89841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d0d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#418cd8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#8ed841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d84841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d8c6", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#4dd841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d841b5", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#41c6d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d88941", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41d8b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#71d841", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d0d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#c841d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d041d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#418cd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#c1d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#4167d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#419ad8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#41d89a", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#54d841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#41d86f", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#78d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#d8c441", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#414ad8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4541d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#45d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d84198", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#4176d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#41a2d8", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out_sim", "color": "#ab41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#b341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#71d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#9dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#418cd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#c141d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#41d84a", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d84182", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84182", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#5bd841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84182", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#4d41d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#416fd8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#d8416c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#71d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#414ad8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#4176d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#4160d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#41d88c", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d84198", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#418cd8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d84198", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d84165", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#b3d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#ba41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d84198", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d8bf", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#41d8b0", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d0d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#417dd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#c1d841", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#41c6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#4174d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#5e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#41d87c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#d8c641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#a8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#7cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41d8b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#a141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#d87c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#41d8a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#83d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#57d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#4841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#7c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#bed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#41d899", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#cdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#4fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41a8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#5741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#d84192", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d84166", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#d89241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d8a841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d8b741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#a1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#be41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#b0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#8bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d841d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d8d541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d857", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#414fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#92d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#66d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d8c6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#b741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#99d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#41bed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#4199d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#416dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#7441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d8416d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d86d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#48d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#417cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d841b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#d84183", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d8a141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#41d892", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#6d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#8341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#a841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#cd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d88b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#b7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d848", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d84f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#41d883", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#4192d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#4f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d841a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d8418b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#5ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41d88b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41d8b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#4148d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d88341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d85e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#41d86d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#4183d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#6641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#b041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#6dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#41b7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#9241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#9941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d841c6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d841a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d8417c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d874", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41d8be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#41b0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#4157d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#74d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#418bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#8b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d86641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#415ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#4157d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#b041d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#4157d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d8418b", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d8418b", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#d84174", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#d84174", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#d84174", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41d8be", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d874", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d8cd41", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d841a1", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#41bed8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#5ed841", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#74d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d85e", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41d8b7", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#418bd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#418bd8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#418bd8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41d8b7", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41d8be", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41d8b7", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#d89941", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41d8be", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d85e41", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#41d8cd", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d84f", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#b0d841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d866", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#66d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#4148d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#4192d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41d88b", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#c6d841", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#8bd841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#bed841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d541d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#48d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d841b7", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d8a841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d8b741", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#415ed8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#d84199", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#4841d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d8cd", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d8be41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#414fd8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#6641d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#b741d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d8c641", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#b7d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#a8d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#d84192", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#41d8a8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#4174d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#41d86d", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#6641d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#b7d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#6d41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#7cd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#4199d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#d841b0", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d8414f", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#a1d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#416dd8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d85741", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d8d541", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#4141d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#d84199", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#48d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#d8b741", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d841c6", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#4f41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41a8d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#6641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#83d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#7cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#be41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#c641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#5ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#41d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#41d848", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d86641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d86d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#d87c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d89241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d866", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d841be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#418bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d8b041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d8b741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d874", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#41d87c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#d8d541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#414fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#41d892", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#d84183", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#41d899", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d84174", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#7c41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#8b41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#9241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41d8b0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#9941d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#a141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41d8cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d8d5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d8c641", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41a1d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#83d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#a8d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#4166d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84148", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#7441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d841a8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d88b41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#57d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#a841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d85741", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d5d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#c6d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41d88b", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#5741d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#41d8a8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#83d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84166", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#8341d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#8b41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#6dd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#92d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d841b7", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d8c6", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d84174", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#41d883", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d8a141", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d841d5", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#417cd8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#41d8a1", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#41d874", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#41b0d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d5d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d84841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d841cd", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#8b41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#41c6d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d84f41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#4183d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#5e41d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#cd41d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d8416d", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84166", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#83d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#83d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#b7d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d857", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d87441", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84166", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4fd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d8415e", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#99d841", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d84157", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#d8417c", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d88341", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#41d874", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#4157d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d8b741", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#74d841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#8bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d8a141", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d84157", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#6641d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d8cd41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#4183d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d8417c", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#d8417c", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d8417c", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#d8417c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#c6d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#d8b741", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#48d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#418bd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#cdd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#c6d841", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#41d88b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d8b741", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#8bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d8a141", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d84157", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#6641d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_ina226", "color": "#d84166", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#8bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d8a141", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d84157", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#6641d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#8bd841", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d85e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d84157", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d8a141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#c6d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#6641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#cd41d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#4157d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#c6d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#41d883", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#41d8cd", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d8b741", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#8b41d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41d8be", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d848", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#41d88b", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d88341", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#8bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41a8d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d88341", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d8cd41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d84157", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#41d883", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d8417c", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d8a141", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#41d899", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#6641d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#41d857", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#8b41d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d85741", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d8b741", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#8341d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d8b741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_status", "color": "#d84166", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#4157d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#7cd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#cdd841", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41d8cd", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#be41d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#cd41d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#66d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d541d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d85741", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#48d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d848", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#41b0d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d85e41", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d857", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d86d41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41a8d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d841cd", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d88b41", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d866", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d841b7", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d8a141", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#4183d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d8a841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d8b741", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d874", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#415ed8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#41d883", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#4141d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#cdd841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#4f41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#5741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#c6d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#41d8a1", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d84174", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#7441d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d8416d", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41d8b7", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#a841d8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#b041d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41d8be", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d8415e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d8c6", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41d88b", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#92d841", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#b7d841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d87441", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#4fd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#5741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#c6d841", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#99d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#8341d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#8b41d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d8d541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#6dd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d84f41", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d85741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d8d5", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#c6d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41d8be", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_esc_battery", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#cd41d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#4192d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#4141d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#b0d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#c6d841", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#41d88b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d8b741", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#83d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#d8c641", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d85741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d8b741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#c6d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#b0d841", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#415ed8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#cd41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#57d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#414fd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#cdd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#d8b741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d85741", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d848", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#c6d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#bed841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d84148", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#7cd841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d841a8", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#d87c41", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#41d87c", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#7c41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#cd41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#57d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#c6d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d8416d", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#4183d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#b0d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d84166", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#414fd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#41d883", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d841b7", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d8c6", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d8b741", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#5ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d8b741", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#8341d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#d89241", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d8d541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#cd41d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d84f41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#41d883", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41d8d5", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d84141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#cd41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#c6d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#c6d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#5741d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d84841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#d85741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d85e41", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d88b41", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#d89941", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d8b741", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#d8c641", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d8cd41", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#d8d541", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#a8d841", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#83d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#7cd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#6dd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#57d841", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#48d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#41d848", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d84f", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#41d86d", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d874", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#41d883", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41d88b", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#41d892", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#41d8a8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#41d8a1", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41d8be", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#41d8c6", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#41c6d8", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#41bed8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#41b7d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#41b0d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41a8d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#4199d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#4192d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#418bd8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#417cd8", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#416dd8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#415ed8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#4148d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#4141d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#4841d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#5741d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#5e41d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#7441d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#8b41d8", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#9941d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#a841d8", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#c641d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#cd41d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#d541d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#d841d5", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d841c6", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d841b7", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#d841b0", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d841a1", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#d84199", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d8418b", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#d84183", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d84174", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d84166", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d8415e", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d8414f", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#83d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#d8c641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d8b741", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#4166d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#4fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d8be41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#b0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#414fd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d8b741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d85741", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#c6d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#bed841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d84148", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d8d541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#cd41d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#415ed8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d85741", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#cdd841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#41d8a8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#4174d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41d88b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#c6d841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d86641", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d8b741", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#418bd8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d841be", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#5741d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#83d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#b0d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#57d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#414fd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d8b741", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#b0d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#6dd841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d541d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#4157d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d841b7", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#4183d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d8c6", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#41b0d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d8b041", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d84174", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#6d41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#8bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#cd41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d8a141", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d84157", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#b741d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#6641d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#41c6d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41c6d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#5e41d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#41c6d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d841d5", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#417cd8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#cd41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#4183d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#83d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#b0d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d8b741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#b0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#414fd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#cd41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#57d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d85741", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#41b7d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d8b741", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#4f41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#b0d841", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d8b0", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#41d88b", "style": "normal"}]} \ No newline at end of file diff --git a/.vuepress/public/en/middleware/graph_px4_sitl.json b/.vuepress/public/en/middleware/graph_px4_sitl.json index edca1687dc88b..d7ec1047b13f8 100644 --- a/.vuepress/public/en/middleware/graph_px4_sitl.json +++ b/.vuepress/public/en/middleware/graph_px4_sitl.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_fw_path_navigation", "name": "fw_path_navigation", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_fake_magnetometer", "name": "fake_magnetometer", "type": "Module", "color": "#666666"}, {"id": "m_px4_mavlink_debug", "name": "px4_mavlink_debug", "type": "Module", "color": "#666666"}, {"id": "m_work_item_example", "name": "work_item_example", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_px4_simple_app", "name": "px4_simple_app", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_fake_imu", "name": "fake_imu", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d84150", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#a1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#41d862", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#6cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d85f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#46d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#9a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d841b3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d84185", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#c841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d841d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#92d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#64d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d8d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#415ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#a141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d84176", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d8ca41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d8c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#6441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#a9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#6c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d8415f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_0", "name": "actuator_controls_0", "type": "topic", "color": "#d87641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d8a441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_1", "name": "actuator_controls_1", "type": "topic", "color": "#d8c341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d85a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d841ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_2", "name": "actuator_controls_2", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControls.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#83d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41d897", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#8341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#9241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d841c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d841ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#41d890", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#4197d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#4190d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#cfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#8ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#5dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#41d8a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#4162d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#7441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d84167", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d87e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d88d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#9ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#41c5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41a7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d84195", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d8417e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d85041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d8d241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#c8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#74d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#8a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#cf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d86741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#4641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#5541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#a941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d89541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d8b341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#d741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8418d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d88541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#41d869", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#4169d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d841a4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#55d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d8ac41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#5d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#d7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#cf41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d87e41", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#8a41d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#c0d841", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d8b341", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#83d841", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#8ad841", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d85041", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#415ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#a941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#c8d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#b141d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4180d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d8b341", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#7bd841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#5541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41bdd8", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d84148", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d841c3", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d841d2", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d84195", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d84841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d8ca41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#b841d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#c041d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#a9d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#8ad841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d8d4", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d841b3", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#4188d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#4162d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d84167", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d8b341", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#b8d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d8a441", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d89541", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8c5", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d841ac", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4d41d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_spoilers_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_flaps_setpoint", "color": "#d8d241", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_launch_detection_status", "color": "#64d841", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_orbit_status", "color": "#d741d8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_tecs_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_vehicle_local_position_setpoint", "color": "#41d879", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_landing_gear", "color": "#d89541", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_status", "color": "#d85f41", "style": "dashed"}, {"source": "m_fw_path_navigation", "target": "t_position_controller_landing_status", "color": "#41d888", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d8d241", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8c5", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#46d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#4152d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_gimbal", "target": "t_actuator_controls_2", "color": "#d8419c", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#41d880", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d84141", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d86e41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#41d890", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#4143d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d85a", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#d84157", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#b841d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#41d8d4", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#4188d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#4162d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#41b6d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d84176", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d89541", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41d8cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#6c41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41d89f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#41d897", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#7441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#41d8a7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#9a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#a141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#b8d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#b841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#b1d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#c0d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41d8b6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d8c5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#9ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#8ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d8d4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#41c5d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#7bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d86741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d86e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_actuator_controls_0", "color": "#d87641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41aed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#74d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d841bb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d841ca", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#6cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#419fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d841a4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#5dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d87e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8418d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d84185", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d88d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#4169d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#d8ac41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d8415f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d85a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#4641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#41d862", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41d871", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#41d869", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d8b341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#6441d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8c5", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4d41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41d879", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#9a41d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d8c5", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#4dd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#4197d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d8417e", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41d897", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#414bd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#4143d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_actuator_controls_2", "color": "#d8419c", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4180d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#5541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#41d8ae", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d8416e", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#5d41d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#7b41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#9a41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d85f41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_actuator_controls_0", "color": "#d87641", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d84167", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#6c41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#8341d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#9241d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41d871", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d88541", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#4171d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#74d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d843", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8bd", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#6c41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#a1d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#41bdd8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#d841a4", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#cfd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#d84150", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d8418d", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#a141d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#d84195", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#55d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#c8d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#cfd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d84195", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#41bdd8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#c8d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d8bb41", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#6c41d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#c0d841", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#419fd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#d7d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#6c41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#a141d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41d8b6", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8bd", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#a1d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d86741", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d841ca", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#419fd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#d841a4", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d8418d", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#4179d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#55d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d843", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#d8ac41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#d84150", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#6441d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#41d8b6", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d843", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#41d8bd", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#a1d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d841a4", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41d871", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d84150", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8418d", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d88d41", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#4190d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_actuator_controls_0", "color": "#d87641", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#9a41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_1", "color": "#d8c341", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#c841d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d8d241", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d84b", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d4d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#9a41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_actuator_controls_0", "color": "#d87641", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#41bdd8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41a7d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d8b341", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#c0d841", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro_fifo", "color": "#41d8b6", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro", "color": "#d841a4", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_accel", "color": "#d8418d", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_esc_status", "color": "#55d841", "style": "dashed"}, {"source": "m_fake_magnetometer", "target": "t_sensor_mag", "color": "#419fd8", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_vect", "color": "#41d89f", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_key_value", "color": "#9ad841", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_array", "color": "#4169d8", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_value", "color": "#41d869", "style": "dashed"}, {"source": "m_px4_simple_app", "target": "t_vehicle_attitude", "color": "#8ad841", "style": "dashed"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41a7d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d87e41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#b841d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#8ad841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#83d841", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#5541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#74d841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d8b341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#4180d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#b841d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d841b3", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#8ad841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#4188d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41d871", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#a141d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d8d4", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d86e41", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#cf41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#8ad841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d8ca41", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#7441d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#6c41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#7b41d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#8341d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#9241d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#c8d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#b841d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#c041d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#a9d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#8ad841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d8d4", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d4d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#83d841", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#7bd841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d841c3", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#419fd8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#4197d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#4190d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d841b3", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d841a4", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8418d", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d84195", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#4179d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d88d41", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#55d841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d8417e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d84176", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d8416e", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d84b", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d84167", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d8415f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#4143d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#d84157", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#5541d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#415ad8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d85741", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#c841d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d8d241", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#7b41d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#92d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#4143d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#8341d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41d871", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d88541", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#a141d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d88d41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41a7d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#4180d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#9a41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#5541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#b141d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#8ad841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#4d41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#4180d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_path_navigation", "color": "#b841d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_path_navigation", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_path_navigation", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_path_navigation", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_path_navigation", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_path_navigation", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_path_navigation", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_path_navigation", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_path_navigation", "color": "#b141d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_path_navigation", "color": "#41d8ae", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_path_navigation", "color": "#d84176", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_path_navigation", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d8c5", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#83d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#b141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d84176", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#414bd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d8d4", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#41d862", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d84185", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d86e41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#41d8ae", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8418d", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#4190d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d841a4", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#41d8b6", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#9241d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#d841a4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#b841d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#64d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4180d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#b141d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d89c41", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_land_detector", "color": "#d87641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#c8d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#8ad841", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#8ad841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#6441d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d88d41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#4171d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41a7d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4180d8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#41c5d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#419fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4180d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#7b41d8", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d85041", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d85f41", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d86e41", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mavlink", "color": "#d87641", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d87e41", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d88541", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d88d41", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#d8ac41", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#d8bb41", "style": "normal"}, {"source": "t_actuator_controls_1", "target": "m_mavlink", "color": "#d8c341", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#d7d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#c8d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#c0d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#a9d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#a1d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#8ad841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#83d841", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#7bd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#74d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#55d841", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#46d841", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#41d843", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d84b", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d85a", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#41d869", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41d871", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41d879", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#41d880", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#41d890", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#41d897", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41d89f", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#41d8a7", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d8d4", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#41cdd8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#419fd8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#4197d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#4190d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#4179d8", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#4162d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#4152d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#4143d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#4641d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#4d41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#5541d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#6c41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#7b41d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#8a41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#9a41d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#b841d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#c041d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#cf41d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#d741d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d841b3", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_mavlink", "color": "#d8419c", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d8417e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d84176", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d8416e", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d84167", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d84150", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#8ad841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#4d41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d84176", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_mc_autotune_attitude_control", "color": "#d87641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d8a441", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#4143d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4180d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#b141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#b841d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#c041d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41d897", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d8d4", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4180d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d85f41", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#5541d8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41d888", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d841bb", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41a7d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#5dd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#7b41d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#b141d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d84176", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#b8d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#419fd8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#a9d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#4190d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d84167", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#6c41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d841a4", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d88541", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8418d", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#b141d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d841ca", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_controls_0", "target": "m_battery_simulator", "color": "#d87641", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41a7d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d841ac", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_gz_bridge", "color": "#d8419c", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#d84195", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#d84176", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#d89541", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#5d41d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#41bdd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#c8d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41a7d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d841ac", "style": "normal"}, {"source": "t_actuator_controls_2", "target": "m_pwm_out_sim", "color": "#d8419c", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d84195", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d84176", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d89541", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#5d41d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#41bdd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#c8d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d84150", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d84150", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84150", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84150", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#d8bb41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#4180d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#74d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41a7d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d8bb41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8418d", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#4179d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d841a4", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#8ad841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#b841d8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#8ad841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41d8cd", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#4180d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#41cdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#83d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#41d879", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#5541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#b141d8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41aed8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#41d84b", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fake_magnetometer", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_work_item_example", "color": "#4180d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_work_item_example", "color": "#d8418d", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_fake_magnetometer", "name": "fake_magnetometer", "type": "Module", "color": "#666666"}, {"id": "m_px4_mavlink_debug", "name": "px4_mavlink_debug", "type": "Module", "color": "#666666"}, {"id": "m_work_item_example", "name": "work_item_example", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_px4_simple_app", "name": "px4_simple_app", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_fake_imu", "name": "fake_imu", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#8741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAngularVelocity.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d84167", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d841a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#4177d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d8a641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#cdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#41add8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#416fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#c5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#41d8ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d8d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#4841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#41d8a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d86741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d8ad41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#96d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d877", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#9641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ManualControlSetpoint.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d84158", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#41d896", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#41b5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#bd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d89e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#4158d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#6f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#7741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#9ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d87741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#6fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#58d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d8416f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d8b541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d8d441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#41d858", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#41d89e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d841c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d86041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d8c541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#c541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d841d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d89641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#b5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#8ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#67d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#41d4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleOdometry.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitudeSetpoint.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#9e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_collision_report", "name": "collision_report", "type": "topic", "color": "#d841b5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d84187", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d85841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#4196d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#5841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#6741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#a641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleCommand.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#ad41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#b541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d8419e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d86f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d88741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#add841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41d848", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41d867", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41c5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#4167d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4148d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d84196", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d8418e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d88e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#bdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#41d8b5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#419ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#77d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#48d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#41a6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#a6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#87d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#41d86f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#8e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d84160", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d85041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#cd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d84150", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d8c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#d841ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d84177", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41d867", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d441d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#5841d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d84196", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#48d841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#96d841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d8b541", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#41bdd8", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41c5d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4148d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#bdd841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d86f41", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d84158", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d87f41", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d88e41", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d841c5", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#add841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#7fd841", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#41d8b5", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#48d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d84148", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#4196d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#50d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#41d8ad", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#9e41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d88e", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#41d4d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41bdd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#41b5d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#4158d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d84187", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d84177", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d877", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#48d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#58d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d87741", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#77d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#41d89e", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4177d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#d84141", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#d84160", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#d841a6", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#c5d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#417fd8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#d86041", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#4160d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#41d8bd", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#77d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#4160d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d86041", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#41d850", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d8c541", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d8a641", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#6741d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d841bd", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#c541d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#7741d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d8416f", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#d8bd41", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#41b5d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#41d4d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#9e41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#41d877", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#8e41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#9641d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#4167d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#77d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41d896", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d84841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#d85041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#8ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d85841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#ad41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d8c5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#41d8cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#d441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41d8d4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#67d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d841cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#60d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d87f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d89e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41bdd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d8a641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#58d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_collision_report", "color": "#d841b5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#48d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#41b5d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#419ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#41a6d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#418ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#4187d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#416fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d8418e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#d8417f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d877", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d87f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#4150d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#cdd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#d8416f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41d860", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#b5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#5041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#5841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d84150", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#a6d841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#4177d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#417fd8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d8d4", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41d848", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#6041d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#bd41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d841d4", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#4841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#7741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4148d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#41d86f", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d8cd41", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d88741", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d88e41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#b541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d877", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#d841ad", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d8ad41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#c5d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#96d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d8d4", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#41d858", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41d860", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#87d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d8d441", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d8419e", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d89e41", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d84187", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#d8418e", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#d84167", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#41add8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#41a6d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#8741d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#bdd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#4196d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#5041d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#d86f41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#d89641", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#d89e41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#a6d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#cd41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#41d87f", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#41d887", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#9ed841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#bdd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#4196d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d86f41", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#d89641", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#d89e41", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#a6d841", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#d441d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#d85041", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41d896", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#d85041", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#8741d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#41d8c5", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#41d8cd", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#41cdd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#d89e41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#41add8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#41a6d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#419ed8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#d84167", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#b5d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#5041d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#a6d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#cd41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d87f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#41d887", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d84841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d84167", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#41add8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#41a6d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41d860", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#8741d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#b5d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#5041d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#41d887", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#4141d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#96d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d8d4", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#96d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d8d4", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#41d8a6", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d86041", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#4160d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#6fd841", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#bdd841", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#a641d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#48d841", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#d441d8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_accel", "color": "#41a6d8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro_fifo", "color": "#b5d841", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro", "color": "#5041d8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_esc_status", "color": "#cd41d8", "style": "dashed"}, {"source": "m_fake_magnetometer", "target": "t_sensor_mag", "color": "#d85041", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_vect", "color": "#d84150", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_key_value", "color": "#ad41d8", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_array", "color": "#4187d8", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_value", "color": "#d4d841", "style": "dashed"}, {"source": "m_px4_simple_app", "target": "t_vehicle_attitude", "color": "#41bdd8", "style": "dashed"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#a641d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#5841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#4148d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_msp_osd", "color": "#9e41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d88e41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#41d877", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d8418e", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d8b541", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41d8c5", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#4148d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#41b5d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_airspeed_selector", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#7741d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#41d8ad", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#4148d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41d860", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#9e41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#41b5d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d8419e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#41d87f", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d8a641", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41d867", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d877", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d84841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d85041", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#7741d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#41d8ad", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#9641d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#9e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#a641d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#b541d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#6fd841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d441d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d841d4", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#67d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d86f41", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d87f41", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d88741", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d88e41", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41bdd8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d89e41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d8b541", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d8ad41", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#41b5d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#41a6d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#4196d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d8d441", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#4167d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#4158d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d8418e", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d84187", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#41d858", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4148d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#5041d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#a6d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#cd41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d877", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#96d841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#41d8a6", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4148d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d86741", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d86041", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#4160d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d8ad41", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#41d858", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d84841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#7741d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41d860", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#a641d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d8419e", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d87f", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d84187", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d8b541", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#4148d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#add841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#a641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d8418e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4148d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41d848", "style": "normal"}, {"source": "t_home_position", "target": "m_flight_mode_manager", "color": "#d88e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#a641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#4148d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#4177d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d8b541", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#4148d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#a641d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#58d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#41d877", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#d8b541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#4148d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#9641d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#50d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#7fd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d8418e", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d8b541", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#7741d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#4841d8", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#7f41d8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#41d86f", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#60d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#a641d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d8a641", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d877", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#4148d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#41a6d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#d8d441", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#5041d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d84187", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#b5d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4148d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d86f41", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41d848", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d8d441", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#7fd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#58d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d84187", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d8b541", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#41b5d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#419ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#41d896", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d84841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#7741d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d86f41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#d8419e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#a641d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4148d8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d85841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#a641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d8418e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#4148d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#d85041", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4148d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d8ad41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d84841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#d85041", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d86741", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d86f41", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d87f41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#d89641", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d88e41", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d88741", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d89e41", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d8a641", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d8ad41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d8b541", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#d8bd41", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d8c541", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d8cd41", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#d8d441", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d4d841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#c5d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#add841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#a6d841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#9ed841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#6fd841", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#41d850", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41d860", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41d867", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d877", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#41d887", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#41d8ad", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#41d8b5", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#41d8bd", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#41d4d8", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#41cdd8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41c5d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#41add8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#417fd8", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#4187d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#4177d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#4158d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4148d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#4841d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#4141d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#5841d8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#8741d8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#8e41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#9641d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#9e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#a641d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#ad41d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#b541d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#c541d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#bd41d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#cd41d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#d441d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d841d4", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d841bd", "style": "normal"}, {"source": "t_collision_report", "target": "m_mavlink", "color": "#d841b5", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d84196", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d8418e", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#d8417f", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d84187", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d84167", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#d8416f", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d84160", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d84150", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d8d4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4148d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#4177d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#96d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#4148d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#9641d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#6041d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d87741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#58d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4148d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d8418e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#7fd841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#50d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#4150d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#41b5d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#7741d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#c5d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d841a6", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4148d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d8cd41", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d88e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#a641d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d877", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#a641d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#8ed841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d8ad41", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d8d4", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#4841d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#58d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d877", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d85041", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#41a6d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d8d441", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d89e41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#7fd841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#4158d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d84187", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_battery_simulator", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#a641d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#41d89e", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#bdd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#4196d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#d86f41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#9641d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#6741d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#a641d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d84148", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#d841ad", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#77d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#41d89e", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#bdd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#4196d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d86f41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#9641d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#6741d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#a641d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d84148", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#d841ad", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#77d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#41d887", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41d887", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#41add8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#9ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#4148d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#a641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#d8418e", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#9ed841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#a641d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#41a6d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#5041d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#a6d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#9641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#bd41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#58d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#a641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d88e41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d8b541", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#41b5d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#417fd8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#416fd8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#4167d8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#cdd841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d84160", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#6fd841", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fake_magnetometer", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_work_item_example", "color": "#4148d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_work_item_example", "color": "#41a6d8", "style": "normal"}]} \ No newline at end of file diff --git a/assets/companion_computer/pixhawk_rpi/pins_numbers.png b/assets/companion_computer/pixhawk_rpi/pins_numbers.png new file mode 100755 index 0000000000000..1b017ecfc0d04 Binary files /dev/null and b/assets/companion_computer/pixhawk_rpi/pins_numbers.png differ diff --git a/assets/companion_computer/pixhawk_rpi/pixhawk_6c.png b/assets/companion_computer/pixhawk_rpi/pixhawk_6c.png new file mode 100755 index 0000000000000..c7b2c01ad078a Binary files /dev/null and b/assets/companion_computer/pixhawk_rpi/pixhawk_6c.png differ diff --git a/assets/companion_computer/pixhawk_rpi/rpi_gpio.png b/assets/companion_computer/pixhawk_rpi/rpi_gpio.png new file mode 100755 index 0000000000000..e38e4c3c3000c Binary files /dev/null and b/assets/companion_computer/pixhawk_rpi/rpi_gpio.png differ diff --git a/assets/config/actuators/control_surfaces_geometry.png b/assets/config/actuators/control_surfaces_geometry.png index 2538690b5538c..670bf0f44d086 100644 Binary files a/assets/config/actuators/control_surfaces_geometry.png and b/assets/config/actuators/control_surfaces_geometry.png differ diff --git a/assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png b/assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png new file mode 100644 index 0000000000000..560d310957365 Binary files /dev/null and b/assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png differ diff --git a/assets/ekf2/qgc_ekf2_enable_flow.png b/assets/ekf2/qgc_ekf2_enable_flow.png deleted file mode 100644 index 70efb75980ade..0000000000000 Binary files a/assets/ekf2/qgc_ekf2_enable_flow.png and /dev/null differ diff --git a/assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg b/assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg new file mode 100644 index 0000000000000..6d177f61e73ac Binary files /dev/null and b/assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg differ diff --git a/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Diagram.jpg b/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Diagram.jpg deleted file mode 100644 index 405a71d162f6a..0000000000000 Binary files a/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Diagram.jpg and /dev/null differ diff --git a/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Table.jpg b/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Table.jpg deleted file mode 100644 index 3faa5ee045ea8..0000000000000 Binary files a/assets/flight_controller/holybro_pix32_v5/FMU_Debug_Port_Table.jpg and /dev/null differ diff --git a/assets/flight_controller/holybro_pix32_v5/IMG_3112.jpg b/assets/flight_controller/holybro_pix32_v5/IMG_3112.jpg deleted file mode 100644 index 804080f4aace8..0000000000000 Binary files a/assets/flight_controller/holybro_pix32_v5/IMG_3112.jpg and /dev/null differ diff --git a/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png b/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png new file mode 100644 index 0000000000000..98ba47d3997e9 Binary files /dev/null and b/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png differ diff --git a/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg b/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg new file mode 100644 index 0000000000000..13e5b24a1c30b Binary files /dev/null and b/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg differ diff --git a/assets/flight_controller/nxp_rddrone_fmuk66/nxp_rddrone_fmuk66_bottom.jpg b/assets/flight_controller/nxp_rddrone_fmuk66/nxp_rddrone_fmuk66_bottom.jpg deleted file mode 100644 index d998dfe173138..0000000000000 Binary files a/assets/flight_controller/nxp_rddrone_fmuk66/nxp_rddrone_fmuk66_bottom.jpg and /dev/null differ diff --git a/assets/flight_controller/pixhawk4/pixhawk4_wiring_overview.jpg b/assets/flight_controller/pixhawk4/pixhawk4_wiring_overview.jpg deleted file mode 100644 index 5f31170f608ee..0000000000000 Binary files a/assets/flight_controller/pixhawk4/pixhawk4_wiring_overview.jpg and /dev/null differ diff --git a/assets/flight_controller/pixhawk5x/pixhawk5x_dimensions.jpg b/assets/flight_controller/pixhawk5x/pixhawk5x_dimensions.jpg deleted file mode 100644 index c0f77bc24f392..0000000000000 Binary files a/assets/flight_controller/pixhawk5x/pixhawk5x_dimensions.jpg and /dev/null differ diff --git a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.jpg b/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.jpg deleted file mode 100644 index f55a67f33090c..0000000000000 Binary files a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.jpg and /dev/null differ diff --git a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout1.jpg b/assets/flight_controller/pixhawk5x/pixhawk5x_pinout1.jpg deleted file mode 100644 index a7574f7dee3f6..0000000000000 Binary files a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout1.jpg and /dev/null differ diff --git a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout2.jpg b/assets/flight_controller/pixhawk5x/pixhawk5x_pinout2.jpg deleted file mode 100644 index 10b8c0660287d..0000000000000 Binary files a/assets/flight_controller/pixhawk5x/pixhawk5x_pinout2.jpg and /dev/null differ diff --git a/assets/flight_log_analysis/plot_juggler/plotjuggler.png b/assets/flight_log_analysis/plot_juggler/plotjuggler.png deleted file mode 100644 index 1f5df055897fa..0000000000000 Binary files a/assets/flight_log_analysis/plot_juggler/plotjuggler.png and /dev/null differ diff --git a/assets/flight_log_analysis/pyflightanalysis.png b/assets/flight_log_analysis/pyflightanalysis.png deleted file mode 100644 index 3ddac90b08ce9..0000000000000 Binary files a/assets/flight_log_analysis/pyflightanalysis.png and /dev/null differ diff --git a/assets/gcs/qgc_caipiroshka.jpg b/assets/gcs/qgc_caipiroshka.jpg deleted file mode 100644 index 96d2f311c7bc6..0000000000000 Binary files a/assets/gcs/qgc_caipiroshka.jpg and /dev/null differ diff --git a/assets/gcs/xplane_data_config.png b/assets/gcs/xplane_data_config.png deleted file mode 100644 index 51b2cd57bf081..0000000000000 Binary files a/assets/gcs/xplane_data_config.png and /dev/null differ diff --git a/assets/gcs/xplane_net_config.png b/assets/gcs/xplane_net_config.png deleted file mode 100644 index 3b33cdb24b31f..0000000000000 Binary files a/assets/gcs/xplane_net_config.png and /dev/null differ diff --git a/assets/hardware/gps/ark_rtk_gps_orientation.png b/assets/hardware/gps/ark_rtk_gps_orientation.png deleted file mode 100644 index 02af1cbc71c90..0000000000000 Binary files a/assets/hardware/gps/ark_rtk_gps_orientation.png and /dev/null differ diff --git a/assets/hardware/gps/rtk_here_plus_connectors.jpg b/assets/hardware/gps/rtk_here_plus_connectors.jpg deleted file mode 100644 index ba66bf909c36f..0000000000000 Binary files a/assets/hardware/gps/rtk_here_plus_connectors.jpg and /dev/null differ diff --git a/assets/hardware/gps/rtk_holybro_h-rtk-f9p_pinmap.jpg b/assets/hardware/gps/rtk_holybro_h-rtk-f9p_pinmap.jpg deleted file mode 100644 index ba2ec19ec20cb..0000000000000 Binary files a/assets/hardware/gps/rtk_holybro_h-rtk-f9p_pinmap.jpg and /dev/null differ diff --git a/assets/hardware/gps/rtk_holybro_h-rtk_all.jpg b/assets/hardware/gps/rtk_holybro_h-rtk_all.jpg deleted file mode 100644 index 58f10833d8298..0000000000000 Binary files a/assets/hardware/gps/rtk_holybro_h-rtk_all.jpg and /dev/null differ diff --git a/assets/hardware/gps/rtk_holybro_h-rtk_pinmap.jpg b/assets/hardware/gps/rtk_holybro_h-rtk_pinmap.jpg deleted file mode 100644 index 803ec3ea1182a..0000000000000 Binary files a/assets/hardware/gps/rtk_holybro_h-rtk_pinmap.jpg and /dev/null differ diff --git a/assets/hardware/gps/rtk_holybro_h-rtk_spec.png b/assets/hardware/gps/rtk_holybro_h-rtk_spec.png deleted file mode 100644 index 2f4f8655694be..0000000000000 Binary files a/assets/hardware/gps/rtk_holybro_h-rtk_spec.png and /dev/null differ diff --git a/assets/hardware/gps/septentrio_sbf/asterx_m3_and_rib_board.png b/assets/hardware/gps/septentrio_sbf/asterx_m3_and_rib_board.png new file mode 100644 index 0000000000000..7ef3ade63f4ee Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/asterx_m3_and_rib_board.png differ diff --git a/assets/hardware/gps/septentrio_sbf/jst_cable.png b/assets/hardware/gps/septentrio_sbf/jst_cable.png new file mode 100644 index 0000000000000..c5ed5093558da Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/jst_cable.png differ diff --git a/assets/hardware/gps/septentrio_sbf/mosaic-go.png b/assets/hardware/gps/septentrio_sbf/mosaic-go.png new file mode 100644 index 0000000000000..562cfb29cd44a Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/mosaic-go.png differ diff --git a/assets/hardware/gps/septentrio_sbf/mosaic-go_wiring.png b/assets/hardware/gps/septentrio_sbf/mosaic-go_wiring.png new file mode 100644 index 0000000000000..4d93fe1b93df6 Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/mosaic-go_wiring.png differ diff --git a/assets/hardware/gps/septentrio_sbf/multi-antenna_attitude_setup.png b/assets/hardware/gps/septentrio_sbf/multi-antenna_attitude_setup.png new file mode 100644 index 0000000000000..68173f90eded7 Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/multi-antenna_attitude_setup.png differ diff --git a/assets/hardware/gps/septentrio_sbf/qgc_param.png b/assets/hardware/gps/septentrio_sbf/qgc_param.png new file mode 100644 index 0000000000000..447ab6e70c430 Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/qgc_param.png differ diff --git a/assets/hardware/gps/septentrio_sbf/rib.png b/assets/hardware/gps/septentrio_sbf/rib.png new file mode 100644 index 0000000000000..a34ca72e70d75 Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/rib.png differ diff --git a/assets/hardware/gps/septentrio_sbf/rib_wiring.png b/assets/hardware/gps/septentrio_sbf/rib_wiring.png new file mode 100644 index 0000000000000..48d23fce85cbd Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/rib_wiring.png differ diff --git a/assets/hardware/gps/septentrio_sbf/septentrio_mosaic_a5_h_t_clas_gnss_module_receiverwebui.png b/assets/hardware/gps/septentrio_sbf/septentrio_mosaic_a5_h_t_clas_gnss_module_receiverwebui.png new file mode 100644 index 0000000000000..655abcb0ff4c2 Binary files /dev/null and b/assets/hardware/gps/septentrio_sbf/septentrio_mosaic_a5_h_t_clas_gnss_module_receiverwebui.png differ diff --git a/assets/hardware/hardware-nanomind110-specs.png b/assets/hardware/hardware-nanomind110-specs.png deleted file mode 100644 index 76237ba9b4a73..0000000000000 Binary files a/assets/hardware/hardware-nanomind110-specs.png and /dev/null differ diff --git a/assets/hardware/hardware-pixfalcon-kit.jpg b/assets/hardware/hardware-pixfalcon-kit.jpg deleted file mode 100644 index c696fd0441735..0000000000000 Binary files a/assets/hardware/hardware-pixfalcon-kit.jpg and /dev/null differ diff --git a/assets/hardware/intel_aero/aero_i2c_splitter.jpg b/assets/hardware/intel_aero/aero_i2c_splitter.jpg deleted file mode 100644 index 63a8ea669a6a8..0000000000000 Binary files a/assets/hardware/intel_aero/aero_i2c_splitter.jpg and /dev/null differ diff --git a/assets/hardware/intel_aero/aero_lidarlite.jpg b/assets/hardware/intel_aero/aero_lidarlite.jpg deleted file mode 100644 index 9d943cd90c9f3..0000000000000 Binary files a/assets/hardware/intel_aero/aero_lidarlite.jpg and /dev/null differ diff --git a/assets/hardware/intel_aero/intel-aero-rtf.jpg b/assets/hardware/intel_aero/intel-aero-rtf.jpg deleted file mode 100644 index da891908ba4d0..0000000000000 Binary files a/assets/hardware/intel_aero/intel-aero-rtf.jpg and /dev/null differ diff --git a/assets/hardware/power_module/cuav_can/can_pmu.jpg b/assets/hardware/power_module/cuav_can/can_pmu.jpg index 40b3400591e8f..5847910365a03 100644 Binary files a/assets/hardware/power_module/cuav_can/can_pmu.jpg and b/assets/hardware/power_module/cuav_can/can_pmu.jpg differ diff --git a/assets/hardware/power_module/cuav_can/can_pmu_connection_en.png b/assets/hardware/power_module/cuav_can/can_pmu_connection_en.png index 506a88e41f8b0..5892b6c530218 100644 Binary files a/assets/hardware/power_module/cuav_can/can_pmu_connection_en.png and b/assets/hardware/power_module/cuav_can/can_pmu_connection_en.png differ diff --git a/assets/hardware/power_module/cuav_can/can_pmu_list.png b/assets/hardware/power_module/cuav_can/can_pmu_list.png index 51ccb5020d599..1fb49d2addd82 100644 Binary files a/assets/hardware/power_module/cuav_can/can_pmu_list.png and b/assets/hardware/power_module/cuav_can/can_pmu_list.png differ diff --git a/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en.png b/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en.png index e8023f32a44f3..cb5a52e749787 100644 Binary files a/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en.png and b/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en.png differ diff --git a/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en2.png b/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en2.png index 5de9f8cb6569a..65f8051a076c8 100644 Binary files a/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en2.png and b/assets/hardware/power_module/cuav_can/can_pmu_pinouts_en2.png differ diff --git a/assets/hardware/power_module/cuav_can/qgc_set_en.png b/assets/hardware/power_module/cuav_can/qgc_set_en.png index 17b6187db8b72..8cdb7ee52acb7 100644 Binary files a/assets/hardware/power_module/cuav_can/qgc_set_en.png and b/assets/hardware/power_module/cuav_can/qgc_set_en.png differ diff --git a/assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png b/assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png new file mode 100644 index 0000000000000..559907b1e39d4 Binary files /dev/null and b/assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png differ diff --git a/assets/hardware/power_module/holybro_pm02/pm02_content.jpg b/assets/hardware/power_module/holybro_pm02/pm02_content.jpg deleted file mode 100644 index fc39bf8a99714..0000000000000 Binary files a/assets/hardware/power_module/holybro_pm02/pm02_content.jpg and /dev/null differ diff --git a/assets/hardware/power_module/holybro_pm03d/pm03d_hero.jpg b/assets/hardware/power_module/holybro_pm03d/pm03d_hero.jpg deleted file mode 100644 index d6a0d7f5f366f..0000000000000 Binary files a/assets/hardware/power_module/holybro_pm03d/pm03d_hero.jpg and /dev/null differ diff --git a/assets/hardware/power_module/holybro_pm06/pm06_hero.jpg b/assets/hardware/power_module/holybro_pm06/pm06_hero.jpg deleted file mode 100644 index 249ac5a6afee6..0000000000000 Binary files a/assets/hardware/power_module/holybro_pm06/pm06_hero.jpg and /dev/null differ diff --git a/assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg b/assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg deleted file mode 100644 index 7059c665dc94f..0000000000000 Binary files a/assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg and /dev/null differ diff --git a/assets/hardware/px4_vision_devkit/px4_vision_kit_hero.jpg b/assets/hardware/px4_vision_devkit/px4_vision_kit_hero.jpg deleted file mode 100644 index 57638c04182a3..0000000000000 Binary files a/assets/hardware/px4_vision_devkit/px4_vision_kit_hero.jpg and /dev/null differ diff --git a/assets/hardware/px4_vision_devkit/px4_vision_schematic_layered.png b/assets/hardware/px4_vision_devkit/px4_vision_schematic_layered.png deleted file mode 100644 index b711caea74a2a..0000000000000 Binary files a/assets/hardware/px4_vision_devkit/px4_vision_schematic_layered.png and /dev/null differ diff --git a/assets/hardware/px4_vision_devkit/px4_vision_schematic_overview.jpg b/assets/hardware/px4_vision_devkit/px4_vision_schematic_overview.jpg deleted file mode 100644 index a6ef76a58aeae..0000000000000 Binary files a/assets/hardware/px4_vision_devkit/px4_vision_schematic_overview.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/flow_focus_book.jpg b/assets/hardware/sensors/px4flow/flow_focus_book.jpg deleted file mode 100644 index db0f8ff78c147..0000000000000 Binary files a/assets/hardware/sensors/px4flow/flow_focus_book.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/flow_focusing.png b/assets/hardware/sensors/px4flow/flow_focusing.png deleted file mode 100644 index e3461a147699f..0000000000000 Binary files a/assets/hardware/sensors/px4flow/flow_focusing.png and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_bottom.jpg b/assets/hardware/sensors/px4flow/px4flow_bottom.jpg deleted file mode 100644 index 3939d4b18ee18..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_bottom.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_manual_v1.3.pdf b/assets/hardware/sensors/px4flow/px4flow_manual_v1.3.pdf deleted file mode 100644 index a1dac9f1456ba..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_manual_v1.3.pdf and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_onboard_parameters.png b/assets/hardware/sensors/px4flow/px4flow_onboard_parameters.png deleted file mode 100644 index 77b1482520f7f..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_onboard_parameters.png and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_paper.pdf b/assets/hardware/sensors/px4flow/px4flow_paper.pdf deleted file mode 100644 index e762dc61128fa..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_paper.pdf and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_schematic_v1.3.pdf b/assets/hardware/sensors/px4flow/px4flow_schematic_v1.3.pdf deleted file mode 100644 index cca53ad902649..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_schematic_v1.3.pdf and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_testing.jpg b/assets/hardware/sensors/px4flow/px4flow_testing.jpg deleted file mode 100644 index 7443b8e1decb7..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_testing.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_top.jpg b/assets/hardware/sensors/px4flow/px4flow_top.jpg deleted file mode 100644 index 232b091b14815..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_top.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_trajectory.jpg b/assets/hardware/sensors/px4flow/px4flow_trajectory.jpg deleted file mode 100644 index 761fe954a8655..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_trajectory.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_v1.0_top_generated.png b/assets/hardware/sensors/px4flow/px4flow_v1.0_top_generated.png deleted file mode 100644 index c4a24b2eddb8a..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_v1.0_top_generated.png and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_video_distorted.png b/assets/hardware/sensors/px4flow/px4flow_video_distorted.png deleted file mode 100644 index 1e149fa5b620d..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_video_distorted.png and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flow_win_drivers.zip b/assets/hardware/sensors/px4flow/px4flow_win_drivers.zip deleted file mode 100644 index ce37bd6f8ab06..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flow_win_drivers.zip and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/px4flowalignwithpixhawk.jpg b/assets/hardware/sensors/px4flow/px4flowalignwithpixhawk.jpg deleted file mode 100644 index 1e6d13b28c0fd..0000000000000 Binary files a/assets/hardware/sensors/px4flow/px4flowalignwithpixhawk.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/qgc_video_downlink_px4flow.jpg b/assets/hardware/sensors/px4flow/qgc_video_downlink_px4flow.jpg deleted file mode 100644 index 97a245291879f..0000000000000 Binary files a/assets/hardware/sensors/px4flow/qgc_video_downlink_px4flow.jpg and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/test_pattern_376x240.png b/assets/hardware/sensors/px4flow/test_pattern_376x240.png deleted file mode 100644 index 1257eb680f46b..0000000000000 Binary files a/assets/hardware/sensors/px4flow/test_pattern_376x240.png and /dev/null differ diff --git a/assets/hardware/sensors/px4flow/test_pattern_64x64.png b/assets/hardware/sensors/px4flow/test_pattern_64x64.png deleted file mode 100644 index 9325d5df5530b..0000000000000 Binary files a/assets/hardware/sensors/px4flow/test_pattern_64x64.png and /dev/null differ diff --git a/assets/hardware/telemetry/hkpilot_telemetry_radio_v2.jpg b/assets/hardware/telemetry/hkpilot_telemetry_radio_v2.jpg deleted file mode 100644 index 842bdf90c3246..0000000000000 Binary files a/assets/hardware/telemetry/hkpilot_telemetry_radio_v2.jpg and /dev/null differ diff --git a/assets/hardware/telemetry/holybro_microhard_pair_crop.jpg b/assets/hardware/telemetry/holybro_microhard_pair_crop.jpg deleted file mode 100644 index b62fcb7d549cb..0000000000000 Binary files a/assets/hardware/telemetry/holybro_microhard_pair_crop.jpg and /dev/null differ diff --git a/assets/hardware/telemetry/holybro_microhard_pinout1.jpg b/assets/hardware/telemetry/holybro_microhard_pinout1.jpg deleted file mode 100644 index ca5454542550a..0000000000000 Binary files a/assets/hardware/telemetry/holybro_microhard_pinout1.jpg and /dev/null differ diff --git a/assets/mc_pid_tuning/MC_PID_tuning-TPA.svg b/assets/mc_pid_tuning/MC_PID_tuning-TPA.svg deleted file mode 100644 index 537148ea1bcab..0000000000000 --- a/assets/mc_pid_tuning/MC_PID_tuning-TPA.svg +++ /dev/null @@ -1,2 +0,0 @@ - -
PID value
PID value
100%
100%
0%
0%
Rate
Rate

TPA

[Not supported by viewer]
Throttle
Throttle
0
0
1
[Not supported by viewer]
Breakpoint
Breakpoint
\ No newline at end of file diff --git a/assets/middleware/micrortps/architecture.png b/assets/middleware/micrortps/architecture.png deleted file mode 100644 index 8f7357efa9f39..0000000000000 Binary files a/assets/middleware/micrortps/architecture.png and /dev/null differ diff --git a/assets/middleware/micrortps/architecture_ros.png b/assets/middleware/micrortps/architecture_ros.png deleted file mode 100644 index 01d16db6f5dec..0000000000000 Binary files a/assets/middleware/micrortps/architecture_ros.png and /dev/null differ diff --git a/assets/middleware/micrortps/architecture_ros2.png b/assets/middleware/micrortps/architecture_ros2.png deleted file mode 100644 index 1c27b247a749f..0000000000000 Binary files a/assets/middleware/micrortps/architecture_ros2.png and /dev/null differ diff --git a/assets/peripherals/esc_uavcan_holybro_kotleta20/kotleta20_bottom.jpg b/assets/peripherals/esc_uavcan_holybro_kotleta20/kotleta20_bottom.jpg deleted file mode 100644 index e453c230d03f9..0000000000000 Binary files a/assets/peripherals/esc_uavcan_holybro_kotleta20/kotleta20_bottom.jpg and /dev/null differ diff --git a/assets/qgc/app_menu_icon.png b/assets/qgc/app_menu_icon.png deleted file mode 100644 index 9e8234b6a922e..0000000000000 Binary files a/assets/qgc/app_menu_icon.png and /dev/null differ diff --git a/assets/qgc/setup/airframe/airframe_px4.jpg b/assets/qgc/setup/airframe/airframe_px4.jpg index 78c864bc40f19..b5b655159484c 100644 Binary files a/assets/qgc/setup/airframe/airframe_px4.jpg and b/assets/qgc/setup/airframe/airframe_px4.jpg differ diff --git a/assets/qgc/setup/airframe/airframe_px4_apply_prompt.jpg b/assets/qgc/setup/airframe/airframe_px4_apply_prompt.jpg index 5e31af1ca24af..a112dd65c2311 100644 Binary files a/assets/qgc/setup/airframe/airframe_px4_apply_prompt.jpg and b/assets/qgc/setup/airframe/airframe_px4_apply_prompt.jpg differ diff --git a/assets/qgc/setup/airframe/frame_selection.png b/assets/qgc/setup/airframe/frame_selection.png index 4d593c5257a39..74625286d3805 100644 Binary files a/assets/qgc/setup/airframe/frame_selection.png and b/assets/qgc/setup/airframe/frame_selection.png differ diff --git a/assets/qgc/setup/airframe/px4_frame_generic_standard_vtol.png b/assets/qgc/setup/airframe/px4_frame_generic_standard_vtol.png new file mode 100644 index 0000000000000..a83de2f734a8d Binary files /dev/null and b/assets/qgc/setup/airframe/px4_frame_generic_standard_vtol.png differ diff --git a/assets/qgc/setup/esc/esc_calibration_step_2.png b/assets/qgc/setup/esc/esc_calibration_step_2.png index 9bf1488ddd247..94906714a6558 100644 Binary files a/assets/qgc/setup/esc/esc_calibration_step_2.png and b/assets/qgc/setup/esc/esc_calibration_step_2.png differ diff --git a/assets/qgc/setup/esc/esc_calibration_step_3.png b/assets/qgc/setup/esc/esc_calibration_step_3.png index 0318aceeb153c..dbd4ad1667e8b 100644 Binary files a/assets/qgc/setup/esc/esc_calibration_step_3.png and b/assets/qgc/setup/esc/esc_calibration_step_3.png differ diff --git a/assets/qgc/setup/esc/esc_calibration_step_4.png b/assets/qgc/setup/esc/esc_calibration_step_4.png index 2951f478bbe35..44e2e805bbec4 100644 Binary files a/assets/qgc/setup/esc/esc_calibration_step_4.png and b/assets/qgc/setup/esc/esc_calibration_step_4.png differ diff --git a/assets/qgc/setup/esc/qgc_esc_calibration.png b/assets/qgc/setup/esc/qgc_esc_calibration.png index 4d9af46ec55a4..76fbc4565568d 100644 Binary files a/assets/qgc/setup/esc/qgc_esc_calibration.png and b/assets/qgc/setup/esc/qgc_esc_calibration.png differ diff --git a/assets/qgc/setup/esc/qgc_esc_calibration_power.png b/assets/qgc/setup/esc/qgc_esc_calibration_power.png index a94e426bead3a..14dd5cf833aae 100644 Binary files a/assets/qgc/setup/esc/qgc_esc_calibration_power.png and b/assets/qgc/setup/esc/qgc_esc_calibration_power.png differ diff --git a/assets/qgc/setup/flight_modes/single_channel_mode_selection_4.png b/assets/qgc/setup/flight_modes/single_channel_mode_selection_4.png deleted file mode 100644 index 9d1192dcbb16e..0000000000000 Binary files a/assets/qgc/setup/flight_modes/single_channel_mode_selection_4.png and /dev/null differ diff --git a/assets/simulation/gazebo/vehicles/rc_cessna.png b/assets/simulation/gazebo/vehicles/rc_cessna.png new file mode 100644 index 0000000000000..a54be4daafff9 Binary files /dev/null and b/assets/simulation/gazebo/vehicles/rc_cessna.png differ diff --git a/assets/simulation/gazebo/vehicles/standard_vtol.png b/assets/simulation/gazebo/vehicles/standard_vtol.png new file mode 100644 index 0000000000000..0a24856e9e8b4 Binary files /dev/null and b/assets/simulation/gazebo/vehicles/standard_vtol.png differ diff --git a/assets/simulation/gazebo/vehicles/x500.png b/assets/simulation/gazebo/vehicles/x500.png new file mode 100644 index 0000000000000..35295137a70f7 Binary files /dev/null and b/assets/simulation/gazebo/vehicles/x500.png differ diff --git a/assets/simulation/gazebo/vehicles/x500_depth.png b/assets/simulation/gazebo/vehicles/x500_depth.png new file mode 100644 index 0000000000000..429e6c9df9963 Binary files /dev/null and b/assets/simulation/gazebo/vehicles/x500_depth.png differ diff --git a/assets/site/logo_discord.png b/assets/site/logo_discord.png deleted file mode 100644 index bb38376a7f97b..0000000000000 Binary files a/assets/site/logo_discord.png and /dev/null differ diff --git a/assets/toolchain/github_clone_or_download.png b/assets/toolchain/github_clone_or_download.png deleted file mode 100644 index 9cd2abfc3ebd6..0000000000000 Binary files a/assets/toolchain/github_clone_or_download.png and /dev/null differ diff --git a/assets/toolchain/github_fork.png b/assets/toolchain/github_fork.png deleted file mode 100644 index bf176dbb03ffe..0000000000000 Binary files a/assets/toolchain/github_fork.png and /dev/null differ diff --git a/assets/toolchain/terminal.png b/assets/toolchain/terminal.png deleted file mode 100644 index e86b69af149b2..0000000000000 Binary files a/assets/toolchain/terminal.png and /dev/null differ diff --git a/assets/toolchain/vscode/cmake_build_config.jpg b/assets/toolchain/vscode/cmake_build_config.jpg index c3af617ccc5b6..d2d0204530252 100644 Binary files a/assets/toolchain/vscode/cmake_build_config.jpg and b/assets/toolchain/vscode/cmake_build_config.jpg differ diff --git a/assets/toolchain/vscode/cmake_configuring_project.jpg b/assets/toolchain/vscode/cmake_configuring_project.jpg index bd612f23b78a3..27d2aceda3e7d 100644 Binary files a/assets/toolchain/vscode/cmake_configuring_project.jpg and b/assets/toolchain/vscode/cmake_configuring_project.jpg differ diff --git a/assets/toolchain/vscode/cmake_configuring_project_done.jpg b/assets/toolchain/vscode/cmake_configuring_project_done.jpg index e47fe73a30209..5f07f3038f9b7 100644 Binary files a/assets/toolchain/vscode/cmake_configuring_project_done.jpg and b/assets/toolchain/vscode/cmake_configuring_project_done.jpg differ diff --git a/assets/toolchain/vscode/installing_extensions.jpg b/assets/toolchain/vscode/installing_extensions.jpg index f14ba1c849cc4..099d92d9ec13a 100644 Binary files a/assets/toolchain/vscode/installing_extensions.jpg and b/assets/toolchain/vscode/installing_extensions.jpg differ diff --git a/assets/toolchain/vscode/prompt_install_extensions.jpg b/assets/toolchain/vscode/prompt_install_extensions.jpg index 8908b9aa0a0b6..be8035a287361 100644 Binary files a/assets/toolchain/vscode/prompt_install_extensions.jpg and b/assets/toolchain/vscode/prompt_install_extensions.jpg differ diff --git a/assets/toolchain/vscode/run_debug_build.jpg b/assets/toolchain/vscode/run_debug_build.jpg index ba7ab985afef4..ef75ac011edcd 100644 Binary files a/assets/toolchain/vscode/run_debug_build.jpg and b/assets/toolchain/vscode/run_debug_build.jpg differ diff --git a/assets/toolchain/vscode/select_kit.jpg b/assets/toolchain/vscode/select_kit.jpg deleted file mode 100644 index e85064a611a2f..0000000000000 Binary files a/assets/toolchain/vscode/select_kit.jpg and /dev/null differ diff --git a/assets/toolchain/vscode/select_kit_start.jpg b/assets/toolchain/vscode/select_kit_start.jpg deleted file mode 100644 index 3fd339d644500..0000000000000 Binary files a/assets/toolchain/vscode/select_kit_start.jpg and /dev/null differ diff --git a/assets/toolchain/vscode/vscode_debug.jpg b/assets/toolchain/vscode/vscode_debug.jpg index 97dc7833c6469..4c675a4ed8be4 100644 Binary files a/assets/toolchain/vscode/vscode_debug.jpg and b/assets/toolchain/vscode/vscode_debug.jpg differ diff --git a/assets/toolchain/vscode/vscode_hardware_debugging_options.png b/assets/toolchain/vscode/vscode_hardware_debugging_options.png index e6dd2c9e9eaf3..85912e4cad199 100644 Binary files a/assets/toolchain/vscode/vscode_hardware_debugging_options.png and b/assets/toolchain/vscode/vscode_hardware_debugging_options.png differ diff --git a/assets/toolchain/vscode/vscode_intellisense.jpg b/assets/toolchain/vscode/vscode_intellisense.jpg index e38d18de394d2..415c0d536e467 100644 Binary files a/assets/toolchain/vscode/vscode_intellisense.jpg and b/assets/toolchain/vscode/vscode_intellisense.jpg differ diff --git a/assets/toolchain/vscode/vscode_wsl.png b/assets/toolchain/vscode/vscode_wsl.png index a3e54e0ad4329..ffa6e91b93f32 100644 Binary files a/assets/toolchain/vscode/vscode_wsl.png and b/assets/toolchain/vscode/vscode_wsl.png differ diff --git a/assets/toolchain/vscode/welcome_open_folder.jpg b/assets/toolchain/vscode/welcome_open_folder.jpg index 7a5f5058da9fe..45b1fb7533747 100644 Binary files a/assets/toolchain/vscode/welcome_open_folder.jpg and b/assets/toolchain/vscode/welcome_open_folder.jpg differ diff --git a/assets/videostreaming/power-pins.jpg b/assets/videostreaming/power-pins.jpg deleted file mode 100644 index fdf8aa52f107c..0000000000000 Binary files a/assets/videostreaming/power-pins.jpg and /dev/null differ diff --git a/assets/videostreaming/qgc-screenshot.png b/assets/videostreaming/qgc-screenshot.png index 5208f33865d15..b3edbf3f23f1a 100644 Binary files a/assets/videostreaming/qgc-screenshot.png and b/assets/videostreaming/qgc-screenshot.png differ diff --git a/assets/videostreaming/setup_whole.jpg b/assets/videostreaming/setup_whole.jpg deleted file mode 100644 index ffdfe84a9d12d..0000000000000 Binary files a/assets/videostreaming/setup_whole.jpg and /dev/null differ diff --git a/de/README.md b/de/README.md index f32b180b031bc..bd8defe4cd025 100644 --- a/de/README.md +++ b/de/README.md @@ -101,8 +101,8 @@ The *Dronecode Calendar* shows important community events for platform users and * [Australia – Melbourne/Sydney/Hobart](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) :::tip +The calendar default timezone is Central European Time (CET). -Calendar defaults to CET. ::: diff --git a/de/SUMMARY.md b/de/SUMMARY.md index cfb5f8d067299..b0b20998f5414 100644 --- a/de/SUMMARY.md +++ b/de/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C Wiring Quickstart](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X Wiring Quickstart](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 Wiring Quickstart](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal Wiring Quickstart](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md) * [Cube Wiring Quickstart](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [Manufacturer-Supported Autopilots](flight_controller/autopilot_manufacturer_supported.md) * [AirMind MindPX](flight_controller/mindpx.md) * [AirMind MindRacer](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md) * [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [Holybro Kakute F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [Experimental Autopilots](flight_controller/autopilot_experimental.md) * [BeagleBone Blue](flight_controller/beaglebone_blue.md) - * [Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) - * [Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Raspberry Pi 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) * [Raspberry Pi 2/3/4 PilotPi](flight_controller/raspberry_pi_pilotpi.md) * [PilotPi with Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) * [PilotPi with Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [Discontinued Autopilots/Vehicles](flight_controller/autopilot_discontinued.md) + * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S Brushless Whoop](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [CUAV v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [Snapdragon Flight](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [Telemetry Radios](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [FrSky Telemetry](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [CUAV HV pm](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [Optical Flow](sensor/optical_flow.md) * [ARK Flow](dronecan/ark_flow.md) - * [PX4FLOW](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [ESCs & Motors](peripherals/esc_motors.md) * [PWM ESCs and Servos](peripherals/pwm_escs_and_servo.md) * [DShot ESCs](peripherals/dshot.md) * [OneShot ESCs and Servos](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [Camera](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [Companion Computers](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [Companion Computer Peripherals](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [Development](development/development.md) @@ -333,6 +339,7 @@ * [Ubuntu Setup](dev_setup/dev_env_linux_ubuntu.md) * [Windows Setup](dev_setup/dev_env_windows_wsl.md) * [Visual Studio Code IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [Building the Code](dev_setup/building_px4.md) * [Writing your First Application](modules/hello_sky.md) * [Application/Module Template](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim Simulation](simulation/jmavsim.md) * [Multi-Vehicle Sim with JMAVSim](simulation/multi_vehicle_jmavsim.md) * [Gazebo Simulation](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB Message Reference](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink Messaging](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [XRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/xrce_dds.md) * [Modules & Commands](modules/modules_main.md) + * [Autotune](modules/modules_autotune.md) * [Commands](modules/modules_command.md) * [Communication](modules/modules_communication.md) * [Controllers](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [Baro](modules/modules_driver_baro.md) * [Distance Sensor](modules/modules_driver_distance_sensor.md) * [IMU](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [Magnetometer](modules/modules_driver_magnetometer.md) + * [Optical Flow](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [Estimators](modules/modules_estimator.md) * [Simulations](modules/modules_simulation.md) * [System](modules/modules_system.md) @@ -646,14 +660,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 User Guide](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [ROS (1) via ROS 2 Bridge](ros/ros1_via_ros2.md) - * [ROS (1) with MAVROS](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS Installation Guide](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS Sending Custom Messages](ros/mavros_custom_messages.md) - * [ROS/MAVROS with Gazebo Simulation](simulation/ros_interface.md) - * [Gazebo OctoMap Models with ROS (1)](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [ROS/MAVROS Installation on RPi](ros/raspberrypi_installation.md) * [External Position Estimation (Vision/Motion based)](ros/external_position_estimation.md) * [DroneKit](robotics/dronekit.md) diff --git a/de/advanced/computer_vision.md b/de/advanced/computer_vision.md index cc7deb235c9aa..e87c367fa1c4c 100644 --- a/de/advanced/computer_vision.md +++ b/de/advanced/computer_vision.md @@ -47,8 +47,8 @@ For information about configuring VIO on PX4 see: [Optical Flow](../sensor/optical_flow.md) provides 2D velocity estimation (using a downward facing camera and a downward facing distance sensor). For information about optical flow see: + - [Optical Flow](../sensor/optical_flow.md) - - [PX4Flow Smart Camera](../sensor/px4flow.md) - [EKF > Optical Flow](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## External Resources diff --git a/de/advanced/gimbal_control.md b/de/advanced/gimbal_control.md index 6a941cfd8f460..a7effd11074ab 100644 --- a/de/advanced/gimbal_control.md +++ b/de/advanced/gimbal_control.md @@ -68,11 +68,11 @@ To run it, use: make px4_sitl gazebo-classic_typhoon_h480 ``` -To just test the mount driver on other models or simulators, make sure the driver runs (using `vmount start`), then configure its parameters. +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## Testing -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. The following describes testing in SITL, but the commands also work on a real device. +The driver provides a simple test command. The following describes testing in SITL, but the commands also work on a real device. Start the simulation with (no parameter needs to be changed for that): @@ -83,7 +83,7 @@ make px4_sitl gazebo-classic_typhoon_h480 Make sure it's armed, eg. with `commander takeoff`, then use the following command to control the gimbal (for example): ``` -vmount test yaw 30 +gimbal test yaw 30 ``` Note that the simulated gimbal stabilizes itself, so if you send MAVLink commands, set the `stabilize` flags to `false`. diff --git a/de/advanced/package_delivery.md b/de/advanced/package_delivery.md index 4f0813e9189b6..45ad8c56c4fc0 100644 --- a/de/advanced/package_delivery.md +++ b/de/advanced/package_delivery.md @@ -9,7 +9,7 @@ Currently only [Grippers](../peripherals/gripper.md) can be used for package del ::: :::note -The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -57,4 +57,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/de/advanced_config/bootloader_update.md b/de/advanced_config/bootloader_update.md index 14d5a80555e1a..da92228d6ca4a 100644 --- a/de/advanced_config/bootloader_update.md +++ b/de/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # Bootloader Update -The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO) and [PX4FLOW](../sensor/px4flow.md). +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). This topic explains several methods for updating the Pixhawk bootloader. @@ -8,7 +8,7 @@ This topic explains several methods for updating the Pixhawk bootloader. Hardware usually comes with an appropriate bootloader version pre-installed. [Update the Firmware](../config/firmware.md#custom) with an image containing the new/desired bootloader. ::: -## Building the new PX4 bootloader yourself +## Building the new PX4 Bootloader Yourself Boards starting with FMUv6X (STM32H7) use the in-tree PX4 bootloader. Older boards use the bootloader from the legacy [PX4 bootloader](https://github.com/PX4/Bootloader) repository. Please refer to the instructions in the README to learn how to use it. diff --git a/de/advanced_config/bootloader_update_from_betaflight.md b/de/advanced_config/bootloader_update_from_betaflight.md index 71b898dc76c9e..402e4595f27b3 100644 --- a/de/advanced_config/bootloader_update_from_betaflight.md +++ b/de/advanced_config/bootloader_update_from_betaflight.md @@ -4,7 +4,8 @@ This page documents how to flash the PX4 bootloader onto boards preflashed with There are two options for flashing the bootloader: via *Betaflight Configurator* (easier), or building from source. - + + ### Bootloader Update using Betaflight Configurator To install the PX4 bootloader using the *Betaflight Configurator*: @@ -21,7 +22,38 @@ You should now be able to install PX4 firmware on the board. #### Download Bootloader Source -Download and build the [Bootloader](https://github.com/PX4/Bootloader) via: +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -45,6 +77,18 @@ Both methods require the board to be in DFU mode. To enter DFU mode, hold the bo ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. Once completed, enter DFU mode again to complete the regular flashing. +::: + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/de/advanced_config/esc_calibration.md b/de/advanced_config/esc_calibration.md index 013014ecd06f2..a13bcf362fcea 100644 --- a/de/advanced_config/esc_calibration.md +++ b/de/advanced_config/esc_calibration.md @@ -42,4 +42,6 @@ Never attempt ESC calibration with props on. :::note -High-quality controllers come with a factory calibration. In *theory* this means that they can be configured by just setting the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) parameters to the values provided in the ESC technical specification. In practice the input range may differ even on high quality controllers, which is why calibration is recommended. ::: +High-quality controllers come with a factory calibration. In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/de/advanced_config/ethernet_setup.md b/de/advanced_config/ethernet_setup.md index 5fff3662c3a46..a70031845c455 100644 --- a/de/advanced_config/ethernet_setup.md +++ b/de/advanced_config/ethernet_setup.md @@ -14,7 +14,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -77,7 +77,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Once the network configuration has been set you can disconnect the USB cable. 1. Reboot the flight controller to apply the settings. -Note that the above setup gives the flight controller an address on the Ethernet network. You also need to \[configure the Ethernet port\]((#px4-mavlink-serial-port-configuration) to use MAVLink. +Note that the above setup gives the flight controller an address on the Ethernet network. You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -187,55 +187,44 @@ can connect to the PX4 on port `14550` if you don't modify the PX4 Ethernet port ::: -## ROS2 Setup Example - -:::warning -**This section is out of date!** It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. -::: +## ROS 2 Setup Example +:::note Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. +- You have a supported autopilot hardware running PX4 firmware that includes [XRCE-DDS](../middleware/xrce_dds.md) middleware. Note that PX4 v1.14 and later include the required [microdds-client](../modules/modules_system.md#microdds-client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. - You have followed the Ethernet network and port setup as discussed at the top of this page. +::: -In this example it is assumed that you have followed the example to set your IP addresses. +To set up ROS 2: + +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the micro XRCE-DDS client on PX4](../middleware/xrce_dds.md#starting-the-client), either manually or by customizing the system startup script. Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the XRCE-DDS agent on the companion computer](../middleware/xrce_dds.md#starting-the-agent). For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. Note that the remote IP here is your companion computer IP. This by default starts the micrortps_client connected to UDP ports 2019 and 2020 To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) - ``` - micrortps_client start -t UDP -i - ``` - An output like below is expected in the console: ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! + MicroXRCEAgent udp4 -p 8888 ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/de/advanced_config/imu_factory_calibration.md b/de/advanced_config/imu_factory_calibration.md index 6ce8addcfc443..636d413b0a092 100644 --- a/de/advanced_config/imu_factory_calibration.md +++ b/de/advanced_config/imu_factory_calibration.md @@ -15,7 +15,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/de/advanced_config/parameter_reference.md b/de/advanced_config/parameter_reference.md index 2de1ac3ee792a..6e3147c356e69 100644 --- a/de/advanced_config/parameter_reference.md +++ b/de/advanced_config/parameter_reference.md @@ -14739,12 +14739,12 @@ table { EKF2_AID_MASK (INT32) - Integer bitmask controlling data fusion and aiding methods

Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

Bitmask:
  • 0: unused
  • -
  • 1: use optical flow
  • + Will be removed after v1.14 release

    Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

    Bitmask:
    • 0: unused
    • +
    • 1: unused
    • 2: unused
    • 3: unused
    • 4: unused
    • -
    • 5: multi-rotor drag fusion
    • +
    • 5: unused
    • 6: unused
    • 7: unused
    • 8: unused
    • @@ -14765,7 +14765,7 @@ table { EKF2_ARSP_THR (FLOAT) - Airspeed fusion threshold

      Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

      + Airspeed fusion threshold

      Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

      [0.0, ?] 0.0 m/s @@ -14795,7 +14795,7 @@ table { EKF2_BARO_CTRL (INT32) - Barometric sensor height aiding

      Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

      + Barometric sensor height aiding

      Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

      Enabled (1) @@ -14824,14 +14824,14 @@ table { EKF2_BCOEF_X (FLOAT) - X-axis ballistic coefficient used for multi-rotor wind estimation

      Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

      + X-axis ballistic coefficient used for multi-rotor wind estimation

      Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

      [0.0, 200.0] 100.0 kg/m^2 EKF2_BCOEF_Y (FLOAT) - Y-axis ballistic coefficient used for multi-rotor wind estimation

      Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

      + Y-axis ballistic coefficient used for multi-rotor wind estimation

      Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

      [0.0, 200.0] 100.0 kg/m^2 @@ -14862,6 +14862,13 @@ table { 7 + + EKF2_DRAG_CTRL (INT32) + Multirotor wind estimation selection

      Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

      + + Disabled (0) + + EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

      Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

      @@ -15243,7 +15250,7 @@ table { EKF2_MAG_TYPE (INT32) - Type of magnetometer fusion

      Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

      Values:
        + Type of magnetometer fusion

        Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

        Values:
        • 0: Automatic
        • 1: Magnetic heading
        • @@ -15266,12 +15273,12 @@ table { EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] - 0.25 + 0.20 rad/s EKF2_MCOEF (FLOAT) - Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          + Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s @@ -15313,6 +15320,13 @@ table { 5000000 us + + EKF2_OF_CTRL (INT32) + Optical flow aiding

          Comment: Enable optical flow fusion.

          + + Disabled (0) + + EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15471,7 +15485,7 @@ table { EKF2_RNG_A_HMAX (FLOAT) - Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          + Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m @@ -15485,14 +15499,14 @@ table { EKF2_RNG_A_VMAX (FLOAT) - Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          + Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s EKF2_RNG_CTRL (INT32) - Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
            + Range sensor height aiding

            Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

            Values:
            • 0: Disable range fusion
            • 1: Enabled (conditional mode)
            • @@ -16496,6 +16510,20 @@ table { -30.0 deg + + FW_THR_ASPD_MAX (FLOAT) + Throttle at max airspeed

              Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

              + [0, 1] (0.01) + 0. + + + + FW_THR_ASPD_MIN (FLOAT) + Throttle at min airspeed

              Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

              + [0, 1] (0.01) + 0. + + FW_THR_IDLE (FLOAT) Idle throttle

              Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

              @@ -16577,7 +16605,7 @@ table { FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

              Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

              [0.0, 2.0] (0.05) - 0.3 + 0.1 @@ -16929,11 +16957,13 @@ table {
            • 5: Femtomes
            • -
            • 6: NMEA (generic)
            • +
            • 6: NMEA (generic)
            • + +
            • 7: Septentrio (SBF)

            Reboot required: true

            - [0, 5] + [0, 7] 1 @@ -17003,7 +17033,7 @@ table {

          Reboot required: true

          - [0, 5] + [0, 6] 1 @@ -17021,6 +17051,14 @@ table { 0 + + GPS_PITCH_OFFSET (FLOAT) + Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          + + [-90, 90] + 0. + deg + GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17094,7 +17132,7 @@ table { GPS_YAW_OFFSET (FLOAT) - Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          + Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0. @@ -17319,9 +17357,16 @@ table { Disabled (0) + + CA_HELI_YAW_CP_O (FLOAT) + Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          + [-2, 2] (0.1) + 0.0 + + CA_HELI_YAW_CP_S (FLOAT) - Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          + Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 @@ -20626,14 +20671,14 @@ table { UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000 - + rpm MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500 - + rpm MODAL_IO_SDIR1 (INT32) @@ -20775,75 +20820,6 @@ table { -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NameDescription[Min, Max] (Incr.)DefaultUnits
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          Values:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20868,15 +20844,8 @@ table { - - - - - - - - - + + @@ -21031,19 +21000,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21236,20 +21212,6 @@ table { - - - - - - - - - - - - - - @@ -21534,6 +21496,13 @@ table { + + + + + + + + + + + + + + @@ -22164,7 +22140,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32334,6 +32310,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          Values:
            @@ -22123,6 +22092,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32696,6 +32680,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameDescription[Min, Max] (Incr.)DefaultUnits
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          Values:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32741,9 +32802,9 @@ table { - + - + @@ -32753,13 +32814,6 @@ table { - - - - - - - @@ -32830,14 +32884,14 @@ table { - + - + @@ -32865,14 +32919,14 @@ table { - + - + @@ -32909,7 +32963,7 @@ table { - + diff --git a/de/advanced_config/tuning_the_ecl_ekf.md b/de/advanced_config/tuning_the_ecl_ekf.md index d1a2db3301e42..7d6d92615e140 100644 --- a/de/advanced_config/tuning_the_ecl_ekf.md +++ b/de/advanced_config/tuning_the_ecl_ekf.md @@ -325,7 +325,7 @@ Fixed wing platforms can take advantage of an assumed sideslip observation of ze ### Multicopter Wind Estimation using Drag Specific Forces -Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This is enabled by setting bit position 5 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter to `true`. +Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). The relationship between airspeed and specific force (IMU accelerometer measurements) along the X and Y body axes is controlled by the [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X), [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) and [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) parameters which set the ballistic coefficients for flight in the X and Y directions, and the momentum drag produced by the propellers, respectively. The amount of specific force observation noise is set by the [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) parameter. @@ -341,33 +341,21 @@ A good tuning is obtained as follows: [Optical flow](../sensor/optical_flow.md) data will be used if the following conditions are met: * Valid range finder data is available. -* Bit position 1 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * The quality metric returned by the flow sensor is greater than the minimum requirement set by the [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) parameter. ### External Vision System -Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* External vision system horizontal position data will be used if bit position 3 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. For more details about the configuration of height sources, [click here](#height). -* External vision system velocity data will be used if bit position 8 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system orientation data will be used for yaw estimation if bit position 4 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision reference frame offset will be estimated and used to rotate the external vision system data if bit position 6 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -Either bit 4 (`EV_YAW`) or bit 6 (`EV_ROTATE`) should be set to true, but not both together. Following [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) values are supported when using with an external vision system. +- `0`: Horizontal position data +- `1`: Vertical position data. Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -| EKF_AID_MASK value | Set bits | Description | -| -------------------- | ----------------------------- | --------------------------------------------------- | -| 320 | EV_VEL + ROTATE_EV | Heading w.r.t. Heading w.r.t. North | -| 24 | EV_POS + EV_YAW | Heading w.r.t. Heading w.r.t. external vision frame | -| 72 | EV_POS + ROTATE_EV | Heading w.r.t. Heading w.r.t. North | -| 272 | EV_VEL + EV_YAW | Heading w.r.t. Heading w.r.t. external vision frame | -| 280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. Heading w.r.t. external vision frame | -| 328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. Heading w.r.t. North | - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. The EKF considers uncertainty in the visual pose estimate. This uncertainty information can be sent via the covariance fields in the MAVLink [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) message or it can be set through the parameters [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE), [EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) and [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE). You can choose the source of the uncertainty with [EKF2_EV_NOISE_MD](../advanced_config/parameter_reference.md#EKF2_EV_NOISE_MD). @@ -400,7 +388,7 @@ For this reason, no claims for accuracy relative to the legacy combination of `a EKF outputs, states and status data are published to a number of uORB topics which are logged to the SD card during flight. The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/ecl_ekf/process_logdata_ekf.py). To use this script file, cd to the `Tools/ecl_ekf` directory and enter `python process_logdata_ekf.py `. This saves performance metadata in a csv file named **.mdat.csv** and plots in a pdf file named `.pdf`. @@ -408,14 +396,14 @@ Multiple log files in a directory can be analysed using the [batch\_process\_log ### Output Data -* Attitude output data is found in the [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_attitude.msg) message. -* Local position output data is found in the [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_local_position.msg) message. -* Global \(WGS-84\) output data is found in the [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_global_position.msg) message. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### States -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). The index map for states\[32\] is as follows: +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for states\[32\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\) @@ -429,7 +417,7 @@ Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilo ### State Variances -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). The index map for covariances\[28\] is as follows: +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for covariances\[28\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\)^2 @@ -443,10 +431,10 @@ Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Aut ### Observation Innovations & Innovation Variances -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg). The messages all have the same field names/types (but different units). +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). The messages all have the same field names/types (but different units). :::note -The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -506,7 +494,7 @@ The index map is as follows: ### EKF Errors -The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### Observation Errors @@ -517,7 +505,7 @@ There are two categories of observation faults: Both of these can result in observation data being rejected for long enough to cause the EKF to attempt a reset of the states using the sensor observations. All observations have a statistical confidence checks applied to the innovations. The number of standard deviations for the check are controlled by the `EKF2_*_GATE` parameter for each observation type. -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio`: ratio of the largest magnetometer innovation component to the innovation test limit * `vel_test_ratio`: ratio of the largest velocity innovation component to the innovation test limit @@ -526,11 +514,11 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio`: ratio of the true airspeed innovation to the innovation test limit * `hagl_test_ratio`: ratio of the height above ground innovation to the innovation test limit -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS Quality Checks -The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF Numerical Errors @@ -541,7 +529,7 @@ To prevent this, every covariance and state update step contains the following e * If the innovation variance is less than the observation variance (this requires a negative state variance which is impossible) or the covariance update will produce a negative variance for any of the states, then: * The state and covariance update is skipped * The corresponding rows and columns in the covariance matrix are reset - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * State variances (diagonals in the covariance matrix) are constrained to be non-negative. * An upper limit is applied to state variances. * Symmetry is forced on the covariance matrix. @@ -552,8 +540,8 @@ After re-tuning the filter, particularly re-tuning that involve reducing the noi The most common cause of EKF height diverging away from GPS and altimeter measurements during flight is clipping and/or aliasing of the IMU measurements caused by vibration. If this is occurring, then the following signs should be evident in the data -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[2\] and [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[5\] will both have the same sign. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio will be greater than 1.0 +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 The recommended first step is to ensure that the autopilot is isolated from the airframe using an effective isolation mounting system. An isolation mount has 6 degrees of freedom, and therefore 6 resonant frequencies. As a general rule, the 6 resonant frequencies of the autopilot on the isolation mount should be above 25Hz to avoid interaction with the autopilot dynamics and below the frequency of the motors. @@ -586,16 +574,16 @@ The most common causes of position divergence are: Determining which of these is the primary cause requires a methodical approach to analysis of the EKF log data: -* Plot the velocity innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio -* Plot the horizontal position innovation test ratio - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).pos\_test\_ratio -* Plot the height innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio -* Plot the magnetometer innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).mag\_test\_ratio -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* Plot the IMU delta angle state estimates - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).states\[10\], states\[11\] and states\[12\] +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * Plot the EKF internal high frequency vibration metrics: - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] During normal operation, all the test ratios should remain below 0.5 with only occasional spikes above this as shown in the example below from a successful flight: @@ -629,7 +617,7 @@ Bad yaw alignment causes a velocity test ratio that increases rapidly when the v ### Determination of Poor GPS Accuracy -Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS glitch - test ratios](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/de/assembly/cable_wiring.md b/de/assembly/cable_wiring.md index 851ba30a9d770..caae58b5506df 100644 --- a/de/assembly/cable_wiring.md +++ b/de/assembly/cable_wiring.md @@ -3,7 +3,7 @@ Cables are a common source of [electromagnetic interference (EMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference), which can cause problems including flyways, "toilet bowling" and generally poor flight. These problems can be avoided by using appropriate cabling in the UAV. The following basic concepts should be kept in mind when designing drone cabling: -* High-Power and signal cables should be separated as much as is practical +* High-Power and signal cables should be separated as much as is practical. * Cable lengths should be the minimum needed to enable easy handling of wired components. The wire tension should be adequate to survive possible airframe deformations even in a crash landing (wires must not be the first thing to break). * Cable loops to reduce excess length should be avoided - use shorter lengths! * For digital signals you can decrease the baudrate to reduce radiated energy and increase the robustness of data transfer. This means that you may be able to use longer cables when high data rates are not needed. @@ -15,7 +15,7 @@ Signalling protocols have different characteristics, and therefore the cables us This topic provides specific guidance of cabling for different signalling protocols, along with the [colour coding](#cable-colour-coding) used by a number different drone hardware vendors. -### I²C cables +### I2C cables The [I2C bus](https://en.wikipedia.org/wiki/I%C2%B2C) is widely used for connecting sensors. Cable colors from several vendors are specified in following table. diff --git a/de/assembly/mount_gps_compass.md b/de/assembly/mount_gps_compass.md index 64711c417340b..fc3b946b88c11 100644 --- a/de/assembly/mount_gps_compass.md +++ b/de/assembly/mount_gps_compass.md @@ -8,9 +8,9 @@ The diagram below shows the heading marker on the Pixhawk 4 and compass. ## Compass Orientation -The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#orientation-definition). +The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. :::warning You must mount the compass in a supported orientation! diff --git a/de/assembly/quick_start_cube.md b/de/assembly/quick_start_cube.md index 330f2240db4e8..1ae8517c6db3e 100644 --- a/de/assembly/quick_start_cube.md +++ b/de/assembly/quick_start_cube.md @@ -163,7 +163,7 @@ Motors/servos are connected to the **MAIN** and **AUX** ports in the order speci This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/de/assembly/quick_start_durandal.md b/de/assembly/quick_start_durandal.md index 6354b25628c17..7319df6f3a7e7 100644 --- a/de/assembly/quick_start_durandal.md +++ b/de/assembly/quick_start_durandal.md @@ -1,6 +1,6 @@ # Durandal Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the Holybro [Durandal](../flight_controller/durandal.md)® flight controller and connect its most important peripherals. @@ -57,7 +57,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -86,14 +86,10 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: - ### Pixhawk 4 Power Module (PM07) -The [Pixhawk 4 Power Module (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Power](../assembly/quick_start_pixhawk4.md#power) documentation. @@ -109,7 +105,7 @@ It has the following characteristics/limits: - 80mm XT60 connector wire (1) :::note -See also [PM07 Quick Start Guide](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro). +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### Battery Configuration @@ -201,7 +197,7 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Durandal Overview](../flight_controller/durandal.md) -- [Durandal Technical Data Sheet](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal Pinouts](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal Schematics) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/de/assembly/quick_start_holybro_pix32_v5.md b/de/assembly/quick_start_holybro_pix32_v5.md index 22608e9b017b3..7a9d1e14f0b1f 100644 --- a/de/assembly/quick_start_holybro_pix32_v5.md +++ b/de/assembly/quick_start_holybro_pix32_v5.md @@ -1,6 +1,6 @@ # Pix32 v5 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® flight controller and connect its most important peripherals. @@ -9,7 +9,7 @@ This quick start guide shows how to power the [Holybro Pix32v5](../flight_contro ## Unboxing -Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html) (UBLOX NEO-M8N). +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). The content of the box with the *PM02 V3* power module and *Pixhawk 4 GPS/Compass* is shown below. The box also includes a pinout guide and power module instructions, and Base board (not shown on the schematic below). @@ -22,7 +22,7 @@ The image below shows how to connect the most important sensors and peripherals ![Pix32 v5 Wiring Overview](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -More information about available ports can be found [here](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf). +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## Mount and Orient Controller @@ -42,7 +42,7 @@ Do not use vibration-isolation foam to mount the controller (double sided tape i ## GPS + Compass + Buzzer + Safety Switch + LED -Pix32 v5 is designed to work well with the [Pixhawk 4 GPS module](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. ![Pix32 v5 with GPS](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -59,7 +59,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -87,9 +87,6 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: ### Battery Configuration @@ -155,7 +152,7 @@ The wiring and configuration of optional/less common components is covered withi ## Pinouts -[Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## Configuration @@ -168,8 +165,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pix32 v5 Overview](../flight_controller/holybro_pix32_v5.md) (Overview page) -- [Pix32 v5 Technical Data Sheet](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 Base Schematic Diagram](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 Base Schematic Diagram](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 Base Components Layout](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). diff --git a/de/assembly/quick_start_pixhawk.md b/de/assembly/quick_start_pixhawk.md index 934b8dc8216ac..f9fe3b74e4952 100644 --- a/de/assembly/quick_start_pixhawk.md +++ b/de/assembly/quick_start_pixhawk.md @@ -92,7 +92,7 @@ Telemetry radios may be used to communicate and control a vehicle in flight from The mappings between MAIN/AUX output ports and motor/servos for all supported air and ground frames are listed in the [Airframe Reference](../airframes/airframe_reference.md). -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/de/assembly/quick_start_pixhawk4.md b/de/assembly/quick_start_pixhawk4.md index ff8098ce028b6..01968a01f6540 100644 --- a/de/assembly/quick_start_pixhawk4.md +++ b/de/assembly/quick_start_pixhawk4.md @@ -1,6 +1,6 @@ # Pixhawk 4 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. ::: +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 4](../flight_controller/pixhawk4.md)® flight controller and connect its most important peripherals. @@ -146,7 +146,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/de/assembly/quick_start_pixhawk4_mini.md b/de/assembly/quick_start_pixhawk4_mini.md index 1bc5028e1ae33..e553783132048 100644 --- a/de/assembly/quick_start_pixhawk4_mini.md +++ b/de/assembly/quick_start_pixhawk4_mini.md @@ -1,6 +1,6 @@ # *Pixhawk 4 Mini* Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [*Pixhawk® 4 Mini*](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. @@ -126,7 +126,7 @@ Motors/servos are connected to the **MAIN OUT** ports in the order specified for This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/de/assembly/quick_start_pixhawk5x.md b/de/assembly/quick_start_pixhawk5x.md index 4e19cc0ad2570..8b839f7434a42 100644 --- a/de/assembly/quick_start_pixhawk5x.md +++ b/de/assembly/quick_start_pixhawk5x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 5x Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk® 5X](../flight_controller/pixhawk5x.md) flight controller and connect its most important peripherals. @@ -35,7 +35,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk5X Standard Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -101,7 +101,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) @@ -121,7 +121,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: @@ -133,7 +133,7 @@ The wiring and configuration of optional/less common components is covered withi ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Configuration @@ -146,9 +146,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 Doc Overview page) -- [Pixhawk 5X Overview & Specification](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) -- [Pixhawk 5X Pinouts](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) -- [PM02D Power Module Manual](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (Holybro) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5X reference design pinout](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/de/assembly/quick_start_pixhawk6c.md b/de/assembly/quick_start_pixhawk6c.md index 1dd81a01d5695..0b273a91108fe 100644 --- a/de/assembly/quick_start_pixhawk6c.md +++ b/de/assembly/quick_start_pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -11,13 +11,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -34,7 +27,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -97,7 +90,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/de/assembly/quick_start_pixhawk6x.md b/de/assembly/quick_start_pixhawk6x.md index 55f80772bb098..f81e2dee9ae4f 100644 --- a/de/assembly/quick_start_pixhawk6x.md +++ b/de/assembly/quick_start_pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -40,7 +40,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/de/can/README.md b/de/can/README.md index deb8f145ec975..df0d9c89bb8b4 100644 --- a/de/can/README.md +++ b/de/can/README.md @@ -8,8 +8,7 @@ PX4 supports two software protocols for communicating with CAN devices: - [Cyphal](https://opencyphal.org): PX4 support is a "work in progress". Cyphal is a much newer protocol which allows more flexibility and configuration, especially on larger and more complex vehicles. It has not yet seen significant adoption. :::note -Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. -In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -18,9 +17,9 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). -Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -28,7 +27,7 @@ The following diagram shows an example of a CAN bus connecting a flight controll The diagram does not show any power wiring. Refer to your manufacturer instructions to confirm whether components require separate power or can be powered from the CAN bus itself. -For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -38,7 +37,7 @@ Other (non-Pixhawk compatible) devices may use different connectors. However, as ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. ## Firmware diff --git a/de/companion_computer/README.md b/de/companion_computer/README.md index b98ad351061b7..135a690fa2408 100644 --- a/de/companion_computer/README.md +++ b/de/companion_computer/README.md @@ -22,7 +22,7 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). @@ -45,8 +45,8 @@ The companion computer needs to run software that communicates with the flight c Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -61,7 +61,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. See [Ethernet Setup](../advanced_config/ethernet_setup.md) for instructions. @@ -76,5 +75,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/de/companion_computer/companion_computer_peripherals.md b/de/companion_computer/companion_computer_peripherals.md index ab9fed95ee060..39e3b3e5e0bbf 100644 --- a/de/companion_computer/companion_computer_peripherals.md +++ b/de/companion_computer/companion_computer_peripherals.md @@ -9,7 +9,7 @@ Typical companion computer work with Pixhawk requires a companion link to transm There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/xrce_dds.md). ::: ### FTDI Devices diff --git a/de/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/de/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 939fcab99ca0d..b4f5e1f428042 100644 --- a/de/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/de/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -6,7 +6,7 @@ The [Holybro Pixhawk RPi CM4 Baseboard](http://www.holybro.com/product/pixhawk-r The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -54,7 +54,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/de/companion_computer/pixhawk_companion.md b/de/companion_computer/pixhawk_companion.md index 383e998761a70..a29f841284ba0 100644 --- a/de/companion_computer/pixhawk_companion.md +++ b/de/companion_computer/pixhawk_companion.md @@ -21,9 +21,11 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/XRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the XRCE-DDS client on `TELEM2`(see [XRCE-DDS > Starting the client](../middleware/xrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,7 +35,7 @@ If you're connecting using a serial port, wire the port according to the instruc Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. The `TELEM2` to FTDI wiring map is shown below. | TELEM2 | | FTDI |   | | ------ | --------- | ---- | ---------------------- | @@ -44,7 +46,9 @@ The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring b | 5 | RTS (out) | 2 | FTDI CTS (brown) (in) | | 6 | GND | 1 | FTDI GND (black) | -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. diff --git a/de/companion_computer/pixhawk_rpi.md b/de/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..e6e4a305e82cd --- /dev/null +++ b/de/companion_computer/pixhawk_rpi.md @@ -0,0 +1,297 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +| PX4 TELEM2 Pin | RPi GPIO Pin | +| -------------- | ---------------------- | +| UART5_TX (2) | RXD (GPIO 15 - pin 10) | +| UART5_RX (3) | TXD (GPIO 14 - pin 8) | +| GND (6) | Ground (pin 6) | + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +| `TELEM2` | RPi GPIO | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| ![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) | + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +| Pins | Signal | Voltage | +| --------- | --------------- | ------- | +| 1 (Red) | VCC | +5V | +| 2 (Black) | UART5_TX (out) | +3.3V | +| 3 (Black) | UART5_RX (in) | +3.3V | +| 4 (Black) | UART5_CTS (in) | +3.3V | +| 5 (Black) | UART5_RTS (out) | +3.3V | +| 6 (Black) | GND | GND | + +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. Generally the other radio needs to be connected to the ground station USB port. If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. Note that ROS 2 versions target particular Ubuntu versions. We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). However we will install and use a simple developer MAVLink GCS called `mavproxy`. This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + XRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + +:::note +Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + +::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. In the next section we'll set up the both Pixhawk and RPi to use XRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and XRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [XRCE-DDS](../middleware/xrce_dds.md) pages cover the options for setting up the XRCE-DDS and ROS, focussing on ROS 2 "Foxy". This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + XRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [XRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#MAV_1_CONFIG) disable MAVLink on TELEM2 and enable the XRCE-DDS client on TELEM2, respectively. The `SER_TEL2_BAUD` rate sets the comms link data rate. +You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note +You will need to reboot the flight controller to apply any changes to these parameters. +::: + +1. Check that the [microdds_client](../modules/modules_system.md#microdds-client) module is now running. YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + microdds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +microdds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [XRCE-DDS > XRCE-DDS Agent Installation](../middleware/xrce_dds.md#xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/de/complete_vehicles/README.md b/de/complete_vehicles/README.md index 602d7e833158a..b10961b237e0c 100644 --- a/de/complete_vehicles/README.md +++ b/de/complete_vehicles/README.md @@ -45,7 +45,7 @@ They allow you to use parts that are known to work, and to fly a vehicle that is ::: * Multicopter - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/de/complete_vehicles/crazyflie2.md b/de/complete_vehicles/crazyflie2.md index ab019dae29017..5bcb4306a780d 100644 --- a/de/complete_vehicles/crazyflie2.md +++ b/de/complete_vehicles/crazyflie2.md @@ -36,7 +36,7 @@ The main hardware documentation is here: https://wiki.bitcraze.io/projects:crazy * [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck): contains an optical flow sensor to measure movements of the ground and a distance sensor to measure the distance to the ground. This will be useful for precise altitude and position control. * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## Flashing PX4 @@ -117,7 +117,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. :::note We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -161,6 +161,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these :::tip If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching *cfbridge* in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib. + ``` make venv ``` @@ -208,7 +209,7 @@ Since the onboard barometer is highly susceptible to wind disturbances created b ## Position Control -With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. +With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. :::note A ulog for flight in *Position* mode is available [here](https://logs.px4.io/plot_app?log=a0e68bf1-e905-410f-b828-f6146dba9d45). This can be used as a reference to compare your flight performance. @@ -252,6 +253,7 @@ To connect to Crazyflie 2.0 via MAVROS: - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/de/complete_vehicles/crazyflie21.md b/de/complete_vehicles/crazyflie21.md index 2f46f093be57e..dd91691428ec4 100644 --- a/de/complete_vehicles/crazyflie21.md +++ b/de/complete_vehicles/crazyflie21.md @@ -47,7 +47,7 @@ Useful peripheral hardware includes: * [Buzzer deck](https://store.bitcraze.io/collections/decks/products/buzzer-deck) Audio feedback on system events, like low battery or charging completed. * [Breakout deck](https://store.bitcraze.io/collections/decks/products/breakout-deck): Expansion board that gives you the ability to test new hardware easily without soldering. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): High speed onboard logging to a micro SD card -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Assemble Crazyflie 2.1 @@ -138,7 +138,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.1 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` diff --git a/de/complete_vehicles/holybro_kopis2.md b/de/complete_vehicles/holybro_kopis2.md index 28e4ee5f41773..9f0988ad067aa 100644 --- a/de/complete_vehicles/holybro_kopis2.md +++ b/de/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## Where to Buy The *Kopis 2* can be bought from a number of vendors, including: -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) In addition you will need: + - An RC transmitter. The *Kopis 2* can ship with an FrSky receiver or no receiver at all. - LiPo battery and charger. - FPV goggles if you want to fly FPV. There are many compatible options, including these ones from [Fatshark](https://www.fatshark.com/product-page/dominator-v3). You can also use DJI FPV goggles if you have the HDV version of the Kopis 2. diff --git a/de/complete_vehicles/intel_aero.md b/de/complete_vehicles/intel_aero.md index cf602e3c0c206..a8c747dde17c9 100644 --- a/de/complete_vehicles/intel_aero.md +++ b/de/complete_vehicles/intel_aero.md @@ -3,219 +3,5 @@ :::warning This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -PX4 v1.11 is the last release that supports this platform. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -The *Intel Aero Ready to Fly Drone*® is a UAV development platform. Part of this is the *Intel Aero Compute Board*, running Linux on a Quad-core CPU. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## Introduction - -The main documentation on the [official wiki](https://github.com/intel-aero/meta-intel-aero/wiki) explains how to setup, update and connect to the board, and how to do development on the Linux side. The instructions in this topic concentrate on updating the firmware on the microcontroller from a development tree. - -It's important to update to the latest image available since some instructions change between releases. You can check the BIOS and distro version by connecting to the board and running the following command: - -``` -get_aero_version.py -``` - -The instructions here are tested with the following version: - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Setup Intel Aero using Ubuntu - -In order to install Ubuntu on Intel Aero, the following equipment is needed: - -1. Power supply (battery or network cable) -1. Micro HDMI to HDMI cable to attach a monitor -1. Micro USB3 to USB2 female adapter -1. USB Hub to attach mouse and keyboard - -Follow the linked instructions from [Intel Aero wiki > Installing Ubuntu on Intel Aero](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero): - -1. [Upgrade Yocto first](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (optional) -1. [OS](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [Intel Aero Repository](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -As soon as the steps under *Intel Aero Repository* (above) are completed the Aero kernel is installed. From this point forwards, always boot using this kernel. - -Follow the instructions to flash the BIOS, FPGA and Flight Controller. Open the MAVLink router config file: **/etc/mavlink-router/main.conf** - -Include the laptop IP as a UDP Endpoint by adding the following lines to the configuration file. The IP address must be set to the one of the laptop. To find the IP address of the laptop, execute: `ifconfig`. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -After all those steps are completed, the drone should automatically connect to *QGroundControl* running on the laptop. - -Next install ROS, by following the [instructions here](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS). - -### RealSense Camera - -1. RealSense SDK - - Follow the steps to install the RealSense SDK listed on the [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk). When cloning the repository, the legacy branch needs to be used for the R200 model. If the D435 or D415 is used, the master branch needs to be cloned. All other steps are the same and the branches can be just switched back and forth if the camera is changed. - - If the RealSense R200 is used, it can already be started over a ROS node using: - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - If any D400 series camera is used, follow the next step to install a different ROS wrapper. - -1. ROS Wrapper for D400 series RealSense - - Follow the instructions in [Install Intel RealSense ROS from Sources](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) to install a catkin workspace and clone the RealSense software. - - Install the udev rules using: - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - Now the RealSense can be started over a ROS node using: - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### Obstacle Avoidance - -To run the PX4 obstacle avoidance software, install catkin first: - -``` -apt install python-catkin-tools -``` - -Create a catkin workspace and initialize it. Then clone the avoidance repository into the source space, or use a symbolic link to the source space. Build the package and start the ROS node using: - -``` -catkin build local_planner - -roslaunch local_planner local_planner_aero.launch -``` - -## Flashing PX4 software - -After setting up the PX4 development environment, follow these steps update the PX4 software: - -1. Do a full update of all software on the vehicle (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release) -1. Grab the [Firmware](https://github.com/PX4/PX4-Autopilot) -1. Compile with `make intel_aerofc-v1_default` -1. Configure the target hostname - - If your system resolves link local names you don't have to do anything and you can skip this step. You can test it by trying to ssh into `intel-aero.local` after connecting to it either via WiFi or USB: - - ``` - ssh root@intel-aero.local - ``` - - If it doesn't work you can try giving the IP that will be used by the upload script: - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. Upload with: `make intel_aerofc-v1_default upload` - - -## Connecting QGroundControl via Network - -1. Make sure you are connected to the board with WiFi or USB Network -1. SSH to the board and make sure MAVLink forwarding runs. By default it automatically starts when booting. It can be started manually with: - ``` - systemctl start mavlink-router - ``` -1. Start *QGroundControl* and it should automatically connect. -1. Instead of starting *QGroundControl*, you can open a [MAVLink shell](../debug/mavlink_shell.md) using the script: `./Tools/mavlink_shell.py 0.0.0.0:14550` - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## Connecting LeddarOne Range Finder - -Connect the [LeddarOne](../sensor/leddar_one.md) to the Aero telemetry port. The pinout for the LeddarOne and Aero telemetry port (TELEM1) are as follows. - -| Pin | Aerofc TELEMETRY | LeddarOne | -| --- | ---------------- | --------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 3 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -To enable the rangefinder set the [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) parameter to TELEM1 and reboot the board (instructions for setting parameters [available here](../advanced_config/parameters.md)). - - -## Connecting Lidar Lite Range Finder - -:::warning -The Lidar Lite is not recommended for use with *Intel Aero Ready to Fly Drone*® due to measurements spikes. -::: - -The following instructions are for a [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3 connected via I2C. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. The pinout for both of them can be found below. We recommend using the TELEMETRY port as it is not being used. If your TELEMETRY port is already occupied, a splitter can be used to share the I2C connection (works on any I2C port). Check the images below for the splitter setup. - -In addition it is recommended to use a electrolytic capacitor for the Lidar Lite I2C connection to reduce spikes in the distance readings (see [here](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) on page 3). - -The pinout for the Lidar Lite V3 and Aero telemetry port are as follows - -| Pin | Aerofc TELEMETRY | Lidar Lite V3 | -| --- | ---------------- | ------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 3 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| pin | Aerofc COMPASS | Lidar Lite V3 | -| --- | -------------- | ------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 3 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C splitter](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero LidarLite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Using Optical Flow on the Aero - -The *Intel Aero Ready to Fly Drone*® comes with a preinstalled optical flow binary on the compute board (Linux OS version 1.6 or higher), which enables it to stably fly based on optical flow velocity estimation. In order to use optical flow, a range sensor has to be installed first (see above). - -To use the optical flow, run the following command in a console on the vehicle's compute board: -``` -systemctl start aero-optical-flow -``` - -If you want to start the optical flow binary at boot, use -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -In addition, the following parameter values should be set in the flight controller. - -| Parameter | Value | -| -------------------------------------------------------------------------- | ----- | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 | -| [EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 | -| [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 | diff --git a/de/complete_vehicles/px4_vision_kit.md b/de/complete_vehicles/px4_vision_kit.md index 402f18b940c6e..074194332ba52 100644 --- a/de/complete_vehicles/px4_vision_kit.md +++ b/de/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision Autonomy Development Kit -The [*PX4 Vision Autonomy Development Kit*](http://www.holybro.com/product/px4-vision/) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![Overview](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -14,8 +14,8 @@ The guide explains the minimal additional setup required to get the vehicle read ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://shop.holybro.com/px4-vision_p1225.html?) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## Px4 Vision Guide Content - [Warnings & Notifications](#warnings-and-notifications) @@ -24,7 +24,7 @@ The guide explains the minimal additional setup required to get the vehicle read - [First-time Setup](#first-time-setup) - [Fly the Drone with avoidance](#fly-the-drone-with-avoidance) - [Development using the Kit](#development-using-the-kit) -- [Px4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [Other Development Resources](#other-development-resources) - [How to get Technical Support](#how-to-get-technical-support) @@ -52,8 +52,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). The PX4 Vision DevKit contains following components: - Core Components: @@ -340,7 +339,7 @@ Modification of PX4 code is not *needed* to meet most computer vision use cases. ## PX4 Vision Carrier Board Pinouts -The Carrier board pinouts can be download from [Holybro's website](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf). +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). ## Other Development Resources @@ -350,7 +349,6 @@ The Carrier board pinouts can be download from [Holybro's website](http://www.ho - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 Avoidance software/documentation](https://github.com/PX4/PX4-Avoidance) - [Path Planning Interface](../computer_vision/path_planning_interface.md) -- [Px4 Vision Carrier Board Pinouts](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) ## How to get Technical Support diff --git a/de/computer_vision/visual_inertial_odometry.md b/de/computer_vision/visual_inertial_odometry.md index dff8c7622ba99..b5809914f90d8 100644 --- a/de/computer_vision/visual_inertial_odometry.md +++ b/de/computer_vision/visual_inertial_odometry.md @@ -87,7 +87,7 @@ The following parameters must be set to use external position information with E | Parameter | Setting for External Position Estimation | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | Set *vision position fusion*, *vision velocity fusion*, *vision yaw fusion* and *external vision rotation* according to your desired fusion model. | +| [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. | | [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. | | [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | Set to the difference between the timestamp of the measurement and the "actual" capture time. For more information see [below](#tuning-EKF2_EV_DELAY). | | [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | Set the position of the vision sensor with respect to the vehicles body frame. | diff --git a/de/concept/architecture.md b/de/concept/architecture.md index 9bccae2296fb2..4cc9575cd803b 100644 --- a/de/concept/architecture.md +++ b/de/concept/architecture.md @@ -103,7 +103,7 @@ There are 2 different ways that a module can be executed: The advantage of running modules on a work queue is that it uses less RAM, and potentially results in fewer task switches. The disadvantages are that *work queue tasks* are not allowed to sleep or poll on a message, or do blocking IO (such as reading from a file). Long-running tasks (doing heavy computation) should potentially also run in a separate task or at least a separate work queue. :::note -Tasks running on a work queue do not show up in [`top`](../modules/modules_command.html#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. ::: ### Background Tasks diff --git a/de/concept/custom_mixer_payload.md b/de/concept/custom_mixer_payload.md deleted file mode 100644 index ce2cbfc04c64e..0000000000000 --- a/de/concept/custom_mixer_payload.md +++ /dev/null @@ -1,90 +0,0 @@ -# Custom Payload Mixers - -This topic shows how to add a custom [mixer](../concept/mixing.md) for programmatically controlling a custom payload (e.g., an electromagnetic gripper). - -The topic is intended for developers who want to support payload types that do not have existing control group definitions (e.g. gimbals have a control group, but grippers do not). You should already have read [Mixing and Actuators](../concept/mixing.md). - - -## Payload Mixer Example - -A payload mixer is just a [summing mixer](../concept/mixing.md#summing_mixer) that maps any of the function values from [Control Group #6 (First Payload)](../concept/mixing.md#control_group_6) to a particular output. You can then publish uORB topics to the selected control group function and their value will be mapped to the specified output. - -For this example, we'll create a custom mixer based on the *RC passthrough mixer* ([pass.aux.mix](https://github.com/PX4/PX4-Autopilot/blob/master/ROMFS/px4fmu_common/mixers/pass.aux.mix)). This mixer is commonly loaded into the AUX PWM ports on large multicopters). It passes through the values of 4 user-defined RC channels (set using the [RC_MAP_AUXx/RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_AUX1) parameters) to the first four outputs on the AUX PWM output. - -``` -# Manual pass through mixer for servo outputs 1-4 - -# AUX1 channel (select RC channel with RC_MAP_AUX1 param) -M: 1 -S: 3 5 10000 10000 0 -10000 10000 - -# AUX2 channel (select RC channel with RC_MAP_AUX2 param) -M: 1 -S: 3 6 10000 10000 0 -10000 10000 - -# AUX3 channel (select RC channel with RC_MAP_AUX3 param) -M: 1 -S: 3 7 10000 10000 0 -10000 10000 - -# FLAPS channel (select RC channel with RC_MAP_FLAPS param) -M: 1 -S: 3 4 10000 10000 0 -10000 10000 -``` - -:::note -The file defines four [summing mixers](../concept/mixing.md#summing_mixer) (for four outputs). -- `M: 1` indicates an output that is defined by one control input (the following `S` line). -- `S: 3`_`n`_ indicates that the input is the nth input of [Control Group 3 (Manual Passthrough)](../concept/mixing.md#control-group-3-manual-passthrough). So for `S: 3 5` the input is called "RC aux1" (this maps to the RC channel set in parameter `RC_MAP_AUX1`). -- The section declaration order defines the order of the outputs when assigned to a physical bus (e.g. the third section might be assigned to AUX3). -::: - -Start by copying the mixer file and putting it onto the SD Card at: **/etc/mixers/pass.aux.mix** (see [Mixing and Actuators > Loading a Custom Mixer](../concept/mixing.md#loading_custom_mixer). - -Remove the first section with a payload control group function input: -- Change this: - ``` - # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param) - M: 1 - S: 3 5 10000 10000 0 -10000 10000 - ``` -- To: - ``` - # Payload 1 (control group 6) channel 1 - M: 1 - S: 6 1 10000 10000 0 -10000 10000 - ``` - -Because this output is in the first position in the file it will map to the first AUX PWM output (unless UAVCAN is enabled). This output will now respect updates to the payload control group (6) output 1. - -Control group 6 will need to be defined in the code as well (it is missing!): -- Add `actuator_controls_6` to the TOPICS definition in [/msg/actuator_controls.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/actuator_controls.msg#L17): - ``` - # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6 - ``` -- Increase `NUM_ACTUATOR_CONTROL_GROUPS` to 7 in the same file. -- Subscribe to the additional control group in the output library ([/src/lib/mixer_module/mixer_module.cpp#L52](https://github.com/PX4/PX4-Autopilot/blob/master/src/lib/mixer_module/mixer_module.cpp#L52)) in the `MixingOutput` constructor. It should look like this: - ``` - {&interface, ORB_ID(actuator_controls_0)}, - {&interface, ORB_ID(actuator_controls_1)}, - {&interface, ORB_ID(actuator_controls_2)}, - {&interface, ORB_ID(actuator_controls_3)}, - ``` - ``` - {&interface, nullptr}, - {&interface, nullptr}, - {&interface, ORB_ID(actuator_controls_6)}, - ``` - -Putting an output on group 6 works by publishing actuator control group 6. First you have to create the publication. This should happen once when the PX4 module is initialized (look for places where this pattern is already being used): -``` -uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_6)}; -``` - -Then you need to publish the first message: -``` -actuator_controls_s _act_controls{}; -_act_controls.timestamp = hrt_absolute_time(); -// set the first output to 50% positive (this would rotate a servo halfway into one of its directions) -_act_controls.control[0] = 0.5f; -_actuator_controls_pub.publish(_act_controls); -``` diff --git a/de/concept/dronecode_architecture.md b/de/concept/dronecode_architecture.md deleted file mode 100644 index d7442fdd7d062..0000000000000 --- a/de/concept/dronecode_architecture.md +++ /dev/null @@ -1,13 +0,0 @@ -# PX4 Platform Hardware/Software Architecture - -The diagram below provides a forward-looking high level overview of a full PX4 onboard and offboard stack. The left hand side shows one possible hardware configuration with a *flight controller* (light blue) connected to a *perception computer* (dark blue) via [RTPS](../middleware/micrortps.md). The perception computer provides vision control and object avoidance using a camera sensor array, and has a separate payload camera. - -The right hand side of the diagram shows the end-to-end software stack. The stack "approximately" aligns horizontally with the hardware parts of the diagram, and is colour-coded to show which software is running on the flight controller and which on the companion computer. - -:::note -The [PX4 Architectural Overview](../concept/architecture.md) provides information about the flight stack and middleware. Offboard APIs are covered in [ROS](../ros/README.md) and [MAVSDK](https://mavsdk.mavlink.io/develop/en/index.html). -::: - -![PX4 Platform architecture](../../assets/diagrams/dronecode_platform_architecture.jpg) - - diff --git a/de/config/README.md b/de/config/README.md index 1cadef29d1d09..bc6a3fd81a405 100644 --- a/de/config/README.md +++ b/de/config/README.md @@ -36,11 +36,11 @@ The video below shows the calibration process in detail (this uses an older vers ## Advanced Configuration -If your [selected airframe configuration](../config/airframe.md) is a *specific vehicle model* (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4)) then it may benefit from fine tuning, but this is not generally required. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. If you're using a new airframe, a "generic" airframe, significantly modifying an airframe, or using less common sensors then see: -* [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. -* [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). +- [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. +- [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). ## Support diff --git a/de/config/actuators.md b/de/config/actuators.md index 0ce4facebab79..f7d557bc483d1 100644 --- a/de/config/actuators.md +++ b/de/config/actuators.md @@ -43,11 +43,7 @@ Core geometry concepts and the configuration for a number of different frames ar #### Motor Geometry: Multicopter -The image below shows the geometry setup for a multicopter frame with and without advanced settings. - -:::note -Specifically this is the motor geometry for a [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) muticopter. Other multicopters frames are configured similarly. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![Geometry MC (QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -68,7 +64,7 @@ The `X`, `Y`, `Z` positions are in [FRD coordinate frame, relative to the _centr #### Motor Geometry: VTOL Quadrotor Tailsitter -The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). Motors have the same configuration fields as for the [multicopter geometry](#motor-geometry-multicopter). @@ -86,7 +82,7 @@ The motor geometry for a [Generic Quadplane VTOL Tiltrotor](../airframes/airfram #### Motor Geometry: Standard VTOL -The motor geometry for a [Generic Standard Quadplane VTOL Tiltrotor](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![Geometry motor: standard vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -124,27 +120,46 @@ Note that you will need to also ensure that the ESC associated with bidirectiona ### Control Surfaces Geometry -The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). - -An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. +The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. ![Control Surface Setup Example](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +Only the most common settings are displayed by default. Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + The fields are: - `Control Surfaces`: The number of control surfaces (set this first!) - `Type`: The type of each control surface: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder`, `Left Elevon`, `Right Elevon`, `Left V-Tail`, `Right V-Tail`, `Left Flap`, `Right Flap`, `Airbrakes`, `Custom`. -- `Roll scale`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Pitch scale`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Yaw scale`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). - `Trim`: An offset added to the actuator so that it is centered without input. This might be determined by trial and error. -- `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - The setting limits the rate of change of an actuator (if not specified then no rate limit is applied). It is intended for actuators that may be damaged if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle. - For example, a setting of 2.0 means that the motor/servo will not be commanded to move from 0 to 1 at a rate that completes the operation in less than 2 seconds (in case of reversible motors, the range is -1 to 1). -- `Lock control surfaces in hover`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `Enabled`: Most vehicles do not use control surfaces in hover. Use this setting to lock them so that they don't affect vehicle dynamics. - `Disabled`: Set this for vehicles that use control surfaces in hover, such as the duo tailsitter (which uses elevons for pitch and yaw control). It should also be set for vehicles that use control surfaces to provide additional stabilization in hover mode when moving at speed or in high winds. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### Actuator Roll, Pitch, and Yaw Scaling @@ -268,7 +283,7 @@ Functions include: - `Constant_Max`: Output is set to constant maximum value (+1). - `Motor 1` to `Motor 12`: Output is indicated motor. Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. - `RC Roll`: Output is passthrough roll from RC ([RC_MAP_ROLL](../advanced_config/parameter_reference.md#RC_MAP_ROLL) maps an RC channel to this output). An RC channel is mapped to the output using . @@ -276,7 +291,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/de/config/autotune.md b/de/config/autotune.md index 0d05a09869018..1619e8b57386e 100644 --- a/de/config/autotune.md +++ b/de/config/autotune.md @@ -2,7 +2,7 @@ Auto-tuning automates the process of tuning the PX4 rate and attitude controllers, which are the most important controllers for stable and responsive flight (other tuning is more "optional"). It is currently enabled for multicopter, fixed wing, and hybrid VTOL fixed wing vehicles. -Tuning only needs to be done once, and is recommended unless unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning Auto-tuning is performed while flying. The airframe must fly well enough handle moderate disturbances, and should be closely attended: @@ -86,10 +86,10 @@ Additional notes: * slow oscillations (1 oscillation per second or slower): this often occurs on large platforms and means that the attitude loop is too fast compared to the rate loop. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * fast oscillations (more than 1 oscillation per second): this is because the gain of the rate loop is too high. - **Multicopter:** decrease `MC_[ROLL|PITCH|YAW]RATE_K` by steps of 0.02 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### The auto-tuning sequence fails diff --git a/de/config/battery.md b/de/config/battery.md index 1c4e10ab9d90c..f1db469506b9f 100644 --- a/de/config/battery.md +++ b/de/config/battery.md @@ -185,7 +185,7 @@ A typical value is 5mΩ per cell but this can vary with discharge current rating This load compensation method estimates the load based on the total thrust that gets commanded to the motors. -:::caution +:::warning This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. Use [Current-based Load Compensation](#current_based_load_compensation) instead if your vehicle has a current sensor. ::: diff --git a/de/config/compass.md b/de/config/compass.md index a5d0858ac0e72..6667c2445f08d 100644 --- a/de/config/compass.md +++ b/de/config/compass.md @@ -58,9 +58,33 @@ Notes: - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. This can also be used to change the relative priority of a compass. + + ## Further Information -* [Peripherals > GPS & Compass > Compass Configuration](../gps_compass/README.md#compass-configuration) -* [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) -* [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) + diff --git a/de/config/flight_controller_orientation.md b/de/config/flight_controller_orientation.md index 3d85790184774..cbbcc721812fe 100644 --- a/de/config/flight_controller_orientation.md +++ b/de/config/flight_controller_orientation.md @@ -27,7 +27,9 @@ To set the orientations: 1. Start *QGroundControl* and connect the vehicle. 1. Select the **Gear** icon (Vehicle Setup) in the top toolbar and then **Sensors** in the sidebar. -1. Select the **Set Orientations** button. +1. Select the **Set Orientations** button. + + 1. Select the **AutoPilot Orientation** (as [calculated above](#calculating-orientation)). diff --git a/de/config/flight_mode.md b/de/config/flight_mode.md index 951720a6457f2..6d6663d746f1a 100644 --- a/de/config/flight_mode.md +++ b/de/config/flight_mode.md @@ -83,7 +83,7 @@ On the FrSky Taranis this process involves assigning a "logical switch" to each The video below shows how this is done with the *FrSky Taranis* transmitter.@https://youtu.be/TFEjEQZqdVA -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## Further Information diff --git a/de/config/motors.md b/de/config/motors.md deleted file mode 100644 index 947d1904b1a78..0000000000000 --- a/de/config/motors.md +++ /dev/null @@ -1,27 +0,0 @@ -# Motor/Servo Checks - -:::note -This section is being replaced by an [Actuators](../config/actuators.md) configuration screen. -::: - -After the airframe is setup and configured you should validate the motor assignment and spin direction, and the servo response. This can be done in *QGroundControl*, under the [Vehicle Setup > Motors](https://docs.qgroundcontrol.com/master/en/SetupView/Motors.html) tab. - -Note the following PX4-specific behaviour: -- If a safety button is used, it must be pressed before motor testing is allowed. -- The kill-switch can still be used to stop motors immediately. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable motor testing. -- On boards with an IO, only the MAIN pins can be tested. -- On the shell, [motor_test](../modules/modules_command.md#motor-test) can be used as well, which has additional options. - -If one or more of the motors do not turn in the correct direction according to the configured [airframe](../airframes/airframe_reference.md), they must be reversed. There are several options: -- If using ESCs that support [DShot](../peripherals/dshot.md) you can reverse the direction via [DShot commands](../peripherals/dshot.md#commands). -- Swap 2 of the 3 motor cables (it does not matter which ones). :::note -If motors are not connected via bullet-connectors, re-soldering is required (this is a reason, among others, to prefer DShot ESCs). -::: - -The following additional checks should be performed to validate that the vehicle is setup correctly: -1. With propellers still removed, switch to [Stabilised mode](../flight_modes/manual_stabilized_mc.md) (Multicopter) or [Manual mode](../flight_modes/manual_fw.md) (Fixed Wing) and arm the vehicle. -1. Increase the throttle a little (so the vehicle does not automatically disarm) and check that the motors respond to throttle changes. -1. Check that all motors spin at minimum throttle. -1. If the vehicle has ailerons, check if they are responding in the right directions when giving roll/pitch stick input commands. - diff --git a/de/config/safety.md b/de/config/safety.md index 3f0f8239da113..6e2a5d6b27d8c 100644 --- a/de/config/safety.md +++ b/de/config/safety.md @@ -22,7 +22,7 @@ The list below shows the set of all failsafe actions, ordered in increasing seve | Disarm | Stops the motors immediately. | | [Flight termination](../advanced_config/flight_termination.md) | Turns off all controllers and sets all PWM outputs to their failsafe values (e.g. [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1), [PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1)). The failsafe outputs can be used to deploy a parachute, landing gear or perform another operation. For a fixed-wing vehicle this might allow you to glide the vehicle to safety. | -If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -63,19 +63,19 @@ The RC Loss failsafe may be triggered if the RC transmitter link is lost in manu Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. :::note PX4 and the receiver may also need to be configured in order to *detect RC loss*: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). ::: Additional (and underlying) parameter settings are shown below. -| Setting | Parameter | Description | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | -| RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. | -| Failsafe Action | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. | -| RC Loss Exceptions | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | +| Parameter | Setting | Description | +| ------------------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | +| [COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). | +| [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Failsafe Action | Disabled, Loiter, Return, Land, Disarm, Terminate. | +| [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC Loss Exceptions | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | ### Data Link Loss Failsafe @@ -194,7 +194,6 @@ The relevant parameters are shown below: | Parameter | Description | | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Delay after loss of offboard connection before the failsafe is triggered. | -| [COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | Failsafe action if no RC is available: Land mode, Hold mode, Return mode. | | [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Failsafe action if RC is available: Position mode, Altitude mode, Manual mode, Return mode, Land mode, Hold mode. | ### Mission Feasibility Checks @@ -213,22 +212,26 @@ The relevant parameters are shown below: | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Set the failsafe action: Disabled, Warn, Return mode, Land mode. | -### QuadChute Failsafe +### Quad-chute Failsafe -Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor or control surface failed. If triggered, the vehicle will immediately switch to multicopter mode. If the vehicle was in [Mission mode](../flight_modes/mission.md) it enters failsafe [Return mode](../flight_modes/return.md). +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -The quadchute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -The parameters that control when the quadchute will trigger are listed in the table below. - -| Parameter | Description | -| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | Maximum negative altitude error for fixed wing flight. If the altitude drops more than this value below the altitude setpoint the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude for fixed wing flight. When the altitude drops below this value in fixed wing flight the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Maximum pitch angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Maximum roll angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | +The parameters that control when the quad-chute will trigger are listed in the table below. + +| Parameter | Description | +| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. | +| [VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) | Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. | +| [VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. | +| [VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing | + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## Failure Detector diff --git a/de/config_fw/advanced_tuning_guide_fixedwing.md b/de/config_fw/advanced_tuning_guide_fixedwing.md index b5ee77a8a11dd..36c397ff1e590 100644 --- a/de/config_fw/advanced_tuning_guide_fixedwing.md +++ b/de/config_fw/advanced_tuning_guide_fixedwing.md @@ -67,8 +67,8 @@ Fly in stabilized mode, reduce throttle to `FW_THR_MIN` and adjust the pitch ang Specify the target climb and sink rate for autonomous missions by adjusting [FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) and [FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP). These specify the height rates at which the vehicle will climb or descend in order to change altitude. Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1 Controller Tuning (Position) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - This is the L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 25 meters works for most aircraft. A value of 16-18 will still work, and provide a sharper response. Shorten slowly during tuning until response is sharp without oscillation. +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 10-20 meters works for most aircraft. Shorten slowly during tuning until response is sharp without oscillation. Vehicles with a slow roll dynamic should have this value increased. diff --git a/de/config_fw/trimming_guide_fixedwing.md b/de/config_fw/trimming_guide_fixedwing.md index b1539d44911c8..be678a03b6eaa 100644 --- a/de/config_fw/trimming_guide_fixedwing.md +++ b/de/config_fw/trimming_guide_fixedwing.md @@ -11,7 +11,7 @@ The [Basic trimming](#basic-trimming) section explains the purpose of each trim There are several parameters an operator might want to use in order to properly trim a fixed-wing aircraft. An overview of those parameters and their use case is shown below: - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM) applies trim to the signal received from the RC transmitter. These parameters are set automatically during [RC calibration](../config/radio.md). -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1) applies trim to a PWM channel, after mixing. These are used to finely align the control surfaces to default angles before flying. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. These are used to finely align the control surfaces to default angles before flying. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF) applies an offset to the pitch setpoint. This is used to set the angle of attack at which your aircraft needs to fly at cruise speed. - [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) is used by the rate controllers to scale their output depending on the measured airspeed. See [Airspeed Scaling](../flight_stack/controller_diagrams.md#airspeed-scaling) for more details. - [TRIM_ROLL](../advanced_config/parameter_reference.md#TRIM_ROLL), [TRIM_PITCH](../advanced_config/parameter_reference.md#TRIM_PITCH) and [TRIM_YAW](../advanced_config/parameter_reference.md#TRIM_YAW) apply trim to the control signals *before* mixing. For example, if you have two servos for the elevator, `TRIM_PITCH` applies trim to both of them. These are used when your control surfaces are aligned but the aircraft pitches/rolls/yaws up/down/left/right during manual (not stabilized) flight or if the control signal has a constant offset during stabilized flight. @@ -26,12 +26,12 @@ Step 3 can be performed before step 2 if you don't want to have to look at the l ## Advanced Trimming -Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve (see figure below) function of airspeed and a pitch trim increment function of the flaps state can be defined using the following parameters: +Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW*DTRIM*\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN) are the roll/pitch/yaw trim value added to `TRIM_ROLL/PITCH/YAW` at min/max airspeed (defined by [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)). -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim Curve](../../assets/config/fw/fixedwing_dtrim.png) -A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. +A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. diff --git a/de/config_heli/README.md b/de/config_heli/README.md index c683cc59338f4..f9bccf1fe7c93 100644 --- a/de/config_heli/README.md +++ b/de/config_heli/README.md @@ -30,8 +30,7 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/de/config_mc/filter_tuning.md b/de/config_mc/filter_tuning.md index ab4c2e355900c..8c57444733343 100644 --- a/de/config_mc/filter_tuning.md +++ b/de/config_mc/filter_tuning.md @@ -22,7 +22,7 @@ The following factors affect control latency: - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The maximum gyro publication rate (configured with [IMU_GYRO_RATEMAX](../advanced_config/parameter_reference.md#IMU_GYRO_RATEMAX)). A higher rate reduces latency but is computationally intensive/can starve other processes. 4 kHz or higher is only recommended for controllers with STM32H7 processor or newer (2 kHz value is near the limit for less capable processors). - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot ([PWM_AUX_RATE=0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) or [PWM_MAIN_RATE=0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)) to reduce latency. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). Below we look at the impact of the low pass filters. diff --git a/de/config_mc/pid_tuning_guide_multicopter.md b/de/config_mc/pid_tuning_guide_multicopter.md index 36adcd84fa60c..823959fb816c6 100644 --- a/de/config_mc/pid_tuning_guide_multicopter.md +++ b/de/config_mc/pid_tuning_guide_multicopter.md @@ -171,7 +171,7 @@ The mapping from motor control signals (e.g. PWM) to expected thrust is linear b If you have a [thrust stand](https://www.tytorobotics.com/pages/series-1580-1585) *measure* thrust and motor commands simultaneously), you can determine the relationship between the motor control signal and the motor's actual thrust, and fit a function to the data. The motor command in PX4 called `actuator_output` can be PWM, Dshot, UAVCAN commands for the respective ESCs in use. [This Notebook][THR_MDL_FAC_Calculation] shows one way for how the thrust model factor `THR_MDL_FAC` may be calculated from previously measured thrust and PWM data. The curves shown in this plot are parametrized by both α and k, and also show thrust and PWM in real units (kgf and μs). In order to simplify the curve fit problem, you can normalize the data between 0 and 1 to find `k` without having to estimate α (α = 1, when the data is normalized). -[![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note The mapping between PWM and static thrust depends highly on the battery voltage. @@ -195,20 +195,6 @@ In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set t If you don't have access to a thrust stand, you can also tune the modeling factor empirically. Start off with 0.3 and increase it by 0.1 at a time. If it is too high, you will start to notice oscillations at lower throttle values. If it is too low you'll notice oscillations at higher throttle values. - - ### Airmode & Mixer Saturation @@ -234,5 +220,3 @@ If mixing becomes saturated towards the upper bound the commanded thrust is redu Once your vehicle flies well you can enable Airmode via the [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE) parameter. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb - -[THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb diff --git a/de/config_mc/pid_tuning_guide_multicopter_basic.md b/de/config_mc/pid_tuning_guide_multicopter_basic.md index db8e2041b84fd..38796be1e0747 100644 --- a/de/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/de/config_mc/pid_tuning_guide_multicopter_basic.md @@ -32,7 +32,7 @@ The testing procedure for each controller (rate, attitude, velocity/posibition) - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. This should give you a vehicle that already flies. - You should have done an [ESC calibration](../advanced_config/esc_calibration.md). -- If using PWM output: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN) is set correctly. It needs to be set low, but such that the **motors never stop** when the vehicle is armed. +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). These need to be set low, but such that the **motors never stop** when the vehicle is armed. This can be tested in [Acro mode](../flight_modes/acro_mc.md) or in [Manual/Stabilized mode](../flight_modes/manual_stabilized_mc.md): - Remove propellers diff --git a/de/config_mc/racer_setup.md b/de/config_mc/racer_setup.md index b51f46149dd01..6250156f1f767 100644 --- a/de/config_mc/racer_setup.md +++ b/de/config_mc/racer_setup.md @@ -64,7 +64,7 @@ Go through the [Basic Configuration Guide](../config/README.md). In particular, These parameters are important: -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - Set the maximum roll-, pitch- and yaw rates for Manual/Stabilized mode as desired: [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) and [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX). The maximum tilt angle is configured with [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX). - The minimum thrust [MPC_MANTHR_MIN](../advanced_config/parameter_reference.md#MPC_MANTHR_MIN) should be set to 0. @@ -108,7 +108,7 @@ These are the factors that affect the latency: - [Low-pass filters](../config_mc/filter_tuning.md) in software and on the sensor chip trade off increased latency for improved noise filtering. - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable One-Shot to reduce latency ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)=0). +- PWM output signal: enable the One-Shot protocol to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### Filter Tuning diff --git a/de/config_vtol/vtol_back_transition_tuning.md b/de/config_vtol/vtol_back_transition_tuning.md index f49546c2b62ec..2280e2b528232 100644 --- a/de/config_vtol/vtol_back_transition_tuning.md +++ b/de/config_vtol/vtol_back_transition_tuning.md @@ -1,56 +1,13 @@ # VTOL Back-transition Tuning -When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## Back-transition duration - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## Setting expected deceleration -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## Applying airbrakes - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## Applying reverse thrust on your fixed wing motor - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### Using throttle scaling (3D) +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### On a control channel - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## Typical setup - -An example of a setup that employs most features listed above would be the following: +## Back-transition duration -- Airframe: Any VTOL supporting reverse thrust (e.g. DeltaQuad) -- ESC: A fixed wing ESC that supports motor reversing (e.g. Hobbywing Platinum Pro 60A) -- Estimated deceleration value in m/s/s `VT_B_DEC_MSS`: 2.5 -- Back-transition duration timeout in seconds `VT_B_TRANS_DUR`: 10 -- Set reverse channel high during back-transition `VT_B_REV_OUT`: 1.0 -- Apply 70% thrust during back-transition `VT_B_TRANS_THR`: 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/de/config_vtol/vtol_quad_configuration.md b/de/config_vtol/vtol_quad_configuration.md index d553ef5f86813..31bb554dd8c4f 100644 --- a/de/config_vtol/vtol_quad_configuration.md +++ b/de/config_vtol/vtol_quad_configuration.md @@ -1,12 +1,16 @@ -# QuadPlane VTOL Configuration & Tuning +# Generic Standard VTOL (QuadPlane) Configuration & Tuning -This is the configuration documentation for a QuadPlane VTOL setup (Plane combined with Quadcopter). For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. + +For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). ## Firmware & Basic Settings 1. Run *QGroundControl* -2. Flash the master firmware -3. In the Setup tab select the appropriate VTOL airframe, if your airframe is not listed select the Fun Cub VTOL airframe. +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### Flight / Transition Mode Switch @@ -45,10 +49,6 @@ Front transition throttle defines the target throttle for the pusher/puller moto This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -122,4 +122,4 @@ When transitioning from **fixed wing to multirotor** for this type of VTOL the ### Support -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/de/config_vtol/vtol_without_airspeed_sensor.md b/de/config_vtol/vtol_without_airspeed_sensor.md index 1d37ea4bccbd5..c65b9b1b62113 100644 --- a/de/config_vtol/vtol_without_airspeed_sensor.md +++ b/de/config_vtol/vtol_without_airspeed_sensor.md @@ -45,13 +45,17 @@ Set the minimum front transition time ([VT_TRANS_MIN_TM](../advanced_config/para ### Optional Recommended Parameters -Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'QuadChute' ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + +This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. The position estimator tested for this mode is EKF2, you can set this by changing the [SYS_MC_EST_GROUP](../advanced_config/parameter_reference.md#SYS_MC_EST_GROUP). ## First Flight Without Airspeed Sensor -The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: +The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + +Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: - Stay at one altitude - Set the waypoints wide enough and in such a fashion that no sharp turns are required diff --git a/de/contribute/code.md b/de/contribute/code.md index e50bc0e17ed5b..70a3f11325a40 100644 --- a/de/contribute/code.md +++ b/de/contribute/code.md @@ -4,7 +4,7 @@ The PX4 project uses a three-branch Git branching model: -* [master](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta) has been thoroughly tested. It's intended for flight testers. * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable) points to the last release. diff --git a/de/contribute/dev_call.md b/de/contribute/dev_call.md index 239f737a2395e..613412f931f54 100644 --- a/de/contribute/dev_call.md +++ b/de/contribute/dev_call.md @@ -1,12 +1,11 @@ -# Weekly Dev Call +# Weekly Community Q&A Call (Previously "Dev Call")

          This page may be out of date

          .

          The latest version can be found here.

          -The PX4 dev team syncs up on platform technical details and in-depth analysis. There is also space in the agenda to discuss pull requests, major impacting issues and Q&A. - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## Who should attend: @@ -14,29 +13,20 @@ The PX4 dev team syncs up on platform technical details and in-depth analysis. T * Component maintainers * Test team lead * Dronecode members -* Community members +* Community members (you!) :::tip -The dev call is open to all interested developers (not just the core dev team). +The Community Q&A call is open to all interested community members. + This is a great opportunity to meet the team and contribute to the ongoing development of the platform. ::: ## What gets discussed? -The first/main part of the meeting runs for 45 minutes and provides a high-level forum to discuss where the project is going. - -This is where we discuss *contributions*, including issues/PRs that have the [dev call](https://github.com/PX4/PX4-Autopilot/labels/devcall5) label. We expect the proposer and the assigned reviewer to be on the call! - -:::note -The main call is designed to support rapid/focused decision making. We don't expect deep technical discussions and we will not spend extended amounts of time on feature requests. Proposals are welcome, but they need a sponsor (someone willing to *implement* the work)! -::: - -The second part of the meeting is for in-depth technical discussions and open ended questions. The core team/subsystem maintainers will be available for up to 45 additional minutes. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## Schedule -* TIME: Wednesday 17h00 CET, 11h00 EST, 08h00 PST ([subscribe to calendar](https://www.dronecode.org/calendar/)) -* **Join the call**: [https://meet.jit.si/PX4DeveloperCallWeekly](https://meet.jit.si/PX4DeveloperCallWeekly) - -* Agenda is published before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io//c/weekly-dev-call) -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/de/debug/simulation_debugging.md b/de/debug/simulation_debugging.md index 685e59e0e284d..249a164ff7522 100644 --- a/de/debug/simulation_debugging.md +++ b/de/debug/simulation_debugging.md @@ -29,21 +29,24 @@ To use valgrind during the SITL simulation: make px4_sitl_default jmavsim___valgrind ``` -## Start combinations +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. This results in the start options below: +By default SITL is launched without a debugger attached when using any simulator backend: ```sh +make px4_sitl_default gz +make px4_sitl_default gazebo-classic make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb +``` -make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +For Gazebo Classic (only) you can also start the simulator with a debugger attached. Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb ``` -where the last parameter is the <viewer\_model\_debugger> triplet (using three underscores implies the default 'iris' model). This will start the debugger and launch the SITL application. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: ```sh Process 16529 stopped @@ -74,14 +77,14 @@ After that the lldb or gdb shells behave like normal sessions, please refer to t The last parameter, the <viewer\_model\_debugger> triplet, is actually passed to make in the build directory, so ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` is equivalent with ```sh make px4_sitl_default # Configure with cmake -make -C build/px4_sitl_default jmavsim___gdb +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -90,11 +93,77 @@ A full list of the available make targets in the build directory can be obtained make help ``` -but for your convenience, a list with just the <viewer\_model\_debugger> triplets is printed with the command +## Attaching GDB to running SITL -```sh -make list_vmd_make_targets -``` +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + For example, + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## Compiler optimization diff --git a/de/debug/swd_debug.md b/de/debug/swd_debug.md index b2f0c474ee863..04dfed967e088 100644 --- a/de/debug/swd_debug.md +++ b/de/debug/swd_debug.md @@ -35,7 +35,7 @@ This connector may come with your flight controller or debug probe. Other option ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/de/debug/system_wide_replay.md b/de/debug/system_wide_replay.md index 4a7f4554f5ddd..fa50fbe532345 100644 --- a/de/debug/system_wide_replay.md +++ b/de/debug/system_wide_replay.md @@ -10,7 +10,7 @@ The first thing that needs to be done is to identify the module or modules that All identified topics need to be logged at full rate (see [logging](../dev_log/logging.md)). For `ekf2` this is already the case with the default set of logged topics. -It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_combined.msg). Reasons for this are given below. +It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). Reasons for this are given below. ## Usage diff --git a/de/dev_airframes/README.md b/de/dev_airframes/README.md index 8ca9650042a40..05871a83e202e 100644 --- a/de/dev_airframes/README.md +++ b/de/dev_airframes/README.md @@ -1,6 +1,6 @@ # Airframes -PX4 has a flexible [mixing system](../concept/mixing.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **Planes:** Normal planes, flying wings, inverted V-tail planes, etc. * **Multicopters:** Helicopters, tricopters, quadcopters, hexarotors, dodecarotors in many different geometries. diff --git a/de/dev_airframes/adding_a_new_frame.md b/de/dev_airframes/adding_a_new_frame.md index 1e55b03e8281f..0c15a5869c140 100644 --- a/de/dev_airframes/adding_a_new_frame.md +++ b/de/dev_airframes/adding_a_new_frame.md @@ -19,7 +19,7 @@ To determine which parameters/values need to be set in the configuration file, y The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -150,7 +150,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -206,12 +206,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 diff --git a/de/dev_log/ulog_file_format.md b/de/dev_log/ulog_file_format.md index f3dd24198d10d..1bc82b1f0a1bc 100644 --- a/de/dev_log/ulog_file_format.md +++ b/de/dev_log/ulog_file_format.md @@ -466,7 +466,6 @@ A valid ULog parser must fulfill the following requirements: - [hardfault_log module](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log): append hardfault crash data. - [pyulog](https://github.com/PX4/pyulog): python, ULog parser library with CLI scripts. - [FlightPlot](https://github.com/PX4/FlightPlot): Java, log plotter. -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis): Python, log plotter and 3D visualization tool based on pyulog. - [MAVLink](https://github.com/mavlink/mavlink): Messages for ULog streaming via MAVLink (note that appending data is not supported, at least not for cut off messages). - [QGroundControl](https://github.com/mavlink/qgroundcontrol): C++, ULog streaming via MAVLink and minimal parsing for GeoTagging. - [mavlink-router](https://github.com/01org/mavlink-router): C++, ULog streaming via MAVLink. diff --git a/de/dev_setup/_gcc_toolchain_installation.md b/de/dev_setup/_gcc_toolchain_installation.md deleted file mode 100644 index 308cc9371e41d..0000000000000 --- a/de/dev_setup/_gcc_toolchain_installation.md +++ /dev/null @@ -1,33 +0,0 @@ - - -Execute the script below to install GCC 7-2017-q4: - -```sh -pushd . -cd ~ -wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -popd -``` - -Now restart your machine. - - -**Troubleshooting** - -Check the version by entering the following command: - -```sh -arm-none-eabi-gcc --version -``` - -The output should be something similar to: - -```sh -arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -Copyright (C) 2017 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` diff --git a/de/dev_setup/_ninja_build_system.md b/de/dev_setup/_ninja_build_system.md deleted file mode 100644 index f835ffebe7513..0000000000000 --- a/de/dev_setup/_ninja_build_system.md +++ /dev/null @@ -1,22 +0,0 @@ -## Ninja Build System - -[Ninja](https://ninja-build.org/) is a faster build system than *Make* and the PX4 *CMake* generators support it. - -On Ubuntu Linux you can install this automatically from normal repos. - -```sh -sudo apt-get install ninja-build -y -``` - -Other systems may not include Ninja in the package manager. In this case an alternative is to download the binary and add it to your path: - -```sh -mkdir -p $HOME/ninja -cd $HOME/ninja -wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip -unzip ninja-linux.zip -rm ninja-linux.zip -exportline="export PATH=$HOME/ninja:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -. ~/.profile -``` diff --git a/de/dev_setup/dev_env.md b/de/dev_setup/dev_env.md index 2010d35ab0db8..27bc2eba05a79 100644 --- a/de/dev_setup/dev_env.md +++ b/de/dev_setup/dev_env.md @@ -10,15 +10,15 @@ The *supported platforms* for PX4 development are: The table below shows what PX4 targets you can build on each OS. -| Target | Linux (Ubuntu) | Mac | Windows | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| -| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | ✓ | ✓ | ✓ | -| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | -| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | -| **Simulation:** ROS2 with Gazebo | ✓ | | | +| Target | Linux (Ubuntu) | Mac | Windows | +| ----------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| +| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | ✓ | ✓ | ✓ | +| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | +| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | +| **Simulation:** ROS 2 with Gazebo | ✓ | | | Experienced Docker users can also build with the containers used by our continuous integration system: [Docker Containers](../test_and_ci/docker.md) diff --git a/de/dev_setup/dev_env_linux_ubuntu.md b/de/dev_setup/dev_env_linux_ubuntu.md index 229164c850546..7fbb59a55b182 100644 --- a/de/dev_setup/dev_env_linux_ubuntu.md +++ b/de/dev_setup/dev_env_linux_ubuntu.md @@ -167,7 +167,7 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/de/dev_setup/dev_env_mac.md b/de/dev_setup/dev_env_mac.md index c7366b5323c57..b25164d292121 100644 --- a/de/dev_setup/dev_env_mac.md +++ b/de/dev_setup/dev_env_mac.md @@ -30,9 +30,9 @@ The installation of Homebrew is quick and easy: [installation instructions](http ## Enable more open files (Handle "LD: too many open files" error) -Create the `~/.zshenv` file or append it (by running `open ~/.zshenv` on the terminal) and add this line: +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Enforce Python Version diff --git a/de/dev_setup/dev_env_windows_vm.md b/de/dev_setup/dev_env_windows_vm.md index ee4da9991055b..74541a63ec5a4 100644 --- a/de/dev_setup/dev_env_windows_vm.md +++ b/de/dev_setup/dev_env_windows_vm.md @@ -6,18 +6,21 @@ This development environment is [not supported](../advanced/dev_env_unsupported. Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. +While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: + +1. Firmware building will be slower than native building on Linux. +1. The JMAVSim simulation, frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. +1. Gazebo and ROS can be installed, but are unusably slow. + :::tip Allocate as many CPU cores and memory resources to the VM as possible. ::: -While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: -1. Firmware building will be slower than native building on Linux. -1. The JMAVSim frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. -1. Gazebo and ROS can be installed, but are unusably slow. +There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). -## Instructions +## VMWare Setup -There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. +VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) 1. Install it on your Windows system @@ -34,9 +37,48 @@ We recommend this is done before installing Linux in the virtual environment. 1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. 1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. 1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. This will enhance performance and usability of your VM usage: - * Significantly enhanced graphics performance - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * Guest display resolution adaption to the window size - * Clipboard sharing to host system - * File sharing to host system + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system 1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. +::: + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. + + :::note +The bootloader device only appears for a few seconds after connecting USB. +If it disappears before you can select it, disconnect and then reconnect USB. +::: + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/de/dev_setup/fast-dds-installation.md b/de/dev_setup/fast-dds-installation.md deleted file mode 100644 index e98cc2036b90c..0000000000000 --- a/de/dev_setup/fast-dds-installation.md +++ /dev/null @@ -1,138 +0,0 @@ -# Fast DDS Installation - -logo [eProsima Fast DDS](https://github.com/eProsima/Fast-DDS) is a C++ implementation of the Object Management Group's (OMG) Data Distribution Service (DDS) specification and the Real Time Publish Subscribe (RTPS) protocol. - -Fast DDS enables an RTPS/DDS interface that allows PX4 uORB topics to be shared with offboard components that participate in same DDS domain, including robotics and simulator tools. In particular, Fast DDS is the default middleware implementation for Robot Operating System 2 (ROS 2), and is essential for integrating PX4 with ROS2. - -This topic explains how to install Fast DDS and *Fast-RTPS-Gen* to use in the PX4 build system and with the microRTPS bridge. - -:::note -You do not have to install Fast DDS if you have ROS 2 Dashing (Ubuntu 18.04) or ROS 2 Foxy (Ubuntu 20.04) installed, as it comes included with the default `base` or `desktop` installations through the `ros--rmw-fastrtps` package. This means you just need to install *Fast-RTPS-Gen* and have your ROS 2 environment sourced (`source /opt/ros//setup.bash`) in order to be able to compile the `rtps` targets in the PX4-Autopilot repo. - -For *ROS2 Galactic and above*, one has to install the `rmw` implementation through `apt` using `apt install ros-galactic-rmw-fastrtps`, since the default middleware for Galactic and above is CycloneDDS and the FastDDS middleware doesn't come installed by default. -::: - -:::tip -Fast DDS is not an essential component of the PX4 Autopilot and should only be installed if you plan to interface the PX4 Autopilot with Fast RTPS/DDS participants. -ROS 2 nodes are an example of these, though Fast DDS middleware and C++ implementations are installed by default on ROS 2 Foxy and below, as mentioned above. -::: - -:::note -Fast DDS was previously named FastRTPS (the name was changed in version 2.0.0 as it now includes a full DDS implementation, rather than just the RTPS wire protocol). -::: - - -## Prerequisites - -*eProsima Fast DDS* requires the following packages to work. - -:::note -At time of writing you will need to install *from source* for: -- **Ubuntu 18.04:** Fast RTPS 1.8.4 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -- **Ubuntu 20.04:** Fast DDS 2.0.2 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -::: - -:::tip -Remember (again) you only need to install Fast DDS if you are not using ROS 2 and just want to leverage non-ROS2 DDS networks and applications. If you have ROS 2 installed (and `rmw-fasrtps` as its default middleware), you can skip to [Fast-RTPS-Gen build and install](#fast-rtps-gen). -::: - -### Java - -Java is required to build and use eProsima's RTPS/DDS from IDL code generation tool - *Fast-RTPS-Gen*. [Java JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) is recommended, and it is installed through the setup scripts made available in [Ubuntu Development Environment](../dev_setup/dev_env_linux.md). - -### Foonathan memory - -In order to build Fast DDS you need to install the Foonathan Memory dependency. - -```sh -git clone https://github.com/eProsima/foonathan_memory_vendor.git -cd foonathan_memory_vendor -mkdir build && cd build -cmake .. -cmake --build . --target install -``` - -:::note -If the last step fails, try running the command with the proper user privileges (`sudo`). -::: - - -## Installation from Sources - -### Fast DDS - -Clone the project from Github: - -```sh -git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.2 ~/FastDDS-2.0.2 -cd ~/FastDDS-2.0.2 -mkdir build && cd build -``` - -If you are on Linux, execute: - -```sh -cmake -DTHIRDPARTY=ON -DSECURITY=ON .. -make -j$(nproc --all) -sudo make install -``` - -This will install Fast DDS to `/usr/local`, with secure communications support. If you need to install to a custom location you can use: `-DCMAKE_INSTALL_PREFIX=`. - -#### Compile Options - -The following additional arguments can be used when calling *CMake*: - -- `-DCOMPILE_EXAMPLES=ON`: Compile the examples -- `-DPERFORMANCE_TESTS=ON`: Compile the performance tests - - -### Fast-RTPS-Gen - -*Fast-RTPS-Gen* is the Fast RTPS (DDS) IDL code generator tool. It should be installed after Fast RTPS (DDS) and made sure the `fastrtpsgen` application is in your `PATH`. You can check with `which fastrtpsgen`. - -Then clone Fast-RTPS-Gen 1.0.4: -``` -git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \ -&& cd ~/Fast-RTPS-Gen/gradle/wrapper -``` - -After that, modify the distribution version of gradle inside the gradle-wrapper.properties file to gradle-6.8.3 such that the distributionUrl file becomes as follows: - -``` -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip -``` -Now you should run the following commands: - -``` -cd ~/Fast-RTPS-Gen -./gradlew assemble && sudo env "PATH=$PATH" ./gradlew install -``` - -## Installation from Binaries - -:::note -Although the binaries are available, we recommend to build and install the code from source, given that the binaries may not come with required components and dependencies in place. -::: - -The latest binary release of *eProsima Fast DDS* can be downloaded from the [company website](http://www.eprosima.com/). - -Documentation on how to do this can be found here: [Installation from Binaries on Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) and [Installation from Binaries on Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) (*eProsima Fast DDS* official documentation) - -#### Environmental Variables - -* `FASTRTPSGEN_DIR`: Root folder where *eProsima Fast-RTPS-Gen* is installed, usually set to `/usr/local`, which is the default installation directory. If the user sets a different install directory in the `gradle install` step, it must set this variable to that same directory as well. Otherwise, the code generation step, and consequently, the build of the `rtps` targets in PX4 will fail. - - -## Further Information - -- [RTPS/DDS Interface: PX4-Fast RTPS(DDS) Bridge](../middleware/micrortps.md) -- [PX4-ROS 2 bridge](../ros/ros2_comm.md) - -- Additional installation information can be found in the official [*eProsima Fast DDS* documentation](https://fast-dds.docs.eprosima.com/en/latest/) (from which this topic is derived): - - Installation from Sources - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_windows.html) - - Installation from Binaries - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) diff --git a/de/dronecan/README.md b/de/dronecan/README.md index d77dbc80448d3..4de6625a61469 100644 --- a/de/dronecan/README.md +++ b/de/dronecan/README.md @@ -117,7 +117,7 @@ Upon boot the flight controller will automatically transfer the firmware onto th **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/de/dronecan/ark_flow.md b/de/dronecan/ark_flow.md index 6594fed96982f..c90e226f8cff8 100644 --- a/de/dronecan/ark_flow.md +++ b/de/dronecan/ark_flow.md @@ -85,7 +85,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/de/dronecan/cuav_can_pmu.md b/de/dronecan/cuav_can_pmu.md index 9c6a76e0a672f..a3f4b4befe553 100644 --- a/de/dronecan/cuav_can_pmu.md +++ b/de/dronecan/cuav_can_pmu.md @@ -55,12 +55,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/de/dronecan/holybro_kotleta.md b/de/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/de/dronecan/holybro_kotleta.md +++ b/de/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/de/dronecan/holybro_m8n_gps.md b/de/dronecan/holybro_m8n_gps.md index a7ada35d18cd9..4dff0321e0ab3 100644 --- a/de/dronecan/holybro_m8n_gps.md +++ b/de/dronecan/holybro_m8n_gps.md @@ -11,7 +11,7 @@ The GPS module uses the [DroneCAN](README.md) protocol for communication. DroneC Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/de/dronecan/sapog.md b/de/dronecan/sapog.md index 92b0b3332947d..31d47a6fd550f 100644 --- a/de/dronecan/sapog.md +++ b/de/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 Supported ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -UAVCAN is generally speaking a plug'n'play protocol. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -Some popular UAVCAN ESC firmware/products include: -- [Sapog](https://github.com/PX4/sapog#px4-sapog) firmware; an advanced open source sensorless PMSM/BLDC motor controller firmware designed for use in propulsion systems of electric unmanned vehicles. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC Project ESCs](https://vesc-project.com/) (see also [Benjamin Vedder's blog](http://vedder.se) - project owner) -- [OlliW’s UC4H ESC-Actuator Node](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- A number of others are [listed here](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko) - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## Purchase - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Mitochondrik based drives and ESC: -- [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## Wiring/Connections - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 Configuration - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. Power the vehicle using the battery (you must power the whole vehicle, not just the flight controller) and connect *QGroundControl*. -1. Navigate to the **Vehicle Setup > Parameters** screen. :::note [Parameters](../advanced_config/parameters.md) explains how to find and set parameters. -::: -1. Set [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to the value *Sensors and Motors* (3) and then reboot the flight controller. This enables automatic enumeration of the motors (ESC) as described in the [next section](#esc-setup). -1. (Optional) Set [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT) to 1 in order to ensure that the motors are always running at least at the idle throttle while the system is armed. :::note -Some systems will not benefit from this behavior, e.g. glider drones). -::: - - -## ESC Setup - -While UAVCAN devices are generally *plug'n'play* you will still need to enumerate (number) each of the ESC used in your system and set their direction so that they can be identified/controlled by PX4. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -The mechanism for enumerating each type of UAVCAN ESC is different (look up the instructions in your ESC's manual). Setup information for some UAVCAN ESCs is provided below. - - -### Sapog ESC Enumeration using QGroundControl - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. Power the vehicle with a battery and connect to *QGroundControl* -1. Navigate to **Vehicle Setup > Power** in QGC. -1. Start the process of ESC auto-enumeration by pressing the **Start Assignment** button, as shown on the screenshot below. - - ![QGC - UAVCAN ESC auto-enumeration](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - You will hear a sound indicating that the flight controller has entered the ESC enumeration mode. -1. Manually turn each motor in the correct direction of its rotation (as specified in the [Airframe Reference](../airframes/airframe_reference.md)), starting from the first motor and finishing with the last motor. Each time you turn a motor, you should hear a confirmation beep. - - :::note -Make sure to turn each of the motors in the correct direction, as the ESC will automatically learn and remember the direction (i.e. motors that spin clockwise during normal operation must also be turned clockwise during enumeration). -::: - -1. After the last motor is enumerated, the confirmation sound should change to indicate that the enumeration procedure is complete. -1. Reboot PX4 and the Sapog ESCs to apply the new enumeration IDs. - -The following video demonstrates the process: - -@[youtube](https://www.youtube.com/watch?v=4nSa8tvpbgQ) - -### Manual ESC Enumeration using Sapog - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -You can manually configure the ESC index and direction using the [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -:::note -See [Sapog reference manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) for more information about the parameters. -::: - -### Myxa ESC Setup - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -There is some guidance here: [Quick start guide for Myxa v0.1](https://forum.zubax.com/t/quick-start-guide-for-myxa-v0-1/911) (Zubax blog). - - -### VESC ESC Setup - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| Parameter | Option | -| ----------------------- | ---------------------- | -| App to use | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -VESC ID should have the same motor numbering as in PX4 convention, starting at `1` for top-right motor, `2` for bottom-left motor etc. However the `UAVCAN ESC Index` starts from `0`, and as such it is always one index lower than the `VESC ID`. For example, in a quadcopter the bottom left motor will have `VESC ID = 2` and `UAVCAN ESC Index = 1`. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## Troubleshooting - -#### Motors not spinning when armed - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN devices dont get node ID/Firmware Update Fails - -PX4 requires an SD card for UAVCAN node allocation and during firmware update (which happen during boot). Check that there is a (working) SD card present and reboot. - - -## Further Information - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 Reference Manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [Using Sapog based ESC with PX4](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/de/uavcan/node_firmware.md b/de/uavcan/node_firmware.md deleted file mode 100644 index dc75d9d1c5407..0000000000000 --- a/de/uavcan/node_firmware.md +++ /dev/null @@ -1,59 +0,0 @@ -# UAVCAN Firmware Upgrading - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -:::warning -UAVCAN devices typically ship with appropriate firmware preinstalled. -These instructions are primarily needed when developing UAVCAN devices. -::: - -## Flashing/Updating a UAVCAN Binary - -To flash the UAVCAN device, all you need to do is copy the UAVCAN firmware binary into the root directory of the flight controller’s SD card and reboot. - -After restarting the flight controller the UAVCAN device will automatically be updated with new firmware. If successful the firmware binary will be removed from the root directory and there will be a file named **XX.bin** in the **/ufw** directory of the SD card. - -:::note UAVCAN -firmware is usually created as part of the build process. Commonly the firmware image is built in **build/_name_of_your_uavcan_device_**, where _name_of_your_uavcan_device_ is specific to the device you are flashing (e.g. **build/ark_can-flow_default**), and will be named with the format **XX-X.X.XXXXXXXX.uavcan.bin**. -::: - -## Building UAVCAN Firmware - -### ARK Flow - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### Sapog Codebase (Pixhawk ESC 1.4 and Zubax Orel 20) - -Please refer to the [project page](https://github.com/PX4/sapog) to learn how to build and flash this firmware. - -### Zubax GNSS - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### Vectorcontrol ESC Codebase (Pixhawk ESC 1.6 and S2740VC) - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -Before updating firmware via UAVCAN, the Pixhawk ESC 1.6 requires the UAVCAN bootloader be flashed. To build the bootloader, run: - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -After building, the bootloader image is located at `firmware/px4esc_1_6-bootloader.bin`, and the OpenOCD configuration is located at `openocd_px4esc_1_6.cfg`. Follow [these instructions](../uavcan/bootloader_installation.md) to install the bootloader on the ESC. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..bin`. diff --git a/de/uavcan/notes.md b/de/uavcan/notes.md deleted file mode 100644 index e5e72492f93dc..0000000000000 --- a/de/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# Various Notes - -This is a collection of tips and tricks to solve issues when setting up or working with the UAVCAN. - -### Arm but motors not spinning - -If the PX4 Firmware arms but the motors do not start to rotate, check the parameter **UAVCAN\_ENABLE**. It should be set to 3 in order to use the ESCs connected via UAVCAN as output. Moreover, if the motors do not start spinning before thrust is increased, check **UAVCAN\_ESC\_IDLT** and set it to one. - -### Debugging with Zubax Babel - -A great tool to debug the transmission on the UAVCAN bus is the [Zubax Babel](https://zubax.com/products/babel) in combination with the [GUI tool](http://uavcan.org/GUI_Tool/Overview/). They can also be used independently from Pixhawk hardware in order to test a node or manually control UAVCAN enabled ESCs. - - -### UAVCAN devices dont get node ID/FW doesn't update - -PX4 requires an SD card for UAVCAN node allocation and firmware upgrade (both of which happen during boot). Check that there is a (working) SD card present and reboot. - diff --git a/de/uavcan/pomegranate_systems_pm.md b/de/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 3954b4e75fe1c..0000000000000 --- a/de/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate Systems Power Module - -![Module Image](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -Digital Power Module with high resolution current integration, 5V/2A supply with power monitoring, single UAVCAN v0 CANbus interface, and an RGB status LED. - -Detailed setup, configuration, and troubleshooting information can be found on the [manufacturer's device home page](https://p-systems.io/product/power_module). - -## Specifications - - - **Input Voltage:** 6-26V \(2-6S\) - - **Max Continuous Current:** - - **Benchtop:** 40A - - **Forced Cooling:** 100A - - **Max 5V Output Current:** 2A - - **Voltage Resolution:** 0.04 ΔV - - **Current Resolution:** - - **Primary / Battery Bus:** 0.02 ΔA - - **5V bus:** 0.001 ΔA - - **CANbus Termination:** Electronic (on by default) - - **MCU:** STM32 F302K8U - - **Firmware:** [Open Source](https://bitbucket.org/p-systems/firmware/) - - **Electrical Interface:** - - **Power:** Solder pads or XT60PW (right angle, board-mounted connectors) - - **CANbus** Dual JST GH-4 (standard UAVCAN micro-connector) - - **I2C / Serial:** JST GH-5 - - **5V Output:** Solder pads or CANbus / I2C connectors - - **Device Mass:** - - **Without Connectors:** 9g - - **With XT60PW Connectors:** 16g - - - ![Dimensions](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## Configuration - - 1. Enable UAVCAN by setting the [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) parameter to `2` (Sensors Automatic Config) or `3`. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * Battery capacity in mAh: `battery_capacity_mAh` - * Battery voltage when *full*: `battery_full_V`, - * Battery voltage when *empty*: `battery_empty_V` - * Turn on current integration: `enable_current_track` - * (optional) Turn Off CANbus termination resistor :`enable_can_term` - -**Example:** A Power Module with UAVCAN node id `125` connected to a `3S` LiPo with capacity of `5000mAh` can be configured with the following commands: - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -See [device configuration page](https://p-systems.io/product/power_module/configuration) for a full list of parameters. diff --git a/en/README.md b/en/README.md index 382eedda74200..4be02636bb24d 100644 --- a/en/README.md +++ b/en/README.md @@ -114,7 +114,8 @@ Select the links below to display the calendar in your timezone (and to add it t * [Australia – Melbourne/Sydney/Hobart](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) :::tip -Calendar defaults to CET. +The calendar default timezone is Central European Time (CET). + ::: diff --git a/en/SUMMARY.md b/en/SUMMARY.md index 640db02ed2449..78943bcdb3846 100644 --- a/en/SUMMARY.md +++ b/en/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C Wiring Quickstart](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X Wiring Quickstart](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 Wiring Quickstart](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal Wiring Quickstart](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md) * [Cube Wiring Quickstart](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [Manufacturer-Supported Autopilots](flight_controller/autopilot_manufacturer_supported.md) * [AirMind MindPX](flight_controller/mindpx.md) * [AirMind MindRacer](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md) * [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [Holybro Kakute F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [Experimental Autopilots](flight_controller/autopilot_experimental.md) * [BeagleBone Blue](flight_controller/beaglebone_blue.md) - * [Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) - * [Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Raspberry Pi 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) * [Raspberry Pi 2/3/4 PilotPi](flight_controller/raspberry_pi_pilotpi.md) * [PilotPi with Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) * [PilotPi with Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [Discontinued Autopilots/Vehicles](flight_controller/autopilot_discontinued.md) + * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S Brushless Whoop](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [CUAV v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [Snapdragon Flight](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [Telemetry Radios](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [FrSky Telemetry](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [CUAV HV pm](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [Optical Flow](sensor/optical_flow.md) * [ARK Flow](dronecan/ark_flow.md) - * [PX4FLOW](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [ESCs & Motors](peripherals/esc_motors.md) * [PWM ESCs and Servos](peripherals/pwm_escs_and_servo.md) * [DShot ESCs](peripherals/dshot.md) * [OneShot ESCs and Servos](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [Camera](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [Companion Computers](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [Companion Computer Peripherals](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [Development](development/development.md) @@ -333,6 +339,7 @@ * [Ubuntu Setup](dev_setup/dev_env_linux_ubuntu.md) * [Windows Setup](dev_setup/dev_env_windows_wsl.md) * [Visual Studio Code IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [Building the Code](dev_setup/building_px4.md) * [Writing your First Application](modules/hello_sky.md) * [Application/Module Template](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim Simulation](simulation/jmavsim.md) * [Multi-Vehicle Sim with JMAVSim](simulation/multi_vehicle_jmavsim.md) * [Gazebo Simulation](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB Message Reference](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink Messaging](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) * [Modules & Commands](modules/modules_main.md) + * [Autotune](modules/modules_autotune.md) * [Commands](modules/modules_command.md) * [Communication](modules/modules_communication.md) * [Controllers](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [Baro](modules/modules_driver_baro.md) * [Distance Sensor](modules/modules_driver_distance_sensor.md) * [IMU](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [Magnetometer](modules/modules_driver_magnetometer.md) + * [Optical Flow](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [Estimators](modules/modules_estimator.md) * [Simulations](modules/modules_simulation.md) * [System](modules/modules_system.md) @@ -647,14 +661,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 User Guide](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [ROS (1) via ROS 2 Bridge](ros/ros1_via_ros2.md) - * [ROS (1) with MAVROS](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS Installation Guide](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS Sending Custom Messages](ros/mavros_custom_messages.md) - * [ROS/MAVROS with Gazebo Simulation](simulation/ros_interface.md) - * [Gazebo OctoMap Models with ROS (1)](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [ROS/MAVROS Installation on RPi](ros/raspberrypi_installation.md) * [External Position Estimation (Vision/Motion based)](ros/external_position_estimation.md) * [DroneKit](robotics/dronekit.md) diff --git a/en/advanced/computer_vision.md b/en/advanced/computer_vision.md index f2a0ee5bdcb7c..4152d0f7d28d9 100644 --- a/en/advanced/computer_vision.md +++ b/en/advanced/computer_vision.md @@ -52,8 +52,8 @@ For information about configuring VIO on PX4 see: [Optical Flow](../sensor/optical_flow.md) provides 2D velocity estimation (using a downward facing camera and a downward facing distance sensor). For information about optical flow see: + - [Optical Flow](../sensor/optical_flow.md) - - [PX4Flow Smart Camera](../sensor/px4flow.md) - [EKF > Optical Flow](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## External Resources diff --git a/en/advanced/gimbal_control.md b/en/advanced/gimbal_control.md index 705aba8ece402..a0362ee034d4e 100644 --- a/en/advanced/gimbal_control.md +++ b/en/advanced/gimbal_control.md @@ -85,11 +85,11 @@ To run it, use: make px4_sitl gazebo-classic_typhoon_h480 ``` -To just test the mount driver on other models or simulators, make sure the driver runs (using `vmount start`), then configure its parameters. +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## Testing -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. +The driver provides a simple test command. The following describes testing in SITL, but the commands also work on a real device. Start the simulation with (no parameter needs to be changed for that): @@ -101,7 +101,7 @@ make px4_sitl gazebo-classic_typhoon_h480 Make sure it's armed, eg. with `commander takeoff`, then use the following command to control the gimbal (for example): ``` -vmount test yaw 30 +gimbal test yaw 30 ``` Note that the simulated gimbal stabilizes itself, so if you send MAVLink commands, set the `stabilize` flags to `false`. diff --git a/en/advanced/package_delivery.md b/en/advanced/package_delivery.md index 0227070e93018..249d4f0f8479b 100644 --- a/en/advanced/package_delivery.md +++ b/en/advanced/package_delivery.md @@ -12,7 +12,7 @@ Winches are not yet supported. :::note The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -63,4 +63,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/en/advanced_config/bootloader_update.md b/en/advanced_config/bootloader_update.md index 0496e4b73953b..7009b8f791893 100644 --- a/en/advanced_config/bootloader_update.md +++ b/en/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # Bootloader Update -The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO) and [PX4FLOW](../sensor/px4flow.md). +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). This topic explains several methods for updating the Pixhawk bootloader. @@ -9,7 +9,7 @@ Hardware usually comes with an appropriate bootloader version pre-installed. A case where you may need to update is newer Pixhawk boards that install FMUv2 firmware: [Firmware > FMUv2 Bootloader Update](../config/firmware.md#bootloader). ::: -## Building the new PX4 bootloader yourself +## Building the new PX4 Bootloader Yourself Boards starting with FMUv6X (STM32H7) use the in-tree PX4 bootloader. Older boards use the bootloader from the legacy [PX4 bootloader](https://github.com/PX4/Bootloader) repository. Please refer to the instructions in the README to learn how to use it. @@ -30,7 +30,7 @@ arm-none-eabi-objcopy -O ihex build/px4_fmu-v6x_bootloader/px4_fmu-v6x_bootloade ## QGroundControl Bootloader Update -The easiest approach is to first use *QGroundControl* to install firmware with the desired/latest bootloader. +The easiest approach is to first use *QGroundControl* to install firmware with the desired/latest bootloader. You can then initiate bootloader update on next restart by setting the parameter: [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE). :::note diff --git a/en/advanced_config/bootloader_update_from_betaflight.md b/en/advanced_config/bootloader_update_from_betaflight.md index 53edeee62d026..e2db92abdbd01 100644 --- a/en/advanced_config/bootloader_update_from_betaflight.md +++ b/en/advanced_config/bootloader_update_from_betaflight.md @@ -4,14 +4,14 @@ This page documents how to flash the PX4 bootloader onto boards preflashed with There are two options for flashing the bootloader: via *Betaflight Configurator* (easier), or building from source. - + ### Bootloader Update using Betaflight Configurator To install the PX4 bootloader using the *Betaflight Configurator*: 1. You should have downloaded already the pre-built bootloader binary (this depends on the board you want to flash). 1. Download the [Betaflight Configurator](https://github.com/betaflight/betaflight-configurator/releases) for your platform. :::tip - If using the *Chrome* web browser, a simple cross-platform alternative is to install the configurator as an [extension from here]( https://chrome.google.com/webstore/detail/betaflight-configurator/kdaghagfopacdngbohiknlhcocjccjao). + If using the *Chrome* web browser, a simple cross-platform alternative is to install the configurator as an [extension from here](https://chrome.google.com/webstore/detail/betaflight-configurator/kdaghagfopacdngbohiknlhcocjccjao). ::: 1. Connect the board to your PC and start the Configurator. 1. Press the **Load Firmware [Local]** button @@ -24,7 +24,39 @@ You should now be able to install PX4 firmware on the board. #### Download Bootloader Source -Download and build the [Bootloader](https://github.com/PX4/Bootloader) via: +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. +The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -50,6 +82,19 @@ The button can be released after the board is powered up. ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. +Once completed, enter DFU mode again to complete the regular flashing. +::: + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/en/advanced_config/esc_calibration.md b/en/advanced_config/esc_calibration.md index 5f2188dfde641..96a87decdd727 100644 --- a/en/advanced_config/esc_calibration.md +++ b/en/advanced_config/esc_calibration.md @@ -48,7 +48,9 @@ To calibrate the ESCs: :::note -High-quality controllers come with a factory calibration. -In *theory* this means that they can be configured by just setting the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) parameters to the values provided in the ESC technical specification. -In practice the input range may differ even on high quality controllers, which is why calibration is recommended. +High-quality controllers come with a factory calibration. +In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. +Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/en/advanced_config/ethernet_setup.md b/en/advanced_config/ethernet_setup.md index 13e5bf844f0e3..5b37f9b2cc903 100644 --- a/en/advanced_config/ethernet_setup.md +++ b/en/advanced_config/ethernet_setup.md @@ -15,7 +15,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -85,7 +85,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Reboot the flight controller to apply the settings. Note that the above setup gives the flight controller an address on the Ethernet network. -You also need to [configure the Ethernet port]((#px4-mavlink-serial-port-configuration) to use MAVLink. +You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -202,61 +202,46 @@ However this is not recommended because the default configuration is optimised f ::: -## ROS2 Setup Example +## ROS 2 Setup Example -:::warning -**This section is out of date!** -It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. -We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. +:::note Prerequisites: +- You have a supported autopilot hardware running PX4 firmware that includes [uXRCE-DDS](../middleware/uxrce_dds.md) middleware. + Note that PX4 v1.14 and later include the required [uxrce_dds_client](../modules/modules_system.md#uxrce_dds_client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. +- You have followed the Ethernet network and port setup as discussed at the top of this page. ::: -Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. -- You have followed the Ethernet network and port setup as discussed at the top of this page. +To set up ROS 2: -In this example it is assumed that you have followed the example to set your IP addresses. +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the uXRCE-DDS client on PX4](../middleware/uxrce_dds.md#starting-the-client), either manually or by customizing the system startup script. + Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the micro XRCE-DDS agent on the companion computer](../middleware/uxrce_dds.md#starting-the-agent). + For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. - Note that the remote IP here is your companion computer IP. - This by default starts the micrortps_client connected to UDP ports 2019 and 2020 - To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) ``` - micrortps_client start -t UDP -i + MicroXRCEAgent udp4 -p 8888 ``` - An output like below is expected in the console: - ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! - ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. - This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/en/advanced_config/imu_factory_calibration.md b/en/advanced_config/imu_factory_calibration.md index 81edbec0cf5b3..e6254fb47ff31 100644 --- a/en/advanced_config/imu_factory_calibration.md +++ b/en/advanced_config/imu_factory_calibration.md @@ -18,7 +18,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/en/advanced_config/parameter_reference.md b/en/advanced_config/parameter_reference.md index b760d1ada7705..2b532910e0bf4 100644 --- a/en/advanced_config/parameter_reference.md +++ b/en/advanced_config/parameter_reference.md @@ -14739,12 +14739,12 @@ table {
          - - + @@ -14795,7 +14795,7 @@ table { - + @@ -14824,14 +14824,14 @@ table { - + - + @@ -14862,6 +14862,13 @@ table { + + + + + + + @@ -15243,7 +15250,7 @@ table { - - + - + @@ -15313,6 +15320,13 @@ table { + + + + + + + - + @@ -15485,14 +15499,14 @@ table { - + - + + + + + + + + + + + + + + @@ -16577,7 +16605,7 @@ table { - + @@ -16930,10 +16958,12 @@ table {
        • 5: Femtomes
        • 6: NMEA (generic)
        • + +
        • 7: Septentrio (SBF)
        • Reboot required: true

          - + @@ -17003,7 +17033,7 @@ table {

          Reboot required: true

          - + @@ -17021,6 +17051,14 @@ table { + + + + + + + - @@ -17319,9 +17357,16 @@ table { + + + + + + + - + @@ -20626,14 +20671,14 @@ table { - + - + @@ -20775,75 +20820,6 @@ table {
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m
          EKF2_AID_MASK (INT32)Integer bitmask controlling data fusion and aiding methods

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • -
          • 1: use optical flow
          • +
          Will be removed after v1.14 release

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • +
          • 1: unused
          • 2: unused
          • 3: unused
          • 4: unused
          • -
          • 5: multi-rotor drag fusion
          • +
          • 5: unused
          • 6: unused
          • 7: unused
          • 8: unused
          • @@ -14765,7 +14765,7 @@ table {
          EKF2_ARSP_THR (FLOAT)Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

          Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

          [0.0, ?] 0.0 m/s
          EKF2_BARO_CTRL (INT32)Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

          Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

          Enabled (1)
          EKF2_BCOEF_X (FLOAT)X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^2
          EKF2_BCOEF_Y (FLOAT)Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^27
          EKF2_DRAG_CTRL (INT32)Multirotor wind estimation selection

          Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

          Disabled (0)
          EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

          Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

          EKF2_MAG_TYPE (INT32)Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

          Values:
            +
          Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

          Values:
          • 0: Automatic
          • 1: Magnetic heading
          • @@ -15266,12 +15273,12 @@ table {
          EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] 0.250.20 rad/s
          EKF2_MCOEF (FLOAT)Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s5000000 us
          EKF2_OF_CTRL (INT32)Optical flow aiding

          Comment: Enable optical flow fusion.

          Disabled (0)
          EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15471,7 +15485,7 @@ table {
          EKF2_RNG_A_HMAX (FLOAT)Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m
          EKF2_RNG_A_VMAX (FLOAT)Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s
          EKF2_RNG_CTRL (INT32)Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
            +
          Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
          • 0: Disable range fusion
          • 1: Enabled (conditional mode)
          • @@ -16496,6 +16510,20 @@ table {
          -30.0 deg
          FW_THR_ASPD_MAX (FLOAT)Throttle at max airspeed

          Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

          [0, 1] (0.01)0.
          FW_THR_ASPD_MIN (FLOAT)Throttle at min airspeed

          Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

          [0, 1] (0.01)0.
          FW_THR_IDLE (FLOAT) Idle throttle

          Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

          FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

          Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

          [0.0, 2.0] (0.05)0.30.1
          [0, 5] [0, 7] 1
          [0, 5] [0, 6] 1
          0
          GPS_PITCH_OFFSET (FLOAT)Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          +
          [-90, 90] 0.deg
          GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17094,7 +17132,7 @@ table {
          GPS_YAW_OFFSET (FLOAT)Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          +
          Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0.Disabled (0)
          CA_HELI_YAW_CP_O (FLOAT)Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1)0.0
          CA_HELI_YAW_CP_S (FLOAT)Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000rpm
          MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500rpm
          MODAL_IO_SDIR1 (INT32)
          -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NameDescription[Min, Max] (Incr.)DefaultUnits
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          Values:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20868,15 +20844,8 @@ table { - - - - - - - - - + + @@ -21031,19 +21000,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21236,20 +21212,6 @@ table { - - - - - - - - - - - - - - @@ -21534,6 +21496,13 @@ table { + + + + + + + + + + + + + + @@ -22164,7 +22140,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32334,6 +32310,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          Values:
            @@ -22123,6 +22092,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32696,6 +32680,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameDescription[Min, Max] (Incr.)DefaultUnits
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          Values:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32741,9 +32802,9 @@ table { - + - + @@ -32753,13 +32814,6 @@ table { - - - - - - - @@ -32830,14 +32884,14 @@ table { - + - + @@ -32865,14 +32919,14 @@ table { - + - + @@ -32909,7 +32963,7 @@ table { - + diff --git a/en/advanced_config/tuning_the_ecl_ekf.md b/en/advanced_config/tuning_the_ecl_ekf.md index f78868997f42a..367519da3f56c 100644 --- a/en/advanced_config/tuning_the_ecl_ekf.md +++ b/en/advanced_config/tuning_the_ecl_ekf.md @@ -407,7 +407,7 @@ This is enabled by setting the [EKF2_FUSE_BETA](../advanced_config/parameter_ref ### Multicopter Wind Estimation using Drag Specific Forces Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. -This is enabled by setting bit position 5 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter to `true`. +This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). The relationship between airspeed and specific force (IMU accelerometer measurements) along the X and Y body axes is controlled by the [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X), [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) and [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) parameters which set the ballistic coefficients for flight in the X and Y directions, and the momentum drag produced by the propellers, respectively. The amount of specific force observation noise is set by the [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) parameter. @@ -426,35 +426,22 @@ A good tuning is obtained as follows: [Optical flow](../sensor/optical_flow.md) data will be used if the following conditions are met: * Valid range finder data is available. -* Bit position 1 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * The quality metric returned by the flow sensor is greater than the minimum requirement set by the [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) parameter. ### External Vision System -Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* External vision system horizontal position data will be used if bit position 3 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. - For more details about the configuration of height sources, [click here](#height). -* External vision system velocity data will be used if bit position 8 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system orientation data will be used for yaw estimation if bit position 4 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision reference frame offset will be estimated and used to rotate the external vision system data if bit position 6 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -Either bit 4 (`EV_YAW`) or bit 6 (`EV_ROTATE`) should be set to true, but not both together. -Following [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) values are supported when using with an external vision system. +- `0`: Horizontal position data +- `1`: Vertical position data. + Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -EKF_AID_MASK value | Set bits | Description ---- | --- | --- -320 | EV_VEL + ROTATE_EV | Heading w.r.t. North -24 | EV_POS + EV_YAW | Heading w.r.t. external vision frame -72 | EV_POS + ROTATE_EV | Heading w.r.t. North -272 | EV_VEL + EV_YAW | Heading w.r.t. external vision frame -280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. external vision frame -328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. North - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. The EKF considers uncertainty in the visual pose estimate. This uncertainty information can be sent via the covariance fields in the MAVLink [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) message or it can be set through the parameters [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE), [EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) and [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE). @@ -494,7 +481,7 @@ EKF outputs, states and status data are published to a number of uORB topics whi The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/ecl_ekf/process_logdata_ekf.py). To use this script file, cd to the `Tools/ecl_ekf` directory and enter `python process_logdata_ekf.py `. @@ -505,14 +492,14 @@ When this has been done, the performance metadata files can be processed to prov ### Output Data -* Attitude output data is found in the [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_attitude.msg) message. -* Local position output data is found in the [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_local_position.msg) message. -* Global \(WGS-84\) output data is found in the [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_global_position.msg) message. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### States -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for states\[32\] is as follows: * \[0 ... 3\] Quaternions @@ -527,7 +514,7 @@ The index map for states\[32\] is as follows: ### State Variances -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for covariances\[28\] is as follows: * \[0 ... 3\] Quaternions @@ -542,12 +529,12 @@ The index map for covariances\[28\] is as follows: ### Observation Innovations & Innovation Variances -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg). +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). The messages all have the same field names/types (but different units). :::note The messages have the same fields because they are generated from the same field definition. -The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -614,7 +601,7 @@ The index map is as follows: ### EKF Errors The EKF contains internal error checking for badly conditioned state and covariance updates. -Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### Observation Errors @@ -629,7 +616,7 @@ Both of these can result in observation data being rejected for long enough to c All observations have a statistical confidence checks applied to the innovations. The number of standard deviations for the check are controlled by the `EKF2_*_GATE` parameter for each observation type. -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio`: ratio of the largest magnetometer innovation component to the innovation test limit * `vel_test_ratio`: ratio of the largest velocity innovation component to the innovation test limit @@ -638,15 +625,15 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio`: ratio of the true airspeed innovation to the innovation test limit * `hagl_test_ratio`: ratio of the height above ground innovation to the innovation test limit -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS Quality Checks The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. -The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).gps\_check\_fail\_flags message. +The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. -If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF Numerical Errors @@ -658,7 +645,7 @@ To prevent this, every covariance and state update step contains the following e * If the innovation variance is less than the observation variance (this requires a negative state variance which is impossible) or the covariance update will produce a negative variance for any of the states, then: * The state and covariance update is skipped * The corresponding rows and columns in the covariance matrix are reset - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * State variances (diagonals in the covariance matrix) are constrained to be non-negative. * An upper limit is applied to state variances. * Symmetry is forced on the covariance matrix. @@ -670,8 +657,8 @@ After re-tuning the filter, particularly re-tuning that involve reducing the noi The most common cause of EKF height diverging away from GPS and altimeter measurements during flight is clipping and/or aliasing of the IMU measurements caused by vibration. If this is occurring, then the following signs should be evident in the data -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[2\] and [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[5\] will both have the same sign. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio will be greater than 1.0 +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 The recommended first step is to ensure that the autopilot is isolated from the airframe using an effective isolation mounting system. An isolation mount has 6 degrees of freedom, and therefore 6 resonant frequencies. @@ -709,16 +696,16 @@ The most common causes of position divergence are: Determining which of these is the primary cause requires a methodical approach to analysis of the EKF log data: -* Plot the velocity innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio -* Plot the horizontal position innovation test ratio - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).pos\_test\_ratio -* Plot the height innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio -* Plot the magnetometer innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).mag\_test\_ratio -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* Plot the IMU delta angle state estimates - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).states\[10\], states\[11\] and states\[12\] +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * Plot the EKF internal high frequency vibration metrics: - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] During normal operation, all the test ratios should remain below 0.5 with only occasional spikes above this as shown in the example below from a successful flight: @@ -764,7 +751,7 @@ Height is normally unaffected. Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. -The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS glitch - test ratios](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/en/assembly/cable_wiring.md b/en/assembly/cable_wiring.md index ba72ae8d59f92..fb143fbc541ec 100644 --- a/en/assembly/cable_wiring.md +++ b/en/assembly/cable_wiring.md @@ -4,7 +4,7 @@ Cables are a common source of [electromagnetic interference (EMI)](https://en.wi These problems can be avoided by using appropriate cabling in the UAV. The following basic concepts should be kept in mind when designing drone cabling: -* High-Power and signal cables should be separated as much as is practical +* High-Power and signal cables should be separated as much as is practical. * Cable lengths should be the minimum needed to enable easy handling of wired components. The wire tension should be adequate to survive possible airframe deformations even in a crash landing (wires must not be the first thing to break). @@ -19,7 +19,7 @@ Signalling protocols have different characteristics, and therefore the cables us This topic provides specific guidance of cabling for different signalling protocols, along with the [colour coding](#cable-colour-coding) used by a number different drone hardware vendors. -### I²C cables +### I2C cables The [I2C bus](https://en.wikipedia.org/wiki/I%C2%B2C) is widely used for connecting sensors. Cable colors from several vendors are specified in following table. diff --git a/en/assembly/mount_gps_compass.md b/en/assembly/mount_gps_compass.md index 41ec45333a300..bab5a64edaee9 100644 --- a/en/assembly/mount_gps_compass.md +++ b/en/assembly/mount_gps_compass.md @@ -10,9 +10,9 @@ The diagram below shows the heading marker on the Pixhawk 4 and compass. ## Compass Orientation The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). -The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#orientation-definition). +The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO) enabled), the orientation should be detected automatically. +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. :::warning diff --git a/en/assembly/quick_start_cube.md b/en/assembly/quick_start_cube.md index dfb8a6afb1557..788756668ce0d 100644 --- a/en/assembly/quick_start_cube.md +++ b/en/assembly/quick_start_cube.md @@ -176,7 +176,7 @@ Motors/servos are connected to the **MAIN** and **AUX** ports in the order speci This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/en/assembly/quick_start_durandal.md b/en/assembly/quick_start_durandal.md index b5c020d51cd15..654cf31864694 100644 --- a/en/assembly/quick_start_durandal.md +++ b/en/assembly/quick_start_durandal.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the Holybro [Durandal](../flight_controller/durandal.md)® flight controller and connect its most important peripherals. @@ -64,7 +64,7 @@ The recommended power modules are shown below. ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *Durandal*. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -96,14 +96,10 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: - ### Pixhawk 4 Power Module (PM07) -The [Pixhawk 4 Power Module (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html) can be bundled/used with *Durandal*. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Power](../assembly/quick_start_pixhawk4.md#power) documentation. @@ -120,7 +116,7 @@ It has the following characteristics/limits: - 80mm XT60 connector wire (1) :::note -See also [PM07 Quick Start Guide](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro). +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### Battery Configuration @@ -215,7 +211,7 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Durandal Overview](../flight_controller/durandal.md) -- [Durandal Technical Data Sheet](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal Pinouts](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal Schematics) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/en/assembly/quick_start_holybro_pix32_v5.md b/en/assembly/quick_start_holybro_pix32_v5.md index 8ca48de6bc62f..2bd9f3c7cd01d 100644 --- a/en/assembly/quick_start_holybro_pix32_v5.md +++ b/en/assembly/quick_start_holybro_pix32_v5.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® flight controller and connect its most important peripherals. @@ -11,7 +11,7 @@ This quick start guide shows how to power the [Holybro Pix32v5](../flight_contro ## Unboxing -Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html) (UBLOX NEO-M8N). +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). The content of the box with the *PM02 V3* power module and *Pixhawk 4 GPS/Compass* is shown below. The box also includes a pinout guide and power module instructions, and Base board (not shown on the schematic below). @@ -26,7 +26,7 @@ We'll go through each of these in detail in the following sections. ![Pix32 v5 Wiring Overview](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -More information about available ports can be found [here](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf). +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## Mount and Orient Controller @@ -46,7 +46,7 @@ Do not use vibration-isolation foam to mount the controller (double sided tape i ## GPS + Compass + Buzzer + Safety Switch + LED -Pix32 v5 is designed to work well with the [Pixhawk 4 GPS module](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html), which has an integrated compass, safety switch, buzzer and LED. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. ![Pix32 v5 with GPS](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -67,7 +67,7 @@ The recommended power modules are shown below. ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *pix32 v5*. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -98,9 +98,6 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: ### Battery Configuration @@ -169,7 +166,7 @@ The wiring and configuration of optional/less common components is covered withi ## Pinouts -[Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## Configuration @@ -182,8 +179,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pix32 v5 Overview](../flight_controller/holybro_pix32_v5.md) (Overview page) -- [Pix32 v5 Technical Data Sheet](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 Base Schematic Diagram](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 Base Schematic Diagram](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 Base Components Layout](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). diff --git a/en/assembly/quick_start_pixhawk.md b/en/assembly/quick_start_pixhawk.md index 6725a70117621..9bb4b3915ccfc 100644 --- a/en/assembly/quick_start_pixhawk.md +++ b/en/assembly/quick_start_pixhawk.md @@ -103,7 +103,7 @@ Telemetry radios may be used to communicate and control a vehicle in flight from The mappings between MAIN/AUX output ports and motor/servos for all supported air and ground frames are listed in the [Airframe Reference](../airframes/airframe_reference.md). -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/en/assembly/quick_start_pixhawk4.md b/en/assembly/quick_start_pixhawk4.md index ab2dbee578ef5..4355bd5a3eec6 100644 --- a/en/assembly/quick_start_pixhawk4.md +++ b/en/assembly/quick_start_pixhawk4.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 4](../flight_controller/pixhawk4.md)® flight controller and connect its most important peripherals. @@ -172,7 +172,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/en/assembly/quick_start_pixhawk4_mini.md b/en/assembly/quick_start_pixhawk4_mini.md index ee1f13c4ffaa0..4aa8a786b0fc1 100644 --- a/en/assembly/quick_start_pixhawk4_mini.md +++ b/en/assembly/quick_start_pixhawk4_mini.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [*Pixhawk® 4 Mini*](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. @@ -141,7 +141,7 @@ Motors/servos are connected to the **MAIN OUT** ports in the order specified for This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/en/assembly/quick_start_pixhawk5x.md b/en/assembly/quick_start_pixhawk5x.md index e9bcf6bd2fecb..7326939183b8f 100644 --- a/en/assembly/quick_start_pixhawk5x.md +++ b/en/assembly/quick_start_pixhawk5x.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk® 5X](../flight_controller/pixhawk5x.md) flight controller and connect its most important peripherals. @@ -39,7 +39,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk5X Standard Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -110,7 +110,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) @@ -131,7 +131,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: @@ -143,7 +143,7 @@ The wiring and configuration of optional/less common components is covered withi ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Configuration @@ -156,9 +156,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 Doc Overview page) -- [Pixhawk 5X Overview & Specification](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) -- [Pixhawk 5X Pinouts](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) -- [PM02D Power Module Manual](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (Holybro) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5X reference design pinout](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/en/assembly/quick_start_pixhawk6c.md b/en/assembly/quick_start_pixhawk6c.md index 8fde8cfff8d52..4a702cd427873 100644 --- a/en/assembly/quick_start_pixhawk6c.md +++ b/en/assembly/quick_start_pixhawk6c.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -13,13 +13,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -38,7 +31,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -105,7 +98,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/en/assembly/quick_start_pixhawk6x.md b/en/assembly/quick_start_pixhawk6x.md index 6b18ffb1557b8..a565b4f5a3a55 100644 --- a/en/assembly/quick_start_pixhawk6x.md +++ b/en/assembly/quick_start_pixhawk6x.md @@ -2,7 +2,7 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -44,7 +44,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -115,7 +115,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/en/can/README.md b/en/can/README.md index 784e8e65285ae..3f836604fb578 100644 --- a/en/can/README.md +++ b/en/can/README.md @@ -15,6 +15,7 @@ PX4 supports two software protocols for communicating with CAN devices: :::note Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -23,12 +24,12 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. -Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -39,6 +40,7 @@ Refer to your manufacturer instructions to confirm whether components require se For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -50,7 +52,7 @@ However, as long as the device firmware supports DroneCAN or Cyphal, it can be u ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. diff --git a/en/companion_computer/README.md b/en/companion_computer/README.md index 545be1bd83bab..feaffe5c10492 100644 --- a/en/companion_computer/README.md +++ b/en/companion_computer/README.md @@ -10,7 +10,7 @@ The diagram below shows a possible architecture for an unmanned vehicle architec The flight controller runs PX4 on NuttX, and provides core flight and safety code. The companion computer usually runs Linux, as this is a much better platform for "general" software development. -They are connected using a fast serial or Ethernet link, and typically communicate using the [MAVLink protocol](https://mavlink.io/en/) or microDDS. +They are connected using a fast serial or Ethernet link, and typically communicate using the [MAVLink protocol](https://mavlink.io/en/) or uXRCE-DDS. Communications with the ground stations and the cloud are usually routed via the companion computer (e.g. using the [MAVLink Router](https://github.com/mavlink-router/mavlink-router)). @@ -25,9 +25,9 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options -PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). +PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over over a serial port (or Ethernet port, if present). A small subset of possible alternatives are listed below: @@ -49,8 +49,8 @@ Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -66,7 +66,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. @@ -82,5 +81,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/en/companion_computer/companion_computer_peripherals.md b/en/companion_computer/companion_computer_peripherals.md index 54d82566a3bf2..45ccabd80565c 100644 --- a/en/companion_computer/companion_computer_peripherals.md +++ b/en/companion_computer/companion_computer_peripherals.md @@ -5,13 +5,11 @@ These include both components that might be connected to a companion computer (p ## Companion/Pixhawk Communication -Typical companion computer work with Pixhawk requires a companion link to transmit/receive the data between the companion computer and Pixhawk hardware (e.g. Intel NUC and Pixhawk 4). - -There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). +This section lists devices that may be used for the physical serial/data connection between a companion computer and a flight controller. :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). -Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink (OSD / Telemetry)](../peripherals/mavlink_peripherals.md#example). +Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md). ::: ### FTDI Devices diff --git a/en/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/en/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index aa7f53c8b6956..25ad01b1ee3b3 100644 --- a/en/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/en/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -7,7 +7,7 @@ The baseboard has a compact form factor with all the connections needed for deve The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -55,7 +55,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/en/companion_computer/pixhawk_companion.md b/en/companion_computer/pixhawk_companion.md index 030c374f52ebb..824b35e86f7ce 100644 --- a/en/companion_computer/pixhawk_companion.md +++ b/en/companion_computer/pixhawk_companion.md @@ -22,10 +22,13 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. -No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. +The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. +To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/uXRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the uXRCE-DDS client on `TELEM2`(see [uXRCE-DDS > Starting the client](../middleware/uxrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,12 +36,13 @@ If you're connecting using a serial port, wire the port according to the instruc All Pixhawk serial ports operate at 3.3V and are 5V level compatible. :::warning -Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. +Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. +The `TELEM2` to FTDI wiring map is shown below. TELEM2 | | FTDI |   --- | --- | --- | --- @@ -49,9 +53,14 @@ TELEM2 | | FTDI |   5 | RTS (out)| 2 | FTDI CTS (brown) (in) 6 | GND | 1 | FTDI GND (black) -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. +This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux -On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. +On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. +If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. +To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. Using `lsusb` we can get the vendor and product IDs. diff --git a/en/companion_computer/pixhawk_rpi.md b/en/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..296e76f57b2eb --- /dev/null +++ b/en/companion_computer/pixhawk_rpi.md @@ -0,0 +1,327 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. + Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. + See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. + This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. + This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. +It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. +Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +PX4 TELEM2 Pin | RPi GPIO Pin +--- | --- +UART5_TX (2) | RXD (GPIO 15 - pin 10) +UART5_RX (3) | TXD (GPIO 14 - pin 8) +GND (6) | Ground (pin 6) + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. +The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +`TELEM2` | RPi GPIO +--- | --- +![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. +You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +Pins | Signal | Voltage +--- | --- | --- +1 (Red) | VCC | +5V +2 (Black) | UART5_TX (out) | +3.3V +3 (Black) | UART5_RX (in) | +3.3V +4 (Black) | UART5_CTS (in) | +3.3V +5 (Black) | UART5_RTS (out) | +3.3V +6 (Black) | GND | GND +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. +Generally the other radio needs to be connected to the ground station USB port. +If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. +For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. +The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. +Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). +You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. +Note that ROS 2 versions target particular Ubuntu versions. +We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. + In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. +Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. +MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. +You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). +However we will install and use a simple developer MAVLink GCS called `mavproxy`. +This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. +A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + UXRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. + For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + + :::note + Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. + If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + ::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. +You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. +In the next section we'll set up the both Pixhawk and RPi to use uXRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and uXRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [uXRCE-DDS](../middleware/uxrce_dds.md) pages cover the options for setting up the uXRCE-DDS and ROS, focussing on ROS 2 "Foxy". +This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. +It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. +We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + UXRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [UXRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#UXRCE_DDS_CFG) disable MAVLink on TELEM2 and enable the uXRCE-DDS client on TELEM2, respectively. + The `SER_TEL2_BAUD` rate sets the comms link data rate. + You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note + You will need to reboot the flight controller to apply any changes to these parameters. + ::: + +1. Check that the [uxrce_dds_client](../modules/modules_system.md#uxrce_dds_client) module is now running. + YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + uxrce_dds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +uxrce_dds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). +For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the Micro XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the micro XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [uXRCE-DDS > Micro XRCE-DDS Agent Installation](../middleware/uxrce_dds.md#micro-xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. +You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/en/complete_vehicles/README.md b/en/complete_vehicles/README.md index 7e549eee732e4..5981ce536bf3d 100644 --- a/en/complete_vehicles/README.md +++ b/en/complete_vehicles/README.md @@ -48,7 +48,7 @@ They allow you to use parts that are known to work, and to fly a vehicle that is ::: * Multicopter - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/en/complete_vehicles/crazyflie2.md b/en/complete_vehicles/crazyflie2.md index d88b2b13c65b8..150f779cc4b04 100644 --- a/en/complete_vehicles/crazyflie2.md +++ b/en/complete_vehicles/crazyflie2.md @@ -41,7 +41,7 @@ The main hardware documentation is here: https://wiki.bitcraze.io/projects:crazy * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## Flashing PX4 @@ -127,7 +127,7 @@ We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/ The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -162,7 +162,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these ``` python cfbridge.py ``` - + :::note *Cfbridge* by default tries to initiate the radio link communication on channel 80 and with crazyflie address 0xE7E7E7E7E7. If you are using [multiple crazyflies and/or crazyradios](https://github.com/dennisss/cfbridge/blob/master/README.md#advanced-swarming) in the same room and want to use a different channel and/or address for each, first connect the crazyflie with QGroundControl via a USB cable and change the syslink parameters (channel, address) in QGroundControl. @@ -174,6 +174,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these :::tip If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching *cfbridge* in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib. + ``` make venv ``` @@ -227,7 +228,7 @@ Since the onboard barometer is highly susceptible to wind disturbances created b ## Position Control With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. -Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. +Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Moreover, the flow deck shares the same SPI bus as the SD card deck, therefore logging at high rate on SD card is not recommended when flying in *Position mode*. :::note @@ -273,6 +274,7 @@ To connect to Crazyflie 2.0 via MAVROS: - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/en/complete_vehicles/crazyflie21.md b/en/complete_vehicles/crazyflie21.md index 821fb7f20864a..070519aa9c54c 100644 --- a/en/complete_vehicles/crazyflie21.md +++ b/en/complete_vehicles/crazyflie21.md @@ -51,7 +51,7 @@ Useful peripheral hardware includes: * [Buzzer deck](https://store.bitcraze.io/collections/decks/products/buzzer-deck) Audio feedback on system events, like low battery or charging completed. * [Breakout deck](https://store.bitcraze.io/collections/decks/products/breakout-deck): Expansion board that gives you the ability to test new hardware easily without soldering. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): High speed onboard logging to a micro SD card -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Assemble Crazyflie 2.1 @@ -146,7 +146,7 @@ We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/ The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` diff --git a/en/complete_vehicles/holybro_kopis2.md b/en/complete_vehicles/holybro_kopis2.md index bc86b31d0ee4a..f440f59ab24bc 100644 --- a/en/complete_vehicles/holybro_kopis2.md +++ b/en/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## Where to Buy The *Kopis 2* can be bought from a number of vendors, including: -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) In addition you will need: + - An RC transmitter. The *Kopis 2* can ship with an FrSky receiver or no receiver at all. - LiPo battery and charger. - FPV goggles if you want to fly FPV. diff --git a/en/complete_vehicles/intel_aero.md b/en/complete_vehicles/intel_aero.md index 53e8b8d0f8a14..a8c747dde17c9 100644 --- a/en/complete_vehicles/intel_aero.md +++ b/en/complete_vehicles/intel_aero.md @@ -3,240 +3,5 @@ :::warning This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -PX4 v1.11 is the last release that supports this platform. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -The *Intel Aero Ready to Fly Drone*® is a UAV development platform. -Part of this is the *Intel Aero Compute Board*, running Linux on a Quad-core CPU. -The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. -These are integrated in the same package on the *Intel Aero Ready to Fly Drone*, -which also includes the vision accessory kit. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## Introduction - -The main documentation on the [official wiki](https://github.com/intel-aero/meta-intel-aero/wiki) explains how to setup, update and connect to the board, -and how to do development on the Linux side. The instructions in this topic concentrate on updating the firmware on the microcontroller from a development tree. - -It's important to update to the latest image available since some instructions change between releases. -You can check the BIOS and distro version by connecting to the board and running the following command: - -``` -get_aero_version.py -``` - -The instructions here are tested with the following version: - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Setup Intel Aero using Ubuntu - -In order to install Ubuntu on Intel Aero, the following equipment is needed: - -1. Power supply (battery or network cable) -1. Micro HDMI to HDMI cable to attach a monitor -1. Micro USB3 to USB2 female adapter -1. USB Hub to attach mouse and keyboard - -Follow the linked instructions from [Intel Aero wiki > Installing Ubuntu on Intel Aero](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero): - -1. [Upgrade Yocto first](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (optional) -1. [OS](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [Intel Aero Repository](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -As soon as the steps under *Intel Aero Repository* (above) are completed the Aero kernel is installed. -From this point forwards, always boot using this kernel. - -Follow the instructions to flash the BIOS, FPGA and Flight Controller. -Open the MAVLink router config file: **/etc/mavlink-router/main.conf** - -Include the laptop IP as a UDP Endpoint by adding the following lines to the configuration file. -The IP address must be set to the one of the laptop. -To find the IP address of the laptop, execute: `ifconfig`. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -After all those steps are completed, the drone should automatically connect to *QGroundControl* running on the laptop. - -Next install ROS, by following the [instructions here](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS). - -### RealSense Camera - -1. RealSense SDK - - Follow the steps to install the RealSense SDK listed on the [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk). - When cloning the repository, the legacy branch needs to be used for the R200 model. If the D435 or D415 is used, the master branch needs to be cloned. All other steps are the same and the branches can be just switched back and forth if the camera is changed. - - If the RealSense R200 is used, it can already be started over a ROS node using: - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - If any D400 series camera is used, follow the next step to install a different ROS wrapper. - -1. ROS Wrapper for D400 series RealSense - - Follow the instructions in [Install Intel RealSense ROS from Sources](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) to install a catkin workspace and clone the RealSense software. - - Install the udev rules using: - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - Now the RealSense can be started over a ROS node using: - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### Obstacle Avoidance - -To run the PX4 obstacle avoidance software, install catkin first: - -``` -apt install python-catkin-tools -``` - -Create a catkin workspace and initialize it. -Then clone the avoidance repository into the source space, or use a symbolic link to the source space. -Build the package and start the ROS node using: - -``` -catkin build local_planner - -roslaunch local_planner local_planner_aero.launch -``` - -## Flashing PX4 software - -After setting up the PX4 development environment, follow these steps update the PX4 software: - -1. Do a full update of all software on the vehicle (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release) -1. Grab the [Firmware](https://github.com/PX4/PX4-Autopilot) -1. Compile with `make intel_aerofc-v1_default` -1. Configure the target hostname - - If your system resolves link local names you don't have to do anything and you can skip this step. You can test it by trying to ssh into `intel-aero.local` after connecting to it either via WiFi or USB: - - ``` - ssh root@intel-aero.local - ``` - - If it doesn't work you can try giving the IP that will be used by the upload script: - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. Upload with: `make intel_aerofc-v1_default upload` - - -## Connecting QGroundControl via Network - -1. Make sure you are connected to the board with WiFi or USB Network -1. SSH to the board and make sure MAVLink forwarding runs. - By default it automatically starts when booting. - It can be started manually with: - ``` - systemctl start mavlink-router - ``` -1. Start *QGroundControl* and it should automatically connect. -1. Instead of starting *QGroundControl*, you can open a [MAVLink shell](../debug/mavlink_shell.md) using the script: - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## Connecting LeddarOne Range Finder - -Connect the [LeddarOne](../sensor/leddar_one.md) to the Aero telemetry port. -The pinout for the LeddarOne and Aero telemetry port (TELEM1) are as follows. - -| Pin | Aerofc TELEMETRY | LeddarOne | -| --- | ---------------- | ---------------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 3 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -To enable the rangefinder set the [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) parameter to TELEM1 and reboot the board (instructions for setting parameters [available here](../advanced_config/parameters.md)). - - -## Connecting Lidar Lite Range Finder - -:::warning -The Lidar Lite is not recommended for use with *Intel Aero Ready to Fly Drone*® due to measurements spikes. -::: - -The following instructions are for a [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3 connected via I2C. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. -The pinout for both of them can be found below. -We recommend using the TELEMETRY port as it is not being used. -If your TELEMETRY port is already occupied, a splitter can be used to share the I2C connection (works on any I2C port). -Check the images below for the splitter setup. - -In addition it is recommended to use a electrolytic capacitor for the Lidar Lite I2C connection to reduce spikes in the distance readings (see [here](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) on page 3). - -The pinout for the Lidar Lite V3 and Aero telemetry port are as follows - -| Pin | Aerofc TELEMETRY | Lidar Lite V3 | -| --- | ---------------- | ---------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 3 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| pin | Aerofc COMPASS | Lidar Lite V3 | -| --- | -------------- | ---------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 3 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C splitter](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero LidarLite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Using Optical Flow on the Aero - -The *Intel Aero Ready to Fly Drone*® comes with a preinstalled optical flow binary on the compute board (Linux OS version 1.6 or higher), which enables it to stably fly based on optical flow velocity estimation. -In order to use optical flow, a range sensor has to be installed first (see above). - -To use the optical flow, run the following command in a console on the vehicle's compute board: -``` -systemctl start aero-optical-flow -``` - -If you want to start the optical flow binary at boot, use -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -In addition, the following parameter values should be set in the flight controller. - -Parameter | Value ---- | --- -[EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 -[EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 -[EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 -[EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 diff --git a/en/complete_vehicles/px4_vision_kit.md b/en/complete_vehicles/px4_vision_kit.md index 4edb938f7cada..920ecfc0d636d 100644 --- a/en/complete_vehicles/px4_vision_kit.md +++ b/en/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision Autonomy Development Kit -The [*PX4 Vision Autonomy Development Kit*](http://www.holybro.com/product/px4-vision/) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![Overview](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -17,8 +17,8 @@ The guide explains the minimal additional setup required to get the vehicle read ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://shop.holybro.com/px4-vision_p1225.html?) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## Px4 Vision Guide Content - [Warnings & Notifications](#warnings-and-notifications) @@ -27,7 +27,7 @@ The guide explains the minimal additional setup required to get the vehicle read - [First-time Setup](#first-time-setup) - [Fly the Drone with avoidance](#fly-the-drone-with-avoidance) - [Development using the Kit](#development-using-the-kit) -- [Px4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [Other Development Resources](#other-development-resources) - [How to get Technical Support](#how-to-get-technical-support) @@ -58,8 +58,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). The PX4 Vision DevKit contains following components: - Core Components: @@ -361,7 +360,8 @@ To discuss the interfaces or how to integrate other features join the [PX4 suppo ## PX4 Vision Carrier Board Pinouts -The Carrier board pinouts can be download from [Holybro's website](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf). +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). +The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). ## Other Development Resources @@ -371,7 +371,6 @@ The Carrier board pinouts can be download from [Holybro's website](http://www.ho - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 Avoidance software/documentation](https://github.com/PX4/PX4-Avoidance) - [Path Planning Interface](../computer_vision/path_planning_interface.md) -- [Px4 Vision Carrier Board Pinouts](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) ## How to get Technical Support diff --git a/en/computer_vision/visual_inertial_odometry.md b/en/computer_vision/visual_inertial_odometry.md index a9102fefc42ab..89f8098014c2c 100644 --- a/en/computer_vision/visual_inertial_odometry.md +++ b/en/computer_vision/visual_inertial_odometry.md @@ -90,7 +90,7 @@ The following parameters must be set to use external position information with E Parameter | Setting for External Position Estimation --- | --- -[EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | Set *vision position fusion*, *vision velocity fusion*, *vision yaw fusion* and *external vision rotation* according to your desired fusion model. +[EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | Set to the difference between the timestamp of the measurement and the "actual" capture time. For more information see [below](#tuning-EKF2_EV_DELAY). [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | Set the position of the vision sensor with respect to the vehicles body frame. diff --git a/en/concept/architecture.md b/en/concept/architecture.md index 731bdad11cc9c..034cb5715ec58 100644 --- a/en/concept/architecture.md +++ b/en/concept/architecture.md @@ -119,7 +119,7 @@ There are 2 different ways that a module can be executed: Long-running tasks (doing heavy computation) should potentially also run in a separate task or at least a separate work queue. :::note -Tasks running on a work queue do not show up in [`top`](../modules/modules_command.html#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. ::: diff --git a/en/concept/events_interface.md b/en/concept/events_interface.md index dff059c97be6a..1ee43c4ef6a44 100644 --- a/en/concept/events_interface.md +++ b/en/concept/events_interface.md @@ -110,7 +110,7 @@ Text format for event message description: - Profiles: `CONTENT` `CONTENT` will only be shown if the name matches the configured profile. - This can be used for example to hide developer information from end-users. + This can be used for example to hide developer information from end-users. - URLs: `CONTENT`. If `href` is not set, use `CONTENT` as `URL` (i.e.`https://docs.px4.io` is interpreted as `https://docs.px4.io`) - Parameters: `PARAM_NAME` diff --git a/en/config/README.md b/en/config/README.md index 8231b322e42fd..2b98f06f21678 100644 --- a/en/config/README.md +++ b/en/config/README.md @@ -37,11 +37,11 @@ The video below shows the calibration process in detail (this uses an older vers ## Advanced Configuration -If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4)) then it may benefit from fine tuning, but this is not generally required. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. If you're using a new airframe, a "generic" airframe, significantly modifying an airframe, or using less common sensors then see: -* [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. -* [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). +- [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. +- [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). ## Support diff --git a/en/config/actuators.md b/en/config/actuators.md index ac31fc4bf5d03..e912aac404cb8 100644 --- a/en/config/actuators.md +++ b/en/config/actuators.md @@ -54,12 +54,7 @@ Core geometry concepts and the configuration for a number of different frames ar #### Motor Geometry: Multicopter -The image below shows the geometry setup for a multicopter frame with and without advanced settings. - -:::note -Specifically this is the motor geometry for a [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) muticopter. -Other multicopters frames are configured similarly. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![Geometry MC (QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -81,7 +76,7 @@ Note, this may not be the same as the position of the flight controller! #### Motor Geometry: VTOL Quadrotor Tailsitter -The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). Motors have the same configuration fields as for the [multicopter geometry](#motor-geometry-multicopter). @@ -100,7 +95,7 @@ The motor geometry for a [Generic Quadplane VTOL Tiltrotor](../airframes/airfram #### Motor Geometry: Standard VTOL -The motor geometry for a [Generic Standard Quadplane VTOL Tiltrotor](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![Geometry motor: standard vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -145,32 +140,64 @@ Note that you will need to also ensure that the ESC associated with bidirectiona The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). - An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. ![Control Surface Setup Example](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +Only the most common settings are displayed by default. +Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + The fields are: - `Control Surfaces`: The number of control surfaces (set this first!) - `Type`: The type of each control surface: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder`, `Left Elevon`, `Right Elevon`, `Left V-Tail`, `Right V-Tail`, `Left Flap`, `Right Flap`, `Airbrakes`, `Custom`. -- `Roll scale`: Effectiveness of actuator around roll axis (normalised: -1 to 1). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Pitch scale`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Yaw scale`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). - `Trim`: An offset added to the actuator so that it is centered without input. This might be determined by trial and error. -- `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - The setting limits the rate of change of an actuator (if not specified then no rate limit is applied). It is intended for actuators that may be damaged if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle. - For example, a setting of 2.0 means that the motor/servo will not be commanded to move from 0 to 1 at a rate that completes the operation in less than 2 seconds (in case of reversible motors, the range is -1 to 1). -- `Lock control surfaces in hover`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" [0, 1] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). + Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" [0, 1] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). + Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `Enabled`: Most vehicles do not use control surfaces in hover. Use this setting to lock them so that they don't affect vehicle dynamics. - `Disabled`: Set this for vehicles that use control surfaces in hover, such as the duo tailsitter (which uses elevons for pitch and yaw control). It should also be set for vehicles that use control surfaces to provide additional stabilization in hover mode when moving at speed or in high winds. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. +For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). +The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. +Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. + They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. + They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. + The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. + It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. + These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. + In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### Actuator Roll, Pitch, and Yaw Scaling @@ -313,7 +340,7 @@ Functions include: Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. @@ -323,7 +350,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/en/config/autotune.md b/en/config/autotune.md index b662a5951b353..a1a25bfa1f616 100644 --- a/en/config/autotune.md +++ b/en/config/autotune.md @@ -3,7 +3,7 @@ Auto-tuning automates the process of tuning the PX4 rate and attitude controllers, which are the most important controllers for stable and responsive flight (other tuning is more "optional"). It is currently enabled for multicopter, fixed wing, and hybrid VTOL fixed wing vehicles. -Tuning only needs to be done once, and is recommended unless unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning Auto-tuning is performed while flying. @@ -104,10 +104,10 @@ Additional notes: * slow oscillations (1 oscillation per second or slower): this often occurs on large platforms and means that the attitude loop is too fast compared to the rate loop. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * fast oscillations (more than 1 oscillation per second): this is because the gain of the rate loop is too high. - **Multicopter:** decrease `MC_[ROLL|PITCH|YAW]RATE_K` by steps of 0.02 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### The auto-tuning sequence fails diff --git a/en/config/battery.md b/en/config/battery.md index 3fd7c8a4c1d7c..a2b7f086b7614 100644 --- a/en/config/battery.md +++ b/en/config/battery.md @@ -199,7 +199,7 @@ To enable this feature: This load compensation method estimates the load based on the total thrust that gets commanded to the motors. -:::caution +:::warning This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. Use [Current-based Load Compensation](#current_based_load_compensation) instead if your vehicle has a current sensor. ::: diff --git a/en/config/compass.md b/en/config/compass.md index d23e94a6e8da8..f945a72b501c5 100644 --- a/en/config/compass.md +++ b/en/config/compass.md @@ -65,9 +65,36 @@ Notes: - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. +These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. + A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. + This can also be used to change the relative priority of a compass. + + ## Further Information -* [Peripherals > GPS & Compass > Compass Configuration](../gps_compass/README.md#compass-configuration) -* [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) -* [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) + diff --git a/en/config/flight_controller_orientation.md b/en/config/flight_controller_orientation.md index d2e70d9b349cb..9c45da669baf0 100644 --- a/en/config/flight_controller_orientation.md +++ b/en/config/flight_controller_orientation.md @@ -33,6 +33,7 @@ To set the orientations: 1. Start *QGroundControl* and connect the vehicle. 1. Select the **Gear** icon (Vehicle Setup) in the top toolbar and then **Sensors** in the sidebar. 1. Select the **Set Orientations** button. + 1. Select the **AutoPilot Orientation** (as [calculated above](#calculating-orientation)). diff --git a/en/config/flight_mode.md b/en/config/flight_mode.md index 8c092d198463f..9d6cee114e8cc 100644 --- a/en/config/flight_mode.md +++ b/en/config/flight_mode.md @@ -101,7 +101,7 @@ The video below shows how this is done with the *FrSky Taranis* transmitter. @[youtube](https://youtu.be/TFEjEQZqdVA) -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## Further Information diff --git a/en/config/safety.md b/en/config/safety.md index f9fcfaf9482ce..5965adf2b01d5 100644 --- a/en/config/safety.md +++ b/en/config/safety.md @@ -28,7 +28,7 @@ Action | Description [Flight termination](../advanced_config/flight_termination.md) | Turns off all controllers and sets all PWM outputs to their failsafe values (e.g. [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1), [PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1)). The failsafe outputs can be used to deploy a parachute, landing gear or perform another operation. For a fixed-wing vehicle this might allow you to glide the vehicle to safety. If multiple failsafes are triggered, the more severe action is taken. -For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -72,7 +72,7 @@ Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. @@ -83,12 +83,12 @@ PX4 and the receiver may also need to be configured in order to *detect RC loss* Additional (and underlying) parameter settings are shown below. -Setting | Parameter | Description +Parameter | Setting | Description --- | --- | --- - RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. -RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. -Failsafe Action | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. -RC Loss Exceptions | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. +[COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. +[COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). +[NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Failsafe Action | Disabled, Loiter, Return, Land, Disarm, Terminate. +[COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC Loss Exceptions | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. ### Data Link Loss Failsafe @@ -219,7 +219,6 @@ The relevant parameters are shown below: Parameter | Description --- | --- [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Delay after loss of offboard connection before the failsafe is triggered. -[COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | Failsafe action if no RC is available: Land mode, Hold mode, Return mode. [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Failsafe action if RC is available: Position mode, Altitude mode, Manual mode, Return mode, Land mode, Hold mode. ### Mission Feasibility Checks @@ -239,24 +238,27 @@ Parameter | Description --- | --- [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Set the failsafe action: Disabled, Warn, Return mode, Land mode. -### QuadChute Failsafe +### Quad-chute Failsafe -Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor or control surface failed. -If triggered, the vehicle will immediately switch to multicopter mode. -If the vehicle was in [Mission mode](../flight_modes/mission.md) it enters failsafe [Return mode](../flight_modes/return.md). +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. +If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -The quadchute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -The parameters that control when the quadchute will trigger are listed in the table below. +The parameters that control when the quad-chute will trigger are listed in the table below. Parameter | Description --- | --- -[VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | Maximum negative altitude error for fixed wing flight. If the altitude drops more than this value below the altitude setpoint the vehicle will transition back to MC mode and enter failsafe RTL. -[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude for fixed wing flight. When the altitude drops below this value in fixed wing flight the vehicle will transition back to MC mode and enter failsafe RTL. -[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Maximum pitch angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. -[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Maximum roll angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. +[COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. +[VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) |Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. +[VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. +[VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## Failure Detector diff --git a/en/config_fw/advanced_tuning_guide_fixedwing.md b/en/config_fw/advanced_tuning_guide_fixedwing.md index c2afc4a869b48..4fbd36ce63c87 100644 --- a/en/config_fw/advanced_tuning_guide_fixedwing.md +++ b/en/config_fw/advanced_tuning_guide_fixedwing.md @@ -77,11 +77,11 @@ These specify the height rates at which the vehicle will climb or descend in ord Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1 Controller Tuning (Position) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - This is the L1 distance and defines the tracking point ahead of the aircraft it's following. - A value of 25 meters works for most aircraft. - A value of 16-18 will still work, and provide a sharper response. +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. + A value of 10-20 meters works for most aircraft. Shorten slowly during tuning until response is sharp without oscillation. + Vehicles with a slow roll dynamic should have this value increased. diff --git a/en/config_fw/trimming_guide_fixedwing.md b/en/config_fw/trimming_guide_fixedwing.md index 911096935932c..2708fc4efb083 100644 --- a/en/config_fw/trimming_guide_fixedwing.md +++ b/en/config_fw/trimming_guide_fixedwing.md @@ -15,7 +15,7 @@ An overview of those parameters and their use case is shown below: - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM) applies trim to the signal received from the RC transmitter. These parameters are set automatically during [RC calibration](../config/radio.md). -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1) applies trim to a PWM channel, after mixing. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. These are used to finely align the control surfaces to default angles before flying. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF) applies an offset to the pitch setpoint. This is used to set the angle of attack at which your aircraft needs to fly at cruise speed. @@ -40,13 +40,13 @@ You can then trim your remote (with the trim switches) and report the values to ## Advanced Trimming Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. -For this purpose, a bilinear curve (see figure below) function of airspeed and a pitch trim increment function of the flaps state can be defined using the following parameters: +For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW\_DTRIM\_\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN) are the roll/pitch/yaw trim value added to `TRIM_ROLL/PITCH/YAW` at min/max airspeed (defined by [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)). -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim Curve](../../assets/config/fw/fixedwing_dtrim.png) -A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. +A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. diff --git a/en/config_heli/README.md b/en/config_heli/README.md index 90ce6b20abf94..e79635822307c 100644 --- a/en/config_heli/README.md +++ b/en/config_heli/README.md @@ -32,9 +32,8 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/en/config_mc/filter_tuning.md b/en/config_mc/filter_tuning.md index efaeca35cfdef..22619776dd20e 100644 --- a/en/config_mc/filter_tuning.md +++ b/en/config_mc/filter_tuning.md @@ -27,7 +27,8 @@ The following factors affect control latency: 4 kHz or higher is only recommended for controllers with STM32H7 processor or newer (2 kHz value is near the limit for less capable processors). - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot ([PWM_AUX_RATE=0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) or [PWM_MAIN_RATE=0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)) to reduce latency. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. + The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). Below we look at the impact of the low pass filters. diff --git a/en/config_mc/pid_tuning_guide_multicopter.md b/en/config_mc/pid_tuning_guide_multicopter.md index e2960fc6e1e18..d35e49eeee57a 100644 --- a/en/config_mc/pid_tuning_guide_multicopter.md +++ b/en/config_mc/pid_tuning_guide_multicopter.md @@ -203,7 +203,7 @@ The motor command in PX4 called `actuator_output` can be PWM, Dshot, UAVCAN comm The curves shown in this plot are parametrized by both α and k, and also show thrust and PWM in real units (kgf and μs). In order to simplify the curve fit problem, you can normalize the data between 0 and 1 to find `k` without having to estimate α (α = 1, when the data is normalized). -[![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note The mapping between PWM and static thrust depends highly on the battery voltage. @@ -226,7 +226,7 @@ over a linear range of normalized motor command values between 0 and 1. Note that this is the equation that is used in the firmware to map thrust and motor command, as shown in the [THR_MDL_FAC](../advanced_config/parameter_reference.md#THR_MDL_FAC) parameter reference. Here, *rel_thrust* is the normalized thrust value between 0 and 1, and *rel_signal* is the normalized motor command signal value between 0 and 1. -In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set to 0.7. +In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set to 0.7. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb @@ -235,20 +235,6 @@ Start off with 0.3 and increase it by 0.1 at a time. If it is too high, you will start to notice oscillations at lower throttle values. If it is too low you'll notice oscillations at higher throttle values. - - ### Airmode & Mixer Saturation diff --git a/en/config_mc/pid_tuning_guide_multicopter_basic.md b/en/config_mc/pid_tuning_guide_multicopter_basic.md index 70cd83139fa2b..f9b0c3497768f 100644 --- a/en/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/en/config_mc/pid_tuning_guide_multicopter_basic.md @@ -42,8 +42,8 @@ Then adjust the sliders (as discussed below) to improve the tracking of the resp - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. This should give you a vehicle that already flies. - You should have done an [ESC calibration](../advanced_config/esc_calibration.md). -- If using PWM output: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN) is set correctly. - It needs to be set low, but such that the **motors never stop** when the vehicle is armed. +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). + These need to be set low, but such that the **motors never stop** when the vehicle is armed. This can be tested in [Acro mode](../flight_modes/acro_mc.md) or in [Manual/Stabilized mode](../flight_modes/manual_stabilized_mc.md): - Remove propellers diff --git a/en/config_mc/racer_setup.md b/en/config_mc/racer_setup.md index 8564b2f102a9a..86a44a59d3263 100644 --- a/en/config_mc/racer_setup.md +++ b/en/config_mc/racer_setup.md @@ -75,7 +75,7 @@ In particular, set the [Airframe](../config/airframe.md) that most closely match These parameters are important: -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - Set the maximum roll-, pitch- and yaw rates for Manual/Stabilized mode as desired: [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) and [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX). The maximum tilt angle is configured with [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX). @@ -131,7 +131,8 @@ These are the factors that affect the latency: - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable One-Shot to reduce latency ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)=0). +- PWM output signal: enable the One-Shot protocol to reduce latency. + The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### Filter Tuning diff --git a/en/config_vtol/vtol_back_transition_tuning.md b/en/config_vtol/vtol_back_transition_tuning.md index a0473b78bcce3..a52427464b92e 100644 --- a/en/config_vtol/vtol_back_transition_tuning.md +++ b/en/config_vtol/vtol_back_transition_tuning.md @@ -1,57 +1,20 @@ # VTOL Back-transition Tuning When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. -As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). +The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). +Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## Back-transition duration - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## Setting expected deceleration -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## Applying airbrakes - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## Applying reverse thrust on your fixed wing motor - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### Using throttle scaling (3D) +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. +To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. +Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### On a control channel - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## Typical setup - -An example of a setup that employs most features listed above would be the following: +## Back-transition duration -- Airframe: Any VTOL supporting reverse thrust (e.g. DeltaQuad) -- ESC: A fixed wing ESC that supports motor reversing (e.g. Hobbywing Platinum Pro 60A) -- Estimated deceleration value in m/s/s `VT_B_DEC_MSS`: 2.5 -- Back-transition duration timeout in seconds `VT_B_TRANS_DUR`: 10 -- Set reverse channel high during back-transition `VT_B_REV_OUT`: 1.0 -- Apply 70% thrust during back-transition `VT_B_TRANS_THR`: 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. +During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. +The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/en/config_vtol/vtol_quad_configuration.md b/en/config_vtol/vtol_quad_configuration.md index 678e8bcad3c56..25d4e0aa89a92 100644 --- a/en/config_vtol/vtol_quad_configuration.md +++ b/en/config_vtol/vtol_quad_configuration.md @@ -1,13 +1,16 @@ -# QuadPlane VTOL Configuration & Tuning +# Generic Standard VTOL (QuadPlane) Configuration & Tuning + +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. -This is the configuration documentation for a QuadPlane VTOL setup (Plane combined with Quadcopter). For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). ## Firmware & Basic Settings 1. Run *QGroundControl* -2. Flash the master firmware -3. In the Setup tab select the appropriate VTOL airframe, if your airframe is not listed select the Fun Cub VTOL airframe. +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### Flight / Transition Mode Switch @@ -53,11 +56,6 @@ This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. -If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -149,4 +147,4 @@ If it’s still travelling fast this should happen quickly. ### Support -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/en/config_vtol/vtol_without_airspeed_sensor.md b/en/config_vtol/vtol_without_airspeed_sensor.md index a0a3be7f91421..4b28a53da3ba8 100644 --- a/en/config_vtol/vtol_without_airspeed_sensor.md +++ b/en/config_vtol/vtol_without_airspeed_sensor.md @@ -62,7 +62,8 @@ Set the minimum front transition time ([VT_TRANS_MIN_TM](../advanced_config/para ### Optional Recommended Parameters -Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'QuadChute' ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. @@ -71,7 +72,8 @@ The position estimator tested for this mode is EKF2, you can set this by changin ## First Flight Without Airspeed Sensor The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). -It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. +It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: diff --git a/en/contribute/code.md b/en/contribute/code.md index 3c947d0eecf6e..b255c0ce4df1b 100644 --- a/en/contribute/code.md +++ b/en/contribute/code.md @@ -4,7 +4,7 @@ The PX4 project uses a three-branch Git branching model: -* [master](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta) has been thoroughly tested. It's intended for flight testers. * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable) points to the last release. diff --git a/en/contribute/dev_call.md b/en/contribute/dev_call.md index defdb33fd7037..613412f931f54 100644 --- a/en/contribute/dev_call.md +++ b/en/contribute/dev_call.md @@ -1,13 +1,11 @@ -# Weekly Dev Call +# Weekly Community Q&A Call (Previously "Dev Call")

          This page may be out of date

          .

          The latest version can be found here.

          -The PX4 dev team syncs up on platform technical details and in-depth analysis. -There is also space in the agenda to discuss pull requests, major impacting issues and Q&A. - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## Who should attend: @@ -15,33 +13,20 @@ There is also space in the agenda to discuss pull requests, major impacting issu * Component maintainers * Test team lead * Dronecode members -* Community members +* Community members (you!) :::tip -The dev call is open to all interested developers (not just the core dev team). +The Community Q&A call is open to all interested community members. + This is a great opportunity to meet the team and contribute to the ongoing development of the platform. ::: ## What gets discussed? -The first/main part of the meeting runs for 45 minutes and provides a high-level forum to discuss where the project is going. - -This is where we discuss *contributions*, including issues/PRs that have the [dev call](https://github.com/PX4/PX4-Autopilot/labels/devcall5) label. -We expect the proposer and the assigned reviewer to be on the call! - -:::note -The main call is designed to support rapid/focused decision making. -We don't expect deep technical discussions and we will not spend extended amounts of time on feature requests. -Proposals are welcome, but they need a sponsor (someone willing to *implement* the work)! -::: - -The second part of the meeting is for in-depth technical discussions and open ended questions. -The core team/subsystem maintainers will be available for up to 45 additional minutes. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## Schedule -* TIME: Wednesday 17h00 CET, 11h00 EST, 08h00 PST ([subscribe to calendar](https://www.dronecode.org/calendar/)) -* **Join the call**: [https://meet.jit.si/PX4DeveloperCallWeekly](https://meet.jit.si/PX4DeveloperCallWeekly) - -* Agenda is published before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io//c/weekly-dev-call) -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/en/debug/simulation_debugging.md b/en/debug/simulation_debugging.md index 412c11b3e6c8e..b4f1bfa472c6c 100644 --- a/en/debug/simulation_debugging.md +++ b/en/debug/simulation_debugging.md @@ -29,24 +29,26 @@ To use valgrind during the SITL simulation: make px4_sitl_default jmavsim___valgrind ``` -## Start combinations +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. -This results in the start options below: +By default SITL is launched without a debugger attached when using any simulator backend: ```sh -make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb - +make px4_sitl_default gz make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +make px4_sitl_default jmavsim ``` -where the last parameter is the <viewer\_model\_debugger> triplet (using three underscores implies the default 'iris' model). -This will start the debugger and launch the SITL application. -In order to break into the debugger shell and halt the execution, hit ```CTRL-C```: +For Gazebo Classic (only) you can also start the simulator with a debugger attached. +Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb +``` + +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. +In order to break into the debugger shell and halt the execution, hit `CTRL-C`: ```sh Process 16529 stopped @@ -60,7 +62,7 @@ libsystem_kernel.dylib`__read_nocancel: (lldb) ``` -In order to not have the DriverFrameworks scheduling interfere with the debugging session ```SIGCONT``` should be masked in LLDB and GDB: +In order to not have the DriverFrameworks scheduling interfere with the debugging session `SIGCONT` should be masked in LLDB and GDB: ```bash (lldb) process handle SIGCONT -n false -p false -s false @@ -77,14 +79,14 @@ After that the lldb or gdb shells behave like normal sessions, please refer to t The last parameter, the <viewer\_model\_debugger> triplet, is actually passed to make in the build directory, so ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` is equivalent with ```sh make px4_sitl_default # Configure with cmake -make -C build/px4_sitl_default jmavsim___gdb +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -93,19 +95,84 @@ A full list of the available make targets in the build directory can be obtained make help ``` -but for your convenience, a list with just the <viewer\_model\_debugger> triplets -is printed with the command - -```sh -make list_vmd_make_targets -``` +## Attaching GDB to running SITL + +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. + It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + For example, + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## Compiler optimization -It is possible to suppress compiler optimization for given executables and/or -modules (as added by cmake with `add_executable` or `add_library`) when configuring -for `posix_sitl_*`. This can be handy when it is necessary to step through code -with a debugger or print variables that would otherwise be optimized out. +It is possible to suppress compiler optimization for given executables and/or modules (as added by cmake with `add_executable` or `add_library`) when configuring +for `posix_sitl_*`. +This can be handy when it is necessary to step through code with a debugger or print variables that would otherwise be optimized out. To do so, set the environment variable `PX4_NO_OPTIMIZATION` to be a semi-colon separated list of regular expressions that match the targets that need to be compiled without optimization. This environment variable is ignored when the configuration isn't `posix_sitl_*`. @@ -118,8 +185,7 @@ export PX4_NO_OPTIMIZATION='px4;^modules__uORB;^modules__systemlib$' would suppress optimization of the targets: platforms\_\_posix\_\_px4\_layer, modules\_\_systemlib, modules\_\_uORB, examples\_\_px4\_simple\_app, modules\_\_uORB\_\_uORB\_tests and px4. -The targets that can be matched with these regular expressions can be -printed with the command: +The targets that can be matched with these regular expressions can be printed with the command: ```sh make -C build/posix_sitl_* list_cmake_targets diff --git a/en/debug/swd_debug.md b/en/debug/swd_debug.md index aa5c08773db69..c42657c962508 100644 --- a/en/debug/swd_debug.md +++ b/en/debug/swd_debug.md @@ -39,7 +39,7 @@ Other options are given below. ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/en/debug/system_wide_replay.md b/en/debug/system_wide_replay.md index e6e2b65e87aa2..c1fd343ff72fe 100644 --- a/en/debug/system_wide_replay.md +++ b/en/debug/system_wide_replay.md @@ -15,7 +15,7 @@ For `ekf2` this is already the case with the default set of logged topics. It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. -For an example, see [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_combined.msg). +For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). Reasons for this are given below. diff --git a/en/dev_airframes/README.md b/en/dev_airframes/README.md index e89c6ef310a7f..eb50d577a0a61 100644 --- a/en/dev_airframes/README.md +++ b/en/dev_airframes/README.md @@ -1,6 +1,6 @@ # Airframes -PX4 has a flexible [mixing system](../concept/mixing.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **Planes:** Normal planes, flying wings, inverted V-tail planes, etc. * **Multicopters:** Helicopters, tricopters, quadcopters, hexarotors, dodecarotors in many different geometries. diff --git a/en/dev_airframes/adding_a_new_frame.md b/en/dev_airframes/adding_a_new_frame.md index 18471184adc1b..2b9bd26ea18da 100644 --- a/en/dev_airframes/adding_a_new_frame.md +++ b/en/dev_airframes/adding_a_new_frame.md @@ -23,7 +23,7 @@ To determine which parameters/values need to be set in the configuration file, y The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -161,7 +161,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -205,9 +205,6 @@ param set-default MPC_Z_VEL_MAX_UP 2 param set-default NAV_ACC_RAD 3 -param set-default PWM_MAIN_DIS3 1000 -param set-default PWM_MAIN_MIN3 1120 - param set-default SENS_BOARD_ROT 4 param set-default VT_ARSP_BLEND 10 @@ -217,12 +214,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 @@ -263,6 +260,7 @@ param set-default PWM_MAIN_FUNC8 104 param set-default PWM_MAIN_TIM0 50 param set-default PWM_MAIN_DIS1 1500 param set-default PWM_MAIN_DIS2 1500 +param set-default PWM_MAIN_DIS3 1000 param set-default PWM_MAIN_DIS4 1500 ``` diff --git a/en/dev_log/ulog_file_format.md b/en/dev_log/ulog_file_format.md index 033ea8faaa9c0..700a560d05902 100644 --- a/en/dev_log/ulog_file_format.md +++ b/en/dev_log/ulog_file_format.md @@ -482,7 +482,6 @@ A valid ULog parser must fulfill the following requirements: - [hardfault_log module](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log): append hardfault crash data. - [pyulog](https://github.com/PX4/pyulog): python, ULog parser library with CLI scripts. - [FlightPlot](https://github.com/PX4/FlightPlot): Java, log plotter. -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis): Python, log plotter and 3D visualization tool based on pyulog. - [MAVLink](https://github.com/mavlink/mavlink): Messages for ULog streaming via MAVLink (note that appending data is not supported, at least not for cut off messages). - [QGroundControl](https://github.com/mavlink/qgroundcontrol): C++, ULog streaming via MAVLink and minimal parsing for GeoTagging. - [mavlink-router](https://github.com/01org/mavlink-router): C++, ULog streaming via MAVLink. diff --git a/en/dev_setup/dev_env.md b/en/dev_setup/dev_env.md index 18877740522ce..0af64bfb86a55 100644 --- a/en/dev_setup/dev_env.md +++ b/en/dev_setup/dev_env.md @@ -12,13 +12,13 @@ The table below shows what PX4 targets you can build on each OS. Target | Linux (Ubuntu) | Mac | Windows --|:--:|:--:|:--: -**NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | ✓ | ✓ | ✓ +**NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | ✓ | ✓ | ✓ **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | -**Simulation:** ROS2 with Gazebo | ✓ | | +**Simulation:** ROS 2 with Gazebo | ✓ | | Experienced Docker users can also build with the containers used by our continuous integration system: [Docker Containers](../test_and_ci/docker.md) diff --git a/en/dev_setup/dev_env_linux_ubuntu.md b/en/dev_setup/dev_env_linux_ubuntu.md index ff03161f189ed..5db97b9a0f38a 100644 --- a/en/dev_setup/dev_env_linux_ubuntu.md +++ b/en/dev_setup/dev_env_linux_ubuntu.md @@ -175,8 +175,8 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. -ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. +ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/en/dev_setup/dev_env_mac.md b/en/dev_setup/dev_env_mac.md index 5a4db3db906d3..e0e452c68d289 100644 --- a/en/dev_setup/dev_env_mac.md +++ b/en/dev_setup/dev_env_mac.md @@ -32,9 +32,9 @@ The installation of Homebrew is quick and easy: [installation instructions](http ## Enable more open files (Handle "LD: too many open files" error) -Create the `~/.zshenv` file or append it (by running `open ~/.zshenv` on the terminal) and add this line: +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Enforce Python Version diff --git a/en/dev_setup/dev_env_windows_vm.md b/en/dev_setup/dev_env_windows_vm.md index 308678e25510a..cf89531b1e98d 100644 --- a/en/dev_setup/dev_env_windows_vm.md +++ b/en/dev_setup/dev_env_windows_vm.md @@ -5,26 +5,31 @@ This development environment is [not supported](../advanced/dev_env_unsupported. See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools we do support! ::: -Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. - -:::tip -Allocate as many CPU cores and memory resources to the VM as possible. -::: +Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. +After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: + 1. Firmware building will be slower than native building on Linux. -1. The JMAVSim frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. +1. The JMAVSim simulation, frame rate be much slower than on native Linux. + In some cases the vehicle may crash due to issues related to insufficient VM resources. 1. Gazebo and ROS can be installed, but are unusably slow. -## Instructions +:::tip +Allocate as many CPU cores and memory resources to the VM as possible. +::: There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. -This guide walks you through a VMWare setup. +This guide walks you through a VMWare setup. +There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). + +## VMWare Setup + VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) 1. Install it on your Windows system -1. Download the desired version of [Ubuntu Desktop ISO Image](https://www.ubuntu.com/download/desktop). +1. Download the desired version of [Ubuntu Desktop ISO Image](https://www.ubuntu.com/download/desktop). (see [Linux Instructions Page](../dev_setup/dev_env_linux.md) for recommended Ubuntu version). 1. Open *VMWare Player*. 1. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** @@ -35,12 +40,58 @@ VMWare performance is acceptable for basic usage (building Firmware) but not for ::: 1. Select the option to create a new virtual machine. 1. In the VM creation wizard choose the downloaded Ubuntu ISO image as your installation medium and will automatically detect the operating system you want to use. -1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. -1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. -1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. This will enhance performance and usability of your VM usage: - * Significantly enhanced graphics performance - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * Guest display resolution adaption to the window size - * Clipboard sharing to host system - * File sharing to host system +1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. + Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. +1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. + Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. +1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. + This will enhance performance and usability of your VM usage: + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system 1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. +Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. +::: + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). +You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. + Select the `...Bootloader` device when it appears in the UI. + + :::note + The bootloader device only appears for a few seconds after connecting USB. + If it disappears before you can select it, disconnect and then reconnect USB. + ::: + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. +You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/en/dronecan/README.md b/en/dronecan/README.md index dff3f00b86c5a..09ad763554164 100644 --- a/en/dronecan/README.md +++ b/en/dronecan/README.md @@ -130,7 +130,7 @@ If successful, the firmware binary will be removed from the root directory and t **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/en/dronecan/ark_flow.md b/en/dronecan/ark_flow.md index 99b7d15fc35f8..017e499266360 100644 --- a/en/dronecan/ark_flow.md +++ b/en/dronecan/ark_flow.md @@ -89,7 +89,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/en/dronecan/cuav_can_pmu.md b/en/dronecan/cuav_can_pmu.md index d6bd3dfd4af74..72fe9a4af863c 100644 --- a/en/dronecan/cuav_can_pmu.md +++ b/en/dronecan/cuav_can_pmu.md @@ -56,12 +56,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/en/dronecan/holybro_kotleta.md b/en/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/en/dronecan/holybro_kotleta.md +++ b/en/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/en/dronecan/holybro_m8n_gps.md b/en/dronecan/holybro_m8n_gps.md index a74c507ca5b19..a233873b657d7 100644 --- a/en/dronecan/holybro_m8n_gps.md +++ b/en/dronecan/holybro_m8n_gps.md @@ -13,7 +13,7 @@ In addition, using DroneCAN means that the GPS and compass do not occupy any fli Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/en/dronecan/sapog.md b/en/dronecan/sapog.md index 6b58e8d454766..5a73279f3216d 100644 --- a/en/dronecan/sapog.md +++ b/en/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 Supported ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -UAVCAN is generally speaking a plug'n'play protocol. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -Some popular UAVCAN ESC firmware/products include: -- [Sapog](https://github.com/PX4/sapog#px4-sapog) firmware; an advanced open source sensorless PMSM/BLDC motor controller firmware designed for use in propulsion systems of electric unmanned vehicles. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC Project ESCs](https://vesc-project.com/) (see also [Benjamin Vedder's blog](http://vedder.se) - project owner) -- [OlliW’s UC4H ESC-Actuator Node](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- A number of others are [listed here](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko) - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## Purchase - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Mitochondrik based drives and ESC: -- [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## Wiring/Connections - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 Configuration - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. Power the vehicle using the battery (you must power the whole vehicle, not just the flight controller) and connect *QGroundControl*. -1. Navigate to the **Vehicle Setup > Parameters** screen. :::note [Parameters](../advanced_config/parameters.md) explains how to find and set parameters. -::: -1. Set [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to the value *Sensors and Motors* (3) and then reboot the flight controller. This enables automatic enumeration of the motors (ESC) as described in the [next section](#esc-setup). -1. (Optional) Set [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT) to 1 in order to ensure that the motors are always running at least at the idle throttle while the system is armed. :::note -Some systems will not benefit from this behavior, e.g. glider drones). -::: - - -## ESC Setup - -While UAVCAN devices are generally *plug'n'play* you will still need to enumerate (number) each of the ESC used in your system and set their direction so that they can be identified/controlled by PX4. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -The mechanism for enumerating each type of UAVCAN ESC is different (look up the instructions in your ESC's manual). Setup information for some UAVCAN ESCs is provided below. - - -### Sapog ESC Enumeration using QGroundControl - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. Power the vehicle with a battery and connect to *QGroundControl* -1. Navigate to **Vehicle Setup > Power** in QGC. -1. Start the process of ESC auto-enumeration by pressing the **Start Assignment** button, as shown on the screenshot below. - - ![QGC - UAVCAN ESC auto-enumeration](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - You will hear a sound indicating that the flight controller has entered the ESC enumeration mode. -1. Manually turn each motor in the correct direction of its rotation (as specified in the [Airframe Reference](../airframes/airframe_reference.md)), starting from the first motor and finishing with the last motor. Each time you turn a motor, you should hear a confirmation beep. - - :::note -Make sure to turn each of the motors in the correct direction, as the ESC will automatically learn and remember the direction (i.e. motors that spin clockwise during normal operation must also be turned clockwise during enumeration). -::: - -1. After the last motor is enumerated, the confirmation sound should change to indicate that the enumeration procedure is complete. -1. Reboot PX4 and the Sapog ESCs to apply the new enumeration IDs. - -The following video demonstrates the process: - -@[youtube](https://www.youtube.com/watch?v=4nSa8tvpbgQ) - -### Manual ESC Enumeration using Sapog - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -You can manually configure the ESC index and direction using the [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -:::note -See [Sapog reference manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) for more information about the parameters. -::: - -### Myxa ESC Setup - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -There is some guidance here: [Quick start guide for Myxa v0.1](https://forum.zubax.com/t/quick-start-guide-for-myxa-v0-1/911) (Zubax blog). - - -### VESC ESC Setup - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| Parameter | Option | -| ----------------------- | ---------------------- | -| App to use | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -VESC ID should have the same motor numbering as in PX4 convention, starting at `1` for top-right motor, `2` for bottom-left motor etc. However the `UAVCAN ESC Index` starts from `0`, and as such it is always one index lower than the `VESC ID`. For example, in a quadcopter the bottom left motor will have `VESC ID = 2` and `UAVCAN ESC Index = 1`. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## Troubleshooting - -#### Motors not spinning when armed - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN devices dont get node ID/Firmware Update Fails - -PX4 requires an SD card for UAVCAN node allocation and during firmware update (which happen during boot). Check that there is a (working) SD card present and reboot. - - -## Further Information - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 Reference Manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [Using Sapog based ESC with PX4](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/ja/uavcan/node_firmware.md b/ja/uavcan/node_firmware.md deleted file mode 100644 index dc75d9d1c5407..0000000000000 --- a/ja/uavcan/node_firmware.md +++ /dev/null @@ -1,59 +0,0 @@ -# UAVCAN Firmware Upgrading - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -:::warning -UAVCAN devices typically ship with appropriate firmware preinstalled. -These instructions are primarily needed when developing UAVCAN devices. -::: - -## Flashing/Updating a UAVCAN Binary - -To flash the UAVCAN device, all you need to do is copy the UAVCAN firmware binary into the root directory of the flight controller’s SD card and reboot. - -After restarting the flight controller the UAVCAN device will automatically be updated with new firmware. If successful the firmware binary will be removed from the root directory and there will be a file named **XX.bin** in the **/ufw** directory of the SD card. - -:::note UAVCAN -firmware is usually created as part of the build process. Commonly the firmware image is built in **build/_name_of_your_uavcan_device_**, where _name_of_your_uavcan_device_ is specific to the device you are flashing (e.g. **build/ark_can-flow_default**), and will be named with the format **XX-X.X.XXXXXXXX.uavcan.bin**. -::: - -## Building UAVCAN Firmware - -### ARK Flow - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### Sapog Codebase (Pixhawk ESC 1.4 and Zubax Orel 20) - -Please refer to the [project page](https://github.com/PX4/sapog) to learn how to build and flash this firmware. - -### Zubax GNSS - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### Vectorcontrol ESC Codebase (Pixhawk ESC 1.6 and S2740VC) - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -Before updating firmware via UAVCAN, the Pixhawk ESC 1.6 requires the UAVCAN bootloader be flashed. To build the bootloader, run: - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -After building, the bootloader image is located at `firmware/px4esc_1_6-bootloader.bin`, and the OpenOCD configuration is located at `openocd_px4esc_1_6.cfg`. Follow [these instructions](../uavcan/bootloader_installation.md) to install the bootloader on the ESC. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..bin`. diff --git a/ja/uavcan/notes.md b/ja/uavcan/notes.md deleted file mode 100644 index e5e72492f93dc..0000000000000 --- a/ja/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# Various Notes - -This is a collection of tips and tricks to solve issues when setting up or working with the UAVCAN. - -### Arm but motors not spinning - -If the PX4 Firmware arms but the motors do not start to rotate, check the parameter **UAVCAN\_ENABLE**. It should be set to 3 in order to use the ESCs connected via UAVCAN as output. Moreover, if the motors do not start spinning before thrust is increased, check **UAVCAN\_ESC\_IDLT** and set it to one. - -### Debugging with Zubax Babel - -A great tool to debug the transmission on the UAVCAN bus is the [Zubax Babel](https://zubax.com/products/babel) in combination with the [GUI tool](http://uavcan.org/GUI_Tool/Overview/). They can also be used independently from Pixhawk hardware in order to test a node or manually control UAVCAN enabled ESCs. - - -### UAVCAN devices dont get node ID/FW doesn't update - -PX4 requires an SD card for UAVCAN node allocation and firmware upgrade (both of which happen during boot). Check that there is a (working) SD card present and reboot. - diff --git a/ja/uavcan/pomegranate_systems_pm.md b/ja/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 3954b4e75fe1c..0000000000000 --- a/ja/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate Systems Power Module - -![Module Image](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -Digital Power Module with high resolution current integration, 5V/2A supply with power monitoring, single UAVCAN v0 CANbus interface, and an RGB status LED. - -Detailed setup, configuration, and troubleshooting information can be found on the [manufacturer's device home page](https://p-systems.io/product/power_module). - -## Specifications - - - **Input Voltage:** 6-26V \(2-6S\) - - **Max Continuous Current:** - - **Benchtop:** 40A - - **Forced Cooling:** 100A - - **Max 5V Output Current:** 2A - - **Voltage Resolution:** 0.04 ΔV - - **Current Resolution:** - - **Primary / Battery Bus:** 0.02 ΔA - - **5V bus:** 0.001 ΔA - - **CANbus Termination:** Electronic (on by default) - - **MCU:** STM32 F302K8U - - **Firmware:** [Open Source](https://bitbucket.org/p-systems/firmware/) - - **Electrical Interface:** - - **Power:** Solder pads or XT60PW (right angle, board-mounted connectors) - - **CANbus** Dual JST GH-4 (standard UAVCAN micro-connector) - - **I2C / Serial:** JST GH-5 - - **5V Output:** Solder pads or CANbus / I2C connectors - - **Device Mass:** - - **Without Connectors:** 9g - - **With XT60PW Connectors:** 16g - - - ![Dimensions](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## Configuration - - 1. Enable UAVCAN by setting the [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) parameter to `2` (Sensors Automatic Config) or `3`. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * Battery capacity in mAh: `battery_capacity_mAh` - * Battery voltage when *full*: `battery_full_V`, - * Battery voltage when *empty*: `battery_empty_V` - * Turn on current integration: `enable_current_track` - * (optional) Turn Off CANbus termination resistor :`enable_can_term` - -**Example:** A Power Module with UAVCAN node id `125` connected to a `3S` LiPo with capacity of `5000mAh` can be configured with the following commands: - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -See [device configuration page](https://p-systems.io/product/power_module/configuration) for a full list of parameters. diff --git a/ko/README.md b/ko/README.md index fc0bebcba2a76..4fe4f5a329eb9 100644 --- a/ko/README.md +++ b/ko/README.md @@ -102,8 +102,9 @@ PX4 코드는 [BSD 3-clause 라이센스](https://opensource.org/licenses/BSD-3- * [태평양 시간대 – 티후아나](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=America%2FTijuana) * [오스트레일리아 – 멜버른/시드니/호바트](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) -:::tip -달력의 기본 시간대는 유럽중앙시간대(CET)입니다. +:::tip +The calendar default timezone is Central European Time (CET). + ::: @@ -113,9 +114,9 @@ PX4 코드는 [BSD 3-clause 라이센스](https://opensource.org/licenses/BSD-3- 이 라이브러리에서 사용하는 다음 아이콘들은 별도의 라이센스를 적용합니다. 아래 그림을 참고하십시오. - *placeholder* 아이콘은 [www.flaticon.com](https://www.flaticon.com/ "Flaticon")의 Smashicons에서 만들었으며, CC 3.0 BY 라이센스를 적용합니다. + *placeholder* icon made by Smashicons from www.flaticon.com is licensed by CC 3.0 BY. - *카메라 자동 모드* 아이콘은 [www.flaticon.com](https://www.flaticon.com/ "Flaticon")의 Freepik에서 만들었으며, CC 3.0 라이센스가 적용합니다. + *camera-automatic-mode* icon made by Freepik from www.flaticon.com is licensed by CC 3.0 BY. ## 운영 방법 diff --git a/ko/SUMMARY.md b/ko/SUMMARY.md index e22f7496e9ba2..d07f1f8bc7443 100644 --- a/ko/SUMMARY.md +++ b/ko/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C 배선 퀵 스타트](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X 배선 퀵 스타트](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X 배선 퀵 스타트](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 배선 퀵 스타트](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini 배선 퀵 스타트](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal 배선 퀵 스타트](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 배선 퀵 스타트](assembly/quick_start_holybro_pix32_v5.md) * [Cube 배선 퀵 스타트](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [제조사 지원 오토파일럿](flight_controller/autopilot_manufacturer_supported.md) * [에어마인드 MindPX](flight_controller/mindpx.md) * [에어마인드 마인드레이서](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [CUAV V5 나노 (FMUv5)](flight_controller/cuav_v5_nano.md) * [CUAV 픽스핵 v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [드로텍 드로픽스 (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [홀리브로 카쿠테 F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [실험 중인 오토파일럿](flight_controller/autopilot_experimental.md) * [비글본 블루](flight_controller/beaglebone_blue.md) - * [큐브 오렌지 (큐브파일럿)](flight_controller/cubepilot_cube_orange.md) - * [큐브 옐로 (큐브파일럿)](flight_controller/cubepilot_cube_yellow.md) * [라즈베리 파이 2/3 나비오2](flight_controller/raspberry_pi_navio2.md) * [라즈베리 파이 2/3/4 파일럿파이](flight_controller/raspberry_pi_pilotpi.md) * [라즈베리 파이 OS 기반 파일럿파이](flight_controller/raspberry_pi_pilotpi_rpios.md) * [우분투 기반 파일럿파이](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [단종된 오토파일럿/기체](flight_controller/autopilot_discontinued.md) + * [드로텍 드로픽스 (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S 브러시리스 후프](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [CUAV v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [Snapdragon Flight](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [텔레메트리 무선통신](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [FrSky 텔레메트리](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [CUAV HV 전원 모듈](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [광류 센서](sensor/optical_flow.md) * [ARK Flow](dronecan/ark_flow.md) - * [PX4FLOW](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [ESC와 모터](peripherals/esc_motors.md) * [PWM ESC와 서보](peripherals/pwm_escs_and_servo.md) * [DShot ESCs](peripherals/dshot.md) * [OneShot ESCs and Servos](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [카메라](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [보조 컴퓨터](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [보조 컴퓨터 주변 기기](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [개발](development/development.md) @@ -333,6 +339,7 @@ * [우분투 설정](dev_setup/dev_env_linux_ubuntu.md) * [윈도우 설정](dev_setup/dev_env_windows_wsl.md) * [비주얼 스튜디오 코드 IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [코드 빌드](dev_setup/building_px4.md) * [최초 프로그램 작성](modules/hello_sky.md) * [어플리케이션 모듈 템플릿](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim 시뮬레이션](simulation/jmavsim.md) * [jMAVSim 다중 차량 시뮬레이션](simulation/multi_vehicle_jmavsim.md) * [Gazebo 시뮬레이션](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB Message Reference](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink Messaging](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [XRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/xrce_dds.md) * [모듈과 명령어](modules/modules_main.md) + * [자동 튜닝](modules/modules_autotune.md) * [명령어](modules/modules_command.md) * [통신](modules/modules_communication.md) * [콘트롤러](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [기압 센서](modules/modules_driver_baro.md) * [거리 센서](modules/modules_driver_distance_sensor.md) * [관성 센서](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [자기 센서](modules/modules_driver_magnetometer.md) + * [광류 센서](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [추정기](modules/modules_estimator.md) * [시뮬레이션](modules/modules_simulation.md) * [시스템](modules/modules_system.md) @@ -646,14 +660,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 사용자 가이드](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [ROS 2 브리지를 통한 ROS(1)](ros/ros1_via_ros2.md) - * [ROS/MAVROS](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS 설치 가이드](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS 사용자 정의 메시지 전송](ros/mavros_custom_messages.md) - * [ROS Gazebo 시뮬레이션](simulation/ros_interface.md) - * [ROS Gazebo OctoMap 모델 (1)](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [라즈베리파이에 ROS 설치](ros/raspberrypi_installation.md) * [외부 위치 추정(비전/모션 기반)](ros/external_position_estimation.md) * [드론키트](robotics/dronekit.md) diff --git a/ko/advanced/computer_vision.md b/ko/advanced/computer_vision.md index e8843a8598b15..af8d4934d9285 100644 --- a/ko/advanced/computer_vision.md +++ b/ko/advanced/computer_vision.md @@ -46,8 +46,8 @@ PX4의 VIO 설정 방법을 더 알아보려면 다음을 참고하십시오: [광류 센서(Optical Flow)](../sensor/optical_flow.md) 기술로 2차원 평면상의 속도를 추정합니다(아래 방향으로 향한 카메라와 아래 방향으로 향한 거리 센서 활용). 광류 센서 기술을 더 알아보려면 다음을 참고하십시오. + - [광류](../sensor/optical_flow.md) - - [PX4Flow 스마트 카메라](../sensor/px4flow.md) - [EKF > 광류](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## 외부 참고 자료 diff --git a/ko/advanced/gimbal_control.md b/ko/advanced/gimbal_control.md index f7fde95e0c52a..73c211a88e057 100644 --- a/ko/advanced/gimbal_control.md +++ b/ko/advanced/gimbal_control.md @@ -68,11 +68,11 @@ The [Gazebo Classic](../sim_gazebo_classic/README.md) simulation [Typhoon H480 m make px4_sitl gazebo-classic_typhoon_h480 ``` -다른 모델이나 시뮬레이터에서 마운트 드라이버를 테스트하려면 `vmount start`를 사용하여 드라이버가 실행되는 지 확인한 다음, 해당 매개변수를 설정하십시오. +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## 시험 -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. 다음은 SITL에서의 테스트 방법을 설명합니다. 이 명령은 실제 장치에서도 작동합니다. +The driver provides a simple test command. 다음은 SITL에서의 테스트 방법을 설명합니다. 이 명령은 실제 장치에서도 작동합니다. 다음을 사용하여 시뮬레이션을 시작합니다(이를 위해 매개변수를 변경할 필요는 없음). @@ -83,7 +83,7 @@ make px4_sitl gazebo-classic_typhoon_h480 예를 들어 시동 여부를 확인하십시오. `commander takeoff` 명령어를 실행한 다음, 다음 명령을 사용하여 짐벌(예)을 제어합니다: ``` -vmount test yaw 30 +gimbal test yaw 30 ``` 시뮬레이션된 짐벌은 자체적으로 안정적이므로, MAVLink 명령을 보내는 경우 `stabilize` 플래그를 `false`로 설정합니다. diff --git a/ko/advanced/package_delivery.md b/ko/advanced/package_delivery.md index 4f0813e9189b6..45ad8c56c4fc0 100644 --- a/ko/advanced/package_delivery.md +++ b/ko/advanced/package_delivery.md @@ -9,7 +9,7 @@ Currently only [Grippers](../peripherals/gripper.md) can be used for package del ::: :::note -The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -57,4 +57,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/ko/advanced_config/bootloader_update.md b/ko/advanced_config/bootloader_update.md index 542f776b186a7..fbc5d6f633baf 100644 --- a/ko/advanced_config/bootloader_update.md +++ b/ko/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # 부트로더 업데이트 -[PX4 부트로더](https://github.com/PX4/Bootloader)는 픽스호크 보드(PX4FMU, PX4IO)와 PX4FLOW에 펌웨어를 불러오는 데 사용됩니다. +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). 이 섹션은 픽스호크 부트로더를 업데이트 방법을 설명합니다. @@ -8,7 +8,7 @@ 하드웨어는 일반적으로 미리 설치된 부트로더를 제공합니다. 적절한 부트로더를 포함하는 이미지를 사용하여 [펌웨어를 업데이트](../config/firmware.md#custom)합니다. ::: -## PX4 부트로더 직접 빌드 +## Building the new PX4 Bootloader Yourself FMUv6X STM32H7)로 시작하는 보드는 인트리 PX4 부트로더를 사용합니다. 이전 보드는 레거시 [PX4 부트로더](https://github.com/PX4/Bootloader) 저장소의 부트로더를 사용합니다. 사용 방법은 README의 지침을 참조하십시오. diff --git a/ko/advanced_config/bootloader_update_from_betaflight.md b/ko/advanced_config/bootloader_update_from_betaflight.md index 052887659e717..996392988e910 100644 --- a/ko/advanced_config/bootloader_update_from_betaflight.md +++ b/ko/advanced_config/bootloader_update_from_betaflight.md @@ -4,7 +4,8 @@ 부트로더 설치에는 2가지 선택지가 있습니다: *Betaflight Configurator*를 이용하는 것(더 쉽습니다)과, 소스로 부터 빌드하는 방법이 있습니다. - + + ### Betaflight Configurator로 부트로더 업데이트 이제 보드에 PX4 펌웨어를 설치할 수 있습니다. @@ -21,7 +22,38 @@ #### 부트로더 소스 다운로드 -[dfu-util](http://dfu-util.sourceforge.net/)또는 Windows의 그래픽 툴인 [dfuse](https://www.st.com/en/development-tools/stsw-stm32080.html)로 PX4 부트로더를 설치할 수 있습니다. +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -45,6 +77,18 @@ DFU는 플래싱으로 덮어쓸 수 없으며 플래싱이 실패하더라도, ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. Once completed, enter DFU mode again to complete the regular flashing. +::: + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/ko/advanced_config/esc_calibration.md b/ko/advanced_config/esc_calibration.md index eae6edd3b34ea..eb18d388f3f27 100644 --- a/ko/advanced_config/esc_calibration.md +++ b/ko/advanced_config/esc_calibration.md @@ -42,4 +42,6 @@ ESC를 보정하려면 : :::note -고품질의 컨트롤러는 공장에서 보정후에 판매됩니다. *이론*적으로는 [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) 와[PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) 매개변수만 ESC 기술 사양에 제공된 값으로 변경할 수 있습니다. 그러나, 실제로는 PWM 입력 범위가 고품질 콘트롤러에서도 출고시 설정값과 다를 수 있으므로, 보정을 하는 것이 좋습니다. ::: +고품질의 컨트롤러는 공장에서 보정후에 판매됩니다. In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/ko/advanced_config/ethernet_setup.md b/ko/advanced_config/ethernet_setup.md index 5fff3662c3a46..a70031845c455 100644 --- a/ko/advanced_config/ethernet_setup.md +++ b/ko/advanced_config/ethernet_setup.md @@ -14,7 +14,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -77,7 +77,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Once the network configuration has been set you can disconnect the USB cable. 1. Reboot the flight controller to apply the settings. -Note that the above setup gives the flight controller an address on the Ethernet network. You also need to \[configure the Ethernet port\]((#px4-mavlink-serial-port-configuration) to use MAVLink. +Note that the above setup gives the flight controller an address on the Ethernet network. You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -187,55 +187,44 @@ can connect to the PX4 on port `14550` if you don't modify the PX4 Ethernet port ::: -## ROS2 Setup Example - -:::warning -**This section is out of date!** It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. -::: +## ROS 2 Setup Example +:::note Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. +- You have a supported autopilot hardware running PX4 firmware that includes [XRCE-DDS](../middleware/xrce_dds.md) middleware. Note that PX4 v1.14 and later include the required [microdds-client](../modules/modules_system.md#microdds-client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. - You have followed the Ethernet network and port setup as discussed at the top of this page. +::: -In this example it is assumed that you have followed the example to set your IP addresses. +To set up ROS 2: + +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the micro XRCE-DDS client on PX4](../middleware/xrce_dds.md#starting-the-client), either manually or by customizing the system startup script. Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the XRCE-DDS agent on the companion computer](../middleware/xrce_dds.md#starting-the-agent). For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. Note that the remote IP here is your companion computer IP. This by default starts the micrortps_client connected to UDP ports 2019 and 2020 To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) - ``` - micrortps_client start -t UDP -i - ``` - An output like below is expected in the console: ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! + MicroXRCEAgent udp4 -p 8888 ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/ko/advanced_config/imu_factory_calibration.md b/ko/advanced_config/imu_factory_calibration.md index 6ce8addcfc443..636d413b0a092 100644 --- a/ko/advanced_config/imu_factory_calibration.md +++ b/ko/advanced_config/imu_factory_calibration.md @@ -15,7 +15,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/ko/advanced_config/parameter_reference.md b/ko/advanced_config/parameter_reference.md index 513838f18288f..e5fdee8f1a93d 100644 --- a/ko/advanced_config/parameter_reference.md +++ b/ko/advanced_config/parameter_reference.md @@ -14707,12 +14707,12 @@ table {
          - - + @@ -14763,7 +14763,7 @@ table { - + @@ -14792,14 +14792,14 @@ table { - + - + @@ -14830,6 +14830,13 @@ table { + + + + + + + @@ -15211,7 +15218,7 @@ table { - - + - + @@ -15281,6 +15288,13 @@ table { + + + + + + + - + @@ -15453,14 +15467,14 @@ table { - + - + + + + + + + + + + + + + + @@ -16545,7 +16573,7 @@ table { - + @@ -16897,11 +16925,13 @@ table {
        • 5: Femtomes
        • -
        • 6: NMEA (generic)
        • +
        • 6: NMEA (generic)
        • + +
        • 7: Septentrio (SBF)
        • Reboot required: true

          - + @@ -16971,7 +17001,7 @@ table {

          Reboot required: true

          - + @@ -16989,6 +17019,14 @@ table { + + + + + + + - @@ -17287,9 +17325,16 @@ table { + + + + + + + - + @@ -20594,14 +20639,14 @@ table { - + - + @@ -20743,75 +20788,6 @@ table {
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m
          EKF2_AID_MASK (INT32)Integer bitmask controlling data fusion and aiding methods

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • -
          • 1: use optical flow
          • +
          Will be removed after v1.14 release

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • +
          • 1: unused
          • 2: unused
          • 3: unused
          • 4: unused
          • -
          • 5: multi-rotor drag fusion
          • +
          • 5: unused
          • 6: unused
          • 7: unused
          • 8: unused
          • @@ -14733,7 +14733,7 @@ table {
          EKF2_ARSP_THR (FLOAT)Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

          Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

          [0.0, ?] 0.0 m/s
          EKF2_BARO_CTRL (INT32)Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

          Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

          Enabled (1)
          EKF2_BCOEF_X (FLOAT)X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^2
          EKF2_BCOEF_Y (FLOAT)Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^27
          EKF2_DRAG_CTRL (INT32)Multirotor wind estimation selection

          Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

          Disabled (0)
          EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

          Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

          EKF2_MAG_TYPE (INT32)Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

          값:
            +
          Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

          값:
          • 0: Automatic
          • 1: Magnetic heading
          • @@ -15234,12 +15241,12 @@ table {
          EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] 0.250.20 rad/s
          EKF2_MCOEF (FLOAT)Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s5000000 us
          EKF2_OF_CTRL (INT32)Optical flow aiding

          Comment: Enable optical flow fusion.

          Disabled (0)
          EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15439,7 +15453,7 @@ table {
          EKF2_RNG_A_HMAX (FLOAT)Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m
          EKF2_RNG_A_VMAX (FLOAT)Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s
          EKF2_RNG_CTRL (INT32)Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          값:
            +
          Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          값:
          • 0: Disable range fusion
          • 1: Enabled (conditional mode)
          • @@ -16464,6 +16478,20 @@ table {
          -30.0 deg
          FW_THR_ASPD_MAX (FLOAT)Throttle at max airspeed

          Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

          [0, 1] (0.01)0.
          FW_THR_ASPD_MIN (FLOAT)Throttle at min airspeed

          Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

          [0, 1] (0.01)0.
          FW_THR_IDLE (FLOAT) Idle throttle

          Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

          FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

          Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

          [0.0, 2.0] (0.05)0.30.1
          [0, 5] [0, 7] 1
          [0, 5] [0, 6] 1
          0
          GPS_PITCH_OFFSET (FLOAT)Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          +
          [-90, 90] 0.deg
          GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17062,7 +17100,7 @@ table {
          GPS_YAW_OFFSET (FLOAT)Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          +
          Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0.Disabled (0)
          CA_HELI_YAW_CP_O (FLOAT)Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1)0.0
          CA_HELI_YAW_CP_S (FLOAT)Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000rpm
          MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500rpm
          MODAL_IO_SDIR1 (INT32)
          -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          이름설명 [Min, Max] (Incr.)기본값단위
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          값:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20836,15 +20812,8 @@ table { - - - - - - - - - + + @@ -20999,19 +20968,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21204,20 +21180,6 @@ table { - - - - - - - - - - - - - - @@ -21502,6 +21464,13 @@ table { + + + + + + + + + + + + + + @@ -22132,7 +22108,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32302,6 +32278,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          값:
            @@ -22091,6 +22060,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32664,6 +32648,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          이름설명 [Min, Max] (Incr.)기본값단위
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          값:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32709,9 +32770,9 @@ table { - + - + @@ -32721,13 +32782,6 @@ table { - - - - - - - @@ -32798,14 +32852,14 @@ table { - + - + @@ -32833,14 +32887,14 @@ table { - + - + @@ -32877,7 +32931,7 @@ table { - + diff --git a/ko/advanced_config/tuning_the_ecl_ekf.md b/ko/advanced_config/tuning_the_ecl_ekf.md index 5b1793608bb40..2e64eac3af555 100644 --- a/ko/advanced_config/tuning_the_ecl_ekf.md +++ b/ko/advanced_config/tuning_the_ecl_ekf.md @@ -324,7 +324,7 @@ Fixed wing platforms can take advantage of an assumed sideslip observation of ze ### 항력을 사용한 멀티콥터 바람 추정 -Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This is enabled by setting bit position 5 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter to `true`. +Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). The relationship between airspeed and specific force (IMU accelerometer measurements) along the X and Y body axes is controlled by the [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X), [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) and [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) parameters which set the ballistic coefficients for flight in the X and Y directions, and the momentum drag produced by the propellers, respectively. The amount of specific force observation noise is set by the [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) parameter. @@ -340,33 +340,21 @@ A good tuning is obtained as follows: [Optical flow](../sensor/optical_flow.md) data will be used if the following conditions are met: * 유효한 거리 센서 데이터를 사용할 수 있습니다. -* [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 매개변수의 비트 위치 1이 참입니다. +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * 유량 센서가 반환하는 품질 메트릭이 [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) 매개변수로 설정된 최소 요구 사항보다 큽니다. ### 외부 비전 시스템 -Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 매개변수의 비트 위치 3이 참이면 외부 비전 시스템의 수평 위치 데이터가 사용됩니다. -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. For more details about the configuration of height sources, [click here](#height). -* [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 매개변수의 비트 위치 8이 참이면 외부 비전 시스템의 속도 데이터가 사용됩니다. -* [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 매개변수의 비트 위치 4가 참인 경우 외부 비전 시스템의 방향 데이터가 요 추정에 사용됩니다. -* [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 매개변수의 비트 위치 6이 참인 경우 외부 비전 참조 프레임 오프셋이 추정되고 외부 비전 시스템 데이터를 회전하는 데 사용됩니다. +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -Either bit 4 (`EV_YAW`) or bit 6 (`EV_ROTATE`) should be set to true, but not both together. Following [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) values are supported when using with an external vision system. +- `0`: Horizontal position data +- `1`: Vertical position data. Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -| EKF_AID_MASK 값 | 비트 설정 | 설명 | -| ---------------- | ----------------------------- | ------------------------ | -| 320 | EV_VEL + ROTATE_EV | Heading w.r.t. North | -| 24 | EV_POS + EV_YAW | Heading w.r.t. 외부 비전 프레임 | -| 72 | EV_POS + ROTATE_EV | Heading w.r.t. North | -| 272 | EV_VEL + EV_YAW | Heading w.r.t. 외부 비전 프레임 | -| 280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. 외부 비전 프레임 | -| 328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. North | - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. The EKF considers uncertainty in the visual pose estimate. This uncertainty information can be sent via the covariance fields in the MAVLink [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) message or it can be set through the parameters [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE), [EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) and [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE). You can choose the source of the uncertainty with [EKF2_EV_NOISE_MD](../advanced_config/parameter_reference.md#EKF2_EV_NOISE_MD). @@ -399,7 +387,7 @@ For this reason, no claims for accuracy relative to the legacy combination of `a EKF outputs, states and status data are published to a number of uORB topics which are logged to the SD card during flight. The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/master/Tools/ecl_ekf/process_logdata_ekf.py). To use this script file, cd to the `Tools/ecl_ekf` directory and enter `python process_logdata_ekf.py `. This saves performance metadata in a csv file named **.mdat.csv** and plots in a pdf file named `.pdf`. @@ -407,14 +395,14 @@ Multiple log files in a directory can be analysed using the [batch\_process\_log ### 출력 데이터 -* 태도 출력 데이터는 [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_attitude.msg) 메시지에서 조회할 수 있습니다. -* 로컬 위치 출력 데이터는 [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_local_position.msg) 메시지에서 조회할 수 있습니다. -* 글로벌 \(WGS-84\) 출력 데이터는 [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_global_position.msg) 메시지에 있습니다. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### 상태 -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). The index map for states\[32\] is as follows: +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for states\[32\] is as follows: * \[0 ... * \[4 ... 6\] 속도 NED \(m/s\) @@ -428,7 +416,7 @@ Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilo ### 상태 분산 -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). The index map for covariances\[28\] is as follows: +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for covariances\[28\] is as follows: * \[0 ... * \[4 ... 6\] 속도 NED \(m/s\)^2 @@ -442,10 +430,10 @@ Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Aut ### 관찰 혁신 & 혁신 분산 -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg). The messages all have the same field names/types (but different units). +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). The messages all have the same field names/types (but different units). :::note -The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -505,7 +493,7 @@ The index map is as follows: ### EKF 오류 -The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### 관측 오류 @@ -516,7 +504,7 @@ There are two categories of observation faults: Both of these can result in observation data being rejected for long enough to cause the EKF to attempt a reset of the states using the sensor observations. All observations have a statistical confidence checks applied to the innovations. The number of standard deviations for the check are controlled by the `EKF2_*_GATE` parameter for each observation type. -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio` : 혁신 테스트 한계에 대한 가장 큰 자력계 혁신 구성 요소의 비율 * `vel_test_ratio` : 혁신 테스트 한계에 대한 가장 큰 속도 혁신 구성 요소의 비율 @@ -525,11 +513,11 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio` : 혁신 테스트 한계에 대한 실제 대기 속도 혁신의 비율 * `hagl_test_ratio` : 혁신 테스트 한계에 대한 지상 혁신 높이의 비율 -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS 품질 검사 -The EKF applies a number of GPS quality checks before commencing GPS aiding. 이 검사는 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 및 `EKF2_REQ _*` 매개변수에 의해 제어됩니다. The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). +The EKF applies a number of GPS quality checks before commencing GPS aiding. 이 검사는 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 및 `EKF2_REQ _*` 매개변수에 의해 제어됩니다. The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF 수치 오류 @@ -540,7 +528,7 @@ To prevent this, every covariance and state update step contains the following e * 혁신 분산이 관찰 분산보다 작거나 (불가능한 음의 상태 분산이 필요함) 공분산 업데이트가 모든 상태에 대해 음의 분산을 생성하는 경우 : * 상태 및 공분산 업데이트를 건너 뜁니다. * 공분산 행렬의 해당 행과 열이 재설정됩니다. - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * 상태 분산(공분산 행렬의 대각선)은 음이 아닌 값으로 제한됩니다. * 상태 차이에는 상한값이 적용됩니다. * 공분산 행렬에 대칭이 적용됩니다. @@ -551,8 +539,8 @@ After re-tuning the filter, particularly re-tuning that involve reducing the noi The most common cause of EKF height diverging away from GPS and altimeter measurements during flight is clipping and/or aliasing of the IMU measurements caused by vibration. If this is occurring, then the following signs should be evident in the data -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg).vel\_pos\_innov\[2\]과[estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg).vel\_pos\_innov\[5\]는 같은 부호를 가집니다. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).hgt\_test\_ratio 는 1.0보다 큽니다. +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 The recommended first step is to ensure that the autopilot is isolated from the airframe using an effective isolation mounting system. An isolation mount has 6 degrees of freedom, and therefore 6 resonant frequencies. As a general rule, the 6 resonant frequencies of the autopilot on the isolation mount should be above 25Hz to avoid interaction with the autopilot dynamics and below the frequency of the motors. @@ -585,16 +573,16 @@ The most common causes of position divergence are: Determining which of these is the primary cause requires a methodical approach to analysis of the EKF log data: -* 속도 혁신 테스트 비율 - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vel\_test\_ratio 플롯합니다. -* 수평 위치 혁신 테스트 비율 - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).pos\_test\_ratio 플롯합니다. -* 높이 혁신 테스트 비율 - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).hgt\_test\_ratio 플롯합니다. -* 자력계 혁신 테스트 비율 - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).mag\_test\_ratio 플롯합니다. -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* IMU 델타 각도 상태 추정값 - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).states\[10\],states\[11\] 및 states\[12\] 를 플로팅합니다. +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * EKF 내부 고주파 진동 메트릭을 플로팅합니다. - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] During normal operation, all the test ratios should remain below 0.5 with only occasional spikes above this as shown in the example below from a successful flight: @@ -628,7 +616,7 @@ Bad yaw alignment causes a velocity test ratio that increases rapidly when the v ### 낮은 GPS 정확도 결정 -Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS glitch - test ratios](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/ko/assembly/cable_wiring.md b/ko/assembly/cable_wiring.md index 181092fbab28e..e3a971f8c7f51 100644 --- a/ko/assembly/cable_wiring.md +++ b/ko/assembly/cable_wiring.md @@ -3,7 +3,7 @@ 케이블은 플라이웨이, "화장실 볼링" 및 일반적으로 열악한 비행을 비롯한 문제를 일으킬 수 있는 [전자기 간섭(EMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference)의 일반적인 원인입니다. 이러한 문제는 UAV에서 적절한 케이블을 사용하여 피할 수 있습니다. 드론 케이블링을 설계할 때 다음 기본 개념을 염두에 두어야 합니다. -* 고전압 케이블과 신호 케이블은 최대한 분리합니다. +* High-Power and signal cables should be separated as much as is practical. * 케이블 길이는 유선 구성 요소를 쉽게 처리할 수 있도록 최대한 짧게 합니다. 와이어 장력은 충돌 착륙 시에도 가능한 기체 변형을 견딜 수 있어야 합니다. 와이어가 먼저 끊어지지 않는 것이 좋습니다. * 초과 길이를 줄이기 위한 케이블을 말지 않는 것이 좋습니다. 가능 하면 길이를 짧게 하십시오! * 디지털 신호는 전송 속도를 줄여 소모 에너지를 줄이고, 데이터 전송의 견고성을 높일 수 있습니다. 이는 높은 데이터 전송률이 필요하지 않는 경우에는 더 긴 케이블을 사용할 수 있음을 의미합니다. @@ -15,7 +15,7 @@ 이 항목에서는 드론 하드웨어 공급업체들의 [색상 코딩](#cable-colour-coding)과 함께 신호 프로토콜별로 케이블 연결에 대한 구체적인 지침을 제공합니다. -### I²C 케이블 +### I2C cables [I2C 버스](https://en.wikipedia.org/wiki/I%C2%B2C)는 센서 연결에 널리 사용됩니다. 여러 공급업체의 케이블 색상이 다음 표에 지정되어 있습니다. diff --git a/ko/assembly/mount_gps_compass.md b/ko/assembly/mount_gps_compass.md index 0b2e2f9de7643..acb2142bbec6e 100644 --- a/ko/assembly/mount_gps_compass.md +++ b/ko/assembly/mount_gps_compass.md @@ -8,9 +8,9 @@ GPS/Compasses should be mounted on the frame as far away from other electronics ## 나침반 방향 -The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#orientation-definition). +The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. :::warning 지원되는 방향으로 나침반을 장착하여야 합니다! diff --git a/ko/assembly/quick_start_cube.md b/ko/assembly/quick_start_cube.md index fb03bc293fc53..da1365cf78930 100644 --- a/ko/assembly/quick_start_cube.md +++ b/ko/assembly/quick_start_cube.md @@ -163,8 +163,8 @@ For more information see [Basic Concepts > SD Cards (Removable Memory)](../getti 이 참고사항은 모든 지원되는 기체 프레임의 출력 포트의 모터/서보 연결 리스트입니다 (만약 프레임이 참고사항에 기재되어 있지 않다면, 올바른 유형의 "일반" 프레임을 사용하십시오). ::: -:::caution -매핑이 프레임별로 일정하지지 않습니다 (예 : 모든 평면 프레임에 대해 동일한 출력의 스로틀에 의존할 수 없음). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. +:::warning +The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. ::: ## 기타 주변 장치 diff --git a/ko/assembly/quick_start_durandal.md b/ko/assembly/quick_start_durandal.md index d4dab76b32905..970ef6e648ba3 100644 --- a/ko/assembly/quick_start_durandal.md +++ b/ko/assembly/quick_start_durandal.md @@ -1,6 +1,6 @@ # Durandal 배선 개요 -:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. 하드웨어 지원이나 호환 문제는 [제조사](https://shop.holybro.com/)에 문의하십시오. +:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: [Drundal](../flight_controller/durandal.md)® 비행 콘트롤러의 전원공급 방법과 주요 주변장치 연결 방법을 설명합니다. @@ -57,7 +57,7 @@ GPS/나침반은 차량 전방 표식을 사용하여 가능한 전자 장치들 ### PM02 v3 전원 모듈 -[전원 모듈 (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html)은 *Durandal*과 함께 번들로 제공될 수 있습니다. 비행 콘트롤러에 배터리의 전력을 공급합니다. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. 비행 콘트롤러에 배터리의 전력을 공급합니다. 그림과 같이 *전원 모듈*의 출력을 연결합니다. @@ -86,14 +86,10 @@ GPS/나침반은 차량 전방 표식을 사용하여 가능한 전자 장치들 - 6 핀 MLX 케이블 (1 개) - 6 핀 GH 케이블 (1 개) -:::note -[PM02v3 전원 모듈 설명서](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro)도 참고하십시오. -::: - ### Pixhawk 4 전원 모듈 (PM07) -[Pixhawk 4 전원 모듈 (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html)은 *Durandal*과 함께 번들로 제공될 수 있습니다. 전원 모듈 및 배전 보드 역할을 수행하여 배터리의 조정된 전력을 비행 콘트롤러와 ESC에 제공합니다. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. 전원 모듈 및 배전 보드 역할을 수행하여 배터리의 조정된 전력을 비행 콘트롤러와 ESC에 제공합니다. 이것은 [ Pixhawk 4 빠른 시작 > 전원](../assembly/quick_start_pixhawk4.md#power)에 설명된 것과 동일 방식으로 연결합니다. @@ -109,7 +105,7 @@ GPS/나침반은 차량 전방 표식을 사용하여 가능한 전자 장치들 - 80mm XT60 커넥터 와이어 (1 개) :::note -[PM07 빠른 시작 안내서](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro)도 참고하십시오. +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### 배터리 설정 @@ -201,7 +197,7 @@ QuadPlane에 대한 자세한 설정은 [QuadPlane VTOL 설정](../config_vtol/v ## 추가 정보 - [Durandal 개요](../flight_controller/durandal.md) -- [Durandal 기술 데이터 시트](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal 핀 배열](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/px4_user_guide/raw/master/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal 회로도) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/master/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/ko/assembly/quick_start_holybro_pix32_v5.md b/ko/assembly/quick_start_holybro_pix32_v5.md index 13a6b5be342e3..472e39361d20c 100644 --- a/ko/assembly/quick_start_holybro_pix32_v5.md +++ b/ko/assembly/quick_start_holybro_pix32_v5.md @@ -1,6 +1,6 @@ # 픽스32 v5 배선 방법 -:::warning PX4에서는 이 자동항법장치를 제조하지 않습니다. 하드웨어 지원이나 호환 문제는 [제조사](https://shop.holybro.com/)에 문의하십시오. +:::warning PX4에서는 이 자동항법장치를 제조하지 않습니다. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: 이 설명서는 [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® 비행 콘트롤러 전원공급 방법과 주요 주변장치 연결 방법을 설명합니다. @@ -9,7 +9,7 @@ ## 포장 개봉 -Pix32 v5는 *pix32 v5 베이스 보드*, 전원 모듈 *PM02 V3*과 [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html)(UBLOX NEO-M8N)를 포함한 다양한 액세서리와 함께 번들로 판매됩니다. +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). *PM02 V3* 전원 모듈과 *Pixhawk 4 GPS/Compass*의 상자 내용물은 다음과 같습니다. 상자에는 핀 배치 가이드 및 전원 모듈 지침과 베이스 보드(아래 회로도에는 표시되지 않음)가 포함되어 있습니다. @@ -22,7 +22,7 @@ Pix32 v5는 *pix32 v5 베이스 보드*, 전원 모듈 *PM02 V3*과 [Pixhawk 4 G ![Pix32 v5 배선 개요](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -사용 가능한 포트에 대한 자세한 내용은 [여기](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf)를 참고하십시오. +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## 콘트롤러 장착 및 장착 방향 @@ -42,7 +42,7 @@ Pix32 v5는 *pix32 v5 베이스 보드*, 전원 모듈 *PM02 V3*과 [Pixhawk 4 G ## GPS + 나침반 + 부저 + 안전 스위치 + LED -Pix32 v5은 나침반, 안전 스위치, 부저 및 LED가 통합된 [Pixhawk 4 GPS 모듈](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html)에 최적화되어 있습니다. 10핀 케이블을 사용하여 **GPS 포트**에 연결합니다. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. 10핀 케이블을 사용하여 **GPS 포트**에 연결합니다. ![Pix32 v5 (GPS 포함)](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -59,7 +59,7 @@ GPS/나침반은 차량 전방 표식를 사용하여 가능하면 전자 장치 ### PM02 v3 전원 모듈 -[전원 모듈 (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html)은 *pix32 v5*와 함께 번들로 제공될 수 있습니다. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. 그림과 같이 *전원 모듈*을 연결합니다. @@ -87,9 +87,6 @@ GPS/나침반은 차량 전방 표식를 사용하여 가능하면 전자 장치 - 6 핀 MLX 케이블 (1) - 6 핀 GH 케이블 (1) -:::note -[PM02v3 전원 모듈 설명서](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro)를 참고하십시오. -::: ### 배터리 설정 @@ -155,7 +152,7 @@ SanDisk Extreme U3 32GB를 사용하는 것을 [적극 권장](../dev_log/loggin ## 핀배열 -[Pix32 v5 핀배열](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## 설정 @@ -168,8 +165,8 @@ QuadPlane에 대한 자세한 설정 방법은 [QuadPlane VTOL 설정](../config ## 추가 정보 - [Pix32 v5 개요](../flight_controller/holybro_pix32_v5.md) (개요 페이지) -- [Pix32 v5 기술 데이터 시트](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 핀배열](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 기본 회로도](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 기술 데이터 시트](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 핀배열](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 기본 회로도](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 기본 구성 요소 레이아웃](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - [FMUv5 레퍼런스 디자인 핀배열](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). diff --git a/ko/assembly/quick_start_pixhawk.md b/ko/assembly/quick_start_pixhawk.md index 4d551bd8b23c8..2f46c49918a09 100644 --- a/ko/assembly/quick_start_pixhawk.md +++ b/ko/assembly/quick_start_pixhawk.md @@ -93,7 +93,7 @@ GPS/나침반은 차량 전방 표식를 사용하여 가능하면 전자 장치 지원되는 모든 기체의 MAIN/AUX 출력 포트와 모터/서보 간의 매핑은 [기체 정의서](../airframes/airframe_reference.md)에 기술되어 있습니다. :::warning -매핑이 프레임별로 일정하지지 않습니다 (예 : 모든 평면 프레임에 대해 동일한 출력의 스로틀에 의존할 수 없음). +The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. ::: diff --git a/ko/assembly/quick_start_pixhawk4.md b/ko/assembly/quick_start_pixhawk4.md index c304b2f37aa8d..63948ca8df8cc 100644 --- a/ko/assembly/quick_start_pixhawk4.md +++ b/ko/assembly/quick_start_pixhawk4.md @@ -1,6 +1,6 @@ # Pixhawk 4 배선 개요 -:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. 하드웨어 지원이나 호환 문제는 [제조사](https://shop.holybro.com/)에 문의하십시오. ::: +:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: [Pixhawk 4](../flight_controller/pixhawk4.md)® 비행 콘트롤러 전원 공급방법과 주변 장치 연결방법을 설명합니다. @@ -146,8 +146,8 @@ For more information see [Basic Concepts > SD Cards (Removable Memory)](../getti 이 참고사항은 모든 지원되는 기체 프레임의 출력 포트의 모터/서보 연결 리스트입니다 (만약 프레임이 참고사항에 기재되어 있지 않다면, 올바른 유형의 "일반" 프레임을 사용하십시오). ::: -:::caution -매핑이 프레임간에 일관되지 않습니다 (예 : 모든 평면 프레임에 대해 동일한 출력에있는 스로틀에 의존 할 수 없음). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. +:::warning +The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. ::: ## 기타 주변 장치 diff --git a/ko/assembly/quick_start_pixhawk4_mini.md b/ko/assembly/quick_start_pixhawk4_mini.md index 5fe7174c0afd3..dfc4fcfb8cf5c 100644 --- a/ko/assembly/quick_start_pixhawk4_mini.md +++ b/ko/assembly/quick_start_pixhawk4_mini.md @@ -1,6 +1,6 @@ # Pixhawk 4 Mini 배선 퀵스타트 -:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. 하드웨어 지원이나 호환 문제는 [제조사](https://shop.holybro.com/)에 문의하십시오. +:::warning PX4에서는 이 자동 항법 장치를 제조하지 않습니다. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: [*Pixhawk 4® Mini*](../flight_controller/pixhawk4_mini.md) 비행 콘트롤러 전원공급 방법과 주변장치 연결 방법을 설명합니다. @@ -126,8 +126,8 @@ For more information see [Basic Concepts > SD Cards (Removable Memory)](../getti 이 참고사항은 모든 지원되는 기체 프레임의 출력 포트의 모터/서보 연결 리스트입니다 (만약 프레임이 참고사항에 기재되어 있지 않다면, 올바른 유형의 "일반" 프레임을 사용하십시오). ::: -:::caution -매핑이 프레임별로 일정하지지 않습니다 (예 : 모든 평면 프레임에 대해 동일한 출력의 스로틀에 의존할 수 없음). +:::warning +The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. ::: diff --git a/ko/assembly/quick_start_pixhawk5x.md b/ko/assembly/quick_start_pixhawk5x.md index c34b1024ac252..f050817ba4a5d 100644 --- a/ko/assembly/quick_start_pixhawk5x.md +++ b/ko/assembly/quick_start_pixhawk5x.md @@ -1,6 +1,6 @@ # 홀리브로 픽스호크 5X 배선 개요 -:::warning PX4에서는 이 자동항법장치를 제조하지 않습니다. 하드웨어 지원과 호환 문제는 [제조사](https://shop.holybro.com/)에 문의하십시오. +:::warning PX4에서는 이 자동항법장치를 제조하지 않습니다. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: [Pixhawk® 5X](../flight_controller/pixhawk5x.md) 비행 콘트롤러의 전원 공급 방법과 주요 주변 장치 연결 방법에 대하여 설명합니다. @@ -35,7 +35,7 @@ Pixhawk 5 표준 세트 _Pixhawk5X 표준 세트_는 **GPS1** 포트에 연결하는 M8N 또는 M9N GPS(10핀 커넥터)와 함께 구입할 수 있습니다. 이 GNSS 모듈에는 나침반, 안전 스위치, 부저 및 LED가 통합되어 있습니다. -보조 [M8N 또는 M9N GPS](https://shop.holybro.com/c/gps-systems_0428)(6핀 커넥터)는 별도로 구매하여 **GPS2** 포트에 연결할 수 있습니다. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ PM02D 전원 모듈은 **2~6S** 배터리를 지원하며, 보드의 입력을 L 기체의 텔레메트리를 **TELEM1** 포트에 연결합니다. 이 포트에 연결된 경우에는 추가 설정이 필요하지 않습니다. 다른 텔레메트리는 일반적으로 지상국 컴퓨터나 모바일 장치에 USB를 통하여 연결됩니다. -무선 조종기는 [Holybro 웹사이트](http://www.holybro.com/product-category/radio/)에서 구매할 수 있습니다. +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . @@ -129,8 +129,8 @@ For more information see [Basic Concepts > SD Cards (Removable Memory)](../getti 이 참고사항은 모든 지원되는 기체 프레임의 출력 포트의 모터/서보 연결 리스트입니다 (만약 프레임이 참고사항에 기재되어 있지 않다면, 올바른 유형의 "일반" 프레임을 사용하십시오). ::: -:::caution -매핑이 프레임별로 일정하지지 않습니다 (예 : 모든 평면 프레임에 대해 동일한 출력의 스로틀에 의존할 수 없음). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. +:::warning +The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). 해당 기체의 프레임의 정확한 모터 연결 여부를 확인하십시오. ::: @@ -145,7 +145,7 @@ For more information see [Basic Concepts > SD Cards (Removable Memory)](../getti ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). @@ -160,9 +160,8 @@ QuadPlane에 대한 자세한 설정 방법은 [QuadPlane VTOL 설정](../config ## 추가 정보 - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 개요 페이지) -- [Pixhawk 5X 개요 & 스펙](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (홀리브로) -- [Pixhawk 5X 핀아웃](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (홀리브로) -- [PM02D 파워 모듈 매뉴얼](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (홀리브로) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5 참조 설계 핀배열](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X 표준](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot FMUv5X 버스 표준](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/ko/assembly/quick_start_pixhawk6c.md b/ko/assembly/quick_start_pixhawk6c.md index 1dd81a01d5695..0b273a91108fe 100644 --- a/ko/assembly/quick_start_pixhawk6c.md +++ b/ko/assembly/quick_start_pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -11,13 +11,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -34,7 +27,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -97,7 +90,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/ko/assembly/quick_start_pixhawk6x.md b/ko/assembly/quick_start_pixhawk6x.md index 55f80772bb098..f81e2dee9ae4f 100644 --- a/ko/assembly/quick_start_pixhawk6x.md +++ b/ko/assembly/quick_start_pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -40,7 +40,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/ko/can/README.md b/ko/can/README.md index deb8f145ec975..df0d9c89bb8b4 100644 --- a/ko/can/README.md +++ b/ko/can/README.md @@ -8,8 +8,7 @@ PX4 supports two software protocols for communicating with CAN devices: - [Cyphal](https://opencyphal.org): PX4 support is a "work in progress". Cyphal is a much newer protocol which allows more flexibility and configuration, especially on larger and more complex vehicles. It has not yet seen significant adoption. :::note -Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. -In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -18,9 +17,9 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). -Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -28,7 +27,7 @@ The following diagram shows an example of a CAN bus connecting a flight controll The diagram does not show any power wiring. Refer to your manufacturer instructions to confirm whether components require separate power or can be powered from the CAN bus itself. -For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -38,7 +37,7 @@ Other (non-Pixhawk compatible) devices may use different connectors. However, as ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. ## Firmware diff --git a/ko/companion_computer/README.md b/ko/companion_computer/README.md index b98ad351061b7..135a690fa2408 100644 --- a/ko/companion_computer/README.md +++ b/ko/companion_computer/README.md @@ -22,7 +22,7 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). @@ -45,8 +45,8 @@ The companion computer needs to run software that communicates with the flight c Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -61,7 +61,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. See [Ethernet Setup](../advanced_config/ethernet_setup.md) for instructions. @@ -76,5 +75,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/ko/companion_computer/companion_computer_peripherals.md b/ko/companion_computer/companion_computer_peripherals.md index ab9fed95ee060..39e3b3e5e0bbf 100644 --- a/ko/companion_computer/companion_computer_peripherals.md +++ b/ko/companion_computer/companion_computer_peripherals.md @@ -9,7 +9,7 @@ Typical companion computer work with Pixhawk requires a companion link to transm There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/xrce_dds.md). ::: ### FTDI Devices diff --git a/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 939fcab99ca0d..b4f5e1f428042 100644 --- a/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -6,7 +6,7 @@ The [Holybro Pixhawk RPi CM4 Baseboard](http://www.holybro.com/product/pixhawk-r The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -54,7 +54,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/ko/companion_computer/pixhawk_companion.md b/ko/companion_computer/pixhawk_companion.md index 11f0664b7ce33..2df53ef8a1e52 100644 --- a/ko/companion_computer/pixhawk_companion.md +++ b/ko/companion_computer/pixhawk_companion.md @@ -21,9 +21,11 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/XRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the XRCE-DDS client on `TELEM2`(see [XRCE-DDS > Starting the client](../middleware/xrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,7 +35,7 @@ If you're connecting using a serial port, wire the port according to the instruc Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. The `TELEM2` to FTDI wiring map is shown below. | TELEM2 | | FTDI |   | | ------ | --------- | ---- | ----------------- | @@ -44,7 +46,9 @@ The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring b | 5 | RTS (출력) | 2 | FTDI CTS (갈) (입력) | | 6 | GND | 1 | FTDI GND (흑) | -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. diff --git a/ko/companion_computer/pixhawk_rpi.md b/ko/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..e6e4a305e82cd --- /dev/null +++ b/ko/companion_computer/pixhawk_rpi.md @@ -0,0 +1,297 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +| PX4 TELEM2 Pin | RPi GPIO Pin | +| -------------- | ---------------------- | +| UART5_TX (2) | RXD (GPIO 15 - pin 10) | +| UART5_RX (3) | TXD (GPIO 14 - pin 8) | +| GND (6) | Ground (pin 6) | + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +| `TELEM2` | RPi GPIO | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| ![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) | + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +| Pins | Signal | Voltage | +| --------- | --------------- | ------- | +| 1 (Red) | VCC | +5V | +| 2 (Black) | UART5_TX (out) | +3.3V | +| 3 (Black) | UART5_RX (in) | +3.3V | +| 4 (Black) | UART5_CTS (in) | +3.3V | +| 5 (Black) | UART5_RTS (out) | +3.3V | +| 6 (Black) | GND | GND | + +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. Generally the other radio needs to be connected to the ground station USB port. If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. Note that ROS 2 versions target particular Ubuntu versions. We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). However we will install and use a simple developer MAVLink GCS called `mavproxy`. This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + XRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + +:::note +Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + +::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. In the next section we'll set up the both Pixhawk and RPi to use XRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and XRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [XRCE-DDS](../middleware/xrce_dds.md) pages cover the options for setting up the XRCE-DDS and ROS, focussing on ROS 2 "Foxy". This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + XRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [XRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#MAV_1_CONFIG) disable MAVLink on TELEM2 and enable the XRCE-DDS client on TELEM2, respectively. The `SER_TEL2_BAUD` rate sets the comms link data rate. +You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note +You will need to reboot the flight controller to apply any changes to these parameters. +::: + +1. Check that the [microdds_client](../modules/modules_system.md#microdds-client) module is now running. YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + microdds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +microdds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [XRCE-DDS > XRCE-DDS Agent Installation](../middleware/xrce_dds.md#xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/ko/complete_vehicles/README.md b/ko/complete_vehicles/README.md index 841cbe53934c3..c9e13028db6b7 100644 --- a/ko/complete_vehicles/README.md +++ b/ko/complete_vehicles/README.md @@ -44,7 +44,7 @@ This section lists fully assembled vehicles where you can update the software to ::: * 멀티콥터 - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/ko/complete_vehicles/crazyflie2.md b/ko/complete_vehicles/crazyflie2.md index 274b997df91b9..978f90a1d569c 100644 --- a/ko/complete_vehicles/crazyflie2.md +++ b/ko/complete_vehicles/crazyflie2.md @@ -37,7 +37,7 @@ https://wiki.bitcraze.io/projects:crazyflie2:index * [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck): contains an optical flow sensor to measure movements of the ground and a distance sensor to measure the distance to the ground. This will be useful for precise altitude and position control. * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## PX4 플래싱 @@ -117,7 +117,7 @@ make bitcraze_crazyflie_default qconfig [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py)를 사용하여 Crazyflie 2.0(PX4로 깜박임)과 QGroundControl간의 무선 MAVlink 통신 링크를 설정합니다. :::note [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py)를 사용하여 Crazyflie 2.0(PX4로 깜박임)과 QGroundControl간의 무선 MAVlink 통신 링크를 설정합니다. *Cfbridge*를 사용하여 QGroundControl에서 crazyradio PA와 통신할 수 있습니다. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -160,6 +160,7 @@ Crazyflie 2.0을 crazyradio와 연결하기 위하여 아래의 단계에 따라 - After using *cfbridge*, you can deactivate the virtualenv if you activated it by pressing `CTRL+z`. Most of the time, launching *cfbridge* again from the same terminal doesn't connect to crazyflie, this can be solved by closing the terminal and relaunching *cfbridge* in a new terminal. Launch cfbridge: `python cfbridge.py` + ``` make venv ``` @@ -207,7 +208,7 @@ Crazyflie 2.0 높이가 *고도 모드* 또는 *위치 모드*의 중간 스로 ## 위치 제어 -[플로우 데크](https://store.bitcraze.io/collections/decks/products/flow-deck)을 사용하면 *위치 모드*에서 Crazyflie 2.0을 비행할 수 있습니다. PX4flow와 달리 플로우 데크에는 자이로가 없으므로 온보드 자이로가 유동 융합에 사용되어 로컬 위치 추정치를 찾습니다. PX4flow와 달리 플로우 데크에는 자이로가 없으므로 온보드 자이로가 유동 융합에 사용되어 로컬 위치 추정치를 찾습니다. +[플로우 데크](https://store.bitcraze.io/collections/decks/products/flow-deck)을 사용하면 *위치 모드*에서 Crazyflie 2.0을 비행할 수 있습니다. Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. PX4flow와 달리 플로우 데크에는 자이로가 없으므로 온보드 자이로가 유동 융합에 사용되어 로컬 위치 추정치를 찾습니다. :::note *위치* 모드의 비행에 대한 ulog는 [여기](https://logs.px4.io/plot_app?log=a0e68bf1-e905-410f-b828-f6146dba9d45)에서 사용할 수 있습니다. 이것은 비행 성능을 비교하기 위하여 참고용으로 사용할 수 있습니다. @@ -251,6 +252,7 @@ MAVROS를 통해 Crazyflie 2.0에 연결하려면 : - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/ko/complete_vehicles/crazyflie21.md b/ko/complete_vehicles/crazyflie21.md index 39877edc7b796..6216cc605f27b 100644 --- a/ko/complete_vehicles/crazyflie21.md +++ b/ko/complete_vehicles/crazyflie21.md @@ -48,7 +48,7 @@ Crazyflie 마이크로 쿼드 라인은 Bitcraze AB에서 제조하였습니다. * [부저 데크](https://store.bitcraze.io/collections/decks/products/buzzer-deck) 배터리 부족 또는 충전 완료와 같은 시스템 이벤트에 대한 오디오 피드백입니다. * [브레이크 아웃 데크](https://store.bitcraze.io/collections/decks/products/breakout-deck) : 납땜없이 하드웨어를 쉽게 테스트 가능한 확장 보드입니다. * [SD 카드 데크](https://store.bitcraze.io/collections/decks/products/sd-card-deck) : 마이크로 SD 카드는 고속의 온보드 로깅에 사용됩니다 -* [Logitech 조이스틱](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech 조이스틱](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Crazyflie 2.1 조립 @@ -139,7 +139,7 @@ PX4 개발환경 설정후 Crazyflie 2.1에 PX4를 설치합니다. [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py)를 사용하여 Crazyflie 2.1(PX4로 깜박임)과 QGroundControl간의 무선 MAVlink 통신 링크를 설정합니다. *Cfbridge*를 사용하여 QGroundControl에서 crazyradio PA와 통신할 수 있습니다. [C 기반 cfbridge](https://github.com/dennisss/cfbridge)는 현재 데이터 손실 문제가 있으므로 **cfbridge.py**를 사용하는 것이 좋습니다. ::: -- USB 라디오를 사용을 위한 udev 권한을 설정 여부를 확인하십시오. [여기](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions)에 나열된 단계를 따라 컴퓨터를 **재 부팅**하십시오. +- USB 라디오를 사용을 위한 udev 권한을 설정 여부를 확인하십시오. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - USB를 통해 Crazyradio PA를 연결합니다. - 아래의 방법으로 [로컬 Python 가상 환경](https://virtualenv.pypa.io/en/latest/)을 빌드합니다. ``` diff --git a/ko/complete_vehicles/holybro_kopis2.md b/ko/complete_vehicles/holybro_kopis2.md index a9a3c280baf56..f8f9a827df721 100644 --- a/ko/complete_vehicles/holybro_kopis2.md +++ b/ko/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## 구매처 *Kopis 2*는 여러 곳에서 구매 가능합니다. -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) 추가로 다음과 같은 것들이 필요합니다. + - RC 송신기. *Kopis 2*에는 FrSky 수신기가 포함되지 않은 체로 배송될 수도 있습니다. - LiPo 배터리 및 충전기. - FPV를 비행하고 싶다면 FPV 고글을 사용하십시오. There are many compatible options, including these ones from [Fatshark](https://www.fatshark.com/product-page/dominator-v3). You can also use DJI FPV goggles if you have the HDV version of the Kopis 2. diff --git a/ko/complete_vehicles/intel_aero.md b/ko/complete_vehicles/intel_aero.md index b564409be45b7..ec9bd912b63c5 100644 --- a/ko/complete_vehicles/intel_aero.md +++ b/ko/complete_vehicles/intel_aero.md @@ -3,218 +3,5 @@ :::warning 이 비행 컨트롤러는 [단종](../flight_controller/autopilot_experimental.md)되었습니다. -PX4 v1.11에서 이 플랫폼을 마지막으로 지원합니다. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -*Intel Aero Ready to Fly Drone*®은 UAV 개발 플랫폼입니다. 이 중 일부는 쿼드 코어 CPU에서 리눅스 실행 *Intel Aero Compute Board*입니다. 다른 부분은 연결된 STM32 마이크로 컨트롤러이며, NuttX에서 PX4를 실행합니다. 다른 부분은 연결된 STM32 마이크로 컨트롤러이며, NuttX에서 PX4를 실행합니다. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## 소개 - -[공식 위키](https://github.com/intel-aero/meta-intel-aero/wiki)에서는 보드 설정, 업데이트 및 연결 방법과 Linux 운영체제에서 개발 방법을 설명합니다. 이 문서에서는 개발 트리에서 마이크로 컨트롤러의 펌웨어를 업데이트 방법을 중점적으로 설명합니다. - -릴리스에 따라 지침이 일부 변경되어지므로, 사용 가능한 최신 이미지로 업데이트하는 것이 중요합니다. 보드에 연결하고 다음 명령을 실행하여 BIOS와 배포판 버전을 확인할 수 있습니다. - -``` -get_aero_version.py -``` - -이 문서의 지침은 다음 버전에서 테스트되었습니다. - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Ubuntu를 사용하여 Intel Aero 설정 - -Intel Aero에 Ubuntu를 설치하려면 다음의 장비가 필요합니다. - -1. 전원 공급 장치 (배터리 또는 네트워크 케이블) -1. 모니터를 연결용 마이크로 HDMI-HDMI 케이블 -1. 마이크로 USB3-USB2 암 어댑터 -1. 마우스와 키보드를 연결하는 USB 허브 - -[Intel Aero wiki > Intel Aero에 Ubuntu 설치](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero) 지침을 따라 설치하십시오. - -1. [먼저 Yocto 업그레이드](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (선택 사항) -1. [운영 체제](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [인텔 에어로 저장소](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -*Intel Aero Repository* (위)의 단계가 완료되면 Aero 커널이 설치됩니다. 이 시점부터는 항상 이 커널을 사용하여 부팅하십시오. - -지침에 따라 BIOS, FPGA 및 비행 컨트롤러를 플래시합니다. MAVLink 라우터 구성 파일을 오픈합니다. **/etc/mavlink-router/main.conf** - -구성 파일에 다음 줄을 추가하여 랩톱 IP를 UDP 끝점으로 포함합니다. IP 주소는 노트북중 하나로 설정되어야 합니다. `ifconfig`를 실행하여 랩탑의 IP 주소를 확인하십시오. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -이 단계가 완료되면 드론은 노트북에서 실행되는 *QGroundControl*에 자동으로 연결됩니다. - -다음으로 [이 지침](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS)을 따라 ROS를 설치합니다. - -### RealSense 카메라 - -1. RealSense SDK - - 단계에 따라 [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk)에 나열된 RealSense SDK를 설치합니다. 저장소 복제시 R200 모델에 레거시 브랜치를 사용하여야합니다. D435 또는 D415를 사용하는 경우에는 마스터 분기를 복제하여야 합니다. 다른 모든 단계는 동일하며 카메라가 변경되면 분기를 앞뒤로 전환할 수 있습니다. - - RealSense R200을 사용하는 경우 다음을 사용하여 ROS 노드에서 이미 시작할 수 있습니다. - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - D400 시리즈 카메라를 사용하는 경우에는 다음 단계에서 다른 ROS 래퍼를 설치합니다. - -1. D400 시리즈 RealSense용 ROS 래퍼 - - [소스에서 Intel RealSense ROS 설치](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) 지침에 따라 catkin 작업 공간을 설치하고 RealSense 소프트웨어를 복제합니다. - - 다음 명령어를 실행하여 udev 규칙을 설치합니다. - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - 이제 RealSense는 다음을 사용하여 ROS 노드에서 실행할 수 있습니다. - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### 장애물 회피 - -PX4 장애물 회피 소프트웨어를 실행하기 위하여 catkin을 설치하십시오. - -``` -apt install python-catkin-tools -``` - -catkin 작업 공간을 만들고 초기화합니다. 그런 다음 회피 저장소를 소스 공간에 복제하거나 소스 공간에 대한 심볼릭 링크를 사용합니다. 패키지를 빌드하고 다음 명령어로 ROS 노드를 시작합니다. - -``` -catkin build local_planner -roslaunch local_planner local_planner_aero.launch -``` - -## PX4 소프트웨어 플래싱 - -PX4 개발 환경을 설정후, 다음 단계에서 PX4 소프트웨어를 업데이트합니다. - -1. 기체의 모든 소프트웨어의 전체 업데이트를 수행합니다 (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release). -1. [펌웨어](https://github.com/PX4/PX4-Autopilot)를 확보합니다. -1. `make intel_aerofc-v1_default`로 컴파일합니다. -1. 대상 호스트명을 설정합니다. - - 시스템이 링크 로컬 이름을 확인하는 경우에는, 이 단계를 건너뛸 수 있습니다. WiFi 또는 USB로 연결하여 `intel-aero.local`에 ssh로 연결하여 테스트할 수 있습니다. - - ``` - ssh root@intel-aero.local - ``` - - 작동하지 않는 경우에는 업로드 스크립트에서 사용할 IP를 지정하십시오. - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. 다음 명령어로 업로드합니다. ` make intel_aerofc-v1_default upload` - - -## 네트워크를 통한 QGroundControl 연결 - -1. WiFi 또는 USB 네트워크로 보드에 연결되어 있는 지 확인하십시오. -1. SSH를 보드에 연결하고 MAVLink 전달이 실행되는 지 확인합니다. 기본적으로 부팅시 자동으로 실행됩니다. 다음 명령어로 수동으로 실행할 수 있습니다. - ``` - systemctl start mavlink-router - ``` -1. *QGroundControl*을 시작시 자동으로 연결됩니다. -1. *QGroundControl*을 시작하는 대신 스크립트를 사용하여 [MAVLink 셸](../debug/mavlink_shell.md)을 오픈할 수 있습니다. - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## LeddarOne 거리 측정기 연결 - -[LeddarOne](../sensor/leddar_one.md)을 Aero 원격 측정 포트에 연결합니다. LeddarOne와 Aero 원격 측정 포트 (TELEM1)의 핀배열은 아래와 같습니다. - -| 핀 | Aerofc 텔레메트리 | LeddarOne | -| - | ------------ | --------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 3 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -거리계를 활성화하려면 [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) 매개 변수를 TELEM1로 설정하고 보드를 재부팅합니다 (매개변수 설정 지침은 [여기](../advanced_config/parameters.md)에서 확인 가능). - - -## Lidar Lite 거리 측정기 연결 - -:::warning -Lidar Lite는 측정 스파이크로 인하여 *Intel Aero Ready to Fly Drone*®과 함께 사용하지 않는 것이 좋습니다. -::: - -다음 지침은 I2C를 통해 연결된 [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3를 설명합니다. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. 두 개의 핀배열은 아래에서 찾을 수 있습니다. 텔레메트리 포트는 사용하는 것을 추천합니다. TELEMETRY 포트가 이미 사용중인 경우 스플리터를 사용하여 I2C 연결을 공유할 수 있습니다 (모든 I2C 포트에서 작동). 스플리터 설정은 아래 이미지를 확인하십시오. - -또한 Lidar Lite I2C 연결용 전해 커패시터를 사용하여 거리 판독 값의 스파이크를 줄이는 것이 좋습니다 ([3 페이지](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) 참조). - -Lidar Lite V3와 Aero 텔레메트리 포트의 핀배열은 다음과 같습니다. - -| 핀 | Aerofc 텔레메트리 | Lidar Lite V3 | -| - | ------------ | ------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 3 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| 핀 | Aerofc 나침반 | Lidar Lite V3 | -| - | ---------- | ------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 3 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C 스플리터](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero Lidar Lite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Aero에서 광류 센서 사용 - -*Intel Aero Ready to Fly Drone*®은 컴퓨팅 보드 (Linux OS 버전 1.6 이상)에 사전 설치된 광류 실행 파일과 함께 제공되어 광류 속도 추정을 이용하여 안정적으로 비행할 수 있습니다. 광류 센서를 사용하려면, 먼저 범위 센서를 설치하여야합니다 (위 참조). - -광류 센서를 사용하려면, 차량 컴퓨팅 보드의 콘솔에서 다음 명령을 실행하십시오. -``` -systemctl start aero-optical-flow -``` - -부팅시 광류 실행 파일을 시작하는 명령어는 다음과 같습니다. -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -또한, 비행 콘트롤러에서 다음 매개변수를 설정하여야 합니다. - -| 매개변수 | 값 | -| -------------------------------------------------------------------------- | - | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 | -| [EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 | -| [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 | diff --git a/ko/complete_vehicles/px4_vision_kit.md b/ko/complete_vehicles/px4_vision_kit.md index e8ac5260a92ac..a99fac5586da2 100644 --- a/ko/complete_vehicles/px4_vision_kit.md +++ b/ko/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision Autonomy 개발 키트 -[*PX4 Vision Autonomy 개발 키트*](http://www.holybro.com/product/px4-vision/)는 자율 비행 컴퓨터 비전 개발을 위한 견고하고 저렴한 키트입니다. +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![개요](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -14,8 +14,8 @@ The kit contains a near-ready-to-fly carbon-fiber quadcopter equipped with a *Pi ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://shop.holybro.com/px4-vision_p1225.html?) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## Px4 비전 가이드 콘텐츠 - [경고와 알림](#warnings-and-notifications) @@ -24,7 +24,7 @@ The kit contains a near-ready-to-fly carbon-fiber quadcopter equipped with a *Pi - [최초 설정](#first-time-setup) - [드론 회피 비행](#fly-the-drone-with-avoidance) - [키트 개발](#development-using-the-kit) -- [Px4 비전 캐리어 보드 핀아웃](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [기타 개발 리소스](#other-development-resources) - [기술 지원 방법](#how-to-get-technical-support) @@ -52,8 +52,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). PX4 Vision DevKit에는 아래의 내용물들이 포함되어 있습니다. - 핵심 구성 요소: @@ -340,7 +339,7 @@ PX4 자체를 수정하고 [사용자 지정 펌웨어로 설치](../config/firm ## PX4 Vision Carrier Board Pinouts -캐리어 보드 핀아웃은 [Holybro 웹 사이트](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf)에서 다운로드할 수 있습니다. +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). ## 기타 개발 리소스 @@ -350,7 +349,6 @@ PX4 자체를 수정하고 [사용자 지정 펌웨어로 설치](../config/firm - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 회피 소프트웨어 / 문서](https://github.com/PX4/PX4-Avoidance) - [경로 계획 인터페이스](../computer_vision/path_planning_interface.md) -- [Px4 비전 캐리어 보드 핀아웃](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) ## 기술 지원 방법 diff --git a/ko/computer_vision/visual_inertial_odometry.md b/ko/computer_vision/visual_inertial_odometry.md index bc51d69752f93..245d4ea01d698 100644 --- a/ko/computer_vision/visual_inertial_odometry.md +++ b/ko/computer_vision/visual_inertial_odometry.md @@ -85,12 +85,12 @@ You can use the *QGroundControl* [MAVLink Inspector](https://docs.qgroundcontrol EKF2에서 외부 위치 정보를 사용하려면 다음 매개 변수를 설정하여야 합니다. -| 매개변수 | 외부 위치 추정 설정 | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | Set *vision position fusion*, *vision velocity fusion*, *vision yaw fusion* and *external vision rotation* according to your desired fusion model. | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. | -| [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | 측정 타임 스탬프와 "실제" 캡처 시간의 차이로 설정합니다. 자세한 정보는 [아래](#tuning-EKF2_EV_DELAY)를 참고하십시오. | -| [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | 차체 프레임에 대한 비전 센서의 위치를 설정합니다. | +| 매개변수 | 외부 위치 추정 설정 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. | +| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. | +| [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | 측정 타임 스탬프와 "실제" 캡처 시간의 차이로 설정합니다. 자세한 정보는 [아래](#tuning-EKF2_EV_DELAY)를 참고하십시오. | +| [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | 차체 프레임에 대한 비전 센서의 위치를 설정합니다. | *QGroundControl* > **기체 설정 > 매개변수 > EKF2**에서 설정할 수 있습니다. (매개변수 변경 사항을 적용하려면 비행 컨트롤러를 재부팅하여야 합니다). diff --git a/ko/concept/architecture.md b/ko/concept/architecture.md index 39dab7b139754..d7d5999f469e5 100644 --- a/ko/concept/architecture.md +++ b/ko/concept/architecture.md @@ -102,7 +102,7 @@ PX4는 POSIX-API(Linux, macOS, NuttX 또는 QuRT 등)를 제공하는 다양한 작업 대기열에서 모듈을 실행할 때의 이점은 RAM을 덜 사용하고 잠재적으로 작업 전환이 더 적은 것입니다. 단점은 *작업 대기열 작업*이 메시지를 잠자기 또는 폴링하거나 차단 IO(예: 파일 읽기)를 수행할 수 없는 것입니다. 장기 실행 작업(과중한 계산 수행)은 잠재적으로 별도의 작업 또는 최소한 별도의 작업 대기열에서 실행되어야 합니다. :::note -작업 대기열에서 실행 중인 작업은 [`uorb top`](../modules/modules_communication.md#uorb)에 표시되지 않습니다(작업 대기열 자체만 볼 수 있음 - 예: `wq:lp_default`). 모든 활성 작업 대기열 항목을 표시하려면, [`work_queue status`](../modules/modules_system.md#work-queue)를 사용하십시오. +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). 모든 활성 작업 대기열 항목을 표시하려면, [`work_queue status`](../modules/modules_system.md#work-queue)를 사용하십시오. ::: ### 백그라운드 작업 diff --git a/ko/concept/custom_mixer_payload.md b/ko/concept/custom_mixer_payload.md deleted file mode 100644 index ce2cbfc04c64e..0000000000000 --- a/ko/concept/custom_mixer_payload.md +++ /dev/null @@ -1,90 +0,0 @@ -# Custom Payload Mixers - -This topic shows how to add a custom [mixer](../concept/mixing.md) for programmatically controlling a custom payload (e.g., an electromagnetic gripper). - -The topic is intended for developers who want to support payload types that do not have existing control group definitions (e.g. gimbals have a control group, but grippers do not). You should already have read [Mixing and Actuators](../concept/mixing.md). - - -## Payload Mixer Example - -A payload mixer is just a [summing mixer](../concept/mixing.md#summing_mixer) that maps any of the function values from [Control Group #6 (First Payload)](../concept/mixing.md#control_group_6) to a particular output. You can then publish uORB topics to the selected control group function and their value will be mapped to the specified output. - -For this example, we'll create a custom mixer based on the *RC passthrough mixer* ([pass.aux.mix](https://github.com/PX4/PX4-Autopilot/blob/master/ROMFS/px4fmu_common/mixers/pass.aux.mix)). This mixer is commonly loaded into the AUX PWM ports on large multicopters). It passes through the values of 4 user-defined RC channels (set using the [RC_MAP_AUXx/RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_AUX1) parameters) to the first four outputs on the AUX PWM output. - -``` -# Manual pass through mixer for servo outputs 1-4 - -# AUX1 channel (select RC channel with RC_MAP_AUX1 param) -M: 1 -S: 3 5 10000 10000 0 -10000 10000 - -# AUX2 channel (select RC channel with RC_MAP_AUX2 param) -M: 1 -S: 3 6 10000 10000 0 -10000 10000 - -# AUX3 channel (select RC channel with RC_MAP_AUX3 param) -M: 1 -S: 3 7 10000 10000 0 -10000 10000 - -# FLAPS channel (select RC channel with RC_MAP_FLAPS param) -M: 1 -S: 3 4 10000 10000 0 -10000 10000 -``` - -:::note -The file defines four [summing mixers](../concept/mixing.md#summing_mixer) (for four outputs). -- `M: 1` indicates an output that is defined by one control input (the following `S` line). -- `S: 3`_`n`_ indicates that the input is the nth input of [Control Group 3 (Manual Passthrough)](../concept/mixing.md#control-group-3-manual-passthrough). So for `S: 3 5` the input is called "RC aux1" (this maps to the RC channel set in parameter `RC_MAP_AUX1`). -- The section declaration order defines the order of the outputs when assigned to a physical bus (e.g. the third section might be assigned to AUX3). -::: - -Start by copying the mixer file and putting it onto the SD Card at: **/etc/mixers/pass.aux.mix** (see [Mixing and Actuators > Loading a Custom Mixer](../concept/mixing.md#loading_custom_mixer). - -Remove the first section with a payload control group function input: -- Change this: - ``` - # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param) - M: 1 - S: 3 5 10000 10000 0 -10000 10000 - ``` -- To: - ``` - # Payload 1 (control group 6) channel 1 - M: 1 - S: 6 1 10000 10000 0 -10000 10000 - ``` - -Because this output is in the first position in the file it will map to the first AUX PWM output (unless UAVCAN is enabled). This output will now respect updates to the payload control group (6) output 1. - -Control group 6 will need to be defined in the code as well (it is missing!): -- Add `actuator_controls_6` to the TOPICS definition in [/msg/actuator_controls.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/actuator_controls.msg#L17): - ``` - # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6 - ``` -- Increase `NUM_ACTUATOR_CONTROL_GROUPS` to 7 in the same file. -- Subscribe to the additional control group in the output library ([/src/lib/mixer_module/mixer_module.cpp#L52](https://github.com/PX4/PX4-Autopilot/blob/master/src/lib/mixer_module/mixer_module.cpp#L52)) in the `MixingOutput` constructor. It should look like this: - ``` - {&interface, ORB_ID(actuator_controls_0)}, - {&interface, ORB_ID(actuator_controls_1)}, - {&interface, ORB_ID(actuator_controls_2)}, - {&interface, ORB_ID(actuator_controls_3)}, - ``` - ``` - {&interface, nullptr}, - {&interface, nullptr}, - {&interface, ORB_ID(actuator_controls_6)}, - ``` - -Putting an output on group 6 works by publishing actuator control group 6. First you have to create the publication. This should happen once when the PX4 module is initialized (look for places where this pattern is already being used): -``` -uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_6)}; -``` - -Then you need to publish the first message: -``` -actuator_controls_s _act_controls{}; -_act_controls.timestamp = hrt_absolute_time(); -// set the first output to 50% positive (this would rotate a servo halfway into one of its directions) -_act_controls.control[0] = 0.5f; -_actuator_controls_pub.publish(_act_controls); -``` diff --git a/ko/concept/dronecode_architecture.md b/ko/concept/dronecode_architecture.md deleted file mode 100644 index 3de4b14148c13..0000000000000 --- a/ko/concept/dronecode_architecture.md +++ /dev/null @@ -1,13 +0,0 @@ -# Dronecode Platform Hardware/Software Architecture - -The diagram below provides a forward-looking high level overview of the [Dronecode Platform](https://www.dronecode.org/platform/). The left hand side shows one possible hardware configuration with a *flight controller* (light blue) connected to a *perception computer* (dark blue) via [RTPS](../middleware/micrortps.md). The perception computer provides vision control and object avoidance using a camera sensor array, and has a separate payload camera. - -The right hand side of the diagram shows the end-to-end software stack. The stack "approximately" aligns horizontally with the hardware parts of the diagram, and is colour coded to show which software is running on the flight controller and which on the companion computer. - -:::note -The [PX4 Architectural Overview](../concept/architecture.md) provides information about the flight stack and middleware. Offboard APIs are covered in [ROS](../ros/README.md) and [MAVSDK](https://mavsdk.mavlink.io/develop/en/index.html). -::: - -![PX4 Platform architecture](../../assets/diagrams/dronecode_platform_architecture.jpg) - - diff --git a/ko/config/README.md b/ko/config/README.md index d36673ec829ea..9b51cedaad1a0 100644 --- a/ko/config/README.md +++ b/ko/config/README.md @@ -36,11 +36,11 @@ PX4 차량의 표준 소프트웨어 설정 방법과 보정 방법에 대하여 ## 고급 설정 -[선택한 기체 구성](../config/airframe.md)이 *특정 차량 모델*(예: [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4))인 경우 미세 조정이 가능하지만, 필수적이지는 않습니다. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. 새 기체, "일반" 기체를 사용하거나 기체를 많이 수정하거나 일반적이지 않은 센서를 사용하는 경우에는 다음을 참조하십시오. -* [고급 설정](../advanced_config/README.md): 차량별 조정, 미세 조정, 공장 수준 구성. -* [비행 콘트롤러 주변 장치](../peripherals/README.md) - 특정 하드웨어(특히 많이 사용되지 않는 센서)와 관련된 하드웨어 및 소프트웨어 설정입니다. +- [고급 설정](../advanced_config/README.md): 차량별 조정, 미세 조정, 공장 수준 구성. +- [비행 콘트롤러 주변 장치](../peripherals/README.md) - 특정 하드웨어(특히 많이 사용되지 않는 센서)와 관련된 하드웨어 및 소프트웨어 설정입니다. ## 지원 diff --git a/ko/config/actuators.md b/ko/config/actuators.md index 0c3e0937756de..d016cd922aea1 100644 --- a/ko/config/actuators.md +++ b/ko/config/actuators.md @@ -42,11 +42,7 @@ _액추에이터 설정_ 보기는 기체의 특정 지오메트리를 사용자 #### 모터 지오메트리: 멀티콥터 -아래 이미지는 고급 설정이 있거나 없는 멀티콥터 프레임의 지오메트리 설정을 나타냅니다. - -:::note -특히 이것은 [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) 뮤티콥터의 모터 지오메트리입니다. 다른 멀티콥터 프레임도 유사하게 구성됩니다. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![지오메트리 멀티콥터(QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -67,7 +63,7 @@ _액추에이터 설정_ 보기는 기체의 특정 지오메트리를 사용자 #### 모터 지오메트리: VTOL Quadrotor Tailsitter -[VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter)의 모터 구조는 아래에 나와 있습니다(다른 Tailsitter VTOL 차량을 구성하는 방법도 유사함). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). 모터는 [멀티콥터 지오메트리](#motor-geometry-multicopter)와 동일한 구성 필드를 갖습니다. @@ -85,7 +81,7 @@ _액추에이터 설정_ 보기는 기체의 특정 지오메트리를 사용자 #### 모터 형상: 표준 VTOL -[일반 표준 쿼드플레인 VTOL 틸트로터](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol)의 모터 구조는 아래와 같습니다(다른 "표준 VTOL"을 구성하는 방법도 유사함). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![기하학 모터: 표준 vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -123,27 +119,46 @@ _액추에이터 설정_ 보기는 기체의 특정 지오메트리를 사용자 ### 조종면 지오메트리 -지오메트리 패널의 조종면 섹션에서는 기체 조종면의 갯수와 유형을 설정할 수 있습니다. 경우에 따라 트림 및 슬루율 값을 설정할 수도 있습니다. 고급 사용자는 롤 스케일, 요 스케일 및 피치 스케일을 구성할 수 있습니다(일반적으로 기본값이 허용되며 필요하지 않음). - -2개의 에일러론이 있는 차량의 "예시" 제어 표면 섹션이 아래에 나와 있습니다. 에일러론은 롤에만 영향을 미치므로 피치 및 요 필드는 비활성화됩니다. +지오메트리 패널의 조종면 섹션에서는 기체 조종면의 갯수와 유형을 설정할 수 있습니다. 경우에 따라 트림 및 슬루율 값을 설정할 수도 있습니다. 고급 사용자는 롤 스케일, 요 스케일 및 피치 스케일을 구성할 수 있습니다(일반적으로 기본값이 허용되며 필요하지 않음). 2개의 에일러론이 있는 차량의 "예시" 제어 표면 섹션이 아래에 나와 있습니다. 에일러론은 롤에만 영향을 미치므로 피치 및 요 필드는 비활성화됩니다. ![조종면 설정 예제](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +기본적으로 가장 일반적인 설정만 표시됩니다. Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + 항목들은 다음과 같습니다. - `조종면`: 조종면의 갯수(먼저 설정하십시오!) - `유형`: 각 조종면의 유형: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder, 왼쪽 엘레본`, `오른쪽 엘레본`, `왼쪽 V-Tail`, `오른쪽 V-Tail`, `왼쪽 플랩`, `오른쪽 플랩`, `에어브레이크`, `맞춤형`. -- `롤 스케일`: 롤 축을 중심으로 한 액추에이터의 효율성(정규화: -1 ~ 1). [일반적으로 기본 액추에이터 값을 사용하여야 합니다](#actuator-roll-pitch-and-yaw-scaling). -- `피치 스케일`: 피치 축 주위의 액츄에이터의 효율성(정규화: -1에서 1). [일반적으로 기본 액추에이터 값을 사용하여야 합니다](#actuator-roll-pitch-and-yaw-scaling). -- `요 스케일`: 요 축을 중심으로 한 액추에이터의 효율성(정규화: -1 ~ 1). [일반적으로 기본 액추에이터 값을 사용합니다](#actuator-roll-pitch-and-yaw-scaling). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [일반적으로 기본 액추에이터 값을 사용하여야 합니다](#actuator-roll-pitch-and-yaw-scaling). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [일반적으로 기본 액추에이터 값을 사용하여야 합니다](#actuator-roll-pitch-and-yaw-scaling). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [일반적으로 기본 액추에이터 값을 사용합니다](#actuator-roll-pitch-and-yaw-scaling). - `트림`: 입력 없이 중앙에 오도록 액추에이터에 추가된 오프셋입니다. 이것은 시행착오를 거쳐 결정될 수 있습니다. -- `슬루율`: 모터 및 서보 신호가 전체 출력 범위를 통과하는 데 허용되는 최소 시간(초). +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - 설정은 액츄에이터의 변화율을 제한합니다(지정하지 않으면 비율 제한이 적용되지 않음). 틸트로터 VTOL 차량의 틸팅 액추에이터와 같이 너무 빨리 움직일 경우 손상될 수 있는 액추에이터를 위한 것입니다. - 예를 들어, 2.0으로 설정하면 모터 및 서보가 2초 이내에 작동을 완료하는 속도로 0에서 1로 이동하도록 명령되지 않음을 의미합니다(가역 모터의 경우 범위는 -1에서 1). -- `마우스 오버시 조종면 잠금`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `사용`: 대부분의 차량은 호버링 시 조종면을 사용하지 않습니다. 이 설정을 사용하여 기체 역학에 영향을 미치지 않도록 잠그십시오. - `비활성화`: 듀오 테일시터(피치 및 요 제어에 엘레본 사용)와 같이 호버링에서 조종면을 사용하는 기체를 설정합니다. 또한 조종면을 사용하여 고속으로 이동할 때 호버 모드에서 추가 안정화를 제공하거나 강한 바람이 부는 기체에 대하여 설정합니다. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### 액추에이터 롤, 피치 및 요 스케일링 @@ -267,7 +282,7 @@ Functions include: - `Constant_Max`: Output is set to constant maximum value (+1). - `Motor 1` to `Motor 12`: Output is indicated motor. Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. - `RC Roll`: Output is passthrough roll from RC ([RC_MAP_ROLL](../advanced_config/parameter_reference.md#RC_MAP_ROLL) maps an RC channel to this output). An RC channel is mapped to the output using . @@ -275,7 +290,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/ko/config/autotune.md b/ko/config/autotune.md index 99a9652724247..ae38750225be4 100644 --- a/ko/config/autotune.md +++ b/ko/config/autotune.md @@ -2,7 +2,7 @@ 자동 튜닝은 안정적이고 반응성은 높은 비행에 탁월한 컨트롤러인 PX4의 속도와 자세를 자동으로 튜닝합니다(다른 튜닝은 "선택 사항"에 가깝습니다). 현재 멀티콥터, 고정익 및 하이브리드 VTOL에 적용할 수 있습니다. -한 번의 튜닝으로 충분하며, 제조업체에서 이미 튜닝한(그 이후로 수정하지 않은) 기체가 아닌 경우에는 튜팅을 권장합니다. +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning 비행 중에 자동 튜닝이 수행됩니다. 기체는 중간 정도의 교란을 처리할 수 있을 만큼 원할하게 비행가능 하여야 하며, 다음 사항에 주의를 기울여야 합니다. @@ -86,10 +86,10 @@ If an [Enable/Disable Autotune Switch](#enable-disable-autotune-switch-fixed-win * 느린 진동(초당 1회 또는 더 느린 진동): 이는 종종 대형 플랫폼에서 발생하며 자세 루프가 속도 루프에 비해 너무 빠르기 때문입니다. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * 빠른 진동(초당 1회 이상): 이는 속도 루프의 이득이 너무 높기 때문입니다. - **멀티콥터:** 0.02씩 `MC_[ROLL|PITCH|YAW]RATE_K` 감소 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### 자동 튜닝 실패 diff --git a/ko/config/battery.md b/ko/config/battery.md index 232a9063a6166..94ff7d60b7ff4 100644 --- a/ko/config/battery.md +++ b/ko/config/battery.md @@ -187,8 +187,8 @@ PX4는 아래 두개의 매개변수 중 하나를 [설정](../advanced_config/p 이 부하 보상 방법은 모터에 할당된 총 추력을 기준으로 부하를 추정합니다. -:::caution -이 방법은 추력 명령과 전류 사이에 지연이 있고 추력이 전류에 선형 적으로 비례하지 않기 때문에 정확하지 않습니다. 차량에 전류 센서가있는 경우에는 [전류 기반 부하 보상](#current_based_load_compensation) 방법을 사용하십시오. +:::warning +This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. 차량에 전류 센서가있는 경우에는 [전류 기반 부하 보상](#current_based_load_compensation) 방법을 사용하십시오. ::: 이 기능을 활성화하려면: diff --git a/ko/config/compass.md b/ko/config/compass.md index b2b5c0e315043..bb30c0809a02e 100644 --- a/ko/config/compass.md +++ b/ko/config/compass.md @@ -58,9 +58,33 @@ Notes: - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. This can also be used to change the relative priority of a compass. + + ## 추가 정보 -* [주변기기 > GPS & 나침반 > 나침반 설정](../gps_compass/README.md#compass-configuration) -* [QGroundControl 사용 설명서 > 센서](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 설정 비디오 - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (유튜브) -* [나침반 전력 보정](../advanced_config/compass_power_compensation.md) (고급 설정) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [나침반 전력 보정](../advanced_config/compass_power_compensation.md) (고급 설정) +- [QGroundControl 사용 설명서 > 센서](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 설정 비디오 - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (유튜브) + diff --git a/ko/config/flight_controller_orientation.md b/ko/config/flight_controller_orientation.md index 948fcb5de7559..b976387a82d11 100644 --- a/ko/config/flight_controller_orientation.md +++ b/ko/config/flight_controller_orientation.md @@ -27,7 +27,9 @@ Tailsitter 기체의 경우 모든 센서 보정에 대한 멀티콥터 설정( 1. *QGroundControl *을 시작하고 기체를 연결합니다. 1. 상단 툴바에서 **톱니바퀴** 아이콘(기체 설정)을 선택한 다음 사이드 바에서 **센서**를 선택하십시오. -1. **방향 설정** 버튼을 클릭합니다. +1. **방향 설정** 버튼을 클릭합니다. + + 1. **비행 콘트롤러 방향**을 선택합니다([위에서 계산한 방법](#calculating-orientation)대로 선택하십시오). diff --git a/ko/config/flight_mode.md b/ko/config/flight_mode.md index f40c247f166e8..925440ba35fe3 100644 --- a/ko/config/flight_mode.md +++ b/ko/config/flight_mode.md @@ -83,7 +83,7 @@ FrSky Taranis에서 이 프로세스는 두 개의 실제 스위치 위치의 아래 비디오는 *FrSky Taranis* 송신기로 어떻게 동작하는 지 보여줍니다.@https://youtu.be/TFEjEQZqdVA -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## 추가 정보 diff --git a/ko/config/motors.md b/ko/config/motors.md deleted file mode 100644 index 07110a876799b..0000000000000 --- a/ko/config/motors.md +++ /dev/null @@ -1,27 +0,0 @@ -# 모터 서보 점검 - -:::note -이 섹션은 [액추에이터](../config/actuators.md) 설정 화면으로 대체합니다. -::: - -기체를 설정 후에는 모터 설정, 회전 방향 및 서보 응답을 확인하여야 합니다. This can be done in *QGroundControl*, under the [Vehicle Setup > Motors](https://docs.qgroundcontrol.com/master/en/SetupView/Motors.html) tab. - -아래의 PX4 특정 동작에 유의하십시오. -- 안전 버튼을 눌러야 모터 테스트가 가능합니다. -- 중지 스위치를 사용하면 모터를 즉시 중지할 수 있습니다. -- 매개 변수 [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN)을 사용하여 모터 테스트를 비활성화 할 수 있습니다. -- IO가 있는 보드에서는 MAIN 핀만 테스트할 수 있습니다. -- 셸에서 추가 옵션이 있는 [motor_test](../modules/modules_command.md#motor-test)도 사용할 수 있습니다. - -하나 이상의 모터가 구성된 [기체](../airframes/airframe_reference.md)에 따라 정해진 바른 방향으로 회전하야여 합니다. 회전 반향을 변경하는 방법은 다음과 같습니다. -- [DShot](../peripherals/dshot.md) ESC는 [DShot 명령](../peripherals/dshot.md#commands)을 사용하여 방향을 변경할 수 있습니다. -- 모터 케이블 3개 중 2개를 변경하면됩니다(어떤 케이블이든 상관 없음). :::note -모터가 총알 커넥터를 사용하지 않은 경우에는 납땜을 다시 하여야 합니다 (이러한 이유로 DShot ESC를 선호합니다). -::: - -기체 설정 정확성을 확인하려면 추가 검사를 하여야 합니다. -1. 프로펠러가 제거된 상태에서 [안정화 모드](../flight_modes/manual_stabilized_mc.md) (멀티콥터) 또는 [수동 모드](../flight_modes/manual_fw.md) (고정익)로 전환하고 기체의 시동을 겁니다. -1. 추진력을 약간 높여서 (차량이 자동으로 시동이 꺼지지 않기 위하여) 모터의 회전 속도가 증가하는 지 확인합니다. -1. 모든 모터가 최소 추진력으로 회전하는 지 확인합니다. -1. 기체에 에일러론이있는 경우 롤/피치 스틱 입력 명령에 대하여 올바른 방향으로 반응하는 지 확인합니다. - diff --git a/ko/config/safety.md b/ko/config/safety.md index ac6f298bbfe50..8f0047096b300 100644 --- a/ko/config/safety.md +++ b/ko/config/safety.md @@ -22,7 +22,7 @@ The list below shows the set of all failsafe actions, ordered in increasing seve | Disarm | Stops the motors immediately. | | [비행 종료](../advanced_config/flight_termination.md) | 모든 컨트롤러를 끄고 모든 PWM 출력을 안전 장치 값(예 : [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1), [PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1))으로 설정합니다. 안전장치 출력은 낙하산, 랜딩 기어를 배치하거나 다른 작업을 수행할 수 있습니다. 고정익은 안전하게 활공할 수 있습니다. | -If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -63,19 +63,19 @@ The RC Loss failsafe may be triggered if the RC transmitter link is lost in manu Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. :::tip PX4는 여러 임의의 다각형 및 원형 포함 및 제외 영역 ([Flying > GeoFence](../flying/geofence.md))이 있는 GeoFence를 지원합니다. ::: Additional (and underlying) parameter settings are shown below. -| 설정 | 매개변수 | 설명 | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| RC 연결불량 시간 초과 | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | -| RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. | -| 안전장치 동작 | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. | -| RC 손실 예외 | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC 손실이 무시되는 모드를 설정합니다: 미션(기본값), 정지, 오프보드. | +| 매개변수 | 설정 | 설명 | +| ------------------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | RC 연결불량 시간 초과 | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | +| [COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). | +| [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | 안전장치 동작 | Disabled, Loiter, Return, Land, Disarm, Terminate. | +| [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC 손실 예외 | RC 손실이 무시되는 모드를 설정합니다: 미션(기본값), 정지, 오프보드. | ### 데이터 연결불량 안전장치 @@ -195,7 +195,6 @@ Parameters that only affect Fixed-wing vehicles: | 매개변수 | 설명 | | ---------------------------------------------------------------------------- | ------------------------------------------------------------------ | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | 오프 보드 단락이후 안전장치 동작 지연 여부 설정. | -| [COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | RC를 사용할 수 없는 경우 비상 안전조치 : 착륙 모드, 대기 모드, 귀환 모드. | | [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | RC를 사용할 수있는 경우 비상 안전조치 : 위치 모드, 고도 모드, 수동 모드, 귀환 모드, 착륙 모드, 대기 모드. | ### Mission Feasibility Checks @@ -214,22 +213,26 @@ As these are not strictly speaking "failsafes" they are documented in [Mission M | ------------------------------------------------------------------------------ | ----------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | 비상 안전 장치를 설정합니다 : 비활성화, 경고, 귀환 모드, 착륙 모드. | -### QuadChute 안전 장치 +### Quad-chute Failsafe -VTOL이 고정익 모드에서 더 이상 비행할 수 없는 경우의 안전 장치입니다. 푸셔 모터, 속도 센서 또는 제어 표면이 고장났을 가능성이 높습니다. 동작시 기체는 즉시 멀티콥터 모드로 전환됩니다. 차량이 [미션 모드](../flight_modes/mission.md)인 경우 안전 장치 [복귀 모드](../flight_modes/return.md)로 전환합니다. +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -쿼드슈트는 `param2`가 `1`로 설정된 MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) 메시지를 전송하여 실행할 수 있습니다. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -아래의 표에서 쿼드슈트가 작동하는 시기를 제어하는 매개변수를 설명합니다. - -| 매개변수 | 설명 | -| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| [VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | 고정익 비행에 대한 고도 오류 음수의 최대 절대값 고도가 설정치 이하가 되면, 기체는 멀티콥터 모드로 다시 전환되고 원위치복귀 안전장치가 작동합니다. | -| [VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | 고정익 비행 최소 고도. 고정익 비행에서 고도가 이 값 아래로 떨어지면 차량은 멀티콥터 모드로 다시 전환되고 원위치 복귀 안전장치가 작동합니다. | -| [VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | QuadChute가 작동하기 전의 최대 피치 각도. 이 이상에서 차량은 멀티콥터 모드로 다시 전환되고 원위치 복귀 안전장치가 작동합니다. | -| [VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | QuadChute가 맞물리기 전의 최대 롤 각도. 이 이상에서 차량은 멀티콥터 모드로 다시 전환되고 원위치 복귀 안전장치가 작동합니다. | +The parameters that control when the quad-chute will trigger are listed in the table below. + +| 매개변수 | 설명 | +| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. | +| [VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) | Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. | +| [VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. | +| [VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing | + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## 고장 감지기 diff --git a/ko/config_fw/advanced_tuning_guide_fixedwing.md b/ko/config_fw/advanced_tuning_guide_fixedwing.md index 19f8f4b6aadb4..d87db2fb61772 100644 --- a/ko/config_fw/advanced_tuning_guide_fixedwing.md +++ b/ko/config_fw/advanced_tuning_guide_fixedwing.md @@ -67,8 +67,8 @@ Do not use [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_M Specify the target climb and sink rate for autonomous missions by adjusting [FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) and [FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP). These specify the height rates at which the vehicle will climb or descend in order to change altitude. Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1 컨트롤러 조정(위치) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - L1 거리이며 추종하는 항공기 전방의 추적 지점을 정의합니다. 25 미터 값은 대부분의 항공기에서 작동합니다. 16-18의 값은 여전히 작동하며 더 선명한 응답을 제공합니다. 진동없이 반응이 날카로울 때까지 튜닝하는 동안 천천히 줄입니다. +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 10-20 meters works for most aircraft. 진동없이 반응이 날카로울 때까지 튜닝하는 동안 천천히 줄입니다. Vehicles with a slow roll dynamic should have this value increased. diff --git a/ko/config_fw/trimming_guide_fixedwing.md b/ko/config_fw/trimming_guide_fixedwing.md index f10f87d801753..d5b9ea2ae3951 100644 --- a/ko/config_fw/trimming_guide_fixedwing.md +++ b/ko/config_fw/trimming_guide_fixedwing.md @@ -11,7 +11,7 @@ 고정익을 적절히 트림하기 위해 사용할 수있는 매개변수가 있습니다. 트리밍 매개변수의 사용 사례에 대한 개요는 다음과 같습니다. - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM)은 RC 송신기에서 수신 신호에 트림을 적용합니다. 이 매개변수는 [RC 보정](../config/radio.md)중에 자동으로 설정됩니다. -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1)는 믹싱후 PWM 채널에 트림을 적용합니다. 이들은 비행 전에 제어 표면을 기본 각도로 미세하게 정렬하는 데 사용됩니다. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. 이들은 비행 전에 제어 표면을 기본 각도로 미세하게 정렬하는 데 사용됩니다. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF)는 피치 설정점에 오프셋을 적용합니다. 항공기가 순항 속도로 비행해야하는 공격 각도를 설정하는 데 사용됩니다. - [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM)은 속도 컨트롤러에서 측정된 대기 속도에 따라 출력을 조정하는 데 사용됩니다. 자세한 내용은 [대기속도 스케일링](../flight_stack/controller_diagrams.md#airspeed-scaling)을 참조하십시오. - [TRIM_ROLL](../advanced_config/parameter_reference.md#TRIM_ROLL), [TRIM_PITCH](../advanced_config/parameter_reference.md#TRIM_PITCH) 및 [TRIM_YAW](../advanced_config/parameter_reference.md#TRIM_YAW)는 믹싱 *전* 제어 신호에 트림을 적용합니다. 예를 들어. 엘리베이터용 서보가 두 개인 경우 `TRIM_PITCH`는 두 서보 모두에 트림을 적용합니다. 조종면이 정렬되어 있지만 수동 (안정화되지 않은) 비행 중에 기체가 피치/롤/요잉 업/다운/왼쪽/오른쪽 또는 안정된 비행 중에 제어 신호에 일정한 오프셋이 있는 경우에 사용됩니다. @@ -26,12 +26,12 @@ ## 고급 트리밍 -비대칭 익형에 의해 유도된 하향 피치 모멘트는 대기 속도에 따라 증가하고 플랩이 전개 될 때 현재 측정된 대기 속도와 플랩 위치에 따라 항공기를 다시 트리밍하여야 합니다. 이를 위해 대기속도의 쌍 선형 곡선 (아래 그림 참조) 함수와 플랩 상태의 피치 트림 증분 함수를 다음 매개변수를 사용하여 정의할 수 있습니다. +비대칭 익형에 의해 유도된 하향 피치 모멘트는 대기 속도에 따라 증가하고 플랩이 전개 될 때 현재 측정된 대기 속도와 플랩 위치에 따라 항공기를 다시 트리밍하여야 합니다. For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW*DTRIM*\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN)는 최소/최대 대기속도([FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) 및 [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)로 정의 됨)에서 `TRIM_ROLL/PITCH/YAW`에 추가된 롤/피치/요 트림값입니다. -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim 곡선](../../assets/config/fw/fixedwing_dtrim.png) -완벽하게 대칭인 기체는 피치 트림 증분만 필요하지만, 실제 기체는 완벽하게 대칭이 아니기 때문에 롤과 요 트림 증분이 필요한 경우도 있습니다. +완벽하게 대칭인 기체는 피치 트림 증분만 필요하지만, 실제 기체는 완벽하게 대칭이 아니기 때문에 롤과 요 트림 증분이 필요한 경우도 있습니다. diff --git a/ko/config_heli/README.md b/ko/config_heli/README.md index c683cc59338f4..f9bccf1fe7c93 100644 --- a/ko/config_heli/README.md +++ b/ko/config_heli/README.md @@ -30,8 +30,7 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/ko/config_mc/filter_tuning.md b/ko/config_mc/filter_tuning.md index ce9d1c3bbaf3b..62fd80f645eca 100644 --- a/ko/config_mc/filter_tuning.md +++ b/ko/config_mc/filter_tuning.md @@ -22,7 +22,7 @@ - PX4 소프트웨어 내부 : 센서 신호를 드라이버에서 읽은 다음 컨트롤러를 통해 출력 드라이버로 전달하여야 합니다. - 최대 자이로 게시 속도 ([IMU_GYRO_RATEMAX](../advanced_config/parameter_reference.md#IMU_GYRO_RATEMAX)로 설정됨). 속도가 높을수록 지연 시간이 줄어들지만 증간된 연산량으로 인하여 다른 프로세스를 방해할 수 있습니다. 4kHz 이상은 STM32H7 프로세서 이상의 컨트롤러에서만 권장됩니다 (2kHz 값은 성능이 낮은 프로세서의 최대치입니다). - IO 칩 (MAIN 핀)은 AUX 핀 사용에 비해 약 5.4ms의 지연 시간을 추가합니다 (*Pixracer* 또는 *Omnibus F4*에는 적용되지 않지만 Pixhawk에는 적용됨) IO 지연을 방지하려면 [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO)를 비활성화하고 모터를 AUX 핀에 대신 연결하십시오. -- PWM 출력 신호 : 대기 시간을 줄이기 위하여 [Dshot](.../en/peripherals/dshot.md) 또는 One-Shot ([PWM_AUX_RATE = 0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) 또는 [PWM_MAIN_RATE = 0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE))을 활성화합니다. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). 아래에서는 저역 통과 필터의 효과에 대하여 설명합니다. diff --git a/ko/config_mc/pid_tuning_guide_multicopter.md b/ko/config_mc/pid_tuning_guide_multicopter.md index f336c3e28ab4a..8d86c63a82a50 100644 --- a/ko/config_mc/pid_tuning_guide_multicopter.md +++ b/ko/config_mc/pid_tuning_guide_multicopter.md @@ -171,7 +171,7 @@ PID 속도 컨트롤러 튜닝 매개 변수는 다음과 같습니다. If you have a [thrust stand](https://www.tytorobotics.com/pages/series-1580-1585) *measure* thrust and motor commands simultaneously), you can determine the relationship between the motor control signal and the motor's actual thrust, and fit a function to the data. `actuator_output`이라고하는 PX4의 모터 명령은 사용중인 각 ESC에 대한 PWM, Dshot, UAVCAN 명령 일 수 있습니다. [This Notebook][THR_MDL_FAC_Calculation] shows one way for how the thrust model factor `THR_MDL_FAC` may be calculated from previously measured thrust and PWM data. 이 플롯에 표시된 곡선은 α k, 실제 단위 (kgf 및 μs)로 추력과 PWM을 표시합니다. 곡선 맞춤 문제를 단순화하기 위해 α를 추정하지 않고도 `k`를 찾기 위해 0과 1 사이의 데이터를 정규화 할 수 있습니다(α = 1, 데이터가 정규화 될 때). -[![추력 곡선 보상](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note PWM과 정적 추력간의 매핑은 배터리 전압에 따라 크게 달라집니다. @@ -195,20 +195,6 @@ PWM과 정적 추력간의 매핑은 배터리 전압에 따라 크게 달라집 스러스트 스탠드에 접근할 수 없는 경우, 경험적으로 모델링 요소를 조정할 수 있습니다. 0.3부터 시작하여 한 번에 0.1 씩 늘립니다. 너무 높으면, 낮은 스로틀 값에서 진동이 감지되기 시작합니다. 너무 낮으면, 더 높은 스로틀 값에서 진동이 나타납니다. - - ### 에어 모드 & 믹서 포화 @@ -234,5 +220,3 @@ turn off all [higher-level position controller tuning gains](../config_mc/mc_tra 기체 비행이 성공적이면 [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE) 매개변수를 통하여 에어 모드를 활성화 할 수 있습니다. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb - -[THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb diff --git a/ko/config_mc/pid_tuning_guide_multicopter_basic.md b/ko/config_mc/pid_tuning_guide_multicopter_basic.md index 6a8143486f287..8d2931ba35dc1 100644 --- a/ko/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/ko/config_mc/pid_tuning_guide_multicopter_basic.md @@ -31,15 +31,15 @@ _QGroundControl_ **PID 튜닝** 설정은 기체 설정점과 응답 곡선의 - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. 이것은 이미 비행한 기체를 제공할 것입니다. - [ESC 보정](../advanced_config/esc_calibration.md)을 완료하여야 합니다. -- PWM 출력을 사용하는 경우: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)이 올바르게 설정되었습니다. 차량을 낮게 설정해야 하지만, 차량이 무장을 했을 때 ** 모터들은 절대 멈추지 않습니다

          +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). These need to be set low, but such that the **motors never stop** when the vehicle is armed. [곡예 모드](../flight_modes/acro_mc.md) 또는 [수동/안정 모드](../flight_modes/manual_stabilized_mc.md)에서 테스트할 수 있습니다. - 프로펠러 제거 - 기체에 시동을 걸고 스로틀을 최소로 내립니다. - 차량을 모든 방향으로 60도 정도 기울입니다. - - 모터가 꺼져 있는 지 확인합니다. + - 모터가 꺼져 있는 지 확인합니다. - PWM 출력을 사용하는 경우 : [PWM_MIN](../advanced_config/parameter_reference.md#PWM_MIN)이 올바르게 설정되었습니다. 낮게 설정해야하지만 기체 시동시에는 **모터가 절대 멈추지 않도록**합니다. -- 기체 튜닝전에 [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE)를 비활성화하십시오 (PID 튜닝 화면에 이에 대한 옵션이 있습니다). +- 기체 튜닝전에 [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE)를 비활성화하십시오 (PID 튜닝 화면에 이에 대한 옵션이 있습니다). :::warning 잘못 튜닝된 기체는 불안정하고 충돌 가능성이 높아집니다. [킬 스위치](../config/safety.md#emergency-switches)를 지정했는 지 확인하십시오. diff --git a/ko/config_mc/racer_setup.md b/ko/config_mc/racer_setup.md index 95c43bce13e9d..1c8f21d8383d4 100644 --- a/ko/config_mc/racer_setup.md +++ b/ko/config_mc/racer_setup.md @@ -64,7 +64,7 @@ 중요한 매개 변수는 다음과 같습니다. -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - 수동/안정화 모드의 최대 롤, 피치 및 요 속도를 설정합니다 : [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) 및 [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX). 최대 기울기 각도는 [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX)로 설정합니다. - 최소 추력 [MPC_MANTHR_MIN](../advanced_config/parameter_reference.md#MPC_MANTHR_MIN)은 0으로 설정합니다. @@ -108,7 +108,7 @@ PID 튜닝을 전에 ESC를 먼저 튜닝하십시오. - 소프트웨어 및 센서 칩의 [저역 통과 필터](../config_mc/filter_tuning.md)는 지연시간 증가분을 상쇄하여 노이즈 필터링을 원활하게 합니다. - PX4 소프트웨어 내부 : 센서 신호를 드라이버에서 읽은 다음 컨트롤러를 통해 출력 드라이버로 전달하여야 합니다. - IO 칩 (MAIN 핀)은 AUX 핀 사용에 비해 약 5.4ms의 지연 시간을 추가합니다 (*Pixracer* 또는 *Omnibus F4*에는 적용되지 않지만 Pixhawk에는 적용됨) IO 지연을 방지하려면 [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO)를 비활성화하고 모터를 AUX 핀에 대신 연결하십시오. IO 지연을 방지하려면 [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO)를 비활성화하고 모터를 AUX 핀에 대신 연결하십시오. -- PWM 출력 신호 : One-Shot을 활성화하여 지연 시간을 줄입니다 ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) = 0). +- PWM output signal: enable the One-Shot protocol to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### 필터 튜닝 diff --git a/ko/config_vtol/vtol_back_transition_tuning.md b/ko/config_vtol/vtol_back_transition_tuning.md index dec159d602653..dca59dfc00a8e 100644 --- a/ko/config_vtol/vtol_back_transition_tuning.md +++ b/ko/config_vtol/vtol_back_transition_tuning.md @@ -1,56 +1,13 @@ # VTL 역전환 튜닝 -When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## 역전환 시간 - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## 예상 감속 설정 -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## 에어브레이크 적용 - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## 고정익 모터에 역 추력 적용 - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### 스로틀 스케일링 (3D) 사용 +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### 제어 채널 - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## 일반적인 설정 - -An example of a setup that employs most features listed above would be the following: +## 역전환 시간 -- 기체 : 역 추력을 지원하는 모든 VTOL (예 : DeltaQuad) -- ESC : 모터 반전을 지원하는 고정익 ESC (예 : Hobbywing Platinum Pro 60A) -- 예상 감속 값 (m/s/s) `VT_B_DEC_MSS` : 2.5 -- 역전환 기간 제한 시간 (초) `VT_B_TRANS_DUR` : 10 -- 역전환중 역방향 채널을 높게 설정 `VT_B_REV_OUT` : 1.0 -- 역 전환 중 70% 추력 적용 `VT_B_TRANS_THR` : 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/ko/config_vtol/vtol_quad_configuration.md b/ko/config_vtol/vtol_quad_configuration.md index fe2db97e11c7f..a632e6b2e32ad 100644 --- a/ko/config_vtol/vtol_quad_configuration.md +++ b/ko/config_vtol/vtol_quad_configuration.md @@ -1,12 +1,16 @@ -# QuadPlane VTOL 설정 및 튜닝 +# Generic Standard VTOL (QuadPlane) Configuration & Tuning -이것은 QuadPlane VTOL(Quadcopter와 결합된 비행기)에 대한 설정 문서입니다. 기체별 문서와 조립 방법은 [VTOL 프레임 조립](../frames_vtol/README.md)를 참고하십시오. +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. + +기체별 문서와 조립 방법은 [VTOL 프레임 조립](../frames_vtol/README.md)를 참고하십시오. ## 펌웨어 및 기본 설정 1. *QGroundControl*을 실행합니다 -2. 마스터 펌웨어 플래시 -3. 설정 탭에서 적절한 VTOL 기체를 선택하고, 기체가 목록에 없으면 Fun Cub VTOL 기체를 선택합니다. +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### 비행 / 전환 모드 스위치 @@ -45,10 +49,6 @@ Front transition throttle defines the target throttle for the pusher/puller moto This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -122,4 +122,4 @@ When transitioning from **fixed wing to multirotor** for this type of VTOL the ### 지원 -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/ko/config_vtol/vtol_without_airspeed_sensor.md b/ko/config_vtol/vtol_without_airspeed_sensor.md index 49b3d97758bc8..55446c84daf0c 100644 --- a/ko/config_vtol/vtol_without_airspeed_sensor.md +++ b/ko/config_vtol/vtol_without_airspeed_sensor.md @@ -45,13 +45,17 @@ Set the trim throttle ([FW_THR_TRIM](../advanced_config/parameter_reference.md#F ### 권장 매개 변수(선택 사항) -실속 위험이 실제적이므로 'QuadChute'([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT))로 불리는 '고정익 최소 고도'를 설정하는 것이 바람직합니다. 그러면, VTOL이 멀티콥터 모드로 다시 전환되고 특정 고도 아래에서 [복귀 모드](../flight_modes/return.md)가 시작됩니다. 이 값을 15 미터 또는 20 미터로 설정하여 멀티콥터가 실속에서 회복할 시간을 제공할 수 있습니다. +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + +그러면, VTOL이 멀티콥터 모드로 다시 전환되고 특정 고도 아래에서 [복귀 모드](../flight_modes/return.md)가 시작됩니다. 이 값을 15 미터 또는 20 미터로 설정하여 멀티콥터가 실속에서 회복할 시간을 제공할 수 있습니다. 이 모드에 대해 테스트된 위치 추정기는 EKF2입니다. [SYS_MC_EST_GROUP](../advanced_config/parameter_reference.md#SYS_MC_EST_GROUP)을 변경하여 설정합니다. ## 대기속도 센서가 없는 첫 비행 -값은 위치 제어 비행에 적용됩니다 (예: [유지 모드](../flight_modes/hold.md) 또는 [임무 모드](../flight_modes/mission.md)). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. 기준 비행과 같이, 이 비행은 풍속이 매우 작은 조건에서 수행되어야 합니다. 첫 비행의 경우 다음 사항들을 권장합니다. +값은 위치 제어 비행에 적용됩니다 (예: [유지 모드](../flight_modes/hold.md) 또는 [임무 모드](../flight_modes/mission.md)). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + +기준 비행과 같이, 이 비행은 풍속이 매우 작은 조건에서 수행되어야 합니다. 첫 비행의 경우 다음 사항들을 권장합니다. - 같은 고도 유지 - 웨이포인트를 충분히 넓고 급회전이 필요하지 않도록 설정하십시오. diff --git a/ko/contribute/code.md b/ko/contribute/code.md index 4f51da903935a..74640e7e58d96 100644 --- a/ko/contribute/code.md +++ b/ko/contribute/code.md @@ -4,7 +4,7 @@ PX4 프로젝트는 3가지 Git 분기 모델을 사용합니다. -* [master](https://github.com/PX4/PX4-Autopilot/tree/master)는 기본적으로 불안정하며 빠르게 발전합니다. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta)는 철저한 테스트를 거쳤습니다. 비행 테스터를 위한 것입니다. * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable)은 최신 릴리스를 의미합니다. diff --git a/ko/contribute/dev_call.md b/ko/contribute/dev_call.md index 464ec921a90ba..7dd48342a83b2 100644 --- a/ko/contribute/dev_call.md +++ b/ko/contribute/dev_call.md @@ -1,12 +1,11 @@ -# 주간 온라인 개발자 회의 +# Weekly Community Q&A Call (Previously "Dev Call")

          이 페이지는 오래된 페이지입니다.

          .

          The latest version can be found here.

          -PX4 개발 팀은 플랫폼 기술 세부내역과 심층 분석 내역을 정리합니다. pull 요청, 주요 현안, 질답 요소를 의논할 의제 시간을 확보하기도 합니다. - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## 참여 대상: @@ -14,29 +13,20 @@ PX4 개발 팀은 플랫폼 기술 세부내역과 심층 분석 내역을 정 * 구성요소 관리자 * 테스트 팀 관리자 * 드론코드 회원 -* 커뮤니티 회원 +* Community members (you!) :::tip -유선 개발 미팅은 (핵심 개발 팀만이 아닌) 관심있는 모든 개발자를 대상으로 열려있습니다. +The Community Q&A call is open to all interested community members. + 개발팀과 플랫폼 개발에 기여할 수 있는 좋은 기회입니다. ::: ## 회의 목적 -회의 초반에는 45분간 진행하며 프로젝트를 어디서 진행 중인지 의논하는 고수준 포럼도 제공해드립니다. - -[dev call](https://github.com/PX4/PX4-Autopilot/labels/devcall5) 레이블이 붙은 문제/PR을 포함, *기여* 방법을 토론하는 자리입니다. 온라인 미팅에서 새론운 것을 제안하고, 문제를 검토합니다. - -:::note -온라인 미팅은 신속하게 결정을 내릴 수 있도록 도움을 주고자하는 자리입니다. 심도있는 기술적 토론을 기대하지 않으며, 기능 제안에 많은 시간을 할애하지 않습니다. 제안은 반갑습니다만, 지원자가 필요합니다(누군가가 해당 기능을 *구현*해야합니다)! -::: - -미팅 후반부는 고급 기술 토론과 끝나고 열려있는 질문을 다룹니다. 핵심 팀/하위시스템 관리자는 최대 45분동안 더 참여할 수 있습니다. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## 일정 -* 시간: 매주 수요일 유럽 표준시 시간대 17시, 미 동부 표준시 12시, 태평양 표준시 09시 \(캘린더에 가입하십시오) -* **통화 참여** : [https://meet.jit.si/PX4DeveloperCallWeekly](https://meet.jit.si/PX4DeveloperCallWeekly) - -* 온라인 미팅 진행전에 [PX4 토론 - 주간 온라인 개발자 회의](http://discuss.px4.io/c/weekly-dev-call)에 의제를 게시할 예정입니다 -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/ko/debug/simulation_debugging.md b/ko/debug/simulation_debugging.md index 9c2c7025f53aa..6db14d04f6676 100644 --- a/ko/debug/simulation_debugging.md +++ b/ko/debug/simulation_debugging.md @@ -29,21 +29,24 @@ SITL 시뮬레이션 중에 valgrind를 사용하려면: make px4_sitl_default jmavsim___valgrind ``` -## 조합 시작 +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. 그 결과 아래와 같은 시작 옵션이 나타납니다. +By default SITL is launched without a debugger attached when using any simulator backend: ```sh +make px4_sitl_default gz +make px4_sitl_default gazebo-classic make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb +``` -make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +For Gazebo Classic (only) you can also start the simulator with a debugger attached. Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb ``` -여기서 마지막 매개변수는 <viewer\_model\_debugger> 삼중항입니다(밑줄 3개를 사용하면 기본 "iris" 모델을 의미함). 그러면, 디버거가 시작되고 SITL 애플리케이션이 시작됩니다. 디버거 셸에서 실행을 중지하려면 `CTRL-C`를 입력합니다. +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. 디버거 셸에서 실행을 중지하려면 `CTRL-C`를 입력합니다. ```sh Process 16529 stopped @@ -74,14 +77,14 @@ DriverFrameworks 스케줄링이 디버깅 세션을 방해하지 않도록 하 마지막 매개변수인 <viewer\_model\_debugger> 트리플렛은 실제로 빌드 디렉토리에서 make에 전달되므로 ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` 명령은 다음 명령과 같습니다. ```sh make px4_sitl_default # Configure with cmake -make -C build/px4_sitl_default jmavsim___gdb +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -90,15 +93,81 @@ A full list of the available make targets in the build directory can be obtained make help ``` -그러나, 편의를 위해 <viewer\_model\_debugger> 삼중항만 있는 목록이 다음 명령으로 출력됩니다. +## Attaching GDB to running SITL -```sh -make list_vmd_make_targets -``` +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + 예를 들어, + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## 컴파일러 최적화 -`posix_sitl_*`에 대해 구성할 때 주어진 실행 파일 및/또는 모듈(cmake에서 `add_executable` 또는 `add_library`로 추가)에 대한 컴파일러 최적화를 억제할 수 있습니다. 이것은 디버거를 사용하여 코드를 단계별로 실행하거나, 그렇지 않으면 최적화 변수를 인쇄시에 편리합니다. +It is possible to suppress compiler optimization for given executables and/or modules (as added by cmake with `add_executable` or `add_library`) when configuring for `posix_sitl_*`. This can be handy when it is necessary to step through code with a debugger or print variables that would otherwise be optimized out. To do so, set the environment variable `PX4_NO_OPTIMIZATION` to be a semi-colon separated list of regular expressions that match the targets that need to be compiled without optimization. This environment variable is ignored when the configuration isn't `posix_sitl_*`. @@ -110,7 +179,7 @@ export PX4_NO_OPTIMIZATION='px4;^modules__uORB;^modules__systemlib$' 대상의 최적화를 억제합니다: 플랫폼\_\_posix\_\_px4\_layer, modules\_\_systemlib, modules\_\_uORB, 예제\_\_px4\_simple\_app, modules\_\_uORB\_\_uORB \\_tests 및 px4. -이러한 정규식과 일치할 수 있는 대상은 다음 명령으로 출력합니다. +The targets that can be matched with these regular expressions can be printed with the command: ```sh make -C build/posix_sitl_* list_cmake_targets diff --git a/ko/debug/swd_debug.md b/ko/debug/swd_debug.md index bee8e971ea490..7db3baa0fbbd0 100644 --- a/ko/debug/swd_debug.md +++ b/ko/debug/swd_debug.md @@ -35,7 +35,7 @@ This connector may come with your flight controller or debug probe. Other option ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/ko/debug/system_wide_replay.md b/ko/debug/system_wide_replay.md index a0c7ef982dbed..276de81c7f07f 100644 --- a/ko/debug/system_wide_replay.md +++ b/ko/debug/system_wide_replay.md @@ -10,7 +10,7 @@ Replay is useful to test the effect of different parameter values based on real 식별된 모든 주제는 최대 속도로 기록되어야 합니다([로깅](../dev_log/logging.md) 참조). `ekf2`의 경우 이는 이미 기록된 주제의 기본 집합에 해당됩니다. -재생된 모든 주제에는 자동으로 생성된 필드 `timestamp`인 단일 절대 타임스탬프만 포함되어야 합니다. 타임스탬프가 더 있는 경우 기본 타임스탬프와 관련하여 상대적이어야 합니다. 예는 [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/sensor_combined.msg)를 참고하십시오. 그 이유는 아래에서 설명합니다. +재생된 모든 주제에는 자동으로 생성된 필드 `timestamp`인 단일 절대 타임스탬프만 포함되어야 합니다. 타임스탬프가 더 있는 경우 기본 타임스탬프와 관련하여 상대적이어야 합니다. For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). 그 이유는 아래에서 설명합니다. ## 사용법 diff --git a/ko/dev_airframes/README.md b/ko/dev_airframes/README.md index 233cb76002b63..6669a61c8833f 100644 --- a/ko/dev_airframes/README.md +++ b/ko/dev_airframes/README.md @@ -1,6 +1,6 @@ # 기체 -PX4에는 단일 코드베이스를 통하여 상상 가능한 대부분의 차량 유형과프레임을 지원할 수 있는 유연한 [믹싱 시스템](../concept/mixing.md)이 있습니다. +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **고정익:** 일반 비행기, 비행 날개, 역 V 꼬리 비행기 등 * **멀티콥터:** 다양한 형태의 헬리콥터, 트리콥터, 쿼드콥터, 헥사로터, 12개 로봇 등 diff --git a/ko/dev_airframes/adding_a_new_frame.md b/ko/dev_airframes/adding_a_new_frame.md index 0ffc6f63857d1..8dadb1e980bdd 100644 --- a/ko/dev_airframes/adding_a_new_frame.md +++ b/ko/dev_airframes/adding_a_new_frame.md @@ -19,7 +19,7 @@ You can also "tweak" the current frame configuration using text files on the SD The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -150,7 +150,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -206,12 +206,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 diff --git a/ko/dev_log/ulog_file_format.md b/ko/dev_log/ulog_file_format.md index 6bce33b5e6e96..78425d0391182 100644 --- a/ko/dev_log/ulog_file_format.md +++ b/ko/dev_log/ulog_file_format.md @@ -466,7 +466,6 @@ Since the Definitions and Data Sections use the same message header format, they - [hardfault_log 모듈](https://github.com/PX4/PX4-Autopilot/tree/master/src/systemcmds/hardfault_log): hardfault 충돌 데이터를 추가합니다. - [pyulog](https://github.com/PX4/pyulog): python, CLI 스크립트가 있는 ULog 파서 라이브러리 - [FlightPlot](https://github.com/PX4/FlightPlot): 자바, 로그 플로터 -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis): Python, pyulog 기반의 로그 플로터 및 3D 시각화 도구입니다. - [MAVLink](https://github.com/mavlink/mavlink): MAVLink를 통한 ULog 스트리밍용 메시지(적어도 잘린 메시지의 경우 데이터 추가는 지원되지 않습니다.) - [QGroundControl](https://github.com/mavlink/qgroundcontrol): C++, MAVLink를 통한 ULog 스트리밍 및 GeoTagging에 대한 최소한의 구문 분석 - [mavlink-router](https://github.com/01org/mavlink-router): C++, MAVLink를 통한 ULog 스트리밍 diff --git a/ko/dev_setup/_gcc_toolchain_installation.md b/ko/dev_setup/_gcc_toolchain_installation.md deleted file mode 100644 index deb1121815e2a..0000000000000 --- a/ko/dev_setup/_gcc_toolchain_installation.md +++ /dev/null @@ -1,32 +0,0 @@ - - -Execute the script below to install GCC 7-2017-q4: - -```sh -pushd . -cd ~ -wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -popd -``` - -Now restart your machine. - - -**Troubleshooting** - -Check the version by entering the following command: - -```sh -arm-none-eabi-gcc --version -``` - -The output should be something similar to: - -```sh -arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` diff --git a/ko/dev_setup/_ninja_build_system.md b/ko/dev_setup/_ninja_build_system.md deleted file mode 100644 index f835ffebe7513..0000000000000 --- a/ko/dev_setup/_ninja_build_system.md +++ /dev/null @@ -1,22 +0,0 @@ -## Ninja Build System - -[Ninja](https://ninja-build.org/) is a faster build system than *Make* and the PX4 *CMake* generators support it. - -On Ubuntu Linux you can install this automatically from normal repos. - -```sh -sudo apt-get install ninja-build -y -``` - -Other systems may not include Ninja in the package manager. In this case an alternative is to download the binary and add it to your path: - -```sh -mkdir -p $HOME/ninja -cd $HOME/ninja -wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip -unzip ninja-linux.zip -rm ninja-linux.zip -exportline="export PATH=$HOME/ninja:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -. ~/.profile -``` diff --git a/ko/dev_setup/dev_env.md b/ko/dev_setup/dev_env.md index 12c33fe47c4e9..61ebe2715e988 100644 --- a/ko/dev_setup/dev_env.md +++ b/ko/dev_setup/dev_env.md @@ -10,15 +10,15 @@ PX4 개발 *지원 플랫폼*은 다음과 같습니다. 아래 표는 각 OS에서 구축 가능한 PX 대상을 보여줍니다. -| 대상 | Linux (Ubuntu) | Mac | 윈도우 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| -| **NuttX 기반 하드웨어:** [Pixhawk 시리즈](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | ✓ | ✓ | ✓ | -| **Linux 기반 하드웨어:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | -| **시뮬레이션:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | -| **Simulation:** ROS2 with Gazebo | ✓ | | | +| 대상 | Linux (Ubuntu) | Mac | 윈도우 | +| ----------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| +| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | ✓ | ✓ | ✓ | +| **Linux 기반 하드웨어:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | +| **시뮬레이션:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | +| **Simulation:** ROS 2 with Gazebo | ✓ | | | 숙련된 Docker 사용자는 지속적 통합 시스템 [Docker Containers](../test_and_ci/docker.md)컨테이너로 빌드할 수 있습니다. diff --git a/ko/dev_setup/dev_env_linux_ubuntu.md b/ko/dev_setup/dev_env_linux_ubuntu.md index e775afe90af2d..682c0e4f92e47 100644 --- a/ko/dev_setup/dev_env_linux_ubuntu.md +++ b/ko/dev_setup/dev_env_linux_ubuntu.md @@ -167,7 +167,7 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/ko/dev_setup/dev_env_mac.md b/ko/dev_setup/dev_env_mac.md index 3ccbfb14eb722..ecdfb8dbf5f56 100644 --- a/ko/dev_setup/dev_env_mac.md +++ b/ko/dev_setup/dev_env_mac.md @@ -30,9 +30,9 @@ Homebrew 설치는 빠르고 쉽습니다: [설치 방법](https://brew.sh). ## 더 많은 열린 파일 활성화("LD: 너무 많은 열린 파일" 오류 처리) -`~/.zshenv` 파일을 생성하거나 추가하고(터미널에서 `open ~/.zshenv` 실행) 다음 줄을 추가합니다. +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Python 버전 시행 diff --git a/ko/dev_setup/dev_env_windows_vm.md b/ko/dev_setup/dev_env_windows_vm.md index 3307c05035d83..f51127b302805 100644 --- a/ko/dev_setup/dev_env_windows_vm.md +++ b/ko/dev_setup/dev_env_windows_vm.md @@ -6,18 +6,21 @@ Windows 개발자는 Linux를 게스트 운영 체제로 사용하는 가상 머신(VM)에서 PX4 툴체인을 실행할 수 있습니다. 가상 머신을 설정한 후, 가상 머신내의 PX4 설치 및 설정은 일반 Linux 환경에서의 설정과 동일합니다. +가상 머신을 사용하는 것은 펌웨어 구축 환경을 설정과 테스트가 매우 편리하지만, 사용자는 다음 사항에 유의하여야 합니다. + +1. 펌웨어 빌드는 Linux에서 빌드하는 것보다 조금 느립니다. +1. The JMAVSim simulation, frame rate be much slower than on native Linux. 경우에 따라서, 가상 머신 리소스 부족과 관련된 문제로 차량이 충돌할 수 있습니다. +1. Gazebo와 ROS는 설치할 수 있지만, 사용할 수 없을 정도로 느립니다. + :::tip 가상 머신에 가능한 한 많은 CPU 코어와 메모리 리소스를 할당합니다. ::: -가상 머신을 사용하는 것은 펌웨어 구축 환경을 설정과 테스트가 매우 편리하지만, 사용자는 다음 사항에 유의하여야 합니다. -1. 펌웨어 빌드는 Linux에서 빌드하는 것보다 조금 느립니다. -1. JMAVSim 프레임 속도는 기본 Linux보다 훨씬 느립니다. 경우에 따라서, 가상 머신 리소스 부족과 관련된 문제로 차량이 충돌할 수 있습니다. -1. Gazebo와 ROS는 설치할 수 있지만, 사용할 수 없을 정도로 느립니다. +시스템에서 PX4 실행을 위한 가상 머신을 설정하는 방법에는 여러 가지가 있습니다. 이 가이드는 VMWare 설정 방법을 설명합니다. There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). -## 사용 설명 +## VMWare Setup -시스템에서 PX4 실행을 위한 가상 머신을 설정하는 방법에는 여러 가지가 있습니다. 이 가이드는 VMWare 설정 방법을 설명합니다. VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. +VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. [VMWare 플레이어](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html)를 다운로드합니다. 1. 윈도우 시스템에 설치합니다. @@ -34,9 +37,48 @@ This option is required to properly run 3D simulation environments like jMAVSim 1. 마법사에서 실행 중인 가상 머신에 할당할 리소스를 선택합니다. 가상 머신에 최대한 많은 메모리와 CPU 코어를 할당하십시오. 1. 마법사가 종료시 새 가상 머신을 실행하고, 설정 지침에 따라 Ubuntu를 설치합니다. 모든 설정은 호스트 운영 체제에서 사용하기 위한 것이므로, 네트워크 공격의 위험을 증가시키지 않는 화면 보호기 및 로컬 워크스테이션 보안 기능을 비활성화할 수 있습니다. 1. 새 가상 머신이 부팅되면, 게스트 운영체제에 *VMWare 도구 드라이버 및 도구 확장*을 설치하여야 합니다. 이렇게 하면 다음과 같은 VM 사용의 성능과 유용성들이 향상됩니다. - * 크게 향상된 그래픽 성능 - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * 창 크기에 따른 게스트 디스플레이 해상도 조정 - * 호스트 시스템 클립보드 공유 - * 호스트 시스템 파일 공유 + - 크게 향상된 그래픽 성능 + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - 창 크기에 따른 게스트 디스플레이 해상도 조정 + - 호스트 시스템 클립보드 공유 + - 호스트 시스템 파일 공유 1. [Linux용 PX4 환경 설정](../dev_setup/dev_env_linux.md)을 계속 진행합니다. + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. +::: + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. + + :::note +The bootloader device only appears for a few seconds after connecting USB. +If it disappears before you can select it, disconnect and then reconnect USB. +::: + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/ko/dev_setup/fast-dds-installation.md b/ko/dev_setup/fast-dds-installation.md deleted file mode 100644 index f977f7a0a2b9f..0000000000000 --- a/ko/dev_setup/fast-dds-installation.md +++ /dev/null @@ -1,137 +0,0 @@ -# Fast DDS 설치 - -로고 [eProsima Fast DDS](https://github.com/eProsima/Fast-DDS)는 OMG(Object Management Group) DDS(Data Distribution Service) 사양 및 RTPS(Real Time Publish Subscribe) 프로토콜의 C++ 구현입니다. - -Fast DDS는 PX4 uORB 주제가 동일한 DDS 도메인에 참여하는 로봇 공학 및 시뮬레이터 도구를 포함한 오프보드 구성 요소와 공유될 수 있도록 하는 RTPS/DDS 인터페이스를 활성화합니다. 특히 Fast DDS는 Robot Operating System 2(ROS 2)의 기본 미들웨어 구현이며 PX4와 ROS2를 통합에 필수적입니다. - -이 항목에서는 PX4와 함께 사용하기 위한 Fast DDS를 설치 방법을 설명합니다. - -:::tip -Fast DDS는 PX4 Autopilot의 필수 구성 요소가 아니며, ROS 2와 같은 다른 Fast RTPS/DDS 시스템과 함께 PX4 Autopilot을 사용할 계획인 경우에만 설치 합니다. This means you just need to install *Fast-RTPS-Gen* and have your ROS 2 environment sourced (`source /opt/ros//setup.bash`) in order to be able to compile the `rtps` targets in the PX4-Autopilot repo. - -For *ROS2 Galactic and above*, one has to install the `rmw` implementation through `apt` using `apt install ros-galactic-rmw-fastrtps`, since the default middleware for Galactic and above is CycloneDDS and the FastDDS middleware doesn't come installed by default. -::: - -:::tip -Fast DDS is not an essential component of the PX4 Autopilot and should only be installed if you plan to interface the PX4 Autopilot with Fast RTPS/DDS participants. -ROS 2 nodes are an example of these, though Fast DDS middleware and C++ implementations are installed by default on ROS 2 Foxy and below, as mentioned above. -::: - -:::note -Fast DDS was previously named FastRTPS (the name was changed in version 2.0.0 as it now includes a full DDS implementation, rather than just the RTPS wire protocol). -::: - - -## 준비 사항 - -*eProsima Fast DDS* requires the following packages to work. - -또한 소스 생성기(Fast-RTPS-Gen)를 빌드하려면 [Gradle을 설치](https://gradle.org/install/)하여야 합니다. [sdkman](https://sdkman.io)을 통하여 Gradle을 설치하는 것이 좋습니다. -- **Ubuntu 18.04:** Fast RTPS 1.8.2(또는 그 이상) 및 Fast-RTPS-Gen 1.0.4(이후는 아님!) -- **Ubuntu 20.04:** Fast DDS 2.0.0(또는 그 이상) 및 Fast-RTPS-Gen 1.0.4(이후는 아님!) -::: - -:::tip -Remember (again) you only need to install Fast DDS if you are not using ROS 2 and just want to leverage non-ROS2 DDS networks and applications. If you have ROS 2 installed (and `rmw-fasrtps` as its default middleware), you can skip to [Fast-RTPS-Gen build and install](#fast-rtps-gen). -::: - -### Java - -Java is required to build and use eProsima's RTPS/DDS from IDL code generation tool - *Fast-RTPS-Gen*. [Java JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) is recommended, and it is installed through the setup scripts made available in [Ubuntu Development Environment](../dev_setup/dev_env_linux.md). - -### Foonathan 메모리 - -Linux에서는 다음 명령어들을 실행하십시오. - -```sh -git clone https://github.com/eProsima/foonathan_memory_vendor.git -cd foonathan_memory_vendor -mkdir build && cd build -cmake .. -cmake --build . --target install -``` - -이렇게 하면 보안 통신 지원과 함께 Fast DDS가 `/usr/local`에 설치됩니다. -::: - - -## 소스 코드로 설치하기 - -### Windows 7 32 비트와 64 비트 - -Windows를 사용하는 경우 *Visual Studio* 버전을 선택합니다. - -```sh -git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.2 ~/FastDDS-2.0.2 -cd ~/FastDDS-2.0.2 -mkdir build && cd build -``` - -*CMake*를 호출시, 다음 추가 인수를 사용할 수 있습니다. - -```sh -cmake -DTHIRDPARTY=ON -DSECURITY=ON .. -make -j$(nproc --all) -sudo make install -``` - -*Fast-RTPS-Gen*은 Fast RTPS(DDS) IDL 코드 생성기입니다. If you need to install to a custom location you can use: `-DCMAKE_INSTALL_PREFIX=`. - -#### Visual C ++ 2013 또는 2015 재배포 가능 패키지 - -그런 다음 Fast-RTPS-Gen 1.0.4를 설치합니다(이를 위해서는 Gradle이 필요합니다). - -- `-DCOMPILE_EXAMPLES=ON`: 예제 컴파일 -- `-DPERFORMANCE_TESTS=ON`: 성능 테스트 컴파일 - - -### Fast-RTPS (DDS) - -:::note -바이너리를 사용할 수 있지만, 바이너리가 필수 구성 요소 및 종속성과 함께 제공되지 않을 수 있으므로, 소스를 빌드하고 설치하는 것이 좋습니다. It should be installed after Fast RTPS (DDS) and made sure the `fastrtpsgen` application is in your `PATH`. You can check with `which fastrtpsgen`. - -Then clone Fast-RTPS-Gen 1.0.4: -``` -git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \ -&& cd ~/Fast-RTPS-Gen/gradle/wrapper -``` - -After that, modify the distribution version of gradle inside the gradle-wrapper.properties file to gradle-6.8.3 such that the distributionUrl file becomes as follows: - -``` -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip -``` -Now you should run the following commands: - -``` -cd ~/Fast-RTPS-Gen -./gradlew assemble && sudo env "PATH=$PATH" ./gradlew install -``` - -## 바이너리로 설치 - -:::note -Although the binaries are available, we recommend to build and install the code from source, given that the binaries may not come with required components and dependencies in place. -::: - -설치 프로그램을 실행하고 지침에 따라 메시지가 표시되면, 원하는 *Visual Studio* 버전과 아키텍처를 선택합니다. - -*eProsima Fast DDS*가 제대로 작동하려면, 다음과 같은 환경 변수 설정이 필요합니다. - -#### 컴파일 옵션 - -* `FASTRTPSGEN_DIR`: Root folder where *eProsima Fast-RTPS-Gen* is installed, usually set to `/usr/local`, which is the default installation directory. If the user sets a different install directory in the `gradle install` step, it must set this variable to that same directory as well. Otherwise, the code generation step, and consequently, the build of the `rtps` targets in PX4 will fail. - - -## 추가 정보 - -- [RTPS/DDS Interface: PX4-Fast RTPS(DDS) Bridge](../middleware/micrortps.md) -- [PX4-ROS 2 bridge](../ros/ros2_comm.md) - -- Additional installation information can be found in the official [*eProsima Fast DDS* documentation](https://fast-dds.docs.eprosima.com/en/latest/) (from which this topic is derived): - - 소스 코드로 설치하기 - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_windows.html) - - Installation from Binaries - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) diff --git a/ko/dronecan/README.md b/ko/dronecan/README.md index d77dbc80448d3..4de6625a61469 100644 --- a/ko/dronecan/README.md +++ b/ko/dronecan/README.md @@ -117,7 +117,7 @@ Upon boot the flight controller will automatically transfer the firmware onto th **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/ko/dronecan/ark_flow.md b/ko/dronecan/ark_flow.md index e46e71c1f217a..4af580485e0ed 100644 --- a/ko/dronecan/ark_flow.md +++ b/ko/dronecan/ark_flow.md @@ -85,7 +85,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/ko/dronecan/cuav_can_pmu.md b/ko/dronecan/cuav_can_pmu.md index 9c6a76e0a672f..a3f4b4befe553 100644 --- a/ko/dronecan/cuav_can_pmu.md +++ b/ko/dronecan/cuav_can_pmu.md @@ -55,12 +55,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/ko/dronecan/holybro_kotleta.md b/ko/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/ko/dronecan/holybro_kotleta.md +++ b/ko/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/ko/dronecan/holybro_m8n_gps.md b/ko/dronecan/holybro_m8n_gps.md index a7ada35d18cd9..4dff0321e0ab3 100644 --- a/ko/dronecan/holybro_m8n_gps.md +++ b/ko/dronecan/holybro_m8n_gps.md @@ -11,7 +11,7 @@ The GPS module uses the [DroneCAN](README.md) protocol for communication. DroneC Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/ko/dronecan/sapog.md b/ko/dronecan/sapog.md index 92b0b3332947d..31d47a6fd550f 100644 --- a/ko/dronecan/sapog.md +++ b/ko/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 지원 ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -:::note -작성 당시 PX4는 UAVCAN v0.x (v1.0 아님)를 지원합니다. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -설정 관점에서 UAVCAN ESC의 유일한 차이점은 모터 순서와 방향을 구성하는 커넥터와 소프트웨어가 다를 수 있다는 것입니다. -- [Sapog](https://github.com/PX4/sapog#px4-sapog) 펌웨어; 전기 무인 기체의 추진 시스템에 사용하도록 설계된 고급 오픈 소스 센서리스 PMSM/BLDC 모터 컨트롤러 펌웨어입니다. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC 프로젝트 ESC](https://vesc-project.com/) ([Benjamin Vedder의 블로그](http://vedder.se) - 프로젝트 소유자 참조) -- [OlliW의 UC4H ESC - 액추에이터 노드](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- 그 외 다수가 [여기에 기술](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko)되어 있습니다. - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## 구매 - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Sapog 기반 ESC: -- [Zubax Sadulli 통합 드라이브](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## 배선 - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 설정 - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. 배터리에서 기체에 전원을 공급하고 (비행 콘트롤러뿐만 아니라 전체 기체에 전원을 공급하여야 함) *QGroundControl*을 연결합니다. -1. **기체 설정 > 매개 변수** 화면으로 이동합니다. :::note [매개변수](../advanced_config/parameters.md)에서 매개변수를 검색/설정 방법을 설명합니다. -::: -1. [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE)을 *센서 및 모터* (3) 값으로 설정후, 비행 콘트롤러를 재부팅합니다. 이렇게 하면 [다음 섹션](#esc-setup)에 설명대로 모터(ESC)의 자동 열거가 가능합니다. -1. (선택 사항) [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT)를 1로 설정하여 시스템이 준비된 동안 모터가 항상 최소한 유휴 스로틀에서 실행되도록 합니다. :::note -일부 시스템은이 동작의 장점을 사용하지 못합니다 (예: 글라이더 드론). -::: - - -## ESC 설정 - -PX4에서 UAVCAN ESC를 사용하려면 UAVCAN 드라이버를 활성화하여야 합니다. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -:::note ESC -색인과 방향은 기체 유형에 대한 [기체 정의서](../airframes/airframe_reference.md)와 일치/매핑되어야 합니다. 0-7의 ESC 인덱스는 MAIN 1-8에 매핑되고, ESC 인덱스 8-15는 AUX 1-8에 매핑됩니다. - - -### QGroundControl을 사용한 Sapog ESC 열거 - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. 배터리로 기체에 전원을 공급하고 *QGroundControl*에 연결합니다. -1. **기체 설정 > QGC 전력** 화면으로 이동합니다. -1. 아래 스크린 샷과 같이 **Start Assignment** 버튼을 눌러서, ESC 자동 열거 프로세스를 시작합니다. - - ![QGC-UAVCAN ESC 자동 열거](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - 비행 컨트롤러가 ESC 열거 모드에 진입한 소리가 들립니다. -1. 첫 번째 모터에서 시작하여 마지막 모터로 마무리하면서 각 모터를 올바른 회전 방향 ([Airframe Reference](../airframes/airframe_reference.md)에 지정된대로)으로 수동으로 돌립니다. 모터를 돌릴 때마다 확인음이 들려야합니다. - - :::note -ESC가 자동으로 방향을 학습하고 기억하므로 각 모터를 올바른 방향으로 돌리십시오 (즉, 정상 작동 중에 시계 방향으로 회전하는 모터도 열거 중에 시계 방향으로 돌려야 함). -::: - -1. 마지막 모터가 열거된 후에는 열거 절차가 완료되었음을 알리는 확인 소리가 변경되어야합니다. -1. PX4와 Sapog ESC를 재부팅하여 새 열거 ID를 적용합니다. - -ESC를 열거하려면: - -@다음 비디오는 프로세스를 보여줍니다. - -### Sapog를 사용한 수동 ESC 열거 - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -:::tip -수동 열거보다는 위에 표시된 자동화된 [Sapog ESC 열거](#sapog-esc-enumeration-using-qgroundcontrol)를 권장합니다 (더 쉽고 안전하기 때문입니다). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -[UAVCAN GUI 도구](https://uavcan.org/GUI_Tool/Overview/)를 사용하여 ESC 색인과 방향을 수동으로 설정할 수 있습니다. 이렇게하면 열거된 각 ESC에 대하여, 다음 Sapog 설정 매개변수가 할당됩니다. - -### Myxa ESC 설정 - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -Myxa [Telega 기반 ESC](https://zubax.com/products/telega)에 대한 모터 열거는 일반적으로 [Kucher 도구](https://files.zubax.com/products/com.zubax.kucher/) (또는 덜 "GUI 친화적"인 [UAVCAN GUI 도구](https://uavcan.org/GUI_Tool/Overview/))를 사용합니다. - - -### VESC ESC 설정 - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| 매개변수 | 옵션 | -| ----------------------- | ---------------------- | -| 사용할 앱 | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -[VESC ESC](https://vesc-project.com/)의 경우 모터 열거에 선호되는 도구는 [VESC 도구](https://vesc-project.com/vesc_tool)입니다. VESC 도구에서 설정하는 일반 모터 설정 외에도 앱 구성을 올바르게 설정하여야 합니다. 권장되는 앱 설정은 다음과 같습니다. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## 문제 해결 - -#### 시동시 모터가 회전하지 않음 - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN 장치가 노드 ID를 얻지 못함 / 펌웨어 업데이트 실패 - -PX4 펌웨어 암이 회전하지만 모터가 회전을 시작하지 않는 경우, UAVCAN ESC를 사용하려면 매개 변수 `UAVCAN_ENABLE=3`을 확인하십시오. 추력이 증가하기 전에 모터가 회전을 시작하지 않으면 `UAVCAN_ESC_IDLT=1`을 확인하십시오. - - -## 추가 정보 - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 설명서](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [PX4와 함께 Sapog 기반 ESC 사용](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/ko/uavcan/node_firmware.md b/ko/uavcan/node_firmware.md deleted file mode 100644 index c5a7eceed32c9..0000000000000 --- a/ko/uavcan/node_firmware.md +++ /dev/null @@ -1,58 +0,0 @@ -# UAVCAN 펌웨어 업그레이드 - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -:::warning -UAVCAN 장치는 일반적으로 적절한 펌웨어가 사전 설치된 상태로 판매됩니다. -이러한 지침은 UAVCAN 장치를 개발할 때 주로 필요합니다. -::: - -## Vectorcontrol ESC 코드 베이스 (Pixhawk ESC 1.6과 S2740VC) - -ESC 코드를 다운로드합니다: - -UAVCAN로 펌웨어를 업데이트하기 전에, Pixhawk ESC 1.6은 UAVCAN 부트로더를 플래시하여야 합니다. 부트로더를 빌드하가 위하여, 다음 명령어를 실행하십시오. - -빌드 후 부트로더 이미지는 `firmware/px4esc_1_6-bootloader.bin`에 있으며 OpenOCD 구성은 `openocd_px4esc_1_6.cfg`에 있습니다. [이 지침](../uavcan/bootloader_installation.md)에 따라 ESC에 부트로더를 설치합니다. -::: - -## Sapog 코드 베이스 (Pixhawk ESC 1.4와 Zubax Orel 20) - -### UAVCAN 부트로더 플래싱 - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### 메인 바이너리 컴파일 - -Sapog 코드 베이스를 다운로드하십시오: - -### UAVCAN 부트로더 플래싱 - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### 메인 바이너리 컴파일 - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -GCC의 일부 최신 버전은 연결하는 동안 segfaults로 이어집니다. 이 문서 작성시에는 버전 4.9는 작동하였습니다. - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -펌웨어 빌드 및 플래시 방법은 [프로젝트 페이지](https://github.com/Zubax/zubax_gnss)를 참조하세요. Zubax GNSS는 UAVCAN 지원 부트로더와 함께 제공되므로, 펌웨어는 아래 설명된 대로 UAVCAN을 통해 균일한 방식으로 업데이트할 수 있습니다. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -UAVCAN 노드 파일 이름은 제조업체에 관계없이 Pixhawk가 네트워크의 모든 UAVCAN 장치를 업데이트를 위한 명명 규칙을 따릅니다. 따라서 위 단계에서 생성된 펌웨어 파일은 장치를 업데이트하려면 SD 카드 또는 PX4 ROMFS의 올바른 위치에 복사해야 합니다. diff --git a/ko/uavcan/notes.md b/ko/uavcan/notes.md deleted file mode 100644 index 816320531a230..0000000000000 --- a/ko/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# 다양한 참고 사항 - -UAVCAN을 설정하거나 다룰 때 문제를 해결하는 요령과 꼼수를 모아둔 문서입니다. - -### 시동을 걸었으나 모터가 회전하지 않음 - -PX4 펌웨어에서 시동을 걸었는데 모터 회전을 시작하지 않으면, **UAVCAN\_ENABLE** 매개변수 설정을 확인하십시오. 전동 변속기를 UAVCAN 기반 출력으로 사용하려면 3 값을 설정해야합니다. 게다가, 추진력을 올렸음에도 불구, 모터가 회전하지 않는 경우 **UAVCAN\_ESC\_IDLT** 매개변수를 찾아 1로 설정했는지 확인하십시오. - -### Zubax Babel로 디버깅하기 - -가장 우수한 UAVCAN 전송 디버깅 도구는 [Zubax Babel](https://zubax.com/products/babel)에 GUI 도구를 붙인 형태의 디버거입니다. 픽스호크 하드웨어와는 별개로 노드를 시험하거나 UAVCAN 기능을 켠 ESC를 따로 직접 제어하려는 용도로 사용할 수 있습니다. - - -### UAVCAN 장치에서 최신 노드 ID/FW 정보를 가져오지 못함 - -PX4는 UAVCAN 노드 할당을 하려면 SD 카드가 필요하며 펌웨어 업그레이드가 필요합니다(두 동작 모두 부팅하는 동안 진행함). SD 카드가 있는지 (동작하는지) 확인하고 다시 부팅하십시오. - diff --git a/ko/uavcan/pomegranate_systems_pm.md b/ko/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 7e86244a6a037..0000000000000 --- a/ko/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate 시스템 전원 모듈 - -![모듈 이미지](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -고해상도 전류 통합 기능과 전력 모니터링 기능이 있는 5V/2A 전원, 단일 UAVCAN v0 CANbus 인터페이스와 RGB 상태 LED가 있는 디지털 전원 모듈. - -자세한 설정과 문제 해결 정보는 [제조업체 홈 페이지](https://p-systems.io/product/power_module)를 참고하십시오. - -## 사양 - - - **입력 전압:** 6-26V \(2-6S\) - - **최대 연속 전류:** - - **벤치탑:** 40A - - **강제 냉각:** 100A - - **최대 5V 출력 전류:** 2A - - **전압 해상도:** 0.04 ΔV - - **전류 해상도:** - - **기본/배터리 버스:** 0.02 ΔA - - **5V 버스:** 0.001 ΔA - - **CANbus 종단:** 전자 (기본값) - - **MCU:** STM32 F302K8U - - **펨웨어:** [오픈 소스](https://bitbucket.org/p-systems/firmware/) - - **전기 인터페이스:** - - **전원:** 솔더 패드 또는 XT60PW (직각, 보드 장착 커넥터) - - **CANbus** 듀얼 JST GH-4 (표준 UAVCAN 마이크로 커넥터) - - **I2C / 직렬:** JST GH-5 - - **5V 출력:** 솔더 패드 또는 CANbus / I2C 커넥터 - - **장치 질량:** - - **커넥터 제외:** 9g - - **XT60PW 커넥터 포함:** 16g - - - ![크기](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## 설정 - - 1. [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) 매개변수를 `2` (센서 자동 구성) 또는 `3`으로 설정하여 UAVCAN을 활성화합니다. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * 배터리 용량 (mAh): `battery_capacity_mAh` - * *full* 일 때 배터리 전압: `battery_full_V` - * *비어있을 때* 배터리 전압 : `battery_empty_V` - * 현재 통합 켜기: `enable_current_track` - * (선택 사항) CANbus 종단 저항 끄기: `enable_can_term` - -**예:** `5000mAh` 용량의 `3S` LiPo에 연결된 UAVCAN 노드 ID가 `125` 인 전원 모듈을 아래의 명령으로 설정할 수 있습니다. - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -전체 매개변수 목록은 [장치 설정 페이지](https://p-systems.io/product/power_module/configuration)를 참고하십시오. diff --git a/ru/README.md b/ru/README.md index f32b180b031bc..bd8defe4cd025 100644 --- a/ru/README.md +++ b/ru/README.md @@ -101,8 +101,8 @@ The *Dronecode Calendar* shows important community events for platform users and * [Australia – Melbourne/Sydney/Hobart](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) :::tip +The calendar default timezone is Central European Time (CET). -Calendar defaults to CET. ::: diff --git a/ru/SUMMARY.md b/ru/SUMMARY.md index cfb5f8d067299..b0b20998f5414 100644 --- a/ru/SUMMARY.md +++ b/ru/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C Wiring Quickstart](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X Wiring Quickstart](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 Wiring Quickstart](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal Wiring Quickstart](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md) * [Cube Wiring Quickstart](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [Manufacturer-Supported Autopilots](flight_controller/autopilot_manufacturer_supported.md) * [AirMind MindPX](flight_controller/mindpx.md) * [AirMind MindRacer](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md) * [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [Holybro Kakute F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [Experimental Autopilots](flight_controller/autopilot_experimental.md) * [BeagleBone Blue](flight_controller/beaglebone_blue.md) - * [Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) - * [Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Raspberry Pi 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) * [Raspberry Pi 2/3/4 PilotPi](flight_controller/raspberry_pi_pilotpi.md) * [PilotPi with Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) * [PilotPi with Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [Discontinued Autopilots/Vehicles](flight_controller/autopilot_discontinued.md) + * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S Brushless Whoop](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [CUAV v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [Snapdragon Flight](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [Telemetry Radios](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [FrSky Telemetry](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [CUAV HV pm](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [Optical Flow](sensor/optical_flow.md) * [ARK Flow](dronecan/ark_flow.md) - * [PX4FLOW](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [ESCs & Motors](peripherals/esc_motors.md) * [PWM ESCs and Servos](peripherals/pwm_escs_and_servo.md) * [DShot ESCs](peripherals/dshot.md) * [OneShot ESCs and Servos](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [Camera](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [Companion Computers](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [Companion Computer Peripherals](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [Development](development/development.md) @@ -333,6 +339,7 @@ * [Ubuntu Setup](dev_setup/dev_env_linux_ubuntu.md) * [Windows Setup](dev_setup/dev_env_windows_wsl.md) * [Visual Studio Code IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [Building the Code](dev_setup/building_px4.md) * [Writing your First Application](modules/hello_sky.md) * [Application/Module Template](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim Simulation](simulation/jmavsim.md) * [Multi-Vehicle Sim with JMAVSim](simulation/multi_vehicle_jmavsim.md) * [Gazebo Simulation](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB Message Reference](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink Messaging](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [XRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/xrce_dds.md) * [Modules & Commands](modules/modules_main.md) + * [Autotune](modules/modules_autotune.md) * [Commands](modules/modules_command.md) * [Communication](modules/modules_communication.md) * [Controllers](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [Baro](modules/modules_driver_baro.md) * [Distance Sensor](modules/modules_driver_distance_sensor.md) * [IMU](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [Magnetometer](modules/modules_driver_magnetometer.md) + * [Optical Flow](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [Estimators](modules/modules_estimator.md) * [Simulations](modules/modules_simulation.md) * [System](modules/modules_system.md) @@ -646,14 +660,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 User Guide](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [ROS (1) via ROS 2 Bridge](ros/ros1_via_ros2.md) - * [ROS (1) with MAVROS](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS Installation Guide](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS Sending Custom Messages](ros/mavros_custom_messages.md) - * [ROS/MAVROS with Gazebo Simulation](simulation/ros_interface.md) - * [Gazebo OctoMap Models with ROS (1)](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [ROS/MAVROS Installation on RPi](ros/raspberrypi_installation.md) * [External Position Estimation (Vision/Motion based)](ros/external_position_estimation.md) * [DroneKit](robotics/dronekit.md) diff --git a/ru/advanced/computer_vision.md b/ru/advanced/computer_vision.md index cc7deb235c9aa..e87c367fa1c4c 100644 --- a/ru/advanced/computer_vision.md +++ b/ru/advanced/computer_vision.md @@ -47,8 +47,8 @@ For information about configuring VIO on PX4 see: [Optical Flow](../sensor/optical_flow.md) provides 2D velocity estimation (using a downward facing camera and a downward facing distance sensor). For information about optical flow see: + - [Optical Flow](../sensor/optical_flow.md) - - [PX4Flow Smart Camera](../sensor/px4flow.md) - [EKF > Optical Flow](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## External Resources diff --git a/ru/advanced/gimbal_control.md b/ru/advanced/gimbal_control.md index 6a941cfd8f460..a7effd11074ab 100644 --- a/ru/advanced/gimbal_control.md +++ b/ru/advanced/gimbal_control.md @@ -68,11 +68,11 @@ To run it, use: make px4_sitl gazebo-classic_typhoon_h480 ``` -To just test the mount driver on other models or simulators, make sure the driver runs (using `vmount start`), then configure its parameters. +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## Testing -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. The following describes testing in SITL, but the commands also work on a real device. +The driver provides a simple test command. The following describes testing in SITL, but the commands also work on a real device. Start the simulation with (no parameter needs to be changed for that): @@ -83,7 +83,7 @@ make px4_sitl gazebo-classic_typhoon_h480 Make sure it's armed, eg. with `commander takeoff`, then use the following command to control the gimbal (for example): ``` -vmount test yaw 30 +gimbal test yaw 30 ``` Note that the simulated gimbal stabilizes itself, so if you send MAVLink commands, set the `stabilize` flags to `false`. diff --git a/ru/advanced/package_delivery.md b/ru/advanced/package_delivery.md index 4f0813e9189b6..45ad8c56c4fc0 100644 --- a/ru/advanced/package_delivery.md +++ b/ru/advanced/package_delivery.md @@ -9,7 +9,7 @@ Currently only [Grippers](../peripherals/gripper.md) can be used for package del ::: :::note -The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -57,4 +57,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/ru/advanced_config/bootloader_update.md b/ru/advanced_config/bootloader_update.md index 8dc1b27fac013..181ae9fa6fafb 100644 --- a/ru/advanced_config/bootloader_update.md +++ b/ru/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # Bootloader Update -The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO) and [PX4FLOW](../sensor/px4flow.md). +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). This topic explains several methods for updating the Pixhawk bootloader. @@ -8,7 +8,7 @@ This topic explains several methods for updating the Pixhawk bootloader. Hardware usually comes with an appropriate bootloader version pre-installed. A case where you may need to update is newer Pixhawk boards that install FMUv2 firmware: [Firmware > FMUv2 Bootloader Update](../config/firmware.md#bootloader). ::: -## Building the new PX4 bootloader yourself +## Building the new PX4 Bootloader Yourself Boards starting with FMUv6X (STM32H7) use the in-tree PX4 bootloader. Older boards use the bootloader from the legacy [PX4 bootloader](https://github.com/PX4/Bootloader) repository. Please refer to the instructions in the README to learn how to use it. diff --git a/ru/advanced_config/bootloader_update_from_betaflight.md b/ru/advanced_config/bootloader_update_from_betaflight.md index 71b898dc76c9e..402e4595f27b3 100644 --- a/ru/advanced_config/bootloader_update_from_betaflight.md +++ b/ru/advanced_config/bootloader_update_from_betaflight.md @@ -4,7 +4,8 @@ This page documents how to flash the PX4 bootloader onto boards preflashed with There are two options for flashing the bootloader: via *Betaflight Configurator* (easier), or building from source. - + + ### Bootloader Update using Betaflight Configurator To install the PX4 bootloader using the *Betaflight Configurator*: @@ -21,7 +22,38 @@ You should now be able to install PX4 firmware on the board. #### Download Bootloader Source -Download and build the [Bootloader](https://github.com/PX4/Bootloader) via: +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -45,6 +77,18 @@ Both methods require the board to be in DFU mode. To enter DFU mode, hold the bo ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. Once completed, enter DFU mode again to complete the regular flashing. +::: + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/ru/advanced_config/esc_calibration.md b/ru/advanced_config/esc_calibration.md index 013014ecd06f2..a13bcf362fcea 100644 --- a/ru/advanced_config/esc_calibration.md +++ b/ru/advanced_config/esc_calibration.md @@ -42,4 +42,6 @@ Never attempt ESC calibration with props on. :::note -High-quality controllers come with a factory calibration. In *theory* this means that they can be configured by just setting the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) parameters to the values provided in the ESC technical specification. In practice the input range may differ even on high quality controllers, which is why calibration is recommended. ::: +High-quality controllers come with a factory calibration. In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/ru/advanced_config/ethernet_setup.md b/ru/advanced_config/ethernet_setup.md index 5fff3662c3a46..a70031845c455 100644 --- a/ru/advanced_config/ethernet_setup.md +++ b/ru/advanced_config/ethernet_setup.md @@ -14,7 +14,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -77,7 +77,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Once the network configuration has been set you can disconnect the USB cable. 1. Reboot the flight controller to apply the settings. -Note that the above setup gives the flight controller an address on the Ethernet network. You also need to \[configure the Ethernet port\]((#px4-mavlink-serial-port-configuration) to use MAVLink. +Note that the above setup gives the flight controller an address on the Ethernet network. You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -187,55 +187,44 @@ can connect to the PX4 on port `14550` if you don't modify the PX4 Ethernet port ::: -## ROS2 Setup Example - -:::warning -**This section is out of date!** It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. -::: +## ROS 2 Setup Example +:::note Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. +- You have a supported autopilot hardware running PX4 firmware that includes [XRCE-DDS](../middleware/xrce_dds.md) middleware. Note that PX4 v1.14 and later include the required [microdds-client](../modules/modules_system.md#microdds-client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. - You have followed the Ethernet network and port setup as discussed at the top of this page. +::: -In this example it is assumed that you have followed the example to set your IP addresses. +To set up ROS 2: + +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the micro XRCE-DDS client on PX4](../middleware/xrce_dds.md#starting-the-client), either manually or by customizing the system startup script. Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the XRCE-DDS agent on the companion computer](../middleware/xrce_dds.md#starting-the-agent). For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. Note that the remote IP here is your companion computer IP. This by default starts the micrortps_client connected to UDP ports 2019 and 2020 To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) - ``` - micrortps_client start -t UDP -i - ``` - An output like below is expected in the console: ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! + MicroXRCEAgent udp4 -p 8888 ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/ru/advanced_config/imu_factory_calibration.md b/ru/advanced_config/imu_factory_calibration.md index 6ce8addcfc443..636d413b0a092 100644 --- a/ru/advanced_config/imu_factory_calibration.md +++ b/ru/advanced_config/imu_factory_calibration.md @@ -15,7 +15,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/ru/advanced_config/parameter_reference.md b/ru/advanced_config/parameter_reference.md index 2de1ac3ee792a..6e3147c356e69 100644 --- a/ru/advanced_config/parameter_reference.md +++ b/ru/advanced_config/parameter_reference.md @@ -14739,12 +14739,12 @@ table {
          - - + @@ -14795,7 +14795,7 @@ table { - + @@ -14824,14 +14824,14 @@ table { - + - + @@ -14862,6 +14862,13 @@ table { + + + + + + + @@ -15243,7 +15250,7 @@ table { - - + - + @@ -15313,6 +15320,13 @@ table { + + + + + + + - + @@ -15485,14 +15499,14 @@ table { - + - + + + + + + + + + + + + + + @@ -16577,7 +16605,7 @@ table { - + @@ -16929,11 +16957,13 @@ table {
        • 5: Femtomes
        • -
        • 6: NMEA (generic)
        • +
        • 6: NMEA (generic)
        • + +
        • 7: Septentrio (SBF)
        • Reboot required: true

          -
          + @@ -17003,7 +17033,7 @@ table {

          Reboot required: true

          -
          + @@ -17021,6 +17051,14 @@ table { + + + + + + + - @@ -17319,9 +17357,16 @@ table { + + + + + + + - + @@ -20626,14 +20671,14 @@ table { - + - + @@ -20775,75 +20820,6 @@ table {
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m
          EKF2_AID_MASK (INT32)Integer bitmask controlling data fusion and aiding methods

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • -
          • 1: use optical flow
          • +
          Will be removed after v1.14 release

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • +
          • 1: unused
          • 2: unused
          • 3: unused
          • 4: unused
          • -
          • 5: multi-rotor drag fusion
          • +
          • 5: unused
          • 6: unused
          • 7: unused
          • 8: unused
          • @@ -14765,7 +14765,7 @@ table {
          EKF2_ARSP_THR (FLOAT)Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

          Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

          [0.0, ?] 0.0 m/s
          EKF2_BARO_CTRL (INT32)Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

          Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

          Enabled (1)
          EKF2_BCOEF_X (FLOAT)X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^2
          EKF2_BCOEF_Y (FLOAT)Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^27
          EKF2_DRAG_CTRL (INT32)Multirotor wind estimation selection

          Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

          Disabled (0)
          EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

          Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

          EKF2_MAG_TYPE (INT32)Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

          Values:
            +
          Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

          Values:
          • 0: Automatic
          • 1: Magnetic heading
          • @@ -15266,12 +15273,12 @@ table {
          EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] 0.250.20 rad/s
          EKF2_MCOEF (FLOAT)Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s5000000 us
          EKF2_OF_CTRL (INT32)Optical flow aiding

          Comment: Enable optical flow fusion.

          Disabled (0)
          EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15471,7 +15485,7 @@ table {
          EKF2_RNG_A_HMAX (FLOAT)Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m
          EKF2_RNG_A_VMAX (FLOAT)Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s
          EKF2_RNG_CTRL (INT32)Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
            +
          Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
          • 0: Disable range fusion
          • 1: Enabled (conditional mode)
          • @@ -16496,6 +16510,20 @@ table {
          -30.0 deg
          FW_THR_ASPD_MAX (FLOAT)Throttle at max airspeed

          Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

          [0, 1] (0.01)0.
          FW_THR_ASPD_MIN (FLOAT)Throttle at min airspeed

          Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

          [0, 1] (0.01)0.
          FW_THR_IDLE (FLOAT) Idle throttle

          Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

          FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

          Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

          [0.0, 2.0] (0.05)0.30.1
          [0, 5] [0, 7] 1
          [0, 5] [0, 6] 1
          0
          GPS_PITCH_OFFSET (FLOAT)Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          +
          [-90, 90] 0.deg
          GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17094,7 +17132,7 @@ table {
          GPS_YAW_OFFSET (FLOAT)Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          +
          Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0.Disabled (0)
          CA_HELI_YAW_CP_O (FLOAT)Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1)0.0
          CA_HELI_YAW_CP_S (FLOAT)Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000rpm
          MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500rpm
          MODAL_IO_SDIR1 (INT32)
          -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NameDescription[Min, Max] (Incr.)DefaultUnits
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          Values:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20868,15 +20844,8 @@ table { - - - - - - - - - + + @@ -21031,19 +21000,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21236,20 +21212,6 @@ table { - - - - - - - - - - - - - - @@ -21534,6 +21496,13 @@ table { + + + + + + + + + + + + + + @@ -22164,7 +22140,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32334,6 +32310,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          Values:
            @@ -22123,6 +22092,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32696,6 +32680,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameDescription[Min, Max] (Incr.)DefaultUnits
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          Values:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32741,9 +32802,9 @@ table { - + - + @@ -32753,13 +32814,6 @@ table { - - - - - - - @@ -32830,14 +32884,14 @@ table { - + - + @@ -32865,14 +32919,14 @@ table { - + - + @@ -32909,7 +32963,7 @@ table { - + diff --git a/ru/advanced_config/tuning_the_ecl_ekf.md b/ru/advanced_config/tuning_the_ecl_ekf.md index aa01367c002ea..a7e9f13b595a3 100644 --- a/ru/advanced_config/tuning_the_ecl_ekf.md +++ b/ru/advanced_config/tuning_the_ecl_ekf.md @@ -324,7 +324,7 @@ Fixed wing platforms can take advantage of an assumed sideslip observation of ze ### Multicopter Wind Estimation using Drag Specific Forces -Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This is enabled by setting bit position 5 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter to `true`. +Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). The relationship between airspeed and specific force (IMU accelerometer measurements) along the X and Y body axes is controlled by the [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X), [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) and [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) parameters which set the ballistic coefficients for flight in the X and Y directions, and the momentum drag produced by the propellers, respectively. The amount of specific force observation noise is set by the [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) parameter. @@ -340,33 +340,21 @@ A good tuning is obtained as follows: [Optical flow](../sensor/optical_flow.md) data will be used if the following conditions are met: * Valid range finder data is available. -* Bit position 1 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * The quality metric returned by the flow sensor is greater than the minimum requirement set by the [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) parameter. ### External Vision System -Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* External vision system horizontal position data will be used if bit position 3 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. For more details about the configuration of height sources, [click here](#height). -* External vision system velocity data will be used if bit position 8 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system orientation data will be used for yaw estimation if bit position 4 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision reference frame offset will be estimated and used to rotate the external vision system data if bit position 6 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -Either bit 4 (`EV_YAW`) or bit 6 (`EV_ROTATE`) should be set to true, but not both together. Following [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) values are supported when using with an external vision system. +- `0`: Horizontal position data +- `1`: Vertical position data. Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -| EKF_AID_MASK value | Set bits | Description | -| -------------------- | ----------------------------- | ------------------------------------ | -| 320 | EV_VEL + ROTATE_EV | Heading w.r.t. North | -| 24 | EV_POS + EV_YAW | Heading w.r.t. external vision frame | -| 72 | EV_POS + ROTATE_EV | Heading w.r.t. North | -| 272 | EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. North | - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. The EKF considers uncertainty in the visual pose estimate. This uncertainty information can be sent via the covariance fields in the MAVLink [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) message or it can be set through the parameters [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE), [EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) and [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE). You can choose the source of the uncertainty with [EKF2_EV_NOISE_MD](../advanced_config/parameter_reference.md#EKF2_EV_NOISE_MD). @@ -399,7 +387,7 @@ For this reason, no claims for accuracy relative to the legacy combination of `a EKF outputs, states and status data are published to a number of uORB topics which are logged to the SD card during flight. The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/master/Tools/ecl_ekf/process_logdata_ekf.py). To use this script file, cd to the `Tools/ecl_ekf` directory and enter `python process_logdata_ekf.py `. This saves performance metadata in a csv file named **.mdat.csv** and plots in a pdf file named `.pdf`. @@ -407,14 +395,14 @@ Multiple log files in a directory can be analysed using the [batch\_process\_log ### Output Data -* Attitude output data is found in the [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_attitude.msg) message. -* Local position output data is found in the [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_local_position.msg) message. -* Global \(WGS-84\) output data is found in the [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/master/msg/vehicle_global_position.msg) message. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### States -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). The index map for states\[32\] is as follows: +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for states\[32\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\) @@ -428,7 +416,7 @@ Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilo ### State Variances -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). The index map for covariances\[28\] is as follows: +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for covariances\[28\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\)^2 @@ -442,10 +430,10 @@ Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Aut ### Observation Innovations & Innovation Variances -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg). The messages all have the same field names/types (but different units). +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). The messages all have the same field names/types (but different units). :::note -The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -505,7 +493,7 @@ The index map is as follows: ### EKF Errors -The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### Observation Errors @@ -516,7 +504,7 @@ There are two categories of observation faults: Both of these can result in observation data being rejected for long enough to cause the EKF to attempt a reset of the states using the sensor observations. All observations have a statistical confidence checks applied to the innovations. The number of standard deviations for the check are controlled by the `EKF2_*_GATE` parameter for each observation type. -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio`: ratio of the largest magnetometer innovation component to the innovation test limit * `vel_test_ratio`: ratio of the largest velocity innovation component to the innovation test limit @@ -525,11 +513,11 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio`: ratio of the true airspeed innovation to the innovation test limit * `hagl_test_ratio`: ratio of the height above ground innovation to the innovation test limit -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS Quality Checks -The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg). +The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF Numerical Errors @@ -540,7 +528,7 @@ To prevent this, every covariance and state update step contains the following e * If the innovation variance is less than the observation variance (this requires a negative state variance which is impossible) or the covariance update will produce a negative variance for any of the states, then: * The state and covariance update is skipped * The corresponding rows and columns in the covariance matrix are reset - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * State variances (diagonals in the covariance matrix) are constrained to be non-negative. * An upper limit is applied to state variances. * Symmetry is forced on the covariance matrix. @@ -551,8 +539,8 @@ After re-tuning the filter, particularly re-tuning that involve reducing the noi The most common cause of EKF height diverging away from GPS and altimeter measurements during flight is clipping and/or aliasing of the IMU measurements caused by vibration. If this is occurring, then the following signs should be evident in the data -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg).vel\_pos\_innov\[2\] and [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_innovations.msg).vel\_pos\_innov\[5\] will both have the same sign. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).hgt\_test\_ratio will be greater than 1.0 +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 The recommended first step is to ensure that the autopilot is isolated from the airframe using an effective isolation mounting system. An isolation mount has 6 degrees of freedom, and therefore 6 resonant frequencies. As a general rule, the 6 resonant frequencies of the autopilot on the isolation mount should be above 25Hz to avoid interaction with the autopilot dynamics and below the frequency of the motors. @@ -585,16 +573,16 @@ The most common causes of position divergence are: Determining which of these is the primary cause requires a methodical approach to analysis of the EKF log data: -* Plot the velocity innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vel\_test\_ratio -* Plot the horizontal position innovation test ratio - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).pos\_test\_ratio -* Plot the height innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).hgt\_test\_ratio -* Plot the magnetometer innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).mag\_test\_ratio -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* Plot the IMU delta angle state estimates - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).states\[10\], states\[11\] and states\[12\] +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * Plot the EKF internal high frequency vibration metrics: - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] During normal operation, all the test ratios should remain below 0.5 with only occasional spikes above this as shown in the example below from a successful flight: @@ -628,7 +616,7 @@ Bad yaw alignment causes a velocity test ratio that increases rapidly when the v ### Determination of Poor GPS Accuracy -Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/master/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS glitch - test ratios](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/ru/assembly/cable_wiring.md b/ru/assembly/cable_wiring.md index 851ba30a9d770..caae58b5506df 100644 --- a/ru/assembly/cable_wiring.md +++ b/ru/assembly/cable_wiring.md @@ -3,7 +3,7 @@ Cables are a common source of [electromagnetic interference (EMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference), which can cause problems including flyways, "toilet bowling" and generally poor flight. These problems can be avoided by using appropriate cabling in the UAV. The following basic concepts should be kept in mind when designing drone cabling: -* High-Power and signal cables should be separated as much as is practical +* High-Power and signal cables should be separated as much as is practical. * Cable lengths should be the minimum needed to enable easy handling of wired components. The wire tension should be adequate to survive possible airframe deformations even in a crash landing (wires must not be the first thing to break). * Cable loops to reduce excess length should be avoided - use shorter lengths! * For digital signals you can decrease the baudrate to reduce radiated energy and increase the robustness of data transfer. This means that you may be able to use longer cables when high data rates are not needed. @@ -15,7 +15,7 @@ Signalling protocols have different characteristics, and therefore the cables us This topic provides specific guidance of cabling for different signalling protocols, along with the [colour coding](#cable-colour-coding) used by a number different drone hardware vendors. -### I²C cables +### I2C cables The [I2C bus](https://en.wikipedia.org/wiki/I%C2%B2C) is widely used for connecting sensors. Cable colors from several vendors are specified in following table. diff --git a/ru/assembly/mount_gps_compass.md b/ru/assembly/mount_gps_compass.md index 64711c417340b..fc3b946b88c11 100644 --- a/ru/assembly/mount_gps_compass.md +++ b/ru/assembly/mount_gps_compass.md @@ -8,9 +8,9 @@ The diagram below shows the heading marker on the Pixhawk 4 and compass. ## Compass Orientation -The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#orientation-definition). +The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. :::warning You must mount the compass in a supported orientation! diff --git a/ru/assembly/quick_start_cube.md b/ru/assembly/quick_start_cube.md index 330f2240db4e8..1ae8517c6db3e 100644 --- a/ru/assembly/quick_start_cube.md +++ b/ru/assembly/quick_start_cube.md @@ -163,7 +163,7 @@ Motors/servos are connected to the **MAIN** and **AUX** ports in the order speci This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/ru/assembly/quick_start_durandal.md b/ru/assembly/quick_start_durandal.md index 1ac722a7c9b65..83392b758e3f3 100644 --- a/ru/assembly/quick_start_durandal.md +++ b/ru/assembly/quick_start_durandal.md @@ -1,6 +1,6 @@ # Durandal Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the Holybro [Durandal](../flight_controller/durandal.md)® flight controller and connect its most important peripherals. @@ -57,7 +57,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -86,14 +86,10 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: - ### Pixhawk 4 Power Module (PM07) -The [Pixhawk 4 Power Module (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Power](../assembly/quick_start_pixhawk4.md#power) documentation. @@ -109,7 +105,7 @@ It has the following characteristics/limits: - 80mm XT60 connector wire (1) :::note -See also [PM07 Quick Start Guide](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro). +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### Battery Configuration @@ -201,7 +197,7 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Durandal Overview](../flight_controller/durandal.md) -- [Durandal Technical Data Sheet](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal Pinouts](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/px4_user_guide/raw/master/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal Schematics) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/master/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/ru/assembly/quick_start_holybro_pix32_v5.md b/ru/assembly/quick_start_holybro_pix32_v5.md index 22608e9b017b3..7a9d1e14f0b1f 100644 --- a/ru/assembly/quick_start_holybro_pix32_v5.md +++ b/ru/assembly/quick_start_holybro_pix32_v5.md @@ -1,6 +1,6 @@ # Pix32 v5 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® flight controller and connect its most important peripherals. @@ -9,7 +9,7 @@ This quick start guide shows how to power the [Holybro Pix32v5](../flight_contro ## Unboxing -Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html) (UBLOX NEO-M8N). +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). The content of the box with the *PM02 V3* power module and *Pixhawk 4 GPS/Compass* is shown below. The box also includes a pinout guide and power module instructions, and Base board (not shown on the schematic below). @@ -22,7 +22,7 @@ The image below shows how to connect the most important sensors and peripherals ![Pix32 v5 Wiring Overview](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -More information about available ports can be found [here](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf). +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## Mount and Orient Controller @@ -42,7 +42,7 @@ Do not use vibration-isolation foam to mount the controller (double sided tape i ## GPS + Compass + Buzzer + Safety Switch + LED -Pix32 v5 is designed to work well with the [Pixhawk 4 GPS module](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. ![Pix32 v5 with GPS](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -59,7 +59,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -87,9 +87,6 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: ### Battery Configuration @@ -155,7 +152,7 @@ The wiring and configuration of optional/less common components is covered withi ## Pinouts -[Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## Configuration @@ -168,8 +165,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pix32 v5 Overview](../flight_controller/holybro_pix32_v5.md) (Overview page) -- [Pix32 v5 Technical Data Sheet](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 Base Schematic Diagram](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 Base Schematic Diagram](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 Base Components Layout](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). diff --git a/ru/assembly/quick_start_pixhawk.md b/ru/assembly/quick_start_pixhawk.md index 922afcbcd6f72..5955fa54cde35 100644 --- a/ru/assembly/quick_start_pixhawk.md +++ b/ru/assembly/quick_start_pixhawk.md @@ -94,7 +94,7 @@ Telemetry radios may be used to communicate and control a vehicle in flight from The mappings between MAIN/AUX output ports and motor/servos for all supported air and ground frames are listed in the [Airframe Reference](../airframes/airframe_reference.md). -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/ru/assembly/quick_start_pixhawk4.md b/ru/assembly/quick_start_pixhawk4.md index c3929c2e8dd9e..29db8125989d4 100644 --- a/ru/assembly/quick_start_pixhawk4.md +++ b/ru/assembly/quick_start_pixhawk4.md @@ -1,6 +1,6 @@ # Pixhawk 4 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. ::: +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 4](../flight_controller/pixhawk4.md)® flight controller and connect its most important peripherals. @@ -146,7 +146,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/ru/assembly/quick_start_pixhawk4_mini.md b/ru/assembly/quick_start_pixhawk4_mini.md index 3374fca7f9ad4..1672b6c1e11a4 100644 --- a/ru/assembly/quick_start_pixhawk4_mini.md +++ b/ru/assembly/quick_start_pixhawk4_mini.md @@ -1,6 +1,6 @@ # *Pixhawk 4 Mini* Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [*Pixhawk® 4 Mini*](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. @@ -126,7 +126,7 @@ Motors/servos are connected to the **MAIN OUT** ports in the order specified for This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/ru/assembly/quick_start_pixhawk5x.md b/ru/assembly/quick_start_pixhawk5x.md index 4e19cc0ad2570..8b839f7434a42 100644 --- a/ru/assembly/quick_start_pixhawk5x.md +++ b/ru/assembly/quick_start_pixhawk5x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 5x Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk® 5X](../flight_controller/pixhawk5x.md) flight controller and connect its most important peripherals. @@ -35,7 +35,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk5X Standard Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -101,7 +101,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) @@ -121,7 +121,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: @@ -133,7 +133,7 @@ The wiring and configuration of optional/less common components is covered withi ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Configuration @@ -146,9 +146,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 Doc Overview page) -- [Pixhawk 5X Overview & Specification](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) -- [Pixhawk 5X Pinouts](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) -- [PM02D Power Module Manual](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (Holybro) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5X reference design pinout](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/ru/assembly/quick_start_pixhawk6c.md b/ru/assembly/quick_start_pixhawk6c.md index 1dd81a01d5695..0b273a91108fe 100644 --- a/ru/assembly/quick_start_pixhawk6c.md +++ b/ru/assembly/quick_start_pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -11,13 +11,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -34,7 +27,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -97,7 +90,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/ru/assembly/quick_start_pixhawk6x.md b/ru/assembly/quick_start_pixhawk6x.md index 55f80772bb098..f81e2dee9ae4f 100644 --- a/ru/assembly/quick_start_pixhawk6x.md +++ b/ru/assembly/quick_start_pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -40,7 +40,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/ru/can/README.md b/ru/can/README.md index deb8f145ec975..df0d9c89bb8b4 100644 --- a/ru/can/README.md +++ b/ru/can/README.md @@ -8,8 +8,7 @@ PX4 supports two software protocols for communicating with CAN devices: - [Cyphal](https://opencyphal.org): PX4 support is a "work in progress". Cyphal is a much newer protocol which allows more flexibility and configuration, especially on larger and more complex vehicles. It has not yet seen significant adoption. :::note -Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. -In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -18,9 +17,9 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). -Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -28,7 +27,7 @@ The following diagram shows an example of a CAN bus connecting a flight controll The diagram does not show any power wiring. Refer to your manufacturer instructions to confirm whether components require separate power or can be powered from the CAN bus itself. -For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -38,7 +37,7 @@ Other (non-Pixhawk compatible) devices may use different connectors. However, as ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. ## Firmware diff --git a/ru/companion_computer/README.md b/ru/companion_computer/README.md index b98ad351061b7..135a690fa2408 100644 --- a/ru/companion_computer/README.md +++ b/ru/companion_computer/README.md @@ -22,7 +22,7 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). @@ -45,8 +45,8 @@ The companion computer needs to run software that communicates with the flight c Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -61,7 +61,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. See [Ethernet Setup](../advanced_config/ethernet_setup.md) for instructions. @@ -76,5 +75,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/ru/companion_computer/companion_computer_peripherals.md b/ru/companion_computer/companion_computer_peripherals.md index ab9fed95ee060..39e3b3e5e0bbf 100644 --- a/ru/companion_computer/companion_computer_peripherals.md +++ b/ru/companion_computer/companion_computer_peripherals.md @@ -9,7 +9,7 @@ Typical companion computer work with Pixhawk requires a companion link to transm There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/xrce_dds.md). ::: ### FTDI Devices diff --git a/ru/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/ru/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 939fcab99ca0d..b4f5e1f428042 100644 --- a/ru/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/ru/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -6,7 +6,7 @@ The [Holybro Pixhawk RPi CM4 Baseboard](http://www.holybro.com/product/pixhawk-r The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -54,7 +54,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/ru/companion_computer/pixhawk_companion.md b/ru/companion_computer/pixhawk_companion.md index 383e998761a70..a29f841284ba0 100644 --- a/ru/companion_computer/pixhawk_companion.md +++ b/ru/companion_computer/pixhawk_companion.md @@ -21,9 +21,11 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/XRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the XRCE-DDS client on `TELEM2`(see [XRCE-DDS > Starting the client](../middleware/xrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,7 +35,7 @@ If you're connecting using a serial port, wire the port according to the instruc Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. The `TELEM2` to FTDI wiring map is shown below. | TELEM2 | | FTDI |   | | ------ | --------- | ---- | ---------------------- | @@ -44,7 +46,9 @@ The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring b | 5 | RTS (out) | 2 | FTDI CTS (brown) (in) | | 6 | GND | 1 | FTDI GND (black) | -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. diff --git a/ru/companion_computer/pixhawk_rpi.md b/ru/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..e6e4a305e82cd --- /dev/null +++ b/ru/companion_computer/pixhawk_rpi.md @@ -0,0 +1,297 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +| PX4 TELEM2 Pin | RPi GPIO Pin | +| -------------- | ---------------------- | +| UART5_TX (2) | RXD (GPIO 15 - pin 10) | +| UART5_RX (3) | TXD (GPIO 14 - pin 8) | +| GND (6) | Ground (pin 6) | + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +| `TELEM2` | RPi GPIO | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| ![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) | + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +| Pins | Signal | Voltage | +| --------- | --------------- | ------- | +| 1 (Red) | VCC | +5V | +| 2 (Black) | UART5_TX (out) | +3.3V | +| 3 (Black) | UART5_RX (in) | +3.3V | +| 4 (Black) | UART5_CTS (in) | +3.3V | +| 5 (Black) | UART5_RTS (out) | +3.3V | +| 6 (Black) | GND | GND | + +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. Generally the other radio needs to be connected to the ground station USB port. If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. Note that ROS 2 versions target particular Ubuntu versions. We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). However we will install and use a simple developer MAVLink GCS called `mavproxy`. This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + XRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + +:::note +Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + +::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. In the next section we'll set up the both Pixhawk and RPi to use XRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and XRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [XRCE-DDS](../middleware/xrce_dds.md) pages cover the options for setting up the XRCE-DDS and ROS, focussing on ROS 2 "Foxy". This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + XRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [XRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#MAV_1_CONFIG) disable MAVLink on TELEM2 and enable the XRCE-DDS client on TELEM2, respectively. The `SER_TEL2_BAUD` rate sets the comms link data rate. +You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note +You will need to reboot the flight controller to apply any changes to these parameters. +::: + +1. Check that the [microdds_client](../modules/modules_system.md#microdds-client) module is now running. YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + microdds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +microdds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [XRCE-DDS > XRCE-DDS Agent Installation](../middleware/xrce_dds.md#xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/ru/complete_vehicles/README.md b/ru/complete_vehicles/README.md index 602d7e833158a..b10961b237e0c 100644 --- a/ru/complete_vehicles/README.md +++ b/ru/complete_vehicles/README.md @@ -45,7 +45,7 @@ They allow you to use parts that are known to work, and to fly a vehicle that is ::: * Multicopter - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/ru/complete_vehicles/crazyflie2.md b/ru/complete_vehicles/crazyflie2.md index fcabf3cd18fe5..e04af665c61fc 100644 --- a/ru/complete_vehicles/crazyflie2.md +++ b/ru/complete_vehicles/crazyflie2.md @@ -36,7 +36,7 @@ The main hardware documentation is here: https://wiki.bitcraze.io/projects:crazy * [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck): contains an optical flow sensor to measure movements of the ground and a distance sensor to measure the distance to the ground. This will be useful for precise altitude and position control. * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## Flashing PX4 @@ -117,7 +117,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. :::note We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -161,6 +161,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these :::tip If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching *cfbridge* in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib. + ``` make venv ``` @@ -208,7 +209,7 @@ Since the onboard barometer is highly susceptible to wind disturbances created b ## Position Control -With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. +With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. :::note A ulog for flight in *Position* mode is available [here](https://logs.px4.io/plot_app?log=a0e68bf1-e905-410f-b828-f6146dba9d45). This can be used as a reference to compare your flight performance. @@ -252,6 +253,7 @@ To connect to Crazyflie 2.0 via MAVROS: - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/ru/complete_vehicles/crazyflie21.md b/ru/complete_vehicles/crazyflie21.md index 2f46f093be57e..dd91691428ec4 100644 --- a/ru/complete_vehicles/crazyflie21.md +++ b/ru/complete_vehicles/crazyflie21.md @@ -47,7 +47,7 @@ Useful peripheral hardware includes: * [Buzzer deck](https://store.bitcraze.io/collections/decks/products/buzzer-deck) Audio feedback on system events, like low battery or charging completed. * [Breakout deck](https://store.bitcraze.io/collections/decks/products/breakout-deck): Expansion board that gives you the ability to test new hardware easily without soldering. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): High speed onboard logging to a micro SD card -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Assemble Crazyflie 2.1 @@ -138,7 +138,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.1 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` diff --git a/ru/complete_vehicles/holybro_kopis2.md b/ru/complete_vehicles/holybro_kopis2.md index 28e4ee5f41773..9f0988ad067aa 100644 --- a/ru/complete_vehicles/holybro_kopis2.md +++ b/ru/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## Where to Buy The *Kopis 2* can be bought from a number of vendors, including: -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) In addition you will need: + - An RC transmitter. The *Kopis 2* can ship with an FrSky receiver or no receiver at all. - LiPo battery and charger. - FPV goggles if you want to fly FPV. There are many compatible options, including these ones from [Fatshark](https://www.fatshark.com/product-page/dominator-v3). You can also use DJI FPV goggles if you have the HDV version of the Kopis 2. diff --git a/ru/complete_vehicles/intel_aero.md b/ru/complete_vehicles/intel_aero.md index 4203d5bf181e3..a8c747dde17c9 100644 --- a/ru/complete_vehicles/intel_aero.md +++ b/ru/complete_vehicles/intel_aero.md @@ -3,219 +3,5 @@ :::warning This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -PX4 v1.11 is the last release that supports this platform. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -The *Intel Aero Ready to Fly Drone*® is a UAV development platform. Part of this is the *Intel Aero Compute Board*, running Linux on a Quad-core CPU. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## Вступление - -The main documentation on the [official wiki](https://github.com/intel-aero/meta-intel-aero/wiki) explains how to setup, update and connect to the board, and how to do development on the Linux side. The instructions in this topic concentrate on updating the firmware on the microcontroller from a development tree. - -It's important to update to the latest image available since some instructions change between releases. You can check the BIOS and distro version by connecting to the board and running the following command: - -``` -get_aero_version.py -``` - -The instructions here are tested with the following version: - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Установка Intel Aero в ОС Ubuntu - -In order to install Ubuntu on Intel Aero, the following equipment is needed: - -1. Источник питания (батарея или сетевой блок питания) -1. Micro HDMI to HDMI cable to attach a monitor -1. Micro USB3 to USB2 female adapter -1. USB Hub to attach mouse and keyboard - -Follow the linked instructions from [Intel Aero wiki > Installing Ubuntu on Intel Aero](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero): - -1. [Upgrade Yocto first](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (optional) -1. [OS](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [Intel Aero Repository](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -As soon as the steps under *Intel Aero Repository* (above) are completed the Aero kernel is installed. From this point forwards, always boot using this kernel. - -Follow the instructions to flash the BIOS, FPGA and Flight Controller. Open the MAVLink router config file: **/etc/mavlink-router/main.conf** - -Include the laptop IP as a UDP Endpoint by adding the following lines to the configuration file. The IP address must be set to the one of the laptop. To find the IP address of the laptop, execute: `ifconfig`. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -After all those steps are completed, the drone should automatically connect to *QGroundControl* running on the laptop. - -Next install ROS, by following the [instructions here](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS). - -### RealSense Camera - -1. RealSense SDK - - Follow the steps to install the RealSense SDK listed on the [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk). When cloning the repository, the legacy branch needs to be used for the R200 model. If the D435 or D415 is used, the master branch needs to be cloned. All other steps are the same and the branches can be just switched back and forth if the camera is changed. - - If the RealSense R200 is used, it can already be started over a ROS node using: - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - If any D400 series camera is used, follow the next step to install a different ROS wrapper. - -1. ROS Wrapper for D400 series RealSense - - Follow the instructions in [Install Intel RealSense ROS from Sources](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) to install a catkin workspace and clone the RealSense software. - - Install the udev rules using: - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - Now the RealSense can be started over a ROS node using: - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### Obstacle Avoidance - -To run the PX4 obstacle avoidance software, install catkin first: - -``` -apt install python-catkin-tools -``` - -Create a catkin workspace and initialize it. Then clone the avoidance repository into the source space, or use a symbolic link to the source space. Build the package and start the ROS node using: - -``` -catkin build local_planner - -roslaunch local_planner local_planner_aero.launch -``` - -## Прошивка PX4 - -After setting up the PX4 development environment, follow these steps update the PX4 software: - -1. Do a full update of all software on the vehicle (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release) -1. Grab the [Firmware](https://github.com/PX4/PX4-Autopilot) -1. Compile with `make intel_aerofc-v1_default` -1. Configure the target hostname - - If your system resolves link local names you don't have to do anything and you can skip this step. You can test it by trying to ssh into `intel-aero.local` after connecting to it either via WiFi or USB: - - ``` - ssh root@intel-aero.local - ``` - - If it doesn't work you can try giving the IP that will be used by the upload script: - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. Upload with: `make intel_aerofc-v1_default upload` - - -## Подключение к QGroundControl через сеть - -1. Make sure you are connected to the board with WiFi or USB Network -1. SSH to the board and make sure MAVLink forwarding runs. By default it automatically starts when booting. It can be started manually with: - ``` - systemctl start mavlink-router - ``` -1. Start *QGroundControl* and it should automatically connect. -1. Instead of starting *QGroundControl*, you can open a [MAVLink shell](../debug/mavlink_shell.md) using the script: `./Tools/mavlink_shell.py 0.0.0.0:14550` - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## Connecting LeddarOne Range Finder - -Connect the [LeddarOne](../sensor/leddar_one.md) to the Aero telemetry port. The pinout for the LeddarOne and Aero telemetry port (TELEM1) are as follows. - -| Pin | Aerofc TELEMETRY | LeddarOne | -| --- | ---------------- | --------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 3 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -To enable the rangefinder set the [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) parameter to TELEM1 and reboot the board (instructions for setting parameters [available here](../advanced_config/parameters.md)). - - -## Connecting Lidar Lite Range Finder - -:::warning -The Lidar Lite is not recommended for use with *Intel Aero Ready to Fly Drone*® due to measurements spikes. -::: - -The following instructions are for a [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3 connected via I2C. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. The pinout for both of them can be found below. We recommend using the TELEMETRY port as it is not being used. If your TELEMETRY port is already occupied, a splitter can be used to share the I2C connection (works on any I2C port). Check the images below for the splitter setup. - -In addition it is recommended to use a electrolytic capacitor for the Lidar Lite I2C connection to reduce spikes in the distance readings (see [here](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) on page 3). - -The pinout for the Lidar Lite V3 and Aero telemetry port are as follows - -| Pin | Aerofc TELEMETRY | Lidar Lite V3 | -| --- | ---------------- | ------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 3 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| pin | Aerofc COMPASS | Lidar Lite V3 | -| --- | -------------- | ------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 3 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C splitter](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero LidarLite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Using Optical Flow on the Aero - -The *Intel Aero Ready to Fly Drone*® comes with a preinstalled optical flow binary on the compute board (Linux OS version 1.6 or higher), which enables it to stably fly based on optical flow velocity estimation. In order to use optical flow, a range sensor has to be installed first (see above). - -To use the optical flow, run the following command in a console on the vehicle's compute board: -``` -systemctl start aero-optical-flow -``` - -If you want to start the optical flow binary at boot, use -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -In addition, the following parameter values should be set in the flight controller. - -| Parameter | Value | -| -------------------------------------------------------------------------- | ----- | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 | -| [EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 | -| [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 | diff --git a/ru/complete_vehicles/px4_vision_kit.md b/ru/complete_vehicles/px4_vision_kit.md index 402f18b940c6e..074194332ba52 100644 --- a/ru/complete_vehicles/px4_vision_kit.md +++ b/ru/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision Autonomy Development Kit -The [*PX4 Vision Autonomy Development Kit*](http://www.holybro.com/product/px4-vision/) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![Overview](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -14,8 +14,8 @@ The guide explains the minimal additional setup required to get the vehicle read ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://shop.holybro.com/px4-vision_p1225.html?) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## Px4 Vision Guide Content - [Warnings & Notifications](#warnings-and-notifications) @@ -24,7 +24,7 @@ The guide explains the minimal additional setup required to get the vehicle read - [First-time Setup](#first-time-setup) - [Fly the Drone with avoidance](#fly-the-drone-with-avoidance) - [Development using the Kit](#development-using-the-kit) -- [Px4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [Other Development Resources](#other-development-resources) - [How to get Technical Support](#how-to-get-technical-support) @@ -52,8 +52,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). The PX4 Vision DevKit contains following components: - Core Components: @@ -340,7 +339,7 @@ Modification of PX4 code is not *needed* to meet most computer vision use cases. ## PX4 Vision Carrier Board Pinouts -The Carrier board pinouts can be download from [Holybro's website](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf). +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). ## Other Development Resources @@ -350,7 +349,6 @@ The Carrier board pinouts can be download from [Holybro's website](http://www.ho - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 Avoidance software/documentation](https://github.com/PX4/PX4-Avoidance) - [Path Planning Interface](../computer_vision/path_planning_interface.md) -- [Px4 Vision Carrier Board Pinouts](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) ## How to get Technical Support diff --git a/ru/computer_vision/visual_inertial_odometry.md b/ru/computer_vision/visual_inertial_odometry.md index dff8c7622ba99..b5809914f90d8 100644 --- a/ru/computer_vision/visual_inertial_odometry.md +++ b/ru/computer_vision/visual_inertial_odometry.md @@ -87,7 +87,7 @@ The following parameters must be set to use external position information with E | Parameter | Setting for External Position Estimation | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | Set *vision position fusion*, *vision velocity fusion*, *vision yaw fusion* and *external vision rotation* according to your desired fusion model. | +| [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. | | [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. | | [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | Set to the difference between the timestamp of the measurement and the "actual" capture time. For more information see [below](#tuning-EKF2_EV_DELAY). | | [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | Set the position of the vision sensor with respect to the vehicles body frame. | diff --git a/ru/concept/architecture.md b/ru/concept/architecture.md index 9bccae2296fb2..4cc9575cd803b 100644 --- a/ru/concept/architecture.md +++ b/ru/concept/architecture.md @@ -103,7 +103,7 @@ There are 2 different ways that a module can be executed: The advantage of running modules on a work queue is that it uses less RAM, and potentially results in fewer task switches. The disadvantages are that *work queue tasks* are not allowed to sleep or poll on a message, or do blocking IO (such as reading from a file). Long-running tasks (doing heavy computation) should potentially also run in a separate task or at least a separate work queue. :::note -Tasks running on a work queue do not show up in [`top`](../modules/modules_command.html#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. ::: ### Background Tasks diff --git a/ru/concept/custom_mixer_payload.md b/ru/concept/custom_mixer_payload.md deleted file mode 100644 index ce2cbfc04c64e..0000000000000 --- a/ru/concept/custom_mixer_payload.md +++ /dev/null @@ -1,90 +0,0 @@ -# Custom Payload Mixers - -This topic shows how to add a custom [mixer](../concept/mixing.md) for programmatically controlling a custom payload (e.g., an electromagnetic gripper). - -The topic is intended for developers who want to support payload types that do not have existing control group definitions (e.g. gimbals have a control group, but grippers do not). You should already have read [Mixing and Actuators](../concept/mixing.md). - - -## Payload Mixer Example - -A payload mixer is just a [summing mixer](../concept/mixing.md#summing_mixer) that maps any of the function values from [Control Group #6 (First Payload)](../concept/mixing.md#control_group_6) to a particular output. You can then publish uORB topics to the selected control group function and their value will be mapped to the specified output. - -For this example, we'll create a custom mixer based on the *RC passthrough mixer* ([pass.aux.mix](https://github.com/PX4/PX4-Autopilot/blob/master/ROMFS/px4fmu_common/mixers/pass.aux.mix)). This mixer is commonly loaded into the AUX PWM ports on large multicopters). It passes through the values of 4 user-defined RC channels (set using the [RC_MAP_AUXx/RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_AUX1) parameters) to the first four outputs on the AUX PWM output. - -``` -# Manual pass through mixer for servo outputs 1-4 - -# AUX1 channel (select RC channel with RC_MAP_AUX1 param) -M: 1 -S: 3 5 10000 10000 0 -10000 10000 - -# AUX2 channel (select RC channel with RC_MAP_AUX2 param) -M: 1 -S: 3 6 10000 10000 0 -10000 10000 - -# AUX3 channel (select RC channel with RC_MAP_AUX3 param) -M: 1 -S: 3 7 10000 10000 0 -10000 10000 - -# FLAPS channel (select RC channel with RC_MAP_FLAPS param) -M: 1 -S: 3 4 10000 10000 0 -10000 10000 -``` - -:::note -The file defines four [summing mixers](../concept/mixing.md#summing_mixer) (for four outputs). -- `M: 1` indicates an output that is defined by one control input (the following `S` line). -- `S: 3`_`n`_ indicates that the input is the nth input of [Control Group 3 (Manual Passthrough)](../concept/mixing.md#control-group-3-manual-passthrough). So for `S: 3 5` the input is called "RC aux1" (this maps to the RC channel set in parameter `RC_MAP_AUX1`). -- The section declaration order defines the order of the outputs when assigned to a physical bus (e.g. the third section might be assigned to AUX3). -::: - -Start by copying the mixer file and putting it onto the SD Card at: **/etc/mixers/pass.aux.mix** (see [Mixing and Actuators > Loading a Custom Mixer](../concept/mixing.md#loading_custom_mixer). - -Remove the first section with a payload control group function input: -- Change this: - ``` - # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param) - M: 1 - S: 3 5 10000 10000 0 -10000 10000 - ``` -- To: - ``` - # Payload 1 (control group 6) channel 1 - M: 1 - S: 6 1 10000 10000 0 -10000 10000 - ``` - -Because this output is in the first position in the file it will map to the first AUX PWM output (unless UAVCAN is enabled). This output will now respect updates to the payload control group (6) output 1. - -Control group 6 will need to be defined in the code as well (it is missing!): -- Add `actuator_controls_6` to the TOPICS definition in [/msg/actuator_controls.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/actuator_controls.msg#L17): - ``` - # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6 - ``` -- Increase `NUM_ACTUATOR_CONTROL_GROUPS` to 7 in the same file. -- Subscribe to the additional control group in the output library ([/src/lib/mixer_module/mixer_module.cpp#L52](https://github.com/PX4/PX4-Autopilot/blob/master/src/lib/mixer_module/mixer_module.cpp#L52)) in the `MixingOutput` constructor. It should look like this: - ``` - {&interface, ORB_ID(actuator_controls_0)}, - {&interface, ORB_ID(actuator_controls_1)}, - {&interface, ORB_ID(actuator_controls_2)}, - {&interface, ORB_ID(actuator_controls_3)}, - ``` - ``` - {&interface, nullptr}, - {&interface, nullptr}, - {&interface, ORB_ID(actuator_controls_6)}, - ``` - -Putting an output on group 6 works by publishing actuator control group 6. First you have to create the publication. This should happen once when the PX4 module is initialized (look for places where this pattern is already being used): -``` -uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_6)}; -``` - -Then you need to publish the first message: -``` -actuator_controls_s _act_controls{}; -_act_controls.timestamp = hrt_absolute_time(); -// set the first output to 50% positive (this would rotate a servo halfway into one of its directions) -_act_controls.control[0] = 0.5f; -_actuator_controls_pub.publish(_act_controls); -``` diff --git a/ru/concept/dronecode_architecture.md b/ru/concept/dronecode_architecture.md deleted file mode 100644 index d7442fdd7d062..0000000000000 --- a/ru/concept/dronecode_architecture.md +++ /dev/null @@ -1,13 +0,0 @@ -# PX4 Platform Hardware/Software Architecture - -The diagram below provides a forward-looking high level overview of a full PX4 onboard and offboard stack. The left hand side shows one possible hardware configuration with a *flight controller* (light blue) connected to a *perception computer* (dark blue) via [RTPS](../middleware/micrortps.md). The perception computer provides vision control and object avoidance using a camera sensor array, and has a separate payload camera. - -The right hand side of the diagram shows the end-to-end software stack. The stack "approximately" aligns horizontally with the hardware parts of the diagram, and is colour-coded to show which software is running on the flight controller and which on the companion computer. - -:::note -The [PX4 Architectural Overview](../concept/architecture.md) provides information about the flight stack and middleware. Offboard APIs are covered in [ROS](../ros/README.md) and [MAVSDK](https://mavsdk.mavlink.io/develop/en/index.html). -::: - -![PX4 Platform architecture](../../assets/diagrams/dronecode_platform_architecture.jpg) - - diff --git a/ru/config/README.md b/ru/config/README.md index 1cadef29d1d09..bc6a3fd81a405 100644 --- a/ru/config/README.md +++ b/ru/config/README.md @@ -36,11 +36,11 @@ The video below shows the calibration process in detail (this uses an older vers ## Advanced Configuration -If your [selected airframe configuration](../config/airframe.md) is a *specific vehicle model* (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4)) then it may benefit from fine tuning, but this is not generally required. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. If you're using a new airframe, a "generic" airframe, significantly modifying an airframe, or using less common sensors then see: -* [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. -* [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). +- [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. +- [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). ## Support diff --git a/ru/config/actuators.md b/ru/config/actuators.md index 0ce4facebab79..f7d557bc483d1 100644 --- a/ru/config/actuators.md +++ b/ru/config/actuators.md @@ -43,11 +43,7 @@ Core geometry concepts and the configuration for a number of different frames ar #### Motor Geometry: Multicopter -The image below shows the geometry setup for a multicopter frame with and without advanced settings. - -:::note -Specifically this is the motor geometry for a [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) muticopter. Other multicopters frames are configured similarly. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![Geometry MC (QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -68,7 +64,7 @@ The `X`, `Y`, `Z` positions are in [FRD coordinate frame, relative to the _centr #### Motor Geometry: VTOL Quadrotor Tailsitter -The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). Motors have the same configuration fields as for the [multicopter geometry](#motor-geometry-multicopter). @@ -86,7 +82,7 @@ The motor geometry for a [Generic Quadplane VTOL Tiltrotor](../airframes/airfram #### Motor Geometry: Standard VTOL -The motor geometry for a [Generic Standard Quadplane VTOL Tiltrotor](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![Geometry motor: standard vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -124,27 +120,46 @@ Note that you will need to also ensure that the ESC associated with bidirectiona ### Control Surfaces Geometry -The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). - -An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. +The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. ![Control Surface Setup Example](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +Only the most common settings are displayed by default. Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + The fields are: - `Control Surfaces`: The number of control surfaces (set this first!) - `Type`: The type of each control surface: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder`, `Left Elevon`, `Right Elevon`, `Left V-Tail`, `Right V-Tail`, `Left Flap`, `Right Flap`, `Airbrakes`, `Custom`. -- `Roll scale`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Pitch scale`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Yaw scale`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). - `Trim`: An offset added to the actuator so that it is centered without input. This might be determined by trial and error. -- `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - The setting limits the rate of change of an actuator (if not specified then no rate limit is applied). It is intended for actuators that may be damaged if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle. - For example, a setting of 2.0 means that the motor/servo will not be commanded to move from 0 to 1 at a rate that completes the operation in less than 2 seconds (in case of reversible motors, the range is -1 to 1). -- `Lock control surfaces in hover`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `Enabled`: Most vehicles do not use control surfaces in hover. Use this setting to lock them so that they don't affect vehicle dynamics. - `Disabled`: Set this for vehicles that use control surfaces in hover, such as the duo tailsitter (which uses elevons for pitch and yaw control). It should also be set for vehicles that use control surfaces to provide additional stabilization in hover mode when moving at speed or in high winds. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### Actuator Roll, Pitch, and Yaw Scaling @@ -268,7 +283,7 @@ Functions include: - `Constant_Max`: Output is set to constant maximum value (+1). - `Motor 1` to `Motor 12`: Output is indicated motor. Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. - `RC Roll`: Output is passthrough roll from RC ([RC_MAP_ROLL](../advanced_config/parameter_reference.md#RC_MAP_ROLL) maps an RC channel to this output). An RC channel is mapped to the output using . @@ -276,7 +291,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/ru/config/autotune.md b/ru/config/autotune.md index 0d05a09869018..1619e8b57386e 100644 --- a/ru/config/autotune.md +++ b/ru/config/autotune.md @@ -2,7 +2,7 @@ Auto-tuning automates the process of tuning the PX4 rate and attitude controllers, which are the most important controllers for stable and responsive flight (other tuning is more "optional"). It is currently enabled for multicopter, fixed wing, and hybrid VTOL fixed wing vehicles. -Tuning only needs to be done once, and is recommended unless unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning Auto-tuning is performed while flying. The airframe must fly well enough handle moderate disturbances, and should be closely attended: @@ -86,10 +86,10 @@ Additional notes: * slow oscillations (1 oscillation per second or slower): this often occurs on large platforms and means that the attitude loop is too fast compared to the rate loop. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * fast oscillations (more than 1 oscillation per second): this is because the gain of the rate loop is too high. - **Multicopter:** decrease `MC_[ROLL|PITCH|YAW]RATE_K` by steps of 0.02 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### The auto-tuning sequence fails diff --git a/ru/config/battery.md b/ru/config/battery.md index a244424d266d5..a1a8f239fdf18 100644 --- a/ru/config/battery.md +++ b/ru/config/battery.md @@ -187,7 +187,7 @@ A typical value is 5mΩ per cell but this can vary with discharge current rating This load compensation method estimates the load based on the total thrust that gets commanded to the motors. -:::caution +:::warning This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. Use [Current-based Load Compensation](#current_based_load_compensation) instead if your vehicle has a current sensor. ::: diff --git a/ru/config/compass.md b/ru/config/compass.md index a5d0858ac0e72..6667c2445f08d 100644 --- a/ru/config/compass.md +++ b/ru/config/compass.md @@ -58,9 +58,33 @@ Notes: - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. This can also be used to change the relative priority of a compass. + + ## Further Information -* [Peripherals > GPS & Compass > Compass Configuration](../gps_compass/README.md#compass-configuration) -* [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) -* [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) + diff --git a/ru/config/flight_controller_orientation.md b/ru/config/flight_controller_orientation.md index 3d85790184774..cbbcc721812fe 100644 --- a/ru/config/flight_controller_orientation.md +++ b/ru/config/flight_controller_orientation.md @@ -27,7 +27,9 @@ To set the orientations: 1. Start *QGroundControl* and connect the vehicle. 1. Select the **Gear** icon (Vehicle Setup) in the top toolbar and then **Sensors** in the sidebar. -1. Select the **Set Orientations** button. +1. Select the **Set Orientations** button. + + 1. Select the **AutoPilot Orientation** (as [calculated above](#calculating-orientation)). diff --git a/ru/config/flight_mode.md b/ru/config/flight_mode.md index 951720a6457f2..6d6663d746f1a 100644 --- a/ru/config/flight_mode.md +++ b/ru/config/flight_mode.md @@ -83,7 +83,7 @@ On the FrSky Taranis this process involves assigning a "logical switch" to each The video below shows how this is done with the *FrSky Taranis* transmitter.@https://youtu.be/TFEjEQZqdVA -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## Further Information diff --git a/ru/config/motors.md b/ru/config/motors.md deleted file mode 100644 index 947d1904b1a78..0000000000000 --- a/ru/config/motors.md +++ /dev/null @@ -1,27 +0,0 @@ -# Motor/Servo Checks - -:::note -This section is being replaced by an [Actuators](../config/actuators.md) configuration screen. -::: - -After the airframe is setup and configured you should validate the motor assignment and spin direction, and the servo response. This can be done in *QGroundControl*, under the [Vehicle Setup > Motors](https://docs.qgroundcontrol.com/master/en/SetupView/Motors.html) tab. - -Note the following PX4-specific behaviour: -- If a safety button is used, it must be pressed before motor testing is allowed. -- The kill-switch can still be used to stop motors immediately. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable motor testing. -- On boards with an IO, only the MAIN pins can be tested. -- On the shell, [motor_test](../modules/modules_command.md#motor-test) can be used as well, which has additional options. - -If one or more of the motors do not turn in the correct direction according to the configured [airframe](../airframes/airframe_reference.md), they must be reversed. There are several options: -- If using ESCs that support [DShot](../peripherals/dshot.md) you can reverse the direction via [DShot commands](../peripherals/dshot.md#commands). -- Swap 2 of the 3 motor cables (it does not matter which ones). :::note -If motors are not connected via bullet-connectors, re-soldering is required (this is a reason, among others, to prefer DShot ESCs). -::: - -The following additional checks should be performed to validate that the vehicle is setup correctly: -1. With propellers still removed, switch to [Stabilised mode](../flight_modes/manual_stabilized_mc.md) (Multicopter) or [Manual mode](../flight_modes/manual_fw.md) (Fixed Wing) and arm the vehicle. -1. Increase the throttle a little (so the vehicle does not automatically disarm) and check that the motors respond to throttle changes. -1. Check that all motors spin at minimum throttle. -1. If the vehicle has ailerons, check if they are responding in the right directions when giving roll/pitch stick input commands. - diff --git a/ru/config/safety.md b/ru/config/safety.md index 3f0f8239da113..6e2a5d6b27d8c 100644 --- a/ru/config/safety.md +++ b/ru/config/safety.md @@ -22,7 +22,7 @@ The list below shows the set of all failsafe actions, ordered in increasing seve | Disarm | Stops the motors immediately. | | [Flight termination](../advanced_config/flight_termination.md) | Turns off all controllers and sets all PWM outputs to their failsafe values (e.g. [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1), [PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1)). The failsafe outputs can be used to deploy a parachute, landing gear or perform another operation. For a fixed-wing vehicle this might allow you to glide the vehicle to safety. | -If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -63,19 +63,19 @@ The RC Loss failsafe may be triggered if the RC transmitter link is lost in manu Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. :::note PX4 and the receiver may also need to be configured in order to *detect RC loss*: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). ::: Additional (and underlying) parameter settings are shown below. -| Setting | Parameter | Description | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | -| RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. | -| Failsafe Action | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. | -| RC Loss Exceptions | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | +| Parameter | Setting | Description | +| ------------------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | +| [COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). | +| [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Failsafe Action | Disabled, Loiter, Return, Land, Disarm, Terminate. | +| [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC Loss Exceptions | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | ### Data Link Loss Failsafe @@ -194,7 +194,6 @@ The relevant parameters are shown below: | Parameter | Description | | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Delay after loss of offboard connection before the failsafe is triggered. | -| [COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | Failsafe action if no RC is available: Land mode, Hold mode, Return mode. | | [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Failsafe action if RC is available: Position mode, Altitude mode, Manual mode, Return mode, Land mode, Hold mode. | ### Mission Feasibility Checks @@ -213,22 +212,26 @@ The relevant parameters are shown below: | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Set the failsafe action: Disabled, Warn, Return mode, Land mode. | -### QuadChute Failsafe +### Quad-chute Failsafe -Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor or control surface failed. If triggered, the vehicle will immediately switch to multicopter mode. If the vehicle was in [Mission mode](../flight_modes/mission.md) it enters failsafe [Return mode](../flight_modes/return.md). +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -The quadchute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -The parameters that control when the quadchute will trigger are listed in the table below. - -| Parameter | Description | -| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | Maximum negative altitude error for fixed wing flight. If the altitude drops more than this value below the altitude setpoint the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude for fixed wing flight. When the altitude drops below this value in fixed wing flight the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Maximum pitch angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Maximum roll angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | +The parameters that control when the quad-chute will trigger are listed in the table below. + +| Parameter | Description | +| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. | +| [VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) | Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. | +| [VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. | +| [VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing | + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## Failure Detector diff --git a/ru/config_fw/advanced_tuning_guide_fixedwing.md b/ru/config_fw/advanced_tuning_guide_fixedwing.md index b5ee77a8a11dd..36c397ff1e590 100644 --- a/ru/config_fw/advanced_tuning_guide_fixedwing.md +++ b/ru/config_fw/advanced_tuning_guide_fixedwing.md @@ -67,8 +67,8 @@ Fly in stabilized mode, reduce throttle to `FW_THR_MIN` and adjust the pitch ang Specify the target climb and sink rate for autonomous missions by adjusting [FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) and [FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP). These specify the height rates at which the vehicle will climb or descend in order to change altitude. Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1 Controller Tuning (Position) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - This is the L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 25 meters works for most aircraft. A value of 16-18 will still work, and provide a sharper response. Shorten slowly during tuning until response is sharp without oscillation. +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 10-20 meters works for most aircraft. Shorten slowly during tuning until response is sharp without oscillation. Vehicles with a slow roll dynamic should have this value increased. diff --git a/ru/config_fw/trimming_guide_fixedwing.md b/ru/config_fw/trimming_guide_fixedwing.md index b1539d44911c8..be678a03b6eaa 100644 --- a/ru/config_fw/trimming_guide_fixedwing.md +++ b/ru/config_fw/trimming_guide_fixedwing.md @@ -11,7 +11,7 @@ The [Basic trimming](#basic-trimming) section explains the purpose of each trim There are several parameters an operator might want to use in order to properly trim a fixed-wing aircraft. An overview of those parameters and their use case is shown below: - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM) applies trim to the signal received from the RC transmitter. These parameters are set automatically during [RC calibration](../config/radio.md). -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1) applies trim to a PWM channel, after mixing. These are used to finely align the control surfaces to default angles before flying. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. These are used to finely align the control surfaces to default angles before flying. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF) applies an offset to the pitch setpoint. This is used to set the angle of attack at which your aircraft needs to fly at cruise speed. - [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) is used by the rate controllers to scale their output depending on the measured airspeed. See [Airspeed Scaling](../flight_stack/controller_diagrams.md#airspeed-scaling) for more details. - [TRIM_ROLL](../advanced_config/parameter_reference.md#TRIM_ROLL), [TRIM_PITCH](../advanced_config/parameter_reference.md#TRIM_PITCH) and [TRIM_YAW](../advanced_config/parameter_reference.md#TRIM_YAW) apply trim to the control signals *before* mixing. For example, if you have two servos for the elevator, `TRIM_PITCH` applies trim to both of them. These are used when your control surfaces are aligned but the aircraft pitches/rolls/yaws up/down/left/right during manual (not stabilized) flight or if the control signal has a constant offset during stabilized flight. @@ -26,12 +26,12 @@ Step 3 can be performed before step 2 if you don't want to have to look at the l ## Advanced Trimming -Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve (see figure below) function of airspeed and a pitch trim increment function of the flaps state can be defined using the following parameters: +Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW*DTRIM*\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN) are the roll/pitch/yaw trim value added to `TRIM_ROLL/PITCH/YAW` at min/max airspeed (defined by [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)). -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim Curve](../../assets/config/fw/fixedwing_dtrim.png) -A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. +A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. diff --git a/ru/config_heli/README.md b/ru/config_heli/README.md index c683cc59338f4..f9bccf1fe7c93 100644 --- a/ru/config_heli/README.md +++ b/ru/config_heli/README.md @@ -30,8 +30,7 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/ru/config_mc/filter_tuning.md b/ru/config_mc/filter_tuning.md index ab4c2e355900c..8c57444733343 100644 --- a/ru/config_mc/filter_tuning.md +++ b/ru/config_mc/filter_tuning.md @@ -22,7 +22,7 @@ The following factors affect control latency: - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The maximum gyro publication rate (configured with [IMU_GYRO_RATEMAX](../advanced_config/parameter_reference.md#IMU_GYRO_RATEMAX)). A higher rate reduces latency but is computationally intensive/can starve other processes. 4 kHz or higher is only recommended for controllers with STM32H7 processor or newer (2 kHz value is near the limit for less capable processors). - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot ([PWM_AUX_RATE=0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) or [PWM_MAIN_RATE=0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)) to reduce latency. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). Below we look at the impact of the low pass filters. diff --git a/ru/config_mc/pid_tuning_guide_multicopter.md b/ru/config_mc/pid_tuning_guide_multicopter.md index 36adcd84fa60c..823959fb816c6 100644 --- a/ru/config_mc/pid_tuning_guide_multicopter.md +++ b/ru/config_mc/pid_tuning_guide_multicopter.md @@ -171,7 +171,7 @@ The mapping from motor control signals (e.g. PWM) to expected thrust is linear b If you have a [thrust stand](https://www.tytorobotics.com/pages/series-1580-1585) *measure* thrust and motor commands simultaneously), you can determine the relationship between the motor control signal and the motor's actual thrust, and fit a function to the data. The motor command in PX4 called `actuator_output` can be PWM, Dshot, UAVCAN commands for the respective ESCs in use. [This Notebook][THR_MDL_FAC_Calculation] shows one way for how the thrust model factor `THR_MDL_FAC` may be calculated from previously measured thrust and PWM data. The curves shown in this plot are parametrized by both α and k, and also show thrust and PWM in real units (kgf and μs). In order to simplify the curve fit problem, you can normalize the data between 0 and 1 to find `k` without having to estimate α (α = 1, when the data is normalized). -[![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note The mapping between PWM and static thrust depends highly on the battery voltage. @@ -195,20 +195,6 @@ In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set t If you don't have access to a thrust stand, you can also tune the modeling factor empirically. Start off with 0.3 and increase it by 0.1 at a time. If it is too high, you will start to notice oscillations at lower throttle values. If it is too low you'll notice oscillations at higher throttle values. - - ### Airmode & Mixer Saturation @@ -234,5 +220,3 @@ If mixing becomes saturated towards the upper bound the commanded thrust is redu Once your vehicle flies well you can enable Airmode via the [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE) parameter. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb - -[THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb diff --git a/ru/config_mc/pid_tuning_guide_multicopter_basic.md b/ru/config_mc/pid_tuning_guide_multicopter_basic.md index db8e2041b84fd..38796be1e0747 100644 --- a/ru/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/ru/config_mc/pid_tuning_guide_multicopter_basic.md @@ -32,7 +32,7 @@ The testing procedure for each controller (rate, attitude, velocity/posibition) - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. This should give you a vehicle that already flies. - You should have done an [ESC calibration](../advanced_config/esc_calibration.md). -- If using PWM output: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN) is set correctly. It needs to be set low, but such that the **motors never stop** when the vehicle is armed. +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). These need to be set low, but such that the **motors never stop** when the vehicle is armed. This can be tested in [Acro mode](../flight_modes/acro_mc.md) or in [Manual/Stabilized mode](../flight_modes/manual_stabilized_mc.md): - Remove propellers diff --git a/ru/config_mc/racer_setup.md b/ru/config_mc/racer_setup.md index b51f46149dd01..6250156f1f767 100644 --- a/ru/config_mc/racer_setup.md +++ b/ru/config_mc/racer_setup.md @@ -64,7 +64,7 @@ Go through the [Basic Configuration Guide](../config/README.md). In particular, These parameters are important: -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - Set the maximum roll-, pitch- and yaw rates for Manual/Stabilized mode as desired: [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) and [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX). The maximum tilt angle is configured with [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX). - The minimum thrust [MPC_MANTHR_MIN](../advanced_config/parameter_reference.md#MPC_MANTHR_MIN) should be set to 0. @@ -108,7 +108,7 @@ These are the factors that affect the latency: - [Low-pass filters](../config_mc/filter_tuning.md) in software and on the sensor chip trade off increased latency for improved noise filtering. - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable One-Shot to reduce latency ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)=0). +- PWM output signal: enable the One-Shot protocol to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### Filter Tuning diff --git a/ru/config_vtol/vtol_back_transition_tuning.md b/ru/config_vtol/vtol_back_transition_tuning.md index f49546c2b62ec..2280e2b528232 100644 --- a/ru/config_vtol/vtol_back_transition_tuning.md +++ b/ru/config_vtol/vtol_back_transition_tuning.md @@ -1,56 +1,13 @@ # VTOL Back-transition Tuning -When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## Back-transition duration - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## Setting expected deceleration -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## Applying airbrakes - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## Applying reverse thrust on your fixed wing motor - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### Using throttle scaling (3D) +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### On a control channel - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## Typical setup - -An example of a setup that employs most features listed above would be the following: +## Back-transition duration -- Airframe: Any VTOL supporting reverse thrust (e.g. DeltaQuad) -- ESC: A fixed wing ESC that supports motor reversing (e.g. Hobbywing Platinum Pro 60A) -- Estimated deceleration value in m/s/s `VT_B_DEC_MSS`: 2.5 -- Back-transition duration timeout in seconds `VT_B_TRANS_DUR`: 10 -- Set reverse channel high during back-transition `VT_B_REV_OUT`: 1.0 -- Apply 70% thrust during back-transition `VT_B_TRANS_THR`: 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/ru/config_vtol/vtol_quad_configuration.md b/ru/config_vtol/vtol_quad_configuration.md index d553ef5f86813..31bb554dd8c4f 100644 --- a/ru/config_vtol/vtol_quad_configuration.md +++ b/ru/config_vtol/vtol_quad_configuration.md @@ -1,12 +1,16 @@ -# QuadPlane VTOL Configuration & Tuning +# Generic Standard VTOL (QuadPlane) Configuration & Tuning -This is the configuration documentation for a QuadPlane VTOL setup (Plane combined with Quadcopter). For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. + +For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). ## Firmware & Basic Settings 1. Run *QGroundControl* -2. Flash the master firmware -3. In the Setup tab select the appropriate VTOL airframe, if your airframe is not listed select the Fun Cub VTOL airframe. +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### Flight / Transition Mode Switch @@ -45,10 +49,6 @@ Front transition throttle defines the target throttle for the pusher/puller moto This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -122,4 +122,4 @@ When transitioning from **fixed wing to multirotor** for this type of VTOL the ### Support -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/ru/config_vtol/vtol_without_airspeed_sensor.md b/ru/config_vtol/vtol_without_airspeed_sensor.md index 1d37ea4bccbd5..c65b9b1b62113 100644 --- a/ru/config_vtol/vtol_without_airspeed_sensor.md +++ b/ru/config_vtol/vtol_without_airspeed_sensor.md @@ -45,13 +45,17 @@ Set the minimum front transition time ([VT_TRANS_MIN_TM](../advanced_config/para ### Optional Recommended Parameters -Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'QuadChute' ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + +This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. The position estimator tested for this mode is EKF2, you can set this by changing the [SYS_MC_EST_GROUP](../advanced_config/parameter_reference.md#SYS_MC_EST_GROUP). ## First Flight Without Airspeed Sensor -The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: +The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + +Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: - Stay at one altitude - Set the waypoints wide enough and in such a fashion that no sharp turns are required diff --git a/ru/contribute/code.md b/ru/contribute/code.md index 07f898b17675a..62def77147535 100644 --- a/ru/contribute/code.md +++ b/ru/contribute/code.md @@ -4,7 +4,7 @@ The PX4 project uses a three-branch Git branching model: -* [master](https://github.com/PX4/PX4-Autopilot/tree/master) is by default unstable and sees rapid development. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta) has been thoroughly tested. It's intended for flight testers. * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable) points to the last release. diff --git a/ru/contribute/dev_call.md b/ru/contribute/dev_call.md index 239f737a2395e..613412f931f54 100644 --- a/ru/contribute/dev_call.md +++ b/ru/contribute/dev_call.md @@ -1,12 +1,11 @@ -# Weekly Dev Call +# Weekly Community Q&A Call (Previously "Dev Call")

          This page may be out of date

          .

          The latest version can be found here.

          -The PX4 dev team syncs up on platform technical details and in-depth analysis. There is also space in the agenda to discuss pull requests, major impacting issues and Q&A. - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## Who should attend: @@ -14,29 +13,20 @@ The PX4 dev team syncs up on platform technical details and in-depth analysis. T * Component maintainers * Test team lead * Dronecode members -* Community members +* Community members (you!) :::tip -The dev call is open to all interested developers (not just the core dev team). +The Community Q&A call is open to all interested community members. + This is a great opportunity to meet the team and contribute to the ongoing development of the platform. ::: ## What gets discussed? -The first/main part of the meeting runs for 45 minutes and provides a high-level forum to discuss where the project is going. - -This is where we discuss *contributions*, including issues/PRs that have the [dev call](https://github.com/PX4/PX4-Autopilot/labels/devcall5) label. We expect the proposer and the assigned reviewer to be on the call! - -:::note -The main call is designed to support rapid/focused decision making. We don't expect deep technical discussions and we will not spend extended amounts of time on feature requests. Proposals are welcome, but they need a sponsor (someone willing to *implement* the work)! -::: - -The second part of the meeting is for in-depth technical discussions and open ended questions. The core team/subsystem maintainers will be available for up to 45 additional minutes. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## Schedule -* TIME: Wednesday 17h00 CET, 11h00 EST, 08h00 PST ([subscribe to calendar](https://www.dronecode.org/calendar/)) -* **Join the call**: [https://meet.jit.si/PX4DeveloperCallWeekly](https://meet.jit.si/PX4DeveloperCallWeekly) - -* Agenda is published before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io//c/weekly-dev-call) -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/ru/debug/simulation_debugging.md b/ru/debug/simulation_debugging.md index 685e59e0e284d..249a164ff7522 100644 --- a/ru/debug/simulation_debugging.md +++ b/ru/debug/simulation_debugging.md @@ -29,21 +29,24 @@ To use valgrind during the SITL simulation: make px4_sitl_default jmavsim___valgrind ``` -## Start combinations +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. This results in the start options below: +By default SITL is launched without a debugger attached when using any simulator backend: ```sh +make px4_sitl_default gz +make px4_sitl_default gazebo-classic make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb +``` -make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +For Gazebo Classic (only) you can also start the simulator with a debugger attached. Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb ``` -where the last parameter is the <viewer\_model\_debugger> triplet (using three underscores implies the default 'iris' model). This will start the debugger and launch the SITL application. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: ```sh Process 16529 stopped @@ -74,14 +77,14 @@ After that the lldb or gdb shells behave like normal sessions, please refer to t The last parameter, the <viewer\_model\_debugger> triplet, is actually passed to make in the build directory, so ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` is equivalent with ```sh make px4_sitl_default # Configure with cmake -make -C build/px4_sitl_default jmavsim___gdb +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -90,11 +93,77 @@ A full list of the available make targets in the build directory can be obtained make help ``` -but for your convenience, a list with just the <viewer\_model\_debugger> triplets is printed with the command +## Attaching GDB to running SITL -```sh -make list_vmd_make_targets -``` +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + For example, + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## Compiler optimization diff --git a/ru/debug/swd_debug.md b/ru/debug/swd_debug.md index b2f0c474ee863..04dfed967e088 100644 --- a/ru/debug/swd_debug.md +++ b/ru/debug/swd_debug.md @@ -35,7 +35,7 @@ This connector may come with your flight controller or debug probe. Other option ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/ru/debug/system_wide_replay.md b/ru/debug/system_wide_replay.md index 196fe68da6669..fa50fbe532345 100644 --- a/ru/debug/system_wide_replay.md +++ b/ru/debug/system_wide_replay.md @@ -10,7 +10,7 @@ The first thing that needs to be done is to identify the module or modules that All identified topics need to be logged at full rate (see [logging](../dev_log/logging.md)). For `ekf2` this is already the case with the default set of logged topics. -It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/sensor_combined.msg). Reasons for this are given below. +It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). Reasons for this are given below. ## Usage diff --git a/ru/dev_airframes/README.md b/ru/dev_airframes/README.md index 8ca9650042a40..05871a83e202e 100644 --- a/ru/dev_airframes/README.md +++ b/ru/dev_airframes/README.md @@ -1,6 +1,6 @@ # Airframes -PX4 has a flexible [mixing system](../concept/mixing.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **Planes:** Normal planes, flying wings, inverted V-tail planes, etc. * **Multicopters:** Helicopters, tricopters, quadcopters, hexarotors, dodecarotors in many different geometries. diff --git a/ru/dev_airframes/adding_a_new_frame.md b/ru/dev_airframes/adding_a_new_frame.md index 0c3f56db65a88..8f1391e6c5864 100644 --- a/ru/dev_airframes/adding_a_new_frame.md +++ b/ru/dev_airframes/adding_a_new_frame.md @@ -19,7 +19,7 @@ To determine which parameters/values need to be set in the configuration file, y The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -150,7 +150,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -206,12 +206,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 diff --git a/ru/dev_log/ulog_file_format.md b/ru/dev_log/ulog_file_format.md index 4eb0b1b160dfe..bf6ce15e79e19 100644 --- a/ru/dev_log/ulog_file_format.md +++ b/ru/dev_log/ulog_file_format.md @@ -466,7 +466,6 @@ A valid ULog parser must fulfill the following requirements: - [hardfault_log module](https://github.com/PX4/PX4-Autopilot/tree/master/src/systemcmds/hardfault_log): append hardfault crash data. - [pyulog](https://github.com/PX4/pyulog): python, ULog parser library with CLI scripts. - [FlightPlot](https://github.com/PX4/FlightPlot): Java, log plotter. -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis): Python, log plotter and 3D visualization tool based on pyulog. - [MAVLink](https://github.com/mavlink/mavlink): Messages for ULog streaming via MAVLink (note that appending data is not supported, at least not for cut off messages). - [QGroundControl](https://github.com/mavlink/qgroundcontrol): C++, ULog streaming via MAVLink and minimal parsing for GeoTagging. - [mavlink-router](https://github.com/01org/mavlink-router): C++, ULog streaming via MAVLink. diff --git a/ru/dev_setup/_gcc_toolchain_installation.md b/ru/dev_setup/_gcc_toolchain_installation.md deleted file mode 100644 index 308cc9371e41d..0000000000000 --- a/ru/dev_setup/_gcc_toolchain_installation.md +++ /dev/null @@ -1,33 +0,0 @@ - - -Execute the script below to install GCC 7-2017-q4: - -```sh -pushd . -cd ~ -wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -popd -``` - -Now restart your machine. - - -**Troubleshooting** - -Check the version by entering the following command: - -```sh -arm-none-eabi-gcc --version -``` - -The output should be something similar to: - -```sh -arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -Copyright (C) 2017 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` diff --git a/ru/dev_setup/_ninja_build_system.md b/ru/dev_setup/_ninja_build_system.md deleted file mode 100644 index f835ffebe7513..0000000000000 --- a/ru/dev_setup/_ninja_build_system.md +++ /dev/null @@ -1,22 +0,0 @@ -## Ninja Build System - -[Ninja](https://ninja-build.org/) is a faster build system than *Make* and the PX4 *CMake* generators support it. - -On Ubuntu Linux you can install this automatically from normal repos. - -```sh -sudo apt-get install ninja-build -y -``` - -Other systems may not include Ninja in the package manager. In this case an alternative is to download the binary and add it to your path: - -```sh -mkdir -p $HOME/ninja -cd $HOME/ninja -wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip -unzip ninja-linux.zip -rm ninja-linux.zip -exportline="export PATH=$HOME/ninja:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -. ~/.profile -``` diff --git a/ru/dev_setup/dev_env.md b/ru/dev_setup/dev_env.md index 2010d35ab0db8..27bc2eba05a79 100644 --- a/ru/dev_setup/dev_env.md +++ b/ru/dev_setup/dev_env.md @@ -10,15 +10,15 @@ The *supported platforms* for PX4 development are: The table below shows what PX4 targets you can build on each OS. -| Target | Linux (Ubuntu) | Mac | Windows | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| -| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | ✓ | ✓ | ✓ | -| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | -| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | -| **Simulation:** ROS2 with Gazebo | ✓ | | | +| Target | Linux (Ubuntu) | Mac | Windows | +| ----------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| +| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | ✓ | ✓ | ✓ | +| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | +| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | +| **Simulation:** ROS 2 with Gazebo | ✓ | | | Experienced Docker users can also build with the containers used by our continuous integration system: [Docker Containers](../test_and_ci/docker.md) diff --git a/ru/dev_setup/dev_env_linux_ubuntu.md b/ru/dev_setup/dev_env_linux_ubuntu.md index 1c69851d5c3f9..54263c1b0bf11 100644 --- a/ru/dev_setup/dev_env_linux_ubuntu.md +++ b/ru/dev_setup/dev_env_linux_ubuntu.md @@ -167,7 +167,7 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/ru/dev_setup/dev_env_mac.md b/ru/dev_setup/dev_env_mac.md index c7366b5323c57..b25164d292121 100644 --- a/ru/dev_setup/dev_env_mac.md +++ b/ru/dev_setup/dev_env_mac.md @@ -30,9 +30,9 @@ The installation of Homebrew is quick and easy: [installation instructions](http ## Enable more open files (Handle "LD: too many open files" error) -Create the `~/.zshenv` file or append it (by running `open ~/.zshenv` on the terminal) and add this line: +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Enforce Python Version diff --git a/ru/dev_setup/dev_env_windows_vm.md b/ru/dev_setup/dev_env_windows_vm.md index ee4da9991055b..74541a63ec5a4 100644 --- a/ru/dev_setup/dev_env_windows_vm.md +++ b/ru/dev_setup/dev_env_windows_vm.md @@ -6,18 +6,21 @@ This development environment is [not supported](../advanced/dev_env_unsupported. Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. +While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: + +1. Firmware building will be slower than native building on Linux. +1. The JMAVSim simulation, frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. +1. Gazebo and ROS can be installed, but are unusably slow. + :::tip Allocate as many CPU cores and memory resources to the VM as possible. ::: -While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: -1. Firmware building will be slower than native building on Linux. -1. The JMAVSim frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. -1. Gazebo and ROS can be installed, but are unusably slow. +There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). -## Instructions +## VMWare Setup -There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. +VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) 1. Install it on your Windows system @@ -34,9 +37,48 @@ We recommend this is done before installing Linux in the virtual environment. 1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. 1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. 1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. This will enhance performance and usability of your VM usage: - * Significantly enhanced graphics performance - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * Guest display resolution adaption to the window size - * Clipboard sharing to host system - * File sharing to host system + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system 1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. +::: + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. + + :::note +The bootloader device only appears for a few seconds after connecting USB. +If it disappears before you can select it, disconnect and then reconnect USB. +::: + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/ru/dev_setup/fast-dds-installation.md b/ru/dev_setup/fast-dds-installation.md deleted file mode 100644 index e98cc2036b90c..0000000000000 --- a/ru/dev_setup/fast-dds-installation.md +++ /dev/null @@ -1,138 +0,0 @@ -# Fast DDS Installation - -logo [eProsima Fast DDS](https://github.com/eProsima/Fast-DDS) is a C++ implementation of the Object Management Group's (OMG) Data Distribution Service (DDS) specification and the Real Time Publish Subscribe (RTPS) protocol. - -Fast DDS enables an RTPS/DDS interface that allows PX4 uORB topics to be shared with offboard components that participate in same DDS domain, including robotics and simulator tools. In particular, Fast DDS is the default middleware implementation for Robot Operating System 2 (ROS 2), and is essential for integrating PX4 with ROS2. - -This topic explains how to install Fast DDS and *Fast-RTPS-Gen* to use in the PX4 build system and with the microRTPS bridge. - -:::note -You do not have to install Fast DDS if you have ROS 2 Dashing (Ubuntu 18.04) or ROS 2 Foxy (Ubuntu 20.04) installed, as it comes included with the default `base` or `desktop` installations through the `ros--rmw-fastrtps` package. This means you just need to install *Fast-RTPS-Gen* and have your ROS 2 environment sourced (`source /opt/ros//setup.bash`) in order to be able to compile the `rtps` targets in the PX4-Autopilot repo. - -For *ROS2 Galactic and above*, one has to install the `rmw` implementation through `apt` using `apt install ros-galactic-rmw-fastrtps`, since the default middleware for Galactic and above is CycloneDDS and the FastDDS middleware doesn't come installed by default. -::: - -:::tip -Fast DDS is not an essential component of the PX4 Autopilot and should only be installed if you plan to interface the PX4 Autopilot with Fast RTPS/DDS participants. -ROS 2 nodes are an example of these, though Fast DDS middleware and C++ implementations are installed by default on ROS 2 Foxy and below, as mentioned above. -::: - -:::note -Fast DDS was previously named FastRTPS (the name was changed in version 2.0.0 as it now includes a full DDS implementation, rather than just the RTPS wire protocol). -::: - - -## Prerequisites - -*eProsima Fast DDS* requires the following packages to work. - -:::note -At time of writing you will need to install *from source* for: -- **Ubuntu 18.04:** Fast RTPS 1.8.4 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -- **Ubuntu 20.04:** Fast DDS 2.0.2 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -::: - -:::tip -Remember (again) you only need to install Fast DDS if you are not using ROS 2 and just want to leverage non-ROS2 DDS networks and applications. If you have ROS 2 installed (and `rmw-fasrtps` as its default middleware), you can skip to [Fast-RTPS-Gen build and install](#fast-rtps-gen). -::: - -### Java - -Java is required to build and use eProsima's RTPS/DDS from IDL code generation tool - *Fast-RTPS-Gen*. [Java JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) is recommended, and it is installed through the setup scripts made available in [Ubuntu Development Environment](../dev_setup/dev_env_linux.md). - -### Foonathan memory - -In order to build Fast DDS you need to install the Foonathan Memory dependency. - -```sh -git clone https://github.com/eProsima/foonathan_memory_vendor.git -cd foonathan_memory_vendor -mkdir build && cd build -cmake .. -cmake --build . --target install -``` - -:::note -If the last step fails, try running the command with the proper user privileges (`sudo`). -::: - - -## Installation from Sources - -### Fast DDS - -Clone the project from Github: - -```sh -git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.2 ~/FastDDS-2.0.2 -cd ~/FastDDS-2.0.2 -mkdir build && cd build -``` - -If you are on Linux, execute: - -```sh -cmake -DTHIRDPARTY=ON -DSECURITY=ON .. -make -j$(nproc --all) -sudo make install -``` - -This will install Fast DDS to `/usr/local`, with secure communications support. If you need to install to a custom location you can use: `-DCMAKE_INSTALL_PREFIX=`. - -#### Compile Options - -The following additional arguments can be used when calling *CMake*: - -- `-DCOMPILE_EXAMPLES=ON`: Compile the examples -- `-DPERFORMANCE_TESTS=ON`: Compile the performance tests - - -### Fast-RTPS-Gen - -*Fast-RTPS-Gen* is the Fast RTPS (DDS) IDL code generator tool. It should be installed after Fast RTPS (DDS) and made sure the `fastrtpsgen` application is in your `PATH`. You can check with `which fastrtpsgen`. - -Then clone Fast-RTPS-Gen 1.0.4: -``` -git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \ -&& cd ~/Fast-RTPS-Gen/gradle/wrapper -``` - -After that, modify the distribution version of gradle inside the gradle-wrapper.properties file to gradle-6.8.3 such that the distributionUrl file becomes as follows: - -``` -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip -``` -Now you should run the following commands: - -``` -cd ~/Fast-RTPS-Gen -./gradlew assemble && sudo env "PATH=$PATH" ./gradlew install -``` - -## Installation from Binaries - -:::note -Although the binaries are available, we recommend to build and install the code from source, given that the binaries may not come with required components and dependencies in place. -::: - -The latest binary release of *eProsima Fast DDS* can be downloaded from the [company website](http://www.eprosima.com/). - -Documentation on how to do this can be found here: [Installation from Binaries on Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) and [Installation from Binaries on Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) (*eProsima Fast DDS* official documentation) - -#### Environmental Variables - -* `FASTRTPSGEN_DIR`: Root folder where *eProsima Fast-RTPS-Gen* is installed, usually set to `/usr/local`, which is the default installation directory. If the user sets a different install directory in the `gradle install` step, it must set this variable to that same directory as well. Otherwise, the code generation step, and consequently, the build of the `rtps` targets in PX4 will fail. - - -## Further Information - -- [RTPS/DDS Interface: PX4-Fast RTPS(DDS) Bridge](../middleware/micrortps.md) -- [PX4-ROS 2 bridge](../ros/ros2_comm.md) - -- Additional installation information can be found in the official [*eProsima Fast DDS* documentation](https://fast-dds.docs.eprosima.com/en/latest/) (from which this topic is derived): - - Installation from Sources - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_windows.html) - - Installation from Binaries - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) diff --git a/ru/dronecan/README.md b/ru/dronecan/README.md index d77dbc80448d3..4de6625a61469 100644 --- a/ru/dronecan/README.md +++ b/ru/dronecan/README.md @@ -117,7 +117,7 @@ Upon boot the flight controller will automatically transfer the firmware onto th **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/ru/dronecan/ark_flow.md b/ru/dronecan/ark_flow.md index 6594fed96982f..c90e226f8cff8 100644 --- a/ru/dronecan/ark_flow.md +++ b/ru/dronecan/ark_flow.md @@ -85,7 +85,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/ru/dronecan/cuav_can_pmu.md b/ru/dronecan/cuav_can_pmu.md index 9c6a76e0a672f..a3f4b4befe553 100644 --- a/ru/dronecan/cuav_can_pmu.md +++ b/ru/dronecan/cuav_can_pmu.md @@ -55,12 +55,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/ru/dronecan/holybro_kotleta.md b/ru/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/ru/dronecan/holybro_kotleta.md +++ b/ru/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/ru/dronecan/holybro_m8n_gps.md b/ru/dronecan/holybro_m8n_gps.md index a7ada35d18cd9..4dff0321e0ab3 100644 --- a/ru/dronecan/holybro_m8n_gps.md +++ b/ru/dronecan/holybro_m8n_gps.md @@ -11,7 +11,7 @@ The GPS module uses the [DroneCAN](README.md) protocol for communication. DroneC Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/ru/dronecan/sapog.md b/ru/dronecan/sapog.md index 92b0b3332947d..31d47a6fd550f 100644 --- a/ru/dronecan/sapog.md +++ b/ru/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 Supported ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -UAVCAN is generally speaking a plug'n'play protocol. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -Some popular UAVCAN ESC firmware/products include: -- [Sapog](https://github.com/PX4/sapog#px4-sapog) firmware; an advanced open source sensorless PMSM/BLDC motor controller firmware designed for use in propulsion systems of electric unmanned vehicles. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC Project ESCs](https://vesc-project.com/) (see also [Benjamin Vedder's blog](http://vedder.se) - project owner) -- [OlliW’s UC4H ESC-Actuator Node](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- A number of others are [listed here](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko) - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## Purchase - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Mitochondrik based drives and ESC: -- [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## Wiring/Connections - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 Configuration - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. Power the vehicle using the battery (you must power the whole vehicle, not just the flight controller) and connect *QGroundControl*. -1. Navigate to the **Vehicle Setup > Parameters** screen. :::note [Parameters](../advanced_config/parameters.md) explains how to find and set parameters. -::: -1. Set [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to the value *Sensors and Motors* (3) and then reboot the flight controller. This enables automatic enumeration of the motors (ESC) as described in the [next section](#esc-setup). -1. (Optional) Set [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT) to 1 in order to ensure that the motors are always running at least at the idle throttle while the system is armed. :::note -Some systems will not benefit from this behavior, e.g. glider drones). -::: - - -## ESC Setup - -While UAVCAN devices are generally *plug'n'play* you will still need to enumerate (number) each of the ESC used in your system and set their direction so that they can be identified/controlled by PX4. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -The mechanism for enumerating each type of UAVCAN ESC is different (look up the instructions in your ESC's manual). Setup information for some UAVCAN ESCs is provided below. - - -### Sapog ESC Enumeration using QGroundControl - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. Power the vehicle with a battery and connect to *QGroundControl* -1. Navigate to **Vehicle Setup > Power** in QGC. -1. Start the process of ESC auto-enumeration by pressing the **Start Assignment** button, as shown on the screenshot below. - - ![QGC - UAVCAN ESC auto-enumeration](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - You will hear a sound indicating that the flight controller has entered the ESC enumeration mode. -1. Manually turn each motor in the correct direction of its rotation (as specified in the [Airframe Reference](../airframes/airframe_reference.md)), starting from the first motor and finishing with the last motor. Each time you turn a motor, you should hear a confirmation beep. - - :::note -Make sure to turn each of the motors in the correct direction, as the ESC will automatically learn and remember the direction (i.e. motors that spin clockwise during normal operation must also be turned clockwise during enumeration). -::: - -1. After the last motor is enumerated, the confirmation sound should change to indicate that the enumeration procedure is complete. -1. Reboot PX4 and the Sapog ESCs to apply the new enumeration IDs. - -The following video demonstrates the process: - -@[youtube](https://www.youtube.com/watch?v=4nSa8tvpbgQ) - -### Manual ESC Enumeration using Sapog - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -You can manually configure the ESC index and direction using the [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -:::note -See [Sapog reference manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) for more information about the parameters. -::: - -### Myxa ESC Setup - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -There is some guidance here: [Quick start guide for Myxa v0.1](https://forum.zubax.com/t/quick-start-guide-for-myxa-v0-1/911) (Zubax blog). - - -### VESC ESC Setup - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| Parameter | Option | -| ----------------------- | ---------------------- | -| App to use | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -VESC ID should have the same motor numbering as in PX4 convention, starting at `1` for top-right motor, `2` for bottom-left motor etc. However the `UAVCAN ESC Index` starts from `0`, and as such it is always one index lower than the `VESC ID`. For example, in a quadcopter the bottom left motor will have `VESC ID = 2` and `UAVCAN ESC Index = 1`. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## Troubleshooting - -#### Motors not spinning when armed - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN devices dont get node ID/Firmware Update Fails - -PX4 requires an SD card for UAVCAN node allocation and during firmware update (which happen during boot). Check that there is a (working) SD card present and reboot. - - -## Further Information - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 Reference Manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [Using Sapog based ESC with PX4](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/ru/uavcan/node_firmware.md b/ru/uavcan/node_firmware.md deleted file mode 100644 index dc75d9d1c5407..0000000000000 --- a/ru/uavcan/node_firmware.md +++ /dev/null @@ -1,59 +0,0 @@ -# UAVCAN Firmware Upgrading - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -:::warning -UAVCAN devices typically ship with appropriate firmware preinstalled. -These instructions are primarily needed when developing UAVCAN devices. -::: - -## Flashing/Updating a UAVCAN Binary - -To flash the UAVCAN device, all you need to do is copy the UAVCAN firmware binary into the root directory of the flight controller’s SD card and reboot. - -After restarting the flight controller the UAVCAN device will automatically be updated with new firmware. If successful the firmware binary will be removed from the root directory and there will be a file named **XX.bin** in the **/ufw** directory of the SD card. - -:::note UAVCAN -firmware is usually created as part of the build process. Commonly the firmware image is built in **build/_name_of_your_uavcan_device_**, where _name_of_your_uavcan_device_ is specific to the device you are flashing (e.g. **build/ark_can-flow_default**), and will be named with the format **XX-X.X.XXXXXXXX.uavcan.bin**. -::: - -## Building UAVCAN Firmware - -### ARK Flow - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### Sapog Codebase (Pixhawk ESC 1.4 and Zubax Orel 20) - -Please refer to the [project page](https://github.com/PX4/sapog) to learn how to build and flash this firmware. - -### Zubax GNSS - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### Vectorcontrol ESC Codebase (Pixhawk ESC 1.6 and S2740VC) - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -Before updating firmware via UAVCAN, the Pixhawk ESC 1.6 requires the UAVCAN bootloader be flashed. To build the bootloader, run: - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -After building, the bootloader image is located at `firmware/px4esc_1_6-bootloader.bin`, and the OpenOCD configuration is located at `openocd_px4esc_1_6.cfg`. Follow [these instructions](../uavcan/bootloader_installation.md) to install the bootloader on the ESC. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..bin`. diff --git a/ru/uavcan/notes.md b/ru/uavcan/notes.md deleted file mode 100644 index e5e72492f93dc..0000000000000 --- a/ru/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# Various Notes - -This is a collection of tips and tricks to solve issues when setting up or working with the UAVCAN. - -### Arm but motors not spinning - -If the PX4 Firmware arms but the motors do not start to rotate, check the parameter **UAVCAN\_ENABLE**. It should be set to 3 in order to use the ESCs connected via UAVCAN as output. Moreover, if the motors do not start spinning before thrust is increased, check **UAVCAN\_ESC\_IDLT** and set it to one. - -### Debugging with Zubax Babel - -A great tool to debug the transmission on the UAVCAN bus is the [Zubax Babel](https://zubax.com/products/babel) in combination with the [GUI tool](http://uavcan.org/GUI_Tool/Overview/). They can also be used independently from Pixhawk hardware in order to test a node or manually control UAVCAN enabled ESCs. - - -### UAVCAN devices dont get node ID/FW doesn't update - -PX4 requires an SD card for UAVCAN node allocation and firmware upgrade (both of which happen during boot). Check that there is a (working) SD card present and reboot. - diff --git a/ru/uavcan/pomegranate_systems_pm.md b/ru/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 3954b4e75fe1c..0000000000000 --- a/ru/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate Systems Power Module - -![Module Image](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -Digital Power Module with high resolution current integration, 5V/2A supply with power monitoring, single UAVCAN v0 CANbus interface, and an RGB status LED. - -Detailed setup, configuration, and troubleshooting information can be found on the [manufacturer's device home page](https://p-systems.io/product/power_module). - -## Specifications - - - **Input Voltage:** 6-26V \(2-6S\) - - **Max Continuous Current:** - - **Benchtop:** 40A - - **Forced Cooling:** 100A - - **Max 5V Output Current:** 2A - - **Voltage Resolution:** 0.04 ΔV - - **Current Resolution:** - - **Primary / Battery Bus:** 0.02 ΔA - - **5V bus:** 0.001 ΔA - - **CANbus Termination:** Electronic (on by default) - - **MCU:** STM32 F302K8U - - **Firmware:** [Open Source](https://bitbucket.org/p-systems/firmware/) - - **Electrical Interface:** - - **Power:** Solder pads or XT60PW (right angle, board-mounted connectors) - - **CANbus** Dual JST GH-4 (standard UAVCAN micro-connector) - - **I2C / Serial:** JST GH-5 - - **5V Output:** Solder pads or CANbus / I2C connectors - - **Device Mass:** - - **Without Connectors:** 9g - - **With XT60PW Connectors:** 16g - - - ![Dimensions](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## Configuration - - 1. Enable UAVCAN by setting the [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) parameter to `2` (Sensors Automatic Config) or `3`. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * Battery capacity in mAh: `battery_capacity_mAh` - * Battery voltage when *full*: `battery_full_V`, - * Battery voltage when *empty*: `battery_empty_V` - * Turn on current integration: `enable_current_track` - * (optional) Turn Off CANbus termination resistor :`enable_can_term` - -**Example:** A Power Module with UAVCAN node id `125` connected to a `3S` LiPo with capacity of `5000mAh` can be configured with the following commands: - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -See [device configuration page](https://p-systems.io/product/power_module/configuration) for a full list of parameters. diff --git a/tr/README.md b/tr/README.md index 75081f3ecd050..6202dfaf984fe 100644 --- a/tr/README.md +++ b/tr/README.md @@ -101,8 +101,8 @@ The *Dronecode Calendar* shows important community events for platform users and * [Australia – Melbourne/Sydney/Hobart](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) :::tip +The calendar default timezone is Central European Time (CET). -Calendar defaults to CET. ::: diff --git a/tr/SUMMARY.md b/tr/SUMMARY.md index cfb5f8d067299..b0b20998f5414 100644 --- a/tr/SUMMARY.md +++ b/tr/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C Wiring Quickstart](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X Wiring Quickstart](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 Wiring Quickstart](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal Wiring Quickstart](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md) * [Cube Wiring Quickstart](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [Manufacturer-Supported Autopilots](flight_controller/autopilot_manufacturer_supported.md) * [AirMind MindPX](flight_controller/mindpx.md) * [AirMind MindRacer](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md) * [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [Holybro Kakute F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [Experimental Autopilots](flight_controller/autopilot_experimental.md) * [BeagleBone Blue](flight_controller/beaglebone_blue.md) - * [Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) - * [Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Raspberry Pi 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) * [Raspberry Pi 2/3/4 PilotPi](flight_controller/raspberry_pi_pilotpi.md) * [PilotPi with Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) * [PilotPi with Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [Discontinued Autopilots/Vehicles](flight_controller/autopilot_discontinued.md) + * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S Brushless Whoop](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [CUAV v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [Snapdragon Flight](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [Telemetry Radios](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [FrSky Telemetry](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [CUAV HV pm](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [Optical Flow](sensor/optical_flow.md) * [ARK Flow](dronecan/ark_flow.md) - * [PX4FLOW](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [ESCs & Motors](peripherals/esc_motors.md) * [PWM ESCs and Servos](peripherals/pwm_escs_and_servo.md) * [DShot ESCs](peripherals/dshot.md) * [OneShot ESCs and Servos](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [Camera](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [Companion Computers](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [Companion Computer Peripherals](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [Development](development/development.md) @@ -333,6 +339,7 @@ * [Ubuntu Setup](dev_setup/dev_env_linux_ubuntu.md) * [Windows Setup](dev_setup/dev_env_windows_wsl.md) * [Visual Studio Code IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [Building the Code](dev_setup/building_px4.md) * [Writing your First Application](modules/hello_sky.md) * [Application/Module Template](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim Simulation](simulation/jmavsim.md) * [Multi-Vehicle Sim with JMAVSim](simulation/multi_vehicle_jmavsim.md) * [Gazebo Simulation](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB Message Reference](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink Messaging](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [XRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/xrce_dds.md) * [Modules & Commands](modules/modules_main.md) + * [Autotune](modules/modules_autotune.md) * [Commands](modules/modules_command.md) * [Communication](modules/modules_communication.md) * [Controllers](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [Baro](modules/modules_driver_baro.md) * [Distance Sensor](modules/modules_driver_distance_sensor.md) * [IMU](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [Magnetometer](modules/modules_driver_magnetometer.md) + * [Optical Flow](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [Estimators](modules/modules_estimator.md) * [Simulations](modules/modules_simulation.md) * [System](modules/modules_system.md) @@ -646,14 +660,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 User Guide](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [ROS (1) via ROS 2 Bridge](ros/ros1_via_ros2.md) - * [ROS (1) with MAVROS](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS Installation Guide](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS Sending Custom Messages](ros/mavros_custom_messages.md) - * [ROS/MAVROS with Gazebo Simulation](simulation/ros_interface.md) - * [Gazebo OctoMap Models with ROS (1)](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [ROS/MAVROS Installation on RPi](ros/raspberrypi_installation.md) * [External Position Estimation (Vision/Motion based)](ros/external_position_estimation.md) * [DroneKit](robotics/dronekit.md) diff --git a/tr/advanced/computer_vision.md b/tr/advanced/computer_vision.md index cc7deb235c9aa..e87c367fa1c4c 100644 --- a/tr/advanced/computer_vision.md +++ b/tr/advanced/computer_vision.md @@ -47,8 +47,8 @@ For information about configuring VIO on PX4 see: [Optical Flow](../sensor/optical_flow.md) provides 2D velocity estimation (using a downward facing camera and a downward facing distance sensor). For information about optical flow see: + - [Optical Flow](../sensor/optical_flow.md) - - [PX4Flow Smart Camera](../sensor/px4flow.md) - [EKF > Optical Flow](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## External Resources diff --git a/tr/advanced/gimbal_control.md b/tr/advanced/gimbal_control.md index 6a941cfd8f460..a7effd11074ab 100644 --- a/tr/advanced/gimbal_control.md +++ b/tr/advanced/gimbal_control.md @@ -68,11 +68,11 @@ To run it, use: make px4_sitl gazebo-classic_typhoon_h480 ``` -To just test the mount driver on other models or simulators, make sure the driver runs (using `vmount start`), then configure its parameters. +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## Testing -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. The following describes testing in SITL, but the commands also work on a real device. +The driver provides a simple test command. The following describes testing in SITL, but the commands also work on a real device. Start the simulation with (no parameter needs to be changed for that): @@ -83,7 +83,7 @@ make px4_sitl gazebo-classic_typhoon_h480 Make sure it's armed, eg. with `commander takeoff`, then use the following command to control the gimbal (for example): ``` -vmount test yaw 30 +gimbal test yaw 30 ``` Note that the simulated gimbal stabilizes itself, so if you send MAVLink commands, set the `stabilize` flags to `false`. diff --git a/tr/advanced/package_delivery.md b/tr/advanced/package_delivery.md index 4f0813e9189b6..45ad8c56c4fc0 100644 --- a/tr/advanced/package_delivery.md +++ b/tr/advanced/package_delivery.md @@ -9,7 +9,7 @@ Currently only [Grippers](../peripherals/gripper.md) can be used for package del ::: :::note -The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -57,4 +57,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/tr/advanced_config/bootloader_update.md b/tr/advanced_config/bootloader_update.md index 7f0fbace71554..32f9795a59445 100644 --- a/tr/advanced_config/bootloader_update.md +++ b/tr/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # Bootloader Update -The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO) and [PX4FLOW](../sensor/px4flow.md). +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). This topic explains several methods for updating the Pixhawk bootloader. @@ -8,7 +8,7 @@ This topic explains several methods for updating the Pixhawk bootloader. Hardware usually comes with an appropriate bootloader version pre-installed. A case where you may need to update is newer Pixhawk boards that install FMUv2 firmware: [Firmware > FMUv2 Bootloader Update](../config/firmware.md#bootloader). ::: -## Building the new PX4 bootloader yourself +## Building the new PX4 Bootloader Yourself Boards starting with FMUv6X (STM32H7) use the in-tree PX4 bootloader. Older boards use the bootloader from the legacy [PX4 bootloader](https://github.com/PX4/Bootloader) repository. Please refer to the instructions in the README to learn how to use it. diff --git a/tr/advanced_config/bootloader_update_from_betaflight.md b/tr/advanced_config/bootloader_update_from_betaflight.md index 572d8111329a3..43b826b3d1fc2 100644 --- a/tr/advanced_config/bootloader_update_from_betaflight.md +++ b/tr/advanced_config/bootloader_update_from_betaflight.md @@ -4,7 +4,8 @@ This page documents how to flash the PX4 bootloader onto boards preflashed with There are two options for flashing the bootloader: via *Betaflight Configurator* (easier), or building from source. - + + ### Bootloader Update using Betaflight Configurator To install the PX4 bootloader using the *Betaflight Configurator*: @@ -21,7 +22,38 @@ You should now be able to install PX4 firmware on the board. #### Download Bootloader Source -Download and build the [Bootloader](https://github.com/PX4/Bootloader) via: +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -45,6 +77,18 @@ Both methods require the board to be in DFU mode. To enter DFU mode, hold the bo ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. Once completed, enter DFU mode again to complete the regular flashing. +::: + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/tr/advanced_config/esc_calibration.md b/tr/advanced_config/esc_calibration.md index 013014ecd06f2..a13bcf362fcea 100644 --- a/tr/advanced_config/esc_calibration.md +++ b/tr/advanced_config/esc_calibration.md @@ -42,4 +42,6 @@ Never attempt ESC calibration with props on. :::note -High-quality controllers come with a factory calibration. In *theory* this means that they can be configured by just setting the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) parameters to the values provided in the ESC technical specification. In practice the input range may differ even on high quality controllers, which is why calibration is recommended. ::: +High-quality controllers come with a factory calibration. In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/tr/advanced_config/ethernet_setup.md b/tr/advanced_config/ethernet_setup.md index 5fff3662c3a46..a70031845c455 100644 --- a/tr/advanced_config/ethernet_setup.md +++ b/tr/advanced_config/ethernet_setup.md @@ -14,7 +14,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -77,7 +77,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Once the network configuration has been set you can disconnect the USB cable. 1. Reboot the flight controller to apply the settings. -Note that the above setup gives the flight controller an address on the Ethernet network. You also need to \[configure the Ethernet port\]((#px4-mavlink-serial-port-configuration) to use MAVLink. +Note that the above setup gives the flight controller an address on the Ethernet network. You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -187,55 +187,44 @@ can connect to the PX4 on port `14550` if you don't modify the PX4 Ethernet port ::: -## ROS2 Setup Example - -:::warning -**This section is out of date!** It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. -::: +## ROS 2 Setup Example +:::note Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. +- You have a supported autopilot hardware running PX4 firmware that includes [XRCE-DDS](../middleware/xrce_dds.md) middleware. Note that PX4 v1.14 and later include the required [microdds-client](../modules/modules_system.md#microdds-client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. - You have followed the Ethernet network and port setup as discussed at the top of this page. +::: -In this example it is assumed that you have followed the example to set your IP addresses. +To set up ROS 2: + +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the micro XRCE-DDS client on PX4](../middleware/xrce_dds.md#starting-the-client), either manually or by customizing the system startup script. Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the XRCE-DDS agent on the companion computer](../middleware/xrce_dds.md#starting-the-agent). For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. Note that the remote IP here is your companion computer IP. This by default starts the micrortps_client connected to UDP ports 2019 and 2020 To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) - ``` - micrortps_client start -t UDP -i - ``` - An output like below is expected in the console: ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! + MicroXRCEAgent udp4 -p 8888 ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/tr/advanced_config/imu_factory_calibration.md b/tr/advanced_config/imu_factory_calibration.md index 6ce8addcfc443..636d413b0a092 100644 --- a/tr/advanced_config/imu_factory_calibration.md +++ b/tr/advanced_config/imu_factory_calibration.md @@ -15,7 +15,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/tr/advanced_config/parameter_reference.md b/tr/advanced_config/parameter_reference.md index 2de1ac3ee792a..6e3147c356e69 100644 --- a/tr/advanced_config/parameter_reference.md +++ b/tr/advanced_config/parameter_reference.md @@ -14739,12 +14739,12 @@ table {
          - - + @@ -14795,7 +14795,7 @@ table { - + @@ -14824,14 +14824,14 @@ table { - + - + @@ -14862,6 +14862,13 @@ table { + + + + + + + @@ -15243,7 +15250,7 @@ table { - - + - + @@ -15313,6 +15320,13 @@ table { + + + + + + + - + @@ -15485,14 +15499,14 @@ table { - + - + + + + + + + + + + + + + + @@ -16577,7 +16605,7 @@ table { - + @@ -16929,11 +16957,13 @@ table {
        • 5: Femtomes
        • -
        • 6: NMEA (generic)
        • +
        • 6: NMEA (generic)
        • + +
        • 7: Septentrio (SBF)
        • Reboot required: true

          - + @@ -17003,7 +17033,7 @@ table {

          Reboot required: true

          - + @@ -17021,6 +17051,14 @@ table { + + + + + + + - @@ -17319,9 +17357,16 @@ table { + + + + + + + - + @@ -20626,14 +20671,14 @@ table { - + - + @@ -20775,75 +20820,6 @@ table {
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m
          EKF2_AID_MASK (INT32)Integer bitmask controlling data fusion and aiding methods

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • -
          • 1: use optical flow
          • +
          Will be removed after v1.14 release

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • +
          • 1: unused
          • 2: unused
          • 3: unused
          • 4: unused
          • -
          • 5: multi-rotor drag fusion
          • +
          • 5: unused
          • 6: unused
          • 7: unused
          • 8: unused
          • @@ -14765,7 +14765,7 @@ table {
          EKF2_ARSP_THR (FLOAT)Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

          Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

          [0.0, ?] 0.0 m/s
          EKF2_BARO_CTRL (INT32)Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

          Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

          Enabled (1)
          EKF2_BCOEF_X (FLOAT)X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^2
          EKF2_BCOEF_Y (FLOAT)Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^27
          EKF2_DRAG_CTRL (INT32)Multirotor wind estimation selection

          Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

          Disabled (0)
          EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

          Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

          EKF2_MAG_TYPE (INT32)Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

          Values:
            +
          Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

          Values:
          • 0: Automatic
          • 1: Magnetic heading
          • @@ -15266,12 +15273,12 @@ table {
          EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] 0.250.20 rad/s
          EKF2_MCOEF (FLOAT)Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s5000000 us
          EKF2_OF_CTRL (INT32)Optical flow aiding

          Comment: Enable optical flow fusion.

          Disabled (0)
          EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15471,7 +15485,7 @@ table {
          EKF2_RNG_A_HMAX (FLOAT)Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m
          EKF2_RNG_A_VMAX (FLOAT)Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s
          EKF2_RNG_CTRL (INT32)Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
            +
          Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          Values:
          • 0: Disable range fusion
          • 1: Enabled (conditional mode)
          • @@ -16496,6 +16510,20 @@ table {
          -30.0 deg
          FW_THR_ASPD_MAX (FLOAT)Throttle at max airspeed

          Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

          [0, 1] (0.01)0.
          FW_THR_ASPD_MIN (FLOAT)Throttle at min airspeed

          Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

          [0, 1] (0.01)0.
          FW_THR_IDLE (FLOAT) Idle throttle

          Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

          FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

          Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

          [0.0, 2.0] (0.05)0.30.1
          [0, 5] [0, 7] 1
          [0, 5] [0, 6] 1
          0
          GPS_PITCH_OFFSET (FLOAT)Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          +
          [-90, 90] 0.deg
          GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17094,7 +17132,7 @@ table {
          GPS_YAW_OFFSET (FLOAT)Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          +
          Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0.Disabled (0)
          CA_HELI_YAW_CP_O (FLOAT)Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1)0.0
          CA_HELI_YAW_CP_S (FLOAT)Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000rpm
          MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500rpm
          MODAL_IO_SDIR1 (INT32)
          -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NameDescription[Min, Max] (Incr.)DefaultUnits
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          Values:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20868,15 +20844,8 @@ table { - - - - - - - - - + + @@ -21031,19 +21000,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21236,20 +21212,6 @@ table { - - - - - - - - - - - - - - @@ -21534,6 +21496,13 @@ table { + + + + + + + + + + + + + + @@ -22164,7 +22140,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32334,6 +32310,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          Values:
            @@ -22123,6 +22092,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32696,6 +32680,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameDescription[Min, Max] (Incr.)DefaultUnits
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          Values:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32741,9 +32802,9 @@ table { - + - + @@ -32753,13 +32814,6 @@ table { - - - - - - - @@ -32830,14 +32884,14 @@ table { - + - + @@ -32865,14 +32919,14 @@ table { - + - + @@ -32909,7 +32963,7 @@ table { - + diff --git a/tr/advanced_config/tuning_the_ecl_ekf.md b/tr/advanced_config/tuning_the_ecl_ekf.md index 7e26506ecab51..b9a7851784116 100644 --- a/tr/advanced_config/tuning_the_ecl_ekf.md +++ b/tr/advanced_config/tuning_the_ecl_ekf.md @@ -325,7 +325,7 @@ Fixed wing platforms can take advantage of an assumed sideslip observation of ze ### Multicopter Wind Estimation using Drag Specific Forces -Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This is enabled by setting bit position 5 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter to `true`. +Multi-rotor platforms can take advantage of the relationship between airspeed and drag force along the X and Y body axes to estimate North/East components of wind velocity. This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). The relationship between airspeed and specific force (IMU accelerometer measurements) along the X and Y body axes is controlled by the [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X), [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) and [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) parameters which set the ballistic coefficients for flight in the X and Y directions, and the momentum drag produced by the propellers, respectively. The amount of specific force observation noise is set by the [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) parameter. @@ -341,33 +341,21 @@ A good tuning is obtained as follows: [Optical flow](../sensor/optical_flow.md) data will be used if the following conditions are met: * Valid range finder data is available. -* Bit position 1 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * The quality metric returned by the flow sensor is greater than the minimum requirement set by the [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) parameter. ### External Vision System -Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* External vision system horizontal position data will be used if bit position 3 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. For more details about the configuration of height sources, [click here](#height). -* External vision system velocity data will be used if bit position 8 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision system orientation data will be used for yaw estimation if bit position 4 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. -* External vision reference frame offset will be estimated and used to rotate the external vision system data if bit position 6 in the [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) parameter is true. +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -Either bit 4 (`EV_YAW`) or bit 6 (`EV_ROTATE`) should be set to true, but not both together. Following [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) values are supported when using with an external vision system. +- `0`: Horizontal position data +- `1`: Vertical position data. Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -| EKF_AID_MASK value | Set bits | Description | -| -------------------- | ----------------------------- | ------------------------------------ | -| 320 | EV_VEL + ROTATE_EV | Heading w.r.t. North | -| 24 | EV_POS + EV_YAW | Heading w.r.t. external vision frame | -| 72 | EV_POS + ROTATE_EV | Heading w.r.t. North | -| 272 | EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. North | - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. The EKF considers uncertainty in the visual pose estimate. This uncertainty information can be sent via the covariance fields in the MAVLink [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) message or it can be set through the parameters [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE), [EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) and [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE). You can choose the source of the uncertainty with [EKF2_EV_NOISE_MD](../advanced_config/parameter_reference.md#EKF2_EV_NOISE_MD). @@ -400,7 +388,7 @@ For this reason, no claims for accuracy relative to the legacy combination of `a EKF outputs, states and status data are published to a number of uORB topics which are logged to the SD card during flight. The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/ecl_ekf/process_logdata_ekf.py). To use this script file, cd to the `Tools/ecl_ekf` directory and enter `python process_logdata_ekf.py `. This saves performance metadata in a csv file named **.mdat.csv** and plots in a pdf file named `.pdf`. @@ -408,14 +396,14 @@ Multiple log files in a directory can be analysed using the [batch\_process\_log ### Output Data -* Attitude output data is found in the [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_attitude.msg) message. -* Local position output data is found in the [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_local_position.msg) message. -* Global \(WGS-84\) output data is found in the [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_global_position.msg) message. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### States -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). The index map for states\[32\] is as follows: +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for states\[32\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\) @@ -429,7 +417,7 @@ Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilo ### State Variances -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). The index map for covariances\[28\] is as follows: +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). The index map for covariances\[28\] is as follows: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\)^2 @@ -443,10 +431,10 @@ Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Aut ### Observation Innovations & Innovation Variances -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg). The messages all have the same field names/types (but different units). +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). The messages all have the same field names/types (but different units). :::note -The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +The messages have the same fields because they are generated from the same field definition. The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -506,7 +494,7 @@ The index map is as follows: ### EKF Errors -The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF contains internal error checking for badly conditioned state and covariance updates. Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### Observation Errors @@ -517,7 +505,7 @@ There are two categories of observation faults: Both of these can result in observation data being rejected for long enough to cause the EKF to attempt a reset of the states using the sensor observations. All observations have a statistical confidence checks applied to the innovations. The number of standard deviations for the check are controlled by the `EKF2_*_GATE` parameter for each observation type. -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio`: ratio of the largest magnetometer innovation component to the innovation test limit * `vel_test_ratio`: ratio of the largest velocity innovation component to the innovation test limit @@ -526,11 +514,11 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio`: ratio of the true airspeed innovation to the innovation test limit * `hagl_test_ratio`: ratio of the height above ground innovation to the innovation test limit -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS Quality Checks -The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +The EKF applies a number of GPS quality checks before commencing GPS aiding. These checks are controlled by the [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) and `EKF2_REQ_*` parameters. The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. This integer will be zero when all required GPS checks have passed. If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF Numerical Errors @@ -541,7 +529,7 @@ To prevent this, every covariance and state update step contains the following e * If the innovation variance is less than the observation variance (this requires a negative state variance which is impossible) or the covariance update will produce a negative variance for any of the states, then: * The state and covariance update is skipped * The corresponding rows and columns in the covariance matrix are reset - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * State variances (diagonals in the covariance matrix) are constrained to be non-negative. * An upper limit is applied to state variances. * Symmetry is forced on the covariance matrix. @@ -552,8 +540,8 @@ After re-tuning the filter, particularly re-tuning that involve reducing the noi The most common cause of EKF height diverging away from GPS and altimeter measurements during flight is clipping and/or aliasing of the IMU measurements caused by vibration. If this is occurring, then the following signs should be evident in the data -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[2\] and [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[5\] will both have the same sign. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio will be greater than 1.0 +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 The recommended first step is to ensure that the autopilot is isolated from the airframe using an effective isolation mounting system. An isolation mount has 6 degrees of freedom, and therefore 6 resonant frequencies. As a general rule, the 6 resonant frequencies of the autopilot on the isolation mount should be above 25Hz to avoid interaction with the autopilot dynamics and below the frequency of the motors. @@ -586,16 +574,16 @@ The most common causes of position divergence are: Determining which of these is the primary cause requires a methodical approach to analysis of the EKF log data: -* Plot the velocity innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio -* Plot the horizontal position innovation test ratio - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).pos\_test\_ratio -* Plot the height innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio -* Plot the magnetometer innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).mag\_test\_ratio -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* Plot the IMU delta angle state estimates - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).states\[10\], states\[11\] and states\[12\] +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * Plot the EKF internal high frequency vibration metrics: - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] During normal operation, all the test ratios should remain below 0.5 with only occasional spikes above this as shown in the example below from a successful flight: @@ -629,7 +617,7 @@ Bad yaw alignment causes a velocity test ratio that increases rapidly when the v ### Determination of Poor GPS Accuracy -Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +Poor GPS accuracy is normally accompanied by a rise in the reported velocity error of the receiver in conjunction with a rise in innovations. Transient errors due to multipath, obscuration and interference are more common causes. Here is an example of a temporary loss of GPS accuracy where the multi-rotor started drifting away from its loiter location and had to be corrected using the sticks. The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS glitch - test ratios](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/tr/assembly/cable_wiring.md b/tr/assembly/cable_wiring.md index 851ba30a9d770..caae58b5506df 100644 --- a/tr/assembly/cable_wiring.md +++ b/tr/assembly/cable_wiring.md @@ -3,7 +3,7 @@ Cables are a common source of [electromagnetic interference (EMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference), which can cause problems including flyways, "toilet bowling" and generally poor flight. These problems can be avoided by using appropriate cabling in the UAV. The following basic concepts should be kept in mind when designing drone cabling: -* High-Power and signal cables should be separated as much as is practical +* High-Power and signal cables should be separated as much as is practical. * Cable lengths should be the minimum needed to enable easy handling of wired components. The wire tension should be adequate to survive possible airframe deformations even in a crash landing (wires must not be the first thing to break). * Cable loops to reduce excess length should be avoided - use shorter lengths! * For digital signals you can decrease the baudrate to reduce radiated energy and increase the robustness of data transfer. This means that you may be able to use longer cables when high data rates are not needed. @@ -15,7 +15,7 @@ Signalling protocols have different characteristics, and therefore the cables us This topic provides specific guidance of cabling for different signalling protocols, along with the [colour coding](#cable-colour-coding) used by a number different drone hardware vendors. -### I²C cables +### I2C cables The [I2C bus](https://en.wikipedia.org/wiki/I%C2%B2C) is widely used for connecting sensors. Cable colors from several vendors are specified in following table. diff --git a/tr/assembly/mount_gps_compass.md b/tr/assembly/mount_gps_compass.md index 64711c417340b..fc3b946b88c11 100644 --- a/tr/assembly/mount_gps_compass.md +++ b/tr/assembly/mount_gps_compass.md @@ -8,9 +8,9 @@ The diagram below shows the heading marker on the Pixhawk 4 and compass. ## Compass Orientation -The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#orientation-definition). +The compass can be mounted in any of the standard MAVLink orientations defined in [MAV_SENSOR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION). The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. Otherwise you can directly select the appropriate value in [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) for up to three compasses. :::warning You must mount the compass in a supported orientation! diff --git a/tr/assembly/quick_start_cube.md b/tr/assembly/quick_start_cube.md index ecde53bce8fd6..0564401272f26 100644 --- a/tr/assembly/quick_start_cube.md +++ b/tr/assembly/quick_start_cube.md @@ -163,7 +163,7 @@ Motors/servos are connected to the **MAIN** and **AUX** ports in the order speci This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/tr/assembly/quick_start_durandal.md b/tr/assembly/quick_start_durandal.md index 6354b25628c17..7319df6f3a7e7 100644 --- a/tr/assembly/quick_start_durandal.md +++ b/tr/assembly/quick_start_durandal.md @@ -1,6 +1,6 @@ # Durandal Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the Holybro [Durandal](../flight_controller/durandal.md)® flight controller and connect its most important peripherals. @@ -57,7 +57,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -86,14 +86,10 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: - ### Pixhawk 4 Power Module (PM07) -The [Pixhawk 4 Power Module (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Power](../assembly/quick_start_pixhawk4.md#power) documentation. @@ -109,7 +105,7 @@ It has the following characteristics/limits: - 80mm XT60 connector wire (1) :::note -See also [PM07 Quick Start Guide](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro). +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### Battery Configuration @@ -201,7 +197,7 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Durandal Overview](../flight_controller/durandal.md) -- [Durandal Technical Data Sheet](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal Pinouts](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal Schematics) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/tr/assembly/quick_start_holybro_pix32_v5.md b/tr/assembly/quick_start_holybro_pix32_v5.md index 22608e9b017b3..7a9d1e14f0b1f 100644 --- a/tr/assembly/quick_start_holybro_pix32_v5.md +++ b/tr/assembly/quick_start_holybro_pix32_v5.md @@ -1,6 +1,6 @@ # Pix32 v5 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® flight controller and connect its most important peripherals. @@ -9,7 +9,7 @@ This quick start guide shows how to power the [Holybro Pix32v5](../flight_contro ## Unboxing -Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html) (UBLOX NEO-M8N). +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). The content of the box with the *PM02 V3* power module and *Pixhawk 4 GPS/Compass* is shown below. The box also includes a pinout guide and power module instructions, and Base board (not shown on the schematic below). @@ -22,7 +22,7 @@ The image below shows how to connect the most important sensors and peripherals ![Pix32 v5 Wiring Overview](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -More information about available ports can be found [here](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf). +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## Mount and Orient Controller @@ -42,7 +42,7 @@ Do not use vibration-isolation foam to mount the controller (double sided tape i ## GPS + Compass + Buzzer + Safety Switch + LED -Pix32 v5 is designed to work well with the [Pixhawk 4 GPS module](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. ![Pix32 v5 with GPS](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -59,7 +59,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -87,9 +87,6 @@ The power module has the following characteristics/limits: - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: ### Battery Configuration @@ -155,7 +152,7 @@ The wiring and configuration of optional/less common components is covered withi ## Pinouts -[Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## Configuration @@ -168,8 +165,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pix32 v5 Overview](../flight_controller/holybro_pix32_v5.md) (Overview page) -- [Pix32 v5 Technical Data Sheet](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 Base Schematic Diagram](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 Base Schematic Diagram](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 Base Components Layout](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). diff --git a/tr/assembly/quick_start_pixhawk.md b/tr/assembly/quick_start_pixhawk.md index d3bcdbd01eb67..8634cb6f80c1e 100644 --- a/tr/assembly/quick_start_pixhawk.md +++ b/tr/assembly/quick_start_pixhawk.md @@ -92,7 +92,7 @@ Telemetry radios may be used to communicate and control a vehicle in flight from The mappings between MAIN/AUX output ports and motor/servos for all supported air and ground frames are listed in the [Airframe Reference](../airframes/airframe_reference.md). -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/tr/assembly/quick_start_pixhawk4.md b/tr/assembly/quick_start_pixhawk4.md index d3ba4ee427ce0..60e57cf121f42 100644 --- a/tr/assembly/quick_start_pixhawk4.md +++ b/tr/assembly/quick_start_pixhawk4.md @@ -1,6 +1,6 @@ # Pixhawk 4 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. ::: +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 4](../flight_controller/pixhawk4.md)® flight controller and connect its most important peripherals. @@ -146,7 +146,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/tr/assembly/quick_start_pixhawk4_mini.md b/tr/assembly/quick_start_pixhawk4_mini.md index e1d9188d3041f..400df8635588e 100644 --- a/tr/assembly/quick_start_pixhawk4_mini.md +++ b/tr/assembly/quick_start_pixhawk4_mini.md @@ -1,6 +1,6 @@ # *Pixhawk 4 Mini* Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [*Pixhawk® 4 Mini*](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. @@ -126,7 +126,7 @@ Motors/servos are connected to the **MAIN OUT** ports in the order specified for This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/tr/assembly/quick_start_pixhawk5x.md b/tr/assembly/quick_start_pixhawk5x.md index 4e19cc0ad2570..8b839f7434a42 100644 --- a/tr/assembly/quick_start_pixhawk5x.md +++ b/tr/assembly/quick_start_pixhawk5x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 5x Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk® 5X](../flight_controller/pixhawk5x.md) flight controller and connect its most important peripherals. @@ -35,7 +35,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk5X Standard Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -101,7 +101,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) @@ -121,7 +121,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: @@ -133,7 +133,7 @@ The wiring and configuration of optional/less common components is covered withi ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Configuration @@ -146,9 +146,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 Doc Overview page) -- [Pixhawk 5X Overview & Specification](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) -- [Pixhawk 5X Pinouts](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) -- [PM02D Power Module Manual](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (Holybro) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5X reference design pinout](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/tr/assembly/quick_start_pixhawk6c.md b/tr/assembly/quick_start_pixhawk6c.md index 1dd81a01d5695..0b273a91108fe 100644 --- a/tr/assembly/quick_start_pixhawk6c.md +++ b/tr/assembly/quick_start_pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -11,13 +11,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -34,7 +27,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -97,7 +90,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/tr/assembly/quick_start_pixhawk6x.md b/tr/assembly/quick_start_pixhawk6x.md index 55f80772bb098..f81e2dee9ae4f 100644 --- a/tr/assembly/quick_start_pixhawk6x.md +++ b/tr/assembly/quick_start_pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -40,7 +40,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/tr/can/README.md b/tr/can/README.md index deb8f145ec975..df0d9c89bb8b4 100644 --- a/tr/can/README.md +++ b/tr/can/README.md @@ -8,8 +8,7 @@ PX4 supports two software protocols for communicating with CAN devices: - [Cyphal](https://opencyphal.org): PX4 support is a "work in progress". Cyphal is a much newer protocol which allows more flexibility and configuration, especially on larger and more complex vehicles. It has not yet seen significant adoption. :::note -Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. -In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -18,9 +17,9 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). -Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -28,7 +27,7 @@ The following diagram shows an example of a CAN bus connecting a flight controll The diagram does not show any power wiring. Refer to your manufacturer instructions to confirm whether components require separate power or can be powered from the CAN bus itself. -For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -38,7 +37,7 @@ Other (non-Pixhawk compatible) devices may use different connectors. However, as ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. ## Firmware diff --git a/tr/companion_computer/README.md b/tr/companion_computer/README.md index b98ad351061b7..135a690fa2408 100644 --- a/tr/companion_computer/README.md +++ b/tr/companion_computer/README.md @@ -22,7 +22,7 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). @@ -45,8 +45,8 @@ The companion computer needs to run software that communicates with the flight c Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -61,7 +61,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. See [Ethernet Setup](../advanced_config/ethernet_setup.md) for instructions. @@ -76,5 +75,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/tr/companion_computer/companion_computer_peripherals.md b/tr/companion_computer/companion_computer_peripherals.md index ab9fed95ee060..39e3b3e5e0bbf 100644 --- a/tr/companion_computer/companion_computer_peripherals.md +++ b/tr/companion_computer/companion_computer_peripherals.md @@ -9,7 +9,7 @@ Typical companion computer work with Pixhawk requires a companion link to transm There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/xrce_dds.md). ::: ### FTDI Devices diff --git a/tr/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/tr/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 939fcab99ca0d..b4f5e1f428042 100644 --- a/tr/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/tr/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -6,7 +6,7 @@ The [Holybro Pixhawk RPi CM4 Baseboard](http://www.holybro.com/product/pixhawk-r The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -54,7 +54,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/tr/companion_computer/pixhawk_companion.md b/tr/companion_computer/pixhawk_companion.md index 383e998761a70..a29f841284ba0 100644 --- a/tr/companion_computer/pixhawk_companion.md +++ b/tr/companion_computer/pixhawk_companion.md @@ -21,9 +21,11 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/XRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the XRCE-DDS client on `TELEM2`(see [XRCE-DDS > Starting the client](../middleware/xrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,7 +35,7 @@ If you're connecting using a serial port, wire the port according to the instruc Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. The `TELEM2` to FTDI wiring map is shown below. | TELEM2 | | FTDI |   | | ------ | --------- | ---- | ---------------------- | @@ -44,7 +46,9 @@ The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring b | 5 | RTS (out) | 2 | FTDI CTS (brown) (in) | | 6 | GND | 1 | FTDI GND (black) | -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. diff --git a/tr/companion_computer/pixhawk_rpi.md b/tr/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..e6e4a305e82cd --- /dev/null +++ b/tr/companion_computer/pixhawk_rpi.md @@ -0,0 +1,297 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +| PX4 TELEM2 Pin | RPi GPIO Pin | +| -------------- | ---------------------- | +| UART5_TX (2) | RXD (GPIO 15 - pin 10) | +| UART5_RX (3) | TXD (GPIO 14 - pin 8) | +| GND (6) | Ground (pin 6) | + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +| `TELEM2` | RPi GPIO | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| ![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) | + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +| Pins | Signal | Voltage | +| --------- | --------------- | ------- | +| 1 (Red) | VCC | +5V | +| 2 (Black) | UART5_TX (out) | +3.3V | +| 3 (Black) | UART5_RX (in) | +3.3V | +| 4 (Black) | UART5_CTS (in) | +3.3V | +| 5 (Black) | UART5_RTS (out) | +3.3V | +| 6 (Black) | GND | GND | + +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. Generally the other radio needs to be connected to the ground station USB port. If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. Note that ROS 2 versions target particular Ubuntu versions. We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). However we will install and use a simple developer MAVLink GCS called `mavproxy`. This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + XRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + +:::note +Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + +::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. In the next section we'll set up the both Pixhawk and RPi to use XRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and XRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [XRCE-DDS](../middleware/xrce_dds.md) pages cover the options for setting up the XRCE-DDS and ROS, focussing on ROS 2 "Foxy". This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + XRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [XRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#MAV_1_CONFIG) disable MAVLink on TELEM2 and enable the XRCE-DDS client on TELEM2, respectively. The `SER_TEL2_BAUD` rate sets the comms link data rate. +You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note +You will need to reboot the flight controller to apply any changes to these parameters. +::: + +1. Check that the [microdds_client](../modules/modules_system.md#microdds-client) module is now running. YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + microdds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +microdds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [XRCE-DDS > XRCE-DDS Agent Installation](../middleware/xrce_dds.md#xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/tr/complete_vehicles/README.md b/tr/complete_vehicles/README.md index faeb7ccb44659..e24b0884fa098 100644 --- a/tr/complete_vehicles/README.md +++ b/tr/complete_vehicles/README.md @@ -45,7 +45,7 @@ They allow you to use parts that are known to work, and to fly a vehicle that is ::: * Multicopter - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/tr/complete_vehicles/crazyflie2.md b/tr/complete_vehicles/crazyflie2.md index 6c5647cb4071f..58ed4e0aa127b 100644 --- a/tr/complete_vehicles/crazyflie2.md +++ b/tr/complete_vehicles/crazyflie2.md @@ -36,7 +36,7 @@ The main hardware documentation is here: https://wiki.bitcraze.io/projects:crazy * [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck): contains an optical flow sensor to measure movements of the ground and a distance sensor to measure the distance to the ground. This will be useful for precise altitude and position control. * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## Flashing PX4 @@ -117,7 +117,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -161,6 +161,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these :::tip If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching *cfbridge* in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib. + ``` make venv ``` @@ -208,7 +209,7 @@ Since the onboard barometer is highly susceptible to wind disturbances created b ## Position Control -With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Moreover, the flow deck shares the same SPI bus as the SD card deck, therefore logging at high rate on SD card is not recommended when flying in *Position mode*. +With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Moreover, the flow deck shares the same SPI bus as the SD card deck, therefore logging at high rate on SD card is not recommended when flying in *Position mode*. :::note A ulog for flight in *Position* mode is available [here](https://logs.px4.io/plot_app?log=a0e68bf1-e905-410f-b828-f6146dba9d45). This can be used as a reference to compare your flight performance. @@ -252,6 +253,7 @@ To connect to Crazyflie 2.0 via MAVROS: - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/tr/complete_vehicles/crazyflie21.md b/tr/complete_vehicles/crazyflie21.md index 2f46f093be57e..dd91691428ec4 100644 --- a/tr/complete_vehicles/crazyflie21.md +++ b/tr/complete_vehicles/crazyflie21.md @@ -47,7 +47,7 @@ Useful peripheral hardware includes: * [Buzzer deck](https://store.bitcraze.io/collections/decks/products/buzzer-deck) Audio feedback on system events, like low battery or charging completed. * [Breakout deck](https://store.bitcraze.io/collections/decks/products/breakout-deck): Expansion board that gives you the ability to test new hardware easily without soldering. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): High speed onboard logging to a micro SD card -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Assemble Crazyflie 2.1 @@ -138,7 +138,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.1 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` diff --git a/tr/complete_vehicles/holybro_kopis2.md b/tr/complete_vehicles/holybro_kopis2.md index 28e4ee5f41773..9f0988ad067aa 100644 --- a/tr/complete_vehicles/holybro_kopis2.md +++ b/tr/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## Where to Buy The *Kopis 2* can be bought from a number of vendors, including: -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) In addition you will need: + - An RC transmitter. The *Kopis 2* can ship with an FrSky receiver or no receiver at all. - LiPo battery and charger. - FPV goggles if you want to fly FPV. There are many compatible options, including these ones from [Fatshark](https://www.fatshark.com/product-page/dominator-v3). You can also use DJI FPV goggles if you have the HDV version of the Kopis 2. diff --git a/tr/complete_vehicles/intel_aero.md b/tr/complete_vehicles/intel_aero.md index 57cfb24fe1229..a8c747dde17c9 100644 --- a/tr/complete_vehicles/intel_aero.md +++ b/tr/complete_vehicles/intel_aero.md @@ -3,219 +3,5 @@ :::warning This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -PX4 v1.11 is the last release that supports this platform. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -The *Intel Aero Ready to Fly Drone*® is a UAV development platform. Part of this is the *Intel Aero Compute Board*, running Linux on a Quad-core CPU. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. These are integrated in the same package on the *Intel Aero Ready to Fly Drone*, which also includes the vision accessory kit. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## Introduction - -The main documentation on the [official wiki](https://github.com/intel-aero/meta-intel-aero/wiki) explains how to setup, update and connect to the board, and how to do development on the Linux side. The instructions in this topic concentrate on updating the firmware on the microcontroller from a development tree. - -It's important to update to the latest image available since some instructions change between releases. You can check the BIOS and distro version by connecting to the board and running the following command: - -``` -get_aero_version.py -``` - -The instructions here are tested with the following version: - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Setup Intel Aero using Ubuntu - -In order to install Ubuntu on Intel Aero, the following equipment is needed: - -1. Power supply (battery or network cable) -1. Micro HDMI to HDMI cable to attach a monitor -1. Micro USB3 to USB2 female adapter -1. USB Hub to attach mouse and keyboard - -Follow the linked instructions from [Intel Aero wiki > Installing Ubuntu on Intel Aero](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero): - -1. [Upgrade Yocto first](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (optional) -1. [OS](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [Intel Aero Repository](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -As soon as the steps under *Intel Aero Repository* (above) are completed the Aero kernel is installed. From this point forwards, always boot using this kernel. - -Follow the instructions to flash the BIOS, FPGA and Flight Controller. Open the MAVLink router config file: **/etc/mavlink-router/main.conf** - -Include the laptop IP as a UDP Endpoint by adding the following lines to the configuration file. The IP address must be set to the one of the laptop. To find the IP address of the laptop, execute: `ifconfig`. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -After all those steps are completed, the drone should automatically connect to *QGroundControl* running on the laptop. - -Next install ROS, by following the [instructions here](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS). - -### RealSense Camera - -1. RealSense SDK - - Follow the steps to install the RealSense SDK listed on the [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk). When cloning the repository, the legacy branch needs to be used for the R200 model. If the D435 or D415 is used, the master branch needs to be cloned. All other steps are the same and the branches can be just switched back and forth if the camera is changed. - - If the RealSense R200 is used, it can already be started over a ROS node using: - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - If any D400 series camera is used, follow the next step to install a different ROS wrapper. - -1. ROS Wrapper for D400 series RealSense - - Follow the instructions in [Install Intel RealSense ROS from Sources](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) to install a catkin workspace and clone the RealSense software. - - Install the udev rules using: - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - Now the RealSense can be started over a ROS node using: - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### Obstacle Avoidance - -To run the PX4 obstacle avoidance software, install catkin first: - -``` -apt install python-catkin-tools -``` - -Create a catkin workspace and initialize it. Then clone the avoidance repository into the source space, or use a symbolic link to the source space. Build the package and start the ROS node using: - -``` -catkin build local_planner - -roslaunch local_planner local_planner_aero.launch -``` - -## Flashing PX4 software - -After setting up the PX4 development environment, follow these steps update the PX4 software: - -1. Do a full update of all software on the vehicle (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release) -1. Grab the [Firmware](https://github.com/PX4/PX4-Autopilot) -1. Compile with `make intel_aerofc-v1_default` -1. Configure the target hostname - - If your system resolves link local names you don't have to do anything and you can skip this step. You can test it by trying to ssh into `intel-aero.local` after connecting to it either via WiFi or USB: - - ``` - ssh root@intel-aero.local - ``` - - If it doesn't work you can try giving the IP that will be used by the upload script: - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. Upload with: `make intel_aerofc-v1_default upload` - - -## Connecting QGroundControl via Network - -1. Make sure you are connected to the board with WiFi or USB Network -1. SSH to the board and make sure MAVLink forwarding runs. By default it automatically starts when booting. It can be started manually with: - ``` - systemctl start mavlink-router - ``` -1. Start *QGroundControl* and it should automatically connect. -1. Instead of starting *QGroundControl*, you can open a [MAVLink shell](../debug/mavlink_shell.md) using the script: - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## Connecting LeddarOne Range Finder - -Connect the [LeddarOne](../sensor/leddar_one.md) to the Aero telemetry port. The pinout for the LeddarOne and Aero telemetry port (TELEM1) are as follows. - -| Pin | Aerofc TELEMETRY | LeddarOne | -| --- | ---------------- | --------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 3 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -To enable the rangefinder set the [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) parameter to TELEM1 and reboot the board (instructions for setting parameters [available here](../advanced_config/parameters.md)). - - -## Connecting Lidar Lite Range Finder - -:::warning -The Lidar Lite is not recommended for use with *Intel Aero Ready to Fly Drone*® due to measurements spikes. -::: - -The following instructions are for a [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3 connected via I2C. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. The pinout for both of them can be found below. We recommend using the TELEMETRY port as it is not being used. If your TELEMETRY port is already occupied, a splitter can be used to share the I2C connection (works on any I2C port). Check the images below for the splitter setup. - -In addition it is recommended to use a electrolytic capacitor for the Lidar Lite I2C connection to reduce spikes in the distance readings (see [here](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) on page 3). - -The pinout for the Lidar Lite V3 and Aero telemetry port are as follows - -| Pin | Aerofc TELEMETRY | Lidar Lite V3 | -| --- | ---------------- | ------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 3 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| pin | Aerofc COMPASS | Lidar Lite V3 | -| --- | -------------- | ------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 3 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C splitter](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero LidarLite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Using Optical Flow on the Aero - -The *Intel Aero Ready to Fly Drone*® comes with a preinstalled optical flow binary on the compute board (Linux OS version 1.6 or higher), which enables it to stably fly based on optical flow velocity estimation. In order to use optical flow, a range sensor has to be installed first (see above). - -To use the optical flow, run the following command in a console on the vehicle's compute board: -``` -systemctl start aero-optical-flow -``` - -If you want to start the optical flow binary at boot, use -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -In addition, the following parameter values should be set in the flight controller. - -| Parameter | Value | -| -------------------------------------------------------------------------- | ----- | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 | -| [EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 | -| [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 | diff --git a/tr/complete_vehicles/px4_vision_kit.md b/tr/complete_vehicles/px4_vision_kit.md index 402f18b940c6e..074194332ba52 100644 --- a/tr/complete_vehicles/px4_vision_kit.md +++ b/tr/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision Autonomy Development Kit -The [*PX4 Vision Autonomy Development Kit*](http://www.holybro.com/product/px4-vision/) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![Overview](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -14,8 +14,8 @@ The guide explains the minimal additional setup required to get the vehicle read ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://shop.holybro.com/px4-vision_p1225.html?) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## Px4 Vision Guide Content - [Warnings & Notifications](#warnings-and-notifications) @@ -24,7 +24,7 @@ The guide explains the minimal additional setup required to get the vehicle read - [First-time Setup](#first-time-setup) - [Fly the Drone with avoidance](#fly-the-drone-with-avoidance) - [Development using the Kit](#development-using-the-kit) -- [Px4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [Other Development Resources](#other-development-resources) - [How to get Technical Support](#how-to-get-technical-support) @@ -52,8 +52,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). The PX4 Vision DevKit contains following components: - Core Components: @@ -340,7 +339,7 @@ Modification of PX4 code is not *needed* to meet most computer vision use cases. ## PX4 Vision Carrier Board Pinouts -The Carrier board pinouts can be download from [Holybro's website](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf). +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). ## Other Development Resources @@ -350,7 +349,6 @@ The Carrier board pinouts can be download from [Holybro's website](http://www.ho - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 Avoidance software/documentation](https://github.com/PX4/PX4-Avoidance) - [Path Planning Interface](../computer_vision/path_planning_interface.md) -- [Px4 Vision Carrier Board Pinouts](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) ## How to get Technical Support diff --git a/tr/computer_vision/visual_inertial_odometry.md b/tr/computer_vision/visual_inertial_odometry.md index dff8c7622ba99..b5809914f90d8 100644 --- a/tr/computer_vision/visual_inertial_odometry.md +++ b/tr/computer_vision/visual_inertial_odometry.md @@ -87,7 +87,7 @@ The following parameters must be set to use external position information with E | Parameter | Setting for External Position Estimation | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | Set *vision position fusion*, *vision velocity fusion*, *vision yaw fusion* and *external vision rotation* according to your desired fusion model. | +| [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. | | [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | Set to *Vision* to use the vision as the reference sensor for altitude estimation. | | [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | Set to the difference between the timestamp of the measurement and the "actual" capture time. For more information see [below](#tuning-EKF2_EV_DELAY). | | [EKF2_EV_POS_X](../advanced_config/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced_config/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced_config/parameter_reference.md#EKF2_EV_POS_Z) | Set the position of the vision sensor with respect to the vehicles body frame. | diff --git a/tr/concept/architecture.md b/tr/concept/architecture.md index 9bccae2296fb2..4cc9575cd803b 100644 --- a/tr/concept/architecture.md +++ b/tr/concept/architecture.md @@ -103,7 +103,7 @@ There are 2 different ways that a module can be executed: The advantage of running modules on a work queue is that it uses less RAM, and potentially results in fewer task switches. The disadvantages are that *work queue tasks* are not allowed to sleep or poll on a message, or do blocking IO (such as reading from a file). Long-running tasks (doing heavy computation) should potentially also run in a separate task or at least a separate work queue. :::note -Tasks running on a work queue do not show up in [`top`](../modules/modules_command.html#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. ::: ### Background Tasks diff --git a/tr/concept/custom_mixer_payload.md b/tr/concept/custom_mixer_payload.md deleted file mode 100644 index ce2cbfc04c64e..0000000000000 --- a/tr/concept/custom_mixer_payload.md +++ /dev/null @@ -1,90 +0,0 @@ -# Custom Payload Mixers - -This topic shows how to add a custom [mixer](../concept/mixing.md) for programmatically controlling a custom payload (e.g., an electromagnetic gripper). - -The topic is intended for developers who want to support payload types that do not have existing control group definitions (e.g. gimbals have a control group, but grippers do not). You should already have read [Mixing and Actuators](../concept/mixing.md). - - -## Payload Mixer Example - -A payload mixer is just a [summing mixer](../concept/mixing.md#summing_mixer) that maps any of the function values from [Control Group #6 (First Payload)](../concept/mixing.md#control_group_6) to a particular output. You can then publish uORB topics to the selected control group function and their value will be mapped to the specified output. - -For this example, we'll create a custom mixer based on the *RC passthrough mixer* ([pass.aux.mix](https://github.com/PX4/PX4-Autopilot/blob/master/ROMFS/px4fmu_common/mixers/pass.aux.mix)). This mixer is commonly loaded into the AUX PWM ports on large multicopters). It passes through the values of 4 user-defined RC channels (set using the [RC_MAP_AUXx/RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_AUX1) parameters) to the first four outputs on the AUX PWM output. - -``` -# Manual pass through mixer for servo outputs 1-4 - -# AUX1 channel (select RC channel with RC_MAP_AUX1 param) -M: 1 -S: 3 5 10000 10000 0 -10000 10000 - -# AUX2 channel (select RC channel with RC_MAP_AUX2 param) -M: 1 -S: 3 6 10000 10000 0 -10000 10000 - -# AUX3 channel (select RC channel with RC_MAP_AUX3 param) -M: 1 -S: 3 7 10000 10000 0 -10000 10000 - -# FLAPS channel (select RC channel with RC_MAP_FLAPS param) -M: 1 -S: 3 4 10000 10000 0 -10000 10000 -``` - -:::note -The file defines four [summing mixers](../concept/mixing.md#summing_mixer) (for four outputs). -- `M: 1` indicates an output that is defined by one control input (the following `S` line). -- `S: 3`_`n`_ indicates that the input is the nth input of [Control Group 3 (Manual Passthrough)](../concept/mixing.md#control-group-3-manual-passthrough). So for `S: 3 5` the input is called "RC aux1" (this maps to the RC channel set in parameter `RC_MAP_AUX1`). -- The section declaration order defines the order of the outputs when assigned to a physical bus (e.g. the third section might be assigned to AUX3). -::: - -Start by copying the mixer file and putting it onto the SD Card at: **/etc/mixers/pass.aux.mix** (see [Mixing and Actuators > Loading a Custom Mixer](../concept/mixing.md#loading_custom_mixer). - -Remove the first section with a payload control group function input: -- Change this: - ``` - # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param) - M: 1 - S: 3 5 10000 10000 0 -10000 10000 - ``` -- To: - ``` - # Payload 1 (control group 6) channel 1 - M: 1 - S: 6 1 10000 10000 0 -10000 10000 - ``` - -Because this output is in the first position in the file it will map to the first AUX PWM output (unless UAVCAN is enabled). This output will now respect updates to the payload control group (6) output 1. - -Control group 6 will need to be defined in the code as well (it is missing!): -- Add `actuator_controls_6` to the TOPICS definition in [/msg/actuator_controls.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/actuator_controls.msg#L17): - ``` - # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6 - ``` -- Increase `NUM_ACTUATOR_CONTROL_GROUPS` to 7 in the same file. -- Subscribe to the additional control group in the output library ([/src/lib/mixer_module/mixer_module.cpp#L52](https://github.com/PX4/PX4-Autopilot/blob/master/src/lib/mixer_module/mixer_module.cpp#L52)) in the `MixingOutput` constructor. It should look like this: - ``` - {&interface, ORB_ID(actuator_controls_0)}, - {&interface, ORB_ID(actuator_controls_1)}, - {&interface, ORB_ID(actuator_controls_2)}, - {&interface, ORB_ID(actuator_controls_3)}, - ``` - ``` - {&interface, nullptr}, - {&interface, nullptr}, - {&interface, ORB_ID(actuator_controls_6)}, - ``` - -Putting an output on group 6 works by publishing actuator control group 6. First you have to create the publication. This should happen once when the PX4 module is initialized (look for places where this pattern is already being used): -``` -uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_6)}; -``` - -Then you need to publish the first message: -``` -actuator_controls_s _act_controls{}; -_act_controls.timestamp = hrt_absolute_time(); -// set the first output to 50% positive (this would rotate a servo halfway into one of its directions) -_act_controls.control[0] = 0.5f; -_actuator_controls_pub.publish(_act_controls); -``` diff --git a/tr/concept/dronecode_architecture.md b/tr/concept/dronecode_architecture.md deleted file mode 100644 index d7442fdd7d062..0000000000000 --- a/tr/concept/dronecode_architecture.md +++ /dev/null @@ -1,13 +0,0 @@ -# PX4 Platform Hardware/Software Architecture - -The diagram below provides a forward-looking high level overview of a full PX4 onboard and offboard stack. The left hand side shows one possible hardware configuration with a *flight controller* (light blue) connected to a *perception computer* (dark blue) via [RTPS](../middleware/micrortps.md). The perception computer provides vision control and object avoidance using a camera sensor array, and has a separate payload camera. - -The right hand side of the diagram shows the end-to-end software stack. The stack "approximately" aligns horizontally with the hardware parts of the diagram, and is colour-coded to show which software is running on the flight controller and which on the companion computer. - -:::note -The [PX4 Architectural Overview](../concept/architecture.md) provides information about the flight stack and middleware. Offboard APIs are covered in [ROS](../ros/README.md) and [MAVSDK](https://mavsdk.mavlink.io/develop/en/index.html). -::: - -![PX4 Platform architecture](../../assets/diagrams/dronecode_platform_architecture.jpg) - - diff --git a/tr/config/README.md b/tr/config/README.md index 2803abc3a83df..bc6a3fd81a405 100644 --- a/tr/config/README.md +++ b/tr/config/README.md @@ -36,11 +36,11 @@ The video below shows the calibration process in detail (this uses an older vers ## Advanced Configuration -If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4)) then it may benefit from fine tuning, but this is not generally required. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. If you're using a new airframe, a "generic" airframe, significantly modifying an airframe, or using less common sensors then see: -* [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. -* [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). +- [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. +- [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). ## Support diff --git a/tr/config/actuators.md b/tr/config/actuators.md index 0ce4facebab79..f7d557bc483d1 100644 --- a/tr/config/actuators.md +++ b/tr/config/actuators.md @@ -43,11 +43,7 @@ Core geometry concepts and the configuration for a number of different frames ar #### Motor Geometry: Multicopter -The image below shows the geometry setup for a multicopter frame with and without advanced settings. - -:::note -Specifically this is the motor geometry for a [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) muticopter. Other multicopters frames are configured similarly. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![Geometry MC (QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -68,7 +64,7 @@ The `X`, `Y`, `Z` positions are in [FRD coordinate frame, relative to the _centr #### Motor Geometry: VTOL Quadrotor Tailsitter -The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). Motors have the same configuration fields as for the [multicopter geometry](#motor-geometry-multicopter). @@ -86,7 +82,7 @@ The motor geometry for a [Generic Quadplane VTOL Tiltrotor](../airframes/airfram #### Motor Geometry: Standard VTOL -The motor geometry for a [Generic Standard Quadplane VTOL Tiltrotor](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![Geometry motor: standard vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -124,27 +120,46 @@ Note that you will need to also ensure that the ESC associated with bidirectiona ### Control Surfaces Geometry -The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). - -An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. +The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. ![Control Surface Setup Example](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +Only the most common settings are displayed by default. Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + The fields are: - `Control Surfaces`: The number of control surfaces (set this first!) - `Type`: The type of each control surface: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder`, `Left Elevon`, `Right Elevon`, `Left V-Tail`, `Right V-Tail`, `Left Flap`, `Right Flap`, `Airbrakes`, `Custom`. -- `Roll scale`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Pitch scale`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Yaw scale`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). - `Trim`: An offset added to the actuator so that it is centered without input. This might be determined by trial and error. -- `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - The setting limits the rate of change of an actuator (if not specified then no rate limit is applied). It is intended for actuators that may be damaged if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle. - For example, a setting of 2.0 means that the motor/servo will not be commanded to move from 0 to 1 at a rate that completes the operation in less than 2 seconds (in case of reversible motors, the range is -1 to 1). -- `Lock control surfaces in hover`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `Enabled`: Most vehicles do not use control surfaces in hover. Use this setting to lock them so that they don't affect vehicle dynamics. - `Disabled`: Set this for vehicles that use control surfaces in hover, such as the duo tailsitter (which uses elevons for pitch and yaw control). It should also be set for vehicles that use control surfaces to provide additional stabilization in hover mode when moving at speed or in high winds. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### Actuator Roll, Pitch, and Yaw Scaling @@ -268,7 +283,7 @@ Functions include: - `Constant_Max`: Output is set to constant maximum value (+1). - `Motor 1` to `Motor 12`: Output is indicated motor. Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. - `RC Roll`: Output is passthrough roll from RC ([RC_MAP_ROLL](../advanced_config/parameter_reference.md#RC_MAP_ROLL) maps an RC channel to this output). An RC channel is mapped to the output using . @@ -276,7 +291,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/tr/config/autotune.md b/tr/config/autotune.md index 0d05a09869018..1619e8b57386e 100644 --- a/tr/config/autotune.md +++ b/tr/config/autotune.md @@ -2,7 +2,7 @@ Auto-tuning automates the process of tuning the PX4 rate and attitude controllers, which are the most important controllers for stable and responsive flight (other tuning is more "optional"). It is currently enabled for multicopter, fixed wing, and hybrid VTOL fixed wing vehicles. -Tuning only needs to be done once, and is recommended unless unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning Auto-tuning is performed while flying. The airframe must fly well enough handle moderate disturbances, and should be closely attended: @@ -86,10 +86,10 @@ Additional notes: * slow oscillations (1 oscillation per second or slower): this often occurs on large platforms and means that the attitude loop is too fast compared to the rate loop. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * fast oscillations (more than 1 oscillation per second): this is because the gain of the rate loop is too high. - **Multicopter:** decrease `MC_[ROLL|PITCH|YAW]RATE_K` by steps of 0.02 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### The auto-tuning sequence fails diff --git a/tr/config/battery.md b/tr/config/battery.md index c61e31d0e25de..e98917159aacf 100644 --- a/tr/config/battery.md +++ b/tr/config/battery.md @@ -185,7 +185,7 @@ A typical value is 5mΩ per cell but this can vary with discharge current rating This load compensation method estimates the load based on the total thrust that gets commanded to the motors. -:::caution +:::warning This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. Use [Current-based Load Compensation](#current_based_load_compensation) instead if your vehicle has a current sensor. ::: diff --git a/tr/config/compass.md b/tr/config/compass.md index 6cd0a34a3d0c6..35c8c264502d2 100644 --- a/tr/config/compass.md +++ b/tr/config/compass.md @@ -58,9 +58,33 @@ Notes: - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. This can also be used to change the relative priority of a compass. + + ## Further Information -* [Peripherals > GPS & Compass > Compass Configuration](../gps_compass/README.md#compass-configuration) -* [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) -* [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) + diff --git a/tr/config/flight_controller_orientation.md b/tr/config/flight_controller_orientation.md index 3d85790184774..cbbcc721812fe 100644 --- a/tr/config/flight_controller_orientation.md +++ b/tr/config/flight_controller_orientation.md @@ -27,7 +27,9 @@ To set the orientations: 1. Start *QGroundControl* and connect the vehicle. 1. Select the **Gear** icon (Vehicle Setup) in the top toolbar and then **Sensors** in the sidebar. -1. Select the **Set Orientations** button. +1. Select the **Set Orientations** button. + + 1. Select the **AutoPilot Orientation** (as [calculated above](#calculating-orientation)). diff --git a/tr/config/flight_mode.md b/tr/config/flight_mode.md index d4342efe04364..c4867a8431548 100644 --- a/tr/config/flight_mode.md +++ b/tr/config/flight_mode.md @@ -83,7 +83,7 @@ On the FrSky Taranis this process involves assigning a "logical switch" to each The video below shows how this is done with the *FrSky Taranis* transmitter.@[youtube](https://youtu.be/TFEjEQZqdVA) -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## Further Information diff --git a/tr/config/motors.md b/tr/config/motors.md deleted file mode 100644 index 947d1904b1a78..0000000000000 --- a/tr/config/motors.md +++ /dev/null @@ -1,27 +0,0 @@ -# Motor/Servo Checks - -:::note -This section is being replaced by an [Actuators](../config/actuators.md) configuration screen. -::: - -After the airframe is setup and configured you should validate the motor assignment and spin direction, and the servo response. This can be done in *QGroundControl*, under the [Vehicle Setup > Motors](https://docs.qgroundcontrol.com/master/en/SetupView/Motors.html) tab. - -Note the following PX4-specific behaviour: -- If a safety button is used, it must be pressed before motor testing is allowed. -- The kill-switch can still be used to stop motors immediately. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable motor testing. -- On boards with an IO, only the MAIN pins can be tested. -- On the shell, [motor_test](../modules/modules_command.md#motor-test) can be used as well, which has additional options. - -If one or more of the motors do not turn in the correct direction according to the configured [airframe](../airframes/airframe_reference.md), they must be reversed. There are several options: -- If using ESCs that support [DShot](../peripherals/dshot.md) you can reverse the direction via [DShot commands](../peripherals/dshot.md#commands). -- Swap 2 of the 3 motor cables (it does not matter which ones). :::note -If motors are not connected via bullet-connectors, re-soldering is required (this is a reason, among others, to prefer DShot ESCs). -::: - -The following additional checks should be performed to validate that the vehicle is setup correctly: -1. With propellers still removed, switch to [Stabilised mode](../flight_modes/manual_stabilized_mc.md) (Multicopter) or [Manual mode](../flight_modes/manual_fw.md) (Fixed Wing) and arm the vehicle. -1. Increase the throttle a little (so the vehicle does not automatically disarm) and check that the motors respond to throttle changes. -1. Check that all motors spin at minimum throttle. -1. If the vehicle has ailerons, check if they are responding in the right directions when giving roll/pitch stick input commands. - diff --git a/tr/config/safety.md b/tr/config/safety.md index 3f0f8239da113..6e2a5d6b27d8c 100644 --- a/tr/config/safety.md +++ b/tr/config/safety.md @@ -22,7 +22,7 @@ The list below shows the set of all failsafe actions, ordered in increasing seve | Disarm | Stops the motors immediately. | | [Flight termination](../advanced_config/flight_termination.md) | Turns off all controllers and sets all PWM outputs to their failsafe values (e.g. [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1), [PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1)). The failsafe outputs can be used to deploy a parachute, landing gear or perform another operation. For a fixed-wing vehicle this might allow you to glide the vehicle to safety. | -If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -63,19 +63,19 @@ The RC Loss failsafe may be triggered if the RC transmitter link is lost in manu Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. :::note PX4 and the receiver may also need to be configured in order to *detect RC loss*: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). ::: Additional (and underlying) parameter settings are shown below. -| Setting | Parameter | Description | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | -| RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. | -| Failsafe Action | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. | -| RC Loss Exceptions | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | +| Parameter | Setting | Description | +| ------------------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | RC Loss Timeout | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | +| [COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). | +| [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Failsafe Action | Disabled, Loiter, Return, Land, Disarm, Terminate. | +| [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC Loss Exceptions | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | ### Data Link Loss Failsafe @@ -194,7 +194,6 @@ The relevant parameters are shown below: | Parameter | Description | | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Delay after loss of offboard connection before the failsafe is triggered. | -| [COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | Failsafe action if no RC is available: Land mode, Hold mode, Return mode. | | [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Failsafe action if RC is available: Position mode, Altitude mode, Manual mode, Return mode, Land mode, Hold mode. | ### Mission Feasibility Checks @@ -213,22 +212,26 @@ The relevant parameters are shown below: | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Set the failsafe action: Disabled, Warn, Return mode, Land mode. | -### QuadChute Failsafe +### Quad-chute Failsafe -Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor or control surface failed. If triggered, the vehicle will immediately switch to multicopter mode. If the vehicle was in [Mission mode](../flight_modes/mission.md) it enters failsafe [Return mode](../flight_modes/return.md). +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -The quadchute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -The parameters that control when the quadchute will trigger are listed in the table below. - -| Parameter | Description | -| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | Maximum negative altitude error for fixed wing flight. If the altitude drops more than this value below the altitude setpoint the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude for fixed wing flight. When the altitude drops below this value in fixed wing flight the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Maximum pitch angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Maximum roll angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | +The parameters that control when the quad-chute will trigger are listed in the table below. + +| Parameter | Description | +| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. | +| [VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) | Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. | +| [VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. | +| [VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing | + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## Failure Detector diff --git a/tr/config_fw/advanced_tuning_guide_fixedwing.md b/tr/config_fw/advanced_tuning_guide_fixedwing.md index b5ee77a8a11dd..36c397ff1e590 100644 --- a/tr/config_fw/advanced_tuning_guide_fixedwing.md +++ b/tr/config_fw/advanced_tuning_guide_fixedwing.md @@ -67,8 +67,8 @@ Fly in stabilized mode, reduce throttle to `FW_THR_MIN` and adjust the pitch ang Specify the target climb and sink rate for autonomous missions by adjusting [FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) and [FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP). These specify the height rates at which the vehicle will climb or descend in order to change altitude. Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1 Controller Tuning (Position) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - This is the L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 25 meters works for most aircraft. A value of 16-18 will still work, and provide a sharper response. Shorten slowly during tuning until response is sharp without oscillation. +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 10-20 meters works for most aircraft. Shorten slowly during tuning until response is sharp without oscillation. Vehicles with a slow roll dynamic should have this value increased. diff --git a/tr/config_fw/trimming_guide_fixedwing.md b/tr/config_fw/trimming_guide_fixedwing.md index 79f0324fb3b2e..595692e3ee166 100644 --- a/tr/config_fw/trimming_guide_fixedwing.md +++ b/tr/config_fw/trimming_guide_fixedwing.md @@ -11,7 +11,7 @@ The [Basic trimming](#basic-trimming) section explains the purpose of each trim There are several parameters an operator might want to use in order to properly trim a fixed-wing aircraft. An overview of those parameters and their use case is shown below: - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM) applies trim to the signal received from the RC transmitter. These parameters are set automatically during [RC calibration](../config/radio.md). -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1) applies trim to a PWM channel, after mixing. These are used to finely align the control surfaces to default angles before flying. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. These are used to finely align the control surfaces to default angles before flying. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF) applies an offset to the pitch setpoint. This is used to set the angle of attack at which your aircraft needs to fly at cruise speed. - [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) is used by the rate controllers to scale their output depending on the measured airspeed. See [Airspeed Scaling](../flight_stack/controller_diagrams.md#airspeed-scaling) for more details. - [TRIM_ROLL](../advanced_config/parameter_reference.md#TRIM_ROLL), [TRIM_PITCH](../advanced_config/parameter_reference.md#TRIM_PITCH) and [TRIM_YAW](../advanced_config/parameter_reference.md#TRIM_YAW) apply trim to the control signals *before* mixing. For example, if you have two servos for the elevator, `TRIM_PITCH` applies trim to both of them. These are used when your control surfaces are aligned but the aircraft pitches/rolls/yaws up/down/left/right during manual (not stabilized) flight or if the control signal has a constant offset during stabilized flight. @@ -26,12 +26,12 @@ Step 3 can be performed before step 2 if you don't want to have to look at the l ## Advanced Trimming -Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve (see figure below) function of airspeed and a pitch trim increment function of the flaps state can be defined using the following parameters: +Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW\_DTRIM\_\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN) are the roll/pitch/yaw trim value added to `TRIM_ROLL/PITCH/YAW` at min/max airspeed (defined by [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)). -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim Curve](../../assets/config/fw/fixedwing_dtrim.png) -A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. +A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. diff --git a/tr/config_heli/README.md b/tr/config_heli/README.md index c683cc59338f4..f9bccf1fe7c93 100644 --- a/tr/config_heli/README.md +++ b/tr/config_heli/README.md @@ -30,8 +30,7 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/tr/config_mc/filter_tuning.md b/tr/config_mc/filter_tuning.md index ab4c2e355900c..8c57444733343 100644 --- a/tr/config_mc/filter_tuning.md +++ b/tr/config_mc/filter_tuning.md @@ -22,7 +22,7 @@ The following factors affect control latency: - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The maximum gyro publication rate (configured with [IMU_GYRO_RATEMAX](../advanced_config/parameter_reference.md#IMU_GYRO_RATEMAX)). A higher rate reduces latency but is computationally intensive/can starve other processes. 4 kHz or higher is only recommended for controllers with STM32H7 processor or newer (2 kHz value is near the limit for less capable processors). - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot ([PWM_AUX_RATE=0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) or [PWM_MAIN_RATE=0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)) to reduce latency. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). Below we look at the impact of the low pass filters. diff --git a/tr/config_mc/pid_tuning_guide_multicopter.md b/tr/config_mc/pid_tuning_guide_multicopter.md index ba4705ef1b9ee..f81fef06ae0f9 100644 --- a/tr/config_mc/pid_tuning_guide_multicopter.md +++ b/tr/config_mc/pid_tuning_guide_multicopter.md @@ -171,7 +171,7 @@ The mapping from motor control signals (e.g. PWM) to expected thrust is linear b If you have a [thrust stand](https://www.tytorobotics.com/pages/series-1580-1585) (or can otherwise _measure_ thrust and motor commands simultaneously), you can determine the relationship between the motor control signal and the motor's actual thrust, and fit a function to the data. The motor command in PX4 called `actuator_output` can be PWM, Dshot, UAVCAN commands for the respective ESCs in use. [This Notebook][THR_MDL_FAC_Calculation] shows one way for how the thrust model factor `THR_MDL_FAC` may be calculated from previously measured thrust and PWM data. The curves shown in this plot are parametrized by both α and k, and also show thrust and PWM in real units (kgf and μs). In order to simplify the curve fit problem, you can normalize the data between 0 and 1 to find `k` without having to estimate α (α = 1, when the data is normalized). -[![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note The mapping between PWM and static thrust depends highly on the battery voltage. @@ -195,20 +195,6 @@ In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set t If you don't have access to a thrust stand, you can also tune the modeling factor empirically. Start off with 0.3 and increase it by 0.1 at a time. If it is too high, you will start to notice oscillations at lower throttle values. If it is too low you'll notice oscillations at higher throttle values. - - ### Airmode & Mixer Saturation @@ -234,5 +220,3 @@ If mixing becomes saturated towards the upper bound the commanded thrust is redu Once your vehicle flies well you can enable Airmode via the [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE) parameter. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb - -[THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb diff --git a/tr/config_mc/pid_tuning_guide_multicopter_basic.md b/tr/config_mc/pid_tuning_guide_multicopter_basic.md index db8e2041b84fd..38796be1e0747 100644 --- a/tr/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/tr/config_mc/pid_tuning_guide_multicopter_basic.md @@ -32,7 +32,7 @@ The testing procedure for each controller (rate, attitude, velocity/posibition) - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. This should give you a vehicle that already flies. - You should have done an [ESC calibration](../advanced_config/esc_calibration.md). -- If using PWM output: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN) is set correctly. It needs to be set low, but such that the **motors never stop** when the vehicle is armed. +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). These need to be set low, but such that the **motors never stop** when the vehicle is armed. This can be tested in [Acro mode](../flight_modes/acro_mc.md) or in [Manual/Stabilized mode](../flight_modes/manual_stabilized_mc.md): - Remove propellers diff --git a/tr/config_mc/racer_setup.md b/tr/config_mc/racer_setup.md index ac134f82f6f2d..2f40b7a049b3c 100644 --- a/tr/config_mc/racer_setup.md +++ b/tr/config_mc/racer_setup.md @@ -64,7 +64,7 @@ Go through the [Basic Configuration Guide](../config/README.md). In particular, These parameters are important: -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - Set the maximum roll-, pitch- and yaw rates for Manual/Stabilized mode as desired: [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) and [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX). The maximum tilt angle is configured with [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX). - The minimum thrust [MPC_MANTHR_MIN](../advanced_config/parameter_reference.md#MPC_MANTHR_MIN) should be set to 0. @@ -108,7 +108,7 @@ These are the factors that affect the latency: - [Low-pass filters](../config_mc/filter_tuning.md) in software and on the sensor chip trade off increased latency for improved noise filtering. - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable One-Shot to reduce latency ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)=0). +- PWM output signal: enable the One-Shot protocol to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### Filter Tuning diff --git a/tr/config_vtol/vtol_back_transition_tuning.md b/tr/config_vtol/vtol_back_transition_tuning.md index f49546c2b62ec..2280e2b528232 100644 --- a/tr/config_vtol/vtol_back_transition_tuning.md +++ b/tr/config_vtol/vtol_back_transition_tuning.md @@ -1,56 +1,13 @@ # VTOL Back-transition Tuning -When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## Back-transition duration - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## Setting expected deceleration -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## Applying airbrakes - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## Applying reverse thrust on your fixed wing motor - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### Using throttle scaling (3D) +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### On a control channel - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## Typical setup - -An example of a setup that employs most features listed above would be the following: +## Back-transition duration -- Airframe: Any VTOL supporting reverse thrust (e.g. DeltaQuad) -- ESC: A fixed wing ESC that supports motor reversing (e.g. Hobbywing Platinum Pro 60A) -- Estimated deceleration value in m/s/s `VT_B_DEC_MSS`: 2.5 -- Back-transition duration timeout in seconds `VT_B_TRANS_DUR`: 10 -- Set reverse channel high during back-transition `VT_B_REV_OUT`: 1.0 -- Apply 70% thrust during back-transition `VT_B_TRANS_THR`: 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/tr/config_vtol/vtol_quad_configuration.md b/tr/config_vtol/vtol_quad_configuration.md index d553ef5f86813..31bb554dd8c4f 100644 --- a/tr/config_vtol/vtol_quad_configuration.md +++ b/tr/config_vtol/vtol_quad_configuration.md @@ -1,12 +1,16 @@ -# QuadPlane VTOL Configuration & Tuning +# Generic Standard VTOL (QuadPlane) Configuration & Tuning -This is the configuration documentation for a QuadPlane VTOL setup (Plane combined with Quadcopter). For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. + +For airframe specific documentation and build instructions see [VTOL Framebuilds](../frames_vtol/README.md). ## Firmware & Basic Settings 1. Run *QGroundControl* -2. Flash the master firmware -3. In the Setup tab select the appropriate VTOL airframe, if your airframe is not listed select the Fun Cub VTOL airframe. +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### Flight / Transition Mode Switch @@ -45,10 +49,6 @@ Front transition throttle defines the target throttle for the pusher/puller moto This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -122,4 +122,4 @@ When transitioning from **fixed wing to multirotor** for this type of VTOL the ### Support -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/tr/config_vtol/vtol_without_airspeed_sensor.md b/tr/config_vtol/vtol_without_airspeed_sensor.md index 1d37ea4bccbd5..c65b9b1b62113 100644 --- a/tr/config_vtol/vtol_without_airspeed_sensor.md +++ b/tr/config_vtol/vtol_without_airspeed_sensor.md @@ -45,13 +45,17 @@ Set the minimum front transition time ([VT_TRANS_MIN_TM](../advanced_config/para ### Optional Recommended Parameters -Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'QuadChute' ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + +This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. The position estimator tested for this mode is EKF2, you can set this by changing the [SYS_MC_EST_GROUP](../advanced_config/parameter_reference.md#SYS_MC_EST_GROUP). ## First Flight Without Airspeed Sensor -The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: +The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + +Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: - Stay at one altitude - Set the waypoints wide enough and in such a fashion that no sharp turns are required diff --git a/tr/contribute/code.md b/tr/contribute/code.md index e50bc0e17ed5b..70a3f11325a40 100644 --- a/tr/contribute/code.md +++ b/tr/contribute/code.md @@ -4,7 +4,7 @@ The PX4 project uses a three-branch Git branching model: -* [master](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta) has been thoroughly tested. It's intended for flight testers. * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable) points to the last release. diff --git a/tr/contribute/dev_call.md b/tr/contribute/dev_call.md index 239f737a2395e..613412f931f54 100644 --- a/tr/contribute/dev_call.md +++ b/tr/contribute/dev_call.md @@ -1,12 +1,11 @@ -# Weekly Dev Call +# Weekly Community Q&A Call (Previously "Dev Call")

          This page may be out of date

          .

          The latest version can be found here.

          -The PX4 dev team syncs up on platform technical details and in-depth analysis. There is also space in the agenda to discuss pull requests, major impacting issues and Q&A. - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## Who should attend: @@ -14,29 +13,20 @@ The PX4 dev team syncs up on platform technical details and in-depth analysis. T * Component maintainers * Test team lead * Dronecode members -* Community members +* Community members (you!) :::tip -The dev call is open to all interested developers (not just the core dev team). +The Community Q&A call is open to all interested community members. + This is a great opportunity to meet the team and contribute to the ongoing development of the platform. ::: ## What gets discussed? -The first/main part of the meeting runs for 45 minutes and provides a high-level forum to discuss where the project is going. - -This is where we discuss *contributions*, including issues/PRs that have the [dev call](https://github.com/PX4/PX4-Autopilot/labels/devcall5) label. We expect the proposer and the assigned reviewer to be on the call! - -:::note -The main call is designed to support rapid/focused decision making. We don't expect deep technical discussions and we will not spend extended amounts of time on feature requests. Proposals are welcome, but they need a sponsor (someone willing to *implement* the work)! -::: - -The second part of the meeting is for in-depth technical discussions and open ended questions. The core team/subsystem maintainers will be available for up to 45 additional minutes. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## Schedule -* TIME: Wednesday 17h00 CET, 11h00 EST, 08h00 PST ([subscribe to calendar](https://www.dronecode.org/calendar/)) -* **Join the call**: [https://meet.jit.si/PX4DeveloperCallWeekly](https://meet.jit.si/PX4DeveloperCallWeekly) - -* Agenda is published before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io//c/weekly-dev-call) -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/tr/debug/simulation_debugging.md b/tr/debug/simulation_debugging.md index 685e59e0e284d..249a164ff7522 100644 --- a/tr/debug/simulation_debugging.md +++ b/tr/debug/simulation_debugging.md @@ -29,21 +29,24 @@ To use valgrind during the SITL simulation: make px4_sitl_default jmavsim___valgrind ``` -## Start combinations +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. This results in the start options below: +By default SITL is launched without a debugger attached when using any simulator backend: ```sh +make px4_sitl_default gz +make px4_sitl_default gazebo-classic make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb +``` -make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +For Gazebo Classic (only) you can also start the simulator with a debugger attached. Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb ``` -where the last parameter is the <viewer\_model\_debugger> triplet (using three underscores implies the default 'iris' model). This will start the debugger and launch the SITL application. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: ```sh Process 16529 stopped @@ -74,14 +77,14 @@ After that the lldb or gdb shells behave like normal sessions, please refer to t The last parameter, the <viewer\_model\_debugger> triplet, is actually passed to make in the build directory, so ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` is equivalent with ```sh make px4_sitl_default # Configure with cmake -make -C build/px4_sitl_default jmavsim___gdb +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -90,11 +93,77 @@ A full list of the available make targets in the build directory can be obtained make help ``` -but for your convenience, a list with just the <viewer\_model\_debugger> triplets is printed with the command +## Attaching GDB to running SITL -```sh -make list_vmd_make_targets -``` +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + For example, + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## Compiler optimization diff --git a/tr/debug/swd_debug.md b/tr/debug/swd_debug.md index b2f0c474ee863..04dfed967e088 100644 --- a/tr/debug/swd_debug.md +++ b/tr/debug/swd_debug.md @@ -35,7 +35,7 @@ This connector may come with your flight controller or debug probe. Other option ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/tr/debug/system_wide_replay.md b/tr/debug/system_wide_replay.md index 4a7f4554f5ddd..fa50fbe532345 100644 --- a/tr/debug/system_wide_replay.md +++ b/tr/debug/system_wide_replay.md @@ -10,7 +10,7 @@ The first thing that needs to be done is to identify the module or modules that All identified topics need to be logged at full rate (see [logging](../dev_log/logging.md)). For `ekf2` this is already the case with the default set of logged topics. -It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_combined.msg). Reasons for this are given below. +It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). Reasons for this are given below. ## Usage diff --git a/tr/dev_airframes/README.md b/tr/dev_airframes/README.md index 8ca9650042a40..05871a83e202e 100644 --- a/tr/dev_airframes/README.md +++ b/tr/dev_airframes/README.md @@ -1,6 +1,6 @@ # Airframes -PX4 has a flexible [mixing system](../concept/mixing.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **Planes:** Normal planes, flying wings, inverted V-tail planes, etc. * **Multicopters:** Helicopters, tricopters, quadcopters, hexarotors, dodecarotors in many different geometries. diff --git a/tr/dev_airframes/adding_a_new_frame.md b/tr/dev_airframes/adding_a_new_frame.md index 1e55b03e8281f..0c15a5869c140 100644 --- a/tr/dev_airframes/adding_a_new_frame.md +++ b/tr/dev_airframes/adding_a_new_frame.md @@ -19,7 +19,7 @@ To determine which parameters/values need to be set in the configuration file, y The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -150,7 +150,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -206,12 +206,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 diff --git a/tr/dev_log/ulog_file_format.md b/tr/dev_log/ulog_file_format.md index f3dd24198d10d..1bc82b1f0a1bc 100644 --- a/tr/dev_log/ulog_file_format.md +++ b/tr/dev_log/ulog_file_format.md @@ -466,7 +466,6 @@ A valid ULog parser must fulfill the following requirements: - [hardfault_log module](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log): append hardfault crash data. - [pyulog](https://github.com/PX4/pyulog): python, ULog parser library with CLI scripts. - [FlightPlot](https://github.com/PX4/FlightPlot): Java, log plotter. -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis): Python, log plotter and 3D visualization tool based on pyulog. - [MAVLink](https://github.com/mavlink/mavlink): Messages for ULog streaming via MAVLink (note that appending data is not supported, at least not for cut off messages). - [QGroundControl](https://github.com/mavlink/qgroundcontrol): C++, ULog streaming via MAVLink and minimal parsing for GeoTagging. - [mavlink-router](https://github.com/01org/mavlink-router): C++, ULog streaming via MAVLink. diff --git a/tr/dev_setup/_gcc_toolchain_installation.md b/tr/dev_setup/_gcc_toolchain_installation.md deleted file mode 100644 index 308cc9371e41d..0000000000000 --- a/tr/dev_setup/_gcc_toolchain_installation.md +++ /dev/null @@ -1,33 +0,0 @@ - - -Execute the script below to install GCC 7-2017-q4: - -```sh -pushd . -cd ~ -wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -popd -``` - -Now restart your machine. - - -**Troubleshooting** - -Check the version by entering the following command: - -```sh -arm-none-eabi-gcc --version -``` - -The output should be something similar to: - -```sh -arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -Copyright (C) 2017 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` diff --git a/tr/dev_setup/_ninja_build_system.md b/tr/dev_setup/_ninja_build_system.md deleted file mode 100644 index f835ffebe7513..0000000000000 --- a/tr/dev_setup/_ninja_build_system.md +++ /dev/null @@ -1,22 +0,0 @@ -## Ninja Build System - -[Ninja](https://ninja-build.org/) is a faster build system than *Make* and the PX4 *CMake* generators support it. - -On Ubuntu Linux you can install this automatically from normal repos. - -```sh -sudo apt-get install ninja-build -y -``` - -Other systems may not include Ninja in the package manager. In this case an alternative is to download the binary and add it to your path: - -```sh -mkdir -p $HOME/ninja -cd $HOME/ninja -wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip -unzip ninja-linux.zip -rm ninja-linux.zip -exportline="export PATH=$HOME/ninja:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -. ~/.profile -``` diff --git a/tr/dev_setup/dev_env.md b/tr/dev_setup/dev_env.md index 2010d35ab0db8..27bc2eba05a79 100644 --- a/tr/dev_setup/dev_env.md +++ b/tr/dev_setup/dev_env.md @@ -10,15 +10,15 @@ The *supported platforms* for PX4 development are: The table below shows what PX4 targets you can build on each OS. -| Target | Linux (Ubuntu) | Mac | Windows | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| -| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | ✓ | ✓ | ✓ | -| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | -| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | -| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | -| **Simulation:** ROS2 with Gazebo | ✓ | | | +| Target | Linux (Ubuntu) | Mac | Windows | +| ----------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| +| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | ✓ | ✓ | ✓ | +| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | | +| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | ✓ | ✓ | ✓ | +| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | | +| **Simulation:** ROS 2 with Gazebo | ✓ | | | Experienced Docker users can also build with the containers used by our continuous integration system: [Docker Containers](../test_and_ci/docker.md) diff --git a/tr/dev_setup/dev_env_linux_ubuntu.md b/tr/dev_setup/dev_env_linux_ubuntu.md index 229164c850546..7fbb59a55b182 100644 --- a/tr/dev_setup/dev_env_linux_ubuntu.md +++ b/tr/dev_setup/dev_env_linux_ubuntu.md @@ -167,7 +167,7 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/tr/dev_setup/dev_env_mac.md b/tr/dev_setup/dev_env_mac.md index c7366b5323c57..b25164d292121 100644 --- a/tr/dev_setup/dev_env_mac.md +++ b/tr/dev_setup/dev_env_mac.md @@ -30,9 +30,9 @@ The installation of Homebrew is quick and easy: [installation instructions](http ## Enable more open files (Handle "LD: too many open files" error) -Create the `~/.zshenv` file or append it (by running `open ~/.zshenv` on the terminal) and add this line: +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Enforce Python Version diff --git a/tr/dev_setup/dev_env_windows_vm.md b/tr/dev_setup/dev_env_windows_vm.md index ee4da9991055b..74541a63ec5a4 100644 --- a/tr/dev_setup/dev_env_windows_vm.md +++ b/tr/dev_setup/dev_env_windows_vm.md @@ -6,18 +6,21 @@ This development environment is [not supported](../advanced/dev_env_unsupported. Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. +While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: + +1. Firmware building will be slower than native building on Linux. +1. The JMAVSim simulation, frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. +1. Gazebo and ROS can be installed, but are unusably slow. + :::tip Allocate as many CPU cores and memory resources to the VM as possible. ::: -While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: -1. Firmware building will be slower than native building on Linux. -1. The JMAVSim frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. -1. Gazebo and ROS can be installed, but are unusably slow. +There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). -## Instructions +## VMWare Setup -There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. +VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) 1. Install it on your Windows system @@ -34,9 +37,48 @@ We recommend this is done before installing Linux in the virtual environment. 1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. 1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. 1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. This will enhance performance and usability of your VM usage: - * Significantly enhanced graphics performance - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * Guest display resolution adaption to the window size - * Clipboard sharing to host system - * File sharing to host system + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system 1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. +::: + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. + + :::note +The bootloader device only appears for a few seconds after connecting USB. +If it disappears before you can select it, disconnect and then reconnect USB. +::: + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/tr/dev_setup/fast-dds-installation.md b/tr/dev_setup/fast-dds-installation.md deleted file mode 100644 index e98cc2036b90c..0000000000000 --- a/tr/dev_setup/fast-dds-installation.md +++ /dev/null @@ -1,138 +0,0 @@ -# Fast DDS Installation - -logo [eProsima Fast DDS](https://github.com/eProsima/Fast-DDS) is a C++ implementation of the Object Management Group's (OMG) Data Distribution Service (DDS) specification and the Real Time Publish Subscribe (RTPS) protocol. - -Fast DDS enables an RTPS/DDS interface that allows PX4 uORB topics to be shared with offboard components that participate in same DDS domain, including robotics and simulator tools. In particular, Fast DDS is the default middleware implementation for Robot Operating System 2 (ROS 2), and is essential for integrating PX4 with ROS2. - -This topic explains how to install Fast DDS and *Fast-RTPS-Gen* to use in the PX4 build system and with the microRTPS bridge. - -:::note -You do not have to install Fast DDS if you have ROS 2 Dashing (Ubuntu 18.04) or ROS 2 Foxy (Ubuntu 20.04) installed, as it comes included with the default `base` or `desktop` installations through the `ros--rmw-fastrtps` package. This means you just need to install *Fast-RTPS-Gen* and have your ROS 2 environment sourced (`source /opt/ros//setup.bash`) in order to be able to compile the `rtps` targets in the PX4-Autopilot repo. - -For *ROS2 Galactic and above*, one has to install the `rmw` implementation through `apt` using `apt install ros-galactic-rmw-fastrtps`, since the default middleware for Galactic and above is CycloneDDS and the FastDDS middleware doesn't come installed by default. -::: - -:::tip -Fast DDS is not an essential component of the PX4 Autopilot and should only be installed if you plan to interface the PX4 Autopilot with Fast RTPS/DDS participants. -ROS 2 nodes are an example of these, though Fast DDS middleware and C++ implementations are installed by default on ROS 2 Foxy and below, as mentioned above. -::: - -:::note -Fast DDS was previously named FastRTPS (the name was changed in version 2.0.0 as it now includes a full DDS implementation, rather than just the RTPS wire protocol). -::: - - -## Prerequisites - -*eProsima Fast DDS* requires the following packages to work. - -:::note -At time of writing you will need to install *from source* for: -- **Ubuntu 18.04:** Fast RTPS 1.8.4 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -- **Ubuntu 20.04:** Fast DDS 2.0.2 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -::: - -:::tip -Remember (again) you only need to install Fast DDS if you are not using ROS 2 and just want to leverage non-ROS2 DDS networks and applications. If you have ROS 2 installed (and `rmw-fasrtps` as its default middleware), you can skip to [Fast-RTPS-Gen build and install](#fast-rtps-gen). -::: - -### Java - -Java is required to build and use eProsima's RTPS/DDS from IDL code generation tool - *Fast-RTPS-Gen*. [Java JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) is recommended, and it is installed through the setup scripts made available in [Ubuntu Development Environment](../dev_setup/dev_env_linux.md). - -### Foonathan memory - -In order to build Fast DDS you need to install the Foonathan Memory dependency. - -```sh -git clone https://github.com/eProsima/foonathan_memory_vendor.git -cd foonathan_memory_vendor -mkdir build && cd build -cmake .. -cmake --build . --target install -``` - -:::note -If the last step fails, try running the command with the proper user privileges (`sudo`). -::: - - -## Installation from Sources - -### Fast DDS - -Clone the project from Github: - -```sh -git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.2 ~/FastDDS-2.0.2 -cd ~/FastDDS-2.0.2 -mkdir build && cd build -``` - -If you are on Linux, execute: - -```sh -cmake -DTHIRDPARTY=ON -DSECURITY=ON .. -make -j$(nproc --all) -sudo make install -``` - -This will install Fast DDS to `/usr/local`, with secure communications support. If you need to install to a custom location you can use: `-DCMAKE_INSTALL_PREFIX=`. - -#### Compile Options - -The following additional arguments can be used when calling *CMake*: - -- `-DCOMPILE_EXAMPLES=ON`: Compile the examples -- `-DPERFORMANCE_TESTS=ON`: Compile the performance tests - - -### Fast-RTPS-Gen - -*Fast-RTPS-Gen* is the Fast RTPS (DDS) IDL code generator tool. It should be installed after Fast RTPS (DDS) and made sure the `fastrtpsgen` application is in your `PATH`. You can check with `which fastrtpsgen`. - -Then clone Fast-RTPS-Gen 1.0.4: -``` -git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \ -&& cd ~/Fast-RTPS-Gen/gradle/wrapper -``` - -After that, modify the distribution version of gradle inside the gradle-wrapper.properties file to gradle-6.8.3 such that the distributionUrl file becomes as follows: - -``` -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip -``` -Now you should run the following commands: - -``` -cd ~/Fast-RTPS-Gen -./gradlew assemble && sudo env "PATH=$PATH" ./gradlew install -``` - -## Installation from Binaries - -:::note -Although the binaries are available, we recommend to build and install the code from source, given that the binaries may not come with required components and dependencies in place. -::: - -The latest binary release of *eProsima Fast DDS* can be downloaded from the [company website](http://www.eprosima.com/). - -Documentation on how to do this can be found here: [Installation from Binaries on Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) and [Installation from Binaries on Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) (*eProsima Fast DDS* official documentation) - -#### Environmental Variables - -* `FASTRTPSGEN_DIR`: Root folder where *eProsima Fast-RTPS-Gen* is installed, usually set to `/usr/local`, which is the default installation directory. If the user sets a different install directory in the `gradle install` step, it must set this variable to that same directory as well. Otherwise, the code generation step, and consequently, the build of the `rtps` targets in PX4 will fail. - - -## Further Information - -- [RTPS/DDS Interface: PX4-Fast RTPS(DDS) Bridge](../middleware/micrortps.md) -- [PX4-ROS 2 bridge](../ros/ros2_comm.md) - -- Additional installation information can be found in the official [*eProsima Fast DDS* documentation](https://fast-dds.docs.eprosima.com/en/latest/) (from which this topic is derived): - - Installation from Sources - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_windows.html) - - Installation from Binaries - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) diff --git a/tr/dronecan/README.md b/tr/dronecan/README.md index d77dbc80448d3..4de6625a61469 100644 --- a/tr/dronecan/README.md +++ b/tr/dronecan/README.md @@ -117,7 +117,7 @@ Upon boot the flight controller will automatically transfer the firmware onto th **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/tr/dronecan/ark_flow.md b/tr/dronecan/ark_flow.md index 6594fed96982f..c90e226f8cff8 100644 --- a/tr/dronecan/ark_flow.md +++ b/tr/dronecan/ark_flow.md @@ -85,7 +85,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/tr/dronecan/cuav_can_pmu.md b/tr/dronecan/cuav_can_pmu.md index 9c6a76e0a672f..a3f4b4befe553 100644 --- a/tr/dronecan/cuav_can_pmu.md +++ b/tr/dronecan/cuav_can_pmu.md @@ -55,12 +55,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/tr/dronecan/holybro_kotleta.md b/tr/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/tr/dronecan/holybro_kotleta.md +++ b/tr/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/tr/dronecan/holybro_m8n_gps.md b/tr/dronecan/holybro_m8n_gps.md index a7ada35d18cd9..4dff0321e0ab3 100644 --- a/tr/dronecan/holybro_m8n_gps.md +++ b/tr/dronecan/holybro_m8n_gps.md @@ -11,7 +11,7 @@ The GPS module uses the [DroneCAN](README.md) protocol for communication. DroneC Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/tr/dronecan/sapog.md b/tr/dronecan/sapog.md index 92b0b3332947d..31d47a6fd550f 100644 --- a/tr/dronecan/sapog.md +++ b/tr/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 Supported ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -UAVCAN is generally speaking a plug'n'play protocol. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -Some popular UAVCAN ESC firmware/products include: -- [Sapog](https://github.com/PX4/sapog#px4-sapog) firmware; an advanced open source sensorless PMSM/BLDC motor controller firmware designed for use in propulsion systems of electric unmanned vehicles. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC Project ESCs](https://vesc-project.com/) (see also [Benjamin Vedder's blog](http://vedder.se) - project owner) -- [OlliW’s UC4H ESC-Actuator Node](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- A number of others are [listed here](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko) - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## Purchase - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Mitochondrik based drives and ESC: -- [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## Wiring/Connections - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 Configuration - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. Power the vehicle using the battery (you must power the whole vehicle, not just the flight controller) and connect *QGroundControl*. -1. Navigate to the **Vehicle Setup > Parameters** screen. :::note [Parameters](../advanced_config/parameters.md) explains how to find and set parameters. -::: -1. Set [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to the value *Sensors and Motors* (3) and then reboot the flight controller. This enables automatic enumeration of the motors (ESC) as described in the [next section](#esc-setup). -1. (Optional) Set [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT) to 1 in order to ensure that the motors are always running at least at the idle throttle while the system is armed. :::note -Some systems will not benefit from this behavior, e.g. glider drones). -::: - - -## ESC Setup - -While UAVCAN devices are generally *plug'n'play* you will still need to enumerate (number) each of the ESC used in your system and set their direction so that they can be identified/controlled by PX4. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -The mechanism for enumerating each type of UAVCAN ESC is different (look up the instructions in your ESC's manual). Setup information for some UAVCAN ESCs is provided below. - - -### Sapog ESC Enumeration using QGroundControl - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. Power the vehicle with a battery and connect to *QGroundControl* -1. Navigate to **Vehicle Setup > Power** in QGC. -1. Start the process of ESC auto-enumeration by pressing the **Start Assignment** button, as shown on the screenshot below. - - ![QGC - UAVCAN ESC auto-enumeration](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - You will hear a sound indicating that the flight controller has entered the ESC enumeration mode. -1. Manually turn each motor in the correct direction of its rotation (as specified in the [Airframe Reference](../airframes/airframe_reference.md)), starting from the first motor and finishing with the last motor. Each time you turn a motor, you should hear a confirmation beep. - - :::note -Make sure to turn each of the motors in the correct direction, as the ESC will automatically learn and remember the direction (i.e. motors that spin clockwise during normal operation must also be turned clockwise during enumeration). -::: - -1. After the last motor is enumerated, the confirmation sound should change to indicate that the enumeration procedure is complete. -1. Reboot PX4 and the Sapog ESCs to apply the new enumeration IDs. - -The following video demonstrates the process: - -@[youtube](https://www.youtube.com/watch?v=4nSa8tvpbgQ) - -### Manual ESC Enumeration using Sapog - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -You can manually configure the ESC index and direction using the [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -:::note -See [Sapog reference manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) for more information about the parameters. -::: - -### Myxa ESC Setup - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -There is some guidance here: [Quick start guide for Myxa v0.1](https://forum.zubax.com/t/quick-start-guide-for-myxa-v0-1/911) (Zubax blog). - - -### VESC ESC Setup - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| Parameter | Option | -| ----------------------- | ---------------------- | -| App to use | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -VESC ID should have the same motor numbering as in PX4 convention, starting at `1` for top-right motor, `2` for bottom-left motor etc. However the `UAVCAN ESC Index` starts from `0`, and as such it is always one index lower than the `VESC ID`. For example, in a quadcopter the bottom left motor will have `VESC ID = 2` and `UAVCAN ESC Index = 1`. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## Troubleshooting - -#### Motors not spinning when armed - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN devices dont get node ID/Firmware Update Fails - -PX4 requires an SD card for UAVCAN node allocation and during firmware update (which happen during boot). Check that there is a (working) SD card present and reboot. - - -## Further Information - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 Reference Manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [Using Sapog based ESC with PX4](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/tr/uavcan/node_firmware.md b/tr/uavcan/node_firmware.md deleted file mode 100644 index dc75d9d1c5407..0000000000000 --- a/tr/uavcan/node_firmware.md +++ /dev/null @@ -1,59 +0,0 @@ -# UAVCAN Firmware Upgrading - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -:::warning -UAVCAN devices typically ship with appropriate firmware preinstalled. -These instructions are primarily needed when developing UAVCAN devices. -::: - -## Flashing/Updating a UAVCAN Binary - -To flash the UAVCAN device, all you need to do is copy the UAVCAN firmware binary into the root directory of the flight controller’s SD card and reboot. - -After restarting the flight controller the UAVCAN device will automatically be updated with new firmware. If successful the firmware binary will be removed from the root directory and there will be a file named **XX.bin** in the **/ufw** directory of the SD card. - -:::note UAVCAN -firmware is usually created as part of the build process. Commonly the firmware image is built in **build/_name_of_your_uavcan_device_**, where _name_of_your_uavcan_device_ is specific to the device you are flashing (e.g. **build/ark_can-flow_default**), and will be named with the format **XX-X.X.XXXXXXXX.uavcan.bin**. -::: - -## Building UAVCAN Firmware - -### ARK Flow - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### Sapog Codebase (Pixhawk ESC 1.4 and Zubax Orel 20) - -Please refer to the [project page](https://github.com/PX4/sapog) to learn how to build and flash this firmware. - -### Zubax GNSS - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### Vectorcontrol ESC Codebase (Pixhawk ESC 1.6 and S2740VC) - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -Before updating firmware via UAVCAN, the Pixhawk ESC 1.6 requires the UAVCAN bootloader be flashed. To build the bootloader, run: - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -After building, the bootloader image is located at `firmware/px4esc_1_6-bootloader.bin`, and the OpenOCD configuration is located at `openocd_px4esc_1_6.cfg`. Follow [these instructions](../uavcan/bootloader_installation.md) to install the bootloader on the ESC. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..bin`. diff --git a/tr/uavcan/notes.md b/tr/uavcan/notes.md deleted file mode 100644 index e5e72492f93dc..0000000000000 --- a/tr/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# Various Notes - -This is a collection of tips and tricks to solve issues when setting up or working with the UAVCAN. - -### Arm but motors not spinning - -If the PX4 Firmware arms but the motors do not start to rotate, check the parameter **UAVCAN\_ENABLE**. It should be set to 3 in order to use the ESCs connected via UAVCAN as output. Moreover, if the motors do not start spinning before thrust is increased, check **UAVCAN\_ESC\_IDLT** and set it to one. - -### Debugging with Zubax Babel - -A great tool to debug the transmission on the UAVCAN bus is the [Zubax Babel](https://zubax.com/products/babel) in combination with the [GUI tool](http://uavcan.org/GUI_Tool/Overview/). They can also be used independently from Pixhawk hardware in order to test a node or manually control UAVCAN enabled ESCs. - - -### UAVCAN devices dont get node ID/FW doesn't update - -PX4 requires an SD card for UAVCAN node allocation and firmware upgrade (both of which happen during boot). Check that there is a (working) SD card present and reboot. - diff --git a/tr/uavcan/pomegranate_systems_pm.md b/tr/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 3954b4e75fe1c..0000000000000 --- a/tr/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate Systems Power Module - -![Module Image](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -Digital Power Module with high resolution current integration, 5V/2A supply with power monitoring, single UAVCAN v0 CANbus interface, and an RGB status LED. - -Detailed setup, configuration, and troubleshooting information can be found on the [manufacturer's device home page](https://p-systems.io/product/power_module). - -## Specifications - - - **Input Voltage:** 6-26V \(2-6S\) - - **Max Continuous Current:** - - **Benchtop:** 40A - - **Forced Cooling:** 100A - - **Max 5V Output Current:** 2A - - **Voltage Resolution:** 0.04 ΔV - - **Current Resolution:** - - **Primary / Battery Bus:** 0.02 ΔA - - **5V bus:** 0.001 ΔA - - **CANbus Termination:** Electronic (on by default) - - **MCU:** STM32 F302K8U - - **Firmware:** [Open Source](https://bitbucket.org/p-systems/firmware/) - - **Electrical Interface:** - - **Power:** Solder pads or XT60PW (right angle, board-mounted connectors) - - **CANbus** Dual JST GH-4 (standard UAVCAN micro-connector) - - **I2C / Serial:** JST GH-5 - - **5V Output:** Solder pads or CANbus / I2C connectors - - **Device Mass:** - - **Without Connectors:** 9g - - **With XT60PW Connectors:** 16g - - - ![Dimensions](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## Configuration - - 1. Enable UAVCAN by setting the [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) parameter to `2` (Sensors Automatic Config) or `3`. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * Battery capacity in mAh: `battery_capacity_mAh` - * Battery voltage when *full*: `battery_full_V`, - * Battery voltage when *empty*: `battery_empty_V` - * Turn on current integration: `enable_current_track` - * (optional) Turn Off CANbus termination resistor :`enable_can_term` - -**Example:** A Power Module with UAVCAN node id `125` connected to a `3S` LiPo with capacity of `5000mAh` can be configured with the following commands: - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -See [device configuration page](https://p-systems.io/product/power_module/configuration) for a full list of parameters. diff --git a/zh/README.md b/zh/README.md index c9fff4b6078c0..b1f65b9c2cde7 100644 --- a/zh/README.md +++ b/zh/README.md @@ -101,8 +101,7 @@ The *Dronecode Calendar* shows important community events for platform users and * [澳大利亚 - 墨尔本/悉尼/霍巴特](https://calendar.google.com/calendar/embed?src=linuxfoundation.org_g21tvam24m7pm7jhev01bvlqh8%40group.calendar.google.com&ctz=Australia%2FSydney) :::tip - -日历默认为CET。 +The calendar default timezone is Central European Time (CET). ::: diff --git a/zh/SUMMARY.md b/zh/SUMMARY.md index 47ae444794059..3a3094557233e 100644 --- a/zh/SUMMARY.md +++ b/zh/SUMMARY.md @@ -23,8 +23,8 @@ * [Holybro Pixhawk 6C Wiring Quickstart](assembly/quick_start_pixhawk6c.md) * [Holybro Pixhawk 6X Wiring Quickstart](assembly/quick_start_pixhawk6x.md) * [Holybro Pixhawk 5X Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - * [Holybro Pixhawk 4 Wiring Quickstart](assembly/quick_start_pixhawk4.md) - * [Holybro Pixhawk 4 Mini Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) + * [Holybro Pixhawk 4 Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4.md) + * [Holybro Pixhawk 4 Mini Wiring Quickstart - Discontinued](assembly/quick_start_pixhawk4_mini.md) * [Holybro Durandal Wiring Quickstart](assembly/quick_start_durandal.md) * [Holybro Pix32 v5 Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md) * [Cube Wiring Quickstart](assembly/quick_start_cube.md) @@ -58,7 +58,7 @@ * [S500 V2 (Pixhawk 4)](frames_multicopter/holybro_s500_v2_pixhawk4.md) * [DJI F450 (CUAV v5+)](frames_multicopter/dji_f450_cuav_5plus.md) * [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md) - * [QAV250 (Pixhawk4 Mini)](frames_multicopter/holybro_qav250_pixhawk4_mini.md) + * [QAV250 (Pixhawk4 Mini) - Discontinued](frames_multicopter/holybro_qav250_pixhawk4_mini.md) * [DJI F450 + RTK \(Pixhawk 3 Pro\)](frames_multicopter/dji_flamewheel_450.md) * [QAV250 \(Pixhawk Mini\)](frames_multicopter/lumenier_qav250_pixhawk_mini.md) * [QAV-R 5" Racer (Pixracer)](frames_multicopter/qav_r_5_kiss_esc_racer.md) @@ -177,13 +177,13 @@ * [Holybro Pixhawk 6C (FMUv6C)](flight_controller/pixhawk6c.md) * [Holybro Pix32 v6 (FMUv6C)](flight_controller/holybro_pix32_v6.md) * [Holybro Pixhawk 5X (FMUv5X)](flight_controller/pixhawk5x.md) - * [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - * [Holybro Pixhawk 4 Mini (FMUv5)](flight_controller/pixhawk4_mini.md) + * [Holybro Pixhawk 4 (FMUv5) - Discontinued](flight_controller/pixhawk4.md) + * [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued ](flight_controller/pixhawk4_mini.md) * [Drotek Pixhawk 3 Pro (FMUv4pro)](flight_controller/pixhawk3_pro.md) * [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) * [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) * [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - * [Holybro Pixhawk Mini (FMUv3)](flight_controller/pixhawk_mini.md) + * [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) * [制造商支持的自动飞行器](flight_controller/autopilot_manufacturer_supported.md) * [AirMind MindPX](flight_controller/mindpx.md) * [AirMind MindRacer](flight_controller/mindracer.md) @@ -193,19 +193,19 @@ * [雷迅 V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) * [雷迅 V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md) * [雷迅 Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) + * [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md) + * [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) + * [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md) * [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md) - * [Holybro Kakute F7](flight_controller/kakutef7.md) * [Holybro Kakute H7](flight_controller/kakuteh7.md) * [Holybro Durandal](flight_controller/durandal.md) * [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md) - * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) * [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) * [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md) + * [mRobotics-X2.1 (FMUv2)](flight_controller/mro_x2.1.md) + * [mRo Control Zero F7)](flight_controller/mro_control_zero_f7.md) * [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) * [Sky-Drones AIRLink](flight_controller/airlink.md) * [SPRacing SPRacingH7EXTREME](flight_controller/spracingh7extreme.md) @@ -213,19 +213,20 @@ * [ThePeach FCC-R1](flight_controller/thepeach_r1.md) * [实验性自动驾驶仪](flight_controller/autopilot_experimental.md) * [BeagleBone Blue](flight_controller/beaglebone_blue.md) - * [Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md) - * [Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) * [树莓派 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) * [树莓派 2/3/4 PilotPi](flight_controller/raspberry_pi_pilotpi.md) * [在树莓派 OS 上使用 PilotPi](flight_controller/raspberry_pi_pilotpi_rpios.md) * [使用 Ubuntu 服务的 PilotPi](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) * [停产的自动驾驶仪/机体](flight_controller/autopilot_discontinued.md) + * [Drotek Dropix (FMUv2)](flight_controller/dropix.md) * [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) * [BetaFPV Beta75X 2S 穿越机](complete_vehicles/betafpv_beta75x.md) * [Bitcraze Crazyflie 2.0 ](complete_vehicles/crazyflie2.md) * [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) * [雷迅 v5](flight_controller/cuav_v5.md) + * [Holybro Kakute F7 (Discontinued)](flight_controller/kakutef7.md) * [Holybro Pixfalcon](flight_controller/pixfalcon.md) + * [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) * [mRo AUAV-X2](flight_controller/auav_x2.md) * [3DR Pixhawk 1](flight_controller/pixhawk.md) * [骁龙飞控](flight_controller/snapdragon_flight.md) @@ -240,6 +241,7 @@ * [LOCOSYS Hawk A1 GNSS](gps_compass/gps_locosys_hawk_a1.md) * [Hex Here2](gps_compass/gps_hex_here2.md) * [Holybro M8N & M9N GPS](gps_compass/gps_holybro_m8n_m9n.md) + * [Holybro Unicore GPS](gps_compass/gps_holybro_unicore.md) * [Sky-Drones SmartAP GPS](gps_compass/gps_smartap.md) * [RTK GPS](gps_compass/rtk_gps.md) * [ARK RTK GPS](dronecan/ark_rtk_gps.md) @@ -254,6 +256,8 @@ * [Holybro H-RTK-M8P](gps_compass/rtk_gps_holybro_h-rtk-m8p.md) * [Locosys Hawk R1](gps_compass/rtk_gps_locosys_r1.md) * [Locosys Hawk R2](gps_compass/rtk_gps_locosys_r2.md) + * [Septentrio AsteRx-RIB](gps_compass/septentrio_asterx-rib.md) + * [Septentrio mosaic-go](gps_compass/septentrio_mosaic-go.md) * [Trimble MB-Two](gps_compass/rtk_gps_trimble_mb_two.md) * [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) * [数传电台](telemetry/README.md) @@ -267,8 +271,8 @@ * [Microhard Serial Telemetry Radio](telemetry/microhard_serial.md) * [ARK Electron Microhard Serial Telemetry Radio](telemetry/ark_microhard_serial.md) * [Holybro Microhard P900 Telemetry Radio](telemetry/holybro_microhard_p900_radio.md) - * [HolyBro XBP9X Telemetry Radio](telemetry/holybro_xbp9x_radio.md) * [CUAV P8 Telemetry Radio](telemetry/cuav_p8_radio.md) + * [HolyBro XBP9X - Discontinued](telemetry/holybro_xbp9x_radio.md) * [睿思凯数传](peripherals/frsky_telemetry.md) * [Power Modules/PDB](power_module/README.md) * [雷迅 HV pm](power_module/cuav_hv_pm.md) @@ -295,16 +299,17 @@ * [TFSlot Airspeed Sensor](sensor/airspeed_tfslot.md) * [光流](sensor/optical_flow.md) * [ARK 光流](dronecan/ark_flow.md) - * [PX4光流](sensor/px4flow.md) * [PMW3901](sensor/pmw3901.md) + * [PX4FLOW (Deprecated)](sensor/px4flow.md) * [电调 & 电机](peripherals/esc_motors.md) * [PWM 电调和伺服系统](peripherals/pwm_escs_and_servo.md) * [DShot 电调](peripherals/dshot.md) * [OneShot 电调和伺服系统](peripherals/oneshot.md) - * [Zubax Telega](dronecan/zubax_telega.md) - * [PX4 Sapog ESC Firmware](dronecan/sapog.md) - * [Holybro Kotleta](dronecan/holybro_kotleta.md) - * [Zubax Orel](dronecan/zubax_orel.md) + * [DroneCAN ESCs](dronecan/escs.md) + * [Zubax Telega](dronecan/zubax_telega.md) + * [PX4 Sapog ESC Firmware](dronecan/sapog.md) + * [Holybro Kotleta](dronecan/holybro_kotleta.md) + * [Zubax Orel](dronecan/zubax_orel.md) * [VESC](peripherals/vesc.md) * [相机](peripherals/camera.md) * [Gimbal \(Mount\) Configuration](advanced/gimbal_control.md) @@ -323,6 +328,7 @@ * [ARK CANnode](dronecan/ark_cannode.md) * [机载电脑](companion_computer/README.md) * [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) + * [RasPi Pixhawk Companion](companion_computer/pixhawk_rpi.md) * [机载计算机外设](companion_computer/companion_computer_peripherals.md) * [Holybro Pixhawk RPI CM4 Baseboard](companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) * [开发](development/development.md) @@ -333,6 +339,7 @@ * [Ubuntu设置](dev_setup/dev_env_linux_ubuntu.md) * [Windows 设置](dev_setup/dev_env_windows_wsl.md) * [Visual Studio Code IDE](dev_setup/vscode.md) + * [Other/Generic Tools](dev_setup/generic_dev_tools.md) * [构建代码](dev_setup/building_px4.md) * [编写您的第一个应用程序](modules/hello_sky.md) * [应用/模块 模板](modules/module_template.md) @@ -351,6 +358,7 @@ * [jMAVSim 模拟](simulation/jmavsim.md) * [使用 JMAVSim 进行多飞行器仿真](simulation/multi_vehicle_jmavsim.md) * [Gazebo 仿真](sim_gazebo_gz/README.md) + * [Vehicles](sim_gazebo_gz/gazebo_vehicles.md) * [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) * [Gazebo Classic Simulation](sim_gazebo_classic/README.md) * [Vehicles](sim_gazebo_classic/gazebo_vehicles.md) @@ -389,7 +397,6 @@ * [uORB 消息参考](msg_docs/README.md) * [ActionRequest](msg_docs/ActionRequest.md) * [ActuatorArmed](msg_docs/ActuatorArmed.md) - * [ActuatorControls](msg_docs/ActuatorControls.md) * [ActuatorControlsStatus](msg_docs/ActuatorControlsStatus.md) * [ActuatorMotors](msg_docs/ActuatorMotors.md) * [ActuatorOutputs](msg_docs/ActuatorOutputs.md) @@ -441,6 +448,7 @@ * [FollowTargetStatus](msg_docs/FollowTargetStatus.md) * [GeneratorStatus](msg_docs/GeneratorStatus.md) * [GeofenceResult](msg_docs/GeofenceResult.md) + * [GimbalControls](msg_docs/GimbalControls.md) * [GimbalDeviceAttitudeStatus](msg_docs/GimbalDeviceAttitudeStatus.md) * [GimbalDeviceInformation](msg_docs/GimbalDeviceInformation.md) * [GimbalDeviceSetAttitude](msg_docs/GimbalDeviceSetAttitude.md) @@ -478,6 +486,7 @@ * [ModeCompleted](msg_docs/ModeCompleted.md) * [MountOrientation](msg_docs/MountOrientation.md) * [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) + * [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) * [NpfgStatus](msg_docs/NpfgStatus.md) * [ObstacleDistance](msg_docs/ObstacleDistance.md) * [OffboardControlMode](msg_docs/OffboardControlMode.md) @@ -528,6 +537,7 @@ * [TaskStackInfo](msg_docs/TaskStackInfo.md) * [TecsStatus](msg_docs/TecsStatus.md) * [TelemetryStatus](msg_docs/TelemetryStatus.md) + * [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) * [TimesyncStatus](msg_docs/TimesyncStatus.md) * [TrajectoryBezier](msg_docs/TrajectoryBezier.md) * [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -568,12 +578,12 @@ * [VehicleTrajectoryBezier](msg_docs/VehicleTrajectoryBezier.md) * [VehicleTrajectoryWaypoint](msg_docs/VehicleTrajectoryWaypoint.md) * [VtolVehicleStatus](msg_docs/VtolVehicleStatus.md) - * [WheelEncoders](msg_docs/WheelEncoders.md) * [Wind](msg_docs/Wind.md) * [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) * [MAVLink通讯](middleware/mavlink.md) - * [XRCE-DDS (PX4-ROS2/DDS Bridge)](middleware/xrce_dds.md) + * [XRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/xrce_dds.md) * [模块 & 命令](modules/modules_main.md) + * [自动调参](modules/modules_autotune.md) * [命令](modules/modules_command.md) * [通信](modules/modules_communication.md) * [控制器](modules/modules_controller.md) @@ -582,7 +592,11 @@ * [气压计](modules/modules_driver_baro.md) * [距离传感器](modules/modules_driver_distance_sensor.md) * [IMU](modules/modules_driver_imu.md) + * [INS](modules/modules_driver_ins.md) * [磁罗盘](modules/modules_driver_magnetometer.md) + * [光流](modules/modules_driver_optical_flow.md) + * [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + * [Transponder](modules/modules_driver_transponder.md) * [估计器](modules/modules_estimator.md) * [仿真](modules/modules_simulation.md) * [系统](modules/modules_system.md) @@ -646,14 +660,14 @@ * [ROS 2](ros/ros2.md) * [ROS 2 用户指南](ros/ros2_comm.md) * [ROS 2 Offboard Control Example](ros/ros2_offboard_control.md) - * [基于 ROS 2 桥的 ROS (1) ](ros/ros1_via_ros2.md) - * [基于 MAVROS 的ROS (1) ](ros/ros1.md) + * [ROS 2 Multi Vehicle Simulation](ros/ros2_multi_vehicle.md) + * [ROS 1 with MAVROS](ros/ros1.md) * [ROS/MAVROS安装指南](ros/mavros_installation.md) * [ROS/MAVROS Offboard Example (C++)](ros/mavros_offboard_cpp.md) * [ROS/MAVROS Offboard Example (Python)](ros/mavros_offboard_python.md) * [ROS/MAVROS 发送自定义消息](ros/mavros_custom_messages.md) - * [ROS/MAVROS 与 Gazebo 仿真。](simulation/ros_interface.md) - * [具有 ROS(1) 的 OctoMap 模型](sim_gazebo_classic/gazebo_octomap.md) + * [ROS/MAVROS with Gazebo Classic Simulation](simulation/ros_interface.md) + * [Gazebo Classic OctoMap Models with ROS 1](sim_gazebo_classic/gazebo_octomap.md) * [在 RPi 安装 ROS/MAVROS ](ros/raspberrypi_installation.md) * [外部位置估计(基于视觉/运动)](ros/external_position_estimation.md) * [DroneKit](robotics/dronekit.md) diff --git a/zh/advanced/computer_vision.md b/zh/advanced/computer_vision.md index 2e2544ac8da78..894bb9390994c 100644 --- a/zh/advanced/computer_vision.md +++ b/zh/advanced/computer_vision.md @@ -45,8 +45,8 @@ VIO 使用[视觉测距](https://en.wikipedia.org/wiki/Visual_odometry)中的视 [光流](../sensor/optical_flow.md)提供 2D 速度估计(使用向下的相机和向下的距离传感器)。 有关光流的信息,请参阅: + - [光流](../sensor/optical_flow.md) - - [PX4Flow 智能摄像机](../sensor/px4flow.md) - [EKF > 光流](../advanced_config/tuning_the_ecl_ekf.md#optical-flow) ## 外部资源 diff --git a/zh/advanced/gimbal_control.md b/zh/advanced/gimbal_control.md index cd8afc1e3feda..59a76a49aed8e 100644 --- a/zh/advanced/gimbal_control.md +++ b/zh/advanced/gimbal_control.md @@ -1,23 +1,23 @@ -# Gimbal Configuration +# 云台配置 -This page explains how to configure and control a gimbal that has an attached camera (or any other payload). +本页面介绍了如何配置及控制一个安装了相机(或其他任务载荷)的云台。 -## Overview +## 概述 -PX4 contains a generic mount/gimbal control driver that supports different input and output methods: +PX4包含支持不同输入输出方法的通用云台驱动程序: -- The input method defines the protocol used to command a gimbal mount that is managed by PX4. This might be an RC controller, a MAVLink command sent by a GCS, or both — automatically switching between them. -- The output method defines how PX4 communicates with the connected gimbal. The recommended protocol is MAVLink v2, but you can also connect directly to a flight controller PWM output port. +- **输入方法**定义了被PX4管理的云台指令协议。 该输入可能是一个RC遥控器,通过GCS发送的MAVLink命令,或者两者兼备并可自动切换。 +- **输出方法**定义了PX4如何与已连接的云台通讯。 推荐使用Mavlink v2协议,但是你也可以直接通过PWM输出端口与非空链接。 -PX4 takes the input signal and routes/translates it to be sent through to the output. Any input method can be selected to drive any output. +PX4接收输入信号并将其经过路由/转换发送至输出。 任何输入方法都可以被用来驱动任何输出。 -Both the input and output are configured using parameters. The input is set using the parameter [MNT_MODE_IN](../advanced_config/parameter_reference.md#MNT_MODE_IN). By default this is set to `Disabled (-1)` and the driver does not run. After selecting the input mode, reboot the vehicle to start the mount driver. +输入和输出都使用参数进行配置。 输入通过参数[MNT_MODE_IN](../advanced_config/parameter_reference.md#MNT_MODE_IN)进行设置。 默认情况下设置为 `Disabled (-1)` 既驱动不运行。 在选择输入模式后,请重新启动飞行器以启动云台驱动程序。 -You should set `MNT_MODE_IN` to one of: `RC (1)`, `MAVlink gimbal protocol v2 (4)` or `Auto (0)` (the other options are deprecated). If you select `Auto (0)`, the gimbal will automatically select either RC or or MAVLink input based on the latest input. Note that the auto-switch from MAVLink to RC requires a large stick motion! +`MNT_MODE_IN` 应该被设置为下列选项中的其中一个: `RC (1)` ,`MAVlink gimbal protocol v2 (4)` 或 `Auto (0)` (其他选项已废弃)。 如果选择 `Auto(0)`,则云台将基于最新地输入自动选择 RC 或 MAVLink 作为输入。 请注意,从 MAVLink 到 RC 的自动切换需要一个大幅度地杆量操作! -The output is set using the [MNT_MODE_OUT](../advanced_config/parameter_reference.md#MNT_MODE_OUT) parameter. By default the output is set to a PXM port (`AUX (0)`). If the [MAVLink Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) is supported by your gimbal, you should instead select `MAVLink gimbal protocol v2 (2)`. +输出通过参数[MNT_MODE_OUT](../advanced_config/parameter_reference.md#MNT_MODE_OUT)进行设置。 默认情况下,输出被设置为 PXM 端口(`AUX (0)`)。 如果云台支持 [MAVLink Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) ,应该选择 `MAVLink gimbal protocl v2 (2)`。 -The full list of parameters for setting up the mount driver can be found in [Parameter Reference > Mount](../advanced_config/parameter_reference.md#mount). The relevant settings for a number of common gimbal configurations are described below. +云台驱动的完整参数列表可在 [参数 > Mount](../advanced_config/parameter_reference.md#mount) 中找到。 下面介绍了一些通用的云台相关设置。 ## MAVLink 云台(MNT_MODE_OUT=MAVLINK) @@ -68,11 +68,11 @@ The [Gazebo Classic](../sim_gazebo_classic/README.md) simulation [Typhoon H480 m make px4_sitl gazebo-classic_typhoon_h480 ``` -为了能够在其他模型或者仿真器件下测试挂载驱动,请使用 `vmount start` 去确保驱动正在运行。 然后再配置它的参数。 +To just test the [gimbal driver](../modules/modules_driver.md#gimbal) on other models or simulators, make sure the driver runs (using `gimbal start`), then configure its parameters. ## 测试 -The driver provides a simple test command — it needs to be stopped first with `vmount stop`. 接下来描述了在SITL中的测试方式,但是这些指令也可以在真实的设备中使用。 +The driver provides a simple test command. 接下来描述了在SITL中的测试方式,但是这些指令也可以在真实的设备中使用。 使用下面这条指令开始仿真(不需要修改任何参数): @@ -83,7 +83,7 @@ make px4_sitl gazebo-classic_typhoon_h480 确保无人机是上锁状态,例如使用`命令行 takeoff`, 然后用下面的命令来控制云台(例如): ``` -vmount test yaw 30 +gimbal test yaw 30 ``` 注意模拟的云台自身稳定,因此如果发送 MAVLink 命令,设置`stabilize`标志为`false`。 diff --git a/zh/advanced/package_delivery.md b/zh/advanced/package_delivery.md index 4f0813e9189b6..45ad8c56c4fc0 100644 --- a/zh/advanced/package_delivery.md +++ b/zh/advanced/package_delivery.md @@ -9,7 +9,7 @@ Currently only [Grippers](../peripherals/gripper.md) can be used for package del ::: :::note -The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). +The detailed documentation on how to setup a package delivery mission plan can be found [here](../flying/package_delivery_mission.md). Setup for the `payload_deliverer` module is covered in the documentation for the delivery mechanism, such as [Gripper](../peripherals/gripper.md#px4-configuration). ::: @@ -57,4 +57,4 @@ Also it implements the actual issue_command function, which will issue a vehicle This is a dedicated module that handles gripper / winch support, which is used for the standard [package delivery mission plan](../flying/package_delivery_mission.md). -Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#enable-payload-delivery-feature-gripper). \ No newline at end of file +Setup for the `payload_deliverer` module is covered within setting up an actual package release mechanism setup documentation like [Gripper](../peripherals/gripper.md#px4-configuration). \ No newline at end of file diff --git a/zh/advanced_config/bootloader_update.md b/zh/advanced_config/bootloader_update.md index 6d4bffdf6765c..335cc8b273319 100644 --- a/zh/advanced_config/bootloader_update.md +++ b/zh/advanced_config/bootloader_update.md @@ -1,6 +1,6 @@ # Bootloader 更新 -[PX4 bootloader](https://github.com/PX4/Bootloader)用于为 Pixhawk 板(PX4FMU, PX4IO)和[PX4FLOW](../sensor/px4flow.md)加载固件。 +The [PX4 bootloader](https://github.com/PX4/Bootloader) is used to load firmware for Pixhawk boards (PX4FMU, PX4IO). 此篇介绍了更新 Pixhawk bootloader 的几种常见方法。 @@ -8,7 +8,7 @@ 硬件通常预先安装了合适的引导程序版本。 A case where you may need to update is newer Pixhawk boards that install FMUv2 firmware: [Firmware > FMUv2 Bootloader Update](../config/firmware.md#bootloader). ::: -## 构建新的 PX4 bootloader +## Building the new PX4 Bootloader Yourself 以 FMUv6X (STM32H7)开始的板子使用树内的 PX4 bootloader。 旧板子使用遗留的 [PX4 bootloader](https://github.com/PX4/Bootloader) 仓库中的 bootloader。 请参考README中的说明来学习如何使用它。 diff --git a/zh/advanced_config/bootloader_update_from_betaflight.md b/zh/advanced_config/bootloader_update_from_betaflight.md index c27da8b922fc0..a8f924933493a 100644 --- a/zh/advanced_config/bootloader_update_from_betaflight.md +++ b/zh/advanced_config/bootloader_update_from_betaflight.md @@ -4,7 +4,8 @@ There are two options for flashing the bootloader: via *Betaflight Configurator* (easier), or building from source. - + + ### 使用 Betaflight 配置器 更新 Bootloader To install the PX4 bootloader using the *Betaflight Configurator*: @@ -20,7 +21,38 @@ To install the PX4 bootloader using the *Betaflight Configurator*: #### 下载 Bootloader 源 -通过以下命令下载并编译 [ Bootloader ](https://github.com/PX4/Bootloader): +Flight controllers that have bootloader PX4-Autopilot `make` targets, can build the bootloader from the PX4-Autopilot source. The list of controllers for which this applies can be obtained by running the following `make` command, and noting the make targets that end in `_bootloader` + +``` +$make list_config_targets + +... +cuav_nora_bootloader +cuav_x7pro_bootloader +cubepilot_cubeorange_bootloader +holybro_durandal-v1_bootloader +holybro_kakuteh7_bootloader +matek_h743-mini_bootloader +matek_h743-slim_bootloader +modalai_fc-v2_bootloader +mro_ctrl-zero-classic_bootloader +mro_ctrl-zero-h7_bootloader +mro_ctrl-zero-h7-oem_bootloader +mro_pixracerpro_bootloader +px4_fmu-v6u_bootloader +px4_fmu-v6x_bootloader +``` + +To build for these flight controllers, download and build the [PX4-Autopilot source](https://github.com/PX4/PX4-Autopilot), and then make the target using the following commands: + +```bash +git clone --recursive https://github.com/PX4/PX4-Autopilot.git +cd PX4-Autopilot +make # For example: holybro_kakuteh7mini_bootloader +``` + +For other flight controllers download and build the [Bootloader source](https://github.com/PX4/Bootloader) and then make using the appropriate targets: + ``` git clone --recursive https://github.com/PX4/Bootloader.git cd Bootloader @@ -41,6 +73,17 @@ make # For example: omnibusf4sd_bl or kakutef7_bl ##### dfu-util +:::note +The [Holybro Kakute H7 v2](../flight_controller/kakuteh7v2.md) and mini flight controllers may require that you first run an additional command to erase flash parameters (in order to fix problems with parameter saving): + +``` +dfu-util -a 0 --dfuse-address 0x08000000:force:mass-erase:leave -D build//.bin +``` + +The command may generate an error which can be ignored. Once completed, enter DFU mode again to complete the regular flashing. 飞控板上电后可以放开该按钮。 + +To flash the bootloader onto the flight controller: + ``` dfu-util -a 0 --dfuse-address 0x08000000 -D build//.bin ``` diff --git a/zh/advanced_config/esc_calibration.md b/zh/advanced_config/esc_calibration.md index 7e911283aea85..20d009a9ea4ff 100644 --- a/zh/advanced_config/esc_calibration.md +++ b/zh/advanced_config/esc_calibration.md @@ -42,4 +42,6 @@ These instructions are only relevant to [PWM ESCs](../peripherals/pwm_escs_and_s :::note -高品质的电调带有出厂校准。 In *theory* this means that they can be configured by just setting the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX) parameters to the values provided in the ESC technical specification. 实际上,即使在高质量控制器上,输入范围也可能不同,这就是建议校准的原因。 ::: +高品质的电调带有出厂校准。 In *theory* this means that the outputs might be can be configured by setting the values provided in the ESC technical specification for each output during [Actuator Configuration](../config/actuators.md) (under the hood this sets the [PWM_MAIN_MINn](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1)/[PWM_AUX_MINn](../advanced_config/parameter_reference.md#PWM_AUX_MIN1) and [PWM_MAIN_MAXn](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1)/[PWM_AUX_MAXn](../advanced_config/parameter_reference.md#PWM_AUX_MAX1) parameters). + +In practice the input range may differ even on high quality controllers. Using this calibration tool is recommended, as it ensures that all ESC behave exactly the same way. ::: diff --git a/zh/advanced_config/ethernet_setup.md b/zh/advanced_config/ethernet_setup.md index 5fff3662c3a46..a70031845c455 100644 --- a/zh/advanced_config/ethernet_setup.md +++ b/zh/advanced_config/ethernet_setup.md @@ -14,7 +14,7 @@ This topic covers: - [PX4 MAVLink Serial Port Configuration](#px4-mavlink-serial-port-configuration) - [QGroundControl Setup Example](#qgroundcontrol-setup-example) - [MAVSDK-Python Setup Example](#mavsdk-python-setup-example) - - [ROS2 Setup Example](#ros2-setup-example) + - [ROS 2 Setup Example](#ros-2-setup-example) ## Supported Flight Controllers @@ -77,7 +77,7 @@ To set the above "example" configuration using the *QGroundControl*: 1. Once the network configuration has been set you can disconnect the USB cable. 1. Reboot the flight controller to apply the settings. -Note that the above setup gives the flight controller an address on the Ethernet network. You also need to \[configure the Ethernet port\]((#px4-mavlink-serial-port-configuration) to use MAVLink. +Note that the above setup gives the flight controller an address on the Ethernet network. You also need to [configure the Ethernet port](#px4-mavlink-serial-port-configuration) to use MAVLink. ### Ubuntu Ethernet Network Setup @@ -187,55 +187,44 @@ can connect to the PX4 on port `14550` if you don't modify the PX4 Ethernet port ::: -## ROS2 Setup Example - -:::warning -**This section is out of date!** It relies on the [PX4-Fast RTPS(DDS) Bridge](/middleware/micrortps.md), which is no longer supported. We plan to retest and update it for the [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md) in the near future. -::: +## ROS 2 Setup Example +:::note Prerequisites: - -- You have a supported autopilot hardware with RTPS feature enabled firmware on it by using [this guide](../middleware/micrortps.md#client-px4-px4-autopilot). -- [ROS2](../ros/ros2_comm.md#sanity-check-the-installation) has been set up correctly and [sanity check](../ros/ros2_comm.md#sanity-check-the-installation) has been confirmed. +- You have a supported autopilot hardware running PX4 firmware that includes [XRCE-DDS](../middleware/xrce_dds.md) middleware. Note that PX4 v1.14 and later include the required [microdds-client](../modules/modules_system.md#microdds-client) module by default. +- [ROS 2](../ros/ros2_comm.md) has been set up correctly on the companion computer. - You have followed the Ethernet network and port setup as discussed at the top of this page. +::: -In this example it is assumed that you have followed the example to set your IP addresses. +To set up ROS 2: + +1. Connect your flight controller and companion computer via Ethernet. +2. [Start the micro XRCE-DDS client on PX4](../middleware/xrce_dds.md#starting-the-client), either manually or by customizing the system startup script. Note that you must use the IP address of the companion computer and the UDP port on which the agent is listening (the example configuration above sets the companion IP address to `192.168.0.1`, and the agent UDP port is set to `8888` in the next step). +3. [Start the XRCE-DDS agent on the companion computer](../middleware/xrce_dds.md#starting-the-agent). For example, enter the following command in a terminal to start the agent listening on UDP port `8888`. -1. Connect your Flight controller via Ethernet -2. Open **QGroundControl > Analyze Tools > MAVLink Console** -3. Enter the command below to start the micro_rtps client on your flight controller. Note that the remote IP here is your companion computer IP. This by default starts the micrortps_client connected to UDP ports 2019 and 2020 To make changes you can take a look at [RTPS guide](../middleware/micrortps.md#client-px4-px4-autopilot) - ``` - micrortps_client start -t UDP -i - ``` - An output like below is expected in the console: ``` - INFO [micrortps_client] UDP transport: ip address: 192.168.0.1; recv port: 2019; send port: 2020 - INFO [micrortps_client] UDP transport: Trying to connect... - INFO [micrortps_client] UDP transport: Connected to server! + MicroXRCEAgent udp4 -p 8888 ``` -5. Then we need to run the agent by typing the below commands in a new terminal on either our Linux computer. This will start the agent on `localhost` which is `127.0.0.1`. +4. Run a [listener node](../ros/ros2_comm.md#running-the-example) in a new terminal to confirm the connection is established: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ micrortps_agent start -t UDP + source ~/ws_sensor_combined/install/setup.bash + ros2 launch px4_ros_com sensor_combined_listener.launch.py ``` -6. In a new terminal you can run a listener node to confirm the connection is established: + + If everything is setup correctly, the following output should be displayed in the terminal: + ``` - $ source ~/px4_ros_com_ros2/install/setup.bash - $ ros2 launch px4_ros_com sensor_combined_listener.launch.py + RECEIVED SENSOR COMBINED DATA + ============================= + ts: 855801598 + gyro_rad[0]: -0.00339938 + gyro_rad[1]: 0.00440091 + gyro_rad[2]: 0.00513893 + gyro_integral_dt: 4997 + accelerometer_timestamp_relative: 0 + accelerometer_m_s2[0]: -0.0324082 + accelerometer_m_s2[1]: 0.0392213 + accelerometer_m_s2[2]: -9.77914 + accelerometer_integral_dt: 4997 ``` - -If everything goes ok and there is an established connection you can see the output below in your terminal: -``` -RECEIVED SENSOR COMBINED DATA -============================= -ts: 855801598 -gyro_rad[0]: -0.00339938 -gyro_rad[1]: 0.00440091 -gyro_rad[2]: 0.00513893 -gyro_integral_dt: 4997 -accelerometer_timestamp_relative: 0 -accelerometer_m_s2[0]: -0.0324082 -accelerometer_m_s2[1]: 0.0392213 -accelerometer_m_s2[2]: -9.77914 -accelerometer_integral_dt: 4997 -``` diff --git a/zh/advanced_config/imu_factory_calibration.md b/zh/advanced_config/imu_factory_calibration.md index 6ce8addcfc443..636d413b0a092 100644 --- a/zh/advanced_config/imu_factory_calibration.md +++ b/zh/advanced_config/imu_factory_calibration.md @@ -15,7 +15,7 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](accelerometer.md#performing-the-calibration) [gyroscope](gyroscope.md#performing-the-calibration) and [magnetometer](compass.md#performing-the-calibration) +1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). 1. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. 1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). diff --git a/zh/advanced_config/parameter_reference.md b/zh/advanced_config/parameter_reference.md index fb2f8065235fb..f4f38cf8d424b 100644 --- a/zh/advanced_config/parameter_reference.md +++ b/zh/advanced_config/parameter_reference.md @@ -14739,12 +14739,12 @@ table {
          - - + @@ -14795,7 +14795,7 @@ table { - + @@ -14824,14 +14824,14 @@ table { - + - + @@ -14862,6 +14862,13 @@ table { + + + + + + + @@ -15243,7 +15250,7 @@ table { - - + - + @@ -15313,6 +15320,13 @@ table { + + + + + + + - + @@ -15485,14 +15499,14 @@ table { - + - + + + + + + + + + + + + + + @@ -16577,7 +16605,7 @@ table { - + @@ -16929,11 +16957,13 @@ table {
        • 5: Femtomes
        • -
        • 6: NMEA (generic)
        • +
        • 6: NMEA (generic)
        • + +
        • 7: Septentrio (SBF)
        • Reboot required: true

          - + @@ -17003,7 +17033,7 @@ table {

          Reboot required: true

          - + @@ -17021,6 +17051,14 @@ table { + + + + + + + - @@ -17319,9 +17357,16 @@ table { + + + + + + + - + @@ -20626,14 +20671,14 @@ table { - + - + @@ -20775,75 +20820,6 @@ table {
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m
          EKF2_AID_MASK (INT32)Integer bitmask controlling data fusion and aiding methods

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Set to true to use optical flow data if available 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Set to true to enable multi-rotor drag specific force fusion 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • -
          • 1: use optical flow
          • +
          Will be removed after v1.14 release

          Comment: Set bits in the following positions to enable: 0 : Deprecated, use EKF2_GPS_CTRL instead 1 : Deprecated. use EKF2_OF_CTRL instead 2 : Deprecated, use EKF2_IMU_CTRL instead 3 : Deprecated, use EKF2_EV_CTRL instead 4 : Deprecated, use EKF2_EV_CTRL instead 5 : Deprecated. use EKF2_DRAG_CTRL instead 6 : Deprecated, use EKF2_EV_CTRL instead 7 : Deprecated, use EKF2_GPS_CTRL instead 8 : Deprecated, use EKF2_EV_CTRL instead

          Bitmask:
          • 0: unused
          • +
          • 1: unused
          • 2: unused
          • 3: unused
          • 4: unused
          • -
          • 5: multi-rotor drag fusion
          • +
          • 5: unused
          • 6: unused
          • 7: unused
          • 8: unused
          • @@ -14765,7 +14765,7 @@ table {
          EKF2_ARSP_THR (FLOAT)Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion.

          Airspeed fusion threshold

          Comment: A value of zero will deactivate airspeed fusion. Any other positive value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. Use EKF2_FUSE_BETA to activate sideslip fusion. Note: side slip fusion is currently not supported for tailsitters.

          [0.0, ?] 0.0 m/s
          EKF2_BARO_CTRL (INT32)Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate it's height in addition to other height sources (if activated).

          Barometric sensor height aiding

          Comment: If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).

          Enabled (1)
          EKF2_BCOEF_X (FLOAT)X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          X-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^2
          EKF2_BCOEF_Y (FLOAT)Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          Y-axis ballistic coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.

          [0.0, 200.0] 100.0 kg/m^27
          EKF2_DRAG_CTRL (INT32)Multirotor wind estimation selection

          Comment: Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.

          Disabled (0)
          EKF2_DRAG_NOISE (FLOAT) Specific drag force observation noise variance used by the multi-rotor specific drag force model

          Comment: Increasing this makes the multi-rotor wind estimates adjust more slowly.

          EKF2_MAG_TYPE (INT32)Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality). Other external sources of yaw may be used if selected via the EKF2_AID_MASK parameter.

          参数对照:
            +
          Type of magnetometer fusion

          Comment: Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight with fallback to magnetic heading fusion if there is insufficient motion to make yaw or magnetic field states observable. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to '3-axis' 3-axis field fusion is used at all times. If set to 'VTOL custom' the behaviour is the same as 'Automatic', but if fusing airspeed, magnetometer fusion is only allowed to modify the magnetic field states. This can be used by VTOL platforms with large magnetic field disturbances to prevent incorrect bias states being learned during forward flight operation which can adversely affect estimation accuracy after transition to hovering flight. If set to 'MC custom' the behaviour is the same as 'Automatic, but if there are no earth frame position or velocity observations being used, the magnetometer will not be used. This enables vehicles to operate with no GPS in environments where the magnetic field cannot be used to provide a heading reference. Prior to flight, the yaw angle is assumed to be constant if movement tests indicate that the vehicle is static. This allows the vehicle to be placed on the ground to learn the yaw gyro bias prior to flight. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GPS velocity measurements to align the yaw angle with the timer required (depending on the amount of movement and GPS data quality).

          参数对照:
          • 0: Automatic
          • 1: Magnetic heading
          • @@ -15266,12 +15273,12 @@ table {
          EKF2_MAG_YAWLIM (FLOAT) Yaw rate threshold used by automatic selection of magnetometer fusion method

          Comment: This parameter is used when the magnetometer fusion method is set automatically (EKF2_MAG_TYPE = 0). If the filtered yaw rate is greater than this parameter value, then the EKF will use 3-axis magnetometer fusion.

          [0.0, 1.0] 0.250.20 rad/s
          EKF2_MCOEF (FLOAT)Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_AID_MASK parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          Propeller momentum drag coefficient used for multi-rotor wind estimation

          Comment: This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.

          [0, 1.0] 0.15 1/s5000000 µs
          EKF2_OF_CTRL (INT32)Optical flow aiding

          Comment: Enable optical flow fusion.

          Disabled (0)
          EKF2_OF_DELAY (FLOAT) Optical flow measurement delay relative to IMU measurements

          Comment: Assumes measurement is timestamped at trailing edge of integration period

          Reboot required: true

          @@ -15471,7 +15485,7 @@ table {
          EKF2_RNG_A_HMAX (FLOAT)Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum absolute altitude (height above ground level) allowed for conditional range aid mode

          Comment: If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [1.0, 10.0] 5.0 m
          EKF2_RNG_A_VMAX (FLOAT)Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate it's height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          Maximum horizontal velocity allowed for conditional range aid mode

          Comment: If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).

          [0.1, 2] 1.0 m/s
          EKF2_RNG_CTRL (INT32)Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate it's height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          参数对照:
            +
          Range sensor height aiding

          Comment: WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. To en-/disable range finder for terrain height estimation, use EKF2_TERR_MASK instead. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in "conditional" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.

          参数对照:
          • 0: Disable range fusion
          • 1: Enabled (conditional mode)
          • @@ -16496,6 +16510,20 @@ table {
          -30.0 deg
          FW_THR_ASPD_MAX (FLOAT)Throttle at max airspeed

          Comment: Required throttle for level flight at maximum airspeed FW_AIRSPD_MAX (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle.

          [0, 1] (0.01)0.
          FW_THR_ASPD_MIN (FLOAT)Throttle at min airspeed

          Comment: Required throttle for level flight at minimum airspeed FW_AIRSPD_MIN (sea level, standard atmosphere) Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.

          [0, 1] (0.01)0.
          FW_THR_IDLE (FLOAT) Idle throttle

          Comment: This is the minimum throttle while on the ground For aircraft with internal combustion engines, this parameter should be set above the desired idle rpm. For electric motors, idle should typically be set to zero. Note that in automatic modes, "landed" conditions will engage idle throttle.

          FW_T_I_GAIN_THR (FLOAT) Integrator gain throttle

          Comment: This is the integrator gain on the throttle part of the control loop. Increasing this gain increases the speed at which speed and height offsets are trimmed out, but reduces damping and increases overshoot. Set this value to zero to completely disable all integrator action.

          [0.0, 2.0] (0.05)0.30.1
          [0, 5] [0, 7] 1
          [0, 5] [0, 6] 1
          0
          GPS_PITCH_OFFSET (FLOAT)Pitch offset for dual antenna GPS

          Comment: Vertical offsets can be compensated for by adjusting the Pitch offset (Septentrio). Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.

          Reboot required: true

          +
          [-90, 90] 0.deg
          GPS_SAT_INFO (INT32) Enable sat info (if available)

          Comment: Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK.

          Reboot required: true

          @@ -17094,7 +17132,7 @@ table {
          GPS_YAW_OFFSET (FLOAT)Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side.

          Reboot required: true

          +
          Heading/Yaw offset for dual antenna GPS

          Comment: Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. The offset angle increases clockwise. Set this to 90 if the rover (or Unicore primary) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. (Note: the Unicore primary antenna is the one connected on the right as seen from the top).

          Reboot required: true

          [0, 360] 0.Disabled (0)
          CA_HELI_YAW_CP_O (FLOAT)Offset for yaw compensation based on collective pitch

          Comment: This allows to specify which collective pitch command results in the least amount of rotor drag. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1)0.0
          CA_HELI_YAW_CP_S (FLOAT)Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * collective_pitch

          Scale for yaw compensation based on collective pitch

          Comment: This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)

          [-2, 2] (0.1) 0.0 UART ESC RPM Max

          Comment: Maximum RPM for ESC

          15000rpm
          MODAL_IO_RPM_MIN (INT32) UART ESC RPM Min

          Comment: Minimum RPM for ESC

          5500rpm
          MODAL_IO_SDIR1 (INT32)
          -## Micro XRCE-DDS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          名称参数描述[Min, Max] (Incr.)默认值单位
          XRCE_DDS_0_CFG (INT32)Serial Configuration for Micro XRCE-DDS

          Comment: Configure on which serial port to run Micro XRCE-DDS.

          参数对照:
            -
          • 0: Disabled
          • - -
          • 6: UART 6
          • - -
          • 101: TELEM 1
          • - -
          • 102: TELEM 2
          • - -
          • 103: TELEM 3
          • - -
          • 104: TELEM/SERIAL 4
          • - -
          • 201: GPS 1
          • - -
          • 202: GPS 2
          • - -
          • 203: GPS 3
          • - -
          • 300: Radio Controller
          • - -
          • 301: Wifi Port
          • - -
          • 401: EXT2
          • - -
          • 1000: Ethernet
          • -
          -

          Reboot required: true

          -
          0
          XRCE_DDS_DOM_ID (INT32)XRCE DDS domain ID

          Comment: XRCE DDS domain ID

          Reboot required: True

          -
          0
          XRCE_DDS_KEY (INT32)XRCE DDS key

          Comment: XRCE DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          -
          1
          XRCE_DDS_UDP_PRT (INT32)Micro DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for micro DDS, selected udp port will be set and used.

          Reboot required: True

          -
          8888
          - ## Mission @@ -20868,15 +20844,8 @@ table { - - - - - - - - - + + @@ -21031,19 +21000,26 @@ table { - - + + - - + + - + + + + + + + + @@ -21236,20 +21212,6 @@ table { - - - - - - - - - - - - - - @@ -21534,6 +21496,13 @@ table { + + + + + + + + + + + + + + @@ -22164,7 +22140,7 @@ table {
        • 15: (unused) ESC_TMP
        • 16: (unused) PITCH_ANGLE
        • 17: (unused) ROLL_ANGLE
        • -
        • 18: (unused) CROSSHAIRS
        • +
        • 18: CROSSHAIRS
        • 19: AVG_CELL_VOLTAGE
        • 20: (unused) HORIZON_SIDEBARS
        • 21: POWER
        • @@ -32334,6 +32310,14 @@ table { + + + + + + +
          MIS_DIST_1WP (FLOAT)Maximal horizontal distance from home to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the home position.

          [0, 10000] (100)900m
          MIS_DIST_WPS (FLOAT)Maximal horizontal distance between waypoint

          Comment: Failsafe check to prevent running missions which are way too big. Set a value of zero or less to disable. The mission will not be started if any distance between two subsequent waypoints is greater than MIS_DIST_WPS.

          [0, 10000] (100)Maximal horizontal distance from current position to first waypoint

          Comment: Failsafe check to prevent running mission stored from previous flight at a new takeoff location. Set a value of zero or less to disable. The mission will not be started if the current waypoint is more distant than MIS_DIST_1WP from the current position.

          [-1, 10000] (100) 900 m
          NAV_TRAFF_A_RADM (FLOAT)Set NAV TRAFFIC AVOID RADIUS MANNED

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Manned Aviation

          NAV_TRAFF_A_HOR (FLOAT)Set NAV TRAFFIC AVOID horizontal distance

          Comment: Defines a crosstrack horizontal distance

          [500, ?] 500 m
          NAV_TRAFF_A_RADU (FLOAT)Set NAV TRAFFIC AVOID RADIUS

          Comment: Defines the Radius where NAV TRAFFIC AVOID is Called For Unmanned Aviation

          NAV_TRAFF_A_VER (FLOAT)Set NAV TRAFFIC AVOID vertical distance [10, 500] 10500 m
          NAV_TRAFF_COLL_T (INT32)Estimated time until collision

          Comment: Minimum acceptable time until collsion. Assumes constant speed over 3d distance.

          [1, 900000000] 60s
          WEIGHT_BASE (FLOAT) Vehicle base weight

          Comment: This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight.

          0
          MNT_OB_LOCK_MODE (FLOAT)Mixer value for selecting a locking mode

          Comment: if required for the gimbal (only in AUX output mode)

          [-1.0, 1.0] 0.0
          MNT_OB_NORM_MODE (FLOAT)Mixer value for selecting normal mode

          Comment: if required by the gimbal (only in AUX output mode)

          [-1.0, 1.0] -1.0
          MNT_OFF_PITCH (FLOAT) Offset for pitch channel output in degrees 0.3 m/s
          MPC_LAND_RADIUS (FLOAT)User assisted landing radius

          Comment: When user assisted descent is enabled (see MPC_LAND_RC_HELP), this parameter controls the maximum position adjustment allowed from the original landing point.

          [0, ?] 1000.m
          MPC_LAND_RC_HELP (INT32) Enable user assisted descent for autonomous land routine

          Comment: When enabled, descent speed will be: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 * MPC_LAND_SPEED Additionally, the vehicle can be yawed and moved laterally using the other sticks. Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).

          参数对照:
            @@ -22123,6 +22092,13 @@ table {
          0
          OSD_CH_HEIGHT (INT32)OSD Crosshairs Height

          Comment: Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon

          [-8, 8] 0
          OSD_DWELL_TIME (INT32) OSD Dwell Time (ms)

          Comment: Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.

          1
          UAVCAN_PUB_ARM (INT32)publish Arming Status stream

          Comment: Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus

          Reboot required: true

          +
          Disabled (0)
          UAVCAN_PUB_MBD (INT32) publish moving baseline data RTCM stream

          Comment: Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData

          Reboot required: true

          @@ -32696,6 +32680,83 @@ table {
          +## UXRCE-DDS Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          名称参数描述[Min, Max] (Incr.)默认值单位
          UXRCE_DDS_AG_IP (INT32)uXRCE-DDS Agent IP address

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected Agent IP address will be set and used. Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433.

          Reboot required: True

          +
          2130706433
          UXRCE_DDS_CFG (INT32)Serial Configuration for UXRCE-DDS Client

          Comment: Configure on which serial port to run UXRCE-DDS Client.

          参数对照:
            +
          • 0: Disabled
          • + +
          • 6: UART 6
          • + +
          • 101: TELEM 1
          • + +
          • 102: TELEM 2
          • + +
          • 103: TELEM 3
          • + +
          • 104: TELEM/SERIAL 4
          • + +
          • 201: GPS 1
          • + +
          • 202: GPS 2
          • + +
          • 203: GPS 3
          • + +
          • 300: Radio Controller
          • + +
          • 301: Wifi Port
          • + +
          • 401: EXT2
          • + +
          • 1000: Ethernet
          • +
          +

          Reboot required: true

          +
          0
          UXRCE_DDS_DOM_ID (INT32)uXRCE-DDS domain ID

          Comment: uXRCE-DDS domain ID

          Reboot required: True

          +
          0
          UXRCE_DDS_KEY (INT32)uXRCE-DDS Session key

          Comment: uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.

          Reboot required: True

          +
          1
          UXRCE_DDS_PRT (INT32)uXRCE-DDS UDP Port

          Comment: If ethernet enabled and selected as configuration for uXRCE-DDS, selected udp port will be set and used.

          Reboot required: True

          +
          [0, 65535] 8888
          + ## VTOL Attitude Control @@ -32741,9 +32802,9 @@ table { - + - + @@ -32753,13 +32814,6 @@ table { - - - - - - - @@ -32830,14 +32884,14 @@ table { - + - + @@ -32865,14 +32919,14 @@ table { - + - + @@ -32909,7 +32963,7 @@ table { - + diff --git a/zh/advanced_config/tuning_the_ecl_ekf.md b/zh/advanced_config/tuning_the_ecl_ekf.md index e8b818d7f6ca8..0238e9a8acfe4 100644 --- a/zh/advanced_config/tuning_the_ecl_ekf.md +++ b/zh/advanced_config/tuning_the_ecl_ekf.md @@ -323,7 +323,7 @@ For effective obstruction detection, the range finder noise parameter needs to b ### 基于阻力比力的多旋翼风场估计 -多旋翼平台可以利用沿 X 和 Y 机体轴的空速和阻力之间的关系来估计风速的北/东分量。 通过将 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第5位设置为 `true` 来启用此功能。 +多旋翼平台可以利用沿 X 和 Y 机体轴的空速和阻力之间的关系来估计风速的北/东分量。 This can be enabled using [EKF2_DRAG_CTRL](../advanced_config/parameter_reference.md#EKF2_DRAG_CTRL). 沿 X 和 Y 轴的空速和比力(IMU加速度)之间的关系由 [EKF2_BCOEF_X](../advanced_config/parameter_reference.md#EKF2_BCOEF_X) , [EKF2_BCOEF_Y](../advanced_config/parameter_reference.md#EKF2_BCOEF_Y) 和 [EKF2_MCOEF](../advanced_config/parameter_reference.md#EKF2_MCOEF) 参数控制,这些参数分别设置了 X 和 Y 方向飞行的弹道系数,以及螺旋桨产生的动量阻力。 比力观测噪声量由 [EKF2_DRAG_NOISE](../advanced_config/parameter_reference.md#EKF2_DRAG_NOISE) 参数设置。 @@ -339,33 +339,21 @@ For effective obstruction detection, the range finder noise parameter needs to b 如果满足以下条件,将使用[Optical flow](../sensor/optical_flow.md)数据: * 有效的测距仪数据可用。 -* 在 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第 1 位为真。 +* [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL) is set. * 光流传感器返回的质量度量值大于 [EKF2_OF_QMIN](../advanced_config/parameter_reference.md#EKF2_OF_QMIN) 参数设置的最低要求。 ### 外部视觉系统 -来自外部视觉系统,例如 Vicon,提供位置、速度和姿态测量,在以下条件下可以被使用: +Position, velocity or orientation measurements from an external vision system, e.g. Vicon, can be used. -* 如果 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第 3 位为真,则将使用外部视觉系统的水平位置数据。 -* External vision system vertical position data will be used if the [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) parameter is set to 3. For more details about the configuration of height sources, [click here](#height). -* 如果 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第 8 位设置为真,将使用外部视觉系统速度数据。 -* 如果 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第 4 位为真,则外部视觉系统姿态数据将用于偏航估计。 -* 如果 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 参数中的第 6 位为真,则外部视觉参考帧偏移将被估计并用于旋转外部视觉系统数据。 +The measurements that are fused are configured by setting the appropriate bits of [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) to `true`: -要么将第 4 位(`EV_YAW`)或将第 6 位(`EV_ROTATE`)设置为 true,但不能同时设置为 true。 当与外部视觉系统一起使用时,支持以下 [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) 值。 +- `0`: Horizontal position data +- `1`: Vertical position data. Height sources may additionally be configured using [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) (see section [Height](#height)). +- `2`: Velocity data +- `3`: Yaw data -| EKF_AID_MASK 值 | 设置位 | 描述 | -| ---------------- | ----------------------------- | ------------------------------------ | -| 320 | EV_VEL + ROTATE_EV | Heading w.r.t. North | -| 24 | EV_POS + EV_YAW | Heading w.r.t. external vision frame | -| 72 | EV_POS + ROTATE_EV | Heading w.r.t. North | -| 272 | EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 280 | EV_POS + EV_VEL + EV_YAW | Heading w.r.t. external vision frame | -| 328 | EV_POS + EV_VEL + ROTATE_EV | Heading w.r.t. North | - -:::tip -When using external vision in combination with [GNSS fusion](#gps), it is recommended to use `EV_VEL` and not `EV_POS` in order to prevent the two position-fixing sources from fighting against each other. -::: +Note that if yaw data is used (bit 3) the heading is with respect to the external vision frame; otherwise the heading is relative to North. EKF 要考虑视觉姿态估计的不确定性。 此不确定性信息可以通过 MAVLink,在 [ODOMETRY](https://mavlink.io/en/messages/common.html#ODOMETRY) 消息中的协方差字段发送,也可以通过 [EKF2_EVP_NOISE](../advanced_config/parameter_reference.md#EKF2_EVP_NOISE) ,[EKF2_EVV_NOISE](../advanced_config/parameter_reference.md#EKF2_EVV_NOISE) 和 [EKF2_EVA_NOISE](../advanced_config/parameter_reference.md#EKF2_EVA_NOISE) 参数设置。 你可以通过 [EKF2_EV_NOISE_MD](../advanced_config/parameter_reference.md#EKF2_EV_NOISE_MD) 选择不确定性数据源。 @@ -398,7 +386,7 @@ EKF 要考虑视觉姿态估计的不确定性。 此不确定性信息可以通 EKF 输出,状态和状态数据发布到许多 uORB 主题,这些主题在飞行期间记录到 SD 卡上。 The following guide assumes that data has been logged using the *.ulog file format*. The **.ulog** format data can be parsed in python by using the [PX4 pyulog library](https://github.com/PX4/pyulog). -Most of the EKF data is found in the [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg) and [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) uORB messages that are logged to the .ulog file. +Most of the EKF data is found in the [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg) and [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) uORB messages that are logged to the .ulog file. A python script that automatically generates analysis plots and metadata can be found [here](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/ecl_ekf/process_logdata_ekf.py). 要使用此脚本文件,请 cd 到 `Tools/ecl_ekf` 目录并输入 `python process_logdata_ekf.py ` 命令。 This saves performance metadata in a csv file named **.mdat.csv** and plots in a pdf file named `.pdf`. @@ -406,14 +394,14 @@ Multiple log files in a directory can be analysed using the [batch\_process\_log ### 输出数据 -* Attitude output data is found in the [vehicle\_attitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_attitude.msg) message. -* Local position output data is found in the [vehicle\_local\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_local_position.msg) message. -* Global \(WGS-84\) output data is found in the [vehicle\_global\_position](https://github.com/PX4/PX4-Autopilot/blob/main/msg/vehicle_global_position.msg) message. -* Wind velocity output data is found in the [wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/wind.msg) message. +* Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleAttitude.msg) message. +* Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleLocalPosition.msg) message. +* Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleGlobalPosition.msg) message. +* Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. ### 状态 -Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). states\[32\] 的索引映射如下: +Refer to states\[32\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). states\[32\] 的索引映射如下: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\) @@ -427,7 +415,7 @@ Refer to states\[32\] in [estimator\_status](https://github.com/PX4/PX4-Autopilo ### 状态方差 -Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). covariances\[28\] 的索引映射如下: +Refer to covariances\[28\] in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). covariances\[28\] 的索引映射如下: * \[0 ... 3\] Quaternions * \[4 ... 6\] Velocity NED \(m/s\)^2 @@ -441,9 +429,9 @@ Refer to covariances\[28\] in [estimator\_status](https://github.com/PX4/PX4-Aut ### 观测新息和新息方差 -The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [estimator_innovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg). 消息都有相同的字段名称/类型(但是单位不同)。 +The observation `estimator_innovations`, `estimator_innovation_variances`, and `estimator_innovation_test_ratios` message fields are defined in [EstimatorInnovations.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg). 消息都有相同的字段名称/类型(但是单位不同)。 -:::注释 消息有相同的字段,因为它们是从相同的字段定义生成的。 The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg)) lists the names of the set of messages to be created): +:::注释 消息有相同的字段,因为它们是从相同的字段定义生成的。 The `# TOPICS` line (at the end of [the file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg)) lists the names of the set of messages to be created): ``` # TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios @@ -503,7 +491,7 @@ float32 aux_vvel # vertical auxiliary velocity innovation from landing target ### EKF 错误 -EKF 包含针对严重条件状态和协方差更新的内部错误检查。 Refer to the `filter_fault_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +EKF 包含针对严重条件状态和协方差更新的内部错误检查。 Refer to the `filter_fault_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### 观测错误 @@ -514,7 +502,7 @@ EKF 包含针对严重条件状态和协方差更新的内部错误检查。 Ref 这两者都可能导致观测数据被拒绝,如果时间足够长,使得 EKF 尝试重置状态以使用传感器观测数据。 所有观测结果均对新息进行了统计置信度检查。 要检查的标准偏差数据由每个观测类型的 `EKF2_*_GATE` 参数控制。 -Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) as follows: +Test levels are available in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) as follows: * `mag_test_ratio`: 最大磁强计新息组分与新息测试极限的比率 * `vel_test_ratio`: 最大速度新息组分与新息测试极限的比率 @@ -523,11 +511,11 @@ Test levels are available in [`estimator_status`](https://github.com/PX4/PX4-Au * `tas_test_ratio`: 真空速新息与新息测试极限的比率 * `hagl_test_ratio`: 距地高度新息与新息测试极限的比率 -For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +For a binary pass/fail summary for each sensor, refer to innovation\_check\_flags in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### GPS 数据质量检查 -在开始 GPS 辅助之前,EKF 应用了许多 GPS 数据质量检查。 这些检查由 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 和 `EKF2_REQ_*` 参数控制。 The pass/fail status for these checks is logged in the [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).gps\_check\_fail\_flags message. 当所有所需的 GPS 检查通过后,此整数将为零。 If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg). +在开始 GPS 辅助之前,EKF 应用了许多 GPS 数据质量检查。 这些检查由 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 和 `EKF2_REQ_*` 参数控制。 The pass/fail status for these checks is logged in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).gps\_check\_fail\_flags message. 当所有所需的 GPS 检查通过后,此整数将为零。 If the EKF is not commencing GPS alignment, check the value of the integer against the bitmask definition `gps_check_fail_flags` in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg). ### EKF 数值误差 @@ -538,7 +526,7 @@ EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推 * 如果新息方差小于观测方差(这需要一个不可能的负值状态方差)或协方差更新将为任何一个状态产生负值方差,那么: * 跳过状态和协方差更新 * 协方差矩阵中的相应行和列被重置 - * The failure is recorded in the [`estimator_status`](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg) `filter_fault_flags` message + * The failure is recorded in the [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) `filter_fault_flags` message * 状态方差(协方差矩阵中的对角线)被限制为非负。 * 状态方差应用数值上限。 * 协方差矩阵强制对称。 @@ -549,8 +537,8 @@ EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推 在飞行期间 EKF 高度偏离 GPS 和高度计测量的最常见原因是由振动引起的 IMU 测量的削波和/或混叠。 如果发生这种情况,则数据中应显示以下迹象 -* [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[2\] and [estimator_innovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_innovations.msg).vel\_pos\_innov\[5\] will both have the same sign. -* [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio will be greater than 1.0 +* [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[2\] and [EstimatorInnovations](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg).vel\_pos\_innov\[5\] will both have the same sign. +* [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio will be greater than 1.0 建议第一步是确保使用有效的隔离安装系统将无人机与机身隔离。 隔离安装座具有 6 个自由度,因此具有 6 个谐振频率。 作为一般规则,隔离支架上的自动驾驶仪的 6 个共振频率应高于 25Hz,以避免与无人机动力学相互作用并低于电动机的频率。 @@ -583,16 +571,16 @@ EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推 确定其中哪一个是主要原因需要对 EKF 日志数据进行系统分析: -* Plot the velocity innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio -* Plot the horizontal position innovation test ratio - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).pos\_test\_ratio -* Plot the height innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).hgt\_test\_ratio -* Plot the magnetometer innovation test ratio - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).mag\_test\_ratio -* Plot the GPS receiver reported speed accuracy - [sensor_gps](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_gps.msg).s\_variance\_m\_s -* Plot the IMU delta angle state estimates - [estimator\_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).states\[10\], states\[11\] and states\[12\] +* Plot the velocity innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio +* Plot the horizontal position innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).pos\_test\_ratio +* Plot the height innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).hgt\_test\_ratio +* Plot the magnetometer innovation test ratio - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).mag\_test\_ratio +* Plot the GPS receiver reported speed accuracy - [SensorGps.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg).s\_variance\_m\_s +* Plot the IMU delta angle state estimates - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).states\[10\], states\[11\] and states\[12\] * 绘制 EKF 内部高频振动指标: - * Delta angle coning vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[0\] - * High frequency delta angle vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[1\] - * High frequency delta velocity vibration - [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vibe\[2\] + * Delta angle coning vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[0\] + * High frequency delta angle vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[1\] + * High frequency delta velocity vibration - [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vibe\[2\] 在正常操作期间,所有测试比率应保持在 0.5 以下,并且只有偶然的峰值高于此值,如下面成功飞行中的示例所示: @@ -626,7 +614,7 @@ EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推 ### 确定较差的GPS 数据精度 -GPS 数据精度差通常伴随着接收器报告的速度误差的增加以及新息的增加。 由多路径,遮蔽和干扰引起的瞬态误差是更常见的原因。 下面是一个暂时失去 GPS 数据精度的例子,其中多旋翼飞行器开始从其游荡位置漂移并且必须使用摇杆进行校正。 The rise in [estimator_status](https://github.com/PX4/PX4-Autopilot/blob/main/msg/estimator_status.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. +GPS 数据精度差通常伴随着接收器报告的速度误差的增加以及新息的增加。 由多路径,遮蔽和干扰引起的瞬态误差是更常见的原因。 下面是一个暂时失去 GPS 数据精度的例子,其中多旋翼飞行器开始从其游荡位置漂移并且必须使用摇杆进行校正。 The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg).vel\_test\_ratio to greater than 1 indicates the GPs velocity was inconsistent with other measurements and has been rejected. ![GPS 光学-测试比率](../../assets/ecl/gps_glitch_-_test_ratios.png) diff --git a/zh/assembly/cable_wiring.md b/zh/assembly/cable_wiring.md index 851ba30a9d770..caae58b5506df 100644 --- a/zh/assembly/cable_wiring.md +++ b/zh/assembly/cable_wiring.md @@ -3,7 +3,7 @@ Cables are a common source of [electromagnetic interference (EMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference), which can cause problems including flyways, "toilet bowling" and generally poor flight. These problems can be avoided by using appropriate cabling in the UAV. The following basic concepts should be kept in mind when designing drone cabling: -* High-Power and signal cables should be separated as much as is practical +* High-Power and signal cables should be separated as much as is practical. * Cable lengths should be the minimum needed to enable easy handling of wired components. The wire tension should be adequate to survive possible airframe deformations even in a crash landing (wires must not be the first thing to break). * Cable loops to reduce excess length should be avoided - use shorter lengths! * For digital signals you can decrease the baudrate to reduce radiated energy and increase the robustness of data transfer. This means that you may be able to use longer cables when high data rates are not needed. @@ -15,7 +15,7 @@ Signalling protocols have different characteristics, and therefore the cables us This topic provides specific guidance of cabling for different signalling protocols, along with the [colour coding](#cable-colour-coding) used by a number different drone hardware vendors. -### I²C cables +### I2C cables The [I2C bus](https://en.wikipedia.org/wiki/I%C2%B2C) is widely used for connecting sensors. Cable colors from several vendors are specified in following table. diff --git a/zh/assembly/mount_gps_compass.md b/zh/assembly/mount_gps_compass.md index 3f7d2b5c5c913..d1748afd66531 100644 --- a/zh/assembly/mount_gps_compass.md +++ b/zh/assembly/mount_gps_compass.md @@ -8,9 +8,9 @@ The diagram below shows the heading marker on the Pixhawk 4 and compass. ## Compass Orientation -指南针可以安装在任何 [MAV_SENSOR_OR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION) 定义的标准的 MAVLink 方向中。 方向与 [设置飞行控制器方向](../config/flight_controller_orientation.md#orientation-definition) 时相同。 +指南针可以安装在任何 [MAV_SENSOR_OR_ORIENTATION](https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION) 定义的标准的 MAVLink 方向中。 The orientation follows the same frame convention as when [orienting the flight controller](../config/flight_controller_orientation.md#calculating-orientation). -如果您正在使用普通的 [指南针校准](../config/compass.md) 进程(启用了 [CAL_MAG_ROT_AUTO](../advanced_config/parameter_reference.md#CAL_MAG_ROT_AUTO)参数),方向应该会被自动检测。 否则您可以在 [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) 中为最多三个指南针直接选择适当的值。 +If you're using the normal [Compass Calibration](../config/compass.md) process (with parameter [SENS_MAG_AUTOROT](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT) enabled), the orientation should be detected automatically. 否则您可以在 [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG1_ROT) 中为最多三个指南针直接选择适当的值。 :::warning You must mount the compass in a supported orientation! diff --git a/zh/assembly/quick_start_cuav_v5_nano.md b/zh/assembly/quick_start_cuav_v5_nano.md index 0d525c838d389..24fb38d32e729 100644 --- a/zh/assembly/quick_start_cuav_v5_nano.md +++ b/zh/assembly/quick_start_cuav_v5_nano.md @@ -12,7 +12,7 @@ 下图展示了如何连接最重要的传感器和外围设备(电机和伺服舵机输出除外)。 我们将在下面各节中介绍它们的细节。 -![quickstart](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_02.png) +![快速入门](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_02.png) | 主要接口 | 功能 | |:-------------- |:----------------------------------------------------------------------------------- | @@ -115,7 +115,7 @@ An [SD card](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory) Motors/servos are connected to the MAIN ports in the order specified for your vehicle in the [Airframes Reference](../airframes/airframe_reference.md). -![quickstart](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_06.png) +![快速入门](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_06.png) ## 针脚定义 diff --git a/zh/assembly/quick_start_cube.md b/zh/assembly/quick_start_cube.md index d704f8d639ad4..236bd2937a984 100644 --- a/zh/assembly/quick_start_cube.md +++ b/zh/assembly/quick_start_cube.md @@ -163,7 +163,7 @@ Motors/servos are connected to the **MAIN** and **AUX** ports in the order speci This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/zh/assembly/quick_start_durandal.md b/zh/assembly/quick_start_durandal.md index ddb3e9ba3f6be..54e59b5f82a0a 100644 --- a/zh/assembly/quick_start_durandal.md +++ b/zh/assembly/quick_start_durandal.md @@ -1,6 +1,6 @@ # Durandal Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the Holybro [Durandal](../flight_controller/durandal.md)® flight controller and connect its most important peripherals. @@ -57,7 +57,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *Durandal*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. Connect the output of the *Power Module* as shown. @@ -86,14 +86,10 @@ The 8 pin power (+) rail of **MAIN/AUX** is not powered by the power module supp - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: - ### Pixhawk 4 Power Module (PM07) -The [Pixhawk 4 Power Module (PM07)](https://shop.holybro.com/pixhawk-4-power-module-pm07_p1095.html) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. +The [Pixhawk 4 Power Module (PM07)](https://holybro.com/collections/power-modules-pdbs/products/pixhawk-4-power-module-pm07) can be bundled/used with *Durandal*. It acts as both a power module and power distribution board, providing regulated power to flight controller and the ESCs, and sending battery voltage/current to the flight controller. This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Power](../assembly/quick_start_pixhawk4.md#power) documentation. @@ -109,7 +105,7 @@ This is wired up in the same way as described in the [Pixhawk 4 Quick Start > Po - 80mm XT60 connector wire (1) :::note -See also [PM07 Quick Start Guide](http://www.holybro.com/manual/PM07-Quick-Start-Guide.pdf) (Holybro). +See also [PM07 Quick Start Guide](https://docs.holybro.com/power-module-and-pdb/power-module/pm07-quick-start-guide) (Holybro). ::: ### Battery Configuration @@ -201,7 +197,7 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## 更多信息 - [Durandal Overview](../flight_controller/durandal.md) -- [Durandal Technical Data Sheet](http://www.holybro.com/manual/Durandal_technical_data_sheet.pdf) (Holybro) -- [Durandal Pinouts](http://www.holybro.com/manual/Durandal-Pinouts.pdf) (Holybro) +- [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf) (Holybro) +- [Durandal Pinouts](https://holybro.com/collections/autopilot-flight-controllers/products/Durandal-Pinouts) (Holybro) - [Durandal_MB_H743sch.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/Durandal_MB_H743sch.pdf) (Durandal Schematics) - [STM32H743IIK_pinout.pdf](https://github.com/PX4/PX4-user_guide/raw/main/assets/flight_controller/durandal/STM32H743IIK_pinout.pdf) (Durandal Pinmap) diff --git a/zh/assembly/quick_start_holybro_pix32_v5.md b/zh/assembly/quick_start_holybro_pix32_v5.md index 936107473fa93..42d47e81dbc6c 100644 --- a/zh/assembly/quick_start_holybro_pix32_v5.md +++ b/zh/assembly/quick_start_holybro_pix32_v5.md @@ -1,6 +1,6 @@ # Pix32 v5 Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Holybro Pix32v5](../flight_controller/holybro_pix32_v5.md)® flight controller and connect its most important peripherals. @@ -9,7 +9,7 @@ This quick start guide shows how to power the [Holybro Pix32v5](../flight_contro ## Unboxing -Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Pixhawk 4 GPS/Compass](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html) (UBLOX NEO-M8N). +Pix32 v5 is sold bundled with a number of different combinations of accessories, including the *pix32 v5 Base board*, power module *PM02 V3*, and the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps) (UBLOX NEO-M8N). The content of the box with the *PM02 V3* power module and *Pixhawk 4 GPS/Compass* is shown below. The box also includes a pinout guide and power module instructions, and Base board (not shown on the schematic below). @@ -22,7 +22,7 @@ The image below shows how to connect the most important sensors and peripherals ![Pix32 v5 Wiring Overview](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_wiring_overview.jpg) :::tip -More information about available ports can be found [here](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf). +More information about available ports can be found [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf). ::: ## 飞控的安装和方向 @@ -42,7 +42,7 @@ Do not use vibration-isolation foam to mount the controller (double sided tape i ## GPS + 指南针 + 蜂鸣器 + 安全开关 + LED -Pix32 v5 is designed to work well with the [Pixhawk 4 GPS module](https://shop.holybro.com/pixhawk-4-gps-module_p1094.html), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. +Pix32 v5 is designed to work well with the [Holybro M8N GPS](https://holybro.com/collections/gps/products/m8n-gps), which has an integrated compass, safety switch, buzzer and LED. It connects directly to the **GPS port** using the 10 pin cable. ![Pix32 v5 with GPS](../../assets/flight_controller/holybro_pix32_v5/pix32_v5_connection_gps_compass.jpg) @@ -59,7 +59,7 @@ You can use a power module or power distribution board to power motors/servos an ### PM02 v3 Power Module -The [Power Module (PM02 v3)](https://shop.holybro.com/power-modulepm02-v3_p1185.html) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. +The [Power Module (PM02 v3)](../power_module/holybro_pm02.md) can be bundled with *pix32 v5*. It provides regulated power to flight controller and sends battery voltage/current to the flight controller. 如果你想*手动*控制你的飞机,你需要一个遥控器(PX4在自动飞行模式可以不需要遥控器)。 @@ -87,9 +87,6 @@ The 8 pin power (+) rail of **MAIN/AUX** is not powered by the power module supp - 6pin MLX cable (1) - 6pin GH cable (1) -:::note -See also [PM02v3 Power Module Manual](http://www.holybro.com/manual/Holybro_PM02_v3_PowerModule_Manual.pdf) (Holybro). -::: ### Battery Configuration @@ -155,7 +152,7 @@ The wiring and configuration of optional/less common components is covered withi ## 针脚定义 -[Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) (Holybro) +[Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) (Holybro) ## 配置 @@ -168,8 +165,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## 更多信息 - [Pix32 v5 Overview](../flight_controller/holybro_pix32_v5.md) (Overview page) -- [Pix32 v5 Technical Data Sheet](http://www.holybro.com/manual/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) -- [Pix32 v5 Pinouts](http://www.holybro.com/manual/Holybro_PIX32-V5_PINOUTS_V1.1.pdf) -- [Pix32 v5 Base Schematic Diagram](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) +- [Pix32 v5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf) +- [Pix32 v5 Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pix32-V5-Base-Mini-Pinouts.pdf) +- [Pix32 v5 Base Schematic Diagram](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5-BASE-Schematic_diagram.pdf) - [Pix32 v5 Base Components Layout](http://www.holybro.com/manual/Holybro_PIX32-V5-BASE-ComponentsLayout.pdf) - FMUv5参考设计。 diff --git a/zh/assembly/quick_start_pixhawk.md b/zh/assembly/quick_start_pixhawk.md index ef79535dc78f2..574c3c8bf95c6 100644 --- a/zh/assembly/quick_start_pixhawk.md +++ b/zh/assembly/quick_start_pixhawk.md @@ -92,7 +92,7 @@ Telemetry radios may be used to communicate and control a vehicle in flight from The mappings between MAIN/AUX output ports and motor/servos for all supported air and ground frames are listed in the [Airframe Reference](../airframes/airframe_reference.md). -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/zh/assembly/quick_start_pixhawk4.md b/zh/assembly/quick_start_pixhawk4.md index cb6b40ccfb775..f28343b2cf996 100644 --- a/zh/assembly/quick_start_pixhawk4.md +++ b/zh/assembly/quick_start_pixhawk4.md @@ -1,6 +1,6 @@ # Pixhawk 4 接线快速入门 -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. ::: +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 4](../flight_controller/pixhawk4.md)® flight controller and connect its most important peripherals. @@ -146,7 +146,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/zh/assembly/quick_start_pixhawk4_mini.md b/zh/assembly/quick_start_pixhawk4_mini.md index 0933341d14e8b..b31050ace5302 100644 --- a/zh/assembly/quick_start_pixhawk4_mini.md +++ b/zh/assembly/quick_start_pixhawk4_mini.md @@ -1,6 +1,6 @@ # *Pixhawk 4 Mini* Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [*Pixhawk® 4 Mini*](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. @@ -126,7 +126,7 @@ Motors/servos are connected to the **MAIN OUT** ports in the order specified for This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: diff --git a/zh/assembly/quick_start_pixhawk5x.md b/zh/assembly/quick_start_pixhawk5x.md index 4e19cc0ad2570..8b839f7434a42 100644 --- a/zh/assembly/quick_start_pixhawk5x.md +++ b/zh/assembly/quick_start_pixhawk5x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 5x Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk® 5X](../flight_controller/pixhawk5x.md) flight controller and connect its most important peripherals. @@ -35,7 +35,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk5X Standard Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -101,7 +101,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) @@ -121,7 +121,7 @@ Motors/servos are connected to the **I/O PWM OUT** (**MAIN**) and **FMU PWM OUT* This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). ::: -:::caution +:::warning The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). Make sure to use the correct mapping for your vehicle. ::: @@ -133,7 +133,7 @@ The wiring and configuration of optional/less common components is covered withi ![Pixhawk 5X Pinout1](../../assets/flight_controller/pixhawk5x/pixhawk5x_pinout.png) -You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf). +You can also download *Pixhawk 5X* pinouts from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Configuration @@ -146,9 +146,8 @@ QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration] ## Further information - [Pixhawk 5X](../flight_controller/pixhawk5x.md) (PX4 Doc Overview page) -- [Pixhawk 5X Overview & Specification](http://www.holybro.com/manual/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) -- [Pixhawk 5X Pinouts](http://www.holybro.com/manual/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) -- [PM02D Power Module Manual](http://www.holybro.com/manual/Holybro_PM02D_Power_Module_Manual.pdf) (Holybro) +- [Pixhawk 5X Overview & Specification](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Spec_Overview.pdf) (Holybro) +- [Pixhawk 5X Pinouts](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf) (Holybro) - [FMUv5X reference design pinout](https://docs.google.com/spreadsheets/d/1Su7u8PHp-Y1AlLGVuH_I8ewkEEXt_bHHYBHglRuVH7E/edit#gid=562580340). - [Pixhawk Autopilot FMUv5X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-011%20Pixhawk%20Autopilot%20v5X%20Standard.pdf). - [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf). diff --git a/zh/assembly/quick_start_pixhawk6c.md b/zh/assembly/quick_start_pixhawk6c.md index 1dd81a01d5695..0b273a91108fe 100644 --- a/zh/assembly/quick_start_pixhawk6c.md +++ b/zh/assembly/quick_start_pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6C®](../flight_controller/pixhawk6c.md) flight controller and connect its most important peripherals. @@ -11,13 +11,6 @@ Pixhawk 6C + PM02 + M8N GPS. ![Pixhawk6c standard set](../../assets/flight_controller/pixhawk6c/pixhawk6c_standard_set.jpg) - ## Mount and Orient Controller @@ -34,7 +27,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6C_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -97,7 +90,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/zh/assembly/quick_start_pixhawk6x.md b/zh/assembly/quick_start_pixhawk6x.md index 55f80772bb098..f81e2dee9ae4f 100644 --- a/zh/assembly/quick_start_pixhawk6x.md +++ b/zh/assembly/quick_start_pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Wiring Quick Start -:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.holybro.com/) for hardware support or compliance issues. +:::warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: This quick start guide shows how to power the [Pixhawk 6X®](../flight_controller/pixhawk6x.md) flight controller and connect its most important peripherals. @@ -40,7 +40,7 @@ If the controller cannot be mounted in the recommended/default orientation (e.g The _Pixhawk6X Standard Set_ & _Pixhawk6X Mini Set_ can be purchased with M8N or M9N GPS (10-pin connector) that should be connected to the **GPS1** port. These GNSS modules have an integrated compass, safety switch, buzzer and LED. -A secondary [M8N or M9N GPS](https://shop.holybro.com/c/gps-systems_0428) (6-pin connector) can be purchased separately and connected to the **GPS2** port. +A secondary [M8N or M9N GPS](https://holybro.com/collections/gps) (6-pin connector) can be purchased separately and connected to the **GPS2** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). @@ -106,7 +106,7 @@ For more information about selecting a radio system, receiver compatibility, and The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). The other radio is connected to your ground station computer or mobile device (usually by USB). -Radios are also available for purchase on [Holybro's website](http://www.holybro.com/product-category/radio/) . +Radios are also available for purchase on [Holybro's website](https://holybro.com/collections/telemetry-radios) . ## SD Card (Optional) diff --git a/zh/can/README.md b/zh/can/README.md index deb8f145ec975..df0d9c89bb8b4 100644 --- a/zh/can/README.md +++ b/zh/can/README.md @@ -8,8 +8,7 @@ PX4 supports two software protocols for communicating with CAN devices: - [Cyphal](https://opencyphal.org): PX4 support is a "work in progress". Cyphal is a much newer protocol which allows more flexibility and configuration, especially on larger and more complex vehicles. It has not yet seen significant adoption. :::note -Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. -In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. +Both DroneCAN and Cyphal originate from an earlier project named UAVCAN. In 2022 the project split into two: the original version of UAVCAN (UAVCAN v0) was renamed to DroneCAN, and the newer UAVCAN v1 was renamed Cyphal. The differences between the two protocols are outlined in [Cyphal vs. DroneCAN](https://forum.opencyphal.org/t/cyphal-vs-dronecan/1814). ::: :::warning @@ -18,9 +17,9 @@ PX4 does not support other CAN software protocols for drones such as KDECAN (at ## Wiring -The wiring for CAN networks is the same for both DroneCAN and Cyphal (in fact, for all CAN networks). +The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fact, for all CAN networks). -Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Electronics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. +Devices are connected in a chain in any order. At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. Flight controllers and some GNSS modules have built in termination resistors for convenience, thus should be placed at opposite ends of the chain. Otherwise, you can use a termination resistor such as [this one from Zubax Robotics](https://shop.zubax.com/products/uavcan-micro-termination-plug?variant=6007985111069), or solder one yourself if you have access to a JST-GH crimper. The following diagram shows an example of a CAN bus connecting a flight controller to 4 CAN ESCs and a GNSS. @@ -28,7 +27,7 @@ The following diagram shows an example of a CAN bus connecting a flight controll The diagram does not show any power wiring. Refer to your manufacturer instructions to confirm whether components require separate power or can be powered from the CAN bus itself. -For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. +For more information, see [Cyphal/CAN device interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (kb.zubax.com). While the article is written with the Cyphal protocol in mind, it applies equally to DroneCAN hardware and any other CAN setup. For more advanced scenarios, consult with [On CAN bus topology and termination](https://forum.opencyphal.org/t/on-can-bus-topology-and-termination/1685). ### Connectors @@ -38,7 +37,7 @@ Other (non-Pixhawk compatible) devices may use different connectors. However, as ### Redundancy -DroneCAN and Cyphal support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. +DroneCAN and Cyphal/CAN support using a second (redundant) CAN interface. This is completely optional but increases the robustness of the connection. All Pixhawk flight controllers come with 2 CAN interfaces; if your peripherals support 2 CAN interfaces as well, it is recommended to wire both up for increased safety. ## Firmware diff --git a/zh/companion_computer/README.md b/zh/companion_computer/README.md index b98ad351061b7..135a690fa2408 100644 --- a/zh/companion_computer/README.md +++ b/zh/companion_computer/README.md @@ -22,7 +22,7 @@ The following boards are known to provide a good integration with PX4: - [Holybro Pixhawk RPI CM4 Baseboard](../companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md) -## Supported Companion Computers +## Companion Computer Options PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present). @@ -45,8 +45,8 @@ The companion computer needs to run software that communicates with the flight c Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include: - [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems. -- [ROS2](../ros/ros2.md) to communicate to ROS2 nodes ( may also be used). -- [ROS (1) and MAVROS](../ros/mavros_installation.md) +- [ROS 2](../ros/ros2.md) to communicate to ROS 2 nodes (may also be used). +- [ROS 1 and MAVROS](../ros/mavros_installation.md) MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. [Drone APIs and SDKs > What API Should I Use?](../robotics/README.md#what-api-should-i-use) explains the different options in detail. @@ -61,7 +61,6 @@ You will need a router if you need to bridge MAVLink from the vehicle to a groun - [MAVLink Router](https://github.com/intel/mavlink-router) (recommended) - [MAVProxy](https://ardupilot.org/mavproxy/) - ## Ethernet Setup Ethernet is the recommended connection, if supported by your flight controller. See [Ethernet Setup](../advanced_config/ethernet_setup.md) for instructions. @@ -76,5 +75,5 @@ The following topics explain how to set up companion computers for specific flig ## Additional Information - [Companion Computer Peripherals](../companion_computer/companion_computer_peripherals.md) -- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.html#fc-and-companion-computer) +- [PX4 System Architecture > FC and Companion Computer](../concept/px4_systems_architecture.md#fc-and-companion-computer) diff --git a/zh/companion_computer/companion_computer_peripherals.md b/zh/companion_computer/companion_computer_peripherals.md index fd228d1f393d5..933fdc02b3931 100644 --- a/zh/companion_computer/companion_computer_peripherals.md +++ b/zh/companion_computer/companion_computer_peripherals.md @@ -9,7 +9,7 @@ Typical companion computer work with Pixhawk requires a companion link to transm There are a few devices that allow this communication bridge such as FTDI USB breakouts and level shifters (see below). :::note -PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS2/DDS Bridge)](../middleware/xrce_dds.md). +PX4 configuration for communicating with a companion computer over MAVLink configuration is covered in [MAVLink \(OSD / Telemetry\)](../peripherals/mavlink_peripherals.md#example). Other relevant topics/sections include: [Companion Computers](../companion_computer/README.md), [Robotics](../robotics/README.md) and [XRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/xrce_dds.md). ::: ### FTDI Devices diff --git a/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 939fcab99ca0d..b4f5e1f428042 100644 --- a/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -6,7 +6,7 @@ The [Holybro Pixhawk RPi CM4 Baseboard](http://www.holybro.com/product/pixhawk-r The flight controller module is internally connected to RPi CM4 through `TELEM2`, but may alternatively be connected using Ethernet with the provided external cable. -This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. +This baseboard is plug-in compatible with [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md), [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md), and any other Pixhawk controller that follows the [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) guidelines for mechanical compatibility across vendors. :::note The board follows the [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) and [Pixhawk Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf) (including the guidelines for "mechanical compatibility across vendors"). @@ -54,7 +54,7 @@ The connection must be also be [configured in both RPi and PX4](#configure-px4-t ## Installing the Flight Controller -A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.html) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.html) can simply be pushed into the module slot. +A plug-compatible flight controller such as [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md) and [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md) can simply be pushed into the module slot. Flight controllers that have a different form factor will need additional wiring. diff --git a/zh/companion_computer/pixhawk_companion.md b/zh/companion_computer/pixhawk_companion.md index 8c6d79c8fe925..523c7d9c50434 100644 --- a/zh/companion_computer/pixhawk_companion.md +++ b/zh/companion_computer/pixhawk_companion.md @@ -21,9 +21,11 @@ These instructions explain how to setup the connection if you're not using Ether ### Pixhawk Configuration -PX4 is configured by default to connect to a companion computer connected to the `TELEM 2` serial port. No additional PX4-side configuration should be required if you use this port +PX4 expects companion computers to connect via `TELEM2` for offboard control. The port is configured by default to interface using MAVLink. -To enable MAVLink to connect on another port see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). +If using MAVLink, no other PX4-side configuration should be required. To use MAVLink on another port, and/or disable it on `TELEM2`, see [MAVLink Peripherals (GCS/OSD/Companion)](../peripherals/mavlink_peripherals.md) and [Serial Port Configuration](../peripherals/serial_configuration.md). + +To use [ROS 2/XRCE-DDS](../ros/ros2_comm.md) instead of MAVLink on `TELEM2`, disable MAVLink on the port and then enable the XRCE-DDS client on `TELEM2`(see [XRCE-DDS > Starting the client](../middleware/xrce_dds.md#starting-the-client)). ### Serial Port Hardware Setup @@ -33,7 +35,7 @@ If you're connecting using a serial port, wire the port according to the instruc Many modern companion computers only support 1.8V levels on their hardware UART and can be damaged by 3.3V levels. Use a level shifter. In most cases the accessible hardware serial ports already have some function (modem or console) associated with them and need to be *reconfigured in Linux* before they can be used. ::: -The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring below. This always works and is easy to set up. +A safe and easy to set up option is to use an FTDI Chip USB-to-serial adapter board to connect from `TELEM2` on the Pixhawk to the USB port on the companion computer. The `TELEM2` to FTDI wiring map is shown below. | TELEM2 | | FTDI |   | | ------- | - | ------- | --------------- | @@ -44,7 +46,9 @@ The safe bet is to use an FTDI Chip USB-to-serial adapter board and the wiring b | Tx (输出) | 5 | RTS(输出) | 2 | | CTS(输入) | 6 | GND | 1 | -### Serial Port Software setup on Linux +You may also be able to directly connect `TELEM2` directly to a companion computer serial port. This is demonstrated for the Raspberry Pi in [Raspberry Pi Companion with Pixhawk](../companion_computer/pixhawk_rpi.md). + +### USB Serial Port Software setup on Linux On Linux the default name of a USB FTDI would be like `\dev\ttyUSB0`. If you have a second FTDI linked on the USB or an Arduino, it will registered as `\dev\ttyUSB1`. To avoid the confusion between the first plugged and the second plugged, we recommend you to create a symlink from `ttyUSBx` to a friendly name, depending on the Vendor and Product ID of the USB device. diff --git a/zh/companion_computer/pixhawk_rpi.md b/zh/companion_computer/pixhawk_rpi.md new file mode 100644 index 0000000000000..e6e4a305e82cd --- /dev/null +++ b/zh/companion_computer/pixhawk_rpi.md @@ -0,0 +1,297 @@ +# Raspberry Pi Companion with Pixhawk + +This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros/ros2_comm.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. + +These instructions should be readily extensible to other RPi and flight controller configurations. + +:::note +Other common ways to connect RaPi and Pixhawk are: + +- Ethernet connection between RPi and Pixhawk. Pixhawk controllers based on FMUv5x, FMUv6x and later may have an inbuilt Ethernet port. See [PX4 Ethernet > Supported Controllers](../advanced_config/ethernet_setup.md#supported-flight-controllers). +- Serial connection to the RPi USB port. This is simple and reliable, but requires an additional FTDI Chip USB-to-serial adapter board. This option is covered in [Pixhawk Companion > Serial Port Setup](../companion_computer/pixhawk_companion.md#serial-port-setup). +::: + + +## Wiring + +### Serial connection + +First wire up the serial connection between the RPi and PX4 that is to be used for offboard control. + +This setup connects the Pixhawk `TELEM2` port, which is generally recommended for offboard control. It is initially configured in PX4 to use with MAVLink, which we will change later when setting up ROS 2. Pixhawk ports can be located anywhere on the flight controller, but are almost always well labeled, and should be obvious on your particular [flight controller](../flight_controller/README.md). + +Connect the Pixhawk `TELEM2` `TX`/`RX`/`GND` pins to the complementary `RXD`/`TXD`/`Ground` pins on the RPi GPIO board: + +| PX4 TELEM2 Pin | RPi GPIO Pin | +| -------------- | ---------------------- | +| UART5_TX (2) | RXD (GPIO 15 - pin 10) | +| UART5_RX (3) | TXD (GPIO 14 - pin 8) | +| GND (6) | Ground (pin 6) | + +The diagram shows Pixhawk `TELEM2` port pins on the left and RPi GPIO board pins on the right. The pins on the `TELEM2` port are normally numbered right-to-left as shown. + +| `TELEM2` | RPi GPIO | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| ![Pin numbering showing left-most pin is pin 1](../../assets/companion_computer/pixhawk_rpi/pins_numbers.png) | ![](../../assets/companion_computer/pixhawk_rpi/rpi_gpio.png) | + +:::note +Almost all recent Pixhawk boards, such as the Pixhawk-6C, use the same connectors and pin numbers for correpsponding ports, as defined in the Pixhawk Connector Standard. You can check the specific board documentation to confirm the pin layout. + +The standard `TELEM2` pin assignments are shown below. + +| Pins | Signal | Voltage | +| --------- | --------------- | ------- | +| 1 (Red) | VCC | +5V | +| 2 (Black) | UART5_TX (out) | +3.3V | +| 3 (Black) | UART5_RX (in) | +3.3V | +| 4 (Black) | UART5_CTS (in) | +3.3V | +| 5 (Black) | UART5_RTS (out) | +3.3V | +| 6 (Black) | GND | GND | + +::: + +### TELEM1/Telemetry Radio + +The Pixhawk `TELEM1` port is preconfigured for connecting to a GCS via MAVLink over a telemetry radio. + +You can plug an [appropriate radio](../telemetry/README.md) into the Pixhawk `TELEM1` port and in most cases it should just work. Generally the other radio needs to be connected to the ground station USB port. If you have any issues, check the radio documentation. + +### Power Supply + +Pixhawk boards usually require a reliable 5V DC supply, which is commonly supplied from LiPO batteries via a [Power Module and/or Power Distribution board](../power_module/README.md) to a port labeled `POWER` (or similar). + +The instructions for your flight controller will normally explain the recommended setup. For example: +- [Holybro Pixhawk 6C > Voltage Ratings](../flight_controller/pixhawk6c.md#voltage-ratings) +- [Holybro Pixhawk 6C Wiring Quick Start > Power](../assembly/quick_start_pixhawk6c.md#power) + +Pixhawk controllers can supply power to a _small_ number of low-power peripherals, such as GPS modules and low-range telemetry radios. The RPi companion computer, servos, high power radios, and other peripherals require a separate power supply, which is usually from a battery elimination circuit (BEC) wired to the same or another battery. Some power modules have a separate BEC included. + +:::warning +Overloading your Pixhawk is a good way to destroy it. +::: + +:::note +During PX4 setup and configuration the USB connection with your ground station laptop is suffient to power the Pixhawk board, and your companion computer might be powered from a desktop charger. +::: + +## PX4 Setup + +These instructions rely on PX4 code to support ROS 2 that isn't yet in a release build (arrives in PX4 v1.14). You will therefore need to install a build off the current PX4-Autopilot `main` branch. + +Connect the Pixhawk to your laptop/desktop via the `USB` port and use QGroundControl to update the firmware to the "Master" version as described in [Firmware > Installing PX4 Master, Beta or Custom Firmware](../config/firmware.md#installing-px4-master-beta-or-custom-firmware). + +:::note +You can alternatively [setup a development environment](../dev_setup/dev_env.md), [build](../dev_setup/building_px4.md#building-for-nuttx) and [upload](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board) the firmware manually. +::: + + + + + + + +## Ubuntu Setup on RPi + +The following steps show how to install and setup Ubuntu 22.04 on the RPi. Note that ROS 2 versions target particular Ubuntu versions. We're using Ubuntu 22.04 to match ROS 2 "Humble", so if you're working with ROS 2 "Foxy" you would instead install Ubuntu 20.04. + +First install Ubuntu onto the RPi: + +1. Prepare a Ubuntu 22.04 bootable Ubuntu Desktop SD card by following the official tutorial: [How to install Ubuntu Desktop on Raspberry Pi 4](https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview) +1. Connect the mouse, keyboard, monitor and connect the RPi to a 5V Power Supply (external source/charger). +1. Insert the SD card into the RPi and turn on the RPi to boot from the SD card. +1. Follow the on-screen instructions to install Ubuntu. + +Enter the following commands (in sequence) a terminal to configure Ubuntu for RPi: + +1. Install `raspi-config`: + + ``` + sudo apt update + sudo apt upgrade + sudo apt-get install raspi-config + ``` +1. Open `raspi-config`: + + ``` + sudo raspi-config + ``` + +1. Go to the **Interface Option** and then click **Serial Port**. + - Select **No** to disable serial login shell. + - Select **Yes** to enable the serial interface. + - Click **Finish** and restart the RPi. + +1. Open the firmware boot configuration file in the `nano` editor on RaPi: + + ```bash + sudo nano /boot/firmware/config.txt + ``` +1. Append the following text to the end of the file (after the last line): + + ```bash + enable_uart=1 + dtoverlay=disable-bt + ``` + +1. Then save the file and restart the RPi. + - In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**. + +1. Check that the serial port is available. In this case we use the following terminal commands to list the serial devices: + + ```bash + cd / + ls /dev/ttyAMA0 + ``` + + The result of the command should include the RX/TX connection `/dev/ttyAMA0` (note that this serial port is also available as `/dev/serial0`). + +The RPi is now setup to work with RPi and communicate using the `/dev/ttyAMA0` serial port. Note that we'll install more software in the following sections to work with MAVLink and ROS 2. + + +## MAVLink Communication + +[MAVLink](https://mavlink.io/en/) is the default and stable communication interface for working with PX4. MAVLink applications running on the companion computer can connect to the `/dev/ttyAMA0` serial port you just set up on the RPi and should automatically (by default) connect to `TELEM 2` on the Pixhawk. + +PX4 recommends [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) for writing MAVLink companion computer applications, as it provides simple APIs for using many common MAVLink services in many different programming languages. You can also write applications using the libraries provided by [MAVLink](https://mavlink.io/en/#mavlink-project-generatorslanguages), such as [Pymavlink](https://mavlink.io/en/mavgen_python/), but then you are more likely to have to provide your own implementations of some microservices. + +For this tutorial we're not going to go into MAVLink control in any detail (it is well covered in the respective SDKs). However we will install and use a simple developer MAVLink GCS called `mavproxy`. This will allow us to verify the MAVLink connection, and therefore that our physical connection has been set up properly. A very similar connection pattern would be used for MAVSDK and other MAVLink applications. + +First check the Pixhawk `TELEM 2` configuration: + +1. Connect the Pixhawk with the laptop using a USB cable. +1. Open QGroundControl (the vehicle should connect). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = TELEM2 + XRCE_DDS_CFG = 0 (Disabled) + SER_TEL2_BAUD = 57600 + ``` + + Note that the parameters may already be set appropriately. For information about how serial ports and MAVLink configuration work see [Serial Port Configuration](../peripherals/serial_configuration.md) and [MAVLink Peripherals](../peripherals/mavlink_peripherals.md). + + +Then install setup MAVProxy on the RPi using the following terminal commands: + +1. Install MAVProxy: + + ```bash + sudo apt install python3-pip + sudo pip3 install mavproxy + sudo apt remove modemmanager + ``` + +1. Run MAVProxy, setting the port to connect to `/dev/ttyAMA0` and the baud rate to match the PX4: + + ``` + sudo mavproxy.py --master=/dev/serial0 --baudrate 57600 + ``` + +:::note +Note that above we used `/dev/serial0`, but we could equally well have used `/dev/ttyAMA0`. If we were connecting via USB then we would instead set the port as `/dev/ttyACM0`: + + ```bash + sudo chmod a+rw /dev/ttyACM0 + sudo mavproxy.py --master=/dev/ttyACM0 --baudrate 57600 + ``` + +::: + +MAVProxy on RPi should now connect to the Pixhawk, via RX/TX pins. You should be able to see this in the RPi terminal. + +We have now verified that our connection is wired up properly. In the next section we'll set up the both Pixhawk and RPi to use XRCE-DDS and ROS2 instead of MAVLink. + +## ROS 2 and XRCE-DDS + +The [ROS 2 Guide](../ros/ros2_comm.md) and [XRCE-DDS](../middleware/xrce_dds.md) pages cover the options for setting up the XRCE-DDS and ROS, focussing on ROS 2 "Foxy". This tutorial uses ROS 2 "Humble" and covers the specific setup for working with RPi. It is worth reading both! + +### Pixhawk/PX4 Setup + +Next we set up ROS 2 instead of MAVLink on `TELEM2`. We do this by changing parameters in QGroundControl, which can be connected via USB, or using a telemetry radio connected to `TELEM1`. + +The configuration steps are: + +1. Connect the Pixhawk with the laptop using a USB cable and open QGroundControl (if not currently connected). +1. [Check/change the following parameters](../advanced_config/parameters.md) in QGroundControl: + + ``` + MAV_1_CONFIG = 0 (Disabled) + XRCE_DDS_CFG = 102 (TELEM2) + SER_TEL2_BAUD = 921600 + ``` + + [MAV_1_CONFIG=0](../advanced_config/parameter_reference.md#MAV_1_CONFIG) and [XRCE_DDS_CFG=102](../advanced_config/parameter_reference.md#MAV_1_CONFIG) disable MAVLink on TELEM2 and enable the XRCE-DDS client on TELEM2, respectively. The `SER_TEL2_BAUD` rate sets the comms link data rate. +You could similarly configure a connection to `TELEM1` using either `MAV_1_CONFIG` or `MAV_0_CONFIG`. + + :::note +You will need to reboot the flight controller to apply any changes to these parameters. +::: + +1. Check that the [microdds_client](../modules/modules_system.md#microdds-client) module is now running. YOu can do this by running the following command in the QGroundControl [MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): + + ``` + microdds_client status + ``` + +:::note +If the client module is not running you can start it manually in the MAVLink console: + +``` +microdds_client start -t serial -d /dev/ttyS3 -b 921600 +``` + +Note that `/dev/ttyS3` is the PX4 port for `TELEM2` on the [Holybro Pixhawk 6c](../flight_controller/pixhawk6c.md#serial-port-mapping). For other flight controllers check the serial port mapping section in their overview page. +::: + +### ROS Setup on RPi + +The steps to setup ROS 2 and the XRCE-DDS Agent on the RPi are: + +1. Install ROS 2 Humble by following the [official tutorial](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). +2. Install the git using the RPi terminal: + + ```bash + sudo apt install git + ``` +3. Install the XRCE_DDS agent: + + ```bash + git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git + cd Micro-XRCE-DDS-Agent + mkdir build + cd build + cmake .. + make + sudo make install + sudo ldconfig /usr/local/lib/ + ``` + + See [XRCE-DDS > XRCE-DDS Agent Installation](../middleware/xrce_dds.md#xrce-dds-agent-installation) for alternative ways of installing the agent. +4. Start the agent in the RPi terminal: + + ```bash + sudo MicroXRCEAgent serial --dev /dev/serial0 -b 921600 + ``` + + Note how we use the serial port set up earlier and the same baud rate as for PX4. + +Now that both the agent and client are running, you should see activity on both the MAVLink console and the RPi terminal. You can view the available topics using the following command on the RPi: + +```bash +source /opt/ros/humble/setup.bash +ros2 topic list +``` + +That's it. Once you have the connection working, see the [ROS 2 Guide](../ros/ros2_comm.md) for more information about working with PX4 and ROS 2. diff --git a/zh/complete_vehicles/README.md b/zh/complete_vehicles/README.md index 5402f50b87330..cd5b95b653147 100644 --- a/zh/complete_vehicles/README.md +++ b/zh/complete_vehicles/README.md @@ -45,7 +45,7 @@ They allow you to use parts that are known to work, and to fly a vehicle that is ::: * Multicopter - * [PX4 Development Kit - X500 V2](https://shop.holybro.com/px4-development-kit-x500-v2_p1340.html) ([holybro.com](https://www.holybro.com/)) + * [PX4 Development Kit - X500 V2](https://holybro.com/collections/x500-kits) ([holybro.com](https://holybro.com/)) * [Holybro X500 Kit](../frames_multicopter/holybro_x500_pixhawk4.md) * [Holybro S500 Kit](../frames_multicopter/holybro_s500_v2_pixhawk4.md) * [Holybro QAV250 Kit](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) diff --git a/zh/complete_vehicles/crazyflie2.md b/zh/complete_vehicles/crazyflie2.md index c4b990bb65e0f..0947b5e825907 100644 --- a/zh/complete_vehicles/crazyflie2.md +++ b/zh/complete_vehicles/crazyflie2.md @@ -36,7 +36,7 @@ The main hardware documentation is here: https://wiki.bitcraze.io/projects:crazy * [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck): contains an optical flow sensor to measure movements of the ground and a distance sensor to measure the distance to the ground. This will be useful for precise altitude and position control. * [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck) has the same distance sensor as the Flow deck to measure the distance to the ground. This will be useful for precise altitude control. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): used for high speed onboard logging to a micro SD card. -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad). +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310). ## Flashing PX4 @@ -117,7 +117,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.0 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` @@ -161,6 +161,7 @@ To connect Crazyflie 2.0 with crazyradio, **launch cfbridge** by following these :::tip If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching *cfbridge* in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib. + ``` make venv ``` @@ -208,7 +209,7 @@ Since the onboard barometer is highly susceptible to wind disturbances created b ## Position Control -With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike PX4flow, the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Moreover, the flow deck shares the same SPI bus as the SD card deck, therefore logging at high rate on SD card is not recommended when flying in *Position mode*. +With [Flow deck](https://store.bitcraze.io/collections/decks/products/flow-deck), you can fly Crazyflie 2.0 in *Position mode*. Unlike [PX4FLOW](../sensor/px4flow.md), the flow deck does not house a gyro, hence the onboard gyro is used for flow fusion to find the local position estimates. Moreover, the flow deck shares the same SPI bus as the SD card deck, therefore logging at high rate on SD card is not recommended when flying in *Position mode*. :::note A ulog for flight in *Position* mode is available [here](https://logs.px4.io/plot_app?log=a0e68bf1-e905-410f-b828-f6146dba9d45). This can be used as a reference to compare your flight performance. @@ -252,6 +253,7 @@ To connect to Crazyflie 2.0 via MAVROS: - Add in **Comm Links** a link of type *UDP*, check the *Automatically Connect on Start* option, change the *Listening Port* to 14557, add Target Hosts: 127.0.0.1 and then press **OK**. - Make sure you have [MAVROS](https://github.com/mavlink/mavros/tree/master/mavros#installation) installed. - Start MAVROS with command: + ``` roslaunch mavros px4.launch fcu_url:="udp://:14550@127.0.0.1:14551" gcs_url:="udp://@127.0.0.1:14557" ``` diff --git a/zh/complete_vehicles/crazyflie21.md b/zh/complete_vehicles/crazyflie21.md index 2f46f093be57e..dd91691428ec4 100644 --- a/zh/complete_vehicles/crazyflie21.md +++ b/zh/complete_vehicles/crazyflie21.md @@ -47,7 +47,7 @@ Useful peripheral hardware includes: * [Buzzer deck](https://store.bitcraze.io/collections/decks/products/buzzer-deck) Audio feedback on system events, like low battery or charging completed. * [Breakout deck](https://store.bitcraze.io/collections/decks/products/breakout-deck): Expansion board that gives you the ability to test new hardware easily without soldering. * [SD-card deck](https://store.bitcraze.io/collections/decks/products/sd-card-deck): High speed onboard logging to a micro SD card -* [Logitech Joystick](https://www.logitechg.com/en-ch/product/f310-gamepad) +* [Logitech Joystick](https://support.logi.com/hc/en-us/articles/360024326793--Getting-Started-Gamepad-F310) ## Assemble Crazyflie 2.1 @@ -138,7 +138,7 @@ Connecting via **MAVLink**: We will use [cfbridge.py](https://github.com/bitcraze/crazyflie-lib-python/blob/master/examples/cfbridge.py) to setup a wireless MAVlink communication link between Crazyflie 2.1 (flashed with PX4) and QGroundControl. *Cfbridge* enables QGroundControl to communicate with the crazyradio PA. The [C based cfbridge](https://github.com/dennisss/cfbridge) is currently experiencing data loss issues, which is why we have chosen to use **cfbridge.py**. ::: -- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://github.com/bitcraze/crazyflie-lib-python#setting-udev-permissions) and **restart** your computer. +- Make sure you have set the udev permissions to use the USB Radio. To do this, follow the steps listed [here](https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/) and **restart** your computer. - Connect a Crazyradio PA via USB. - Build a [virtual environment (local python environment)](https://virtualenv.pypa.io/en/latest/) with package dependencies using the following method: ``` diff --git a/zh/complete_vehicles/holybro_kopis2.md b/zh/complete_vehicles/holybro_kopis2.md index 44c9516b9e64c..e11ea33f79df2 100644 --- a/zh/complete_vehicles/holybro_kopis2.md +++ b/zh/complete_vehicles/holybro_kopis2.md @@ -1,16 +1,17 @@ # Holybro Kopis 2 -The [Holybro Kopis 2](https://shop.holybro.com/kopis2-6s-v2free-shipping_p1169.html) is a ready-to-fly race quad for flying FPV or line-of-sight. +The [Holybro Kopis 2](https://holybro.com/products/kopis2-hdv-free-shipping) is a ready-to-fly race quad for flying FPV or line-of-sight. ![Kopis 2](../../assets/hardware/holybro_kopis2.jpg) ## 购买渠道 The *Kopis 2* can be bought from a number of vendors, including: -- [Holybro](https://shop.holybro.com/c/kopis_0480) +- [Holybro](https://holybro.com/products/kopis2-hdv-free-shipping) - [GetFPV](https://www.getfpv.com/holybro-kopis-2-fpv-racing-drone-pnp.html) 另外你还需要一些其它的配件: + - 一个遥控器以及接收机。 The *Kopis 2* can ship with an FrSky receiver or no receiver at all. - LiPo battery and charger. - FPV goggles if you want to fly FPV. There are many compatible options, including these ones from [Fatshark](https://www.fatshark.com/product-page/dominator-v3). You can also use DJI FPV goggles if you have the HDV version of the Kopis 2. diff --git a/zh/complete_vehicles/intel_aero.md b/zh/complete_vehicles/intel_aero.md index 14b18b386948b..a8c747dde17c9 100644 --- a/zh/complete_vehicles/intel_aero.md +++ b/zh/complete_vehicles/intel_aero.md @@ -3,219 +3,5 @@ :::warning This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -PX4 v1.11 is the last release that supports this platform. +PX4 v1.11 is the last release that supports this platform ([see here for legacy docs](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html)). ::: - -The *Intel Aero Ready to Fly Drone*® is a UAV development platform. Part of this is the *Intel Aero Compute Board*, running Linux on a Quad-core CPU. The other part is an STM32 microcontroller that is connected to it and that runs PX4 on NuttX. These are integrated in the same package on the *Intel Aero Ready to Fly Drone*, which also includes the vision accessory kit. - -![Intel Aero RTF](../../assets/hardware/intel_aero/intel-aero-rtf.jpg) - - -## 简介 - -The main documentation on the [official wiki](https://github.com/intel-aero/meta-intel-aero/wiki) explains how to setup, update and connect to the board, and how to do development on the Linux side. The instructions in this topic concentrate on updating the firmware on the microcontroller from a development tree. - -It's important to update to the latest image available since some instructions change between releases. You can check the BIOS and distro version by connecting to the board and running the following command: - -``` -get_aero_version.py -``` - -The instructions here are tested with the following version: - -``` -BIOS_VERSION = Aero-01.00.13 -OS_VERSION = Poky Aero (Intel Aero Linux Distro) 1.5.1-dev (pyro)" -AIRMAP_VERSION = 1.8 -FPGA_VERSION = 0xc1 -``` -## Setup Intel Aero using Ubuntu - -In order to install Ubuntu on Intel Aero, the following equipment is needed: - -1. Power supply (battery or network cable) -1. Micro HDMI to HDMI cable to attach a monitor -1. Micro USB3 to USB2 female adapter -1. USB Hub to attach mouse and keyboard - -Follow the linked instructions from [Intel Aero wiki > Installing Ubuntu on Intel Aero](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#installing-ubuntu-on-intel-aero): - -1. [Upgrade Yocto first](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#upgrade-yocto-first) (optional) -1. [OS](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#os) -1. [Intel Aero Repository](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-aero-repository) - -As soon as the steps under *Intel Aero Repository* (above) are completed the Aero kernel is installed. From this point forwards, always boot using this kernel. - -Follow the instructions to flash the BIOS, FPGA and Flight Controller. Open the MAVLink router config file: **/etc/mavlink-router/main.conf** - -Include the laptop IP as a UDP Endpoint by adding the following lines to the configuration file. The IP address must be set to the one of the laptop. To find the IP address of the laptop, execute: `ifconfig`. - -``` -[UdpEndpoint wifi] -Mode = Normal -Address = 192.168.8.255 -``` - -After all those steps are completed, the drone should automatically connect to *QGroundControl* running on the laptop. - -Next install ROS, by following the [instructions here](https://github.com/intel-aero/meta-intel-aero/wiki/05-Autonomous-drone-programming-with-ROS). - -### RealSense Camera - -1. RealSense SDK - - Follow the steps to install the RealSense SDK listed on the [aero wiki](https://github.com/intel-aero/meta-intel-aero/wiki/90-%28References%29-OS-user-Installation#intel-realsense-sdk). When cloning the repository, the legacy branch needs to be used for the R200 model. If the D435 or D415 is used, the master branch needs to be cloned. All other steps are the same and the branches can be just switched back and forth if the camera is changed. - - If the RealSense R200 is used, it can already be started over a ROS node using: - - ``` - roslaunch realsense_camera r200_nodelet_default.launch - ``` - - If any D400 series camera is used, follow the next step to install a different ROS wrapper. - -1. ROS Wrapper for D400 series RealSense - - Follow the instructions in [Install Intel RealSense ROS from Sources](https://github.com/intel-ros/realsense#step-3-install-intel-realsense-ros-from-sources) to install a catkin workspace and clone the RealSense software. - - Install the udev rules using: - ``` - sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ - sudo udevadm control --reload-rules && udevadm trigger - ``` - - Now the RealSense can be started over a ROS node using: - ``` - roslaunch realsense2_camera rs_camera.launch - ``` - -### 自主避障 - -To run the PX4 obstacle avoidance software, install catkin first: - -``` -apt install python-catkin-tools -``` - -Create a catkin workspace and initialize it. Then clone the avoidance repository into the source space, or use a symbolic link to the source space. Build the package and start the ROS node using: - -``` -catkin build local_planner - -roslaunch local_planner local_planner_aero.launch -``` - -## Flashing PX4 software - -After setting up the PX4 development environment, follow these steps update the PX4 software: - -1. Do a full update of all software on the vehicle (https://github.com/intel-aero/meta-intel-aero/wiki/Upgrade-To-Latest-Software-Release) -1. Grab the [Firmware](https://github.com/PX4/PX4-Autopilot) -1. Compile with `make intel_aerofc-v1_default` -1. Configure the target hostname - - If your system resolves link local names you don't have to do anything and you can skip this step. You can test it by trying to ssh into `intel-aero.local` after connecting to it either via WiFi or USB: - - ``` - ssh root@intel-aero.local - ``` - - If it doesn't work you can try giving the IP that will be used by the upload script: - - ``` - # WiFi IP - export AERO_HOSTNAME=192.168.8.1 - - # Ethernet-over-USB IP - export AERO_HOSTNAME=192.168.7.2 - ``` - -1. Upload with: `make intel_aerofc-v1_default upload` - - -## Connecting QGroundControl via Network - -1. Make sure you are connected to the board with WiFi or USB Network -1. SSH to the board and make sure MAVLink forwarding runs. By default it automatically starts when booting. It can be started manually with: - ``` - systemctl start mavlink-router - ``` -1. Start *QGroundControl* and it should automatically connect. -1. Instead of starting *QGroundControl*, you can open a [MAVLink shell](../debug/mavlink_shell.md) using the script: - ``` - ./Tools/mavlink_shell.py 0.0.0.0:14550 - ``` - - -## Connecting LeddarOne Range Finder - -Connect the [LeddarOne](../sensor/leddar_one.md) to the Aero telemetry port. The pinout for the LeddarOne and Aero telemetry port (TELEM1) are as follows. - -| 针脚 | Aerofc TELEMETRY | LeddarOne | -| -- | ---------------- | --------- | -| 1 | VCC | GND | -| 2 | TX | - | -| 0 | RX | VCC | -| 4 | SCL | RX | -| 5 | SDA | TX | -| 6 | GND | - | - -To enable the rangefinder set the [SENS_LEDDAR1_CFG](../advanced_config/parameter_reference.md#SENS_LEDDAR1_CFG) parameter to TELEM1 and reboot the board (instructions for setting parameters [available here](../advanced_config/parameters.md)). - - -## Connecting Lidar Lite Range Finder - -:::warning -The Lidar Lite is not recommended for use with *Intel Aero Ready to Fly Drone*® due to measurements spikes. -::: - -The following instructions are for a [Lidar Lite](../sensor/rangefinders.md#lidar-lite) V3 connected via I2C. The Intel® Aero Ready to Fly Drone has two ports with I2C: One labelled COMPASS and the other TELEMETRY. The pinout for both of them can be found below. We recommend using the TELEMETRY port as it is not being used. If your TELEMETRY port is already occupied, a splitter can be used to share the I2C connection (works on any I2C port). Check the images below for the splitter setup. - -In addition it is recommended to use a electrolytic capacitor for the Lidar Lite I2C connection to reduce spikes in the distance readings (see [here](https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf) on page 3). - -The pinout for the Lidar Lite V3 and Aero telemetry port are as follows - -| 针脚 | Aerofc TELEMETRY | Lidar Lite V3 | -| -- | ---------------- | ------------- | -| 1 | VCC | VCC | -| 2 | TX | - | -| 0 | RX | - | -| 4 | SCL | SCL | -| 5 | SDA | SDA | -| 6 | GND | GND | - -| 引脚 | Aerofc COMPASS | Lidar Lite V3 | -| -- | -------------- | ------------- | -| 1 | VCC | VCC | -| 2 | SCL | - | -| 0 | SDA | - | -| 4 | GND | SCL | -| 5 | - | SDA | -| 6 | - | GND | - -![Aero I2C splitter](../../assets/hardware/intel_aero/aero_i2c_splitter.jpg) - -![Aero LidarLite](../../assets/hardware/intel_aero/aero_lidarlite.jpg) - -## Using Optical Flow on the Aero - -The *Intel Aero Ready to Fly Drone*® comes with a preinstalled optical flow binary on the compute board (Linux OS version 1.6 or higher), which enables it to stably fly based on optical flow velocity estimation. In order to use optical flow, a range sensor has to be installed first (see above). - -To use the optical flow, run the following command in a console on the vehicle's compute board: -``` -systemctl start aero-optical-flow -``` - -If you want to start the optical flow binary at boot, use -``` -systemctl enable aero-optical-flow #use disable to undo -``` - -In addition, the following parameter values should be set in the flight controller. - -| 参数 | 值 | -| -------------------------------------------------------------------------- | - | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 2 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 2 | -| [EKF2_RNG_CTRL](../advanced_config/parameter_reference.md#EKF2_RNG_CTRL) | 2 | -| [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) | 0 | diff --git a/zh/complete_vehicles/px4_vision_kit.md b/zh/complete_vehicles/px4_vision_kit.md index e6dc8b9ddc135..ffd2d869feb16 100644 --- a/zh/complete_vehicles/px4_vision_kit.md +++ b/zh/complete_vehicles/px4_vision_kit.md @@ -1,6 +1,6 @@ # PX4 Vision 视觉自主开发套件 -[*PX4 Vision 视觉自主开发套件*](http://www.holybro.com/product/px4-vision/) 是一个稳定且高性价比的套件,让你能够在自动化载具上开发计算机视觉。 +The [*PX4 Vision Autonomy Development Kit*](https://holybro.com/collections/multicopter-kit/PX4-Vision) is a robust and inexpensive kit for enabling computer vision development on autonomous vehicles. ![综述](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_front.png) @@ -14,8 +14,8 @@ The kit contains a near-ready-to-fly carbon-fiber quadcopter equipped with a *Pi ## Where to Buy -- [PX4 Vision Dev Kit (Discontinued)](https://item.taobao.com/item.htm?id=609418685176) -- [PX4 Vision Dev Kit v1.5](https://shop.holybro.com/px4-vision-dev-kit-v15_p1342.html) +- [PX4 Vision Dev Kit v1.5](https://holybro.com/collections/multicopter-kit/products/px4-vision-dev-kit-v1-5) +- [PX4 Vision Dev Kit v1 (Discontinued)](https://holybro.com/collections/multicopter-kit/products/px4-vision) ## 警告&通知 - [警告&通知](#warnings-and-notifications) @@ -24,7 +24,7 @@ The kit contains a near-ready-to-fly carbon-fiber quadcopter equipped with a *Pi - [首次使用](#first-time-setup) - [试飞无人机(带避障)](#fly-the-drone-with-avoidance) - [使用套件开发](#development-using-the-kit) -- [Px4 Vision 载板引脚排列](#px4-vision-carrier-board-pinouts) +- [PX4 Vision Carrier Board Pinouts](#px4-vision-carrier-board-pinouts) - [其他拓展资源](#other-development-resources) - [如何获得技术支持](#how-to-get-technical-support) @@ -52,8 +52,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here: [Top View](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside_top.jpg), [Side View ](../../assets/hardware/px4_vision_devkit/holybro_px4_vision_whats_inside.jpg), [Exploded View](../../assets/hardware/px4_vision_devkit/px4_exploded_view.png) - +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). 当无人机按上述安装完成时: - 核心组件: @@ -369,7 +368,7 @@ Modification of PX4 code is not *needed* to meet most computer vision use cases. ## PX4 Vision Carrier Board Pinouts -软件问题,请使用以下社区支持频道: +Information for the PX4 Vision 1.15 can be found at [https://docs.holybro.com](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5). The carrier board pinouts and other information are in the [downloads section](https://docs.holybro.com/drone-development-kit/px4-vision-dev-kit-v1.5/downloads). @@ -381,7 +380,6 @@ Modification of PX4 code is not *needed* to meet most computer vision use cases. - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) - [PX4 避障软件/文档](https://github.com/PX4/PX4-Avoidance) - [路径规划接口](../computer_vision/path_planning_interface.md) -- [Px4 Vision 载板引脚排列](http://www.holybro.com/manual/PX4_Vision_carrier_board_pinouts_v1.1.pdf) diff --git a/zh/computer_vision/visual_inertial_odometry.md b/zh/computer_vision/visual_inertial_odometry.md index 89220f318294c..6b19893e47f34 100644 --- a/zh/computer_vision/visual_inertial_odometry.md +++ b/zh/computer_vision/visual_inertial_odometry.md @@ -116,12 +116,12 @@ Note 这个(支持的)解决方案使用 ROS 来路由 VIO 信息到 PX4 。 将相机连接到机载计算机并将其安装到框架: -| 参数 | 外部位置估计的设置 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | -| [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK) | 按照你期望的融合方式来设置 *视觉位置融合* 、 *视觉速度融合*、*视觉航向融合*以及*外部视觉系统旋转*。 | -| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 设置为 *Vision* 以使用视觉作为高度估计的主要来源。 | -| [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | 设置为测量的时间戳和 "实际" 捕获时间之间的差异。 有关详细信息,请参阅 [below](#tuning-EKF2_EV_DELAY)。 | -| [EKF2_EV_POS_X](../advanced/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced/parameter_reference.md#EKF2_EV_POS_Z) | 设置视觉传感器相对于车身框架的位置。 | +| 参数 | 外部位置估计的设置 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| [EKF2_EV_CTRL](../advanced_config/parameter_reference.md#EKF2_EV_CTRL) | Set *horizontal position fusion*, *vertical vision fusion*, *velocity fusion*, and *yaw fusion* according to your desired fusion model. | +| [EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF) | 设置为 *Vision* 以使用视觉作为高度估计的主要来源。 | +| [EKF2_EV_DELAY](../advanced_config/parameter_reference.md#EKF2_EV_DELAY) | 设置为测量的时间戳和 "实际" 捕获时间之间的差异。 有关详细信息,请参阅 [below](#tuning-EKF2_EV_DELAY)。 | +| [EKF2_EV_POS_X](../advanced/parameter_reference.md#EKF2_EV_POS_X), [EKF2_EV_POS_Y](../advanced/parameter_reference.md#EKF2_EV_POS_Y), [EKF2_EV_POS_Z](../advanced/parameter_reference.md#EKF2_EV_POS_Z) | 设置视觉传感器相对于车身框架的位置。 | 这些参数可以在*QGroundControl*>**Vehicle Setup > Parameters > EKF2**中设置(切记要使参数更改生效需要重启飞控)。 diff --git a/zh/concept/architecture.md b/zh/concept/architecture.md index 2ae7d76021c6d..96b4057c3da1b 100644 --- a/zh/concept/architecture.md +++ b/zh/concept/architecture.md @@ -98,7 +98,7 @@ There are 2 different ways that a module can be executed: The advantage of running modules on a work queue is that it uses less RAM, and potentially results in fewer task switches. The disadvantages are that *work queue tasks* are not allowed to sleep or poll on a message, or do blocking IO (such as reading from a file). Long-running tasks (doing heavy computation) should potentially also run in a separate task or at least a separate work queue. :::note -Tasks running on a work queue do not show up in [`top`](../modules/modules_command.html#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. +Tasks running on a work queue do not show up in [`top`](../modules/modules_command.md#top) (only the work queues themselves can be seen - e.g. as `wq:lp_default`). Use [`work_queue status`](../modules/modules_system.md#work-queue) to display all active work queue items. ::: ### 后台任务 diff --git a/zh/concept/custom_mixer_payload.md b/zh/concept/custom_mixer_payload.md deleted file mode 100644 index a3838b3b06380..0000000000000 --- a/zh/concept/custom_mixer_payload.md +++ /dev/null @@ -1,90 +0,0 @@ -# 自定义有效载荷混控器 - -此主题展示了如何添加一个用以可编程控制自定义载荷的自定义的[混控器](../concept/mixing.md)(比如电磁控制的机械手) - -此主题是为那些想要支持现在没有现成控制组定义的载荷的开发者(比如说,云台有一个现成的控制组,但是机械手没有) 您应该已经阅读过[混控和执行器](../concept/mixing.md) - - -## 载荷混控器示例 - -A payload mixer is just a [summing mixer](../concept/mixing.md#summing_mixer) that maps any of the function values from [Control Group #6 (First Payload)](../concept/mixing.md#control_group_6) to a particular output. 随后您可以将 uORB 主题发布到选定的控制组函数中,其值将被映射到指定的输出。 - -在这个例子中,我们将创建一个基于*遥控信号直穿的混控器*([穿过辅助混控器](https://github.com/PX4/PX4-Autopilot/blob/master/ROMFS/px4fmu_common/mixers/pass.aux.mix)) 这个混控器通常被加载到大型多旋翼的 AUX PWM 端口)。 它将4个用户自定义的遥控信号值(使用[RC_MAP_AUXx/RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_AUX1)参数)直传到4个AUX口作为PWM输出 - -``` -# 输出1-4的手动直传混控器 - -# AUX1通道 (由 RC_MAP_AUX1 参数选择遥控器的通道) -M: 1 -S: 3 5 10000 10000 0 -10000 10000 - -# AUX2 通道(由 RC_MAP_AUX2 参数选择遥控器的通道) -M: 1 -S: 3 6 10000 10000 0 -10000 10000 - -# AUX3 通道(由 RC_MAP_AUX3 参数选择遥控器的通道) -M: 1 -S: 3 7 10000 10000 0 -10000 10000 - -# 襟翼通道 (由 RC_MAP_FLAPS 参数选择遥控器的通道) -M: 1 -S: 3 4 10000 10000 0 -10000 10000 -``` - -:::note -The file defines four [summing mixers](../concept/mixing.md#summing_mixer) (for four outputs). -- `M: 1` indicates an output that is defined by one control input (the following `S` line). -- `S: 3`_`n`_ indicates that the input is the nth input of [Control Group 3 (Manual Passthrough)](../concept/mixing.md#control-group-3-manual-passthrough). So for `S: 3 5` the input is called "RC aux1" (this maps to the RC channel set in parameter `RC_MAP_AUX1`). -- The section declaration order defines the order of the outputs when assigned to a physical bus (e.g. the third section might be assigned to AUX3). -::: - -删除带有载荷控制组函数输入的第一个部分: - -Remove the first section with a payload control group function input: -- Change this: - ``` - # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param) - M: 1 - S: 3 5 10000 10000 0 -10000 10000 - ``` -- To: - ``` - # Payload 1 (control group 6) channel 1 - M: 1 - S: 6 1 10000 10000 0 -10000 10000 - ``` - -Because this output is in the first position in the file it will map to the first AUX PWM output (unless UAVCAN is enabled). This output will now respect updates to the payload control group (6) output 1. - -Control group 6 will need to be defined in the code as well (it is missing!): -- Add `actuator_controls_6` to the TOPICS definition in [/msg/actuator_controls.msg](https://github.com/PX4/PX4-Autopilot/blob/master/msg/actuator_controls.msg#L17): - ``` - # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6 - ``` -- Increase `NUM_ACTUATOR_CONTROL_GROUPS` to 7 in the same file. -- Subscribe to the additional control group in the output library ([/src/lib/mixer_module/mixer_module.cpp#L52](https://github.com/PX4/PX4-Autopilot/blob/master/src/lib/mixer_module/mixer_module.cpp#L52)) in the `MixingOutput` constructor. It should look like this: - ``` - {&interface, ORB_ID(actuator_controls_0)}, - {&interface, ORB_ID(actuator_controls_1)}, - {&interface, ORB_ID(actuator_controls_2)}, - {&interface, ORB_ID(actuator_controls_3)}, - ``` - ``` - {&interface, nullptr}, - {&interface, nullptr}, - {&interface, ORB_ID(actuator_controls_6)}, - ``` - -Putting an output on group 6 works by publishing actuator control group 6. First you have to create the publication. This should happen once when the PX4 module is initialized (look for places where this pattern is already being used): -``` -uORB::Publication _actuator_controls_pub{ORB_ID(actuator_controls_6)}; -``` - -Then you need to publish the first message: -``` -actuator_controls_s _act_controls{}; -_act_controls.timestamp = hrt_absolute_time(); -// set the first output to 50% positive (this would rotate a servo halfway into one of its directions) -_act_controls.control[0] = 0.5f; -_actuator_controls_pub.publish(_act_controls); -``` diff --git a/zh/concept/dronecode_architecture.md b/zh/concept/dronecode_architecture.md deleted file mode 100644 index 507fd35af57e1..0000000000000 --- a/zh/concept/dronecode_architecture.md +++ /dev/null @@ -1,13 +0,0 @@ -# Dronecode 平台硬件/软件架构 - -下图提供了 [Dronecode 平台](https://www.dronecode.org/platform/) 的前瞻性系统顶级架构概述。 图的左侧展示的是一种可能的 *飞行控制器 (flight controller)* (亮蓝色)通过 [RTPS](../middleware/micrortps.md) 与 *视觉感知计算机(perception computer)* (深蓝色) 相连接的硬件配置。 感知计算机配备一个单独的相机载荷,并使用相机传感器阵列提供视觉控制和目标回避功能。 - -图的右侧显示了端到端的软件堆栈。 堆栈 "近似" 与关系图的硬件部分水平对齐, 并使用颜色进行了编码以显示哪些软件在飞行控制器上运行、哪些软件在配套计算机上运行。 - -:::note -The [PX4 Architectural Overview](../concept/architecture.md) provides information about the flight stack and middleware. Offboard APIs are covered in [ROS](../ros/README.md) and [MAVSDK](https://mavsdk.mavlink.io/develop/en/index.html). -::: - -![PX4 Platform architecture](../../assets/diagrams/dronecode_platform_architecture.jpg) - - diff --git a/zh/config/README.md b/zh/config/README.md index 928deba3263f4..1eff8214320a3 100644 --- a/zh/config/README.md +++ b/zh/config/README.md @@ -36,11 +36,11 @@ The video below shows the calibration process in detail (this uses an older vers ## Advanced Configuration -If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md#install-configure-px4)) then it may benefit from fine tuning, but this is not generally required. +If your [selected airframe configuration](../config/airframe.md) is a _specific vehicle model_ (e.g. [Holybro s500](../frames_multicopter/holybro_s500_v2_pixhawk4.md)) then it may benefit from fine tuning, but this is not generally required. If you're using a new airframe, a "generic" airframe, significantly modifying an airframe, or using less common sensors then see: -* [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. -* [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). +- [Advanced Configuration](../advanced_config/README.md): Vehicle-specific tuning, fine tuning, factory-level configuration. +- [Flight Controller Peripherals](../peripherals/README.md) - Hardware and software setup related to specific hardware (in particular lesser-used sensors). ## Support diff --git a/zh/config/actuators.md b/zh/config/actuators.md index 0ce4facebab79..f7d557bc483d1 100644 --- a/zh/config/actuators.md +++ b/zh/config/actuators.md @@ -43,11 +43,7 @@ Core geometry concepts and the configuration for a number of different frames ar #### Motor Geometry: Multicopter -The image below shows the geometry setup for a multicopter frame with and without advanced settings. - -:::note -Specifically this is the motor geometry for a [Quadrotor Wide](../airframes/airframe_reference.md#quadrotor-wide) muticopter. Other multicopters frames are configured similarly. -::: +The image below shows the geometry setup for a quadrotor multicopter frame with and without advanced settings. ![Geometry MC (QGC)](../../assets/config/actuators/qgc_actuators_mc_geometry_marked.png) @@ -68,7 +64,7 @@ The `X`, `Y`, `Z` positions are in [FRD coordinate frame, relative to the _centr #### Motor Geometry: VTOL Quadrotor Tailsitter -The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-quad-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). +The motor geometry for a [VTOL Quad Tailsitter](../airframes/airframe_reference.md#vtol-tailsitter) is shown below (the approach for configuring other tailsitter VTOL vehicles will be similar). Motors have the same configuration fields as for the [multicopter geometry](#motor-geometry-multicopter). @@ -86,7 +82,7 @@ The motor geometry for a [Generic Quadplane VTOL Tiltrotor](../airframes/airfram #### Motor Geometry: Standard VTOL -The motor geometry for a [Generic Standard Quadplane VTOL Tiltrotor](../airframes/airframe_reference.md#vtol_standard_vtol_generic_quadplane_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). +The motor geometry for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) is shown below (the approach for configuring other "Standard VTOL" will be similar). ![Geometry motor: standard vtol](../../assets/config/actuators/qgc_geometry_standard_vtol_motors.png) @@ -124,27 +120,46 @@ Note that you will need to also ensure that the ESC associated with bidirectiona ### Control Surfaces Geometry -The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). - -An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. +The control surfaces section of the geometry panel lets you set the number and types of control surfaces that are present on the vehicle. You may also need to set trim and slew rate values in some cases. More advanced users can also configure the roll scale, yaw scale, and pitch scale (generally the defaults are acceptable, and this is not needed). An "example" control surface section for a vehicle with two ailerons is shown below. Note that ailerons only affect roll, so the pitch and yaw fields are disabled. ![Control Surface Setup Example](../../assets/config/actuators/control_surfaces_geometry.png) +:::note +Only the most common settings are displayed by default. Select the **Advanced** checkbox in the top right corner of the view to display all settings. +::: + The fields are: - `Control Surfaces`: The number of control surfaces (set this first!) - `Type`: The type of each control surface: `LeftAileron`, `RightAileron`, `Elevator`, `Rudder`, `Left Elevon`, `Right Elevon`, `Left V-Tail`, `Right V-Tail`, `Left Flap`, `Right Flap`, `Airbrakes`, `Custom`. -- `Roll scale`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Pitch scale`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). -- `Yaw scale`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Roll Torque`: Effectiveness of actuator around roll axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Pitch Torque`: Effectiveness of actuator around pitch axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). +- `Yaw Torque`: Effectiveness of actuator around yaw axis (normalised: -1 to 1). [Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling). - `Trim`: An offset added to the actuator so that it is centered without input. This might be determined by trial and error. -- `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. +- (Advanced) `Slew Rate`: Minimum time allowed for the motor/servo signal to pass through the full output range, in seconds. - The setting limits the rate of change of an actuator (if not specified then no rate limit is applied). It is intended for actuators that may be damaged if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle. - For example, a setting of 2.0 means that the motor/servo will not be commanded to move from 0 to 1 at a rate that completes the operation in less than 2 seconds (in case of reversible motors, the range is -1 to 1). -- `Lock control surfaces in hover`: +- (Advanced) `Flap Scale`: How much this actuator is deflected at the "full flaps configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as flap or to compensate for generated torque through main flaps. +- (Advanced) `Spoiler Scale`: How much this actuator is deflected at the "full spoiler configuration" \[0, 1\] (see [Flap Scale and Spoiler Scale Configuration](#flap-scale-and-spoiler-scale-configuration) below). Can be used to configure aerodynamic surface as spoiler or to compensate for generated torque through main spoiler. +- (VTOL only) `Lock control surfaces in hover`: - `Enabled`: Most vehicles do not use control surfaces in hover. Use this setting to lock them so that they don't affect vehicle dynamics. - `Disabled`: Set this for vehicles that use control surfaces in hover, such as the duo tailsitter (which uses elevons for pitch and yaw control). It should also be set for vehicles that use control surfaces to provide additional stabilization in hover mode when moving at speed or in high winds. +#### Flap Scale and Spoiler Scale Configuration + +"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller. For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing. + +The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range). The allocator then uses any of the available control surfaces it wants in order to achieve the requested configuration: usually flaps, ailerons, and elevator. + +The `flap scale` and `spoiler scale` settings in the actuator UI inform the allocator how much ailerons, elevators, flaps, spoilers, and other control surfaces, contribute to a requested "Flap-control" and/or "Spoiler-control" value. Specifically, they indicate how much each control surface should be deflected when the controller is demanding "full flaps" or "full spoiler". + +In the following example, the vehicle has two ailerons, one elevator, one rudder and two flaps as control surfaces: + +![Flaps and spoiler actuator configuration example](../../assets/config/actuators/qgc_actuators_tab_flaps_spoiler_setup.png) + +- The flaps have both `Flap Scale` set to 1, meaning that they will be fully deflected with the flap-control at 1. They also have a slew rate of 0.5/s, meaning that it will take 2s to fully deflect them (a slew rate on the flaps is generally recommended to reduce the disturbances their movement creates). +- The ailerons are primarily tasked to provide the commanded roll torque. They also have `Spoiler Scale` set to 0.5, and will additionally be deflected upwards 50% if the controller demands full spoiler configuration. The aileron deflection is thus the sum of the (asymmetrical) deflection for the roll torque, plus the (symmetrical) deflection for the spoiler setpoint. +- The elevator is primarily tasked to provide pitch torque. It also has non-zero entries in the `Flap Scale` and `Spoiler Scale` fields. These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators. In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps. #### Actuator Roll, Pitch, and Yaw Scaling @@ -268,7 +283,7 @@ Functions include: - `Constant_Max`: Output is set to constant maximum value (+1). - `Motor 1` to `Motor 12`: Output is indicated motor. Only motors allowed for airframe are displayed. - `Servo 1` to `Servo 8`: Servo output. These are further assigned a specific meaning based on airframe, such as "tilt servo", "left aileron". -- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [MAVLink Payload output](../payloads/README.md#cargo-drones-actuator-payloads). +- `Offboard Acutator Set 1` to `Offboard Acutator Set 6`: [Payloads > Generic Actuator Control with MAVLink](../payloads/README.md#generic-actuator-control-with-mavlink). - `Landing Gear`: Output is landing gear. - `Parachute`: Output is parachute. The minimum value is sent in normal use and the maximum value is emitted when a failsafe is triggered. - `RC Roll`: Output is passthrough roll from RC ([RC_MAP_ROLL](../advanced_config/parameter_reference.md#RC_MAP_ROLL) maps an RC channel to this output). An RC channel is mapped to the output using . @@ -276,7 +291,7 @@ Functions include: - `RC Throttle`: Output is passthrough throttle from RC ([RC_MAP_THROTTLE](../advanced_config/parameter_reference.md#RC_MAP_THROTTLE) maps an RC channel to this output). - `RC Yaw`: Output is yaw from RC ([RC_MAP_YAW](../advanced_config/parameter_reference.md#RC_MAP_YAW) maps an RC channel to this output). - `RC Flaps`: Output is flaps from RC ([RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS) maps an RC channel to this output). -- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#cargo-drones-actuator-payloads) +- `RC AUXn` to `RC AUX1`: Outputs used for [arbitrary payloads triggered by RC passthrough](../payloads/README.md#generic-actuator-control-with-rc) - `Gimbal Roll`: Output controls gimbal roll. - `Gimbal Pitch`: Output controls Gimbal pitch. - `Gimbal Yaw`: Output controls Gimbal pitch. diff --git a/zh/config/autotune.md b/zh/config/autotune.md index 0d05a09869018..1619e8b57386e 100644 --- a/zh/config/autotune.md +++ b/zh/config/autotune.md @@ -2,7 +2,7 @@ Auto-tuning automates the process of tuning the PX4 rate and attitude controllers, which are the most important controllers for stable and responsive flight (other tuning is more "optional"). It is currently enabled for multicopter, fixed wing, and hybrid VTOL fixed wing vehicles. -Tuning only needs to be done once, and is recommended unless unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). +Tuning only needs to be done once, and is recommended unless you're using vehicle that has already been tuned by the manufacturer (and not modified since). :::warning Auto-tuning is performed while flying. The airframe must fly well enough handle moderate disturbances, and should be closely attended: @@ -86,10 +86,10 @@ Additional notes: * slow oscillations (1 oscillation per second or slower): this often occurs on large platforms and means that the attitude loop is too fast compared to the rate loop. - **Multicopter:** decrease [MC_ROLL_P](../advanced_config/parameter_reference.md#MC_ROLL_P) and [MC_PITCH_P](../advanced_config/parameter_reference.md#MC_PITCH_P) by steps of 1.0. - - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC), [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC), [FW_Y_TC](../advanced_config/parameter_reference.md#FW_Y_TC) by steps of 0.1. + - **Fixed-wing:** increase [FW_R_TC](../advanced_config/parameter_reference.md#FW_R_TC) and [FW_P_TC](../advanced_config/parameter_reference.md#FW_P_TC) by steps of 0.1. * fast oscillations (more than 1 oscillation per second): this is because the gain of the rate loop is too high. - **Multicopter:** decrease `MC_[ROLL|PITCH|YAW]RATE_K` by steps of 0.02 - - **Fixed-wing:** decrease [FW_RR_R](../advanced_config/parameter_reference.md#FW_RR_R), [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_RR_Y](../advanced_config/parameter_reference.md#FW_RR_Y) by steps of 0.01. + - **Fixed-wing:** decrease [FW_RR_P](../advanced_config/parameter_reference.md#FW_RR_P), [FW_PR_P](../advanced_config/parameter_reference.md#FW_PR_P), [FW_YR_P](../advanced_config/parameter_reference.md#FW_YR_P) by steps of 0.01. #### The auto-tuning sequence fails diff --git a/zh/config/battery.md b/zh/config/battery.md index de2c7ba8ea393..93c69da684e25 100644 --- a/zh/config/battery.md +++ b/zh/config/battery.md @@ -183,7 +183,7 @@ A typical value is 5mΩ per cell but this can vary with discharge current rating This load compensation method estimates the load based on the total thrust that gets commanded to the motors. -:::caution +:::warning This method is not particularly accurate because there's a delay between thrust command and current, and because the thrust in not linearly proportional to the current. Use [Current-based Load Compensation](#current_based_load_compensation) instead if your vehicle has a current sensor. ::: diff --git a/zh/config/compass.md b/zh/config/compass.md index 51c1d1265a86f..78f10edd4f531 100644 --- a/zh/config/compass.md +++ b/zh/config/compass.md @@ -58,9 +58,33 @@ Notes: - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). - The amplitude and the speed of the partial rotations done in step 1 can affect the calibration quality. However, 2-3 oscillations of ~30 degrees in every direction is usually enough. + +## Additional Calibration/Configuration + +The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all connected magnetometers. + +Further compass configuration should generally not be required. + +:::note +All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. +::: + +### Disable a Compass + +As stated above, generally no further configuration should be required. + +That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with [CAL_MAGx_](../advanced_config/parameter_reference.md#CAL_MAG0_ID) (where `x=0-3`). + +To disable an internal compass: + +- Use [CAL_MAGn_ROT](../advanced_config/parameter_reference.md#CAL_MAG0_ROT) to determine which compasses are internal. A compass is internal if `CAL_MAGn_ROT==1`. +- Then use [CAL_MAGx_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) to disable the compass. This can also be used to change the relative priority of a compass. + + ## 更多信息: -* [Peripherals > GPS & Compass > Compass Configuration](../gps_compass/README.md#compass-configuration) -* [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) -* [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) -* [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [Peripherals > GPS & Compass](../gps_compass/README.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) (Advanced Configuration) +- [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/SetupView/sensors_px4.html#compass) +- [PX4 Setup Video - @2m38s](https://youtu.be/91VGmdSlbo4?t=2m38s) (Youtube) + diff --git a/zh/config/flight_controller_orientation.md b/zh/config/flight_controller_orientation.md index 8431b895d4c70..9fe98cfce45d6 100644 --- a/zh/config/flight_controller_orientation.md +++ b/zh/config/flight_controller_orientation.md @@ -27,7 +27,9 @@ To set the orientations: 1. Start *QGroundControl* and connect the vehicle. 1. Select the **Gear** icon (Vehicle Setup) in the top toolbar and then **Sensors** in the sidebar. -1. Select the **Set Orientations** button. +1. Select the **Set Orientations** button. + + 1. Select the **AutoPilot Orientation** (as [calculated above](#calculating-orientation)). diff --git a/zh/config/flight_mode.md b/zh/config/flight_mode.md index a33beaf82f8d8..f69e52680dbaa 100644 --- a/zh/config/flight_mode.md +++ b/zh/config/flight_mode.md @@ -32,7 +32,7 @@ To configure single-channel flight mode selection: 1. 打开您的 RC 遥控器发射机。 1. Select **QGroundControl icon > Vehicle Setup**, and then **Flight Modes** in the sidebar. - ![Flight modes single-channel](../../assets/qgc/setup/flight_modes/flight_modes_single_channel.jpg) + ![飞行模式单通道控制](../../assets/qgc/setup/flight_modes/flight_modes_single_channel.jpg) 1. Specify *Flight Mode Settings*: * Select the **Mode channel** (above this shown as Channel 5, but this will depend on your transmitter configuration). @@ -83,7 +83,7 @@ On the FrSky Taranis this process involves assigning a "logical switch" to each The video below shows how this is done with the *FrSky Taranis* transmitter.@[youtube](https://youtu.be/TFEjEQZqdVA) -The *QGroundControl* configuration is then as [described above](#single-channel-flight-mode-selection). +The *QGroundControl* configuration is then [as described above](#flight-mode-selection). ## Further Information diff --git a/zh/config/motors.md b/zh/config/motors.md deleted file mode 100644 index 8e9d6948c9cb3..0000000000000 --- a/zh/config/motors.md +++ /dev/null @@ -1,27 +0,0 @@ -# 电机检查 - -:::note -This section is being replaced by an [Actuators](../config/actuators.md) configuration screen. -::: - -After the airframe is setup and configured you should validate the motor assignment and spin direction, and the servo response. This can be done in *QGroundControl*, under the [Vehicle Setup > Motors](https://docs.qgroundcontrol.com/master/en/SetupView/Motors.html) tab. - -Note the following PX4-specific behaviour: -- 如果使用了安全按钮,在允许电机测试之前必须按下,保证其开启。 -- 急停开关仍然可以立即停止电机。 -- 使用参数 [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) ,可以禁用电机测试。 -- On boards with an IO, only the MAIN pins can be tested. -- On the shell, [motor_test](../modules/modules_command.md#motor-test) can be used as well, which has additional options. - -If one or more of the motors do not turn in the correct direction according to the configured [airframe](../airframes/airframe_reference.md), they must be reversed. There are several options: -- If using ESCs that support [DShot](../peripherals/dshot.md) you can reverse the direction via [DShot commands](../peripherals/dshot.md#commands). -- Swap 2 of the 3 motor cables (it does not matter which ones). :::note -If motors are not connected via bullet-connectors, re-soldering is required (this is a reason, among others, to prefer DShot ESCs). -::: - -The following additional checks should be performed to validate that the vehicle is setup correctly: -1. With propellers still removed, switch to [Stabilised mode](../flight_modes/manual_stabilized_mc.md) (Multicopter) or [Manual mode](../flight_modes/manual_fw.md) (Fixed Wing) and arm the vehicle. -1. Increase the throttle a little (so the vehicle does not automatically disarm) and check that the motors respond to throttle changes. -1. Check that all motors spin at minimum throttle. -1. If the vehicle has ailerons, check if they are responding in the right directions when giving roll/pitch stick input commands. - diff --git a/zh/config/safety.md b/zh/config/safety.md index 01fb634e3608d..d20100107e7e3 100644 --- a/zh/config/safety.md +++ b/zh/config/safety.md @@ -22,7 +22,7 @@ The list below shows the set of all failsafe actions, ordered in increasing seve | Disarm | Stops the motors immediately. | | [飞行终止](../advanced_config/flight_termination.md) | 关闭所有控制器并将所有 PWM 输出设置为其故障保护值(例如 [PWM_MAIN_FAILn](../advanced_config/parameter_reference.md#PWM_MAIN_FAIL1),[PWM_AUX_FAILn](../advanced_config/parameter_reference.md#PWM_AUX_FAIL1) 等输出)。 故障保护输出可用于启动降落伞、起落架或执行其他操作。 对于固定翼飞行器,这可能允许您将机体滑翔至安全位置。 | -If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](action_land), Land is executed. +If multiple failsafes are triggered, the more severe action is taken. For example if both RC and GPS are lost, and manual control loss is set to [Return mode](#action_return) and GCS link loss to [Land](#action_land), Land is executed. :::tip The exact behavior when different failsafes are triggered can be tested with the [Failsafe State Machine Simulation](safety_simulation.md). @@ -63,19 +63,19 @@ The RC Loss failsafe may be triggered if the RC transmitter link is lost in manu Generally you will only want to set the _Failsafe_ action: - The _RC Lost Timeout_ is the time after data stops updating before the link is considered lost. This must be kept short because the vehicle will continue to fly using the old RC data until the timeout triggers. -- You may need to modify the [COM_RCL_ACT_T](#COM_RCL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. +- You may need to modify the [COM_FAIL_ACT_T](#COM_FAIL_ACT_T) parameter. This is a delay after the link is lost and before the failsafe action is triggered in which the vehicle waits in hold mode for the RC system to reconnect. This might be longer for long-range flights so that intermittent connection loss doesn't immediately invoke the failsafe. It can be to zero so that the failsafe triggers immediately. :::note PX4 and the receiver may also need to be configured in order to *detect RC loss*: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). ::: Additional (and underlying) parameter settings are shown below. -| 设置 | 参数 | 描述 | -| ----------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| 遥控信号丢失超时 | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | -| RC Loss Action Timeout | [COM_RCL_ACT_T](../advanced_config/parameter_reference.md#COM_RCL_ACT_T) | Timeout after RC link loss waiting to recover RC before the failsafe action is triggered. In this stage the vehicle is in hold mode. | -| 故障保护动作 | [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | Disabled, Loiter, Return, Land, Disarm, Terminate. | -| RC Loss Exceptions | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | +| 参数 | 设置 | 描述 | +| ------------------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | 遥控信号丢失超时 | [COM_RC_LOSS_T](../advanced_config/parameter_reference.md#COM_RC_LOSS_T) | Time after RC stops updating supplied data that the RC link is considered lost. | +| [COM_FAIL_ACT_T](../advanced_config/parameter_reference.md#COM_FAIL_ACT_T) | Failsafe Reaction Delay | Delay in seconds between failsafe condition triggered and failsafe reaction (RTL, Land, Hold). | +| [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) | 故障保护动作 | Disabled, Loiter, Return, Land, Disarm, Terminate. | +| [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | RC Loss Exceptions | Set the modes in which RC loss is ignored: Mission (default), Hold, Offboard. | ### 数据链路丢失故障保护 @@ -194,7 +194,6 @@ The relevant parameters are shown below: | 参数 | 描述 | | ---------------------------------------------------------------------------- | --------------------------------------------- | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Offboard 连接中断后到触发故障保护前的延迟。 | -| [COM_OBL_ACT](../advanced_config/parameter_reference.md#COM_OBL_ACT) | 遥控不可用时的故障保护动作:降落模式、保持模式、返航模式。 | | [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | 如果遥控可用,则故障保护动作:定点模式、定高模式、手动模式、返航模式、降落模式、保持模式。 | ### Mission Feasibility Checks @@ -213,22 +212,26 @@ The relevant parameters are shown below: | ------------------------------------------------------------------------------ | ------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | 设置故障保护动作:禁用、警告、返航模式、降落模式。 | -### QuadChute Failsafe +### Quad-chute Failsafe -Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor or control surface failed. If triggered, the vehicle will immediately switch to multicopter mode. If the vehicle was in [Mission mode](../flight_modes/mission.md) it enters failsafe [Return mode](../flight_modes/return.md). +Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps because a pusher motor, airspeed sensor, or control surface, failed. If triggered, the vehicle will immediately switch to multicopter mode and execute action defined in parameter [COM_QC_ACT](#COM_QC_ACT) . :::note -The quadchute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. +The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANSITION](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_VTOL_TRANSITION) message with `param2` set to `1`. ::: -The parameters that control when the quadchute will trigger are listed in the table below. - -| 参数 | 描述 | -| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [VT_FW_ALT_ERR](../advanced_config/parameter_reference.md#VT_FW_ALT_ERR) | 固定翼飞行的最大负高度误差。 如果下降的高度超过该值,使实际高度低于设定高度,则机体将切换回多旋翼模式并执行故障保护返航操作。 | -| [VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude for fixed wing flight. When the altitude drops below this value in fixed wing flight the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Maximum pitch angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | -| [VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Maximum roll angle before QuadChute engages. Above this the vehicle will transition back to MC mode and enter failsafe RTL. | +The parameters that control when the quad-chute will trigger are listed in the table below. + +| 参数 | 描述 | +| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_QC_ACT](../advanced_config/parameter_reference.md#COM_QC_ACT) | Defines automatic action taken after a quad-chute. Can be set to: Warning only, Return, Land, Hold. | +| [VT_FW_QC_HMAX](../advanced_config/parameter_reference.md#VT_FW_QC_HMAX) | Maximum height above the ground (if available, otherwise above home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. | +| [VT_QC_HR_ERROR_I](../advanced_config/parameter_reference.md#VT_QC_HR_ERROR_I) | Quad-chute uncommanded descent threshold. This is the threshold for integrated height rate error to trigger a uncommanded-descent quad-chute. Only checked in altitude-controlled fixed-wing flight. Additional conditions that have to be met for uncommanded descent detection are a positive (climbing) height rate setpoint and a negative (sinking) current height rate estimate. | +| [VT_QC_T_ALT_LOSS](../advanced_config/parameter_reference.md#VT_QC_T_ALT_LOSS) | Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing | + flight. Quad-chute triggers the current altitude is more than this value below the altitude at the beginning of the transition. +[VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT) | Minimum altitude above Home for fixed-wing flight. When the altitude drops below this value in fixed-wing flight the vehicle a quad-chute is triggered. +[VT_FW_QC_R](../advanced_config/parameter_reference.md#VT_FW_QC_R) | Absolute roll threshold for quad-chute triggering in FW mode. +[VT_FW_QC_P](../advanced_config/parameter_reference.md#VT_FW_QC_P) | Absolute pitch threshold for quad-chute triggering in FW mode. ## 故障检测器 diff --git a/zh/config_fw/advanced_tuning_guide_fixedwing.md b/zh/config_fw/advanced_tuning_guide_fixedwing.md index 7857a5cc5bdcf..ea59760352b43 100644 --- a/zh/config_fw/advanced_tuning_guide_fixedwing.md +++ b/zh/config_fw/advanced_tuning_guide_fixedwing.md @@ -60,8 +60,8 @@ L1所有的参数在[此](../advanced_config/parameter_reference.md#fw-l1-contro Specify the target climb and sink rate for autonomous missions by adjusting [FW_T_CLMB_R_SP](../advanced_config/parameter_reference.md#FW_T_CLMB_R_SP) and [FW_T_SINK_R_SP](../advanced_config/parameter_reference.md#FW_T_SINK_R_SP). These specify the height rates at which the vehicle will climb or descend in order to change altitude. Furthermore, these two values define the height rate limits commanded by the user in [Altitude mode](../flight_modes/altitude_fw.md) and [Position mode](../flight_modes/position_fw.md). -### L1控制器调整(位置) +### FW Path Control Tuning (Position) -All L1 parameters are described [here](../advanced_config/parameter_reference.md#fw-l1-control). +All path control parameters are described [here](../advanced_config/parameter_reference.md#fw-path-control). -- [FW_L1_PERIOD](../advanced_config/parameter_reference.md#FW_L1_PERIOD) - 这是 L1 的距离,它定义了需要跟踪的跟踪点。 25米适合大部分飞机。 16-18米仍然可以工作并提供更清晰的响应。 调整期间缓慢缩短,直到响应迅速没有振荡。 +- [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD) - This is the previously called L1 distance and defines the tracking point ahead of the aircraft it's following. A value of 10-20 meters works for most aircraft. 调整期间缓慢缩短,直到响应迅速没有振荡。 Vehicles with a slow roll dynamic should have this value increased. diff --git a/zh/config_fw/trimming_guide_fixedwing.md b/zh/config_fw/trimming_guide_fixedwing.md index 79f0324fb3b2e..595692e3ee166 100644 --- a/zh/config_fw/trimming_guide_fixedwing.md +++ b/zh/config_fw/trimming_guide_fixedwing.md @@ -11,7 +11,7 @@ The [Basic trimming](#basic-trimming) section explains the purpose of each trim There are several parameters an operator might want to use in order to properly trim a fixed-wing aircraft. An overview of those parameters and their use case is shown below: - [RCx_TRIM](../advanced_config/parameter_reference.md#RC1_TRIM) applies trim to the signal received from the RC transmitter. These parameters are set automatically during [RC calibration](../config/radio.md). -- [PWM_MAIN_TRIMx](../advanced_config/parameter_reference.md#PWM_MAIN_TRIM1) applies trim to a PWM channel, after mixing. These are used to finely align the control surfaces to default angles before flying. +- [CA_SV_CSx_TRIM](../advanced_config/parameter_reference.md#CA_SV_CS0_TRIM) applies trim to a control surfaces channel. These are used to finely align the control surfaces to default angles before flying. - [FW_PSP_OFF](../advanced_config/parameter_reference.md#FW_PSP_OFF) applies an offset to the pitch setpoint. This is used to set the angle of attack at which your aircraft needs to fly at cruise speed. - [FW_AIRSPD_TRIM](../advanced_config/parameter_reference.md#FW_AIRSPD_TRIM) is used by the rate controllers to scale their output depending on the measured airspeed. See [Airspeed Scaling](../flight_stack/controller_diagrams.md#airspeed-scaling) for more details. - [TRIM_ROLL](../advanced_config/parameter_reference.md#TRIM_ROLL), [TRIM_PITCH](../advanced_config/parameter_reference.md#TRIM_PITCH) and [TRIM_YAW](../advanced_config/parameter_reference.md#TRIM_YAW) apply trim to the control signals *before* mixing. For example, if you have two servos for the elevator, `TRIM_PITCH` applies trim to both of them. These are used when your control surfaces are aligned but the aircraft pitches/rolls/yaws up/down/left/right during manual (not stabilized) flight or if the control signal has a constant offset during stabilized flight. @@ -26,12 +26,12 @@ Step 3 can be performed before step 2 if you don't want to have to look at the l ## Advanced Trimming -Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve (see figure below) function of airspeed and a pitch trim increment function of the flaps state can be defined using the following parameters: +Given that the downward pitch moment induced by an asymmetric airfoil increases with airspeed and when the flaps are deployed, the aircraft needs to be re-trimmed according to the current measured airspeed and flaps position. For this purpose, a bilinear curve function of airspeed and a pitch trim increment function of the flaps state (see figure below) can be defined using the following parameters: - [FW\_DTRIM\_\[R/P/Y\]_\[VMIN/VMAX\]](../advanced_config/parameter_reference.md#FW_DTRIM_R_VMIN) are the roll/pitch/yaw trim value added to `TRIM_ROLL/PITCH/YAW` at min/max airspeed (defined by [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) and [FW_AIRSPD_MAX](../advanced_config/parameter_reference.md#FW_AIRSPD_MAX)). -- [FW_DTRIM_R_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_R_FLPS) and [FW_DTRIM_P_FLPS](../advanced_config/parameter_reference.md#FW_DTRIM_P_FLPS) are the roll/pitch trim value added to `TRIM_ROLL/PITCH/YAW` when the flaps are deployed. +- [CA_SV_CSx_FLAP](../advanced_config/parameter_reference.md#CA_SV_CS0_FLAP) and [CA_SV_CSx_SPOIL](../advanced_config/parameter_reference.md#CA_SV_CS0_SPOIL) are the trimming values that are applied to these control surfaces if the flaps or the spoilers are fully deployed, respectively. ![Dtrim Curve](../../assets/config/fw/fixedwing_dtrim.png) -A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. +A perfectly symmetrical airframe would only require pitch trim increments, but since a real airframe is never perfectly symmetrical, roll and yaw trims increments are also sometimes required. diff --git a/zh/config_heli/README.md b/zh/config_heli/README.md index c683cc59338f4..f9bccf1fe7c93 100644 --- a/zh/config_heli/README.md +++ b/zh/config_heli/README.md @@ -30,8 +30,7 @@ To setup and configure a helicopter: Actuator setup and testing is covered for most frames in [Actuators](../config/actuators.md). While that is referenced below, this is the main topic for helicopter setup information. ::: - - The geometry for a [Generic Helicopter (with Tail ESC)](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_(tail_esc)) is shown below. + The geometry for a [Generic Helicopter - with Tail ESC](../airframes/airframe_reference.md#copter_helicopter_generic_helicopter_%28tail_esc%29) is shown below. ![Geometry: helicopter](../../assets/config/actuators/qgc_geometry_helicopter.png) diff --git a/zh/config_mc/filter_tuning.md b/zh/config_mc/filter_tuning.md index ab4c2e355900c..8c57444733343 100644 --- a/zh/config_mc/filter_tuning.md +++ b/zh/config_mc/filter_tuning.md @@ -22,7 +22,7 @@ The following factors affect control latency: - PX4 software internals: the sensor signals need to be read in the driver and then pass through the controller to the output driver. - The maximum gyro publication rate (configured with [IMU_GYRO_RATEMAX](../advanced_config/parameter_reference.md#IMU_GYRO_RATEMAX)). A higher rate reduces latency but is computationally intensive/can starve other processes. 4 kHz or higher is only recommended for controllers with STM32H7 processor or newer (2 kHz value is near the limit for less capable processors). - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). To avoid the IO delay, disable [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) and attach the motors to the AUX pins instead. -- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot ([PWM_AUX_RATE=0](../advanced_config/parameter_reference.md#PWM_AUX_RATE) or [PWM_MAIN_RATE=0](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)) to reduce latency. +- PWM output signal: enable [Dshot](../peripherals/dshot.md) or One-Shot to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). Below we look at the impact of the low pass filters. diff --git a/zh/config_mc/pid_tuning_guide_multicopter.md b/zh/config_mc/pid_tuning_guide_multicopter.md index cc9ee544820f1..9d6c19496f061 100644 --- a/zh/config_mc/pid_tuning_guide_multicopter.md +++ b/zh/config_mc/pid_tuning_guide_multicopter.md @@ -170,7 +170,7 @@ The mapping from motor control signals (e.g. PWM) to expected thrust is linear b If you have a [thrust stand](https://www.tytorobotics.com/pages/series-1580-1585) (or can otherwise _measure_ thrust and motor commands simultaneously), you can determine the relationship between the motor control signal and the motor's actual thrust, and fit a function to the data. The motor command in PX4 called `actuator_output` can be PWM, Dshot, UAVCAN commands for the respective ESCs in use. [This Notebook][THR_MDL_FAC_Calculation] shows one way for how the thrust model factor `THR_MDL_FAC` may be calculated from previously measured thrust and PWM data. The curves shown in this plot are parametrized by both α and k, and also show thrust and PWM in real units (kgf and μs). In order to simplify the curve fit problem, you can normalize the data between 0 and 1 to find `k` without having to estimate α (α = 1, when the data is normalized). -[![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)][THR_MDL_FAC_Calculation] +![Thrust Curve Compensation](../../assets/mc_pid_tuning/thrust-curve-compensation.svg)] :::note The mapping between PWM and static thrust depends highly on the battery voltage. @@ -194,20 +194,6 @@ In this example above, the curve seemed to fit best when `THR_MDL_FAC` was set t If you don't have access to a thrust stand, you can also tune the modeling factor empirically. Start off with 0.3 and increase it by 0.1 at a time. If it is too high, you will start to notice oscillations at lower throttle values. If it is too low you'll notice oscillations at higher throttle values. - - ### Airmode & 混控器饱和 @@ -233,5 +219,3 @@ If mixing becomes saturated towards the upper bound the commanded thrust is redu Once your vehicle flies well you can enable Airmode via the [MC_AIRMODE](../advanced_config/parameter_reference.md#MC_AIRMODE) parameter. [THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb - -[THR_MDL_FAC_Calculation]: https://github.com/PX4/PX4-user_guide/blob/main/assets/config/mc/ThrustCurve.ipynb diff --git a/zh/config_mc/pid_tuning_guide_multicopter_basic.md b/zh/config_mc/pid_tuning_guide_multicopter_basic.md index db8e2041b84fd..38796be1e0747 100644 --- a/zh/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/zh/config_mc/pid_tuning_guide_multicopter_basic.md @@ -32,7 +32,7 @@ The testing procedure for each controller (rate, attitude, velocity/posibition) - You have selected the closest matching [default frame configuration](../config/airframe.md) for your vehicle. This should give you a vehicle that already flies. - You should have done an [ESC calibration](../advanced_config/esc_calibration.md). -- If using PWM output: [PWM_MAIN_MIN](../advanced_config/parameter_reference.md#PWM_MAIN_MIN) is set correctly. It needs to be set low, but such that the **motors never stop** when the vehicle is armed. +- If using PWM outputs their minimum values should be set correctly in the [Actuator Configuration](../config/actuators.md#actuator-configuration-and-testing). These need to be set low, but such that the **motors never stop** when the vehicle is armed. This can be tested in [Acro mode](../flight_modes/acro_mc.md) or in [Manual/Stabilized mode](../flight_modes/manual_stabilized_mc.md): - Remove propellers diff --git a/zh/config_mc/racer_setup.md b/zh/config_mc/racer_setup.md index 595a26e0eddf0..7e904fbdf169d 100644 --- a/zh/config_mc/racer_setup.md +++ b/zh/config_mc/racer_setup.md @@ -64,7 +64,7 @@ Go through the [Basic Configuration Guide](../config/README.md). In particular, These parameters are important: -- Enable One-Shot (set [PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE) to 0) or DShot ([DSHOT_CONFIG](../advanced_config/parameter_reference.md#DSHOT_CONFIG)). +- Enable One-Shot or DShot by selecting the protocol for a group of outputs during [Actuator Configuration](../config/actuators.md). - 设置手动/稳定模式的最大滚动、pitch-和 yaw 速率为 所希望: [MC_ROLLRATE_MAX](../advanced_config/parameter_reference.md#MC_ROLLRATE_MAX), [MC_PITCHRATE_MAX](../advanced_config/parameter_reference.md#MC_PITCHRATE_MAX) 和 [MC_YAWRATE_MAX](../advanced_config/parameter_reference.md#MC_YAWRATE_MAX) 最大倾斜角度是用 [MPC_MAN_TILT_MAX](../advanced_config/parameter_reference.md#MPC_MAN_TILT_MAX) 配置的。 - 最小推力 [MPC_MANTHR_MIN](../advanced_config/parameter_reference.md#MPC_MANTHR_MIN) 应该设置为 0。 @@ -108,7 +108,7 @@ It is *crucial* to reduce the control latency as much as possible! A lower laten - [Low-pass filters](../config_mc/filter_tuning.md) in software and on the sensor chip trade off increased latency for improved noise filtering. - PX4 软件内部:传感器信号需要从驱动程序中读取,然后通过控制器传递到输出驱动器。 - The IO chip (MAIN pins) adds about 5.4 ms latency compared to using the AUX pins (this does not apply to a *Pixracer* or *Omnibus F4*, but does apply to a Pixhawk). 要避免IO 延迟,请禁用 [SYS_USE_IO](../advanced_config/parameter_reference.md#SYS_USE_IO) 并将电机连接到 AUX 引脚。 -- PWM output signal: enable One-Shot to reduce latency ([PWM_MAIN_RATE](../advanced_config/parameter_reference.md#PWM_MAIN_RATE)=0). +- PWM output signal: enable the One-Shot protocol to reduce latency. The protocol is selected for a group of outputs during [Actuator Configuration](../config/actuators.md). ### Filter Tuning diff --git a/zh/config_vtol/vtol_back_transition_tuning.md b/zh/config_vtol/vtol_back_transition_tuning.md index 0dd0a3b796018..1adff77c23b7c 100644 --- a/zh/config_vtol/vtol_back_transition_tuning.md +++ b/zh/config_vtol/vtol_back_transition_tuning.md @@ -1,56 +1,13 @@ # VTOL 后转换调参 -When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. As of PX4 version 1.7, and on the current developer branch, the vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). +When a VTOL performs a back-transition (transition from fixed wing mode to multicopter) it needs to slow down before the multicopter can take proper control. To help with braking, the controller will pitch up the vehicle if the current deceleration is below what is set in expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)). The response of this deceleration controller can be tuned through a `FF` and a `I` gain: [VT_B_DEC_FF](../advanced_config/parameter_reference.md#VT_B_DEC_FF), [VT_B_DEC_I](../advanced_config/parameter_reference.md#VT_B_DEC_I). Usually leaving the `FF` at 0 and increasing the `I` if required yields the best results. -## 后转换持续时间 - -Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. +The vehicle will consider the back-transition complete when the horizontal speed has reached multicopter cruise speed ([MPC_XY_CRUISE](../advanced_config/parameter_reference.md#MPC_XY_CRUISE)) or when the back-transition duration ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) has passed (whichever comes first). ## 设置期望的减速加速度 -When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. - -## 应用空气制动 - -If your vehicle is equipped with airbrakes, and your selected airframe supports them (in code), you can set the airbrake position during back-transition in [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT). The values scale from 0 to 1, so a value of 0.7 equals 70% output. - -## 用固定翼电机进行反向推力 - -To get the shortest possible back-transition, PX4 supports active breaking by reversing the fixed wing motor direction. To use this feature you will require an ESC that supports motor rotation reversing. - -:::note -A typical fixed wing propeller is not optimized to spin in reverse, when the throttle during reverse thrust is set too high the propeller can stall. -::: - -Generally there are 2 ways a reverse-capable ESC can implement reverse thrust. - - -### 用油门缩放功能 +When flying missions that make use of a [VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND) waypoint, the autopilot will attempt to calculate the proper distance at which to initiate the back-transition. It does this by looking at the current velocity (comparable to ground speed) and the expected deceleration. To get the vehicle to come out of back-transition very close to its landing point you can tune the expected deceleration ([VT_B_DEC_MSS](../advanced_config/parameter_reference.md#VT_B_DEC_MSS)) parameter. Make sure you have a large enough back-transition duration to allow the vehicle to reach its intended position before this timeout kicks in. -Normally the throttle stick is used purely for forward thrust. - -3D ESCs assume 0 thrust at 50% throttle, positive (forward) thrust above 50% and negative thrust (reverse) below 50%. The airframe can be modified to implement this behaviour *only* during back transition, allowing reverse thrust to be applied during the transition. - -:::warning -Support for 3D throttle scaling during back-transition requires *code support* in the airframe. -::: - -The amount of negative thrust during back transition can then be configured using the [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) parameter (set to a negative value between 0 and -1). - - -### 用一个通道来控制 - -ESCs that use a separate control channel to control the motor direction (e.g. [Hobbywing Platinum series](https://www.hobbywing.com/category.php?id=76&filter_attr=.0)) can use the airbrakes channel to apply reverse thrust during back-transition. - -Airframes that have been configured to support this behavior (like the DeltaQuad airframe) can be configured to do so by setting both [VT_B_REV_OUT](../advanced_config/parameter_reference.md#VT_B_REV_OUT) to 1 and [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) to the desired throttle level to apply for active breaking. The values scale from 0 to 1, so a value of 0.7 equals 70% throttle. - -## 典型设置 - -An example of a setup that employs most features listed above would be the following: +## 后转换持续时间 -- 机型: 任何支持反向推力的VTOL机型 (例如 DeltaQuad) -- 电调: 支持推力反向的固定翼电调(例如 Hobbywing Platinum Pro 60A) -- 估计减速加速度 (单位m/s/s) `VT_B_DEC_MSS`: 2.5 -- 后转换持续时间,(单位是秒) `VT_B_TRANS_DUR`: 10 -- 激活后转换的推力反向控制通道 `VT_B_REV_OUT`: 1.0 -- 在推力反向时使用70%的推力 `VT_B_TRANS_THR`: 0.7 +Setting a high back-transition time ([VT_B_TRANS_DUR](../advanced_config/parameter_reference.md#VT_B_TRANS_DUR)) will give the vehicle more time to slow down. During this period the VTOL will shut down its fixed wing motor and slowly ramp up its MC motors while gliding. The higher this time is set the longer the vehicle will glide in an attempt to slow down. The caveat of this behavior is that the vehicle will only control altitude and not position during this period, so some drift can occur. diff --git a/zh/config_vtol/vtol_quad_configuration.md b/zh/config_vtol/vtol_quad_configuration.md index 6d61d67a518f8..bcb14fbc7a582 100644 --- a/zh/config_vtol/vtol_quad_configuration.md +++ b/zh/config_vtol/vtol_quad_configuration.md @@ -1,12 +1,16 @@ -# QuadPlane VTOL 配置 & 调参 +# Generic Standard VTOL (QuadPlane) Configuration & Tuning -这是一份垂直起降固定翼飞行器的的配置文档(固定翼+四旋翼)。 对于具体的机型和构建指南请看[VTOL Framebuilds](../frames_vtol/README.md)。 +This is the configuration documentation for a [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), also known as a "QuadPlane VTOL". This is essentially a fixed wing vehicle with the addition of quadcopter motors. + +对于具体的机型和构建指南请看[VTOL Framebuilds](../frames_vtol/README.md)。 ## 固件 & 基础设置 1. Run *QGroundControl* -2. 刷固件 -3. 再启动界面选择合适的VTOL机型,如果你的机型没有列出的话,请选择Fun Cub VTOL机型。 +2. Flash the firmware for your current release or master (PX4 `main` branch build). +3. In the [Frame setup](../config/airframe.md) section select the appropriate VTOL airframe. + + If your airframe is not listed select the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) frame. ### 飞行模式/模式转换 @@ -45,10 +49,6 @@ Front transition throttle defines the target throttle for the pusher/puller moto This must be set high enough to ensure that the transition airspeed is reached. If your vehicle is equipped with an airspeed sensor then you can increase this parameter to make the front transition complete faster. For your first transition you are better off setting the value higher than lower. -Parameter: [VT_B_TRANS_THR](../advanced_config/parameter_reference.md#VT_B_TRANS_THR) - -Generally back-transition throttle can be set to 0 since forward thrust is not (in most cases) desirable. If the motor controller supports reverse thrust however, you can achieve this by setting a negative value. - #### Forward Transition Pusher/Puller Slew Rate Parameter: [VT_PSHER_SLEW](../advanced_config/parameter_reference.md#VT_PSHER_SLEW) @@ -122,4 +122,4 @@ When transitioning from **fixed wing to multirotor** for this type of VTOL the ### 技术支持 -If you have any questions regarding your VTOL conversion or configuration please see [https://discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). +If you have any questions regarding your VTOL conversion or configuration please see [discuss.px4.io/c/px4/vtol](https://discuss.px4.io/c/px4/vtol). diff --git a/zh/config_vtol/vtol_without_airspeed_sensor.md b/zh/config_vtol/vtol_without_airspeed_sensor.md index 1d37ea4bccbd5..c65b9b1b62113 100644 --- a/zh/config_vtol/vtol_without_airspeed_sensor.md +++ b/zh/config_vtol/vtol_without_airspeed_sensor.md @@ -45,13 +45,17 @@ Set the minimum front transition time ([VT_TRANS_MIN_TM](../advanced_config/para ### Optional Recommended Parameters -Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'QuadChute' ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. +Because the risk of stalling is real, it is recommended to set the 'fixed wing minimum altitude' aka 'quad-chute' threshold ([VT_FW_MIN_ALT](../advanced_config/parameter_reference.md#VT_FW_MIN_ALT)). + +This will cause the VTOL to transition back to multicopter mode and initiate the [Return mode](../flight_modes/return.md) below a certain altitude. You could set this to 15 or 20 meters to give the multicopter time to recover from a stall. The position estimator tested for this mode is EKF2, you can set this by changing the [SYS_MC_EST_GROUP](../advanced_config/parameter_reference.md#SYS_MC_EST_GROUP). ## First Flight Without Airspeed Sensor -The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the QuadChute threshold. Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: +The values apply to a position controlled flight (like [Hold mode](../flight_modes/hold.md) or [Mission mode](../flight_modes/mission.md) or Mission mode). It is therefore recommended that a mission is configured at a safe altitude, approximately 10m above the quad-chute threshold. + +Like for the reference flight, this flight should be performed in very low wind conditions. For the first flight the following is recommended: - Stay at one altitude - Set the waypoints wide enough and in such a fashion that no sharp turns are required diff --git a/zh/contribute/code.md b/zh/contribute/code.md index d6be810955ce0..96d5b1714228e 100644 --- a/zh/contribute/code.md +++ b/zh/contribute/code.md @@ -4,7 +4,7 @@ PX4 项目使用三分支 Git 模型: -* [master](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. +* [main](https://github.com/PX4/PX4-Autopilot/tree/main) is by default unstable and sees rapid development. * [beta](https://github.com/PX4/PX4-Autopilot/tree/beta) 经过全面测试。 它是供飞行测试人员使用的。 * [stable](https://github.com/PX4/PX4-Autopilot/tree/stable) 是最新发行版本。 diff --git a/zh/contribute/dev_call.md b/zh/contribute/dev_call.md index fba120a919208..1c23d3ffeb993 100644 --- a/zh/contribute/dev_call.md +++ b/zh/contribute/dev_call.md @@ -1,12 +1,11 @@ -# 每周开发通讯 +# Weekly Community Q&A Call (Previously "Dev Call")

          This page may be out of date

          .

          The latest version can be found here.

          -PX4开发团队会深入分析技术细节并同步到平台上。 在议程中,为重大影响的回拉请求,给与回答。 - +The PX4 dev team and community come together to discuss any topic of interest to the community, ranging from sorting out issues to satisfying your curiosity. ## 谁应该注意以下几点: @@ -14,29 +13,20 @@ PX4开发团队会深入分析技术细节并同步到平台上。 在议程中 * 组件维护者 * 测试团队负责人 * 无人机编码成员 -* 社区成员 +* Community members (you!) :::tip -The dev call is open to all interested developers (not just the core dev team). +The Community Q&A call is open to all interested community members. + This is a great opportunity to meet the team and contribute to the ongoing development of the platform. ::: ## 讨论什么内容? -The first/main part of the meeting runs for 45 minutes and provides a high-level forum to discuss where the project is going. - -会议的第二部分是对开发性问题和有深度的技术做些探究。 核心团队或者子系统维护者将会有额外的45分钟用来探究 - -:::note -The main call is designed to support rapid/focused decision making. We don't expect deep technical discussions and we will not spend extended amounts of time on feature requests. Proposals are welcome, but they need a sponsor (someone willing to *implement* the work)! -::: - -The second part of the meeting is for in-depth technical discussions and open ended questions. The core team/subsystem maintainers will be available for up to 45 additional minutes. +We publish a forum post per meeting a week before the call on [PX4 Discuss - weekly-dev-call](https://discuss.px4.io/c/weekly-dev-call) and track the agenda write down the discussion for the day. We welcome any topics that you, as a community member may have questions about / want to discuss! +Please add your topics for discussion to the agenda before the meeting begins, by replying to the meeting note. This will help you formulate your questions more clearly, and allow us to think about them in advance. ## 日程 -* 时间: 欧洲中部时间周二17:00, 东部标准时间12:00, 太平洋标准时间9:00 \([订阅日历](https://www.dronecode.org/calendar/)\) -* **加入通讯**:https://meet.jit.si/PX4DeveloperCallWeekly - -* 议程在[PX4 Discuss - weekly-dev-call](http://discuss.px4.io/c/weekly-dev-call)之前发布 -* To nominate Issues and PRs for the call you can use the [Dev Call](https://github.com/PX4/PX4-Autopilot/labels/Dev%20Call) label to flag them for discussion. +* TIME: Wednesday 17h00 CET ([subscribe to calendar](https://www.dronecode.org/calendar/)) +* **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) diff --git a/zh/debug/simulation_debugging.md b/zh/debug/simulation_debugging.md index a215be477b8b4..19b2b013c8d2d 100644 --- a/zh/debug/simulation_debugging.md +++ b/zh/debug/simulation_debugging.md @@ -30,21 +30,24 @@ make px4_sitl_default # 通过 cmake 配置 make -C build/px4_sitl_default jmavsim___gdb ``` -## 开始组合 +## Launch Gazebo Classic SITL Without Debugger -SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo Classic as simulation backend. 这将生成以下开始选项: +By default SITL is launched without a debugger attached when using any simulator backend: ```sh +make px4_sitl_default gz +make px4_sitl_default gazebo-classic make px4_sitl_default jmavsim -make px4_sitl_default jmavsim___gdb -make px4_sitl_default jmavsim___lldb +``` -make px4_sitl_default gazebo-classic -make px4_sitl_default gazebo-classic___gdb -make px4_sitl_default gazebo-classic___lldb +For Gazebo Classic (only) you can also start the simulator with a debugger attached. Note however, that you must provide the vehicle type in the simulator target, as shown below: + +```bash +make px4_sitl_default gazebo-classic_iris_gdb +make px4_sitl_default gazebo-classic_iris_lldb ``` -where the last parameter is the <viewer\_model\_debugger> triplet (using three underscores implies the default 'iris' model). This will start the debugger and launch the SITL application. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: 这将启动调试器并启动 SITL 应用程序。 In order to break into the debugger shell and halt the execution, hit `CTRL-C`: +This will start the debugger and launch the SITL application with Gazebo and the Iris simulator. In order to break into the debugger shell and halt the execution, hit `CTRL-C`: ```sh Process 16529 stopped @@ -75,14 +78,14 @@ In order to not have the DriverFrameworks scheduling interfere with the debuggin 最后一个参数, 三元组,实际上是传递到生成目录中,因此 ```sh -make px4_sitl_default jmavsim___gdb +make px4_sitl_default gazebo-classic_iris_gdb ``` 等价于 ```sh -make px4_sitl_default # 通过 cmake 配置 -make -C build/px4_sitl_default jmavsim___gdb +make px4_sitl_default # Configure with cmake +make -C build/px4_sitl_default classic_iris_gdb ``` A full list of the available make targets in the build directory can be obtained with: @@ -91,15 +94,81 @@ A full list of the available make targets in the build directory can be obtained make help ``` -It is possible to suppress compiler optimization for given executables and/or modules (as added by cmake with `add_executable` or `add_library`) when configuring for `posix_sitl_*`. This can be handy when it is necessary to step through code with a debugger or print variables that would otherwise be optimized out. +## Attaching GDB to running SITL -```sh -make list_vmd_make_targets -``` +You can also start your simulation, and _then_ attach `gdb`: + +1. In one terminal screen enter the command to start your simulation: + + ```bash + make px4_sitl_default gazebo-classic + ``` + + As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. It will list the location of your px4 bin file for later use. + + ```bash + SITL COMMAND: "" ""/etc + + ______ __ __ ___ + | ___ \ \ \ / / / | + | |_/ / \ V / / /| | + | __/ / \ / /_| | + | | / /^\ \ \___ | + \_| \/ \/ |_/ + + px4 starting. + + INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 + INFO [init] found model autostart file as SYS_AUTOSTART=10015 + ``` +2. Open another terminal and type: + + ```bash + ps -a + ``` + + You will want to note the PID of the process named "PX4" + + (In this example it is 14149) + + ```bash + atlas:~/px4/main/PX4-Autopilot$ ps -a + PID TTY TIME CMD + 1796 tty2 00:01:59 Xorg + 1836 tty2 00:00:00 gnome-session-b + 14027 pts/1 00:00:00 make + 14077 pts/1 00:00:00 sh + 14078 pts/1 00:00:00 cmake + 14079 pts/1 00:00:00 ninja + 14090 pts/1 00:00:00 sh + 14091 pts/1 00:00:00 bash + 14095 pts/1 00:01:23 gzserver + 14149 pts/1 00:02:48 px4 + 14808 pts/2 00:00:00 ps + ``` +3. Then type in the same window + + ```bash + sudo gdb [px4 bin file path (from step 1) here] + ``` + + would suppress optimization of the targets: platforms*\_posix**px4\_layer, modules**systemlib, modules**uORB, examples**px4\_simple\_app, modules**uORB*\_uORB\_tests and px4. + + ```bash + sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4 + ``` + + Now, you can attach to the PX4 instance by entering the PID noted in step 2. + + ```bash + attach [PID on px4] + ``` + + You should now have a GDB interface to debug with. ## 编译器优化 -配置 `posix_sitl_*`时,对可执行文件和/或模块进行优化编译器选项(比如用 cmake 添加`add_executable` 或 `add_library` ),是种可以采取的手段。 当需要使用调试器或打印变量逐步执行代码时,这将非常方便,否则这些变量将被优化。 +It is possible to suppress compiler optimization for given executables and/or modules (as added by cmake with `add_executable` or `add_library`) when configuring for `posix_sitl_*`. This can be handy when it is necessary to step through code with a debugger or print variables that would otherwise be optimized out. To do so, set the environment variable `PX4_NO_OPTIMIZATION` to be a semi-colon separated list of regular expressions that match the targets that need to be compiled without optimization. This environment variable is ignored when the configuration isn't `posix_sitl_*`. @@ -111,7 +180,7 @@ export PX4_NO_OPTIMIZATION='px4;^modules__uORB;^modules__systemlib$' The targets that can be matched with these regular expressions can be printed with the command: -可以与这些正则表达式匹配的目标可以用命令打印想出来: +The targets that can be matched with these regular expressions can be printed with the command: ```sh make -C build/posix_sitl_* list_cmake_targets diff --git a/zh/debug/swd_debug.md b/zh/debug/swd_debug.md index 68999089de40f..92979da23580b 100644 --- a/zh/debug/swd_debug.md +++ b/zh/debug/swd_debug.md @@ -35,7 +35,7 @@ This connector may come with your flight controller or debug probe. Other option ### Holybro Pixhawk Debug Adapter -The [Holybro Pixhawk Debug Adapter](https://shop.holybro.com/pixhawk-debug-adapter_p1318.html) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. +The [Holybro Pixhawk Debug Adapter](https://holybro.com/products/pixhawk-debug-adapter) is _highly recommended_ when debugging controllers that use one of the Pixhawk-standard debug connectors. It is the easiest way to connect: - Flight controllers that use either the [Pixhawk Debug Full](#pixhawk_debug_port_10_pin_sh) (10-pin SH) or [Pixhawk Debug Mini](#pixhawk-debug-mini-6-pin-sh-debug-port) (6-pin SH) debug port, and diff --git a/zh/debug/system_wide_replay.md b/zh/debug/system_wide_replay.md index cc3606c8847a9..6e01c36324e22 100644 --- a/zh/debug/system_wide_replay.md +++ b/zh/debug/system_wide_replay.md @@ -10,7 +10,7 @@ The first thing that needs to be done is to identify the module or modules that All identified topics need to be logged at full rate (see [logging](../log/logging.md)). For `ekf2` this is already the case with the default set of logged topics. For `ekf2` this is already the case with the default set of logged topics. -It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/Firmware/blob/master/msg/sensor_combined.msg). Reasons for this are given below. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/sensor_combined.msg). 造成这种情况的原因如下。 +It is important that all replayed topics contain only a single absolute timestamp, which is the automatically generated field `timestamp`. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [sensor_combined.msg](https://github.com/PX4/Firmware/blob/master/msg/sensor_combined.msg). Reasons for this are given below. Should there be more timestamps, then they must be relative with respect to the main timestamp. For an example, see [SensorCombined.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg). 造成这种情况的原因如下。 ## 用法 diff --git a/zh/dev_airframes/README.md b/zh/dev_airframes/README.md index 52b9bc0393123..770571fff55d1 100644 --- a/zh/dev_airframes/README.md +++ b/zh/dev_airframes/README.md @@ -1,6 +1,6 @@ # 机架 -PX4有一个灵活的[混合系统](../concept/mixing.md), 它允许通过单个代码库支持任何可以想象到的飞行器类型/帧: +PX4 has a flexible [control allocation system](../concept/control_allocation.md) that allows it to support almost any imaginable vehicle type/frame through a single codebase: * **固定翼飞机:**普通飞机, 飞翼, 倒V尾飞机等。 * **多旋翼:**直升机,三轴,四轴,六轴,dodecarotors等许多不同的几何图形。 diff --git a/zh/dev_airframes/adding_a_new_frame.md b/zh/dev_airframes/adding_a_new_frame.md index 5bad6c4d6f434..8176040e03c45 100644 --- a/zh/dev_airframes/adding_a_new_frame.md +++ b/zh/dev_airframes/adding_a_new_frame.md @@ -18,7 +18,7 @@ You can also "tweak" the current frame configuration using text files on the SD The recommended process for developing a new frame configuration is: 1. Start by selecting an appropriate "generic configuration" for the target vehicle type in QGC, such as _Generic Quadcopter_. -1. Configure the [geometry and actuator outputs](.../config/actuators.md). +1. Configure the [geometry and actuator outputs](../config/actuators.md). 1. Perform other [basic configuration](../config/README.md). 1. Tune the vehicle. 1. Run the [`param show-for-airframe`](../modules/modules_command.md#param) console command to list the parameter difference compared to the original generic airfame. @@ -149,7 +149,7 @@ param set-default BAT1_N_CELLS 6 param set-default FW_AIRSPD_MAX 30 param set-default FW_AIRSPD_MIN 19 param set-default FW_AIRSPD_TRIM 23 -param set-default FW_L1_R_SLEW_MAX 40 +param set-default FW_PN_R_SLEW_MAX 40 param set-default FW_PSP_OFF 3 param set-default FW_P_LIM_MAX 18 param set-default FW_P_LIM_MIN -25 @@ -205,12 +205,12 @@ param set-default VT_B_TRANS_DUR 12 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_FWD_THRUST_SC 1.2 param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_RMP_DT 2 +param set-default VT_PSHER_SLEW 0.5 param set-default VT_TRANS_MIN_TM 4 param set-default VT_TYPE 2 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and acutators. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. ```bash param set-default CA_AIRFRAME 2 diff --git a/zh/dev_log/ulog_file_format.md b/zh/dev_log/ulog_file_format.md index 32a3b44e933e4..bcdc3530bc3ef 100644 --- a/zh/dev_log/ulog_file_format.md +++ b/zh/dev_log/ulog_file_format.md @@ -466,7 +466,6 @@ Since the Definitions and Data Sections use the same message header format, they - [hardfault_log module](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log): append hardfault crash data. - [pyulog](https://github.com/PX4/pyulog):Python,使用 CLI 脚本的 Ulog 解析库。 - [FlightPlot](https://github.com/PX4/FlightPlot): Java,日志绘图仪。 -- [pyFlightAnalysis](https://github.com/Marxlp/pyFlightAnalysis):Python,日志绘图仪和基于 pyulog 的三维可视化工具。 - [MAVLink](https://github.com/mavlink/mavlink):通过 MAVLink 进行 ULog 流的消息 (注意,不支持追加数据,至少不支持截断消息)。 - [QGroundControl](https://github.com/mavlink/qgroundcontrol):C++,通过 MAVLink 的 Ulog 流和最小的 GeoTagging。 - [mavlink-router](https://github.com/01org/mavlink-router):C++,通过 MAVLink 的 ULog 流。 diff --git a/zh/dev_setup/_gcc_toolchain_installation.md b/zh/dev_setup/_gcc_toolchain_installation.md deleted file mode 100644 index 8fe1c0a646e6d..0000000000000 --- a/zh/dev_setup/_gcc_toolchain_installation.md +++ /dev/null @@ -1,35 +0,0 @@ - - -执行下面的脚本以安装 GCC 7-2017-q4: - -```sh -pushd . -pushd . -cd ~ -wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -tar -jxf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2017-q4-major/bin:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -popd -``` - -现在重启你的机器。 - - -**故障处理** - -通过输入如下命令检查版本: - -```sh -arm-none-eabi-gcc --version -``` - -输出应该像是这样的: - -```sh -arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] -Copyright (C) 2017 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` diff --git a/zh/dev_setup/_ninja_build_system.md b/zh/dev_setup/_ninja_build_system.md deleted file mode 100644 index 0db904a0300ca..0000000000000 --- a/zh/dev_setup/_ninja_build_system.md +++ /dev/null @@ -1,22 +0,0 @@ -## Ninja 构建系统 - -[Ninja](https://ninja-build.org/) is a faster build system than *Make* and the PX4 *CMake* generators support it. - -在 Ubuntu Linux 上你从软件仓库中自动安装该构建系统。 - -```sh -sudo apt-get install ninja-build -y -``` - -Other systems may not include Ninja in the package manager. In this case an alternative is to download the binary and add it to your path: 这种情况下你可以下载二进制文件然后将其加入操作系统的环境变量中: - -```sh -mkdir -p $HOME/ninja -cd $HOME/ninja -wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip -unzip ninja-linux.zip -rm ninja-linux.zip -exportline="export PATH=$HOME/ninja:\$PATH" -if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi -. ~/.profile ~/.profile -``` diff --git a/zh/dev_setup/building_px4.md b/zh/dev_setup/building_px4.md index 8a1ed93165d18..c862cce1ac387 100644 --- a/zh/dev_setup/building_px4.md +++ b/zh/dev_setup/building_px4.md @@ -13,9 +13,7 @@ The PX4 source code is stored on Github in the [PX4/PX4-Autopilot](https://githu To get the *very latest* ("main") version onto your computer, enter the following command into a terminal: ```sh -git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty \ - && cd /tmp/bloaty && cmake -GNinja . && ninja bloaty && cp bloaty /usr/local/bin/ \ - && rm -rf /tmp/* +git clone https://github.com/PX4/PX4-Autopilot.git --recursive ``` :::note diff --git a/zh/dev_setup/dev_env.md b/zh/dev_setup/dev_env.md index 376e6bfc8bb16..c75fe669b2f13 100644 --- a/zh/dev_setup/dev_env.md +++ b/zh/dev_setup/dev_env.md @@ -10,15 +10,15 @@ The *supported platforms* for PX4 development are: 下表显示了您可以在每个操作系统上构建何种 PX平台的固件编译。 -| 平台 | Linux (Ubuntu) | Mac | Windows | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| -| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md), [Intel® Aero Ready to Fly Drone](../complete_vehicles/intel_aero.md) | X | X | X | -| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | X | | | -| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | X | ✓ | ✓ | -| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | X | X | X | -| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | X | X | X | -| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | X | | | -| **Simulation:** ROS2 with Gazebo | X | | | +| 平台 | Linux (Ubuntu) | Mac | Windows | +| ----------------------------------------------------------------------------------------------------------------------------------- |:--------------:|:-------:|:-------:| +| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles/crazyflie2.md) | X | X | X | +| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | X | | | +| **Simulation:** [jMAVSim SITL](../simulation/jmavsim.md) | X | ✓ | ✓ | +| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/README.md) | X | X | X | +| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/README.md) | X | X | X | +| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | X | | | +| **Simulation:** ROS 2 with Gazebo | X | | | 不同操作系统的开发环境的安装请参阅: diff --git a/zh/dev_setup/dev_env_linux_ubuntu.md b/zh/dev_setup/dev_env_linux_ubuntu.md index d2e14743727d3..5dc48c1929cc3 100644 --- a/zh/dev_setup/dev_env_linux_ubuntu.md +++ b/zh/dev_setup/dev_env_linux_ubuntu.md @@ -172,7 +172,7 @@ You will need to install the normal development [simulator environment](#simulat ## ROS/Gazebo Classic -This section explains how to install [ROS1](../ros/README.md) with PX4. ROS1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! +This section explains how to install [ROS 1](../ros/README.md) with PX4. ROS 1 full desktop builds come with Gazebo Classic, so normally you will not install PX4 simulator dependencies yourself! ### ROS Noetic/Ubuntu 20.04 diff --git a/zh/dev_setup/dev_env_mac.md b/zh/dev_setup/dev_env_mac.md index 4b463f44af00b..96ea2e56c37d6 100644 --- a/zh/dev_setup/dev_env_mac.md +++ b/zh/dev_setup/dev_env_mac.md @@ -30,9 +30,9 @@ The installation of Homebrew is quick and easy: [installation instructions](http ## Enable more open files (Handle "LD: too many open files" error) -Create the `~/.zshenv` file or append it (by running `open ~/.zshenv` on the terminal) and add this line: +Append the line `ulimit -S -n 2048` to the end of the `~/.zshenv` file (creating it if necessary): ```sh -ulimit -S -n 2048 +echo ulimit -S -n 2048 >> ~/.zshenv ``` ## Enforce Python Version diff --git a/zh/dev_setup/dev_env_windows_vm.md b/zh/dev_setup/dev_env_windows_vm.md index 04da6e42c3cf4..ba6738b9021b4 100644 --- a/zh/dev_setup/dev_env_windows_vm.md +++ b/zh/dev_setup/dev_env_windows_vm.md @@ -4,16 +4,19 @@ Windows 平台开发者可以在运行Linux的虚拟机中运行 PX4 工具链 Windows developers can run the PX4 toolchain in a virtual machine (VM) with Linux as the guest operating system. After setting up the virtual machine, the installation and setup of PX4 within the VM is exactly the same as on a native Linux computer. -有很多种方法在你的系统上设定一个可以运行 PX4 开发环境的虚拟机。 本指南将引导你使用 VMWare 完成虚拟机的设置。 - While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: + 1. 固件的编译速度比原生 Linux 要更慢一些。 -1. JMAVSim 的帧率比原生 Linux 要低得多。 虚拟机运行资源不足可能导致特定情况下无人机坠毁。 +1. The JMAVSim simulation, frame rate be much slower than on native Linux. 虚拟机运行资源不足可能导致特定情况下无人机坠毁。 1. 可以安装 Gazebo 和 ROS,但运行速度非常慢。 -## 操作说明 +有很多种方法在你的系统上设定一个可以运行 PX4 开发环境的虚拟机。 本指南将引导你使用 VMWare 完成虚拟机的设置。 + +There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. There is also an incomplete section for VirtualBox at the end (we'd welcome expansion of this section from a community member). -There are multiple ways to setup a VM which is capable of executing the PX4 environment on your system. This guide walks you through a VMWare setup. VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. +## VMWare Setup + +VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. 1. 下载 [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html)。 1. 将其安装在 Windows 系统上。 @@ -30,9 +33,45 @@ We recommend this is done before installing Linux in the virtual environment. 1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. 1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. 1. Once the new VM is booted up make sure you install *VMWare tools drivers and tools extension* inside your guest system. This will enhance performance and usability of your VM usage: - * Significantly enhanced graphics performance - * Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - * Guest display resolution adaption to the window size - * Clipboard sharing to host system - * File sharing to host system + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system 1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + +## VirtualBox 7 Setup + +The setup for VirtualBox is similar to VMWare. Community members, we'd welcome a step-by-step guide here! + +### USB passthrough for QGroundControl / Firmware Flashing + +:::tip +This section has been tested for VirtualBox 7 running Ubuntu 20.04 LTS on a Windows 10 host machine. 本指南将引导你使用 VMWare 完成虚拟机的设置。 + +One limitation of virtual machines is that you can't automatically connect to a flight controller attached to the host computer USB port in order to [build and upload PX4 firmware from a terminal](../dev_setup/building_px4.md#uploading-firmware-flashing-the-board). You also can't connect to the flight controller from QGroundControl in the virtual machine. + +To allow this, you need to configure USB passthrough settings: + +1. Ensure that the user has been added to the dialout group in the VM using the terminal command: + + ``` + sudo usermod -a -G dialout $USER + ``` + Then restart Ubuntu in the virtual machine. +1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +1. Enable USB controller in VM: **VirtualBox > Settings > USB** +1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. + - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. + +:::note +The bootloader device only appears for a few seconds after connecting USB. If it disappears before you can select it, disconnect and then reconnect USB. 本指南将引导你使用 VMWare 完成虚拟机的设置。 + + - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). +1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** + +If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: + +``` +make px4_fmu-v5_default upload +``` diff --git a/zh/dev_setup/fast-dds-installation.md b/zh/dev_setup/fast-dds-installation.md deleted file mode 100644 index e98cc2036b90c..0000000000000 --- a/zh/dev_setup/fast-dds-installation.md +++ /dev/null @@ -1,138 +0,0 @@ -# Fast DDS Installation - -logo [eProsima Fast DDS](https://github.com/eProsima/Fast-DDS) is a C++ implementation of the Object Management Group's (OMG) Data Distribution Service (DDS) specification and the Real Time Publish Subscribe (RTPS) protocol. - -Fast DDS enables an RTPS/DDS interface that allows PX4 uORB topics to be shared with offboard components that participate in same DDS domain, including robotics and simulator tools. In particular, Fast DDS is the default middleware implementation for Robot Operating System 2 (ROS 2), and is essential for integrating PX4 with ROS2. - -This topic explains how to install Fast DDS and *Fast-RTPS-Gen* to use in the PX4 build system and with the microRTPS bridge. - -:::note -You do not have to install Fast DDS if you have ROS 2 Dashing (Ubuntu 18.04) or ROS 2 Foxy (Ubuntu 20.04) installed, as it comes included with the default `base` or `desktop` installations through the `ros--rmw-fastrtps` package. This means you just need to install *Fast-RTPS-Gen* and have your ROS 2 environment sourced (`source /opt/ros//setup.bash`) in order to be able to compile the `rtps` targets in the PX4-Autopilot repo. - -For *ROS2 Galactic and above*, one has to install the `rmw` implementation through `apt` using `apt install ros-galactic-rmw-fastrtps`, since the default middleware for Galactic and above is CycloneDDS and the FastDDS middleware doesn't come installed by default. -::: - -:::tip -Fast DDS is not an essential component of the PX4 Autopilot and should only be installed if you plan to interface the PX4 Autopilot with Fast RTPS/DDS participants. -ROS 2 nodes are an example of these, though Fast DDS middleware and C++ implementations are installed by default on ROS 2 Foxy and below, as mentioned above. -::: - -:::note -Fast DDS was previously named FastRTPS (the name was changed in version 2.0.0 as it now includes a full DDS implementation, rather than just the RTPS wire protocol). -::: - - -## Prerequisites - -*eProsima Fast DDS* requires the following packages to work. - -:::note -At time of writing you will need to install *from source* for: -- **Ubuntu 18.04:** Fast RTPS 1.8.4 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -- **Ubuntu 20.04:** Fast DDS 2.0.2 (or later) and Fast-RTPS-Gen 1.0.4 (not later!). -::: - -:::tip -Remember (again) you only need to install Fast DDS if you are not using ROS 2 and just want to leverage non-ROS2 DDS networks and applications. If you have ROS 2 installed (and `rmw-fasrtps` as its default middleware), you can skip to [Fast-RTPS-Gen build and install](#fast-rtps-gen). -::: - -### Java - -Java is required to build and use eProsima's RTPS/DDS from IDL code generation tool - *Fast-RTPS-Gen*. [Java JDK 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html) is recommended, and it is installed through the setup scripts made available in [Ubuntu Development Environment](../dev_setup/dev_env_linux.md). - -### Foonathan memory - -In order to build Fast DDS you need to install the Foonathan Memory dependency. - -```sh -git clone https://github.com/eProsima/foonathan_memory_vendor.git -cd foonathan_memory_vendor -mkdir build && cd build -cmake .. -cmake --build . --target install -``` - -:::note -If the last step fails, try running the command with the proper user privileges (`sudo`). -::: - - -## Installation from Sources - -### Fast DDS - -Clone the project from Github: - -```sh -git clone --recursive https://github.com/eProsima/Fast-DDS.git -b v2.0.2 ~/FastDDS-2.0.2 -cd ~/FastDDS-2.0.2 -mkdir build && cd build -``` - -If you are on Linux, execute: - -```sh -cmake -DTHIRDPARTY=ON -DSECURITY=ON .. -make -j$(nproc --all) -sudo make install -``` - -This will install Fast DDS to `/usr/local`, with secure communications support. If you need to install to a custom location you can use: `-DCMAKE_INSTALL_PREFIX=`. - -#### Compile Options - -The following additional arguments can be used when calling *CMake*: - -- `-DCOMPILE_EXAMPLES=ON`: Compile the examples -- `-DPERFORMANCE_TESTS=ON`: Compile the performance tests - - -### Fast-RTPS-Gen - -*Fast-RTPS-Gen* is the Fast RTPS (DDS) IDL code generator tool. It should be installed after Fast RTPS (DDS) and made sure the `fastrtpsgen` application is in your `PATH`. You can check with `which fastrtpsgen`. - -Then clone Fast-RTPS-Gen 1.0.4: -``` -git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git -b v1.0.4 ~/Fast-RTPS-Gen \ -&& cd ~/Fast-RTPS-Gen/gradle/wrapper -``` - -After that, modify the distribution version of gradle inside the gradle-wrapper.properties file to gradle-6.8.3 such that the distributionUrl file becomes as follows: - -``` -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip -``` -Now you should run the following commands: - -``` -cd ~/Fast-RTPS-Gen -./gradlew assemble && sudo env "PATH=$PATH" ./gradlew install -``` - -## Installation from Binaries - -:::note -Although the binaries are available, we recommend to build and install the code from source, given that the binaries may not come with required components and dependencies in place. -::: - -The latest binary release of *eProsima Fast DDS* can be downloaded from the [company website](http://www.eprosima.com/). - -Documentation on how to do this can be found here: [Installation from Binaries on Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) and [Installation from Binaries on Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) (*eProsima Fast DDS* official documentation) - -#### Environmental Variables - -* `FASTRTPSGEN_DIR`: Root folder where *eProsima Fast-RTPS-Gen* is installed, usually set to `/usr/local`, which is the default installation directory. If the user sets a different install directory in the `gradle install` step, it must set this variable to that same directory as well. Otherwise, the code generation step, and consequently, the build of the `rtps` targets in PX4 will fail. - - -## Further Information - -- [RTPS/DDS Interface: PX4-Fast RTPS(DDS) Bridge](../middleware/micrortps.md) -- [PX4-ROS 2 bridge](../ros/ros2_comm.md) - -- Additional installation information can be found in the official [*eProsima Fast DDS* documentation](https://fast-dds.docs.eprosima.com/en/latest/) (from which this topic is derived): - - Installation from Sources - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/sources/sources_windows.html) - - Installation from Binaries - - [Linux](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html) - - [Windows](https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_windows.html) diff --git a/zh/dronecan/README.md b/zh/dronecan/README.md index d77dbc80448d3..4de6625a61469 100644 --- a/zh/dronecan/README.md +++ b/zh/dronecan/README.md @@ -117,7 +117,7 @@ Upon boot the flight controller will automatically transfer the firmware onto th **Q**: The motors don't spin until throttle is increased. -**A**: Check that the `UAVCAN_ESC_IDLT` is set to `1`. +**A**: Use [Acutator > Actuator Testing](../config/actuators.md#actuator-testing) to confirm that the motor outputs are set to the correct minimum values. ## Useful Links diff --git a/zh/dronecan/ark_flow.md b/zh/dronecan/ark_flow.md index 6594fed96982f..c90e226f8cff8 100644 --- a/zh/dronecan/ark_flow.md +++ b/zh/dronecan/ark_flow.md @@ -85,7 +85,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You need to set the EKF optical flow parameters to enable fusing optical flow measurements for velocity calculation, set necessary [DroneCAN](README.md) parameters, and define offsets if the sensor is not centred within the vehicle. Set the following parameters in *QGroundControl*: -- In [EKF2_AID_MASK](../advanced_config/parameter_reference.md#EKF2_AID_MASK), check the box for "use optical flow" (bit 1) to enable optical flow aiding (alternatively set the value of the whole parameter to `2`). +- Enable optical flow fusion by setting [EKF2_OF_CTRL](../advanced_config/parameter_reference.md#EKF2_OF_CTRL). - To optionally disable GPS aiding, set [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to `0`. - Set [EKF2_RNG_A_HMAX](../advanced_config/parameter_reference.md#EKF2_RNG_A_HMAX) to `10`. - Set [EKF2_RNG_QLTY_T](../advanced_config/parameter_reference.md#EKF2_RNG_QLTY_T) to `0.2`. diff --git a/zh/dronecan/cuav_can_pmu.md b/zh/dronecan/cuav_can_pmu.md index 9c6a76e0a672f..a3f4b4befe553 100644 --- a/zh/dronecan/cuav_can_pmu.md +++ b/zh/dronecan/cuav_can_pmu.md @@ -55,12 +55,16 @@ The connection steps are: ## Flight Controller Setup -Set the following parameters in the *QGroundControl* [parameter list](../advanced_config/parameters.md) and then restart: +Set the following parameters in *QGroundControl* [Vehicle Setup > Parameters](../advanced_config/parameters.md) and then restart: * `UAVCAN_ENABLE`: set to: *Sensors Automatic Config* ![qgc set](../../assets/hardware/power_module/cuav_can/qgc_set_en.png) +* `UAVCAN_SUB_BAT`: set to: *Raw data* + + ![QGC - Set UAVCAN_SUB_BAT parameter to raw data](../../assets/hardware/power_module/cuav_can/qgc_set_usavcan_sub_bat.png) + ## Further Information diff --git a/zh/dronecan/holybro_kotleta.md b/zh/dronecan/holybro_kotleta.md index 51b8ca7e8628a..b714d9ccd84a1 100644 --- a/zh/dronecan/holybro_kotleta.md +++ b/zh/dronecan/holybro_kotleta.md @@ -1,13 +1,13 @@ # Holybro Kotleta 20 -The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](dronecan/sapog.md). +The Holybro Kotleta 20 is an CAN ESC designed to run the open source [PX4 Sapog ESC Firmware](../dronecan/sapog.md). While it can be controlled using traditional PWM input, it is designed to operate over CAN bus using [DroneCAN](README.md). ## Where to Buy -[Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +[Holybro Kotleta20](https://holybro.com/products/kotleta20) ## Setup -Follow the [Sapog ESC Setup](dronecan/sapog.md) instructions. +Follow the [Sapog ESC Setup](../dronecan/sapog.md) instructions. diff --git a/zh/dronecan/holybro_m8n_gps.md b/zh/dronecan/holybro_m8n_gps.md index a7ada35d18cd9..4dff0321e0ab3 100644 --- a/zh/dronecan/holybro_m8n_gps.md +++ b/zh/dronecan/holybro_m8n_gps.md @@ -11,7 +11,7 @@ The GPS module uses the [DroneCAN](README.md) protocol for communication. DroneC Order this module from: -* [Holybro](https://shop.holybro.com/dronecan-m8n-m9n-gps_p1335.html) +* [Holybro](https://holybro.com/products/dronecan-m8n-gps) ## Hardware Specifications diff --git a/zh/dronecan/sapog.md b/zh/dronecan/sapog.md index 92b0b3332947d..31d47a6fd550f 100644 --- a/zh/dronecan/sapog.md +++ b/zh/dronecan/sapog.md @@ -8,7 +8,7 @@ While it can be controlled using traditional PWM input, it is designed to operat Multiple vendors sell ESC hardware that runs sapog firmware: * [Zubax Orel 20](https://zubax.com/products/orel_20) -* [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) +* [Holybro Kotleta20](https://holybro.com/products/kotleta20) - - - -## PX4 Supported ESC - -PX4 is compatible with any/all UAVCAN v0 ESCs. At time of writing PX4 does not yet support UAVCAN v1.0. - -UAVCAN is generally speaking a plug'n'play protocol. The main difference between UAVCAN ESCs from a setup perspective is that the physical connectors and the software tools used to configure the motor order and direction may be different. - -Some popular UAVCAN ESC firmware/products include: -- [Sapog](https://github.com/PX4/sapog#px4-sapog) firmware; an advanced open source sensorless PMSM/BLDC motor controller firmware designed for use in propulsion systems of electric unmanned vehicles. - - [Zubax Orel 20](https://zubax.com/products/orel_20) - - [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) -- [Zubax Myxa](https://zubax.com/products/myxa) - High-end PMSM/BLDC motor controller (FOC ESC) for light unmanned aircraft and watercraft. :::note ESC based on the Zubax Telega sensorless FOC motor control technology (e.g., Zubax Myxa, Mitochondrik, Komar, etc.) require non-trivial tuning of the propulsion system in order to deliver adequate performance and ensure robust operation. - - Users who lack the necessary tuning expertise are advised to either [purchase pre-tuned UAV propulsion kits](https://zubax.com/products/uav_propulsion_kits) or to use Zubax Robotic's professional tuning service. Questions on this matter should be addressed to: [support@zubax.com](mailto:support@zubax.com). -::: -- [Zubax Mitochondrik](https://zubax.com/products/mitochondrik) - integrated sensorless PMSM/BLDC motor controller chip (used in ESCs and integrated drives) - - [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) -- [VESC Project ESCs](https://vesc-project.com/) (see also [Benjamin Vedder's blog](http://vedder.se) - project owner) -- [OlliW’s UC4H ESC-Actuator Node](http://www.olliw.eu/2017/uavcan-for-hobbyists/#chapterescactuator) -- A number of others are [listed here](https://forum.uavcan.org/t/uavcan-esc-options/452/3?u=pavel.kirienko) - -:::note -This list is *not exhaustive/complete*. If you know of another ESC, please add it to the list! -::: - -## Purchase - -Sapog-based ESCs: -- [Zubax Orel 20](https://zubax.com/products/orel_20) -- [Holybro Kotleta20](https://shop.holybro.com/kotleta20_p1156.html) - -Mitochondrik based drives and ESC: -- [Zubax Sadulli Integrated Drive](https://shop.zubax.com/collections/integrated-drives/products/sadulli-integrated-drive-open-hardware-reference-design-for-mitochondrik?variant=27740841181283) - -:::note -There are many other commercially available ESCs; please add new links as you find them! -::: - - - - - -## Wiring/Connections - -Connect all of the on-board UAVCAN devices into a chain and make sure the bus is terminated at the end nodes. The order in which the ESCs are connected/chained does not matter. - -For more information see [UAVCAN > Wiring](../uavcan/README.md#wiring). - -:::note -All UAVCAN ESCs share the same connection architecture/are wired the same way. Note however that the actual connectors differ (e.g. *Zubax Orel 20* and *Holybro Kotleta20* use Dronecode standard connectors (JST-GH 4 Pin) - while VESCs do not). -::: - -## PX4 Configuration - -In order to use a UAVCAN ESC with PX4 you will need to enable the UAVCAN driver: -1. Power the vehicle using the battery (you must power the whole vehicle, not just the flight controller) and connect *QGroundControl*. -1. Navigate to the **Vehicle Setup > Parameters** screen. :::note [Parameters](../advanced_config/parameters.md) explains how to find and set parameters. -::: -1. Set [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to the value *Sensors and Motors* (3) and then reboot the flight controller. This enables automatic enumeration of the motors (ESC) as described in the [next section](#esc-setup). -1. (Optional) Set [UAVCAN_ESC_IDLT](../advanced_config/parameter_reference.md#UAVCAN_ESC_IDLT) to 1 in order to ensure that the motors are always running at least at the idle throttle while the system is armed. :::note -Some systems will not benefit from this behavior, e.g. glider drones). -::: - - -## ESC Setup - -While UAVCAN devices are generally *plug'n'play* you will still need to enumerate (number) each of the ESC used in your system and set their direction so that they can be identified/controlled by PX4. - -:::note -The ESC index and direction must match/map to the [Airframe Reference](../airframes/airframe_reference.md) for the vehicle type. ESC indexes from 0-7 map to MAIN 1-8, while ESC indexes 8-15 map to AUX 1-8. -::: - -The mechanism for enumerating each type of UAVCAN ESC is different (look up the instructions in your ESC's manual). Setup information for some UAVCAN ESCs is provided below. - - -### Sapog ESC Enumeration using QGroundControl - -This section shows how to enumerate any [Sapog-based](https://github.com/PX4/sapog#px4-sapog)-based ESCs "automatically" using *QGroundControl*. - -:::tip -You can skip this section if there is only one ESC in your setup, because the ESC index is already set to zero by default. -::: - -To enumerate the ESC: -1. Power the vehicle with a battery and connect to *QGroundControl* -1. Navigate to **Vehicle Setup > Power** in QGC. -1. Start the process of ESC auto-enumeration by pressing the **Start Assignment** button, as shown on the screenshot below. - - ![QGC - UAVCAN ESC auto-enumeration](../../assets/peripherals/esc_qgc/qgc_uavcan_settings.jpg) - - You will hear a sound indicating that the flight controller has entered the ESC enumeration mode. -1. Manually turn each motor in the correct direction of its rotation (as specified in the [Airframe Reference](../airframes/airframe_reference.md)), starting from the first motor and finishing with the last motor. Each time you turn a motor, you should hear a confirmation beep. - - :::note -Make sure to turn each of the motors in the correct direction, as the ESC will automatically learn and remember the direction (i.e. motors that spin clockwise during normal operation must also be turned clockwise during enumeration). -::: - -1. After the last motor is enumerated, the confirmation sound should change to indicate that the enumeration procedure is complete. -1. Reboot PX4 and the Sapog ESCs to apply the new enumeration IDs. - -The following video demonstrates the process: - -@[youtube](https://www.youtube.com/watch?v=4nSa8tvpbgQ) - -### Manual ESC Enumeration using Sapog - -:::tip -We recommend automated [Sapog ESC Enumeration using QGroundControl](#sapog-esc-enumeration-using-qgroundcontrol) shown above rather than manual enumeration (as it is easier and safer). -::: - -You can manually configure the ESC index and direction using the [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/). This assigns the following Sapog configuration parameters for each enumerated ESC: -- `esc_index` -- `ctl_dir` - -:::note -See [Sapog reference manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) for more information about the parameters. -::: - -### Myxa ESC Setup - -Motor enumeration for Myxa [Telega-based ESCs](https://zubax.com/products/telega) is usually performed using the [Kucher tool](https://files.zubax.com/products/com.zubax.kucher/) (or less "GUI-friendly" [UAVCAN GUI Tool](https://uavcan.org/GUI_Tool/Overview/)). - -There is some guidance here: [Quick start guide for Myxa v0.1](https://forum.zubax.com/t/quick-start-guide-for-myxa-v0-1/911) (Zubax blog). - - -### VESC ESC Setup - -For [VESC ESCs](https://vesc-project.com/) the preferred tool for motor enumeration is the [VESC tool](https://vesc-project.com/vesc_tool). In addition to the normal motor configuration that you will have to setup in the VESC tool, you will also need to properly setup the app configuration. The recommended app setup is as follows: - -| Parameter | Option | -| ----------------------- | ---------------------- | -| App to use | `No App` | -| VESC ID | `1,2,...` | -| Can Status Message Mode | `CAN_STATUS_1_2_3_4_5` | -| CAN Baud Rate | `CAN_BAUD_500K` | -| CAN Mode | `UAVCAN` | -| UAVCAN ESC Index | `0,1,...` | - - -VESC ID should have the same motor numbering as in PX4 convention, starting at `1` for top-right motor, `2` for bottom-left motor etc. However the `UAVCAN ESC Index` starts from `0`, and as such it is always one index lower than the `VESC ID`. For example, in a quadcopter the bottom left motor will have `VESC ID = 2` and `UAVCAN ESC Index = 1`. - -Finally the `CAN Baud Rate` must match the value set in [UAVCAN_BITRATE](../advanced_config/parameter_reference.md#UAVCAN_BITRATE). - - -## Troubleshooting - -#### Motors not spinning when armed - -If the PX4 Firmware arms but the motors do not start to rotate, check that parameter `UAVCAN_ENABLE=3` to use UAVCAN ESCs. If the motors do not start spinning before thrust is increased, check `UAVCAN_ESC_IDLT=1`. - -#### UAVCAN devices dont get node ID/Firmware Update Fails - -PX4 requires an SD card for UAVCAN node allocation and during firmware update (which happen during boot). Check that there is a (working) SD card present and reboot. - - -## Further Information - -- [PX4/Sapog](https://github.com/PX4/sapog#px4-sapog) (Github) -- [Sapog v2 Reference Manual](https://files.zubax.com/products/io.px4.sapog/Sapog_v2_Reference_Manual.pdf) -- [Cyphal/CAN Device Interconnection](https://kb.zubax.com/pages/viewpage.action?pageId=2195476) (Zubax KB) -- [Using Sapog based ESC with PX4](https://kb.zubax.com/display/MAINKB/Using+Sapog-based+ESC+with+PX4) (Zubax KB) - diff --git a/zh/uavcan/node_firmware.md b/zh/uavcan/node_firmware.md deleted file mode 100644 index d702b1ef2b954..0000000000000 --- a/zh/uavcan/node_firmware.md +++ /dev/null @@ -1,57 +0,0 @@ -# UAVCAN 固件升级 - -PX4 will automatically upgrade firmware on UAVCAN nodes if the appropriate firmware is supplied. The firmware build process is manufacturer dependent (instructions for different firmware linked below). - -Before updating firmware via UAVCAN, the Pixhawk ESC 1.6 requires the UAVCAN bootloader be flashed. To build the bootloader, run: 要构建引导加载程序,请运行: -::: - -## Ectorcontrol ESC 代码库(Pixhawk ESC 1.6 和 S2740VC) - -To flash the UAVCAN device, all you need to do is copy the UAVCAN firmware binary into the root directory of the flight controller’s SD card and reboot. - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..binn`. 固件将位于 `com.thiemar.s2740vc-v1-1.0-1.0。<git hash>.bin` 和 `org.pixhawk.px4esc-v1-1.6-1.0。<git hash>.binn`。 - -:::note UAVCAN -firmware is usually created as part of the build process. Commonly the firmware image is built in **build/_name_of_your_uavcan_device_**, where _name_of_your_uavcan_device_ is specific to the device you are flashing (e.g. **build/ark_can-flow_default**), and will be named with the format **XX-X.X.XXXXXXXX.uavcan.bin**. -::: - -## Sapog 代码库(Pixhawk ESC 1.4和Zubax Orel 20) - -### 刷写 Bootloader - -Please refer to the [Ark Flow documentation](./ark_flow.md) under **Building Ark Flow Firmware** to learn how to build and flash this firmware. - -### 编译二进制文件 - -Please refer to the [project page](https://github.com/PX4/sapog) to learn how to build and flash this firmware. - -### 刷写 Bootloader - -Please refer to the [project page](https://github.com/Zubax/zubax_gnss) to learn how to build and flash this firmware. - -### 编译二进制文件 - -Download the ESC code: - -```sh -git clone https://github.com/thiemar/vectorcontrol -cd vectorcontrol -``` - -#### Flashing the UAVCAN Bootloader - -The UAVCAN node file names follow a naming convention which allows the Pixhawk to update all UAVCAN devices on the network, regardless of manufacturer. The firmware files generated in the steps above must therefore be copied to the correct locations on an SD card or the PX4 ROMFS in order for the devices to be updated. 因此,必须将上述步骤中生成的固件文件复制到 SD 卡或 PX4 ROMFS 上的正确位置,以便更新设备。 - -```sh -make clean && BOARD=px4esc_1_6 make -j8 -``` - -After building, the bootloader image is located at `firmware/px4esc_1_6-bootloader.bin`, and the OpenOCD configuration is located at `openocd_px4esc_1_6.cfg`. Follow [these instructions](../uavcan/bootloader_installation.md) to install the bootloader on the ESC. - -#### Compiling the Main Binary - -```sh -BOARD=s2740vc_1_0 make && BOARD=px4esc_1_6 make -``` - -This will build the UAVCAN node firmware for both supported ESCs. The firmware images will be located at `com.thiemar.s2740vc-v1-1.0-1.0..bin` and `org.pixhawk.px4esc-v1-1.6-1.0..bin`. diff --git a/zh/uavcan/notes.md b/zh/uavcan/notes.md deleted file mode 100644 index 0db1f6326b36e..0000000000000 --- a/zh/uavcan/notes.md +++ /dev/null @@ -1,17 +0,0 @@ -# 各种说明 - -这是在设置或使用 UAVCAN 时解决问题的一系列提示和技巧。 - -### 解锁,但电机不旋转 - -If the PX4 Firmware arms but the motors do not start to rotate, check the parameter **UAVCAN\_ENABLE**. It should be set to 3 in order to use the ESCs connected via UAVCAN as output. Moreover, if the motors do not start spinning before thrust is increased, check **UAVCAN\_ESC\_IDLT** and set it to one. 它应该设置为 3,以便使用通过 UAVCAN 连接的电调作为输出。 此外,如果电机在增加推力之前没有开始旋转,请检查 **UAVCAN\_ESC\_IDLT** 并将其设置为 1。 - -### 用 Zubax Babel 进行调试 - -A great tool to debug the transmission on the UAVCAN bus is the [Zubax Babel](https://docs.zubax.com/zubax_babel) in combination with the [GUI tool](http://uavcan.org/GUI_Tool/Overview/). They can also be used independently from Pixhawk hardware in order to test a node or manually control UAVCAN enabled ESCs. 它们还可以独立于 Pixhawk 硬件使用,以测试节点或手动控制启用了 UAVCAN 的电调。 - - -### UAVCAN devices dont get node ID/FW doesn't update - -PX4 requires an SD card for UAVCAN node allocation and firmware upgrade (both of which happen during boot). Check that there is a (working) SD card present and reboot. - diff --git a/zh/uavcan/pomegranate_systems_pm.md b/zh/uavcan/pomegranate_systems_pm.md deleted file mode 100644 index 3954b4e75fe1c..0000000000000 --- a/zh/uavcan/pomegranate_systems_pm.md +++ /dev/null @@ -1,55 +0,0 @@ -# Pomegranate Systems Power Module - -![Module Image](../../assets/hardware/power_module/pomegranate_systems_pm/main_image.jpg) - -Digital Power Module with high resolution current integration, 5V/2A supply with power monitoring, single UAVCAN v0 CANbus interface, and an RGB status LED. - -Detailed setup, configuration, and troubleshooting information can be found on the [manufacturer's device home page](https://p-systems.io/product/power_module). - -## Specifications - - - **Input Voltage:** 6-26V \(2-6S\) - - **Max Continuous Current:** - - **Benchtop:** 40A - - **Forced Cooling:** 100A - - **Max 5V Output Current:** 2A - - **Voltage Resolution:** 0.04 ΔV - - **Current Resolution:** - - **Primary / Battery Bus:** 0.02 ΔA - - **5V bus:** 0.001 ΔA - - **CANbus Termination:** Electronic (on by default) - - **MCU:** STM32 F302K8U - - **Firmware:** [Open Source](https://bitbucket.org/p-systems/firmware/) - - **Electrical Interface:** - - **Power:** Solder pads or XT60PW (right angle, board-mounted connectors) - - **CANbus** Dual JST GH-4 (standard UAVCAN micro-connector) - - **I2C / Serial:** JST GH-5 - - **5V Output:** Solder pads or CANbus / I2C connectors - - **Device Mass:** - - **Without Connectors:** 9g - - **With XT60PW Connectors:** 16g - - - ![Dimensions](../../assets/hardware/power_module/pomegranate_systems_pm/mechanical.png) - -## Configuration - - 1. Enable UAVCAN by setting the [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) parameter to `2` (Sensors Automatic Config) or `3`. - 2. Set the following module parameters using the [Mavlink console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html): - * Battery capacity in mAh: `battery_capacity_mAh` - * Battery voltage when *full*: `battery_full_V`, - * Battery voltage when *empty*: `battery_empty_V` - * Turn on current integration: `enable_current_track` - * (optional) Turn Off CANbus termination resistor :`enable_can_term` - -**Example:** A Power Module with UAVCAN node id `125` connected to a `3S` LiPo with capacity of `5000mAh` can be configured with the following commands: - -``` -uavcan param set 125 battery_capacity_mAh 5000 -uavcan param set 125 battery_full_V 12.5 -uavcan param set 125 battery_empty_V 11.2 -uavcan param set 125 enable_current_track 1 -uavcan param save 125 -``` - -See [device configuration page](https://p-systems.io/product/power_module/configuration) for a full list of parameters.
          VT_B_TRANS_DUR (FLOAT)Duration of a back transition

          Comment: Time in seconds used for a back transition

          Maximum duration of a back transition

          Comment: Time in seconds used for a back transition maximally. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.

          [0.1, 20.00] (1)4.010.0 s
          3.0 s
          VT_B_TRANS_THR (FLOAT)Target throttle value for the transition to hover flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [-1, 1] (0.01)0.0
          VT_ELEV_MC_LOCK (INT32) Lock control surfaces in hover

          Comment: If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.

          VT_FW_MIN_ALT (FLOAT)QuadChute Altitude

          Comment: Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude the vehicle will transition back to MC mode and enter failsafe RTL

          Quad-chute altitude

          Comment: Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.

          [0.0, 200.0] (1) 0.0 m
          VT_FW_QC_HMAX (INT32)Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwhise above home if available, otherwise above the local origin) where triggering a quadchute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          Quad-chute maximum height

          Comment: Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.

          [0, ?] (1) 0 m
          VT_F_TRANS_THR (FLOAT)Target throttle value for the transition to fixed wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          Target throttle value for the transition to fixed-wing flight

          Comment: standard vtol: pusher tailsitter, tiltrotor: main throttle

          [0.0, 1.0] (0.01) 1.0
          VT_F_TR_OL_TM (FLOAT)Airspeed less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          Airspeed-less front transition time (open loop)

          Comment: The duration of the front transition when there is no airspeed feedback available.

          [1.0, 30.0] (0.5) 6.0 sVT_QC_T_ALT_LOSS (FLOAT) Quad-chute transition altitude loss threshold

          Comment: Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold.

          [0, 50] (1)10.020.0 m