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