[{"data":1,"prerenderedAt":5261},["ShallowReactive",2],{"wiki-page-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he":3,"wiki-doc-items-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he":4893,"language-switcher-data-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he":5245,"wiki-i18n-paths-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he":5260},{"id":4,"title":5,"body":6,"canonicalPath":4874,"chapter":4875,"chapterSort":4876,"date":4877,"description":12,"docI18nKey":4878,"docKey":4879,"docRoot":4880,"docTitle":4881,"extension":4882,"i18nKey":4883,"isBlogPost":4884,"isWikiDoc":224,"isWikiIndex":4884,"layout":4885,"legacyPath":4885,"locale":4886,"localeSlug":4887,"meta":4888,"navigation":224,"path":4874,"seo":4889,"sourcePath":4890,"sourceStem":4883,"stem":4891,"wikiDepth":39,"__hash__":4892},"content/_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合.md","輪式里程計與IMU融合",{"type":7,"value":8,"toc":4872},"minimark",[9,13,19,22,25,71,78,83,98,117,120,123,126,131,143,158,161,166,169,513,519,524,529,720,726,731,4629,4632,4794,4797,4802,4805,4824,4829,4832,4859,4862,4868],[10,11,12],"p",{},"輪式里程計可以通過監測輪子轉動來估計機器人的位置和姿態變化，但容易受到滑動和不均勻地面等特殊情況的影響。IMU可以測量加速度和角速度，提供高頻率的運動信息，但容易受到積分漂移和噪聲的影響。將它們的數據融合可以彌補彼此的不足，提供更可靠和準確的定位結果，充分利用各自的優勢，減少侷限性。在ROS2中，提供了robot_localization功能包，可以方便的幫助開發人員實現二者的融合。",[10,14,15],{},[16,17,18],"strong",{},"1.robot_localization簡介",[10,20,21],{},"robot_localization是ROS2中的一個功能包，用於實現多傳感器數據融合的機器人定位和導航。它提供了一個解決方案，可以將來自不同傳感器（如輪式里程計、IMU、GPS、激光雷達等）的數據進行融合，以獲得更準確和魯棒的定位結果。在該功能包中，融合算法已經通過節點封裝完畢，調用者只需在調用節點時注入參數即可。",[10,23,24],{},"請調用如下指令安裝robot_localization：",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","sudo apt install ros-\u003Cdistro>-robot-localization\n","bash","",[33,34,35],"code",{"__ignoreMap":31},[36,37,40,44,48,51,54,58,61,65,68],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sScJk","sudo",[36,45,47],{"class":46},"sZZnC"," apt",[36,49,50],{"class":46}," install",[36,52,53],{"class":46}," ros-",[36,55,57],{"class":56},"szBVR","\u003C",[36,59,60],{"class":46},"distr",[36,62,64],{"class":63},"sVt8B","o",[36,66,67],{"class":56},">",[36,69,70],{"class":46},"-robot-localization\n",[10,72,73,74,77],{},"請將",[33,75,76],{},"\u003Cdistro>","替換爲正在使用的ROS2發行版代號。",[10,79,80],{},[16,81,82],{},"2.robot_localization節點說明",[10,84,85,86,89,90,93,94,97],{},"在robot_localization功能包中提供了",[33,87,88],{},"ekf_node","、",[33,91,92],{},"ukf_node","和",[33,95,96],{},"navsat_transform_node","多個節點來實現機器人的狀態估計和定位。不同節點介紹如下：",[99,100,101,107,112],"ul",{},[102,103,104,106],"li",{},[33,105,88],{},"是基於增強卡爾曼濾波器（EKF）的節點，用於融合多個傳感器數據來進行狀態估計。它接收來自里程計、IMU、激光雷達等傳感器的數據，並將它們融合在一起以提供更準確的機器人狀態估計。EKF節點使用機器人的運動模型和傳感器測量模型來估計機器人的位置、姿態和速度等狀態變量。",[102,108,109,111],{},[33,110,92],{},"是基於無跡卡爾曼濾波器（UKF）的節點，用於實現機器人的狀態估計和本地化。UKF節點採用無跡變換（Unscented Transform）來處理非線性系統，通過估計機器人在空間中的位置和姿態，提供更準確的狀態估計。與EKF相比，UKF節點可以更好地處理非線性系統的估計問題。",[102,113,114,116],{},[33,115,96],{},"用於將全球定位系統（GNSS）導航衛星數據與慣性測量單元（IMU）數據進行融合，以提供精確的位置估計。該節點校正GNSS信號的誤差，並將其轉化爲帶有高精度的位置信息。這有助於改善在室內或具有GNSS信號不穩定性的環境中的機器人定位精度。",[10,118,119],{},"這些節點是robot_localization功能包中的核心組件，每個節點都可以融合任意數量的傳感器（慣性測量單元（IMU），里程計，室內定位系統，全球定位系統接收器等），它們支持 nav_msgs/msg/Odometry（位置、方向和線性、角速度）、geometry_msgs/msg/PoseWithCovarianceStamped（位置和方向）、geometry_msgs/msg/TwistWithCovarianceStamped（線性和角速度）和sensor_msgs/msg/Imu（方向、角速度和線性加速度）消息，以跟蹤機器人的15維（x、y、z、滾動、俯仰、偏航、x˙、y˙、z˙、滾動˙、俯仰˙、偏航˙、x¨、y¨、z¨）狀態。",[10,121,122],{},"基於這些測量數據，狀態估計節點將過濾後的位置、方向和線性、角速度（nav_msgs/Odometry）發佈到 /odometry/filtered 話題上，並在啓用時將過濾後的加速度發佈到 /accel/filtered 話題上。",[10,124,125],{},"此外，它們可以（默認啓用）將相應的變換作爲 tf2 變換進行發佈，無論是 odom → base_link 變換還是 map → odom 變換。",[10,127,128],{},[16,129,130],{},"3.robot_localization使用示例",[10,132,133,134,136,137,139,140,142],{},"假設要融合輪式里程計與IMU，那麼請先保證機器人底盤可以發佈里程計消息以及IMU消息。在MyCar導航機器人中，Stm32底盤是滿足條件的，但是Arduino底盤不包含IMU傳感器，需要自行安裝。融合時，可以使用",[33,135,88],{},"或",[33,138,92],{},"節點。本案例中使用的是stm32 4w底盤結合",[33,141,88],{},"實現。其大致步驟如下：",[144,145,146,149,152,155],"ol",{},[102,147,148],{},"編寫luanch文件；",[102,150,151],{},"編寫配置文件；",[102,153,154],{},"編譯；",[102,156,157],{},"執行並查看結果。",[10,159,160],{},"由於robot_localization對融合實現已經做了很好的封裝，所以整個實現流程是比較簡單的。",[10,162,163],{},[16,164,165],{},"（1）編寫launch文件",[10,167,168],{},"在ros2_stm32_bridge功能包的launch目錄下新建文件driver_ekf.launch.py，並輸入以下內容：",[26,170,174],{"className":171,"code":172,"language":173,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","from launch import LaunchDescription\nfrom ament_index_python.packages import get_package_share_directory\nimport launch_ros.actions\nimport os\n\ndef generate_launch_description():\n    MYCAR_MODEL = os.environ['MYCAR_MODEL']return LaunchDescription([\n        launch_ros.actions.Node(\n            package='robot_localization',\n            executable='ekf_node',\n            name='ekf_filter_node',\n            output='screen',\n            parameters=[os.path.join(get_package_share_directory(\"ros2_stm32_bridge\"), 'params', 'ekf.yaml')],\n           ),\n        launch_ros.actions.Node(\n            package='tf2_ros',\n            executable='static_transform_publisher',\n            arguments=['--frame-id', 'base_footprint', '--child-frame-id', 'imu_link', '--x', '-0.15']\n        ),\n        launch_ros.actions.Node(\n            package=\"ros2_stm32_bridge\",\n            executable=\"base_controller\",\n            parameters=[\n                os.path.join(get_package_share_directory(\"ros2_stm32_bridge\"), \"params\", MYCAR_MODEL + \"_ekf.yaml\"),],\n        )\n    ])\n","python",[33,175,176,190,203,211,219,226,238,263,269,285,298,311,324,353,359,364,376,388,430,436,441,452,464,474,501,507],{"__ignoreMap":31},[36,177,178,181,184,187],{"class":38,"line":39},[36,179,180],{"class":56},"from",[36,182,183],{"class":63}," launch ",[36,185,186],{"class":56},"import",[36,188,189],{"class":63}," LaunchDescription\n",[36,191,193,195,198,200],{"class":38,"line":192},2,[36,194,180],{"class":56},[36,196,197],{"class":63}," ament_index_python.packages ",[36,199,186],{"class":56},[36,201,202],{"class":63}," get_package_share_directory\n",[36,204,206,208],{"class":38,"line":205},3,[36,207,186],{"class":56},[36,209,210],{"class":63}," launch_ros.actions\n",[36,212,214,216],{"class":38,"line":213},4,[36,215,186],{"class":56},[36,217,218],{"class":63}," os\n",[36,220,222],{"class":38,"line":221},5,[36,223,225],{"emptyLinePlaceholder":224},true,"\n",[36,227,229,232,235],{"class":38,"line":228},6,[36,230,231],{"class":56},"def",[36,233,234],{"class":42}," generate_launch_description",[36,236,237],{"class":63},"():\n",[36,239,241,245,248,251,254,257,260],{"class":38,"line":240},7,[36,242,244],{"class":243},"sj4cs","    MYCAR_MODEL",[36,246,247],{"class":56}," =",[36,249,250],{"class":63}," os.environ[",[36,252,253],{"class":46},"'MYCAR_MODEL'",[36,255,256],{"class":63},"]",[36,258,259],{"class":56},"return",[36,261,262],{"class":63}," LaunchDescription([\n",[36,264,266],{"class":38,"line":265},8,[36,267,268],{"class":63},"        launch_ros.actions.Node(\n",[36,270,272,276,279,282],{"class":38,"line":271},9,[36,273,275],{"class":274},"s4XuR","            package",[36,277,278],{"class":56},"=",[36,280,281],{"class":46},"'robot_localization'",[36,283,284],{"class":63},",\n",[36,286,288,291,293,296],{"class":38,"line":287},10,[36,289,290],{"class":274},"            executable",[36,292,278],{"class":56},[36,294,295],{"class":46},"'ekf_node'",[36,297,284],{"class":63},[36,299,301,304,306,309],{"class":38,"line":300},11,[36,302,303],{"class":274},"            name",[36,305,278],{"class":56},[36,307,308],{"class":46},"'ekf_filter_node'",[36,310,284],{"class":63},[36,312,314,317,319,322],{"class":38,"line":313},12,[36,315,316],{"class":274},"            output",[36,318,278],{"class":56},[36,320,321],{"class":46},"'screen'",[36,323,284],{"class":63},[36,325,327,330,332,335,338,341,344,347,350],{"class":38,"line":326},13,[36,328,329],{"class":274},"            parameters",[36,331,278],{"class":56},[36,333,334],{"class":63},"[os.path.join(get_package_share_directory(",[36,336,337],{"class":46},"\"ros2_stm32_bridge\"",[36,339,340],{"class":63},"), ",[36,342,343],{"class":46},"'params'",[36,345,346],{"class":63},", ",[36,348,349],{"class":46},"'ekf.yaml'",[36,351,352],{"class":63},")],\n",[36,354,356],{"class":38,"line":355},14,[36,357,358],{"class":63},"           ),\n",[36,360,362],{"class":38,"line":361},15,[36,363,268],{"class":63},[36,365,367,369,371,374],{"class":38,"line":366},16,[36,368,275],{"class":274},[36,370,278],{"class":56},[36,372,373],{"class":46},"'tf2_ros'",[36,375,284],{"class":63},[36,377,379,381,383,386],{"class":38,"line":378},17,[36,380,290],{"class":274},[36,382,278],{"class":56},[36,384,385],{"class":46},"'static_transform_publisher'",[36,387,284],{"class":63},[36,389,391,394,396,399,402,404,407,409,412,414,417,419,422,424,427],{"class":38,"line":390},18,[36,392,393],{"class":274},"            arguments",[36,395,278],{"class":56},[36,397,398],{"class":63},"[",[36,400,401],{"class":46},"'--frame-id'",[36,403,346],{"class":63},[36,405,406],{"class":46},"'base_footprint'",[36,408,346],{"class":63},[36,410,411],{"class":46},"'--child-frame-id'",[36,413,346],{"class":63},[36,415,416],{"class":46},"'imu_link'",[36,418,346],{"class":63},[36,420,421],{"class":46},"'--x'",[36,423,346],{"class":63},[36,425,426],{"class":46},"'-0.15'",[36,428,429],{"class":63},"]\n",[36,431,433],{"class":38,"line":432},19,[36,434,435],{"class":63},"        ),\n",[36,437,439],{"class":38,"line":438},20,[36,440,268],{"class":63},[36,442,444,446,448,450],{"class":38,"line":443},21,[36,445,275],{"class":274},[36,447,278],{"class":56},[36,449,337],{"class":46},[36,451,284],{"class":63},[36,453,455,457,459,462],{"class":38,"line":454},22,[36,456,290],{"class":274},[36,458,278],{"class":56},[36,460,461],{"class":46},"\"base_controller\"",[36,463,284],{"class":63},[36,465,467,469,471],{"class":38,"line":466},23,[36,468,329],{"class":274},[36,470,278],{"class":56},[36,472,473],{"class":63},"[\n",[36,475,477,480,482,484,487,489,492,495,498],{"class":38,"line":476},24,[36,478,479],{"class":63},"                os.path.join(get_package_share_directory(",[36,481,337],{"class":46},[36,483,340],{"class":63},[36,485,486],{"class":46},"\"params\"",[36,488,346],{"class":63},[36,490,491],{"class":243},"MYCAR_MODEL",[36,493,494],{"class":56}," +",[36,496,497],{"class":46}," \"_ekf.yaml\"",[36,499,500],{"class":63},"),],\n",[36,502,504],{"class":38,"line":503},25,[36,505,506],{"class":63},"        )\n",[36,508,510],{"class":38,"line":509},26,[36,511,512],{"class":63},"    ])\n",[10,514,515,516,518],{},"該launch文件中，啓動了機器人底盤驅動，啓動了robot_localization包中",[33,517,88],{},"節點，並且還發布了base_footprint與imu_link的座標變換。",[10,520,521],{},[16,522,523],{},"（2）編寫配置文件",[99,525,526],{},[102,527,528],{},"在ros2_stm32_bridge功能包的params目錄下新建文件stm32_4w_ekf.yaml，並輸入以下內容：",[26,530,532],{"className":28,"code":531,"language":30,"meta":31,"style":31},"/mini_driver:\n\n# /**:  ros__parameters:    base_frame: base_footprint\n    baud_rate: 115200    control_rate: 10    encoder_resolution: 44.0    kd: 130    ki: 0    kp: 100    maximum_encoding: 100.0    model_param_acw: 0.45    model_param_cw: 0.45    odom_frame: odom\n    port_name: /dev/mycar\n    publish_tf: false    qos_overrides:\n      /parameter_events:\n        publisher:          depth: 1000          durability: volatile\n          history: keep_last\n          reliability: reliable\n      /tf:\n        publisher:          depth: 100          durability: volatile\n          history: keep_last\n          reliability: reliable\n    reduction_ratio: 90.0    use_sim_time: false    wheel_diameter: 0.080\n",[33,533,534,539,543,549,610,618,629,634,651,662,670,675,687,695,701],{"__ignoreMap":31},[36,535,536],{"class":38,"line":39},[36,537,538],{"class":42},"/mini_driver:\n",[36,540,541],{"class":38,"line":192},[36,542,225],{"emptyLinePlaceholder":224},[36,544,545],{"class":38,"line":205},[36,546,548],{"class":547},"sJ8bj","# /**:  ros__parameters:    base_frame: base_footprint\n",[36,550,551,554,557,560,563,566,569,572,575,578,581,584,587,590,593,596,599,602,604,607],{"class":38,"line":213},[36,552,553],{"class":42},"    baud_rate:",[36,555,556],{"class":243}," 115200",[36,558,559],{"class":46},"    control_rate:",[36,561,562],{"class":243}," 10",[36,564,565],{"class":46},"    encoder_resolution:",[36,567,568],{"class":243}," 44.0",[36,570,571],{"class":46},"    kd:",[36,573,574],{"class":243}," 130",[36,576,577],{"class":46},"    ki:",[36,579,580],{"class":243}," 0",[36,582,583],{"class":46},"    kp:",[36,585,586],{"class":243}," 100",[36,588,589],{"class":46},"    maximum_encoding:",[36,591,592],{"class":243}," 100.0",[36,594,595],{"class":46},"    model_param_acw:",[36,597,598],{"class":243}," 0.45",[36,600,601],{"class":46},"    model_param_cw:",[36,603,598],{"class":243},[36,605,606],{"class":46},"    odom_frame:",[36,608,609],{"class":46}," odom\n",[36,611,612,615],{"class":38,"line":221},[36,613,614],{"class":42},"    port_name:",[36,616,617],{"class":46}," /dev/mycar\n",[36,619,620,623,626],{"class":38,"line":228},[36,621,622],{"class":42},"    publish_tf:",[36,624,625],{"class":243}," false",[36,627,628],{"class":46},"    qos_overrides:\n",[36,630,631],{"class":38,"line":240},[36,632,633],{"class":42},"      /parameter_events:\n",[36,635,636,639,642,645,648],{"class":38,"line":265},[36,637,638],{"class":42},"        publisher:",[36,640,641],{"class":46},"          depth:",[36,643,644],{"class":243}," 1000",[36,646,647],{"class":46},"          durability:",[36,649,650],{"class":46}," volatile\n",[36,652,653,656,659],{"class":38,"line":271},[36,654,655],{"class":243},"          history",[36,657,658],{"class":46},":",[36,660,661],{"class":46}," keep_last\n",[36,663,664,667],{"class":38,"line":287},[36,665,666],{"class":42},"          reliability:",[36,668,669],{"class":46}," reliable\n",[36,671,672],{"class":38,"line":300},[36,673,674],{"class":42},"      /tf:\n",[36,676,677,679,681,683,685],{"class":38,"line":313},[36,678,638],{"class":42},[36,680,641],{"class":46},[36,682,586],{"class":243},[36,684,647],{"class":46},[36,686,650],{"class":46},[36,688,689,691,693],{"class":38,"line":326},[36,690,655],{"class":243},[36,692,658],{"class":46},[36,694,661],{"class":46},[36,696,697,699],{"class":38,"line":355},[36,698,666],{"class":42},[36,700,669],{"class":46},[36,702,703,706,709,712,714,717],{"class":38,"line":361},[36,704,705],{"class":42},"    reduction_ratio:",[36,707,708],{"class":243}," 90.0",[36,710,711],{"class":46},"    use_sim_time:",[36,713,625],{"class":243},[36,715,716],{"class":46},"    wheel_diameter:",[36,718,719],{"class":243}," 0.080\n",[10,721,722,723,725],{},"在該文件中，一個重要操作是將publish_tf參數設置爲false，設置爲false後，底盤驅動不再發布base_footprint與odom的座標變換，而是由",[33,724,88],{},"取而代之。",[99,727,728],{},[102,729,730],{},"在ros2_stm32_bridge功能包的params目錄下新建文件ekf.yaml，並輸入以下內容：",[26,732,736],{"className":733,"code":734,"language":735,"meta":31,"style":31},"language-yaml shiki shiki-themes github-light github-dark","\n### ekf config file ###\nekf_filter_node:\n    ros__parameters:\n\n# The frequency, in Hz, at which the filter will output a position estimate. Note that the filter will not begin\n\n# computation until it receives at least one message from one of the inputs. It will then run continuously at the\n\n# frequency specified here, regardless of whether it receives more measurements. Defaults to 30 if unspecified.\n        frequency: 30.0\n\n# The period, in seconds, after which we consider a sensor to have timed out. In this event, we carry out a predict\n\n# cycle on the EKF without correcting it. This parameter can be thought of as the minimum frequency with which the\n\n# filter will generate new output. Defaults to 1 / frequency if not specified.\n        sensor_timeout: 0.1\n\n# ekf_localization_node and ukf_localization_node both use a 3D omnidirectional motion model. If this parameter is\n\n# set to true, no 3D information will be used in your state estimate. Use this if you are operating in a planar\n\n# environment and want to ignore the effect of small variations in the ground plane that might otherwise be detected\n\n# by, for example, an IMU. Defaults to false if unspecified.\n        two_d_mode: false\n\n# Use this parameter to provide an offset to the transform generated by ekf_localization_node. This can be used for\n\n# future dating the transform, which is required for interaction with some other packages. Defaults to 0.0 if\n\n# unspecified.\n        transform_time_offset: 0.0\n\n# Use this parameter to provide specify how long the tf listener should wait for a transform to become available. \n\n# Defaults to 0.0 if unspecified.\n        transform_timeout: 0.0\n\n# If you're having trouble, try setting this to true, and then echo the /diagnostics_agg topic to see if the node is\n\n# unhappy with any settings or data.\n        print_diagnostics: true\n\n# Debug settings. Not for the faint of heart. Outputs a ludicrous amount of information to the file specified by\n\n# debug_out_file. I hope you like matrices! Please note that setting this to true will have strongly deleterious\n\n# effects on the performance of the node. Defaults to false if unspecified.\n        debug: false\n\n# Defaults to \"robot_localization_debug.txt\" if unspecified. Please specify the full path.\n        debug_out_file: /path/to/debug/file.txt\n\n# Whether we'll allow old measurements to cause a re-publication of the updated state\n        permit_corrected_publication: false\n\n# Whether to publish the acceleration state. Defaults to false if unspecified.\n        publish_acceleration: false\n\n# Whether to broadcast the transformation over the /tf topic. Defaults to true if unspecified.\n        publish_tf: true\n\n# REP-105 (http://www.ros.org/reps/rep-0105.html) specifies four principal coordinate frames: base_link, odom, map, and\n\n# earth. base_link is the coordinate frame that is affixed to the robot. Both odom and map are world-fixed frames.\n\n# The robot's position in the odom frame will drift over time, but is accurate in the short term and should be\n\n# continuous. The odom frame is therefore the best frame for executing local motion plans. The map frame, like the odom\n\n# frame, is a world-fixed coordinate frame, and while it contains the most globally accurate position estimate for your\n\n# robot, it is subject to discrete jumps, e.g., due to the fusion of GPS data or a correction from a map-based\n\n# localization node. The earth frame is used to relate multiple map frames by giving them a common reference frame.\n\n# ekf_localization_node and ukf_localization_node are not concerned with the earth frame.\n\n# Here is how to use the following settings:\n\n# 1. Set the map_frame, odom_frame, and base_link frames to the appropriate frame names for your system.\n\n#     1a. If your system does not have a map_frame, just remove it, and make sure \"world_frame\" is set to the value of\n\n#         odom_frame.\n\n# 2. If you are fusing continuous position data such as wheel encoder odometry, visual odometry, or IMU data, set\n\n#   \"world_frame\" to your odom_frame value. This is the default behavior for robot_localization's state estimation nodes.\n\n# 3. If you are fusing global absolute position data that is subject to discrete jumps (e.g., GPS or position updates\n\n# from landmark observations) then:\n\n#     3a. Set your \"world_frame\" to your map_frame value\n\n#     3b. MAKE SURE something else is generating the odom->base_link transform. Note that this can even be another state\n\n#         estimation node from robot_localization! However, that instance should *not* fuse the global data.\n        map_frame: map              # Defaults to \"map\" if unspecified\n        odom_frame: odom            # Defaults to \"odom\" if unspecified\n        base_link_frame: base_footprint  # Defaults to \"base_link\" if unspecified\n        world_frame: odom           # Defaults to the value of odom_frame if unspecified\n\n# The filter accepts an arbitrary number of inputs from each input message type (nav_msgs/Odometry,\n\n# geometry_msgs/PoseWithCovarianceStamped, geometry_msgs/TwistWithCovarianceStamped,\n\n# sensor_msgs/Imu). To add an input, simply append the next number in the sequence to its \"base\" name, e.g., odom0,\n\n# odom1, twist0, twist1, imu0, imu1, imu2, etc. The value should be the topic name. These parameters obviously have no\n\n# default values, and must be specified.\n        odom0: odom\n\n# Each sensor reading updates some or all of the filter's state. These options give you greater control over which\n\n# values from each measurement are fed to the filter. For example, if you have an odometry message as input, but only\n\n# want to use its Z position value, then set the entire vector to false, except for the third entry. The order of the\n\n# values is x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Note that not some message types\n\n# do not provide some of the state variables estimated by the filter. For example, a TwistWithCovarianceStamped message\n\n# has no pose information, so the first six values would be meaningless in that case. Each vector defaults to all false\n\n# if unspecified, effectively making this parameter required for each sensor.\n        odom0_config: [false,  false,  false,\n                       false, false, false,\n                       true, false, false,\n                       false, false, false,\n                       false, false, false]\n\n# If you have high-frequency data or are running with a low frequency parameter value, then you may want to increase\n\n# the size of the subscription queue so that more measurements are fused.\n        odom0_queue_size: 2\n\n# [ADVANCED] Large messages in ROS can exhibit strange behavior when they arrive at a high frequency. This is a result\n\n# of Nagle's algorithm. This option tells the ROS subscriber to use the tcpNoDelay option, which disables Nagle's\n\n# algorithm.\n        odom0_nodelay: false\n\n# [ADVANCED] When measuring one pose variable with two sensors, a situation can arise in which both sensors under-\n\n# report their covariances. This can lead to the filter rapidly jumping back and forth between each measurement as they\n\n# arrive. In these cases, it often makes sense to (a) correct the measurement covariances, or (b) if velocity is also\n\n# measured by one of the sensors, let one sensor measure pose, and the other velocity. However, doing (a) or (b) isn't\n\n# always feasible, and so we expose the differential parameter. When differential mode is enabled, all absolute pose\n\n# data is converted to velocity data by differentiating the absolute pose measurements. These velocities are then\n\n# integrated as usual. NOTE: this only applies to sensors that provide pose measurements; setting differential to true\n\n# for twist measurements has no effect.\n        odom0_differential: false\n\n# [ADVANCED] When the node starts, if this parameter is true, then the first measurement is treated as a \"zero point\"\n\n# for all future measurements. While you can achieve the same effect with the differential paremeter, the key\n\n# difference is that the relative parameter doesn't cause the measurement to be converted to a velocity before\n\n# integrating it. If you simply want your measurements to start at 0 for a given sensor, set this to true.\n        odom0_relative: false\n\n# [ADVANCED] If your data is subject to outliers, use these threshold settings, expressed as Mahalanobis distances, to\n\n# control how far away from the current vehicle state a sensor measurement is permitted to be. Each defaults to\n\n# numeric_limits\u003Cdouble>::max() if unspecified. It is strongly recommended that these parameters be removed if not\n\n# required. Data is specified at the level of pose and twist variables, rather than for each variable in isolation.\n\n# For messages that have both pose and twist data, the parameter specifies to which part of the message we are applying\n\n# the thresholds.\n        odom0_pose_rejection_threshold: 5.0\n        odom0_twist_rejection_threshold: 1.0\n\n        imu0: imu\n        imu0_config: [false, false, false,\n                      false, false,  true,\n                      false, false, false,\n                      false, false,  true,\n                      false, false,  false]\n        imu0_nodelay: false\n        imu0_differential: false\n        imu0_relative: true\n        imu0_queue_size: 5\n        imu0_pose_rejection_threshold: 0.8                 # Note the difference in parameter names\n        imu0_twist_rejection_threshold: 0.8                #\n        imu0_linear_acceleration_rejection_threshold: 0.8  #\n\n# [ADVANCED] Some IMUs automatically remove acceleration due to gravity, and others don't. If yours doesn't, please set\n\n# this to true, and *make sure* your data conforms to REP-103, specifically, that the data is in ENU frame.\n        imu0_remove_gravitational_acceleration: true\n\n# [ADVANCED]  The EKF and UKF models follow a standard predict/correct cycle. During prediction, if there is no\n\n# acceleration reference, the velocity at time t+1 is simply predicted to be the same as the velocity at time t. During\n\n# correction, this predicted value is fused with the measured value to produce the new velocity estimate. This can be\n\n# problematic, as the final velocity will effectively be a weighted average of the old velocity and the new one. When\n\n# this velocity is the integrated into a new pose, the result can be sluggish covergence. This effect is especially\n\n# noticeable with LIDAR data during rotations. To get around it, users can try inflating the process_noise_covariance\n\n# for the velocity variable in question, or decrease the  variance of the variable in question in the measurement\n\n# itself. In addition, users can also take advantage of the control command being issued to the robot at the time we\n\n# make the prediction. If control is used, it will get converted into an acceleration term, which will be used during\n\n# predicition. Note that if an acceleration measurement for the variable in question is available from one of the\n\n# inputs, the control term will be ignored.\n\n# Whether or not we use the control input during predicition. Defaults to false.\n        use_control: true\n\n# Whether the input (assumed to be cmd_vel) is a geometry_msgs/Twist or geometry_msgs/TwistStamped message. Defaults to\n\n# false.\n        stamped_control: false\n\n# The last issued control command will be used in prediction for this period. Defaults to 0.2.\n        control_timeout: 0.2\n\n# Which velocities are being controlled. Order is vx, vy, vz, vroll, vpitch, vyaw.\n        control_config: [true, false, false, false, false, true]\n\n# Places limits on how large the acceleration term will be. Should match your robot's kinematics.\n        acceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 3.4]\n\n# Acceleration and deceleration limits are not always the same for robots.\n        deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5]\n\n# If your robot cannot instantaneously reach its acceleration limit, the permitted change can be controlled with these\n\n# gains\n        acceleration_gains: [0.8, 0.0, 0.0, 0.0, 0.0, 0.9]\n\n# If your robot cannot instantaneously reach its deceleration limit, the permitted change can be controlled with these\n\n# gains\n        deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]\n\n# [ADVANCED] The process noise covariance matrix can be difficult to tune, and can vary for each application, so it is\n\n# exposed as a configuration parameter. This matrix represents the noise we add to the total error after each\n\n# prediction step. The better the omnidirectional motion model matches your system, the smaller these values can be.\n\n# However, if users find that a given variable is slow to converge, one approach is to increase the\n\n# process_noise_covariance diagonal value for the variable in question, which will cause the filter's predicted error\n\n# to be larger, which will cause the filter to trust the incoming measurement more during correction. The values are\n\n# ordered as x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Defaults to the matrix below if\n\n# unspecified.\n        process_noise_covariance: [0.05, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.05, 0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.06, 0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.03, 0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.03, 0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.06, 0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.025, 0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.025, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.04, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.01, 0.0,    0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.01, 0.0,    0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.02, 0.0,    0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.01, 0.0,    0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.01, 0.0,\n                                   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.015]\n\n# [ADVANCED] This represents the initial value for the state estimate error covariance matrix. Setting a diagonal\n\n# value (variance) to a large value will result in rapid convergence for initial measurements of the variable in\n\n# question. Users should take care not to use large values for variables that will not be measured directly. The values\n\n# are ordered as x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Defaults to the matrix below\n#if unspecified.\n        initial_estimate_covariance: [1e-9, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    1e-9, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    1e-9, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    1e-9, 0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    1e-9, 0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    1e-9, 0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    1e-9, 0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    1e-9, 0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    1e-9, 0.0,     0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    1e-9,  0.0,     0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     1e-9,  0.0,     0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     1e-9,  0.0,    0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     1e-9, 0.0,    0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    1e-9, 0.0,\n                                      0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,    0.0,     0.0,     0.0,     0.0,    0.0,    1e-9]\n","yaml",[33,737,738,742,747,756,763,767,772,776,781,785,790,801,805,810,814,819,823,828,838,842,847,851,856,860,865,869,874,885,890,896,901,907,912,918,929,934,940,945,951,961,966,972,977,983,994,999,1005,1010,1016,1021,1027,1037,1042,1048,1059,1064,1070,1080,1085,1091,1101,1106,1112,1122,1127,1133,1138,1144,1149,1155,1160,1166,1171,1177,1182,1188,1193,1199,1204,1210,1215,1221,1226,1232,1237,1243,1248,1254,1259,1265,1270,1276,1281,1287,1292,1298,1303,1309,1314,1320,1325,1331,1345,1359,1373,1386,1391,1397,1402,1408,1413,1419,1424,1430,1435,1441,1452,1457,1463,1468,1474,1479,1485,1490,1496,1501,1507,1512,1518,1523,1529,1552,1568,1584,1599,1614,1619,1625,1630,1636,1647,1652,1658,1663,1669,1674,1680,1690,1695,1701,1706,1712,1717,1723,1728,1734,1739,1745,1750,1756,1761,1767,1772,1778,1788,1793,1799,1804,1810,1815,1821,1826,1832,1842,1847,1853,1858,1864,1869,1875,1880,1886,1891,1897,1902,1908,1919,1930,1935,1946,1966,1983,1998,2013,2028,2038,2048,2058,2069,2083,2096,2109,2114,2120,2125,2131,2141,2146,2152,2157,2163,2168,2174,2179,2185,2190,2196,2201,2207,2212,2218,2223,2229,2234,2240,2245,2251,2256,2262,2267,2273,2283,2288,2294,2299,2305,2315,2320,2326,2337,2342,2348,2380,2385,2391,2426,2431,2437,2470,2475,2481,2486,2492,2525,2530,2536,2541,2546,2579,2584,2590,2595,2601,2606,2612,2617,2623,2628,2634,2639,2645,2650,2656,2661,2666,2737,2801,2865,2929,2992,3055,3119,3182,3246,3310,3373,3437,3500,3563,3627,3632,3638,3643,3649,3654,3660,3665,3671,3677,3746,3810,3873,3936,3999,4062,4125,4188,4251,4314,4377,4440,4503,4566],{"__ignoreMap":31},[36,739,740],{"class":38,"line":39},[36,741,225],{"emptyLinePlaceholder":224},[36,743,744],{"class":38,"line":192},[36,745,746],{"class":547},"### ekf config file ###\n",[36,748,749,753],{"class":38,"line":205},[36,750,752],{"class":751},"s9eBZ","ekf_filter_node",[36,754,755],{"class":63},":\n",[36,757,758,761],{"class":38,"line":213},[36,759,760],{"class":751},"    ros__parameters",[36,762,755],{"class":63},[36,764,765],{"class":38,"line":221},[36,766,225],{"emptyLinePlaceholder":224},[36,768,769],{"class":38,"line":228},[36,770,771],{"class":547},"# The frequency, in Hz, at which the filter will output a position estimate. Note that the filter will not begin\n",[36,773,774],{"class":38,"line":240},[36,775,225],{"emptyLinePlaceholder":224},[36,777,778],{"class":38,"line":265},[36,779,780],{"class":547},"# computation until it receives at least one message from one of the inputs. It will then run continuously at the\n",[36,782,783],{"class":38,"line":271},[36,784,225],{"emptyLinePlaceholder":224},[36,786,787],{"class":38,"line":287},[36,788,789],{"class":547},"# frequency specified here, regardless of whether it receives more measurements. Defaults to 30 if unspecified.\n",[36,791,792,795,798],{"class":38,"line":300},[36,793,794],{"class":751},"        frequency",[36,796,797],{"class":63},": ",[36,799,800],{"class":243},"30.0\n",[36,802,803],{"class":38,"line":313},[36,804,225],{"emptyLinePlaceholder":224},[36,806,807],{"class":38,"line":326},[36,808,809],{"class":547},"# The period, in seconds, after which we consider a sensor to have timed out. In this event, we carry out a predict\n",[36,811,812],{"class":38,"line":355},[36,813,225],{"emptyLinePlaceholder":224},[36,815,816],{"class":38,"line":361},[36,817,818],{"class":547},"# cycle on the EKF without correcting it. This parameter can be thought of as the minimum frequency with which the\n",[36,820,821],{"class":38,"line":366},[36,822,225],{"emptyLinePlaceholder":224},[36,824,825],{"class":38,"line":378},[36,826,827],{"class":547},"# filter will generate new output. Defaults to 1 / frequency if not specified.\n",[36,829,830,833,835],{"class":38,"line":390},[36,831,832],{"class":751},"        sensor_timeout",[36,834,797],{"class":63},[36,836,837],{"class":243},"0.1\n",[36,839,840],{"class":38,"line":432},[36,841,225],{"emptyLinePlaceholder":224},[36,843,844],{"class":38,"line":438},[36,845,846],{"class":547},"# ekf_localization_node and ukf_localization_node both use a 3D omnidirectional motion model. If this parameter is\n",[36,848,849],{"class":38,"line":443},[36,850,225],{"emptyLinePlaceholder":224},[36,852,853],{"class":38,"line":454},[36,854,855],{"class":547},"# set to true, no 3D information will be used in your state estimate. Use this if you are operating in a planar\n",[36,857,858],{"class":38,"line":466},[36,859,225],{"emptyLinePlaceholder":224},[36,861,862],{"class":38,"line":476},[36,863,864],{"class":547},"# environment and want to ignore the effect of small variations in the ground plane that might otherwise be detected\n",[36,866,867],{"class":38,"line":503},[36,868,225],{"emptyLinePlaceholder":224},[36,870,871],{"class":38,"line":509},[36,872,873],{"class":547},"# by, for example, an IMU. Defaults to false if unspecified.\n",[36,875,877,880,882],{"class":38,"line":876},27,[36,878,879],{"class":751},"        two_d_mode",[36,881,797],{"class":63},[36,883,884],{"class":243},"false\n",[36,886,888],{"class":38,"line":887},28,[36,889,225],{"emptyLinePlaceholder":224},[36,891,893],{"class":38,"line":892},29,[36,894,895],{"class":547},"# Use this parameter to provide an offset to the transform generated by ekf_localization_node. This can be used for\n",[36,897,899],{"class":38,"line":898},30,[36,900,225],{"emptyLinePlaceholder":224},[36,902,904],{"class":38,"line":903},31,[36,905,906],{"class":547},"# future dating the transform, which is required for interaction with some other packages. Defaults to 0.0 if\n",[36,908,910],{"class":38,"line":909},32,[36,911,225],{"emptyLinePlaceholder":224},[36,913,915],{"class":38,"line":914},33,[36,916,917],{"class":547},"# unspecified.\n",[36,919,921,924,926],{"class":38,"line":920},34,[36,922,923],{"class":751},"        transform_time_offset",[36,925,797],{"class":63},[36,927,928],{"class":243},"0.0\n",[36,930,932],{"class":38,"line":931},35,[36,933,225],{"emptyLinePlaceholder":224},[36,935,937],{"class":38,"line":936},36,[36,938,939],{"class":547},"# Use this parameter to provide specify how long the tf listener should wait for a transform to become available. \n",[36,941,943],{"class":38,"line":942},37,[36,944,225],{"emptyLinePlaceholder":224},[36,946,948],{"class":38,"line":947},38,[36,949,950],{"class":547},"# Defaults to 0.0 if unspecified.\n",[36,952,954,957,959],{"class":38,"line":953},39,[36,955,956],{"class":751},"        transform_timeout",[36,958,797],{"class":63},[36,960,928],{"class":243},[36,962,964],{"class":38,"line":963},40,[36,965,225],{"emptyLinePlaceholder":224},[36,967,969],{"class":38,"line":968},41,[36,970,971],{"class":547},"# If you're having trouble, try setting this to true, and then echo the /diagnostics_agg topic to see if the node is\n",[36,973,975],{"class":38,"line":974},42,[36,976,225],{"emptyLinePlaceholder":224},[36,978,980],{"class":38,"line":979},43,[36,981,982],{"class":547},"# unhappy with any settings or data.\n",[36,984,986,989,991],{"class":38,"line":985},44,[36,987,988],{"class":751},"        print_diagnostics",[36,990,797],{"class":63},[36,992,993],{"class":243},"true\n",[36,995,997],{"class":38,"line":996},45,[36,998,225],{"emptyLinePlaceholder":224},[36,1000,1002],{"class":38,"line":1001},46,[36,1003,1004],{"class":547},"# Debug settings. Not for the faint of heart. Outputs a ludicrous amount of information to the file specified by\n",[36,1006,1008],{"class":38,"line":1007},47,[36,1009,225],{"emptyLinePlaceholder":224},[36,1011,1013],{"class":38,"line":1012},48,[36,1014,1015],{"class":547},"# debug_out_file. I hope you like matrices! Please note that setting this to true will have strongly deleterious\n",[36,1017,1019],{"class":38,"line":1018},49,[36,1020,225],{"emptyLinePlaceholder":224},[36,1022,1024],{"class":38,"line":1023},50,[36,1025,1026],{"class":547},"# effects on the performance of the node. Defaults to false if unspecified.\n",[36,1028,1030,1033,1035],{"class":38,"line":1029},51,[36,1031,1032],{"class":751},"        debug",[36,1034,797],{"class":63},[36,1036,884],{"class":243},[36,1038,1040],{"class":38,"line":1039},52,[36,1041,225],{"emptyLinePlaceholder":224},[36,1043,1045],{"class":38,"line":1044},53,[36,1046,1047],{"class":547},"# Defaults to \"robot_localization_debug.txt\" if unspecified. Please specify the full path.\n",[36,1049,1051,1054,1056],{"class":38,"line":1050},54,[36,1052,1053],{"class":751},"        debug_out_file",[36,1055,797],{"class":63},[36,1057,1058],{"class":46},"/path/to/debug/file.txt\n",[36,1060,1062],{"class":38,"line":1061},55,[36,1063,225],{"emptyLinePlaceholder":224},[36,1065,1067],{"class":38,"line":1066},56,[36,1068,1069],{"class":547},"# Whether we'll allow old measurements to cause a re-publication of the updated state\n",[36,1071,1073,1076,1078],{"class":38,"line":1072},57,[36,1074,1075],{"class":751},"        permit_corrected_publication",[36,1077,797],{"class":63},[36,1079,884],{"class":243},[36,1081,1083],{"class":38,"line":1082},58,[36,1084,225],{"emptyLinePlaceholder":224},[36,1086,1088],{"class":38,"line":1087},59,[36,1089,1090],{"class":547},"# Whether to publish the acceleration state. Defaults to false if unspecified.\n",[36,1092,1094,1097,1099],{"class":38,"line":1093},60,[36,1095,1096],{"class":751},"        publish_acceleration",[36,1098,797],{"class":63},[36,1100,884],{"class":243},[36,1102,1104],{"class":38,"line":1103},61,[36,1105,225],{"emptyLinePlaceholder":224},[36,1107,1109],{"class":38,"line":1108},62,[36,1110,1111],{"class":547},"# Whether to broadcast the transformation over the /tf topic. Defaults to true if unspecified.\n",[36,1113,1115,1118,1120],{"class":38,"line":1114},63,[36,1116,1117],{"class":751},"        publish_tf",[36,1119,797],{"class":63},[36,1121,993],{"class":243},[36,1123,1125],{"class":38,"line":1124},64,[36,1126,225],{"emptyLinePlaceholder":224},[36,1128,1130],{"class":38,"line":1129},65,[36,1131,1132],{"class":547},"# REP-105 (http://www.ros.org/reps/rep-0105.html) specifies four principal coordinate frames: base_link, odom, map, and\n",[36,1134,1136],{"class":38,"line":1135},66,[36,1137,225],{"emptyLinePlaceholder":224},[36,1139,1141],{"class":38,"line":1140},67,[36,1142,1143],{"class":547},"# earth. base_link is the coordinate frame that is affixed to the robot. Both odom and map are world-fixed frames.\n",[36,1145,1147],{"class":38,"line":1146},68,[36,1148,225],{"emptyLinePlaceholder":224},[36,1150,1152],{"class":38,"line":1151},69,[36,1153,1154],{"class":547},"# The robot's position in the odom frame will drift over time, but is accurate in the short term and should be\n",[36,1156,1158],{"class":38,"line":1157},70,[36,1159,225],{"emptyLinePlaceholder":224},[36,1161,1163],{"class":38,"line":1162},71,[36,1164,1165],{"class":547},"# continuous. The odom frame is therefore the best frame for executing local motion plans. The map frame, like the odom\n",[36,1167,1169],{"class":38,"line":1168},72,[36,1170,225],{"emptyLinePlaceholder":224},[36,1172,1174],{"class":38,"line":1173},73,[36,1175,1176],{"class":547},"# frame, is a world-fixed coordinate frame, and while it contains the most globally accurate position estimate for your\n",[36,1178,1180],{"class":38,"line":1179},74,[36,1181,225],{"emptyLinePlaceholder":224},[36,1183,1185],{"class":38,"line":1184},75,[36,1186,1187],{"class":547},"# robot, it is subject to discrete jumps, e.g., due to the fusion of GPS data or a correction from a map-based\n",[36,1189,1191],{"class":38,"line":1190},76,[36,1192,225],{"emptyLinePlaceholder":224},[36,1194,1196],{"class":38,"line":1195},77,[36,1197,1198],{"class":547},"# localization node. The earth frame is used to relate multiple map frames by giving them a common reference frame.\n",[36,1200,1202],{"class":38,"line":1201},78,[36,1203,225],{"emptyLinePlaceholder":224},[36,1205,1207],{"class":38,"line":1206},79,[36,1208,1209],{"class":547},"# ekf_localization_node and ukf_localization_node are not concerned with the earth frame.\n",[36,1211,1213],{"class":38,"line":1212},80,[36,1214,225],{"emptyLinePlaceholder":224},[36,1216,1218],{"class":38,"line":1217},81,[36,1219,1220],{"class":547},"# Here is how to use the following settings:\n",[36,1222,1224],{"class":38,"line":1223},82,[36,1225,225],{"emptyLinePlaceholder":224},[36,1227,1229],{"class":38,"line":1228},83,[36,1230,1231],{"class":547},"# 1. Set the map_frame, odom_frame, and base_link frames to the appropriate frame names for your system.\n",[36,1233,1235],{"class":38,"line":1234},84,[36,1236,225],{"emptyLinePlaceholder":224},[36,1238,1240],{"class":38,"line":1239},85,[36,1241,1242],{"class":547},"#     1a. If your system does not have a map_frame, just remove it, and make sure \"world_frame\" is set to the value of\n",[36,1244,1246],{"class":38,"line":1245},86,[36,1247,225],{"emptyLinePlaceholder":224},[36,1249,1251],{"class":38,"line":1250},87,[36,1252,1253],{"class":547},"#         odom_frame.\n",[36,1255,1257],{"class":38,"line":1256},88,[36,1258,225],{"emptyLinePlaceholder":224},[36,1260,1262],{"class":38,"line":1261},89,[36,1263,1264],{"class":547},"# 2. If you are fusing continuous position data such as wheel encoder odometry, visual odometry, or IMU data, set\n",[36,1266,1268],{"class":38,"line":1267},90,[36,1269,225],{"emptyLinePlaceholder":224},[36,1271,1273],{"class":38,"line":1272},91,[36,1274,1275],{"class":547},"#   \"world_frame\" to your odom_frame value. This is the default behavior for robot_localization's state estimation nodes.\n",[36,1277,1279],{"class":38,"line":1278},92,[36,1280,225],{"emptyLinePlaceholder":224},[36,1282,1284],{"class":38,"line":1283},93,[36,1285,1286],{"class":547},"# 3. If you are fusing global absolute position data that is subject to discrete jumps (e.g., GPS or position updates\n",[36,1288,1290],{"class":38,"line":1289},94,[36,1291,225],{"emptyLinePlaceholder":224},[36,1293,1295],{"class":38,"line":1294},95,[36,1296,1297],{"class":547},"# from landmark observations) then:\n",[36,1299,1301],{"class":38,"line":1300},96,[36,1302,225],{"emptyLinePlaceholder":224},[36,1304,1306],{"class":38,"line":1305},97,[36,1307,1308],{"class":547},"#     3a. Set your \"world_frame\" to your map_frame value\n",[36,1310,1312],{"class":38,"line":1311},98,[36,1313,225],{"emptyLinePlaceholder":224},[36,1315,1317],{"class":38,"line":1316},99,[36,1318,1319],{"class":547},"#     3b. MAKE SURE something else is generating the odom->base_link transform. Note that this can even be another state\n",[36,1321,1323],{"class":38,"line":1322},100,[36,1324,225],{"emptyLinePlaceholder":224},[36,1326,1328],{"class":38,"line":1327},101,[36,1329,1330],{"class":547},"#         estimation node from robot_localization! However, that instance should *not* fuse the global data.\n",[36,1332,1334,1337,1339,1342],{"class":38,"line":1333},102,[36,1335,1336],{"class":751},"        map_frame",[36,1338,797],{"class":63},[36,1340,1341],{"class":46},"map",[36,1343,1344],{"class":547},"              # Defaults to \"map\" if unspecified\n",[36,1346,1348,1351,1353,1356],{"class":38,"line":1347},103,[36,1349,1350],{"class":751},"        odom_frame",[36,1352,797],{"class":63},[36,1354,1355],{"class":46},"odom",[36,1357,1358],{"class":547},"            # Defaults to \"odom\" if unspecified\n",[36,1360,1362,1365,1367,1370],{"class":38,"line":1361},104,[36,1363,1364],{"class":751},"        base_link_frame",[36,1366,797],{"class":63},[36,1368,1369],{"class":46},"base_footprint",[36,1371,1372],{"class":547},"  # Defaults to \"base_link\" if unspecified\n",[36,1374,1376,1379,1381,1383],{"class":38,"line":1375},105,[36,1377,1378],{"class":751},"        world_frame",[36,1380,797],{"class":63},[36,1382,1355],{"class":46},[36,1384,1385],{"class":547},"           # Defaults to the value of odom_frame if unspecified\n",[36,1387,1389],{"class":38,"line":1388},106,[36,1390,225],{"emptyLinePlaceholder":224},[36,1392,1394],{"class":38,"line":1393},107,[36,1395,1396],{"class":547},"# The filter accepts an arbitrary number of inputs from each input message type (nav_msgs/Odometry,\n",[36,1398,1400],{"class":38,"line":1399},108,[36,1401,225],{"emptyLinePlaceholder":224},[36,1403,1405],{"class":38,"line":1404},109,[36,1406,1407],{"class":547},"# geometry_msgs/PoseWithCovarianceStamped, geometry_msgs/TwistWithCovarianceStamped,\n",[36,1409,1411],{"class":38,"line":1410},110,[36,1412,225],{"emptyLinePlaceholder":224},[36,1414,1416],{"class":38,"line":1415},111,[36,1417,1418],{"class":547},"# sensor_msgs/Imu). To add an input, simply append the next number in the sequence to its \"base\" name, e.g., odom0,\n",[36,1420,1422],{"class":38,"line":1421},112,[36,1423,225],{"emptyLinePlaceholder":224},[36,1425,1427],{"class":38,"line":1426},113,[36,1428,1429],{"class":547},"# odom1, twist0, twist1, imu0, imu1, imu2, etc. The value should be the topic name. These parameters obviously have no\n",[36,1431,1433],{"class":38,"line":1432},114,[36,1434,225],{"emptyLinePlaceholder":224},[36,1436,1438],{"class":38,"line":1437},115,[36,1439,1440],{"class":547},"# default values, and must be specified.\n",[36,1442,1444,1447,1449],{"class":38,"line":1443},116,[36,1445,1446],{"class":751},"        odom0",[36,1448,797],{"class":63},[36,1450,1451],{"class":46},"odom\n",[36,1453,1455],{"class":38,"line":1454},117,[36,1456,225],{"emptyLinePlaceholder":224},[36,1458,1460],{"class":38,"line":1459},118,[36,1461,1462],{"class":547},"# Each sensor reading updates some or all of the filter's state. These options give you greater control over which\n",[36,1464,1466],{"class":38,"line":1465},119,[36,1467,225],{"emptyLinePlaceholder":224},[36,1469,1471],{"class":38,"line":1470},120,[36,1472,1473],{"class":547},"# values from each measurement are fed to the filter. For example, if you have an odometry message as input, but only\n",[36,1475,1477],{"class":38,"line":1476},121,[36,1478,225],{"emptyLinePlaceholder":224},[36,1480,1482],{"class":38,"line":1481},122,[36,1483,1484],{"class":547},"# want to use its Z position value, then set the entire vector to false, except for the third entry. The order of the\n",[36,1486,1488],{"class":38,"line":1487},123,[36,1489,225],{"emptyLinePlaceholder":224},[36,1491,1493],{"class":38,"line":1492},124,[36,1494,1495],{"class":547},"# values is x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Note that not some message types\n",[36,1497,1499],{"class":38,"line":1498},125,[36,1500,225],{"emptyLinePlaceholder":224},[36,1502,1504],{"class":38,"line":1503},126,[36,1505,1506],{"class":547},"# do not provide some of the state variables estimated by the filter. For example, a TwistWithCovarianceStamped message\n",[36,1508,1510],{"class":38,"line":1509},127,[36,1511,225],{"emptyLinePlaceholder":224},[36,1513,1515],{"class":38,"line":1514},128,[36,1516,1517],{"class":547},"# has no pose information, so the first six values would be meaningless in that case. Each vector defaults to all false\n",[36,1519,1521],{"class":38,"line":1520},129,[36,1522,225],{"emptyLinePlaceholder":224},[36,1524,1526],{"class":38,"line":1525},130,[36,1527,1528],{"class":547},"# if unspecified, effectively making this parameter required for each sensor.\n",[36,1530,1532,1535,1538,1541,1544,1546,1548,1550],{"class":38,"line":1531},131,[36,1533,1534],{"class":751},"        odom0_config",[36,1536,1537],{"class":63},": [",[36,1539,1540],{"class":243},"false",[36,1542,1543],{"class":63},",  ",[36,1545,1540],{"class":243},[36,1547,1543],{"class":63},[36,1549,1540],{"class":243},[36,1551,284],{"class":63},[36,1553,1555,1558,1560,1562,1564,1566],{"class":38,"line":1554},132,[36,1556,1557],{"class":243},"                       false",[36,1559,346],{"class":63},[36,1561,1540],{"class":243},[36,1563,346],{"class":63},[36,1565,1540],{"class":243},[36,1567,284],{"class":63},[36,1569,1571,1574,1576,1578,1580,1582],{"class":38,"line":1570},133,[36,1572,1573],{"class":243},"                       true",[36,1575,346],{"class":63},[36,1577,1540],{"class":243},[36,1579,346],{"class":63},[36,1581,1540],{"class":243},[36,1583,284],{"class":63},[36,1585,1587,1589,1591,1593,1595,1597],{"class":38,"line":1586},134,[36,1588,1557],{"class":243},[36,1590,346],{"class":63},[36,1592,1540],{"class":243},[36,1594,346],{"class":63},[36,1596,1540],{"class":243},[36,1598,284],{"class":63},[36,1600,1602,1604,1606,1608,1610,1612],{"class":38,"line":1601},135,[36,1603,1557],{"class":243},[36,1605,346],{"class":63},[36,1607,1540],{"class":243},[36,1609,346],{"class":63},[36,1611,1540],{"class":243},[36,1613,429],{"class":63},[36,1615,1617],{"class":38,"line":1616},136,[36,1618,225],{"emptyLinePlaceholder":224},[36,1620,1622],{"class":38,"line":1621},137,[36,1623,1624],{"class":547},"# If you have high-frequency data or are running with a low frequency parameter value, then you may want to increase\n",[36,1626,1628],{"class":38,"line":1627},138,[36,1629,225],{"emptyLinePlaceholder":224},[36,1631,1633],{"class":38,"line":1632},139,[36,1634,1635],{"class":547},"# the size of the subscription queue so that more measurements are fused.\n",[36,1637,1639,1642,1644],{"class":38,"line":1638},140,[36,1640,1641],{"class":751},"        odom0_queue_size",[36,1643,797],{"class":63},[36,1645,1646],{"class":243},"2\n",[36,1648,1650],{"class":38,"line":1649},141,[36,1651,225],{"emptyLinePlaceholder":224},[36,1653,1655],{"class":38,"line":1654},142,[36,1656,1657],{"class":547},"# [ADVANCED] Large messages in ROS can exhibit strange behavior when they arrive at a high frequency. This is a result\n",[36,1659,1661],{"class":38,"line":1660},143,[36,1662,225],{"emptyLinePlaceholder":224},[36,1664,1666],{"class":38,"line":1665},144,[36,1667,1668],{"class":547},"# of Nagle's algorithm. This option tells the ROS subscriber to use the tcpNoDelay option, which disables Nagle's\n",[36,1670,1672],{"class":38,"line":1671},145,[36,1673,225],{"emptyLinePlaceholder":224},[36,1675,1677],{"class":38,"line":1676},146,[36,1678,1679],{"class":547},"# algorithm.\n",[36,1681,1683,1686,1688],{"class":38,"line":1682},147,[36,1684,1685],{"class":751},"        odom0_nodelay",[36,1687,797],{"class":63},[36,1689,884],{"class":243},[36,1691,1693],{"class":38,"line":1692},148,[36,1694,225],{"emptyLinePlaceholder":224},[36,1696,1698],{"class":38,"line":1697},149,[36,1699,1700],{"class":547},"# [ADVANCED] When measuring one pose variable with two sensors, a situation can arise in which both sensors under-\n",[36,1702,1704],{"class":38,"line":1703},150,[36,1705,225],{"emptyLinePlaceholder":224},[36,1707,1709],{"class":38,"line":1708},151,[36,1710,1711],{"class":547},"# report their covariances. This can lead to the filter rapidly jumping back and forth between each measurement as they\n",[36,1713,1715],{"class":38,"line":1714},152,[36,1716,225],{"emptyLinePlaceholder":224},[36,1718,1720],{"class":38,"line":1719},153,[36,1721,1722],{"class":547},"# arrive. In these cases, it often makes sense to (a) correct the measurement covariances, or (b) if velocity is also\n",[36,1724,1726],{"class":38,"line":1725},154,[36,1727,225],{"emptyLinePlaceholder":224},[36,1729,1731],{"class":38,"line":1730},155,[36,1732,1733],{"class":547},"# measured by one of the sensors, let one sensor measure pose, and the other velocity. However, doing (a) or (b) isn't\n",[36,1735,1737],{"class":38,"line":1736},156,[36,1738,225],{"emptyLinePlaceholder":224},[36,1740,1742],{"class":38,"line":1741},157,[36,1743,1744],{"class":547},"# always feasible, and so we expose the differential parameter. When differential mode is enabled, all absolute pose\n",[36,1746,1748],{"class":38,"line":1747},158,[36,1749,225],{"emptyLinePlaceholder":224},[36,1751,1753],{"class":38,"line":1752},159,[36,1754,1755],{"class":547},"# data is converted to velocity data by differentiating the absolute pose measurements. These velocities are then\n",[36,1757,1759],{"class":38,"line":1758},160,[36,1760,225],{"emptyLinePlaceholder":224},[36,1762,1764],{"class":38,"line":1763},161,[36,1765,1766],{"class":547},"# integrated as usual. NOTE: this only applies to sensors that provide pose measurements; setting differential to true\n",[36,1768,1770],{"class":38,"line":1769},162,[36,1771,225],{"emptyLinePlaceholder":224},[36,1773,1775],{"class":38,"line":1774},163,[36,1776,1777],{"class":547},"# for twist measurements has no effect.\n",[36,1779,1781,1784,1786],{"class":38,"line":1780},164,[36,1782,1783],{"class":751},"        odom0_differential",[36,1785,797],{"class":63},[36,1787,884],{"class":243},[36,1789,1791],{"class":38,"line":1790},165,[36,1792,225],{"emptyLinePlaceholder":224},[36,1794,1796],{"class":38,"line":1795},166,[36,1797,1798],{"class":547},"# [ADVANCED] When the node starts, if this parameter is true, then the first measurement is treated as a \"zero point\"\n",[36,1800,1802],{"class":38,"line":1801},167,[36,1803,225],{"emptyLinePlaceholder":224},[36,1805,1807],{"class":38,"line":1806},168,[36,1808,1809],{"class":547},"# for all future measurements. While you can achieve the same effect with the differential paremeter, the key\n",[36,1811,1813],{"class":38,"line":1812},169,[36,1814,225],{"emptyLinePlaceholder":224},[36,1816,1818],{"class":38,"line":1817},170,[36,1819,1820],{"class":547},"# difference is that the relative parameter doesn't cause the measurement to be converted to a velocity before\n",[36,1822,1824],{"class":38,"line":1823},171,[36,1825,225],{"emptyLinePlaceholder":224},[36,1827,1829],{"class":38,"line":1828},172,[36,1830,1831],{"class":547},"# integrating it. If you simply want your measurements to start at 0 for a given sensor, set this to true.\n",[36,1833,1835,1838,1840],{"class":38,"line":1834},173,[36,1836,1837],{"class":751},"        odom0_relative",[36,1839,797],{"class":63},[36,1841,884],{"class":243},[36,1843,1845],{"class":38,"line":1844},174,[36,1846,225],{"emptyLinePlaceholder":224},[36,1848,1850],{"class":38,"line":1849},175,[36,1851,1852],{"class":547},"# [ADVANCED] If your data is subject to outliers, use these threshold settings, expressed as Mahalanobis distances, to\n",[36,1854,1856],{"class":38,"line":1855},176,[36,1857,225],{"emptyLinePlaceholder":224},[36,1859,1861],{"class":38,"line":1860},177,[36,1862,1863],{"class":547},"# control how far away from the current vehicle state a sensor measurement is permitted to be. Each defaults to\n",[36,1865,1867],{"class":38,"line":1866},178,[36,1868,225],{"emptyLinePlaceholder":224},[36,1870,1872],{"class":38,"line":1871},179,[36,1873,1874],{"class":547},"# numeric_limits\u003Cdouble>::max() if unspecified. It is strongly recommended that these parameters be removed if not\n",[36,1876,1878],{"class":38,"line":1877},180,[36,1879,225],{"emptyLinePlaceholder":224},[36,1881,1883],{"class":38,"line":1882},181,[36,1884,1885],{"class":547},"# required. Data is specified at the level of pose and twist variables, rather than for each variable in isolation.\n",[36,1887,1889],{"class":38,"line":1888},182,[36,1890,225],{"emptyLinePlaceholder":224},[36,1892,1894],{"class":38,"line":1893},183,[36,1895,1896],{"class":547},"# For messages that have both pose and twist data, the parameter specifies to which part of the message we are applying\n",[36,1898,1900],{"class":38,"line":1899},184,[36,1901,225],{"emptyLinePlaceholder":224},[36,1903,1905],{"class":38,"line":1904},185,[36,1906,1907],{"class":547},"# the thresholds.\n",[36,1909,1911,1914,1916],{"class":38,"line":1910},186,[36,1912,1913],{"class":751},"        odom0_pose_rejection_threshold",[36,1915,797],{"class":63},[36,1917,1918],{"class":243},"5.0\n",[36,1920,1922,1925,1927],{"class":38,"line":1921},187,[36,1923,1924],{"class":751},"        odom0_twist_rejection_threshold",[36,1926,797],{"class":63},[36,1928,1929],{"class":243},"1.0\n",[36,1931,1933],{"class":38,"line":1932},188,[36,1934,225],{"emptyLinePlaceholder":224},[36,1936,1938,1941,1943],{"class":38,"line":1937},189,[36,1939,1940],{"class":751},"        imu0",[36,1942,797],{"class":63},[36,1944,1945],{"class":46},"imu\n",[36,1947,1949,1952,1954,1956,1958,1960,1962,1964],{"class":38,"line":1948},190,[36,1950,1951],{"class":751},"        imu0_config",[36,1953,1537],{"class":63},[36,1955,1540],{"class":243},[36,1957,346],{"class":63},[36,1959,1540],{"class":243},[36,1961,346],{"class":63},[36,1963,1540],{"class":243},[36,1965,284],{"class":63},[36,1967,1969,1972,1974,1976,1978,1981],{"class":38,"line":1968},191,[36,1970,1971],{"class":243},"                      false",[36,1973,346],{"class":63},[36,1975,1540],{"class":243},[36,1977,1543],{"class":63},[36,1979,1980],{"class":243},"true",[36,1982,284],{"class":63},[36,1984,1986,1988,1990,1992,1994,1996],{"class":38,"line":1985},192,[36,1987,1971],{"class":243},[36,1989,346],{"class":63},[36,1991,1540],{"class":243},[36,1993,346],{"class":63},[36,1995,1540],{"class":243},[36,1997,284],{"class":63},[36,1999,2001,2003,2005,2007,2009,2011],{"class":38,"line":2000},193,[36,2002,1971],{"class":243},[36,2004,346],{"class":63},[36,2006,1540],{"class":243},[36,2008,1543],{"class":63},[36,2010,1980],{"class":243},[36,2012,284],{"class":63},[36,2014,2016,2018,2020,2022,2024,2026],{"class":38,"line":2015},194,[36,2017,1971],{"class":243},[36,2019,346],{"class":63},[36,2021,1540],{"class":243},[36,2023,1543],{"class":63},[36,2025,1540],{"class":243},[36,2027,429],{"class":63},[36,2029,2031,2034,2036],{"class":38,"line":2030},195,[36,2032,2033],{"class":751},"        imu0_nodelay",[36,2035,797],{"class":63},[36,2037,884],{"class":243},[36,2039,2041,2044,2046],{"class":38,"line":2040},196,[36,2042,2043],{"class":751},"        imu0_differential",[36,2045,797],{"class":63},[36,2047,884],{"class":243},[36,2049,2051,2054,2056],{"class":38,"line":2050},197,[36,2052,2053],{"class":751},"        imu0_relative",[36,2055,797],{"class":63},[36,2057,993],{"class":243},[36,2059,2061,2064,2066],{"class":38,"line":2060},198,[36,2062,2063],{"class":751},"        imu0_queue_size",[36,2065,797],{"class":63},[36,2067,2068],{"class":243},"5\n",[36,2070,2072,2075,2077,2080],{"class":38,"line":2071},199,[36,2073,2074],{"class":751},"        imu0_pose_rejection_threshold",[36,2076,797],{"class":63},[36,2078,2079],{"class":243},"0.8",[36,2081,2082],{"class":547},"                 # Note the difference in parameter names\n",[36,2084,2086,2089,2091,2093],{"class":38,"line":2085},200,[36,2087,2088],{"class":751},"        imu0_twist_rejection_threshold",[36,2090,797],{"class":63},[36,2092,2079],{"class":243},[36,2094,2095],{"class":547},"                #\n",[36,2097,2099,2102,2104,2106],{"class":38,"line":2098},201,[36,2100,2101],{"class":751},"        imu0_linear_acceleration_rejection_threshold",[36,2103,797],{"class":63},[36,2105,2079],{"class":243},[36,2107,2108],{"class":547},"  #\n",[36,2110,2112],{"class":38,"line":2111},202,[36,2113,225],{"emptyLinePlaceholder":224},[36,2115,2117],{"class":38,"line":2116},203,[36,2118,2119],{"class":547},"# [ADVANCED] Some IMUs automatically remove acceleration due to gravity, and others don't. If yours doesn't, please set\n",[36,2121,2123],{"class":38,"line":2122},204,[36,2124,225],{"emptyLinePlaceholder":224},[36,2126,2128],{"class":38,"line":2127},205,[36,2129,2130],{"class":547},"# this to true, and *make sure* your data conforms to REP-103, specifically, that the data is in ENU frame.\n",[36,2132,2134,2137,2139],{"class":38,"line":2133},206,[36,2135,2136],{"class":751},"        imu0_remove_gravitational_acceleration",[36,2138,797],{"class":63},[36,2140,993],{"class":243},[36,2142,2144],{"class":38,"line":2143},207,[36,2145,225],{"emptyLinePlaceholder":224},[36,2147,2149],{"class":38,"line":2148},208,[36,2150,2151],{"class":547},"# [ADVANCED]  The EKF and UKF models follow a standard predict/correct cycle. During prediction, if there is no\n",[36,2153,2155],{"class":38,"line":2154},209,[36,2156,225],{"emptyLinePlaceholder":224},[36,2158,2160],{"class":38,"line":2159},210,[36,2161,2162],{"class":547},"# acceleration reference, the velocity at time t+1 is simply predicted to be the same as the velocity at time t. During\n",[36,2164,2166],{"class":38,"line":2165},211,[36,2167,225],{"emptyLinePlaceholder":224},[36,2169,2171],{"class":38,"line":2170},212,[36,2172,2173],{"class":547},"# correction, this predicted value is fused with the measured value to produce the new velocity estimate. This can be\n",[36,2175,2177],{"class":38,"line":2176},213,[36,2178,225],{"emptyLinePlaceholder":224},[36,2180,2182],{"class":38,"line":2181},214,[36,2183,2184],{"class":547},"# problematic, as the final velocity will effectively be a weighted average of the old velocity and the new one. When\n",[36,2186,2188],{"class":38,"line":2187},215,[36,2189,225],{"emptyLinePlaceholder":224},[36,2191,2193],{"class":38,"line":2192},216,[36,2194,2195],{"class":547},"# this velocity is the integrated into a new pose, the result can be sluggish covergence. This effect is especially\n",[36,2197,2199],{"class":38,"line":2198},217,[36,2200,225],{"emptyLinePlaceholder":224},[36,2202,2204],{"class":38,"line":2203},218,[36,2205,2206],{"class":547},"# noticeable with LIDAR data during rotations. To get around it, users can try inflating the process_noise_covariance\n",[36,2208,2210],{"class":38,"line":2209},219,[36,2211,225],{"emptyLinePlaceholder":224},[36,2213,2215],{"class":38,"line":2214},220,[36,2216,2217],{"class":547},"# for the velocity variable in question, or decrease the  variance of the variable in question in the measurement\n",[36,2219,2221],{"class":38,"line":2220},221,[36,2222,225],{"emptyLinePlaceholder":224},[36,2224,2226],{"class":38,"line":2225},222,[36,2227,2228],{"class":547},"# itself. In addition, users can also take advantage of the control command being issued to the robot at the time we\n",[36,2230,2232],{"class":38,"line":2231},223,[36,2233,225],{"emptyLinePlaceholder":224},[36,2235,2237],{"class":38,"line":2236},224,[36,2238,2239],{"class":547},"# make the prediction. If control is used, it will get converted into an acceleration term, which will be used during\n",[36,2241,2243],{"class":38,"line":2242},225,[36,2244,225],{"emptyLinePlaceholder":224},[36,2246,2248],{"class":38,"line":2247},226,[36,2249,2250],{"class":547},"# predicition. Note that if an acceleration measurement for the variable in question is available from one of the\n",[36,2252,2254],{"class":38,"line":2253},227,[36,2255,225],{"emptyLinePlaceholder":224},[36,2257,2259],{"class":38,"line":2258},228,[36,2260,2261],{"class":547},"# inputs, the control term will be ignored.\n",[36,2263,2265],{"class":38,"line":2264},229,[36,2266,225],{"emptyLinePlaceholder":224},[36,2268,2270],{"class":38,"line":2269},230,[36,2271,2272],{"class":547},"# Whether or not we use the control input during predicition. Defaults to false.\n",[36,2274,2276,2279,2281],{"class":38,"line":2275},231,[36,2277,2278],{"class":751},"        use_control",[36,2280,797],{"class":63},[36,2282,993],{"class":243},[36,2284,2286],{"class":38,"line":2285},232,[36,2287,225],{"emptyLinePlaceholder":224},[36,2289,2291],{"class":38,"line":2290},233,[36,2292,2293],{"class":547},"# Whether the input (assumed to be cmd_vel) is a geometry_msgs/Twist or geometry_msgs/TwistStamped message. Defaults to\n",[36,2295,2297],{"class":38,"line":2296},234,[36,2298,225],{"emptyLinePlaceholder":224},[36,2300,2302],{"class":38,"line":2301},235,[36,2303,2304],{"class":547},"# false.\n",[36,2306,2308,2311,2313],{"class":38,"line":2307},236,[36,2309,2310],{"class":751},"        stamped_control",[36,2312,797],{"class":63},[36,2314,884],{"class":243},[36,2316,2318],{"class":38,"line":2317},237,[36,2319,225],{"emptyLinePlaceholder":224},[36,2321,2323],{"class":38,"line":2322},238,[36,2324,2325],{"class":547},"# The last issued control command will be used in prediction for this period. Defaults to 0.2.\n",[36,2327,2329,2332,2334],{"class":38,"line":2328},239,[36,2330,2331],{"class":751},"        control_timeout",[36,2333,797],{"class":63},[36,2335,2336],{"class":243},"0.2\n",[36,2338,2340],{"class":38,"line":2339},240,[36,2341,225],{"emptyLinePlaceholder":224},[36,2343,2345],{"class":38,"line":2344},241,[36,2346,2347],{"class":547},"# Which velocities are being controlled. Order is vx, vy, vz, vroll, vpitch, vyaw.\n",[36,2349,2351,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378],{"class":38,"line":2350},242,[36,2352,2353],{"class":751},"        control_config",[36,2355,1537],{"class":63},[36,2357,1980],{"class":243},[36,2359,346],{"class":63},[36,2361,1540],{"class":243},[36,2363,346],{"class":63},[36,2365,1540],{"class":243},[36,2367,346],{"class":63},[36,2369,1540],{"class":243},[36,2371,346],{"class":63},[36,2373,1540],{"class":243},[36,2375,346],{"class":63},[36,2377,1980],{"class":243},[36,2379,429],{"class":63},[36,2381,2383],{"class":38,"line":2382},243,[36,2384,225],{"emptyLinePlaceholder":224},[36,2386,2388],{"class":38,"line":2387},244,[36,2389,2390],{"class":547},"# Places limits on how large the acceleration term will be. Should match your robot's kinematics.\n",[36,2392,2394,2397,2399,2402,2404,2407,2409,2411,2413,2415,2417,2419,2421,2424],{"class":38,"line":2393},245,[36,2395,2396],{"class":751},"        acceleration_limits",[36,2398,1537],{"class":63},[36,2400,2401],{"class":243},"1.3",[36,2403,346],{"class":63},[36,2405,2406],{"class":243},"0.0",[36,2408,346],{"class":63},[36,2410,2406],{"class":243},[36,2412,346],{"class":63},[36,2414,2406],{"class":243},[36,2416,346],{"class":63},[36,2418,2406],{"class":243},[36,2420,346],{"class":63},[36,2422,2423],{"class":243},"3.4",[36,2425,429],{"class":63},[36,2427,2429],{"class":38,"line":2428},246,[36,2430,225],{"emptyLinePlaceholder":224},[36,2432,2434],{"class":38,"line":2433},247,[36,2435,2436],{"class":547},"# Acceleration and deceleration limits are not always the same for robots.\n",[36,2438,2440,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2468],{"class":38,"line":2439},248,[36,2441,2442],{"class":751},"        deceleration_limits",[36,2444,1537],{"class":63},[36,2446,2401],{"class":243},[36,2448,346],{"class":63},[36,2450,2406],{"class":243},[36,2452,346],{"class":63},[36,2454,2406],{"class":243},[36,2456,346],{"class":63},[36,2458,2406],{"class":243},[36,2460,346],{"class":63},[36,2462,2406],{"class":243},[36,2464,346],{"class":63},[36,2466,2467],{"class":243},"4.5",[36,2469,429],{"class":63},[36,2471,2473],{"class":38,"line":2472},249,[36,2474,225],{"emptyLinePlaceholder":224},[36,2476,2478],{"class":38,"line":2477},250,[36,2479,2480],{"class":547},"# If your robot cannot instantaneously reach its acceleration limit, the permitted change can be controlled with these\n",[36,2482,2484],{"class":38,"line":2483},251,[36,2485,225],{"emptyLinePlaceholder":224},[36,2487,2489],{"class":38,"line":2488},252,[36,2490,2491],{"class":547},"# gains\n",[36,2493,2495,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2523],{"class":38,"line":2494},253,[36,2496,2497],{"class":751},"        acceleration_gains",[36,2499,1537],{"class":63},[36,2501,2079],{"class":243},[36,2503,346],{"class":63},[36,2505,2406],{"class":243},[36,2507,346],{"class":63},[36,2509,2406],{"class":243},[36,2511,346],{"class":63},[36,2513,2406],{"class":243},[36,2515,346],{"class":63},[36,2517,2406],{"class":243},[36,2519,346],{"class":63},[36,2521,2522],{"class":243},"0.9",[36,2524,429],{"class":63},[36,2526,2528],{"class":38,"line":2527},254,[36,2529,225],{"emptyLinePlaceholder":224},[36,2531,2533],{"class":38,"line":2532},255,[36,2534,2535],{"class":547},"# If your robot cannot instantaneously reach its deceleration limit, the permitted change can be controlled with these\n",[36,2537,2539],{"class":38,"line":2538},256,[36,2540,225],{"emptyLinePlaceholder":224},[36,2542,2544],{"class":38,"line":2543},257,[36,2545,2491],{"class":547},[36,2547,2549,2552,2554,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577],{"class":38,"line":2548},258,[36,2550,2551],{"class":751},"        deceleration_gains",[36,2553,1537],{"class":63},[36,2555,2556],{"class":243},"1.0",[36,2558,346],{"class":63},[36,2560,2406],{"class":243},[36,2562,346],{"class":63},[36,2564,2406],{"class":243},[36,2566,346],{"class":63},[36,2568,2406],{"class":243},[36,2570,346],{"class":63},[36,2572,2406],{"class":243},[36,2574,346],{"class":63},[36,2576,2556],{"class":243},[36,2578,429],{"class":63},[36,2580,2582],{"class":38,"line":2581},259,[36,2583,225],{"emptyLinePlaceholder":224},[36,2585,2587],{"class":38,"line":2586},260,[36,2588,2589],{"class":547},"# [ADVANCED] The process noise covariance matrix can be difficult to tune, and can vary for each application, so it is\n",[36,2591,2593],{"class":38,"line":2592},261,[36,2594,225],{"emptyLinePlaceholder":224},[36,2596,2598],{"class":38,"line":2597},262,[36,2599,2600],{"class":547},"# exposed as a configuration parameter. This matrix represents the noise we add to the total error after each\n",[36,2602,2604],{"class":38,"line":2603},263,[36,2605,225],{"emptyLinePlaceholder":224},[36,2607,2609],{"class":38,"line":2608},264,[36,2610,2611],{"class":547},"# prediction step. The better the omnidirectional motion model matches your system, the smaller these values can be.\n",[36,2613,2615],{"class":38,"line":2614},265,[36,2616,225],{"emptyLinePlaceholder":224},[36,2618,2620],{"class":38,"line":2619},266,[36,2621,2622],{"class":547},"# However, if users find that a given variable is slow to converge, one approach is to increase the\n",[36,2624,2626],{"class":38,"line":2625},267,[36,2627,225],{"emptyLinePlaceholder":224},[36,2629,2631],{"class":38,"line":2630},268,[36,2632,2633],{"class":547},"# process_noise_covariance diagonal value for the variable in question, which will cause the filter's predicted error\n",[36,2635,2637],{"class":38,"line":2636},269,[36,2638,225],{"emptyLinePlaceholder":224},[36,2640,2642],{"class":38,"line":2641},270,[36,2643,2644],{"class":547},"# to be larger, which will cause the filter to trust the incoming measurement more during correction. The values are\n",[36,2646,2648],{"class":38,"line":2647},271,[36,2649,225],{"emptyLinePlaceholder":224},[36,2651,2653],{"class":38,"line":2652},272,[36,2654,2655],{"class":547},"# ordered as x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Defaults to the matrix below if\n",[36,2657,2659],{"class":38,"line":2658},273,[36,2660,225],{"emptyLinePlaceholder":224},[36,2662,2664],{"class":38,"line":2663},274,[36,2665,917],{"class":547},[36,2667,2669,2672,2674,2677,2679,2681,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735],{"class":38,"line":2668},275,[36,2670,2671],{"class":751},"        process_noise_covariance",[36,2673,1537],{"class":63},[36,2675,2676],{"class":243},"0.05",[36,2678,346],{"class":63},[36,2680,2406],{"class":243},[36,2682,2683],{"class":63},",    ",[36,2685,2406],{"class":243},[36,2687,2683],{"class":63},[36,2689,2406],{"class":243},[36,2691,2683],{"class":63},[36,2693,2406],{"class":243},[36,2695,2683],{"class":63},[36,2697,2406],{"class":243},[36,2699,2683],{"class":63},[36,2701,2406],{"class":243},[36,2703,2704],{"class":63},",     ",[36,2706,2406],{"class":243},[36,2708,2704],{"class":63},[36,2710,2406],{"class":243},[36,2712,2683],{"class":63},[36,2714,2406],{"class":243},[36,2716,2683],{"class":63},[36,2718,2406],{"class":243},[36,2720,2683],{"class":63},[36,2722,2406],{"class":243},[36,2724,2683],{"class":63},[36,2726,2406],{"class":243},[36,2728,2683],{"class":63},[36,2730,2406],{"class":243},[36,2732,2683],{"class":63},[36,2734,2406],{"class":243},[36,2736,284],{"class":63},[36,2738,2740,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799],{"class":38,"line":2739},276,[36,2741,2742],{"class":243},"                                   0.0",[36,2744,2683],{"class":63},[36,2746,2676],{"class":243},[36,2748,346],{"class":63},[36,2750,2406],{"class":243},[36,2752,2683],{"class":63},[36,2754,2406],{"class":243},[36,2756,2683],{"class":63},[36,2758,2406],{"class":243},[36,2760,2683],{"class":63},[36,2762,2406],{"class":243},[36,2764,2683],{"class":63},[36,2766,2406],{"class":243},[36,2768,2704],{"class":63},[36,2770,2406],{"class":243},[36,2772,2704],{"class":63},[36,2774,2406],{"class":243},[36,2776,2683],{"class":63},[36,2778,2406],{"class":243},[36,2780,2683],{"class":63},[36,2782,2406],{"class":243},[36,2784,2683],{"class":63},[36,2786,2406],{"class":243},[36,2788,2683],{"class":63},[36,2790,2406],{"class":243},[36,2792,2683],{"class":63},[36,2794,2406],{"class":243},[36,2796,2683],{"class":63},[36,2798,2406],{"class":243},[36,2800,284],{"class":63},[36,2802,2804,2806,2808,2810,2812,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863],{"class":38,"line":2803},277,[36,2805,2742],{"class":243},[36,2807,2683],{"class":63},[36,2809,2406],{"class":243},[36,2811,2683],{"class":63},[36,2813,2814],{"class":243},"0.06",[36,2816,346],{"class":63},[36,2818,2406],{"class":243},[36,2820,2683],{"class":63},[36,2822,2406],{"class":243},[36,2824,2683],{"class":63},[36,2826,2406],{"class":243},[36,2828,2683],{"class":63},[36,2830,2406],{"class":243},[36,2832,2704],{"class":63},[36,2834,2406],{"class":243},[36,2836,2704],{"class":63},[36,2838,2406],{"class":243},[36,2840,2683],{"class":63},[36,2842,2406],{"class":243},[36,2844,2683],{"class":63},[36,2846,2406],{"class":243},[36,2848,2683],{"class":63},[36,2850,2406],{"class":243},[36,2852,2683],{"class":63},[36,2854,2406],{"class":243},[36,2856,2683],{"class":63},[36,2858,2406],{"class":243},[36,2860,2683],{"class":63},[36,2862,2406],{"class":243},[36,2864,284],{"class":63},[36,2866,2868,2870,2872,2874,2876,2878,2880,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927],{"class":38,"line":2867},278,[36,2869,2742],{"class":243},[36,2871,2683],{"class":63},[36,2873,2406],{"class":243},[36,2875,2683],{"class":63},[36,2877,2406],{"class":243},[36,2879,2683],{"class":63},[36,2881,2882],{"class":243},"0.03",[36,2884,346],{"class":63},[36,2886,2406],{"class":243},[36,2888,2683],{"class":63},[36,2890,2406],{"class":243},[36,2892,2683],{"class":63},[36,2894,2406],{"class":243},[36,2896,2704],{"class":63},[36,2898,2406],{"class":243},[36,2900,2704],{"class":63},[36,2902,2406],{"class":243},[36,2904,2683],{"class":63},[36,2906,2406],{"class":243},[36,2908,2683],{"class":63},[36,2910,2406],{"class":243},[36,2912,2683],{"class":63},[36,2914,2406],{"class":243},[36,2916,2683],{"class":63},[36,2918,2406],{"class":243},[36,2920,2683],{"class":63},[36,2922,2406],{"class":243},[36,2924,2683],{"class":63},[36,2926,2406],{"class":243},[36,2928,284],{"class":63},[36,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990],{"class":38,"line":2931},279,[36,2933,2742],{"class":243},[36,2935,2683],{"class":63},[36,2937,2406],{"class":243},[36,2939,2683],{"class":63},[36,2941,2406],{"class":243},[36,2943,2683],{"class":63},[36,2945,2406],{"class":243},[36,2947,2683],{"class":63},[36,2949,2882],{"class":243},[36,2951,346],{"class":63},[36,2953,2406],{"class":243},[36,2955,2683],{"class":63},[36,2957,2406],{"class":243},[36,2959,2704],{"class":63},[36,2961,2406],{"class":243},[36,2963,2704],{"class":63},[36,2965,2406],{"class":243},[36,2967,2683],{"class":63},[36,2969,2406],{"class":243},[36,2971,2683],{"class":63},[36,2973,2406],{"class":243},[36,2975,2683],{"class":63},[36,2977,2406],{"class":243},[36,2979,2683],{"class":63},[36,2981,2406],{"class":243},[36,2983,2683],{"class":63},[36,2985,2406],{"class":243},[36,2987,2683],{"class":63},[36,2989,2406],{"class":243},[36,2991,284],{"class":63},[36,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053],{"class":38,"line":2994},280,[36,2996,2742],{"class":243},[36,2998,2683],{"class":63},[36,3000,2406],{"class":243},[36,3002,2683],{"class":63},[36,3004,2406],{"class":243},[36,3006,2683],{"class":63},[36,3008,2406],{"class":243},[36,3010,2683],{"class":63},[36,3012,2406],{"class":243},[36,3014,2683],{"class":63},[36,3016,2814],{"class":243},[36,3018,346],{"class":63},[36,3020,2406],{"class":243},[36,3022,2704],{"class":63},[36,3024,2406],{"class":243},[36,3026,2704],{"class":63},[36,3028,2406],{"class":243},[36,3030,2683],{"class":63},[36,3032,2406],{"class":243},[36,3034,2683],{"class":63},[36,3036,2406],{"class":243},[36,3038,2683],{"class":63},[36,3040,2406],{"class":243},[36,3042,2683],{"class":63},[36,3044,2406],{"class":243},[36,3046,2683],{"class":63},[36,3048,2406],{"class":243},[36,3050,2683],{"class":63},[36,3052,2406],{"class":243},[36,3054,284],{"class":63},[36,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117],{"class":38,"line":3057},281,[36,3059,2742],{"class":243},[36,3061,2683],{"class":63},[36,3063,2406],{"class":243},[36,3065,2683],{"class":63},[36,3067,2406],{"class":243},[36,3069,2683],{"class":63},[36,3071,2406],{"class":243},[36,3073,2683],{"class":63},[36,3075,2406],{"class":243},[36,3077,2683],{"class":63},[36,3079,2406],{"class":243},[36,3081,2683],{"class":63},[36,3083,3084],{"class":243},"0.025",[36,3086,346],{"class":63},[36,3088,2406],{"class":243},[36,3090,2704],{"class":63},[36,3092,2406],{"class":243},[36,3094,2683],{"class":63},[36,3096,2406],{"class":243},[36,3098,2683],{"class":63},[36,3100,2406],{"class":243},[36,3102,2683],{"class":63},[36,3104,2406],{"class":243},[36,3106,2683],{"class":63},[36,3108,2406],{"class":243},[36,3110,2683],{"class":63},[36,3112,2406],{"class":243},[36,3114,2683],{"class":63},[36,3116,2406],{"class":243},[36,3118,284],{"class":63},[36,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180],{"class":38,"line":3121},282,[36,3123,2742],{"class":243},[36,3125,2683],{"class":63},[36,3127,2406],{"class":243},[36,3129,2683],{"class":63},[36,3131,2406],{"class":243},[36,3133,2683],{"class":63},[36,3135,2406],{"class":243},[36,3137,2683],{"class":63},[36,3139,2406],{"class":243},[36,3141,2683],{"class":63},[36,3143,2406],{"class":243},[36,3145,2683],{"class":63},[36,3147,2406],{"class":243},[36,3149,2704],{"class":63},[36,3151,3084],{"class":243},[36,3153,346],{"class":63},[36,3155,2406],{"class":243},[36,3157,2683],{"class":63},[36,3159,2406],{"class":243},[36,3161,2683],{"class":63},[36,3163,2406],{"class":243},[36,3165,2683],{"class":63},[36,3167,2406],{"class":243},[36,3169,2683],{"class":63},[36,3171,2406],{"class":243},[36,3173,2683],{"class":63},[36,3175,2406],{"class":243},[36,3177,2683],{"class":63},[36,3179,2406],{"class":243},[36,3181,284],{"class":63},[36,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244],{"class":38,"line":3184},283,[36,3186,2742],{"class":243},[36,3188,2683],{"class":63},[36,3190,2406],{"class":243},[36,3192,2683],{"class":63},[36,3194,2406],{"class":243},[36,3196,2683],{"class":63},[36,3198,2406],{"class":243},[36,3200,2683],{"class":63},[36,3202,2406],{"class":243},[36,3204,2683],{"class":63},[36,3206,2406],{"class":243},[36,3208,2683],{"class":63},[36,3210,2406],{"class":243},[36,3212,2704],{"class":63},[36,3214,2406],{"class":243},[36,3216,2704],{"class":63},[36,3218,3219],{"class":243},"0.04",[36,3221,346],{"class":63},[36,3223,2406],{"class":243},[36,3225,2683],{"class":63},[36,3227,2406],{"class":243},[36,3229,2683],{"class":63},[36,3231,2406],{"class":243},[36,3233,2683],{"class":63},[36,3235,2406],{"class":243},[36,3237,2683],{"class":63},[36,3239,2406],{"class":243},[36,3241,2683],{"class":63},[36,3243,2406],{"class":243},[36,3245,284],{"class":63},[36,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308],{"class":38,"line":3248},284,[36,3250,2742],{"class":243},[36,3252,2683],{"class":63},[36,3254,2406],{"class":243},[36,3256,2683],{"class":63},[36,3258,2406],{"class":243},[36,3260,2683],{"class":63},[36,3262,2406],{"class":243},[36,3264,2683],{"class":63},[36,3266,2406],{"class":243},[36,3268,2683],{"class":63},[36,3270,2406],{"class":243},[36,3272,2683],{"class":63},[36,3274,2406],{"class":243},[36,3276,2704],{"class":63},[36,3278,2406],{"class":243},[36,3280,2704],{"class":63},[36,3282,2406],{"class":243},[36,3284,2683],{"class":63},[36,3286,3287],{"class":243},"0.01",[36,3289,346],{"class":63},[36,3291,2406],{"class":243},[36,3293,2683],{"class":63},[36,3295,2406],{"class":243},[36,3297,2683],{"class":63},[36,3299,2406],{"class":243},[36,3301,2683],{"class":63},[36,3303,2406],{"class":243},[36,3305,2683],{"class":63},[36,3307,2406],{"class":243},[36,3309,284],{"class":63},[36,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371],{"class":38,"line":3312},285,[36,3314,2742],{"class":243},[36,3316,2683],{"class":63},[36,3318,2406],{"class":243},[36,3320,2683],{"class":63},[36,3322,2406],{"class":243},[36,3324,2683],{"class":63},[36,3326,2406],{"class":243},[36,3328,2683],{"class":63},[36,3330,2406],{"class":243},[36,3332,2683],{"class":63},[36,3334,2406],{"class":243},[36,3336,2683],{"class":63},[36,3338,2406],{"class":243},[36,3340,2704],{"class":63},[36,3342,2406],{"class":243},[36,3344,2704],{"class":63},[36,3346,2406],{"class":243},[36,3348,2683],{"class":63},[36,3350,2406],{"class":243},[36,3352,2683],{"class":63},[36,3354,3287],{"class":243},[36,3356,346],{"class":63},[36,3358,2406],{"class":243},[36,3360,2683],{"class":63},[36,3362,2406],{"class":243},[36,3364,2683],{"class":63},[36,3366,2406],{"class":243},[36,3368,2683],{"class":63},[36,3370,2406],{"class":243},[36,3372,284],{"class":63},[36,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3423,3425,3427,3429,3431,3433,3435],{"class":38,"line":3375},286,[36,3377,2742],{"class":243},[36,3379,2683],{"class":63},[36,3381,2406],{"class":243},[36,3383,2683],{"class":63},[36,3385,2406],{"class":243},[36,3387,2683],{"class":63},[36,3389,2406],{"class":243},[36,3391,2683],{"class":63},[36,3393,2406],{"class":243},[36,3395,2683],{"class":63},[36,3397,2406],{"class":243},[36,3399,2683],{"class":63},[36,3401,2406],{"class":243},[36,3403,2704],{"class":63},[36,3405,2406],{"class":243},[36,3407,2704],{"class":63},[36,3409,2406],{"class":243},[36,3411,2683],{"class":63},[36,3413,2406],{"class":243},[36,3415,2683],{"class":63},[36,3417,2406],{"class":243},[36,3419,2683],{"class":63},[36,3421,3422],{"class":243},"0.02",[36,3424,346],{"class":63},[36,3426,2406],{"class":243},[36,3428,2683],{"class":63},[36,3430,2406],{"class":243},[36,3432,2683],{"class":63},[36,3434,2406],{"class":243},[36,3436,284],{"class":63},[36,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498],{"class":38,"line":3439},287,[36,3441,2742],{"class":243},[36,3443,2683],{"class":63},[36,3445,2406],{"class":243},[36,3447,2683],{"class":63},[36,3449,2406],{"class":243},[36,3451,2683],{"class":63},[36,3453,2406],{"class":243},[36,3455,2683],{"class":63},[36,3457,2406],{"class":243},[36,3459,2683],{"class":63},[36,3461,2406],{"class":243},[36,3463,2683],{"class":63},[36,3465,2406],{"class":243},[36,3467,2704],{"class":63},[36,3469,2406],{"class":243},[36,3471,2704],{"class":63},[36,3473,2406],{"class":243},[36,3475,2683],{"class":63},[36,3477,2406],{"class":243},[36,3479,2683],{"class":63},[36,3481,2406],{"class":243},[36,3483,2683],{"class":63},[36,3485,2406],{"class":243},[36,3487,2683],{"class":63},[36,3489,3287],{"class":243},[36,3491,346],{"class":63},[36,3493,2406],{"class":243},[36,3495,2683],{"class":63},[36,3497,2406],{"class":243},[36,3499,284],{"class":63},[36,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561],{"class":38,"line":3502},288,[36,3504,2742],{"class":243},[36,3506,2683],{"class":63},[36,3508,2406],{"class":243},[36,3510,2683],{"class":63},[36,3512,2406],{"class":243},[36,3514,2683],{"class":63},[36,3516,2406],{"class":243},[36,3518,2683],{"class":63},[36,3520,2406],{"class":243},[36,3522,2683],{"class":63},[36,3524,2406],{"class":243},[36,3526,2683],{"class":63},[36,3528,2406],{"class":243},[36,3530,2704],{"class":63},[36,3532,2406],{"class":243},[36,3534,2704],{"class":63},[36,3536,2406],{"class":243},[36,3538,2683],{"class":63},[36,3540,2406],{"class":243},[36,3542,2683],{"class":63},[36,3544,2406],{"class":243},[36,3546,2683],{"class":63},[36,3548,2406],{"class":243},[36,3550,2683],{"class":63},[36,3552,2406],{"class":243},[36,3554,2683],{"class":63},[36,3556,3287],{"class":243},[36,3558,346],{"class":63},[36,3560,2406],{"class":243},[36,3562,284],{"class":63},[36,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3625],{"class":38,"line":3565},289,[36,3567,2742],{"class":243},[36,3569,2683],{"class":63},[36,3571,2406],{"class":243},[36,3573,2683],{"class":63},[36,3575,2406],{"class":243},[36,3577,2683],{"class":63},[36,3579,2406],{"class":243},[36,3581,2683],{"class":63},[36,3583,2406],{"class":243},[36,3585,2683],{"class":63},[36,3587,2406],{"class":243},[36,3589,2683],{"class":63},[36,3591,2406],{"class":243},[36,3593,2704],{"class":63},[36,3595,2406],{"class":243},[36,3597,2704],{"class":63},[36,3599,2406],{"class":243},[36,3601,2683],{"class":63},[36,3603,2406],{"class":243},[36,3605,2683],{"class":63},[36,3607,2406],{"class":243},[36,3609,2683],{"class":63},[36,3611,2406],{"class":243},[36,3613,2683],{"class":63},[36,3615,2406],{"class":243},[36,3617,2683],{"class":63},[36,3619,2406],{"class":243},[36,3621,2683],{"class":63},[36,3623,3624],{"class":243},"0.015",[36,3626,429],{"class":63},[36,3628,3630],{"class":38,"line":3629},290,[36,3631,225],{"emptyLinePlaceholder":224},[36,3633,3635],{"class":38,"line":3634},291,[36,3636,3637],{"class":547},"# [ADVANCED] This represents the initial value for the state estimate error covariance matrix. Setting a diagonal\n",[36,3639,3641],{"class":38,"line":3640},292,[36,3642,225],{"emptyLinePlaceholder":224},[36,3644,3646],{"class":38,"line":3645},293,[36,3647,3648],{"class":547},"# value (variance) to a large value will result in rapid convergence for initial measurements of the variable in\n",[36,3650,3652],{"class":38,"line":3651},294,[36,3653,225],{"emptyLinePlaceholder":224},[36,3655,3657],{"class":38,"line":3656},295,[36,3658,3659],{"class":547},"# question. Users should take care not to use large values for variables that will not be measured directly. The values\n",[36,3661,3663],{"class":38,"line":3662},296,[36,3664,225],{"emptyLinePlaceholder":224},[36,3666,3668],{"class":38,"line":3667},297,[36,3669,3670],{"class":547},"# are ordered as x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. Defaults to the matrix below\n",[36,3672,3674],{"class":38,"line":3673},298,[36,3675,3676],{"class":547},"#if unspecified.\n",[36,3678,3680,3683,3685,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744],{"class":38,"line":3679},299,[36,3681,3682],{"class":751},"        initial_estimate_covariance",[36,3684,1537],{"class":63},[36,3686,3687],{"class":46},"1e-9",[36,3689,346],{"class":63},[36,3691,2406],{"class":243},[36,3693,2683],{"class":63},[36,3695,2406],{"class":243},[36,3697,2683],{"class":63},[36,3699,2406],{"class":243},[36,3701,2683],{"class":63},[36,3703,2406],{"class":243},[36,3705,2683],{"class":63},[36,3707,2406],{"class":243},[36,3709,2683],{"class":63},[36,3711,2406],{"class":243},[36,3713,2683],{"class":63},[36,3715,2406],{"class":243},[36,3717,2683],{"class":63},[36,3719,2406],{"class":243},[36,3721,2683],{"class":63},[36,3723,2406],{"class":243},[36,3725,2704],{"class":63},[36,3727,2406],{"class":243},[36,3729,2704],{"class":63},[36,3731,2406],{"class":243},[36,3733,2704],{"class":63},[36,3735,2406],{"class":243},[36,3737,2683],{"class":63},[36,3739,2406],{"class":243},[36,3741,2683],{"class":63},[36,3743,2406],{"class":243},[36,3745,284],{"class":63},[36,3747,3749,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808],{"class":38,"line":3748},300,[36,3750,3751],{"class":243},"                                      0.0",[36,3753,2683],{"class":63},[36,3755,3687],{"class":46},[36,3757,346],{"class":63},[36,3759,2406],{"class":243},[36,3761,2683],{"class":63},[36,3763,2406],{"class":243},[36,3765,2683],{"class":63},[36,3767,2406],{"class":243},[36,3769,2683],{"class":63},[36,3771,2406],{"class":243},[36,3773,2683],{"class":63},[36,3775,2406],{"class":243},[36,3777,2683],{"class":63},[36,3779,2406],{"class":243},[36,3781,2683],{"class":63},[36,3783,2406],{"class":243},[36,3785,2683],{"class":63},[36,3787,2406],{"class":243},[36,3789,2704],{"class":63},[36,3791,2406],{"class":243},[36,3793,2704],{"class":63},[36,3795,2406],{"class":243},[36,3797,2704],{"class":63},[36,3799,2406],{"class":243},[36,3801,2683],{"class":63},[36,3803,2406],{"class":243},[36,3805,2683],{"class":63},[36,3807,2406],{"class":243},[36,3809,284],{"class":63},[36,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871],{"class":38,"line":3812},301,[36,3814,3751],{"class":243},[36,3816,2683],{"class":63},[36,3818,2406],{"class":243},[36,3820,2683],{"class":63},[36,3822,3687],{"class":46},[36,3824,346],{"class":63},[36,3826,2406],{"class":243},[36,3828,2683],{"class":63},[36,3830,2406],{"class":243},[36,3832,2683],{"class":63},[36,3834,2406],{"class":243},[36,3836,2683],{"class":63},[36,3838,2406],{"class":243},[36,3840,2683],{"class":63},[36,3842,2406],{"class":243},[36,3844,2683],{"class":63},[36,3846,2406],{"class":243},[36,3848,2683],{"class":63},[36,3850,2406],{"class":243},[36,3852,2704],{"class":63},[36,3854,2406],{"class":243},[36,3856,2704],{"class":63},[36,3858,2406],{"class":243},[36,3860,2704],{"class":63},[36,3862,2406],{"class":243},[36,3864,2683],{"class":63},[36,3866,2406],{"class":243},[36,3868,2683],{"class":63},[36,3870,2406],{"class":243},[36,3872,284],{"class":63},[36,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934],{"class":38,"line":3875},302,[36,3877,3751],{"class":243},[36,3879,2683],{"class":63},[36,3881,2406],{"class":243},[36,3883,2683],{"class":63},[36,3885,2406],{"class":243},[36,3887,2683],{"class":63},[36,3889,3687],{"class":46},[36,3891,346],{"class":63},[36,3893,2406],{"class":243},[36,3895,2683],{"class":63},[36,3897,2406],{"class":243},[36,3899,2683],{"class":63},[36,3901,2406],{"class":243},[36,3903,2683],{"class":63},[36,3905,2406],{"class":243},[36,3907,2683],{"class":63},[36,3909,2406],{"class":243},[36,3911,2683],{"class":63},[36,3913,2406],{"class":243},[36,3915,2704],{"class":63},[36,3917,2406],{"class":243},[36,3919,2704],{"class":63},[36,3921,2406],{"class":243},[36,3923,2704],{"class":63},[36,3925,2406],{"class":243},[36,3927,2683],{"class":63},[36,3929,2406],{"class":243},[36,3931,2683],{"class":63},[36,3933,2406],{"class":243},[36,3935,284],{"class":63},[36,3937,3939,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993,3995,3997],{"class":38,"line":3938},303,[36,3940,3751],{"class":243},[36,3942,2683],{"class":63},[36,3944,2406],{"class":243},[36,3946,2683],{"class":63},[36,3948,2406],{"class":243},[36,3950,2683],{"class":63},[36,3952,2406],{"class":243},[36,3954,2683],{"class":63},[36,3956,3687],{"class":46},[36,3958,346],{"class":63},[36,3960,2406],{"class":243},[36,3962,2683],{"class":63},[36,3964,2406],{"class":243},[36,3966,2683],{"class":63},[36,3968,2406],{"class":243},[36,3970,2683],{"class":63},[36,3972,2406],{"class":243},[36,3974,2683],{"class":63},[36,3976,2406],{"class":243},[36,3978,2704],{"class":63},[36,3980,2406],{"class":243},[36,3982,2704],{"class":63},[36,3984,2406],{"class":243},[36,3986,2704],{"class":63},[36,3988,2406],{"class":243},[36,3990,2683],{"class":63},[36,3992,2406],{"class":243},[36,3994,2683],{"class":63},[36,3996,2406],{"class":243},[36,3998,284],{"class":63},[36,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060],{"class":38,"line":4001},304,[36,4003,3751],{"class":243},[36,4005,2683],{"class":63},[36,4007,2406],{"class":243},[36,4009,2683],{"class":63},[36,4011,2406],{"class":243},[36,4013,2683],{"class":63},[36,4015,2406],{"class":243},[36,4017,2683],{"class":63},[36,4019,2406],{"class":243},[36,4021,2683],{"class":63},[36,4023,3687],{"class":46},[36,4025,346],{"class":63},[36,4027,2406],{"class":243},[36,4029,2683],{"class":63},[36,4031,2406],{"class":243},[36,4033,2683],{"class":63},[36,4035,2406],{"class":243},[36,4037,2683],{"class":63},[36,4039,2406],{"class":243},[36,4041,2704],{"class":63},[36,4043,2406],{"class":243},[36,4045,2704],{"class":63},[36,4047,2406],{"class":243},[36,4049,2704],{"class":63},[36,4051,2406],{"class":243},[36,4053,2683],{"class":63},[36,4055,2406],{"class":243},[36,4057,2683],{"class":63},[36,4059,2406],{"class":243},[36,4061,284],{"class":63},[36,4063,4065,4067,4069,4071,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123],{"class":38,"line":4064},305,[36,4066,3751],{"class":243},[36,4068,2683],{"class":63},[36,4070,2406],{"class":243},[36,4072,2683],{"class":63},[36,4074,2406],{"class":243},[36,4076,2683],{"class":63},[36,4078,2406],{"class":243},[36,4080,2683],{"class":63},[36,4082,2406],{"class":243},[36,4084,2683],{"class":63},[36,4086,2406],{"class":243},[36,4088,2683],{"class":63},[36,4090,3687],{"class":46},[36,4092,346],{"class":63},[36,4094,2406],{"class":243},[36,4096,2683],{"class":63},[36,4098,2406],{"class":243},[36,4100,2683],{"class":63},[36,4102,2406],{"class":243},[36,4104,2704],{"class":63},[36,4106,2406],{"class":243},[36,4108,2704],{"class":63},[36,4110,2406],{"class":243},[36,4112,2704],{"class":63},[36,4114,2406],{"class":243},[36,4116,2683],{"class":63},[36,4118,2406],{"class":243},[36,4120,2683],{"class":63},[36,4122,2406],{"class":243},[36,4124,284],{"class":63},[36,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186],{"class":38,"line":4127},306,[36,4129,3751],{"class":243},[36,4131,2683],{"class":63},[36,4133,2406],{"class":243},[36,4135,2683],{"class":63},[36,4137,2406],{"class":243},[36,4139,2683],{"class":63},[36,4141,2406],{"class":243},[36,4143,2683],{"class":63},[36,4145,2406],{"class":243},[36,4147,2683],{"class":63},[36,4149,2406],{"class":243},[36,4151,2683],{"class":63},[36,4153,2406],{"class":243},[36,4155,2683],{"class":63},[36,4157,3687],{"class":46},[36,4159,346],{"class":63},[36,4161,2406],{"class":243},[36,4163,2683],{"class":63},[36,4165,2406],{"class":243},[36,4167,2704],{"class":63},[36,4169,2406],{"class":243},[36,4171,2704],{"class":63},[36,4173,2406],{"class":243},[36,4175,2704],{"class":63},[36,4177,2406],{"class":243},[36,4179,2683],{"class":63},[36,4181,2406],{"class":243},[36,4183,2683],{"class":63},[36,4185,2406],{"class":243},[36,4187,284],{"class":63},[36,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249],{"class":38,"line":4190},307,[36,4192,3751],{"class":243},[36,4194,2683],{"class":63},[36,4196,2406],{"class":243},[36,4198,2683],{"class":63},[36,4200,2406],{"class":243},[36,4202,2683],{"class":63},[36,4204,2406],{"class":243},[36,4206,2683],{"class":63},[36,4208,2406],{"class":243},[36,4210,2683],{"class":63},[36,4212,2406],{"class":243},[36,4214,2683],{"class":63},[36,4216,2406],{"class":243},[36,4218,2683],{"class":63},[36,4220,2406],{"class":243},[36,4222,2683],{"class":63},[36,4224,3687],{"class":46},[36,4226,346],{"class":63},[36,4228,2406],{"class":243},[36,4230,2704],{"class":63},[36,4232,2406],{"class":243},[36,4234,2704],{"class":63},[36,4236,2406],{"class":243},[36,4238,2704],{"class":63},[36,4240,2406],{"class":243},[36,4242,2683],{"class":63},[36,4244,2406],{"class":243},[36,4246,2683],{"class":63},[36,4248,2406],{"class":243},[36,4250,284],{"class":63},[36,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312],{"class":38,"line":4253},308,[36,4255,3751],{"class":243},[36,4257,2683],{"class":63},[36,4259,2406],{"class":243},[36,4261,2683],{"class":63},[36,4263,2406],{"class":243},[36,4265,2683],{"class":63},[36,4267,2406],{"class":243},[36,4269,2683],{"class":63},[36,4271,2406],{"class":243},[36,4273,2683],{"class":63},[36,4275,2406],{"class":243},[36,4277,2683],{"class":63},[36,4279,2406],{"class":243},[36,4281,2683],{"class":63},[36,4283,2406],{"class":243},[36,4285,2683],{"class":63},[36,4287,2406],{"class":243},[36,4289,2683],{"class":63},[36,4291,3687],{"class":46},[36,4293,1543],{"class":63},[36,4295,2406],{"class":243},[36,4297,2704],{"class":63},[36,4299,2406],{"class":243},[36,4301,2704],{"class":63},[36,4303,2406],{"class":243},[36,4305,2683],{"class":63},[36,4307,2406],{"class":243},[36,4309,2683],{"class":63},[36,4311,2406],{"class":243},[36,4313,284],{"class":63},[36,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375],{"class":38,"line":4316},309,[36,4318,3751],{"class":243},[36,4320,2683],{"class":63},[36,4322,2406],{"class":243},[36,4324,2683],{"class":63},[36,4326,2406],{"class":243},[36,4328,2683],{"class":63},[36,4330,2406],{"class":243},[36,4332,2683],{"class":63},[36,4334,2406],{"class":243},[36,4336,2683],{"class":63},[36,4338,2406],{"class":243},[36,4340,2683],{"class":63},[36,4342,2406],{"class":243},[36,4344,2683],{"class":63},[36,4346,2406],{"class":243},[36,4348,2683],{"class":63},[36,4350,2406],{"class":243},[36,4352,2683],{"class":63},[36,4354,2406],{"class":243},[36,4356,2704],{"class":63},[36,4358,3687],{"class":46},[36,4360,1543],{"class":63},[36,4362,2406],{"class":243},[36,4364,2704],{"class":63},[36,4366,2406],{"class":243},[36,4368,2683],{"class":63},[36,4370,2406],{"class":243},[36,4372,2683],{"class":63},[36,4374,2406],{"class":243},[36,4376,284],{"class":63},[36,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438],{"class":38,"line":4379},310,[36,4381,3751],{"class":243},[36,4383,2683],{"class":63},[36,4385,2406],{"class":243},[36,4387,2683],{"class":63},[36,4389,2406],{"class":243},[36,4391,2683],{"class":63},[36,4393,2406],{"class":243},[36,4395,2683],{"class":63},[36,4397,2406],{"class":243},[36,4399,2683],{"class":63},[36,4401,2406],{"class":243},[36,4403,2683],{"class":63},[36,4405,2406],{"class":243},[36,4407,2683],{"class":63},[36,4409,2406],{"class":243},[36,4411,2683],{"class":63},[36,4413,2406],{"class":243},[36,4415,2683],{"class":63},[36,4417,2406],{"class":243},[36,4419,2704],{"class":63},[36,4421,2406],{"class":243},[36,4423,2704],{"class":63},[36,4425,3687],{"class":46},[36,4427,1543],{"class":63},[36,4429,2406],{"class":243},[36,4431,2683],{"class":63},[36,4433,2406],{"class":243},[36,4435,2683],{"class":63},[36,4437,2406],{"class":243},[36,4439,284],{"class":63},[36,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501],{"class":38,"line":4442},311,[36,4444,3751],{"class":243},[36,4446,2683],{"class":63},[36,4448,2406],{"class":243},[36,4450,2683],{"class":63},[36,4452,2406],{"class":243},[36,4454,2683],{"class":63},[36,4456,2406],{"class":243},[36,4458,2683],{"class":63},[36,4460,2406],{"class":243},[36,4462,2683],{"class":63},[36,4464,2406],{"class":243},[36,4466,2683],{"class":63},[36,4468,2406],{"class":243},[36,4470,2683],{"class":63},[36,4472,2406],{"class":243},[36,4474,2683],{"class":63},[36,4476,2406],{"class":243},[36,4478,2683],{"class":63},[36,4480,2406],{"class":243},[36,4482,2704],{"class":63},[36,4484,2406],{"class":243},[36,4486,2704],{"class":63},[36,4488,2406],{"class":243},[36,4490,2704],{"class":63},[36,4492,3687],{"class":46},[36,4494,346],{"class":63},[36,4496,2406],{"class":243},[36,4498,2683],{"class":63},[36,4500,2406],{"class":243},[36,4502,284],{"class":63},[36,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564],{"class":38,"line":4505},312,[36,4507,3751],{"class":243},[36,4509,2683],{"class":63},[36,4511,2406],{"class":243},[36,4513,2683],{"class":63},[36,4515,2406],{"class":243},[36,4517,2683],{"class":63},[36,4519,2406],{"class":243},[36,4521,2683],{"class":63},[36,4523,2406],{"class":243},[36,4525,2683],{"class":63},[36,4527,2406],{"class":243},[36,4529,2683],{"class":63},[36,4531,2406],{"class":243},[36,4533,2683],{"class":63},[36,4535,2406],{"class":243},[36,4537,2683],{"class":63},[36,4539,2406],{"class":243},[36,4541,2683],{"class":63},[36,4543,2406],{"class":243},[36,4545,2704],{"class":63},[36,4547,2406],{"class":243},[36,4549,2704],{"class":63},[36,4551,2406],{"class":243},[36,4553,2704],{"class":63},[36,4555,2406],{"class":243},[36,4557,2683],{"class":63},[36,4559,3687],{"class":46},[36,4561,346],{"class":63},[36,4563,2406],{"class":243},[36,4565,284],{"class":63},[36,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627],{"class":38,"line":4568},313,[36,4570,3751],{"class":243},[36,4572,2683],{"class":63},[36,4574,2406],{"class":243},[36,4576,2683],{"class":63},[36,4578,2406],{"class":243},[36,4580,2683],{"class":63},[36,4582,2406],{"class":243},[36,4584,2683],{"class":63},[36,4586,2406],{"class":243},[36,4588,2683],{"class":63},[36,4590,2406],{"class":243},[36,4592,2683],{"class":63},[36,4594,2406],{"class":243},[36,4596,2683],{"class":63},[36,4598,2406],{"class":243},[36,4600,2683],{"class":63},[36,4602,2406],{"class":243},[36,4604,2683],{"class":63},[36,4606,2406],{"class":243},[36,4608,2704],{"class":63},[36,4610,2406],{"class":243},[36,4612,2704],{"class":63},[36,4614,2406],{"class":243},[36,4616,2704],{"class":63},[36,4618,2406],{"class":243},[36,4620,2683],{"class":63},[36,4622,2406],{"class":243},[36,4624,2683],{"class":63},[36,4626,3687],{"class":46},[36,4628,429],{"class":63},[10,4630,4631],{},"在該文件中，關鍵配置如下：",[26,4633,4635],{"className":733,"code":4634,"language":735,"meta":31,"style":31},"#......\n        odom0_config: [false,  false,  false,\n                       false, false, false,\n                       true, false, false,\n                       false, false, false,\n                       false, false, false]\n#......\n        imu0_config: [false, false, false,\n                      false, false,  true,\n                      false, false, false,\n                      false, false,  true,\n                      false, false,  false]\n",[33,4636,4637,4642,4660,4674,4688,4702,4716,4720,4738,4752,4766,4780],{"__ignoreMap":31},[36,4638,4639],{"class":38,"line":39},[36,4640,4641],{"class":547},"#......\n",[36,4643,4644,4646,4648,4650,4652,4654,4656,4658],{"class":38,"line":192},[36,4645,1534],{"class":751},[36,4647,1537],{"class":63},[36,4649,1540],{"class":243},[36,4651,1543],{"class":63},[36,4653,1540],{"class":243},[36,4655,1543],{"class":63},[36,4657,1540],{"class":243},[36,4659,284],{"class":63},[36,4661,4662,4664,4666,4668,4670,4672],{"class":38,"line":205},[36,4663,1557],{"class":243},[36,4665,346],{"class":63},[36,4667,1540],{"class":243},[36,4669,346],{"class":63},[36,4671,1540],{"class":243},[36,4673,284],{"class":63},[36,4675,4676,4678,4680,4682,4684,4686],{"class":38,"line":213},[36,4677,1573],{"class":243},[36,4679,346],{"class":63},[36,4681,1540],{"class":243},[36,4683,346],{"class":63},[36,4685,1540],{"class":243},[36,4687,284],{"class":63},[36,4689,4690,4692,4694,4696,4698,4700],{"class":38,"line":221},[36,4691,1557],{"class":243},[36,4693,346],{"class":63},[36,4695,1540],{"class":243},[36,4697,346],{"class":63},[36,4699,1540],{"class":243},[36,4701,284],{"class":63},[36,4703,4704,4706,4708,4710,4712,4714],{"class":38,"line":228},[36,4705,1557],{"class":243},[36,4707,346],{"class":63},[36,4709,1540],{"class":243},[36,4711,346],{"class":63},[36,4713,1540],{"class":243},[36,4715,429],{"class":63},[36,4717,4718],{"class":38,"line":240},[36,4719,4641],{"class":547},[36,4721,4722,4724,4726,4728,4730,4732,4734,4736],{"class":38,"line":265},[36,4723,1951],{"class":751},[36,4725,1537],{"class":63},[36,4727,1540],{"class":243},[36,4729,346],{"class":63},[36,4731,1540],{"class":243},[36,4733,346],{"class":63},[36,4735,1540],{"class":243},[36,4737,284],{"class":63},[36,4739,4740,4742,4744,4746,4748,4750],{"class":38,"line":271},[36,4741,1971],{"class":243},[36,4743,346],{"class":63},[36,4745,1540],{"class":243},[36,4747,1543],{"class":63},[36,4749,1980],{"class":243},[36,4751,284],{"class":63},[36,4753,4754,4756,4758,4760,4762,4764],{"class":38,"line":287},[36,4755,1971],{"class":243},[36,4757,346],{"class":63},[36,4759,1540],{"class":243},[36,4761,346],{"class":63},[36,4763,1540],{"class":243},[36,4765,284],{"class":63},[36,4767,4768,4770,4772,4774,4776,4778],{"class":38,"line":300},[36,4769,1971],{"class":243},[36,4771,346],{"class":63},[36,4773,1540],{"class":243},[36,4775,1543],{"class":63},[36,4777,1980],{"class":243},[36,4779,284],{"class":63},[36,4781,4782,4784,4786,4788,4790,4792],{"class":38,"line":313},[36,4783,1971],{"class":243},[36,4785,346],{"class":63},[36,4787,1540],{"class":243},[36,4789,1543],{"class":63},[36,4791,1540],{"class":243},[36,4793,429],{"class":63},[10,4795,4796],{},"上述配置主要是融合了里程計消息中的x方向速度與imu消息中的yaw角度生成新的里程計數據。",[10,4798,4799],{},[16,4800,4801],{},"（3）編譯",[10,4803,4804],{},"終端中進入當前工作空間，編譯功能包：",[26,4806,4808],{"className":28,"code":4807,"language":30,"meta":31,"style":31},"colcon build --packages-select ros2_stm32_bridge\n",[33,4809,4810],{"__ignoreMap":31},[36,4811,4812,4815,4818,4821],{"class":38,"line":39},[36,4813,4814],{"class":42},"colcon",[36,4816,4817],{"class":46}," build",[36,4819,4820],{"class":243}," --packages-select",[36,4822,4823],{"class":46}," ros2_stm32_bridge\n",[10,4825,4826],{},[16,4827,4828],{},"（4）執行",[10,4830,4831],{},"終端中進入當前工作空間，執行launch文件：",[26,4833,4835],{"className":28,"code":4834,"language":30,"meta":31,"style":31},". install/setup.bash\nros2 launch ros2_stm32_bridge driver_ekf.launch.py\n",[33,4836,4837,4845],{"__ignoreMap":31},[36,4838,4839,4842],{"class":38,"line":39},[36,4840,4841],{"class":243},".",[36,4843,4844],{"class":46}," install/setup.bash\n",[36,4846,4847,4850,4853,4856],{"class":38,"line":192},[36,4848,4849],{"class":42},"ros2",[36,4851,4852],{"class":46}," launch",[36,4854,4855],{"class":46}," ros2_stm32_bridge",[36,4857,4858],{"class":46}," driver_ekf.launch.py\n",[10,4860,4861],{},"再啓動rviz2以及鍵盤控制節點，在rviz2中將參考座標系設置爲odom，添加tf插件，再添加兩個odometry插件並將話題分別設置爲odom和odometry/filtered。使用鍵盤控制機器人前進，兩個里程計插件顯示的數據和機器人的實際運行基本相符，前進一段時間後，手動搬動機器人讓其產生一定角度的偏航，該動作也能在融合後的里程計以及座標變換中準確顯示，而輪式里程計由於電機並未旋轉而沒有改變（如下圖所示）。",[10,4863,4864],{},[4865,4866],"img",{"alt":31,"src":4867},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1805.webp",[4869,4870,4871],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":192,"depth":192,"links":4873},[],"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","14.8.1.2",14080102,"2023-12-30","wiki/2023-12-30-ros2-tutorial","zh-hant:2023-12-30-ros2-tutorial","/zh-hant/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合",false,null,"zh-Hant","zh-hant",{},{"title":5,"description":12},"/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","iB3owFtCkydTFXAjjQHUgXxIe8rifKDZ6eLou_6hnps",[4894,4900,4906,4912,4918,4924,4930,4936,4942,4948,4954,4960,4966,4972,4978,4984,4990,4996,5001,5007,5012,5018,5024,5030,5036,5042,5048,5054,5060,5066,5072,5078,5084,5090,5096,5102,5108,5114,5120,5126,5127,5133,5139,5145,5151,5157,5163,5169,5175,5181,5187,5193,5199,5205,5211,5217,5223,5229,5235,5241],{"path":4895,"stem":4896,"title":4897,"date":4877,"chapter":4898,"chapterSort":4899,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介紹","1",1000000,{"path":4901,"stem":4902,"title":4903,"date":4877,"chapter":4904,"chapterSort":4905,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平臺","10",10000000,{"path":4907,"stem":4908,"title":4909,"date":4877,"chapter":4910,"chapterSort":4911,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":4913,"stem":4914,"title":4915,"date":4877,"chapter":4916,"chapterSort":4917,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":4919,"stem":4920,"title":4921,"date":4877,"chapter":4922,"chapterSort":4923,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":4925,"stem":4926,"title":4927,"date":4877,"chapter":4928,"chapterSort":4929,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","將Ign Gazebo遷移至Gz Sim","11.4",11040000,{"path":4931,"stem":4932,"title":4933,"date":4877,"chapter":4934,"chapterSort":4935,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平臺","11",11000000,{"path":4937,"stem":4938,"title":4939,"date":4877,"chapter":4940,"chapterSort":4941,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble導航仿真","12.1",12010000,{"path":4943,"stem":4944,"title":4945,"date":4877,"chapter":4946,"chapterSort":4947,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy導航仿真","12.2",12020000,{"path":4949,"stem":4950,"title":4951,"date":4877,"chapter":4952,"chapterSort":4953,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Humble與Jazzy導航的差異","12.3",12030000,{"path":4955,"stem":4956,"title":4957,"date":4877,"chapter":4958,"chapterSort":4959,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","機器人導航Navigation2(仿真篇)","12",12000000,{"path":4961,"stem":4962,"title":4963,"date":4877,"chapter":4964,"chapterSort":4965,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio庫","13.1.1",13010100,{"path":4967,"stem":4968,"title":4969,"date":4877,"chapter":4970,"chapterSort":4971,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver庫","13.1.2",13010200,{"path":4973,"stem":4974,"title":4975,"date":4877,"chapter":4976,"chapterSort":4977,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART串口通信","13.1",13010000,{"path":4979,"stem":4980,"title":4981,"date":4877,"chapter":4982,"chapterSort":4983,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":4985,"stem":4986,"title":4987,"date":4877,"chapter":4988,"chapterSort":4989,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":4991,"stem":4992,"title":4993,"date":4877,"chapter":4994,"chapterSort":4995,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN通信","13.2",13020000,{"path":4997,"stem":4998,"title":4963,"date":4877,"chapter":4999,"chapterSort":5000,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":5002,"stem":5003,"title":5004,"date":4877,"chapter":5005,"chapterSort":5006,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP通信","13.3",13030000,{"path":5008,"stem":5009,"title":4963,"date":4877,"chapter":5010,"chapterSort":5011,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":5013,"stem":5014,"title":5015,"date":4877,"chapter":5016,"chapterSort":5017,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP通信","13.4",13040000,{"path":5019,"stem":5020,"title":5021,"date":4877,"chapter":5022,"chapterSort":5023,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux硬件通信","13",13000000,{"path":5025,"stem":5026,"title":5027,"date":4877,"chapter":5028,"chapterSort":5029,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","機器人組成","14.1",14010000,{"path":5031,"stem":5032,"title":5033,"date":4877,"chapter":5034,"chapterSort":5035,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","遠程開發SSH","14.2.1",14020100,{"path":5037,"stem":5038,"title":5039,"date":4877,"chapter":5040,"chapterSort":5041,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","遠程訪問桌面","14.2.2",14020200,{"path":5043,"stem":5044,"title":5045,"date":4877,"chapter":5046,"chapterSort":5047,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","工控機之遠程開發環境","14.2",14020000,{"path":5049,"stem":5050,"title":5051,"date":4877,"chapter":5052,"chapterSort":5053,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","工控機之外接USB設備","14.3",14030000,{"path":5055,"stem":5056,"title":5057,"date":4877,"chapter":5058,"chapterSort":5059,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","分佈式搭建","14.4",14040000,{"path":5061,"stem":5062,"title":5063,"date":4877,"chapter":5064,"chapterSort":5065,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","優化日誌","14.5",14050000,{"path":5067,"stem":5068,"title":5069,"date":4877,"chapter":5070,"chapterSort":5071,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","里程計Odom","14.6.1",14060100,{"path":5073,"stem":5074,"title":5075,"date":4877,"chapter":5076,"chapterSort":5077,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","慣性計IMU","14.6.2",14060200,{"path":5079,"stem":5080,"title":5081,"date":4877,"chapter":5082,"chapterSort":5083,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","激光雷達LiDAR","14.6.3",14060300,{"path":5085,"stem":5086,"title":5087,"date":4877,"chapter":5088,"chapterSort":5089,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","相機Camera","14.6.4",14060400,{"path":5091,"stem":5092,"title":5093,"date":4877,"chapter":5094,"chapterSort":5095,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","全球定位GNSS","14.6.5",14060500,{"path":5097,"stem":5098,"title":5099,"date":4877,"chapter":5100,"chapterSort":5101,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","手柄JOY","14.6.6",14060600,{"path":5103,"stem":5104,"title":5105,"date":4877,"chapter":5106,"chapterSort":5107,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","鍵盤控制節點","14.6.7",14060700,{"path":5109,"stem":5110,"title":5111,"date":4877,"chapter":5112,"chapterSort":5113,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","硬件平臺","14.6",14060000,{"path":5115,"stem":5116,"title":5117,"date":4877,"chapter":5118,"chapterSort":5119,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","座標系與話題關係","14.7",14070000,{"path":5121,"stem":5122,"title":5123,"date":4877,"chapter":5124,"chapterSort":5125,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","輪式里程計標定","14.8.1.1",14080101,{"path":4874,"stem":4891,"title":5,"date":4877,"chapter":4875,"chapterSort":4876,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},{"path":5128,"stem":5129,"title":5130,"date":4877,"chapter":5131,"chapterSort":5132,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","輪式里程計標定與融合","14.8.1",14080100,{"path":5134,"stem":5135,"title":5136,"date":4877,"chapter":5137,"chapterSort":5138,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","激光雷達工具","14.8.2",14080200,{"path":5140,"stem":5141,"title":5142,"date":4877,"chapter":5143,"chapterSort":5144,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","相機使用進階","14.8.3",14080300,{"path":5146,"stem":5147,"title":5148,"date":4877,"chapter":5149,"chapterSort":5150,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","硬件平臺進階","14.8",14080000,{"path":5152,"stem":5153,"title":5154,"date":4877,"chapter":5155,"chapterSort":5156,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","機器人硬件","14",14000000,{"path":5158,"stem":5159,"title":5160,"date":4877,"chapter":5161,"chapterSort":5162,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":5164,"stem":5165,"title":5166,"date":4877,"chapter":5167,"chapterSort":5168,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工業機器人機械臂","16",16000000,{"path":5170,"stem":5171,"title":5172,"date":4877,"chapter":5173,"chapterSort":5174,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","機器人導航Navigation2(實體篇)","17",17000000,{"path":5176,"stem":5177,"title":5178,"date":4877,"chapter":5179,"chapterSort":5180,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":5182,"stem":5183,"title":5184,"date":4877,"chapter":5185,"chapterSort":5186,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平臺","19",19000000,{"path":5188,"stem":5189,"title":5190,"date":4877,"chapter":5191,"chapterSort":5192,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入門操作","2",2000000,{"path":5194,"stem":5195,"title":5196,"date":4877,"chapter":5197,"chapterSort":5198,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":5200,"stem":5201,"title":5202,"date":4877,"chapter":5203,"chapterSort":5204,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空間與功能包","3",3000000,{"path":5206,"stem":5207,"title":5208,"date":4877,"chapter":5209,"chapterSort":5210,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":5212,"stem":5213,"title":5214,"date":4877,"chapter":5215,"chapterSort":5216,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信機制","5",5000000,{"path":5218,"stem":5219,"title":5220,"date":4877,"chapter":5221,"chapterSort":5222,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":5224,"stem":5225,"title":5226,"date":4877,"chapter":5227,"chapterSort":5228,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":5230,"stem":5231,"title":5232,"date":4877,"chapter":5233,"chapterSort":5234,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","座標變換TF","8",8000000,{"path":5236,"stem":5237,"title":5238,"date":4877,"chapter":5239,"chapterSort":5240,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":4884},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可視化平臺RVIZ2與URDF建模語言","9",9000000,{"path":4880,"stem":5242,"title":5243,"date":4877,"chapter":4885,"chapterSort":5244,"docKey":4879,"docRoot":4880,"docTitle":4881,"isWikiDoc":224,"isWikiIndex":224},"_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/index","ROS2機器人操作系統教程",0,{"variants":5246},[5247,5250,5251,5254,5257],{"path":5248,"localeSlug":5249,"i18nKey":4883},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","en-us",{"path":4874,"localeSlug":4887,"i18nKey":4883},{"path":5252,"localeSlug":5253,"i18nKey":4883},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","zh-hk",{"path":5255,"localeSlug":5256,"i18nKey":4883},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","zh-tw",{"path":5258,"localeSlug":5259,"i18nKey":4883},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","zh-cn",[5248,4890,4874,4890,5252,4890,5255,4890,5258,4890],1780673925919]