[{"data":1,"prerenderedAt":5988},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description":3,"wiki-doc-items-2026-09-20-dao-hang":5751,"wiki:author-members":5976},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":158,"chapterOrder":5739,"date":5740,"description":98,"docKey":5741,"docRoot":5742,"docTitle":5743,"extension":5744,"isWikiDoc":194,"isWikiIndex":5745,"meta":5746,"navigation":194,"path":5747,"seo":5748,"stem":5749,"wikiDepth":158,"__hash__":5750},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0300-0100-robot_description.md","robot_description（机器人模型与关节定义）",[7],"董佳辉",{"type":9,"value":10,"toc":5733},"minimark",[11,15,46,52,74,91,101,117,128,132,137,144,147,222,225,305,310,312,379,382,428,430,508,510,559,564,566,588,590,612,615,641,652,657,660,669,672,681,684,703,706,711,713,747,749,752,790,793,798,800,806,812,815,818,824,827,833,836,842,845,896,899,908,911,977,980,986,989,993,996,1002,1005,1008,1014,1017,1023,1170,1173,1180,1183,1204,1217,1220,1257,1260,1294,1301,1412,1421,1519,1524,1694,1697,1846,1852,1858,1864,1888,1891,1897,1903,2004,2025,2028,2129,2142,2243,2246,2345,2348,2390,2400,2468,2474,2480,2671,2674,3109,3112,3133,3136,3153,3156,3159,3166,3172,3175,3181,3187,3194,3206,3209,3369,3383,3386,3392,3395,3400,3403,3406,3502,3505,3511,3514,3521,3524,3529,3532,3537,3555,3558,3561,3653,3743,3746,3812,3818,3823,3828,3831,3904,3911,3958,4021,4025,4028,4033,4036,4202,4208,4211,4214,4217,4223,4226,4229,4234,4237,4242,4245,4248,4254,4407,4411,4417,4420,4423,4428,4433,4519,4525,4603,4606,4621,4624,4630,4633,4636,4642,4645,4648,4651,4656,4659,4662,4692,4706,4712,4715,4933,4939,4946,4952,4957,4962,4965,4968,5038,5050,5055,5061,5067,5073,5224,5235,5238,5244,5247,5253,5256,5259,5264,5294,5300,5305,5488,5490,5565,5570,5576,5629,5682,5685,5688,5691,5694,5699,5729],[12,13,5],"h2",{"id":14},"robot_description机器人模型与关节定义",[16,17,18,19,23,24,27,28,31,32,35,36,31,39,42,43,45],"p",{},"本功能包复制于 ",[20,21,22],"code",{},"pb2025_robot_description","。为便于复用，将功能包目录命名为 ",[20,25,26],{},"robot_description","，并将 ",[20,29,30],{},"package.xml"," 的 ",[20,33,34],{},"\u003Cname>","、",[20,37,38],{},"CMakeLists.txt",[20,40,41],{},"project()"," 和 launch 中的包查找名称同步改为 ",[20,44,26],{},"。",[16,47,48,49,45],{},"以下源码路径均相对于导航工作区 ",[20,50,51],{},"\u002Fhome\u002Ftungchiahui\u002FUserFolder\u002FMySource\u002Fysu2026_rm_sentry\u002Fysu2026_rm_sentry_nav",[16,53,54,55,58,59,62,63,66,67,70,71,73],{},"将复制后的 ",[20,56,57],{},"src\u002Frobot_description\u002Fresource\u002Fxmacro\u002Fpb2025_sentry_robot.sdf.xmacro"," 重命名为 ",[20,60,61],{},"reality_robot.sdf.xmacro","，保留 ",[20,64,65],{},"simulation_robot.sdf.xmacro","，删掉本包中不再使用的 ",[20,68,69],{},"pb2025_infantry_robot.sdf.xmacro","。上游 ",[20,72,22],{}," 包保留作为参考。",[16,75,76,77,80,81,84,85,87,88,90],{},"之前本地包名为 ",[20,78,79],{},"ysu2026_robot_description","，实车入口文件为 ",[20,82,83],{},"ysu2026_sentry_robot.sdf.xmacro","；现在分别改为 ",[20,86,26],{}," 和 ",[20,89,61],{},"。当前相关目录如下：",[92,93,99],"pre",{"className":94,"code":96,"language":97,"meta":98},[95],"language-text","src\u002F\n├── robot_description\u002F\n│   ├── package.xml\n│   ├── CMakeLists.txt\n│   ├── README.md\n│   ├── dependencies.repos\n│   ├── launch\u002Frobot_description_launch.py\n│   ├── params\u002Frobot_description.yaml\n│   ├── env-hooks\u002Fgazebo.dsv.in\n│   ├── rviz\u002Fvisualize_robot.rviz\n│   └── resource\u002F\n│       ├── xmacro\u002F\n│       │   ├── reality_robot.sdf.xmacro\n│       │   └── simulation_robot.sdf.xmacro\n│       └── models\u002F\n│           ├── mid360\u002F\n│           ├── industrial_camera\u002F\n│           └── rplidar_a2\u002F\n└── rmoss_gz_resources\u002F\n    └── resource\u002Fmodels\u002Fysu2026_sentry_robot\u002F\n        ├── ysu2026_sentry_robot.def.xmacro\n        ├── model.sdf.xmacro\n        ├── model.config\n        └── model.sdf\n","text","",[20,100,96],{"__ignoreMap":98},[16,102,103,105,106,87,109,112,113,116],{},[20,104,26],{}," 是通用的描述加载与 TF 发布功能包；",[20,107,108],{},"reality_robot",[20,110,111],{},"simulation_robot"," 分别是实车、仿真描述入口。底层 ",[20,114,115],{},"ysu2026_sentry_robot.def.xmacro"," 定义当前车型的底盘、轮子、云台和装甲板结构，保留车型名称。两份入口仍通过 include 和宏调用使用它。",[16,118,119,120,123,124,127],{},"入口名称通用化后，当前机械尺寸、雷达安装位置和关节状态来源仍是当前机器人的配置。换车时可以更换入口中的模型 include、宏调用与安装参数，也可以用 ",[20,121,122],{},"robot_xmacro_file"," 指定其他描述文件、用 ",[20,125,126],{},"params_file"," 指定对应节点配置。",[129,130,131],"h3",{"id":131},"扩展知识点",[133,134,136],"h4",{"id":135},"xmacro机器人模型宏文件","xmacro（机器人模型宏文件）",[138,139,140],"ol",{},[141,142,143],"li",{},"变量基本完全对应",[16,145,146],{},"xacro",[92,148,152],{"className":149,"code":150,"language":151,"meta":98,"style":98},"language-xml shiki shiki-themes github-light github-dark","\u003Cxacro:property name=\"wheel_radius\" value=\"0.076\"\u002F>\n\n\u003Ccylinder radius=\"${wheel_radius}\" length=\"0.03\"\u002F>\n","xml",[20,153,154,189,196],{"__ignoreMap":98},[155,156,159,163,167,171,174,178,181,183,186],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"sVt8B","\u003C",[155,164,166],{"class":165},"s9eBZ","xacro:property",[155,168,170],{"class":169},"sScJk"," name",[155,172,173],{"class":161},"=",[155,175,177],{"class":176},"sZZnC","\"wheel_radius\"",[155,179,180],{"class":169}," value",[155,182,173],{"class":161},[155,184,185],{"class":176},"\"0.076\"",[155,187,188],{"class":161},"\u002F>\n",[155,190,192],{"class":157,"line":191},2,[155,193,195],{"emptyLinePlaceholder":194},true,"\n",[155,197,199,201,204,207,209,212,215,217,220],{"class":157,"line":198},3,[155,200,162],{"class":161},[155,202,203],{"class":165},"cylinder",[155,205,206],{"class":169}," radius",[155,208,173],{"class":161},[155,210,211],{"class":176},"\"${wheel_radius}\"",[155,213,214],{"class":169}," length",[155,216,173],{"class":161},[155,218,219],{"class":176},"\"0.03\"",[155,221,188],{"class":161},[16,223,224],{},"xmacro",[92,226,228],{"className":149,"code":227,"language":151,"meta":98,"style":98},"\u003Cxmacro_define_value name=\"wheel_radius\" value=\"0.076\"\u002F>\n\n\u003Ccylinder>\n    \u003Cradius>${wheel_radius}\u003C\u002Fradius>\n    \u003Clength>0.03\u003C\u002Flength>\n\u003C\u002Fcylinder>\n",[20,229,230,251,255,264,280,295],{"__ignoreMap":98},[155,231,232,234,237,239,241,243,245,247,249],{"class":157,"line":158},[155,233,162],{"class":161},[155,235,236],{"class":165},"xmacro_define_value",[155,238,170],{"class":169},[155,240,173],{"class":161},[155,242,177],{"class":176},[155,244,180],{"class":169},[155,246,173],{"class":161},[155,248,185],{"class":176},[155,250,188],{"class":161},[155,252,253],{"class":157,"line":191},[155,254,195],{"emptyLinePlaceholder":194},[155,256,257,259,261],{"class":157,"line":198},[155,258,162],{"class":161},[155,260,203],{"class":165},[155,262,263],{"class":161},">\n",[155,265,267,270,273,276,278],{"class":157,"line":266},4,[155,268,269],{"class":161},"    \u003C",[155,271,272],{"class":165},"radius",[155,274,275],{"class":161},">${wheel_radius}\u003C\u002F",[155,277,272],{"class":165},[155,279,263],{"class":161},[155,281,283,285,288,291,293],{"class":157,"line":282},5,[155,284,269],{"class":161},[155,286,287],{"class":165},"length",[155,289,290],{"class":161},">0.03\u003C\u002F",[155,292,287],{"class":165},[155,294,263],{"class":161},[155,296,298,301,303],{"class":157,"line":297},6,[155,299,300],{"class":161},"\u003C\u002F",[155,302,203],{"class":165},[155,304,263],{"class":161},[138,306,307],{"start":191},[141,308,309],{},"宏定义也几乎一一对应",[16,311,146],{},[92,313,315],{"className":149,"code":314,"language":151,"meta":98,"style":98},"\u003Cxacro:macro name=\"wheel\" params=\"name radius width\">\n    \u003Clink name=\"${name}\">\n        ...\n    \u003C\u002Flink>\n\u003C\u002Fxacro:macro>\n",[20,316,317,341,357,362,371],{"__ignoreMap":98},[155,318,319,321,324,326,328,331,334,336,339],{"class":157,"line":158},[155,320,162],{"class":161},[155,322,323],{"class":165},"xacro:macro",[155,325,170],{"class":169},[155,327,173],{"class":161},[155,329,330],{"class":176},"\"wheel\"",[155,332,333],{"class":169}," params",[155,335,173],{"class":161},[155,337,338],{"class":176},"\"name radius width\"",[155,340,263],{"class":161},[155,342,343,345,348,350,352,355],{"class":157,"line":191},[155,344,269],{"class":161},[155,346,347],{"class":165},"link",[155,349,170],{"class":169},[155,351,173],{"class":161},[155,353,354],{"class":176},"\"${name}\"",[155,356,263],{"class":161},[155,358,359],{"class":157,"line":198},[155,360,361],{"class":161},"        ...\n",[155,363,364,367,369],{"class":157,"line":266},[155,365,366],{"class":161},"    \u003C\u002F",[155,368,347],{"class":165},[155,370,263],{"class":161},[155,372,373,375,377],{"class":157,"line":282},[155,374,300],{"class":161},[155,376,323],{"class":165},[155,378,263],{"class":161},[16,380,381],{},"调用：",[92,383,385],{"className":149,"code":384,"language":151,"meta":98,"style":98},"\u003Cxacro:wheel\n    name=\"front_left_wheel\"\n    radius=\"0.076\"\n    width=\"0.03\"\n\u002F>\n",[20,386,387,394,404,414,424],{"__ignoreMap":98},[155,388,389,391],{"class":157,"line":158},[155,390,162],{"class":161},[155,392,393],{"class":165},"xacro:wheel\n",[155,395,396,399,401],{"class":157,"line":191},[155,397,398],{"class":169},"    name",[155,400,173],{"class":161},[155,402,403],{"class":176},"\"front_left_wheel\"\n",[155,405,406,409,411],{"class":157,"line":198},[155,407,408],{"class":169},"    radius",[155,410,173],{"class":161},[155,412,413],{"class":176},"\"0.076\"\n",[155,415,416,419,421],{"class":157,"line":266},[155,417,418],{"class":169},"    width",[155,420,173],{"class":161},[155,422,423],{"class":176},"\"0.03\"\n",[155,425,426],{"class":157,"line":282},[155,427,188],{"class":161},[16,429,224],{},[92,431,433],{"className":149,"code":432,"language":151,"meta":98,"style":98},"\u003Cxmacro_define_block\n    name=\"wheel\"\n    params=\"name radius width\">\n\n    \u003Clink name=\"${name}\">\n        ...\n    \u003C\u002Flink>\n\n\u003C\u002Fxmacro_define_block>\n",[20,434,435,442,451,462,466,480,484,493,498],{"__ignoreMap":98},[155,436,437,439],{"class":157,"line":158},[155,438,162],{"class":161},[155,440,441],{"class":165},"xmacro_define_block\n",[155,443,444,446,448],{"class":157,"line":191},[155,445,398],{"class":169},[155,447,173],{"class":161},[155,449,450],{"class":176},"\"wheel\"\n",[155,452,453,456,458,460],{"class":157,"line":198},[155,454,455],{"class":169},"    params",[155,457,173],{"class":161},[155,459,338],{"class":176},[155,461,263],{"class":161},[155,463,464],{"class":157,"line":266},[155,465,195],{"emptyLinePlaceholder":194},[155,467,468,470,472,474,476,478],{"class":157,"line":282},[155,469,269],{"class":161},[155,471,347],{"class":165},[155,473,170],{"class":169},[155,475,173],{"class":161},[155,477,354],{"class":176},[155,479,263],{"class":161},[155,481,482],{"class":157,"line":297},[155,483,361],{"class":161},[155,485,487,489,491],{"class":157,"line":486},7,[155,488,366],{"class":161},[155,490,347],{"class":165},[155,492,263],{"class":161},[155,494,496],{"class":157,"line":495},8,[155,497,195],{"emptyLinePlaceholder":194},[155,499,501,503,506],{"class":157,"line":500},9,[155,502,300],{"class":161},[155,504,505],{"class":165},"xmacro_define_block",[155,507,263],{"class":161},[16,509,381],{},[92,511,513],{"className":149,"code":512,"language":151,"meta":98,"style":98},"\u003Cxmacro_block\n    name=\"wheel\"\n    name_arg=\"front_left_wheel\"\n    radius=\"0.076\"\n    width=\"0.03\"\n\u002F>\n",[20,514,515,522,530,539,547,555],{"__ignoreMap":98},[155,516,517,519],{"class":157,"line":158},[155,518,162],{"class":161},[155,520,521],{"class":165},"xmacro_block\n",[155,523,524,526,528],{"class":157,"line":191},[155,525,398],{"class":169},[155,527,173],{"class":161},[155,529,450],{"class":176},[155,531,532,535,537],{"class":157,"line":198},[155,533,534],{"class":169},"    name_arg",[155,536,173],{"class":161},[155,538,403],{"class":176},[155,540,541,543,545],{"class":157,"line":266},[155,542,408],{"class":169},[155,544,173],{"class":161},[155,546,413],{"class":176},[155,548,549,551,553],{"class":157,"line":282},[155,550,418],{"class":169},[155,552,173],{"class":161},[155,554,423],{"class":176},[155,556,557],{"class":157,"line":297},[155,558,188],{"class":161},[138,560,561],{"start":198},[141,562,563],{},"include",[16,565,146],{},[92,567,569],{"className":149,"code":568,"language":151,"meta":98,"style":98},"\u003Cxacro:include filename=\"wheel.xacro\"\u002F>\n",[20,570,571],{"__ignoreMap":98},[155,572,573,575,578,581,583,586],{"class":157,"line":158},[155,574,162],{"class":161},[155,576,577],{"class":165},"xacro:include",[155,579,580],{"class":169}," filename",[155,582,173],{"class":161},[155,584,585],{"class":176},"\"wheel.xacro\"",[155,587,188],{"class":161},[16,589,224],{},[92,591,593],{"className":149,"code":592,"language":151,"meta":98,"style":98},"\u003Cxmacro_include uri=\"file:\u002F\u002Fwheel.sdf.xmacro\"\u002F>\n",[20,594,595],{"__ignoreMap":98},[155,596,597,599,602,605,607,610],{"class":157,"line":158},[155,598,162],{"class":161},[155,600,601],{"class":165},"xmacro_include",[155,603,604],{"class":169}," uri",[155,606,173],{"class":161},[155,608,609],{"class":176},"\"file:\u002F\u002Fwheel.sdf.xmacro\"",[155,611,188],{"class":161},[16,613,614],{},"在当前项目中还可以看到：",[92,616,618],{"className":149,"code":617,"language":151,"meta":98,"style":98},"\u003Cxmacro_include\n    uri=\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\"\n\u002F>\n",[20,619,620,627,637],{"__ignoreMap":98},[155,621,622,624],{"class":157,"line":158},[155,623,162],{"class":161},[155,625,626],{"class":165},"xmacro_include\n",[155,628,629,632,634],{"class":157,"line":191},[155,630,631],{"class":169},"    uri",[155,633,173],{"class":161},[155,635,636],{"class":176},"\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\"\n",[155,638,639],{"class":157,"line":198},[155,640,188],{"class":161},[16,642,643,644,647,648,651],{},"这里的",[20,645,646],{},"model:\u002F\u002F","是 ",[20,649,650],{},"sdformat_tools"," 针对 Gazebo \u002F SDF 做的 URI 解析支持。",[138,653,654],{"start":266},[141,655,656],{},"${} 表达式",[16,658,659],{},"xmacro 和 xacro 都支持类似：",[92,661,663],{"className":149,"code":662,"language":151,"meta":98,"style":98},"${radius}\n",[20,664,665],{"__ignoreMap":98},[155,666,667],{"class":157,"line":158},[155,668,662],{"class":161},[16,670,671],{},"以及数学表达式：",[92,673,675],{"className":149,"code":674,"language":151,"meta":98,"style":98},"${2 * radius}\n",[20,676,677],{"__ignoreMap":98},[155,678,679],{"class":157,"line":158},[155,680,674],{"class":161},[16,682,683],{},"例如：",[92,685,687],{"className":149,"code":686,"language":151,"meta":98,"style":98},"\u003Cixx>${m*(y*y+z*z)\u002F12}\u003C\u002Fixx>\n",[20,688,689],{"__ignoreMap":98},[155,690,691,693,696,699,701],{"class":157,"line":158},[155,692,162],{"class":161},[155,694,695],{"class":165},"ixx",[155,697,698],{"class":161},">${m*(y*y+z*z)\u002F12}\u003C\u002F",[155,700,695],{"class":165},[155,702,263],{"class":161},[16,704,705],{},"所以可以在宏参数中进行简单数学运算。",[138,707,708],{"start":282},[141,709,710],{},"条件",[16,712,146],{},[92,714,716],{"className":149,"code":715,"language":151,"meta":98,"style":98},"\u003Cxacro:if value=\"${use_lidar}\">\n    ...\n\u003C\u002Fxacro:if>\n",[20,717,718,734,739],{"__ignoreMap":98},[155,719,720,722,725,727,729,732],{"class":157,"line":158},[155,721,162],{"class":161},[155,723,724],{"class":165},"xacro:if",[155,726,180],{"class":169},[155,728,173],{"class":161},[155,730,731],{"class":176},"\"${use_lidar}\"",[155,733,263],{"class":161},[155,735,736],{"class":157,"line":191},[155,737,738],{"class":161},"    ...\n",[155,740,741,743,745],{"class":157,"line":198},[155,742,300],{"class":161},[155,744,724],{"class":165},[155,746,263],{"class":161},[16,748,224],{},[16,750,751],{},"xmacro 中通常可以通过宏调用的 condition 控制：",[92,753,755],{"className":149,"code":754,"language":151,"meta":98,"style":98},"\u003Cxmacro_block\n    name=\"lidar\"\n    condition=\"${use_lidar}\"\n    ...\n\u002F>\n",[20,756,757,763,772,782,786],{"__ignoreMap":98},[155,758,759,761],{"class":157,"line":158},[155,760,162],{"class":161},[155,762,521],{"class":165},[155,764,765,767,769],{"class":157,"line":191},[155,766,398],{"class":169},[155,768,173],{"class":161},[155,770,771],{"class":176},"\"lidar\"\n",[155,773,774,777,779],{"class":157,"line":198},[155,775,776],{"class":169},"    condition",[155,778,173],{"class":161},[155,780,781],{"class":176},"\"${use_lidar}\"\n",[155,783,784],{"class":157,"line":266},[155,785,738],{"class":161},[155,787,788],{"class":157,"line":282},[155,789,188],{"class":161},[16,791,792],{},"条件为真时展开这个宏，条件为假时不展开。",[138,794,795],{"start":297},[141,796,797],{},".def.xmacro",[16,799,683],{},[92,801,804],{"className":802,"code":803,"language":97,"meta":98},[95],"rm25_example_robot.def.xmacro\n",[20,805,803],{"__ignoreMap":98},[16,807,643,808,811],{},[20,809,810],{},".def","并不是 xmacro 的特殊语法，只是一种文件命名习惯。",[16,813,814],{},"通常表示：这个文件主要负责定义宏。",[16,816,817],{},"类似：",[92,819,822],{"className":820,"code":821,"language":97,"meta":98},[95],"xxx.def.xmacro\n    ↓\n定义机器人结构、link、joint 等宏\n",[20,823,821],{"__ignoreMap":98},[16,825,826],{},"然后：",[92,828,831],{"className":829,"code":830,"language":97,"meta":98},[95],"simulation_robot.sdf.xmacro\n    ↓\ninclude 前面的 def.xmacro\n    ↓\n调用其中定义的宏\n    ↓\n生成完整 SDF\n",[20,832,830],{"__ignoreMap":98},[16,834,835],{},"例如以后可以写：",[92,837,840],{"className":838,"code":839,"language":97,"meta":98},[95],"ysu2026_sentry_robot.def.xmacro\n",[20,841,839],{"__ignoreMap":98},[16,843,844],{},"里面定义：",[92,846,848],{"className":149,"code":847,"language":151,"meta":98,"style":98},"\u003Cxmacro_define_block\n    name=\"ysu2026_sentry_robot\"\n    params=\"chassis_height gimbal_yaw_height\">\n\n    ...\n\n\u003C\u002Fxmacro_define_block>\n",[20,849,850,856,865,876,880,884,888],{"__ignoreMap":98},[155,851,852,854],{"class":157,"line":158},[155,853,162],{"class":161},[155,855,441],{"class":165},[155,857,858,860,862],{"class":157,"line":191},[155,859,398],{"class":169},[155,861,173],{"class":161},[155,863,864],{"class":176},"\"ysu2026_sentry_robot\"\n",[155,866,867,869,871,874],{"class":157,"line":198},[155,868,455],{"class":169},[155,870,173],{"class":161},[155,872,873],{"class":176},"\"chassis_height gimbal_yaw_height\"",[155,875,263],{"class":161},[155,877,878],{"class":157,"line":266},[155,879,195],{"emptyLinePlaceholder":194},[155,881,882],{"class":157,"line":282},[155,883,738],{"class":161},[155,885,886],{"class":157,"line":297},[155,887,195],{"emptyLinePlaceholder":194},[155,889,890,892,894],{"class":157,"line":486},[155,891,300],{"class":161},[155,893,505],{"class":165},[155,895,263],{"class":161},[16,897,898],{},"然后在：",[92,900,902],{"className":149,"code":901,"language":151,"meta":98,"style":98},"simulation_robot.sdf.xmacro\n",[20,903,904],{"__ignoreMap":98},[155,905,906],{"class":157,"line":158},[155,907,901],{"class":161},[16,909,910],{},"中引入并调用：",[92,912,914],{"className":149,"code":913,"language":151,"meta":98,"style":98},"\u003Cxmacro_include\n    uri=\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\"\n\u002F>\n\n\u003Cxmacro_block\n    name=\"ysu2026_sentry_robot\"\n    chassis_height=\"${chassis_height}\"\n    gimbal_yaw_height=\"${gimbal_yaw_height}\"\n\u002F>\n",[20,915,916,922,931,935,939,945,953,963,973],{"__ignoreMap":98},[155,917,918,920],{"class":157,"line":158},[155,919,162],{"class":161},[155,921,626],{"class":165},[155,923,924,926,928],{"class":157,"line":191},[155,925,631],{"class":169},[155,927,173],{"class":161},[155,929,930],{"class":176},"\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\"\n",[155,932,933],{"class":157,"line":198},[155,934,188],{"class":161},[155,936,937],{"class":157,"line":266},[155,938,195],{"emptyLinePlaceholder":194},[155,940,941,943],{"class":157,"line":282},[155,942,162],{"class":161},[155,944,521],{"class":165},[155,946,947,949,951],{"class":157,"line":297},[155,948,398],{"class":169},[155,950,173],{"class":161},[155,952,864],{"class":176},[155,954,955,958,960],{"class":157,"line":486},[155,956,957],{"class":169},"    chassis_height",[155,959,173],{"class":161},[155,961,962],{"class":176},"\"${chassis_height}\"\n",[155,964,965,968,970],{"class":157,"line":495},[155,966,967],{"class":169},"    gimbal_yaw_height",[155,969,173],{"class":161},[155,971,972],{"class":176},"\"${gimbal_yaw_height}\"\n",[155,974,975],{"class":157,"line":500},[155,976,188],{"class":161},[16,978,979],{},"记忆：",[92,981,984],{"className":982,"code":983,"language":97,"meta":98},[95],"xmacro_define_value\n    ≈ xacro:property\n\nxmacro_define_block\n    ≈ xacro:macro\n\nxmacro_block\n    ≈ 调用 xacro macro\n\nxmacro_include\n    ≈ xacro:include\n\n${...}\n    ≈ ${...}\n",[20,985,983],{"__ignoreMap":98},[129,987,988],{"id":988},"总体框架",[133,990,992],{"id":991},"xmacro介绍机器人模型宏文件","xmacro介绍（机器人模型宏文件）",[16,994,995],{},"这个xmacro是本项目里自定义的一种格式，为了实现：",[92,997,1000],{"className":998,"code":999,"language":97,"meta":98},[95],"                  ┌→ SDF → Gazebo\n.sdf.xmacro ──────┤\n                  └→ SDF → URDF → robot_state_publisher\n",[20,1001,999],{"__ignoreMap":98},[16,1003,1004],{},"而之前学过的xacro+urdf,这个项目主要是xmacro+sdf。（对比着理解）",[16,1006,1007],{},"然后我们之前接触的都是",[92,1009,1012],{"className":1010,"code":1011,"language":97,"meta":98},[95],"robot.urdf.xacro\n      ↓\n    xacro\n      ↓\nrobot_description\n      ↓\nrobot_state_publisher\n      ↓\nTF\n",[20,1013,1011],{"__ignoreMap":98},[16,1015,1016],{},"而这个项目是：",[92,1018,1021],{"className":1019,"code":1020,"language":97,"meta":98},[95],"simulation_robot.sdf.xmacro\n          ↓\n      xmacro4sdf\n          ↓\n         SDF\n       ↙     ↘\n   Gazebo    sdf2urdf\n                 ↓\n               URDF\n                 ↓\n      robot_state_publisher\n                 ↓\n                TF\n",[20,1022,1020],{"__ignoreMap":98},[1024,1025,1026,1040],"table",{},[1027,1028,1029],"thead",{},[1030,1031,1032,1036,1038],"tr",{},[1033,1034,1035],"th",{},"功能",[1033,1037,146],{},[1033,1039,224],{},[1041,1042,1043,1059,1073,1087,1102,1117,1131,1146,1159],"tbody",{},[1030,1044,1045,1049,1054],{},[1046,1047,1048],"td",{},"定义变量",[1046,1050,1051],{},[20,1052,1053],{},"\u003Cxacro:property name=\"r\" value=\"0.1\"\u002F>",[1046,1055,1056],{},[20,1057,1058],{},"\u003Cxmacro_define_value name=\"r\" value=\"0.1\"\u002F>",[1030,1060,1061,1064,1069],{},[1046,1062,1063],{},"使用变量",[1046,1065,1066],{},[20,1067,1068],{},"${r}",[1046,1070,1071],{},[20,1072,1068],{},[1030,1074,1075,1078,1083],{},[1046,1076,1077],{},"数学表达式",[1046,1079,1080],{},[20,1081,1082],{},"${2 * r}",[1046,1084,1085],{},[20,1086,1082],{},[1030,1088,1089,1092,1097],{},[1046,1090,1091],{},"定义宏",[1046,1093,1094],{},[20,1095,1096],{},"\u003Cxacro:macro name=\"wheel\" params=\"r w\">",[1046,1098,1099],{},[20,1100,1101],{},"\u003Cxmacro_define_block name=\"wheel\" params=\"r w\">",[1030,1103,1104,1107,1112],{},[1046,1105,1106],{},"调用宏",[1046,1108,1109],{},[20,1110,1111],{},"\u003Cxacro:wheel r=\"...\" w=\"...\"\u002F>",[1046,1113,1114],{},[20,1115,1116],{},"\u003Cxmacro_block name=\"wheel\" r=\"...\" w=\"...\"\u002F>",[1030,1118,1119,1121,1126],{},[1046,1120,563],{},[1046,1122,1123],{},[20,1124,1125],{},"\u003Cxacro:include filename=\"xxx.xacro\"\u002F>",[1046,1127,1128],{},[20,1129,1130],{},"\u003Cxmacro_include uri=\"file:\u002F\u002Fxxx.xmacro\"\u002F>",[1030,1132,1133,1135,1140],{},[1046,1134,710],{},[1046,1136,1137],{},[20,1138,1139],{},"\u003Cxacro:if value=\"${...}\">...\u003C\u002Fxacro:if>",[1046,1141,1142,1143],{},"主要通过 ",[20,1144,1145],{},"\u003Cxmacro_block ... condition=\"${...}\"\u002F>",[1030,1147,1148,1151,1156],{},[1046,1149,1150],{},"namespace",[1046,1152,1153],{},[20,1154,1155],{},"xmlns:xacro=...",[1046,1157,1158],{},"不需要",[1030,1160,1161,1164,1167],{},[1046,1162,1163],{},"参数默认值等高级功能",[1046,1165,1166],{},"较丰富",[1046,1168,1169],{},"简化很多",[133,1171,1172],{"id":1172},"如何先建立自己的功能包和模型包",[16,1174,1175,1176,1179],{},"这个",[20,1177,1178],{},"sdf.xmacro","会被依赖去发布仿真里的模型和实物的tf关系。",[16,1181,1182],{},"这里是include了下面这个文件，所以要找这个文件。",[92,1184,1186],{"className":149,"code":1185,"language":151,"meta":98,"style":98},"\u003Cxmacro_include uri=\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\" \u002F>\n",[20,1187,1188],{"__ignoreMap":98},[155,1189,1190,1192,1194,1196,1198,1201],{"class":157,"line":158},[155,1191,162],{"class":161},[155,1193,601],{"class":165},[155,1195,604],{"class":169},[155,1197,173],{"class":161},[155,1199,1200],{"class":176},"\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\"",[155,1202,1203],{"class":161}," \u002F>\n",[16,1205,1206,1207,1210,1211,1214,1215,45],{},"他在",[20,1208,1209],{},"\u002Fsrc\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Frm25_example_robot","里，\n你复制下这个大文件夹，并重命名为",[20,1212,1213],{},"ysu2026_sentry_robot","，里面的xmacro也命名为",[20,1216,115],{},[16,1218,1219],{},"这个文件里面需要修改的是：",[92,1221,1223],{"className":149,"code":1222,"language":151,"meta":98,"style":98},"\u003C!--macro defination: rm25_example_robot-->\n\u003Cxmacro_define_block\n    name=\"rm25_example_robot\"\n    params=\"sticker_type chassis_height gimbal_pitch_height gimbal_yaw_height\">\n",[20,1224,1225,1231,1237,1246],{"__ignoreMap":98},[155,1226,1227],{"class":157,"line":158},[155,1228,1230],{"class":1229},"sJ8bj","\u003C!--macro defination: rm25_example_robot-->\n",[155,1232,1233,1235],{"class":157,"line":191},[155,1234,162],{"class":161},[155,1236,441],{"class":165},[155,1238,1239,1241,1243],{"class":157,"line":198},[155,1240,398],{"class":169},[155,1242,173],{"class":161},[155,1244,1245],{"class":176},"\"rm25_example_robot\"\n",[155,1247,1248,1250,1252,1255],{"class":157,"line":266},[155,1249,455],{"class":169},[155,1251,173],{"class":161},[155,1253,1254],{"class":176},"\"sticker_type chassis_height gimbal_pitch_height gimbal_yaw_height\"",[155,1256,263],{"class":161},[16,1258,1259],{},"把这里的name改成",[92,1261,1263],{"className":149,"code":1262,"language":151,"meta":98,"style":98},"\u003C!--macro definition: ysu2026_sentry_robot-->\n\u003Cxmacro_define_block\n    name=\"ysu2026_sentry_robot\"\n    params=\"sticker_type chassis_height gimbal_pitch_height gimbal_yaw_height\">\n",[20,1264,1265,1270,1276,1284],{"__ignoreMap":98},[155,1266,1267],{"class":157,"line":158},[155,1268,1269],{"class":1229},"\u003C!--macro definition: ysu2026_sentry_robot-->\n",[155,1271,1272,1274],{"class":157,"line":191},[155,1273,162],{"class":161},[155,1275,441],{"class":165},[155,1277,1278,1280,1282],{"class":157,"line":198},[155,1279,398],{"class":169},[155,1281,173],{"class":161},[155,1283,864],{"class":176},[155,1285,1286,1288,1290,1292],{"class":157,"line":266},[155,1287,455],{"class":169},[155,1289,173],{"class":161},[155,1291,1254],{"class":176},[155,1293,263],{"class":161},[16,1295,1296,1297,1300],{},"接下来去修改同目录的",[20,1298,1299],{},"model.sdf.xmacro","：",[92,1302,1304],{"className":149,"code":1303,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\" \u002F>\n\n    \u003C!--rm25_example_robot model-->\n    \u003Cmodel name=\"rm25_example_robot\">\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"rm25_example_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,1305,1306,1311,1325,1329,1334,1350,1365],{"__ignoreMap":98},[155,1307,1308],{"class":157,"line":158},[155,1309,1310],{"class":1229},"    \u003C!--include defination-->\n",[155,1312,1313,1315,1317,1319,1321,1323],{"class":157,"line":191},[155,1314,269],{"class":161},[155,1316,601],{"class":165},[155,1318,604],{"class":169},[155,1320,173],{"class":161},[155,1322,1200],{"class":176},[155,1324,1203],{"class":161},[155,1326,1327],{"class":157,"line":198},[155,1328,195],{"emptyLinePlaceholder":194},[155,1330,1331],{"class":157,"line":266},[155,1332,1333],{"class":1229},"    \u003C!--rm25_example_robot model-->\n",[155,1335,1336,1338,1341,1343,1345,1348],{"class":157,"line":282},[155,1337,269],{"class":161},[155,1339,1340],{"class":165},"model",[155,1342,170],{"class":169},[155,1344,173],{"class":161},[155,1346,1347],{"class":176},"\"rm25_example_robot\"",[155,1349,263],{"class":161},[155,1351,1352,1355,1358,1361,1363],{"class":157,"line":297},[155,1353,1354],{"class":161},"        \u003C",[155,1356,1357],{"class":165},"pose",[155,1359,1360],{"class":161},">0 0 0.15 0 0 0\u003C\u002F",[155,1362,1357],{"class":165},[155,1364,263],{"class":161},[155,1366,1367,1369,1372,1374,1376,1378,1381,1383,1386,1389,1391,1394,1397,1399,1402,1405,1407,1410],{"class":157,"line":486},[155,1368,1354],{"class":161},[155,1370,1371],{"class":165},"xmacro_block",[155,1373,170],{"class":169},[155,1375,173],{"class":161},[155,1377,1347],{"class":176},[155,1379,1380],{"class":169}," sticker_type",[155,1382,173],{"class":161},[155,1384,1385],{"class":176},"\"${global_armor_sticker_type}\"",[155,1387,1388],{"class":169}," chassis_height",[155,1390,173],{"class":161},[155,1392,1393],{"class":176},"\"${chassis_height}\"",[155,1395,1396],{"class":169}," gimbal_yaw_height",[155,1398,173],{"class":161},[155,1400,1401],{"class":176},"\"${gimbal_yaw_height}\"",[155,1403,1404],{"class":169}," gimbal_pitch_height",[155,1406,173],{"class":161},[155,1408,1409],{"class":176},"\"${gimbal_pitch_height}\"",[155,1411,188],{"class":161},[16,1413,1414,1415,1418,1419,45],{},"把上面",[20,1416,1417],{},"rm25_example_robot","全部改成",[20,1420,1213],{},[92,1422,1424],{"className":149,"code":1423,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\" \u002F>\n\n    \u003C!--ysu2026_sentry_robot model-->\n    \u003Cmodel name=\"ysu2026_sentry_robot\">\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"ysu2026_sentry_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,1425,1426,1430,1445,1449,1454,1469,1481],{"__ignoreMap":98},[155,1427,1428],{"class":157,"line":158},[155,1429,1310],{"class":1229},[155,1431,1432,1434,1436,1438,1440,1443],{"class":157,"line":191},[155,1433,269],{"class":161},[155,1435,601],{"class":165},[155,1437,604],{"class":169},[155,1439,173],{"class":161},[155,1441,1442],{"class":176},"\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\"",[155,1444,1203],{"class":161},[155,1446,1447],{"class":157,"line":198},[155,1448,195],{"emptyLinePlaceholder":194},[155,1450,1451],{"class":157,"line":266},[155,1452,1453],{"class":1229},"    \u003C!--ysu2026_sentry_robot model-->\n",[155,1455,1456,1458,1460,1462,1464,1467],{"class":157,"line":282},[155,1457,269],{"class":161},[155,1459,1340],{"class":165},[155,1461,170],{"class":169},[155,1463,173],{"class":161},[155,1465,1466],{"class":176},"\"ysu2026_sentry_robot\"",[155,1468,263],{"class":161},[155,1470,1471,1473,1475,1477,1479],{"class":157,"line":297},[155,1472,1354],{"class":161},[155,1474,1357],{"class":165},[155,1476,1360],{"class":161},[155,1478,1357],{"class":165},[155,1480,263],{"class":161},[155,1482,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517],{"class":157,"line":486},[155,1484,1354],{"class":161},[155,1486,1371],{"class":165},[155,1488,170],{"class":169},[155,1490,173],{"class":161},[155,1492,1466],{"class":176},[155,1494,1380],{"class":169},[155,1496,173],{"class":161},[155,1498,1385],{"class":176},[155,1500,1388],{"class":169},[155,1502,173],{"class":161},[155,1504,1393],{"class":176},[155,1506,1396],{"class":169},[155,1508,173],{"class":161},[155,1510,1401],{"class":176},[155,1512,1404],{"class":169},[155,1514,173],{"class":161},[155,1516,1409],{"class":176},[155,1518,188],{"class":161},[16,1520,1296,1521,1300],{},[20,1522,1523],{},"model.config",[92,1525,1527],{"className":149,"code":1526,"language":151,"meta":98,"style":98},"\u003C?xml version=\"1.0\"?>\n\u003Cmodel>\n  \u003Cname>rmua19_standard_robot\u003C\u002Fname>\n  \u003Cversion>1.0\u003C\u002Fversion>\n  \u003Csdf version=\"1.7\">model.sdf\u003C\u002Fsdf>\n\n  \u003Cauthor>\n    \u003Cname>Lihan Chen\u003C\u002Fname>\n    \u003Cemail>lihanchen2004@163.com\u003C\u002Femail>\n  \u003C\u002Fauthor>\n\n  \u003Cdescription>\n    The Basic Version of Standard Robot for RoboMaster University Series.\n  \u003C\u002Fdescription>\n\u003C\u002Fmodel>\n",[20,1528,1529,1547,1555,1570,1584,1605,1609,1618,1631,1645,1655,1660,1670,1676,1685],{"__ignoreMap":98},[155,1530,1531,1534,1536,1539,1541,1544],{"class":157,"line":158},[155,1532,1533],{"class":161},"\u003C?",[155,1535,151],{"class":165},[155,1537,1538],{"class":169}," version",[155,1540,173],{"class":161},[155,1542,1543],{"class":176},"\"1.0\"",[155,1545,1546],{"class":161},"?>\n",[155,1548,1549,1551,1553],{"class":157,"line":191},[155,1550,162],{"class":161},[155,1552,1340],{"class":165},[155,1554,263],{"class":161},[155,1556,1557,1560,1563,1566,1568],{"class":157,"line":198},[155,1558,1559],{"class":161},"  \u003C",[155,1561,1562],{"class":165},"name",[155,1564,1565],{"class":161},">rmua19_standard_robot\u003C\u002F",[155,1567,1562],{"class":165},[155,1569,263],{"class":161},[155,1571,1572,1574,1577,1580,1582],{"class":157,"line":266},[155,1573,1559],{"class":161},[155,1575,1576],{"class":165},"version",[155,1578,1579],{"class":161},">1.0\u003C\u002F",[155,1581,1576],{"class":165},[155,1583,263],{"class":161},[155,1585,1586,1588,1591,1593,1595,1598,1601,1603],{"class":157,"line":282},[155,1587,1559],{"class":161},[155,1589,1590],{"class":165},"sdf",[155,1592,1538],{"class":169},[155,1594,173],{"class":161},[155,1596,1597],{"class":176},"\"1.7\"",[155,1599,1600],{"class":161},">model.sdf\u003C\u002F",[155,1602,1590],{"class":165},[155,1604,263],{"class":161},[155,1606,1607],{"class":157,"line":297},[155,1608,195],{"emptyLinePlaceholder":194},[155,1610,1611,1613,1616],{"class":157,"line":486},[155,1612,1559],{"class":161},[155,1614,1615],{"class":165},"author",[155,1617,263],{"class":161},[155,1619,1620,1622,1624,1627,1629],{"class":157,"line":495},[155,1621,269],{"class":161},[155,1623,1562],{"class":165},[155,1625,1626],{"class":161},">Lihan Chen\u003C\u002F",[155,1628,1562],{"class":165},[155,1630,263],{"class":161},[155,1632,1633,1635,1638,1641,1643],{"class":157,"line":500},[155,1634,269],{"class":161},[155,1636,1637],{"class":165},"email",[155,1639,1640],{"class":161},">lihanchen2004@163.com\u003C\u002F",[155,1642,1637],{"class":165},[155,1644,263],{"class":161},[155,1646,1648,1651,1653],{"class":157,"line":1647},10,[155,1649,1650],{"class":161},"  \u003C\u002F",[155,1652,1615],{"class":165},[155,1654,263],{"class":161},[155,1656,1658],{"class":157,"line":1657},11,[155,1659,195],{"emptyLinePlaceholder":194},[155,1661,1663,1665,1668],{"class":157,"line":1662},12,[155,1664,1559],{"class":161},[155,1666,1667],{"class":165},"description",[155,1669,263],{"class":161},[155,1671,1673],{"class":157,"line":1672},13,[155,1674,1675],{"class":161},"    The Basic Version of Standard Robot for RoboMaster University Series.\n",[155,1677,1679,1681,1683],{"class":157,"line":1678},14,[155,1680,1650],{"class":161},[155,1682,1667],{"class":165},[155,1684,263],{"class":161},[155,1686,1688,1690,1692],{"class":157,"line":1687},15,[155,1689,300],{"class":161},[155,1691,1340],{"class":165},[155,1693,263],{"class":161},[16,1695,1696],{},"修改成：",[92,1698,1700],{"className":149,"code":1699,"language":151,"meta":98,"style":98},"\u003C?xml version=\"1.0\"?>\n\u003Cmodel>\n  \u003Cname>ysu2026_sentry_robot\u003C\u002Fname>\n  \u003Cversion>1.0\u003C\u002Fversion>\n  \u003Csdf version=\"1.7\">model.sdf\u003C\u002Fsdf>\n\n  \u003Cauthor>\n    \u003Cname>Tung Chia-hui\u003C\u002Fname>\n    \u003Cemail>tungchiahui@gmail.com\u003C\u002Femail>\n  \u003C\u002Fauthor>\n\n  \u003Cdescription>\n    Yanshan University RoboMaster 2026 Sentry Robot.\n  \u003C\u002Fdescription>\n\u003C\u002Fmodel>\n",[20,1701,1702,1716,1724,1737,1749,1767,1771,1779,1792,1805,1813,1817,1825,1830,1838],{"__ignoreMap":98},[155,1703,1704,1706,1708,1710,1712,1714],{"class":157,"line":158},[155,1705,1533],{"class":161},[155,1707,151],{"class":165},[155,1709,1538],{"class":169},[155,1711,173],{"class":161},[155,1713,1543],{"class":176},[155,1715,1546],{"class":161},[155,1717,1718,1720,1722],{"class":157,"line":191},[155,1719,162],{"class":161},[155,1721,1340],{"class":165},[155,1723,263],{"class":161},[155,1725,1726,1728,1730,1733,1735],{"class":157,"line":198},[155,1727,1559],{"class":161},[155,1729,1562],{"class":165},[155,1731,1732],{"class":161},">ysu2026_sentry_robot\u003C\u002F",[155,1734,1562],{"class":165},[155,1736,263],{"class":161},[155,1738,1739,1741,1743,1745,1747],{"class":157,"line":266},[155,1740,1559],{"class":161},[155,1742,1576],{"class":165},[155,1744,1579],{"class":161},[155,1746,1576],{"class":165},[155,1748,263],{"class":161},[155,1750,1751,1753,1755,1757,1759,1761,1763,1765],{"class":157,"line":282},[155,1752,1559],{"class":161},[155,1754,1590],{"class":165},[155,1756,1538],{"class":169},[155,1758,173],{"class":161},[155,1760,1597],{"class":176},[155,1762,1600],{"class":161},[155,1764,1590],{"class":165},[155,1766,263],{"class":161},[155,1768,1769],{"class":157,"line":297},[155,1770,195],{"emptyLinePlaceholder":194},[155,1772,1773,1775,1777],{"class":157,"line":486},[155,1774,1559],{"class":161},[155,1776,1615],{"class":165},[155,1778,263],{"class":161},[155,1780,1781,1783,1785,1788,1790],{"class":157,"line":495},[155,1782,269],{"class":161},[155,1784,1562],{"class":165},[155,1786,1787],{"class":161},">Tung Chia-hui\u003C\u002F",[155,1789,1562],{"class":165},[155,1791,263],{"class":161},[155,1793,1794,1796,1798,1801,1803],{"class":157,"line":500},[155,1795,269],{"class":161},[155,1797,1637],{"class":165},[155,1799,1800],{"class":161},">tungchiahui@gmail.com\u003C\u002F",[155,1802,1637],{"class":165},[155,1804,263],{"class":161},[155,1806,1807,1809,1811],{"class":157,"line":1647},[155,1808,1650],{"class":161},[155,1810,1615],{"class":165},[155,1812,263],{"class":161},[155,1814,1815],{"class":157,"line":1657},[155,1816,195],{"emptyLinePlaceholder":194},[155,1818,1819,1821,1823],{"class":157,"line":1662},[155,1820,1559],{"class":161},[155,1822,1667],{"class":165},[155,1824,263],{"class":161},[155,1826,1827],{"class":157,"line":1672},[155,1828,1829],{"class":161},"    Yanshan University RoboMaster 2026 Sentry Robot.\n",[155,1831,1832,1834,1836],{"class":157,"line":1678},[155,1833,1650],{"class":161},[155,1835,1667],{"class":165},[155,1837,263],{"class":161},[155,1839,1840,1842,1844],{"class":157,"line":1687},[155,1841,300],{"class":161},[155,1843,1340],{"class":165},[155,1845,263],{"class":161},[16,1847,643,1848,1851],{},[20,1849,1850],{},"model.sdf","不需要手动改，这玩意是自动生成的：",[92,1853,1856],{"className":1854,"code":1855,"language":97,"meta":98},[95],"model.sdf.xmacro\n      ↓\nxmacro4sdf\n      ↓\nmodel.sdf\n",[20,1857,1855],{"__ignoreMap":98},[16,1859,1860,1861,1863],{},"你可以看看",[20,1862,1850],{},"开头，明确说了这件事，而且不建议你直接修改：",[92,1865,1867],{"className":149,"code":1866,"language":151,"meta":98,"style":98},"\u003C!-- =================================================================================== -->\n\u003C!-- |    This document was autogenerated by xmacro4sdf from model.sdf.xmacro          | -->\n\u003C!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->\n\u003C!-- =================================================================================== -->\n",[20,1868,1869,1874,1879,1884],{"__ignoreMap":98},[155,1870,1871],{"class":157,"line":158},[155,1872,1873],{"class":1229},"\u003C!-- =================================================================================== -->\n",[155,1875,1876],{"class":157,"line":191},[155,1877,1878],{"class":1229},"\u003C!-- |    This document was autogenerated by xmacro4sdf from model.sdf.xmacro          | -->\n",[155,1880,1881],{"class":157,"line":198},[155,1882,1883],{"class":1229},"\u003C!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->\n",[155,1885,1886],{"class":157,"line":266},[155,1887,1873],{"class":1229},[16,1889,1890],{},"所以以后真正维护的是：",[92,1892,1895],{"className":1893,"code":1894,"language":97,"meta":98},[95],"关于模型：\nysu2026_sentry_robot.def.xmacro\nmodel.sdf.xmacro\n\n关于（这个不改问题也不大）：\nmodel.config\n",[20,1896,1894],{"__ignoreMap":98},[16,1898,1899,1900,1300],{},"回到",[20,1901,1902],{},"\u002Fsrc\u002Frobot_description\u002Fresource\u002Fxmacro\u002Freality_robot.sdf.xmacro",[92,1904,1906],{"className":149,"code":1905,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\" \u002F>\n\n    \u003C!--pb2025_sentry_robot model-->\n    \u003Cmodel name=\"pb2025_sentry_robot\">\n\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"rm25_example_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,1907,1908,1912,1926,1930,1935,1950,1954,1966],{"__ignoreMap":98},[155,1909,1910],{"class":157,"line":158},[155,1911,1310],{"class":1229},[155,1913,1914,1916,1918,1920,1922,1924],{"class":157,"line":191},[155,1915,269],{"class":161},[155,1917,601],{"class":165},[155,1919,604],{"class":169},[155,1921,173],{"class":161},[155,1923,1200],{"class":176},[155,1925,1203],{"class":161},[155,1927,1928],{"class":157,"line":198},[155,1929,195],{"emptyLinePlaceholder":194},[155,1931,1932],{"class":157,"line":266},[155,1933,1934],{"class":1229},"    \u003C!--pb2025_sentry_robot model-->\n",[155,1936,1937,1939,1941,1943,1945,1948],{"class":157,"line":282},[155,1938,269],{"class":161},[155,1940,1340],{"class":165},[155,1942,170],{"class":169},[155,1944,173],{"class":161},[155,1946,1947],{"class":176},"\"pb2025_sentry_robot\"",[155,1949,263],{"class":161},[155,1951,1952],{"class":157,"line":297},[155,1953,195],{"emptyLinePlaceholder":194},[155,1955,1956,1958,1960,1962,1964],{"class":157,"line":486},[155,1957,1354],{"class":161},[155,1959,1357],{"class":165},[155,1961,1360],{"class":161},[155,1963,1357],{"class":165},[155,1965,263],{"class":161},[155,1967,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002],{"class":157,"line":495},[155,1969,1354],{"class":161},[155,1971,1371],{"class":165},[155,1973,170],{"class":169},[155,1975,173],{"class":161},[155,1977,1347],{"class":176},[155,1979,1380],{"class":169},[155,1981,173],{"class":161},[155,1983,1385],{"class":176},[155,1985,1388],{"class":169},[155,1987,173],{"class":161},[155,1989,1393],{"class":176},[155,1991,1396],{"class":169},[155,1993,173],{"class":161},[155,1995,1401],{"class":176},[155,1997,1404],{"class":169},[155,1999,173],{"class":161},[155,2001,1409],{"class":176},[155,2003,188],{"class":161},[16,2005,2006,2007,2009,2010,2012,2013,2015,2016,2018,2019,2022,2023,45],{},"这里分开修改：include 的目录和 ",[20,2008,797],{}," 文件改为 ",[20,2011,1213],{},"，",[20,2014,1371],{}," 调用的宏名也改为 ",[20,2017,1213],{},"；入口中的顶层 ",[20,2020,2021],{},"\u003Cmodel name>"," 改为 ",[20,2024,108],{},[16,2026,2027],{},"顶层模型名表示当前描述入口，宏名表示被展开的具体机械结构，两者不必相同：",[92,2029,2031],{"className":149,"code":2030,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\" \u002F>\n\n    \u003C!--reality_robot model-->\n    \u003Cmodel name=\"reality_robot\">\n\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"ysu2026_sentry_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,2032,2033,2037,2051,2055,2060,2075,2079,2091],{"__ignoreMap":98},[155,2034,2035],{"class":157,"line":158},[155,2036,1310],{"class":1229},[155,2038,2039,2041,2043,2045,2047,2049],{"class":157,"line":191},[155,2040,269],{"class":161},[155,2042,601],{"class":165},[155,2044,604],{"class":169},[155,2046,173],{"class":161},[155,2048,1442],{"class":176},[155,2050,1203],{"class":161},[155,2052,2053],{"class":157,"line":198},[155,2054,195],{"emptyLinePlaceholder":194},[155,2056,2057],{"class":157,"line":266},[155,2058,2059],{"class":1229},"    \u003C!--reality_robot model-->\n",[155,2061,2062,2064,2066,2068,2070,2073],{"class":157,"line":282},[155,2063,269],{"class":161},[155,2065,1340],{"class":165},[155,2067,170],{"class":169},[155,2069,173],{"class":161},[155,2071,2072],{"class":176},"\"reality_robot\"",[155,2074,263],{"class":161},[155,2076,2077],{"class":157,"line":297},[155,2078,195],{"emptyLinePlaceholder":194},[155,2080,2081,2083,2085,2087,2089],{"class":157,"line":486},[155,2082,1354],{"class":161},[155,2084,1357],{"class":165},[155,2086,1360],{"class":161},[155,2088,1357],{"class":165},[155,2090,263],{"class":161},[155,2092,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127],{"class":157,"line":495},[155,2094,1354],{"class":161},[155,2096,1371],{"class":165},[155,2098,170],{"class":169},[155,2100,173],{"class":161},[155,2102,1466],{"class":176},[155,2104,1380],{"class":169},[155,2106,173],{"class":161},[155,2108,1385],{"class":176},[155,2110,1388],{"class":169},[155,2112,173],{"class":161},[155,2114,1393],{"class":176},[155,2116,1396],{"class":169},[155,2118,173],{"class":161},[155,2120,1401],{"class":176},[155,2122,1404],{"class":169},[155,2124,173],{"class":161},[155,2126,1409],{"class":176},[155,2128,188],{"class":161},[16,2130,2131,2132,2135,2136,2139,2140,1300],{},"至此上面这些在",[20,2133,2134],{},"reality","环境下已经正常了，但",[20,2137,2138],{},"simulation","还不行，打开同目录下的",[20,2141,65],{},[92,2143,2145],{"className":149,"code":2144,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Frm25_example_robot\u002Frm25_example_robot.def.xmacro\" \u002F>\n\n    \u003C!--simulation_robot model-->\n    \u003Cmodel name=\"simulation_robot\">\n\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"rm25_example_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,2146,2147,2151,2165,2169,2174,2189,2193,2205],{"__ignoreMap":98},[155,2148,2149],{"class":157,"line":158},[155,2150,1310],{"class":1229},[155,2152,2153,2155,2157,2159,2161,2163],{"class":157,"line":191},[155,2154,269],{"class":161},[155,2156,601],{"class":165},[155,2158,604],{"class":169},[155,2160,173],{"class":161},[155,2162,1200],{"class":176},[155,2164,1203],{"class":161},[155,2166,2167],{"class":157,"line":198},[155,2168,195],{"emptyLinePlaceholder":194},[155,2170,2171],{"class":157,"line":266},[155,2172,2173],{"class":1229},"    \u003C!--simulation_robot model-->\n",[155,2175,2176,2178,2180,2182,2184,2187],{"class":157,"line":282},[155,2177,269],{"class":161},[155,2179,1340],{"class":165},[155,2181,170],{"class":169},[155,2183,173],{"class":161},[155,2185,2186],{"class":176},"\"simulation_robot\"",[155,2188,263],{"class":161},[155,2190,2191],{"class":157,"line":297},[155,2192,195],{"emptyLinePlaceholder":194},[155,2194,2195,2197,2199,2201,2203],{"class":157,"line":486},[155,2196,1354],{"class":161},[155,2198,1357],{"class":165},[155,2200,1360],{"class":161},[155,2202,1357],{"class":165},[155,2204,263],{"class":161},[155,2206,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241],{"class":157,"line":495},[155,2208,1354],{"class":161},[155,2210,1371],{"class":165},[155,2212,170],{"class":169},[155,2214,173],{"class":161},[155,2216,1347],{"class":176},[155,2218,1380],{"class":169},[155,2220,173],{"class":161},[155,2222,1385],{"class":176},[155,2224,1388],{"class":169},[155,2226,173],{"class":161},[155,2228,1393],{"class":176},[155,2230,1396],{"class":169},[155,2232,173],{"class":161},[155,2234,1401],{"class":176},[155,2236,1404],{"class":169},[155,2238,173],{"class":161},[155,2240,1409],{"class":176},[155,2242,188],{"class":161},[16,2244,2245],{},"改成：",[92,2247,2249],{"className":149,"code":2248,"language":151,"meta":98,"style":98},"    \u003C!--include defination-->\n    \u003Cxmacro_include uri=\"model:\u002F\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro\" \u002F>\n\n    \u003C!--simulation_robot model-->\n    \u003Cmodel name=\"simulation_robot\">\n\n        \u003Cpose>0 0 0.15 0 0 0\u003C\u002Fpose>\n        \u003Cxmacro_block name=\"ysu2026_sentry_robot\" sticker_type=\"${global_armor_sticker_type}\" chassis_height=\"${chassis_height}\" gimbal_yaw_height=\"${gimbal_yaw_height}\" gimbal_pitch_height=\"${gimbal_pitch_height}\"\u002F>\n",[20,2250,2251,2255,2269,2273,2277,2291,2295,2307],{"__ignoreMap":98},[155,2252,2253],{"class":157,"line":158},[155,2254,1310],{"class":1229},[155,2256,2257,2259,2261,2263,2265,2267],{"class":157,"line":191},[155,2258,269],{"class":161},[155,2260,601],{"class":165},[155,2262,604],{"class":169},[155,2264,173],{"class":161},[155,2266,1442],{"class":176},[155,2268,1203],{"class":161},[155,2270,2271],{"class":157,"line":198},[155,2272,195],{"emptyLinePlaceholder":194},[155,2274,2275],{"class":157,"line":266},[155,2276,2173],{"class":1229},[155,2278,2279,2281,2283,2285,2287,2289],{"class":157,"line":282},[155,2280,269],{"class":161},[155,2282,1340],{"class":165},[155,2284,170],{"class":169},[155,2286,173],{"class":161},[155,2288,2186],{"class":176},[155,2290,263],{"class":161},[155,2292,2293],{"class":157,"line":297},[155,2294,195],{"emptyLinePlaceholder":194},[155,2296,2297,2299,2301,2303,2305],{"class":157,"line":486},[155,2298,1354],{"class":161},[155,2300,1357],{"class":165},[155,2302,1360],{"class":161},[155,2304,1357],{"class":165},[155,2306,263],{"class":161},[155,2308,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343],{"class":157,"line":495},[155,2310,1354],{"class":161},[155,2312,1371],{"class":165},[155,2314,170],{"class":169},[155,2316,173],{"class":161},[155,2318,1466],{"class":176},[155,2320,1380],{"class":169},[155,2322,173],{"class":161},[155,2324,1385],{"class":176},[155,2326,1388],{"class":169},[155,2328,173],{"class":161},[155,2330,1393],{"class":176},[155,2332,1396],{"class":169},[155,2334,173],{"class":161},[155,2336,1401],{"class":176},[155,2338,1404],{"class":169},[155,2340,173],{"class":161},[155,2342,1409],{"class":176},[155,2344,188],{"class":161},[16,2346,2347],{},"至此，你就修改完了。",[92,2349,2353],{"className":2350,"code":2351,"language":2352,"meta":98,"style":98},"language-bash shiki shiki-themes github-light github-dark","grep -R \"rm25_example_robot\" src\u002Frobot_description src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\n\ngrep -R \"pb2025_sentry_robot\" src\u002Frobot_description src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\n","bash",[20,2354,2355,2373,2377],{"__ignoreMap":98},[155,2356,2357,2360,2364,2367,2370],{"class":157,"line":158},[155,2358,2359],{"class":169},"grep",[155,2361,2363],{"class":2362},"sj4cs"," -R",[155,2365,2366],{"class":176}," \"rm25_example_robot\"",[155,2368,2369],{"class":176}," src\u002Frobot_description",[155,2371,2372],{"class":176}," src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\n",[155,2374,2375],{"class":157,"line":191},[155,2376,195],{"emptyLinePlaceholder":194},[155,2378,2379,2381,2383,2386,2388],{"class":157,"line":198},[155,2380,2359],{"class":169},[155,2382,2363],{"class":2362},[155,2384,2385],{"class":176}," \"pb2025_sentry_robot\"",[155,2387,2369],{"class":176},[155,2389,2372],{"class":176},[16,2391,2392,2393,2395,2396,2399],{},"下面是当时使用旧包名 ",[20,2394,79],{}," 的终端记录，保留原始输出；现在复查时使用上面的 ",[20,2397,2398],{},"src\u002Frobot_description"," 路径：",[92,2401,2403],{"className":2350,"code":2402,"language":2352,"meta":98,"style":98},"root@Desktop-Fedora:\u002Fhome\u002Ftungchiahui\u002FUserFolder\u002FMySource\u002Fysu2026_rm_sentry$ grep -R \"rm25_example_robot\" src\u002Fysu2026_robot_description src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\nsrc\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fmodel.sdf:  \u003C!--rm25_example_robot model-->\nsrc\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fmodel.sdf:  \u003Cmodel name=\"rm25_example_robot\">\nroot@Desktop-Fedora:\u002Fhome\u002Ftungchiahui\u002FUserFolder\u002FMySource\u002Fysu2026_rm_sentry$ grep -R \"pb2025_sentry_robot\" src\u002Fysu2026_robot_description src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\n",[20,2404,2405,2422,2441,2454],{"__ignoreMap":98},[155,2406,2407,2410,2413,2415,2417,2420],{"class":157,"line":158},[155,2408,2409],{"class":169},"root@Desktop-Fedora:\u002Fhome\u002Ftungchiahui\u002FUserFolder\u002FMySource\u002Fysu2026_rm_sentry$",[155,2411,2412],{"class":176}," grep",[155,2414,2363],{"class":2362},[155,2416,2366],{"class":176},[155,2418,2419],{"class":176}," src\u002Fysu2026_robot_description",[155,2421,2372],{"class":176},[155,2423,2424,2427,2430,2433,2436,2439],{"class":157,"line":191},[155,2425,2426],{"class":169},"src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fmodel.sdf:",[155,2428,1559],{"class":2429},"szBVR",[155,2431,2432],{"class":176},"!--rm25_example_robot",[155,2434,2435],{"class":176}," model-",[155,2437,2438],{"class":161},"-",[155,2440,263],{"class":2429},[155,2442,2443,2445,2447,2449,2452],{"class":157,"line":198},[155,2444,2426],{"class":169},[155,2446,1559],{"class":2429},[155,2448,1340],{"class":176},[155,2450,2451],{"class":176}," name=\"rm25_example_robot\"",[155,2453,263],{"class":2429},[155,2455,2456,2458,2460,2462,2464,2466],{"class":157,"line":266},[155,2457,2409],{"class":169},[155,2459,2412],{"class":176},[155,2461,2363],{"class":2362},[155,2463,2385],{"class":176},[155,2465,2419],{"class":176},[155,2467,2372],{"class":176},[16,2469,2470,2471,2473],{},"当时只有 ",[20,2472,1850],{}," 里还有旧模型名残留，下面记录生成文件的更新步骤：",[16,2475,2476,2477],{},"找到这个脚本：",[20,2478,2479],{},"\u002Fsrc\u002Frmoss_gz_resources\u002Fupdate_model.sh",[92,2481,2483],{"className":2350,"code":2482,"language":2352,"meta":98,"style":98},"#!\u002Fbin\u002Fbash\npath=`pwd`\nfor dir in $path\u002Fmodels\u002F*; do\n    echo \"parse \"$dir\n    cd $dir\n    tempfile=`mktemp temp.XXXXXX`\n    xmacro4sdf model.sdf.xmacro > $tempfile\n    lines_num=`cat $tempfile | wc -l`\n    if (($lines_num > 3 )) ;then\n        cat $tempfile > model.sdf\n    else\n        cat $tempfile\n    fi\n    rm -f temp.*\ndone\n",[20,2484,2485,2490,2506,2529,2540,2548,2563,2577,2603,2623,2636,2641,2647,2652,2666],{"__ignoreMap":98},[155,2486,2487],{"class":157,"line":158},[155,2488,2489],{"class":1229},"#!\u002Fbin\u002Fbash\n",[155,2491,2492,2495,2497,2500,2503],{"class":157,"line":191},[155,2493,2494],{"class":161},"path",[155,2496,173],{"class":2429},[155,2498,2499],{"class":176},"`",[155,2501,2502],{"class":2362},"pwd",[155,2504,2505],{"class":176},"`\n",[155,2507,2508,2511,2514,2517,2520,2523,2526],{"class":157,"line":198},[155,2509,2510],{"class":2429},"for",[155,2512,2513],{"class":161}," dir ",[155,2515,2516],{"class":2429},"in",[155,2518,2519],{"class":161}," $path",[155,2521,2522],{"class":176},"\u002Fmodels\u002F*",[155,2524,2525],{"class":161},"; ",[155,2527,2528],{"class":2429},"do\n",[155,2530,2531,2534,2537],{"class":157,"line":266},[155,2532,2533],{"class":2362},"    echo",[155,2535,2536],{"class":176}," \"parse \"",[155,2538,2539],{"class":161},"$dir\n",[155,2541,2542,2545],{"class":157,"line":282},[155,2543,2544],{"class":2362},"    cd",[155,2546,2547],{"class":161}," $dir\n",[155,2549,2550,2553,2555,2557,2560],{"class":157,"line":297},[155,2551,2552],{"class":161},"    tempfile",[155,2554,173],{"class":2429},[155,2556,2499],{"class":176},[155,2558,2559],{"class":169},"mktemp",[155,2561,2562],{"class":176}," temp.XXXXXX`\n",[155,2564,2565,2568,2571,2574],{"class":157,"line":486},[155,2566,2567],{"class":169},"    xmacro4sdf",[155,2569,2570],{"class":176}," model.sdf.xmacro",[155,2572,2573],{"class":2429}," >",[155,2575,2576],{"class":161}," $tempfile\n",[155,2578,2579,2582,2584,2586,2589,2592,2595,2598,2601],{"class":157,"line":495},[155,2580,2581],{"class":161},"    lines_num",[155,2583,173],{"class":2429},[155,2585,2499],{"class":176},[155,2587,2588],{"class":169},"cat",[155,2590,2591],{"class":161}," $tempfile",[155,2593,2594],{"class":2429}," |",[155,2596,2597],{"class":169}," wc",[155,2599,2600],{"class":2362}," -l",[155,2602,2505],{"class":176},[155,2604,2605,2608,2611,2614,2617,2620],{"class":157,"line":500},[155,2606,2607],{"class":2429},"    if",[155,2609,2610],{"class":161}," (($lines_num ",[155,2612,2613],{"class":2429},">",[155,2615,2616],{"class":2362}," 3",[155,2618,2619],{"class":161}," )) ;",[155,2621,2622],{"class":2429},"then\n",[155,2624,2625,2628,2631,2633],{"class":157,"line":1647},[155,2626,2627],{"class":169},"        cat",[155,2629,2630],{"class":161}," $tempfile ",[155,2632,2613],{"class":2429},[155,2634,2635],{"class":176}," model.sdf\n",[155,2637,2638],{"class":157,"line":1657},[155,2639,2640],{"class":2429},"    else\n",[155,2642,2643,2645],{"class":157,"line":1662},[155,2644,2627],{"class":169},[155,2646,2576],{"class":161},[155,2648,2649],{"class":157,"line":1672},[155,2650,2651],{"class":2429},"    fi\n",[155,2653,2654,2657,2660,2663],{"class":157,"line":1678},[155,2655,2656],{"class":169},"    rm",[155,2658,2659],{"class":2362}," -f",[155,2661,2662],{"class":176}," temp.",[155,2664,2665],{"class":2362},"*\n",[155,2667,2668],{"class":157,"line":1687},[155,2669,2670],{"class":2429},"done\n",[16,2672,2673],{},"修改为：",[92,2675,2677],{"className":2350,"code":2676,"language":2352,"meta":98,"style":98},"#!\u002Fbin\u002Fbash\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nMODEL_DIR=\"$SCRIPT_DIR\u002Fresource\u002Fmodels\"\n\n# 让 xmacro4sdf 能解析 model:\u002F\u002Fxxx\u002F...\nexport IGN_GAZEBO_RESOURCE_PATH=\"$MODEL_DIR:${IGN_GAZEBO_RESOURCE_PATH:-}\"\nexport GAZEBO_MODEL_PATH=\"$MODEL_DIR:${GAZEBO_MODEL_PATH:-}\"\n\nfor dir in \"$MODEL_DIR\"\u002F*; do\n    [ -d \"$dir\" ] || continue\n    [ -f \"$dir\u002Fmodel.sdf.xmacro\" ] || continue\n\n    echo \"parse $dir\"\n\n    cd \"$dir\" || exit 1\n\n    tempfile=$(mktemp temp.XXXXXX)\n\n    if xmacro4sdf model.sdf.xmacro > \"$tempfile\"; then\n        lines_num=$(wc -l \u003C \"$tempfile\")\n\n        if (( lines_num > 3 )); then\n            cat \"$tempfile\" > model.sdf\n            echo \"generated: $dir\u002Fmodel.sdf\"\n        else\n            echo \"ERROR: generated content too short\"\n            cat \"$tempfile\"\n        fi\n    else\n        echo \"ERROR: xmacro4sdf failed: $dir\"\n    fi\n\n    rm -f \"$tempfile\"\ndone\n",[20,2678,2679,2683,2687,2720,2736,2740,2745,2772,2794,2798,2818,2842,2862,2866,2878,2882,2902,2907,2925,2930,2953,2979,2984,3002,3018,3032,3038,3046,3057,3063,3068,3081,3086,3091,3104],{"__ignoreMap":98},[155,2680,2681],{"class":157,"line":158},[155,2682,2489],{"class":1229},[155,2684,2685],{"class":157,"line":191},[155,2686,195],{"emptyLinePlaceholder":194},[155,2688,2689,2692,2694,2697,2700,2703,2706,2709,2712,2715,2717],{"class":157,"line":198},[155,2690,2691],{"class":161},"SCRIPT_DIR",[155,2693,173],{"class":2429},[155,2695,2696],{"class":176},"\"$(",[155,2698,2699],{"class":2362},"cd",[155,2701,2702],{"class":176}," \"$(",[155,2704,2705],{"class":169},"dirname",[155,2707,2708],{"class":176}," \"${",[155,2710,2711],{"class":161},"BASH_SOURCE",[155,2713,2714],{"class":176},"[0]}\")\" && ",[155,2716,2502],{"class":2362},[155,2718,2719],{"class":176},")\"\n",[155,2721,2722,2725,2727,2730,2733],{"class":157,"line":266},[155,2723,2724],{"class":161},"MODEL_DIR",[155,2726,173],{"class":2429},[155,2728,2729],{"class":176},"\"",[155,2731,2732],{"class":161},"$SCRIPT_DIR",[155,2734,2735],{"class":176},"\u002Fresource\u002Fmodels\"\n",[155,2737,2738],{"class":157,"line":282},[155,2739,195],{"emptyLinePlaceholder":194},[155,2741,2742],{"class":157,"line":297},[155,2743,2744],{"class":1229},"# 让 xmacro4sdf 能解析 model:\u002F\u002Fxxx\u002F...\n",[155,2746,2747,2750,2753,2755,2757,2760,2763,2766,2769],{"class":157,"line":486},[155,2748,2749],{"class":2429},"export",[155,2751,2752],{"class":161}," IGN_GAZEBO_RESOURCE_PATH",[155,2754,173],{"class":2429},[155,2756,2729],{"class":176},[155,2758,2759],{"class":161},"$MODEL_DIR",[155,2761,2762],{"class":176},":${",[155,2764,2765],{"class":161},"IGN_GAZEBO_RESOURCE_PATH",[155,2767,2768],{"class":2429},":-",[155,2770,2771],{"class":176},"}\"\n",[155,2773,2774,2776,2779,2781,2783,2785,2787,2790,2792],{"class":157,"line":495},[155,2775,2749],{"class":2429},[155,2777,2778],{"class":161}," GAZEBO_MODEL_PATH",[155,2780,173],{"class":2429},[155,2782,2729],{"class":176},[155,2784,2759],{"class":161},[155,2786,2762],{"class":176},[155,2788,2789],{"class":161},"GAZEBO_MODEL_PATH",[155,2791,2768],{"class":2429},[155,2793,2771],{"class":176},[155,2795,2796],{"class":157,"line":500},[155,2797,195],{"emptyLinePlaceholder":194},[155,2799,2800,2802,2804,2806,2809,2811,2814,2816],{"class":157,"line":1647},[155,2801,2510],{"class":2429},[155,2803,2513],{"class":161},[155,2805,2516],{"class":2429},[155,2807,2808],{"class":176}," \"",[155,2810,2759],{"class":161},[155,2812,2813],{"class":176},"\"\u002F*",[155,2815,2525],{"class":161},[155,2817,2528],{"class":2429},[155,2819,2820,2823,2826,2828,2831,2833,2836,2839],{"class":157,"line":1657},[155,2821,2822],{"class":161},"    [ ",[155,2824,2825],{"class":2429},"-d",[155,2827,2808],{"class":176},[155,2829,2830],{"class":161},"$dir",[155,2832,2729],{"class":176},[155,2834,2835],{"class":161}," ] ",[155,2837,2838],{"class":2429},"||",[155,2840,2841],{"class":2429}," continue\n",[155,2843,2844,2846,2849,2851,2853,2856,2858,2860],{"class":157,"line":1662},[155,2845,2822],{"class":161},[155,2847,2848],{"class":2429},"-f",[155,2850,2808],{"class":176},[155,2852,2830],{"class":161},[155,2854,2855],{"class":176},"\u002Fmodel.sdf.xmacro\"",[155,2857,2835],{"class":161},[155,2859,2838],{"class":2429},[155,2861,2841],{"class":2429},[155,2863,2864],{"class":157,"line":1672},[155,2865,195],{"emptyLinePlaceholder":194},[155,2867,2868,2870,2873,2875],{"class":157,"line":1678},[155,2869,2533],{"class":2362},[155,2871,2872],{"class":176}," \"parse ",[155,2874,2830],{"class":161},[155,2876,2877],{"class":176},"\"\n",[155,2879,2880],{"class":157,"line":1687},[155,2881,195],{"emptyLinePlaceholder":194},[155,2883,2885,2887,2889,2891,2893,2896,2899],{"class":157,"line":2884},16,[155,2886,2544],{"class":2362},[155,2888,2808],{"class":176},[155,2890,2830],{"class":161},[155,2892,2729],{"class":176},[155,2894,2895],{"class":2429}," ||",[155,2897,2898],{"class":2362}," exit",[155,2900,2901],{"class":2362}," 1\n",[155,2903,2905],{"class":157,"line":2904},17,[155,2906,195],{"emptyLinePlaceholder":194},[155,2908,2910,2912,2914,2917,2919,2922],{"class":157,"line":2909},18,[155,2911,2552],{"class":161},[155,2913,173],{"class":2429},[155,2915,2916],{"class":161},"$(",[155,2918,2559],{"class":169},[155,2920,2921],{"class":176}," temp.XXXXXX",[155,2923,2924],{"class":161},")\n",[155,2926,2928],{"class":157,"line":2927},19,[155,2929,195],{"emptyLinePlaceholder":194},[155,2931,2933,2935,2938,2940,2942,2944,2947,2949,2951],{"class":157,"line":2932},20,[155,2934,2607],{"class":2429},[155,2936,2937],{"class":169}," xmacro4sdf",[155,2939,2570],{"class":176},[155,2941,2573],{"class":2429},[155,2943,2808],{"class":176},[155,2945,2946],{"class":161},"$tempfile",[155,2948,2729],{"class":176},[155,2950,2525],{"class":161},[155,2952,2622],{"class":2429},[155,2954,2956,2959,2961,2963,2966,2968,2971,2973,2975,2977],{"class":157,"line":2955},21,[155,2957,2958],{"class":161},"        lines_num",[155,2960,173],{"class":2429},[155,2962,2916],{"class":161},[155,2964,2965],{"class":169},"wc",[155,2967,2600],{"class":2362},[155,2969,2970],{"class":2429}," \u003C",[155,2972,2808],{"class":176},[155,2974,2946],{"class":161},[155,2976,2729],{"class":176},[155,2978,2924],{"class":161},[155,2980,2982],{"class":157,"line":2981},22,[155,2983,195],{"emptyLinePlaceholder":194},[155,2985,2987,2990,2993,2995,2997,3000],{"class":157,"line":2986},23,[155,2988,2989],{"class":2429},"        if",[155,2991,2992],{"class":161}," (( lines_num ",[155,2994,2613],{"class":2429},[155,2996,2616],{"class":2362},[155,2998,2999],{"class":161}," )); ",[155,3001,2622],{"class":2429},[155,3003,3005,3008,3010,3012,3014,3016],{"class":157,"line":3004},24,[155,3006,3007],{"class":169},"            cat",[155,3009,2808],{"class":176},[155,3011,2946],{"class":161},[155,3013,2729],{"class":176},[155,3015,2573],{"class":2429},[155,3017,2635],{"class":176},[155,3019,3021,3024,3027,3029],{"class":157,"line":3020},25,[155,3022,3023],{"class":2362},"            echo",[155,3025,3026],{"class":176}," \"generated: ",[155,3028,2830],{"class":161},[155,3030,3031],{"class":176},"\u002Fmodel.sdf\"\n",[155,3033,3035],{"class":157,"line":3034},26,[155,3036,3037],{"class":2429},"        else\n",[155,3039,3041,3043],{"class":157,"line":3040},27,[155,3042,3023],{"class":2362},[155,3044,3045],{"class":176}," \"ERROR: generated content too short\"\n",[155,3047,3049,3051,3053,3055],{"class":157,"line":3048},28,[155,3050,3007],{"class":169},[155,3052,2808],{"class":176},[155,3054,2946],{"class":161},[155,3056,2877],{"class":176},[155,3058,3060],{"class":157,"line":3059},29,[155,3061,3062],{"class":2429},"        fi\n",[155,3064,3066],{"class":157,"line":3065},30,[155,3067,2640],{"class":2429},[155,3069,3071,3074,3077,3079],{"class":157,"line":3070},31,[155,3072,3073],{"class":2362},"        echo",[155,3075,3076],{"class":176}," \"ERROR: xmacro4sdf failed: ",[155,3078,2830],{"class":161},[155,3080,2877],{"class":176},[155,3082,3084],{"class":157,"line":3083},32,[155,3085,2651],{"class":2429},[155,3087,3089],{"class":157,"line":3088},33,[155,3090,195],{"emptyLinePlaceholder":194},[155,3092,3094,3096,3098,3100,3102],{"class":157,"line":3093},34,[155,3095,2656],{"class":169},[155,3097,2659],{"class":2362},[155,3099,2808],{"class":176},[155,3101,2946],{"class":161},[155,3103,2877],{"class":176},[155,3105,3107],{"class":157,"line":3106},35,[155,3108,2670],{"class":2429},[16,3110,3111],{},"执行：",[92,3113,3115],{"className":2350,"code":3114,"language":2352,"meta":98,"style":98},"chmod +x .\u002Fsrc\u002Frmoss_gz_resources\u002Fupdate_model.sh\n.\u002Fsrc\u002Frmoss_gz_resources\u002Fupdate_model.sh\n",[20,3116,3117,3128],{"__ignoreMap":98},[155,3118,3119,3122,3125],{"class":157,"line":158},[155,3120,3121],{"class":169},"chmod",[155,3123,3124],{"class":176}," +x",[155,3126,3127],{"class":176}," .\u002Fsrc\u002Frmoss_gz_resources\u002Fupdate_model.sh\n",[155,3129,3130],{"class":157,"line":191},[155,3131,3132],{"class":169},".\u002Fsrc\u002Frmoss_gz_resources\u002Fupdate_model.sh\n",[16,3134,3135],{},"生成完后，返回ws目录：",[92,3137,3139],{"className":2350,"code":3138,"language":2352,"meta":98,"style":98},"grep -R \"rm25_example_robot\" src\u002Frobot_description src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\n",[20,3140,3141],{"__ignoreMap":98},[155,3142,3143,3145,3147,3149,3151],{"class":157,"line":158},[155,3144,2359],{"class":169},[155,3146,2363],{"class":2362},[155,3148,2366],{"class":176},[155,3150,2369],{"class":176},[155,3152,2372],{"class":176},[16,3154,3155],{},"会发现也没有输出了。",[133,3157,3158],{"id":3158},"修改机器人参数",[16,3160,3161,3162,1300],{},"主要是机器人的",[3163,3164,3165],"strong",{},"底盘长宽、轮距\u002F轴距、轮径、云台高度、Mid360 安装位置",[92,3167,3170],{"className":3168,"code":3169,"language":97,"meta":98},[95],"1. 底盘长宽高 \u002F collision\n2. 四个轮子的位置\n3. 轮子半径\n4. chassis_height\n5. gimbal_yaw_height\n6. gimbal_pitch_height\n7. Mid360 的 parent 和 pose\n",[20,3171,3169],{"__ignoreMap":98},[16,3173,3174],{},"首先你得知道ROS默认规定的方向：",[92,3176,3179],{"className":3177,"code":3178,"language":97,"meta":98},[95],"+x：车头方向\n+y：车体左侧\n+z：竖直向上\n",[20,3180,3178],{"__ignoreMap":98},[92,3182,3185],{"className":3183,"code":3184,"language":97,"meta":98},[95],"+roll：绕x轴逆时针\n+pitch：绕y轴逆时针\n+yaw：绕z轴逆时针\n",[20,3186,3184],{"__ignoreMap":98},[16,3188,3189,3190,3193],{},"角度正方向则统一遵守",[20,3191,3192],{},"右手定则","：\n如果你站在每根轴的正方向一端，朝原点看，那么正旋转看起来都是逆时针。\n所以对于机器人坐标系，可以更直观地记：",[3195,3196,3197,3200,3203],"ul",{},[141,3198,3199],{},"+yaw：车头向左转。",[141,3201,3202],{},"+pitch：车头向下压。",[141,3204,3205],{},"+roll：左侧抬高、右侧降低。",[16,3207,3208],{},"而且北极熊现在的模型里，base_footprint 在地面，chassis 原点基本位于四个轮子的轮轴中心高度。",[1024,3210,3211,3224],{},[1027,3212,3213],{},[1030,3214,3215,3218,3221],{},[1033,3216,3217],{},"参数",[1033,3219,3220],{},"你实际应该量什么",[1033,3222,3223],{},"当前代码含义",[1041,3225,3226,3239,3252,3265,3278,3291,3305,3322,3337,3350],{},[1030,3227,3228,3231,3234],{},[1046,3229,3230],{},"底盘长度",[1046,3232,3233],{},"车体刚性主体前沿到后沿，沿 X",[1046,3235,3236],{},[20,3237,3238],{},"geometry_box x=...",[1030,3240,3241,3244,3247],{},[1046,3242,3243],{},"底盘宽度",[1046,3245,3246],{},"车体刚性主体左沿到右沿，沿 Y",[1046,3248,3249],{},[20,3250,3251],{},"geometry_box y=...",[1030,3253,3254,3257,3260],{},[1046,3255,3256],{},"底盘高度",[1046,3258,3259],{},"刚性主体底面到顶面，沿 Z",[1046,3261,3262],{},[20,3263,3264],{},"geometry_box z=...",[1030,3266,3267,3270,3273],{},[1046,3268,3269],{},"轴距",[1046,3271,3272],{},"前轮轴心到后轮轴心的 X 向距离",[1046,3274,3275],{},[20,3276,3277],{},"x_front - x_rear",[1030,3279,3280,3283,3286],{},[1046,3281,3282],{},"轮距",[1046,3284,3285],{},"左轮中心面到右轮中心面的 Y 向距离",[1046,3287,3288],{},[20,3289,3290],{},"y_left - y_right",[1030,3292,3293,3296,3299],{},[1046,3294,3295],{},"轮径",[1046,3297,3298],{},"轮子外圆直径",[1046,3300,3301,3302],{},"当前 ",[20,3303,3304],{},"2 × 0.0758",[1030,3306,3307,3312,3319],{},[1046,3308,3309],{},[20,3310,3311],{},"chassis_height",[1046,3313,3314,3315,3318],{},"地面 → ",[20,3316,3317],{},"chassis"," 坐标系原点",[1046,3320,3321],{},"当前 0.076 m",[1030,3323,3324,3329,3334],{},[1046,3325,3326],{},[20,3327,3328],{},"gimbal_yaw_height",[1046,3330,3331,3333],{},[20,3332,3317],{}," 原点 → 云台 yaw 旋转轴原点",[1046,3335,3336],{},"当前 0.1376 m",[1030,3338,3339,3344,3347],{},[1046,3340,3341],{},[20,3342,3343],{},"gimbal_pitch_height",[1046,3345,3346],{},"yaw 轴原点 → pitch 轴原点",[1046,3348,3349],{},"当前 0.16 m",[1030,3351,3352,3357,3364],{},[1046,3353,3354,3355],{},"Mid360 ",[20,3356,1357],{},[1046,3358,3359,3360,3363],{},"parent 坐标系原点 → ",[20,3361,3362],{},"front_mid360"," 原点",[1046,3365,3366,3367],{},"当前相对 ",[20,3368,3317],{},[138,3370,3371,3374,3377,3380],{},[141,3372,3373],{},"ysu2026_sentry_robot.def.xmacro    ← 机器人“本体结构”的唯一真源",[141,3375,3376],{},"reality_robot.sdf.xmacro           ← 实车入口：传感器安装、实车专用高度\u002F姿态",[141,3378,3379],{},"simulation_robot.sdf.xmacro        ← 仿真入口：仿真传感器和 Gazebo 插件",[141,3381,3382],{},"model.sdf.xmacro                   ← rmoss_gz_resources 里的 standalone Gazebo 模型入口",[16,3384,3385],{},"改“机器人本体长什么样” → 改 ysu2026_sentry_robot.def.xmacro。\n改“实车传感器装在哪里、实车采用哪些参数” → 改 reality_robot.sdf.xmacro。\n改“Gazebo 里怎么跑” → 改 simulation_robot.sdf.xmacro。\nmodel.sdf.xmacro 只是 rmoss_gz_resources 里的完整 Gazebo model 入口，不是你实车 TF 的主入口。（所以这个model.sdf.xmacro其实没那么重要，但顺手改了也行。）",[16,3387,3388,3389,1300],{},"找到",[20,3390,3391],{},"\u002Fsrc\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot",[16,3393,3394],{},"主要修改下面几个：",[138,3396,3397],{},[141,3398,3399],{},"底盘长度和底盘宽度（只影响Gazebo）",[16,3401,3402],{},"底盘长宽和轴距\u002F轮距不是一个东西",[16,3404,3405],{},"比如现在北极熊：",[92,3407,3409],{"className":149,"code":3408,"language":151,"meta":98,"style":98},"        \u003C!--chassis-->\n        \u003Clink name=\"chassis\">\n            \u003Cinertial>\n                \u003Cpose>0 0 0.055 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"inertia_box\" m=\"15.0\" x=\"0.36\" y=\"0.24\" z=\"0.13\"\u002F>\n",[20,3410,3411,3416,3431,3441,3455],{"__ignoreMap":98},[155,3412,3413],{"class":157,"line":158},[155,3414,3415],{"class":1229},"        \u003C!--chassis-->\n",[155,3417,3418,3420,3422,3424,3426,3429],{"class":157,"line":191},[155,3419,1354],{"class":161},[155,3421,347],{"class":165},[155,3423,170],{"class":169},[155,3425,173],{"class":161},[155,3427,3428],{"class":176},"\"chassis\"",[155,3430,263],{"class":161},[155,3432,3433,3436,3439],{"class":157,"line":198},[155,3434,3435],{"class":161},"            \u003C",[155,3437,3438],{"class":165},"inertial",[155,3440,263],{"class":161},[155,3442,3443,3446,3448,3451,3453],{"class":157,"line":266},[155,3444,3445],{"class":161},"                \u003C",[155,3447,1357],{"class":165},[155,3449,3450],{"class":161},">0 0 0.055 0 0 0\u003C\u002F",[155,3452,1357],{"class":165},[155,3454,263],{"class":161},[155,3456,3457,3459,3461,3463,3465,3468,3471,3473,3476,3479,3481,3484,3487,3489,3492,3495,3497,3500],{"class":157,"line":282},[155,3458,3445],{"class":161},[155,3460,1371],{"class":165},[155,3462,170],{"class":169},[155,3464,173],{"class":161},[155,3466,3467],{"class":176},"\"inertia_box\"",[155,3469,3470],{"class":169}," m",[155,3472,173],{"class":161},[155,3474,3475],{"class":176},"\"15.0\"",[155,3477,3478],{"class":169}," x",[155,3480,173],{"class":161},[155,3482,3483],{"class":176},"\"0.36\"",[155,3485,3486],{"class":169}," y",[155,3488,173],{"class":161},[155,3490,3491],{"class":176},"\"0.24\"",[155,3493,3494],{"class":169}," z",[155,3496,173],{"class":161},[155,3498,3499],{"class":176},"\"0.13\"",[155,3501,188],{"class":161},[16,3503,3504],{},"这些参数主要是用于Gazebo。",[92,3506,3509],{"className":3507,"code":3508,"language":97,"meta":98},[95],"底盘 collision:\n底盘刚体的质量 m = 15.0 kg\n长度 x = 0.36\n宽度 y = 0.24\n高度 z = 0.13\n",[20,3510,3508],{"__ignoreMap":98},[16,3512,3513],{},"经测量车长X=525mm",[16,3515,3516],{},[3517,3518],"img",{"alt":3519,"src":3520},"alt text","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189092339.webp",[16,3522,3523],{},"经测量车宽Y=525mm",[16,3525,3526],{},[3517,3527],{"alt":3519,"src":3528},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189093804.webp",[16,3530,3531],{},"经测量车高度Z=20mm",[16,3533,3534],{},[3517,3535],{"alt":3519,"src":3536},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189095266.webp",[16,3538,3539,3540,3543,3544,3547,3548,3551,3552,45],{},"注意，这里的",[20,3541,3542],{},"\u003Cpose>0 0 0.055 0 0 0\u003C\u002Fpose>","里的",[20,3545,3546],{},"0.055","不是底盘高度。\n实际上是chassis 坐标原点 → 底盘质心 COM 的 Z 偏移。\n北极熊这套规定",[20,3549,3550],{},"chassis z=0 等于 轮轴中心平面","。\n所以如果机器人实际重量都在顶上，质心大概在高出轮轴中心平面 xxx mm的地方，那就填 ",[20,3553,3554],{},"\u003Cpose>0 0 xxx 0 0 0\u003C\u002Fpose>",[16,3556,3557],{},"这东西只影响Gazebo，放心大胆填就完了，没必要很精细。",[16,3559,3560],{},"基于上面的数据，我修改成了",[92,3562,3564],{"className":149,"code":3563,"language":151,"meta":98,"style":98},"        \u003C!--chassis-->\n        \u003Clink name=\"chassis\">\n            \u003Cinertial>\n                \u003Cpose>0 0 0.055 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"inertia_box\" m=\"15.0\" x=\"0.525\" y=\"0.525\" z=\"0.20\"\u002F>\n            \u003C\u002Finertial>\n",[20,3565,3566,3570,3584,3592,3604,3644],{"__ignoreMap":98},[155,3567,3568],{"class":157,"line":158},[155,3569,3415],{"class":1229},[155,3571,3572,3574,3576,3578,3580,3582],{"class":157,"line":191},[155,3573,1354],{"class":161},[155,3575,347],{"class":165},[155,3577,170],{"class":169},[155,3579,173],{"class":161},[155,3581,3428],{"class":176},[155,3583,263],{"class":161},[155,3585,3586,3588,3590],{"class":157,"line":198},[155,3587,3435],{"class":161},[155,3589,3438],{"class":165},[155,3591,263],{"class":161},[155,3593,3594,3596,3598,3600,3602],{"class":157,"line":266},[155,3595,3445],{"class":161},[155,3597,1357],{"class":165},[155,3599,3450],{"class":161},[155,3601,1357],{"class":165},[155,3603,263],{"class":161},[155,3605,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3629,3631,3633,3635,3637,3639,3642],{"class":157,"line":282},[155,3607,3445],{"class":161},[155,3609,1371],{"class":165},[155,3611,170],{"class":169},[155,3613,173],{"class":161},[155,3615,3467],{"class":176},[155,3617,3470],{"class":169},[155,3619,173],{"class":161},[155,3621,3475],{"class":176},[155,3623,3478],{"class":169},[155,3625,173],{"class":161},[155,3627,3628],{"class":176},"\"0.525\"",[155,3630,3486],{"class":169},[155,3632,173],{"class":161},[155,3634,3628],{"class":176},[155,3636,3494],{"class":169},[155,3638,173],{"class":161},[155,3640,3641],{"class":176},"\"0.20\"",[155,3643,188],{"class":161},[155,3645,3646,3649,3651],{"class":157,"line":297},[155,3647,3648],{"class":161},"            \u003C\u002F",[155,3650,3438],{"class":165},[155,3652,263],{"class":161},[1024,3654,3655,3668],{},[1027,3656,3657],{},[1030,3658,3659,3661,3665],{},[1033,3660,3217],{},[1033,3662,3664],{"align":3663},"right","实车 TF",[1033,3666,3667],{"align":3663},"Gazebo",[1041,3669,3670,3683,3693,3702,3712,3722,3732],{},[1030,3671,3672,3677,3680],{},[1046,3673,3354,3674],{},[20,3675,3676],{},"\u003Csensor>\u003Cpose>0.03",[1046,3678,3679],{"align":3663},"❌",[1046,3681,3682],{"align":3663},"✅",[1030,3684,3685,3688,3691],{},[1046,3686,3687],{},"wheel collision radius",[1046,3689,3690],{"align":3663},"基本 ❌",[1046,3692,3682],{"align":3663},[1030,3694,3695,3698,3700],{},[1046,3696,3697],{},"chassis collision",[1046,3699,3679],{"align":3663},[1046,3701,3682],{"align":3663},[1030,3703,3704,3708,3710],{},[1046,3705,3706],{},[20,3707,3311],{},[1046,3709,3682],{"align":3663},[1046,3711,3682],{"align":3663},[1030,3713,3714,3718,3720],{},[1046,3715,3716],{},[20,3717,3328],{},[1046,3719,3682],{"align":3663},[1046,3721,3682],{"align":3663},[1030,3723,3724,3728,3730],{},[1046,3725,3726],{},[20,3727,3343],{},[1046,3729,3682],{"align":3663},[1046,3731,3682],{"align":3663},[1030,3733,3734,3739,3741],{},[1046,3735,3354,3736],{},[20,3737,3738],{},"\u003Cxmacro_block pose=...>",[1046,3740,3682],{"align":3663},[1046,3742,3682],{"align":3663},[16,3744,3745],{},"下面还有一堆北极熊原来的：",[92,3747,3749],{"className":149,"code":3748,"language":151,"meta":98,"style":98},"\u003Ccollision name=\"chassis_base_collision\">\n\u003Ccollision name=\"chassis_projectile_container_collision\">\n\u003Ccollision name=\"chassis_fornt_wheel_holder_collision\">\n\u003Ccollision name=\"chassis_rear_wheel_holder_collision\">\n",[20,3750,3751,3767,3782,3797],{"__ignoreMap":98},[155,3752,3753,3755,3758,3760,3762,3765],{"class":157,"line":158},[155,3754,162],{"class":161},[155,3756,3757],{"class":165},"collision",[155,3759,170],{"class":169},[155,3761,173],{"class":161},[155,3763,3764],{"class":176},"\"chassis_base_collision\"",[155,3766,263],{"class":161},[155,3768,3769,3771,3773,3775,3777,3780],{"class":157,"line":191},[155,3770,162],{"class":161},[155,3772,3757],{"class":165},[155,3774,170],{"class":169},[155,3776,173],{"class":161},[155,3778,3779],{"class":176},"\"chassis_projectile_container_collision\"",[155,3781,263],{"class":161},[155,3783,3784,3786,3788,3790,3792,3795],{"class":157,"line":198},[155,3785,162],{"class":161},[155,3787,3757],{"class":165},[155,3789,170],{"class":169},[155,3791,173],{"class":161},[155,3793,3794],{"class":176},"\"chassis_fornt_wheel_holder_collision\"",[155,3796,263],{"class":161},[155,3798,3799,3801,3803,3805,3807,3810],{"class":157,"line":266},[155,3800,162],{"class":161},[155,3802,3757],{"class":165},[155,3804,170],{"class":169},[155,3806,173],{"class":161},[155,3808,3809],{"class":176},"\"chassis_rear_wheel_holder_collision\"",[155,3811,263],{"class":161},[16,3813,643,3814,3817],{},[20,3815,3816],{},"pose z","是底盘刚体的中心面的中心点在chassis 0点的什么位置，可以由SW测量得知，是65.46mm",[16,3819,3820],{},[3517,3821],{"alt":98,"src":3822},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791350000418-1e7d4b6b.webp",[16,3824,3825],{},[3517,3826],{"alt":98,"src":3827},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791350056801-72f20409.webp",[16,3829,3830],{},"可以修改成：",[92,3832,3834],{"className":149,"code":3833,"language":151,"meta":98,"style":98},"            \u003Ccollision name=\"chassis_base_collision\">\n                \u003Cpose>0 0 0.06546 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"geometry_box\" x=\"0.525\" y=\"0.525\" z=\"0.20\"\u002F>\n            \u003C\u002Fcollision>\n",[20,3835,3836,3850,3863,3896],{"__ignoreMap":98},[155,3837,3838,3840,3842,3844,3846,3848],{"class":157,"line":158},[155,3839,3435],{"class":161},[155,3841,3757],{"class":165},[155,3843,170],{"class":169},[155,3845,173],{"class":161},[155,3847,3764],{"class":176},[155,3849,263],{"class":161},[155,3851,3852,3854,3856,3859,3861],{"class":157,"line":191},[155,3853,3445],{"class":161},[155,3855,1357],{"class":165},[155,3857,3858],{"class":161},">0 0 0.06546 0 0 0\u003C\u002F",[155,3860,1357],{"class":165},[155,3862,263],{"class":161},[155,3864,3865,3867,3869,3871,3873,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894],{"class":157,"line":198},[155,3866,3445],{"class":161},[155,3868,1371],{"class":165},[155,3870,170],{"class":169},[155,3872,173],{"class":161},[155,3874,3875],{"class":176},"\"geometry_box\"",[155,3877,3478],{"class":169},[155,3879,173],{"class":161},[155,3881,3628],{"class":176},[155,3883,3486],{"class":169},[155,3885,173],{"class":161},[155,3887,3628],{"class":176},[155,3889,3494],{"class":169},[155,3891,173],{"class":161},[155,3893,3641],{"class":176},[155,3895,188],{"class":161},[155,3897,3898,3900,3902],{"class":157,"line":266},[155,3899,3648],{"class":161},[155,3901,3757],{"class":165},[155,3903,263],{"class":161},[16,3905,3906,3907,3910],{},"而下面这仨可以全注释掉，因为咱们舵轮底盘的碰撞区域就是近似一个正方形，用",[20,3908,3909],{},"chassis_base_collision","足够了。",[92,3912,3914],{"className":149,"code":3913,"language":151,"meta":98,"style":98},"\u003Ccollision name=\"chassis_projectile_container_collision\">\n\u003Ccollision name=\"chassis_fornt_wheel_holder_collision\">\n\u003Ccollision name=\"chassis_rear_wheel_holder_collision\">\n",[20,3915,3916,3930,3944],{"__ignoreMap":98},[155,3917,3918,3920,3922,3924,3926,3928],{"class":157,"line":158},[155,3919,162],{"class":161},[155,3921,3757],{"class":165},[155,3923,170],{"class":169},[155,3925,173],{"class":161},[155,3927,3779],{"class":176},[155,3929,263],{"class":161},[155,3931,3932,3934,3936,3938,3940,3942],{"class":157,"line":191},[155,3933,162],{"class":161},[155,3935,3757],{"class":165},[155,3937,170],{"class":169},[155,3939,173],{"class":161},[155,3941,3794],{"class":176},[155,3943,263],{"class":161},[155,3945,3946,3948,3950,3952,3954,3956],{"class":157,"line":198},[155,3947,162],{"class":161},[155,3949,3757],{"class":165},[155,3951,170],{"class":169},[155,3953,173],{"class":161},[155,3955,3809],{"class":176},[155,3957,263],{"class":161},[92,3959,3961],{"className":149,"code":3960,"language":151,"meta":98,"style":98},"            \u003C!-- \u003Ccollision name=\"chassis_projectile_container_collision\">\n                \u003Cpose>-0.122 0 0.177 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"geometry_box\" x=\"0.1\" y=\"0.18\" z=\"0.146\"\u002F>\n            \u003C\u002Fcollision>\n            \u003Ccollision name=\"chassis_fornt_wheel_holder_collision\">\n                \u003Cpose>0.208 0 0 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"geometry_box\" x=\"0.055\" y=\"0.367\" z=\"0.055\"\u002F>\n            \u003C\u002Fcollision>\n            \u003Ccollision name=\"chassis_rear_wheel_holder_collision\">\n                \u003Cpose>-0.208 0 0 0 0 0\u003C\u002Fpose>\n                \u003Cxmacro_block name=\"geometry_box\" x=\"0.055\" y=\"0.367\" z=\"0.055\"\u002F>\n            \u003C\u002Fcollision> -->\n",[20,3962,3963,3968,3973,3978,3983,3988,3993,3998,4002,4007,4012,4016],{"__ignoreMap":98},[155,3964,3965],{"class":157,"line":158},[155,3966,3967],{"class":1229},"            \u003C!-- \u003Ccollision name=\"chassis_projectile_container_collision\">\n",[155,3969,3970],{"class":157,"line":191},[155,3971,3972],{"class":1229},"                \u003Cpose>-0.122 0 0.177 0 0 0\u003C\u002Fpose>\n",[155,3974,3975],{"class":157,"line":198},[155,3976,3977],{"class":1229},"                \u003Cxmacro_block name=\"geometry_box\" x=\"0.1\" y=\"0.18\" z=\"0.146\"\u002F>\n",[155,3979,3980],{"class":157,"line":266},[155,3981,3982],{"class":1229},"            \u003C\u002Fcollision>\n",[155,3984,3985],{"class":157,"line":282},[155,3986,3987],{"class":1229},"            \u003Ccollision name=\"chassis_fornt_wheel_holder_collision\">\n",[155,3989,3990],{"class":157,"line":297},[155,3991,3992],{"class":1229},"                \u003Cpose>0.208 0 0 0 0 0\u003C\u002Fpose>\n",[155,3994,3995],{"class":157,"line":486},[155,3996,3997],{"class":1229},"                \u003Cxmacro_block name=\"geometry_box\" x=\"0.055\" y=\"0.367\" z=\"0.055\"\u002F>\n",[155,3999,4000],{"class":157,"line":495},[155,4001,3982],{"class":1229},[155,4003,4004],{"class":157,"line":500},[155,4005,4006],{"class":1229},"            \u003Ccollision name=\"chassis_rear_wheel_holder_collision\">\n",[155,4008,4009],{"class":157,"line":1647},[155,4010,4011],{"class":1229},"                \u003Cpose>-0.208 0 0 0 0 0\u003C\u002Fpose>\n",[155,4013,4014],{"class":157,"line":1657},[155,4015,3997],{"class":1229},[155,4017,4018],{"class":157,"line":1662},[155,4019,4020],{"class":1229},"            \u003C\u002Fcollision> -->\n",[138,4022,4023],{},[141,4024,3256],{},[16,4026,4027],{},"这个参数如其字面意思一样，就是底盘的厚度，也就是底盘的上顶面到下底面的距离。",[138,4029,4030],{"start":198},[141,4031,4032],{},"轴距和轮距也要量“轮中心”，不是底盘外壳",[16,4034,4035],{},"北极熊的是：",[92,4037,4039],{"className":149,"code":4038,"language":151,"meta":98,"style":98},"        \u003C!--front_left wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_l\" prefix=\"front_left\" parent=\"chassis\" pose=\"0.207 0.194 0 0 0 0\"\u002F>\n        \u003C!--front_right wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_r\" prefix=\"front_right\" parent=\"chassis\" pose=\"0.207 -0.194 0 0 0 0\"\u002F>\n        \u003C!--rear_left wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_r\" prefix=\"rear_left\" parent=\"chassis\" pose=\"-0.207 0.194 0 0 0 0\"\u002F>\n        \u003C!--rear_right wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_l\" prefix=\"rear_right\" parent=\"chassis\" pose=\"-0.207 -0.194 0 0 0 0\"\u002F>\n",[20,4040,4041,4046,4084,4089,4124,4129,4163,4168],{"__ignoreMap":98},[155,4042,4043],{"class":157,"line":158},[155,4044,4045],{"class":1229},"        \u003C!--front_left wheel link and joint-->\n",[155,4047,4048,4050,4052,4054,4056,4059,4062,4064,4067,4070,4072,4074,4077,4079,4082],{"class":157,"line":191},[155,4049,1354],{"class":161},[155,4051,1371],{"class":165},[155,4053,170],{"class":169},[155,4055,173],{"class":161},[155,4057,4058],{"class":176},"\"chassis_wheel_l\"",[155,4060,4061],{"class":169}," prefix",[155,4063,173],{"class":161},[155,4065,4066],{"class":176},"\"front_left\"",[155,4068,4069],{"class":169}," parent",[155,4071,173],{"class":161},[155,4073,3428],{"class":176},[155,4075,4076],{"class":169}," pose",[155,4078,173],{"class":161},[155,4080,4081],{"class":176},"\"0.207 0.194 0 0 0 0\"",[155,4083,188],{"class":161},[155,4085,4086],{"class":157,"line":198},[155,4087,4088],{"class":1229},"        \u003C!--front_right wheel link and joint-->\n",[155,4090,4091,4093,4095,4097,4099,4102,4104,4106,4109,4111,4113,4115,4117,4119,4122],{"class":157,"line":266},[155,4092,1354],{"class":161},[155,4094,1371],{"class":165},[155,4096,170],{"class":169},[155,4098,173],{"class":161},[155,4100,4101],{"class":176},"\"chassis_wheel_r\"",[155,4103,4061],{"class":169},[155,4105,173],{"class":161},[155,4107,4108],{"class":176},"\"front_right\"",[155,4110,4069],{"class":169},[155,4112,173],{"class":161},[155,4114,3428],{"class":176},[155,4116,4076],{"class":169},[155,4118,173],{"class":161},[155,4120,4121],{"class":176},"\"0.207 -0.194 0 0 0 0\"",[155,4123,188],{"class":161},[155,4125,4126],{"class":157,"line":282},[155,4127,4128],{"class":1229},"        \u003C!--rear_left wheel link and joint-->\n",[155,4130,4131,4133,4135,4137,4139,4141,4143,4145,4148,4150,4152,4154,4156,4158,4161],{"class":157,"line":297},[155,4132,1354],{"class":161},[155,4134,1371],{"class":165},[155,4136,170],{"class":169},[155,4138,173],{"class":161},[155,4140,4101],{"class":176},[155,4142,4061],{"class":169},[155,4144,173],{"class":161},[155,4146,4147],{"class":176},"\"rear_left\"",[155,4149,4069],{"class":169},[155,4151,173],{"class":161},[155,4153,3428],{"class":176},[155,4155,4076],{"class":169},[155,4157,173],{"class":161},[155,4159,4160],{"class":176},"\"-0.207 0.194 0 0 0 0\"",[155,4162,188],{"class":161},[155,4164,4165],{"class":157,"line":486},[155,4166,4167],{"class":1229},"        \u003C!--rear_right wheel link and joint-->\n",[155,4169,4170,4172,4174,4176,4178,4180,4182,4184,4187,4189,4191,4193,4195,4197,4200],{"class":157,"line":495},[155,4171,1354],{"class":161},[155,4173,1371],{"class":165},[155,4175,170],{"class":169},[155,4177,173],{"class":161},[155,4179,4058],{"class":176},[155,4181,4061],{"class":169},[155,4183,173],{"class":161},[155,4185,4186],{"class":176},"\"rear_right\"",[155,4188,4069],{"class":169},[155,4190,173],{"class":161},[155,4192,3428],{"class":176},[155,4194,4076],{"class":169},[155,4196,173],{"class":161},[155,4198,4199],{"class":176},"\"-0.207 -0.194 0 0 0 0\"",[155,4201,188],{"class":161},[92,4203,4206],{"className":4204,"code":4205,"language":97,"meta":98},[95],"FL:  0.207   0.194\nFR:  0.207  -0.194\nRL: -0.207   0.194\nRR: -0.207  -0.194\n",[20,4207,4205],{"__ignoreMap":98},[16,4209,4210],{},"那么轴距是 = 0.207 - (-0.207) = 0.414 m",[16,4212,4213],{},"那么轮距是 = 0.194 - (-0.194) = 0.388 m",[16,4215,4216],{},"示意图：",[92,4218,4221],{"className":4219,"code":4220,"language":97,"meta":98},[95],"                 +X 前\n\n       FL ●────────────● FR\n          │            │\n          │            │\n          │            │\n          │            │\n       RL ●────────────● RR\n\n          ←  轮距  →\n\n前后两个轮轴中心的距离\n        = 轴距\n",[20,4222,4220],{"__ignoreMap":98},[16,4224,4225],{},"所以要测量的数据是：\n前左轮中心 到 后左轮中心：X 方向距离\n左轮中心面 到 右轮中心面：Y 方向距离\n不是量轮胎最外侧。",[16,4227,4228],{},"如下图显示轮距为324mm",[16,4230,4231],{},[3517,4232],{"alt":3519,"src":4233},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189244150.webp",[16,4235,4236],{},"如下图显示轴距也是324mm",[16,4238,4239],{},[3517,4240],{"alt":3519,"src":4241},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189083467.webp",[16,4243,4244],{},"324\u002F2=162",[16,4246,4247],{},"所以是",[92,4249,4252],{"className":4250,"code":4251,"language":97,"meta":98},[95],"FL:  0.162   0.162\nFR:  0.162  -0.162\nRL: -0.162   0.162\nRR: -0.162  -0.162\n",[20,4253,4251],{"__ignoreMap":98},[92,4255,4257],{"className":149,"code":4256,"language":151,"meta":98,"style":98},"        \u003C!--front_left wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_l\" prefix=\"front_left\" parent=\"chassis\" pose=\"0.162 0.162 0 0 0 0\"\u002F>\n        \u003C!--front_right wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_r\" prefix=\"front_right\" parent=\"chassis\" pose=\"0.162 -0.162 0 0 0 0\"\u002F>\n        \u003C!--rear_left wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_r\" prefix=\"rear_left\" parent=\"chassis\" pose=\"-0.162 0.162 0 0 0 0\"\u002F>\n        \u003C!--rear_right wheel link and joint-->\n        \u003Cxmacro_block name=\"chassis_wheel_l\" prefix=\"rear_right\" parent=\"chassis\" pose=\"-0.162 -0.162 0 0 0 0\"\u002F>\n",[20,4258,4259,4263,4296,4300,4333,4337,4370,4374],{"__ignoreMap":98},[155,4260,4261],{"class":157,"line":158},[155,4262,4045],{"class":1229},[155,4264,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4294],{"class":157,"line":191},[155,4266,1354],{"class":161},[155,4268,1371],{"class":165},[155,4270,170],{"class":169},[155,4272,173],{"class":161},[155,4274,4058],{"class":176},[155,4276,4061],{"class":169},[155,4278,173],{"class":161},[155,4280,4066],{"class":176},[155,4282,4069],{"class":169},[155,4284,173],{"class":161},[155,4286,3428],{"class":176},[155,4288,4076],{"class":169},[155,4290,173],{"class":161},[155,4292,4293],{"class":176},"\"0.162 0.162 0 0 0 0\"",[155,4295,188],{"class":161},[155,4297,4298],{"class":157,"line":198},[155,4299,4088],{"class":1229},[155,4301,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328,4331],{"class":157,"line":266},[155,4303,1354],{"class":161},[155,4305,1371],{"class":165},[155,4307,170],{"class":169},[155,4309,173],{"class":161},[155,4311,4101],{"class":176},[155,4313,4061],{"class":169},[155,4315,173],{"class":161},[155,4317,4108],{"class":176},[155,4319,4069],{"class":169},[155,4321,173],{"class":161},[155,4323,3428],{"class":176},[155,4325,4076],{"class":169},[155,4327,173],{"class":161},[155,4329,4330],{"class":176},"\"0.162 -0.162 0 0 0 0\"",[155,4332,188],{"class":161},[155,4334,4335],{"class":157,"line":282},[155,4336,4128],{"class":1229},[155,4338,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4368],{"class":157,"line":297},[155,4340,1354],{"class":161},[155,4342,1371],{"class":165},[155,4344,170],{"class":169},[155,4346,173],{"class":161},[155,4348,4101],{"class":176},[155,4350,4061],{"class":169},[155,4352,173],{"class":161},[155,4354,4147],{"class":176},[155,4356,4069],{"class":169},[155,4358,173],{"class":161},[155,4360,3428],{"class":176},[155,4362,4076],{"class":169},[155,4364,173],{"class":161},[155,4366,4367],{"class":176},"\"-0.162 0.162 0 0 0 0\"",[155,4369,188],{"class":161},[155,4371,4372],{"class":157,"line":486},[155,4373,4167],{"class":1229},[155,4375,4376,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4405],{"class":157,"line":495},[155,4377,1354],{"class":161},[155,4379,1371],{"class":165},[155,4381,170],{"class":169},[155,4383,173],{"class":161},[155,4385,4058],{"class":176},[155,4387,4061],{"class":169},[155,4389,173],{"class":161},[155,4391,4186],{"class":176},[155,4393,4069],{"class":169},[155,4395,173],{"class":161},[155,4397,3428],{"class":176},[155,4399,4076],{"class":169},[155,4401,173],{"class":161},[155,4403,4404],{"class":176},"\"-0.162 -0.162 0 0 0 0\"",[155,4406,188],{"class":161},[138,4408,4409],{"start":191},[141,4410,3295],{},[16,4412,4413,4414,4416],{},"打开",[20,4415,1902],{},":",[16,4418,4419],{},"这是轮子的直径，不是半径，注意下。",[16,4421,4422],{},"如下图轮子直径是125mm",[16,4424,4425],{},[3517,4426],{"alt":3519,"src":4427},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189090628.webp",[138,4429,4430],{},[141,4431,4432],{},"底盘距离水平地面的高度chassis_height：",[92,4434,4436],{"className":149,"code":4435,"language":151,"meta":98,"style":98},"    \u003C!-- 底盘距离水平地面的高度 -->\n    \u003Cxmacro_define_value name=\"chassis_height\" value=\"0.077\" \u002F>\n    \u003C!-- gimbal_yaw 相对于底盘的 z 轴安装偏移 -->\n    \u003Cxmacro_define_value name=\"gimbal_yaw_height\" value=\"0.026\" \u002F>\n    \u003C!-- gimbal_pitch 相对于 gimbal_yaw 的高度差 -->\n    \u003Cxmacro_define_value name=\"gimbal_pitch_height\" value=\"0.355\" \u002F>\n",[20,4437,4438,4443,4465,4470,4492,4497],{"__ignoreMap":98},[155,4439,4440],{"class":157,"line":158},[155,4441,4442],{"class":1229},"    \u003C!-- 底盘距离水平地面的高度 -->\n",[155,4444,4445,4447,4449,4451,4453,4456,4458,4460,4463],{"class":157,"line":191},[155,4446,269],{"class":161},[155,4448,236],{"class":165},[155,4450,170],{"class":169},[155,4452,173],{"class":161},[155,4454,4455],{"class":176},"\"chassis_height\"",[155,4457,180],{"class":169},[155,4459,173],{"class":161},[155,4461,4462],{"class":176},"\"0.077\"",[155,4464,1203],{"class":161},[155,4466,4467],{"class":157,"line":198},[155,4468,4469],{"class":1229},"    \u003C!-- gimbal_yaw 相对于底盘的 z 轴安装偏移 -->\n",[155,4471,4472,4474,4476,4478,4480,4483,4485,4487,4490],{"class":157,"line":266},[155,4473,269],{"class":161},[155,4475,236],{"class":165},[155,4477,170],{"class":169},[155,4479,173],{"class":161},[155,4481,4482],{"class":176},"\"gimbal_yaw_height\"",[155,4484,180],{"class":169},[155,4486,173],{"class":161},[155,4488,4489],{"class":176},"\"0.026\"",[155,4491,1203],{"class":161},[155,4493,4494],{"class":157,"line":282},[155,4495,4496],{"class":1229},"    \u003C!-- gimbal_pitch 相对于 gimbal_yaw 的高度差 -->\n",[155,4498,4499,4501,4503,4505,4507,4510,4512,4514,4517],{"class":157,"line":297},[155,4500,269],{"class":161},[155,4502,236],{"class":165},[155,4504,170],{"class":169},[155,4506,173],{"class":161},[155,4508,4509],{"class":176},"\"gimbal_pitch_height\"",[155,4511,180],{"class":169},[155,4513,173],{"class":161},[155,4515,4516],{"class":176},"\"0.355\"",[155,4518,1203],{"class":161},[16,4520,4521,4522,4524],{},"这里的几个参数，这里的",[20,4523,3311],{},"所描述的是：",[92,4526,4528],{"className":149,"code":4527,"language":151,"meta":98,"style":98},"\u003Cjoint name=\"base_to_chassis\" type=\"fixed\">\n    \u003Cpose>0 0 ${chassis_height} 0 0 0\u003C\u002Fpose>\n    \u003Cparent>base_footprint\u003C\u002Fparent>\n    \u003Cchild>chassis\u003C\u002Fchild>\n\u003C\u002Fjoint>\n",[20,4529,4530,4554,4567,4581,4595],{"__ignoreMap":98},[155,4531,4532,4534,4537,4539,4541,4544,4547,4549,4552],{"class":157,"line":158},[155,4533,162],{"class":161},[155,4535,4536],{"class":165},"joint",[155,4538,170],{"class":169},[155,4540,173],{"class":161},[155,4542,4543],{"class":176},"\"base_to_chassis\"",[155,4545,4546],{"class":169}," type",[155,4548,173],{"class":161},[155,4550,4551],{"class":176},"\"fixed\"",[155,4553,263],{"class":161},[155,4555,4556,4558,4560,4563,4565],{"class":157,"line":191},[155,4557,269],{"class":161},[155,4559,1357],{"class":165},[155,4561,4562],{"class":161},">0 0 ${chassis_height} 0 0 0\u003C\u002F",[155,4564,1357],{"class":165},[155,4566,263],{"class":161},[155,4568,4569,4571,4574,4577,4579],{"class":157,"line":198},[155,4570,269],{"class":161},[155,4572,4573],{"class":165},"parent",[155,4575,4576],{"class":161},">base_footprint\u003C\u002F",[155,4578,4573],{"class":165},[155,4580,263],{"class":161},[155,4582,4583,4585,4588,4591,4593],{"class":157,"line":266},[155,4584,269],{"class":161},[155,4586,4587],{"class":165},"child",[155,4589,4590],{"class":161},">chassis\u003C\u002F",[155,4592,4587],{"class":165},[155,4594,263],{"class":161},[155,4596,4597,4599,4601],{"class":157,"line":282},[155,4598,300],{"class":161},[155,4600,4536],{"class":165},[155,4602,263],{"class":161},[16,4604,4605],{},"由于四个轮子的 joint 都是：",[92,4607,4609],{"className":149,"code":4608,"language":151,"meta":98,"style":98},"parent=\"chassis\"\npose=\"... ... 0 0 0 0\"\n",[20,4610,4611,4616],{"__ignoreMap":98},[155,4612,4613],{"class":157,"line":158},[155,4614,4615],{"class":161},"parent=\"chassis\"\n",[155,4617,4618],{"class":157,"line":191},[155,4619,4620],{"class":161},"pose=\"... ... 0 0 0 0\"\n",[16,4622,4623],{},"所以结构其实是：",[92,4625,4628],{"className":4626,"code":4627,"language":97,"meta":98},[95],"          chassis 原点\n               ●──────── 底盘原点（北极熊这套规定为轮轴中心平面的中心点）\n               │\n               │ chassis_height\n               │\n地面 ──────────●──────────\n          base_footprint\n",[20,4629,4627],{"__ignoreMap":98},[16,4631,4632],{},"实际上北极熊这套认为规定chassis 坐标系的 z=0 就是 四个车轮轮轴中心所在的水平面",[16,4634,4635],{},"我们遵循北极熊的规定",[16,4637,4638,4639],{},"base_footprint：地面\nchassis：",[3163,4640,4641],{},"轮轴中心平面",[16,4643,4644],{},"实际上这个chassis确实不用是真的底盘，可以是空气，在底盘下方和底盘上方都可以。",[16,4646,4647],{},"所以此时，底盘高度就是轮子半径，也就是上面测量的轮子直径除以2。",[16,4649,4650],{},"此时，在底面上建一个参考基准面，再距离这个参考基准面上方距离轮子半径距离处再建一个平行的基准面。",[16,4652,4653],{},[3517,4654],{"alt":3519,"src":4655},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189105313.webp",[16,4657,4658],{},"对这个面进行草图绘制，然后把原点转实体引用，这个点就是轮轴中点，也是chassis中点。（这是北极熊规定的轮轴中点就是chassis中点）",[16,4660,4661],{},"我这里自然就是125mm\u002F2=62.5mm",[92,4663,4665],{"className":149,"code":4664,"language":151,"meta":98,"style":98},"    \u003C!-- 底盘距离水平地面的高度 -->\n    \u003Cxmacro_define_value name=\"chassis_height\" value=\"0.0625\" \u002F>\n",[20,4666,4667,4671],{"__ignoreMap":98},[155,4668,4669],{"class":157,"line":158},[155,4670,4442],{"class":1229},[155,4672,4673,4675,4677,4679,4681,4683,4685,4687,4690],{"class":157,"line":191},[155,4674,269],{"class":161},[155,4676,236],{"class":165},[155,4678,170],{"class":169},[155,4680,173],{"class":161},[155,4682,4455],{"class":176},[155,4684,180],{"class":169},[155,4686,173],{"class":161},[155,4688,4689],{"class":176},"\"0.0625\"",[155,4691,1203],{"class":161},[16,4693,4694,4695,4698,4699,4702,4703,45],{},"还有个只影响",[3163,4696,4697],{},"仿真","的地方需要修改，在",[20,4700,4701],{},"src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro","里面 include 的却还是北极熊公共轮子",[20,4704,4705],{},"\u003Cxmacro_includeuri=\"model:\u002F\u002Frmua19_standard_robot\u002Fchassis_wheel.def.xmacro\" \u002F>",[16,4707,4708,4709,45],{},"所以，真正的半径在",[20,4710,4711],{},"src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Frmua19_standard_robot\u002Fchassis_wheel.def.xmacro",[16,4713,4714],{},"里面：",[92,4716,4718],{"className":149,"code":4717,"language":151,"meta":98,"style":98},"\u003Cxmacro_define_block name=\"chassis_wheel_l\" params=\"prefix parent pose\">\n\n\u003Cxmacro_block\n    name=\"inertia_cylinder\"\n    m=\"0.4\"\n    r=\"0.0758\"\n    l=\"0.0452\"\u002F>\n\n\u003Cxmacro_block\n    name=\"geometry_cylinder\"\n    r=\"0.0758\"\n    l=\"0.0452\"\u002F>\n\n\u003Cxmacro_define_block name=\"chassis_wheel_r\" params=\"prefix parent pose\">\n\n\u003Cxmacro_block\n    name=\"inertia_cylinder\"\n    m=\"0.4\"\n    r=\"0.0758\"\n    l=\"0.0452\"\u002F>\n\n\u003Cxmacro_block\n    name=\"geometry_cylinder\"\n    r=\"0.0758\"\n    l=\"0.0452\"\u002F>\n",[20,4719,4720,4741,4745,4751,4760,4770,4780,4792,4796,4802,4811,4819,4829,4833,4853,4857,4863,4871,4879,4887,4897,4901,4907,4915,4923],{"__ignoreMap":98},[155,4721,4722,4724,4726,4728,4730,4732,4734,4736,4739],{"class":157,"line":158},[155,4723,162],{"class":161},[155,4725,505],{"class":165},[155,4727,170],{"class":169},[155,4729,173],{"class":161},[155,4731,4058],{"class":176},[155,4733,333],{"class":169},[155,4735,173],{"class":161},[155,4737,4738],{"class":176},"\"prefix parent pose\"",[155,4740,263],{"class":161},[155,4742,4743],{"class":157,"line":191},[155,4744,195],{"emptyLinePlaceholder":194},[155,4746,4747,4749],{"class":157,"line":198},[155,4748,162],{"class":161},[155,4750,521],{"class":165},[155,4752,4753,4755,4757],{"class":157,"line":266},[155,4754,398],{"class":169},[155,4756,173],{"class":161},[155,4758,4759],{"class":176},"\"inertia_cylinder\"\n",[155,4761,4762,4765,4767],{"class":157,"line":282},[155,4763,4764],{"class":169},"    m",[155,4766,173],{"class":161},[155,4768,4769],{"class":176},"\"0.4\"\n",[155,4771,4772,4775,4777],{"class":157,"line":297},[155,4773,4774],{"class":169},"    r",[155,4776,173],{"class":161},[155,4778,4779],{"class":176},"\"0.0758\"\n",[155,4781,4782,4785,4787,4790],{"class":157,"line":486},[155,4783,4784],{"class":169},"    l",[155,4786,173],{"class":161},[155,4788,4789],{"class":176},"\"0.0452\"",[155,4791,188],{"class":161},[155,4793,4794],{"class":157,"line":495},[155,4795,195],{"emptyLinePlaceholder":194},[155,4797,4798,4800],{"class":157,"line":500},[155,4799,162],{"class":161},[155,4801,521],{"class":165},[155,4803,4804,4806,4808],{"class":157,"line":1647},[155,4805,398],{"class":169},[155,4807,173],{"class":161},[155,4809,4810],{"class":176},"\"geometry_cylinder\"\n",[155,4812,4813,4815,4817],{"class":157,"line":1657},[155,4814,4774],{"class":169},[155,4816,173],{"class":161},[155,4818,4779],{"class":176},[155,4820,4821,4823,4825,4827],{"class":157,"line":1662},[155,4822,4784],{"class":169},[155,4824,173],{"class":161},[155,4826,4789],{"class":176},[155,4828,188],{"class":161},[155,4830,4831],{"class":157,"line":1672},[155,4832,195],{"emptyLinePlaceholder":194},[155,4834,4835,4837,4839,4841,4843,4845,4847,4849,4851],{"class":157,"line":1678},[155,4836,162],{"class":161},[155,4838,505],{"class":165},[155,4840,170],{"class":169},[155,4842,173],{"class":161},[155,4844,4101],{"class":176},[155,4846,333],{"class":169},[155,4848,173],{"class":161},[155,4850,4738],{"class":176},[155,4852,263],{"class":161},[155,4854,4855],{"class":157,"line":1687},[155,4856,195],{"emptyLinePlaceholder":194},[155,4858,4859,4861],{"class":157,"line":2884},[155,4860,162],{"class":161},[155,4862,521],{"class":165},[155,4864,4865,4867,4869],{"class":157,"line":2904},[155,4866,398],{"class":169},[155,4868,173],{"class":161},[155,4870,4759],{"class":176},[155,4872,4873,4875,4877],{"class":157,"line":2909},[155,4874,4764],{"class":169},[155,4876,173],{"class":161},[155,4878,4769],{"class":176},[155,4880,4881,4883,4885],{"class":157,"line":2927},[155,4882,4774],{"class":169},[155,4884,173],{"class":161},[155,4886,4779],{"class":176},[155,4888,4889,4891,4893,4895],{"class":157,"line":2932},[155,4890,4784],{"class":169},[155,4892,173],{"class":161},[155,4894,4789],{"class":176},[155,4896,188],{"class":161},[155,4898,4899],{"class":157,"line":2955},[155,4900,195],{"emptyLinePlaceholder":194},[155,4902,4903,4905],{"class":157,"line":2981},[155,4904,162],{"class":161},[155,4906,521],{"class":165},[155,4908,4909,4911,4913],{"class":157,"line":2986},[155,4910,398],{"class":169},[155,4912,173],{"class":161},[155,4914,4810],{"class":176},[155,4916,4917,4919,4921],{"class":157,"line":3004},[155,4918,4774],{"class":169},[155,4920,173],{"class":161},[155,4922,4779],{"class":176},[155,4924,4925,4927,4929,4931],{"class":157,"line":3020},[155,4926,4784],{"class":169},[155,4928,173],{"class":161},[155,4930,4789],{"class":176},[155,4932,188],{"class":161},[16,4934,643,4935,4938],{},[20,4936,4937],{},"r=\"0.0758\"","就是仿真轮子的碰撞半径。应该改成咱们轮子的半径62.5mm。",[16,4940,4941,4942,4945],{},"但我不建议直接改这个文件",[20,4943,4944],{},"rmua19_standard_robot\u002Fchassis_wheel.def.xmacro","，这个文件是公用的。",[16,4947,4948,4949,45],{},"推荐复制一份到",[20,4950,4951],{},"src\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fchassis_wheel.def.xmacro",[16,4953,4954],{},[3517,4955],{"alt":98,"src":4956},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791277565471-19edbdb7.webp",[16,4958,4959],{},[3517,4960],{"alt":98,"src":4961},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791350215341-b1936f7f.webp",[16,4963,4964],{},"修改掉下面这俩里的r半径，然后轮子厚度l也可以改一下。（注意把左右轮子的都修改了）",[16,4966,4967],{},"r = 圆柱半径\nl = 圆柱沿自身轴线方向的长度",[92,4969,4971],{"className":149,"code":4970,"language":151,"meta":98,"style":98},"\u003Cxmacro_block name=\"inertia_cylinder\"  m=\"0.4\" r=\"0.0625\" l=\"0.025\"\u002F>\n\u003Cxmacro_block name=\"geometry_cylinder\" r=\"0.0625\" l=\"0.025\"\u002F>\n",[20,4972,4973,5011],{"__ignoreMap":98},[155,4974,4975,4977,4979,4981,4983,4986,4989,4991,4994,4997,4999,5001,5004,5006,5009],{"class":157,"line":158},[155,4976,162],{"class":161},[155,4978,1371],{"class":165},[155,4980,170],{"class":169},[155,4982,173],{"class":161},[155,4984,4985],{"class":176},"\"inertia_cylinder\"",[155,4987,4988],{"class":169},"  m",[155,4990,173],{"class":161},[155,4992,4993],{"class":176},"\"0.4\"",[155,4995,4996],{"class":169}," r",[155,4998,173],{"class":161},[155,5000,4689],{"class":176},[155,5002,5003],{"class":169}," l",[155,5005,173],{"class":161},[155,5007,5008],{"class":176},"\"0.025\"",[155,5010,188],{"class":161},[155,5012,5013,5015,5017,5019,5021,5024,5026,5028,5030,5032,5034,5036],{"class":157,"line":191},[155,5014,162],{"class":161},[155,5016,1371],{"class":165},[155,5018,170],{"class":169},[155,5020,173],{"class":161},[155,5022,5023],{"class":176},"\"geometry_cylinder\"",[155,5025,4996],{"class":169},[155,5027,173],{"class":161},[155,5029,4689],{"class":176},[155,5031,5003],{"class":169},[155,5033,173],{"class":161},[155,5035,5008],{"class":176},[155,5037,188],{"class":161},[16,5039,5040,5041,3543,5043,5046,5047,45],{},"把",[20,5042,115],{},[20,5044,5045],{},"\u003Cxmacro_include uri=\"model:\u002F\u002Frmua19_standard_robot\u002Fchassis_wheel.def.xmacro\" \u002F>","改成",[20,5048,5049],{},"\u003Cxmacro_include uri=\"model:\u002F\u002Fysu2026_sentry_robot\u002Fchassis_wheel.def.xmacro\" \u002F>",[138,5051,5052],{},[141,5053,5054],{},"云台高度gimbal_yaw_height",[92,5056,5059],{"className":5057,"code":5058,"language":97,"meta":98},[95],"chassis\n   ↓\ngimbal_yaw_odom_joint      ← 大 Yaw\n   ↓\ngimbal_yaw_odom\n   ↓\ngimbal_pitch_odom_joint    ← fixed，只做辅助 frame\n   ↓\ngimbal_pitch_odom\n   ↓\ngimbal_yaw_joint           ← 小 Yaw\n   ↓\ngimbal_yaw\n   ↓\ngimbal_pitch_joint         ← 小 Pitch\n   ↓\ngimbal_pitch\n",[20,5060,5058],{"__ignoreMap":98},[92,5062,5065],{"className":5063,"code":5064,"language":97,"meta":98},[95],"            gimbal_pitch\n                 ●\n                 │\n                 │ gimbal_pitch_height\n                 │\n                 ●\n          大 Yaw 旋转中心\n                 │\n                 │ gimbal_yaw_height\n                 │\n                 ●\n          chassis 原点\n          = 轮轴中心平面\n",[20,5066,5064],{"__ignoreMap":98},[92,5068,5071],{"className":5069,"code":5070,"language":97,"meta":98},[95],"gimbal_yaw_height\n= chassis → 大 Yaw\n\ngimbal_pitch_height\n= 大 Yaw → Pitch\n",[20,5072,5070],{"__ignoreMap":98},[92,5074,5076],{"className":149,"code":5075,"language":151,"meta":98,"style":98},"        \u003Cjoint name=\"gimbal_yaw_odom_joint\" type=\"revolute\">\n        \u003Cpose relative_to='chassis'>\n            0 0 ${gimbal_yaw_height} 0 0 0\n        \u003C\u002Fpose>\n\n        \u003Cjoint name=\"gimbal_pitch_odom_joint\" type=\"fixed\">\n            \u003Cpose relative_to='gimbal_yaw_odom'>0 0 ${gimbal_pitch_height} 0 0 0\u003C\u002Fpose>\n\n        \u003Cjoint name=\"gimbal_yaw_joint\" type=\"revolute\">\n            \u003Cpose relative_to='gimbal_pitch_odom'>0 0 -${gimbal_pitch_height} 0 0 0\n            \u003C\u002Fpose>\n",[20,5077,5078,5100,5116,5121,5130,5134,5155,5175,5179,5200,5216],{"__ignoreMap":98},[155,5079,5080,5082,5084,5086,5088,5091,5093,5095,5098],{"class":157,"line":158},[155,5081,1354],{"class":161},[155,5083,4536],{"class":165},[155,5085,170],{"class":169},[155,5087,173],{"class":161},[155,5089,5090],{"class":176},"\"gimbal_yaw_odom_joint\"",[155,5092,4546],{"class":169},[155,5094,173],{"class":161},[155,5096,5097],{"class":176},"\"revolute\"",[155,5099,263],{"class":161},[155,5101,5102,5104,5106,5109,5111,5114],{"class":157,"line":191},[155,5103,1354],{"class":161},[155,5105,1357],{"class":165},[155,5107,5108],{"class":169}," relative_to",[155,5110,173],{"class":161},[155,5112,5113],{"class":176},"'chassis'",[155,5115,263],{"class":161},[155,5117,5118],{"class":157,"line":198},[155,5119,5120],{"class":161},"            0 0 ${gimbal_yaw_height} 0 0 0\n",[155,5122,5123,5126,5128],{"class":157,"line":266},[155,5124,5125],{"class":161},"        \u003C\u002F",[155,5127,1357],{"class":165},[155,5129,263],{"class":161},[155,5131,5132],{"class":157,"line":282},[155,5133,195],{"emptyLinePlaceholder":194},[155,5135,5136,5138,5140,5142,5144,5147,5149,5151,5153],{"class":157,"line":297},[155,5137,1354],{"class":161},[155,5139,4536],{"class":165},[155,5141,170],{"class":169},[155,5143,173],{"class":161},[155,5145,5146],{"class":176},"\"gimbal_pitch_odom_joint\"",[155,5148,4546],{"class":169},[155,5150,173],{"class":161},[155,5152,4551],{"class":176},[155,5154,263],{"class":161},[155,5156,5157,5159,5161,5163,5165,5168,5171,5173],{"class":157,"line":486},[155,5158,3435],{"class":161},[155,5160,1357],{"class":165},[155,5162,5108],{"class":169},[155,5164,173],{"class":161},[155,5166,5167],{"class":176},"'gimbal_yaw_odom'",[155,5169,5170],{"class":161},">0 0 ${gimbal_pitch_height} 0 0 0\u003C\u002F",[155,5172,1357],{"class":165},[155,5174,263],{"class":161},[155,5176,5177],{"class":157,"line":495},[155,5178,195],{"emptyLinePlaceholder":194},[155,5180,5181,5183,5185,5187,5189,5192,5194,5196,5198],{"class":157,"line":500},[155,5182,1354],{"class":161},[155,5184,4536],{"class":165},[155,5186,170],{"class":169},[155,5188,173],{"class":161},[155,5190,5191],{"class":176},"\"gimbal_yaw_joint\"",[155,5193,4546],{"class":169},[155,5195,173],{"class":161},[155,5197,5097],{"class":176},[155,5199,263],{"class":161},[155,5201,5202,5204,5206,5208,5210,5213],{"class":157,"line":1647},[155,5203,3435],{"class":161},[155,5205,1357],{"class":165},[155,5207,5108],{"class":169},[155,5209,173],{"class":161},[155,5211,5212],{"class":176},"'gimbal_pitch_odom'",[155,5214,5215],{"class":161},">0 0 -${gimbal_pitch_height} 0 0 0\n",[155,5217,5218,5220,5222],{"class":157,"line":1657},[155,5219,3648],{"class":161},[155,5221,1357],{"class":165},[155,5223,263],{"class":161},[16,5225,5226,5227,5230,5231,5234],{},"看这里可以知道，",[20,5228,5229],{},"gimbal_yaw_odom_joint","和",[20,5232,5233],{},"gimbal_yaw_joint","是重合的。（大小Yaw重合）",[16,5236,5237],{},"他描述的是",[92,5239,5242],{"className":5240,"code":5241,"language":97,"meta":98},[95],"chassis 坐标系原点\n        │\n        │ gimbal_yaw_height\n        │\n        ▼\n云台 gimbal_yaw_odom_joint（大Yaw） 旋转轴原点 \n",[20,5243,5241],{"__ignoreMap":98},[16,5245,5246],{},"也就是chassis 坐标系原点到 yaw 旋转轴中心的 Z 向距离。",[16,5248,5249,5250,5252],{},"如果云台相对于底盘有前后偏移，那么不能只填",[20,5251,3328],{},"，应该填完整的pose。",[16,5254,5255],{},"看这个云台最中心的环与底盘原点之间只有dz，说明云台在车的最中央，无偏移。",[16,5257,5258],{},"经测量，gimbal_yaw_height为210.46mm",[16,5260,5261],{},[3517,5262],{"alt":3519,"src":5263},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189106676.webp",[92,5265,5267],{"className":149,"code":5266,"language":151,"meta":98,"style":98},"    \u003C!-- gimbal_yaw 相对于底盘的 z 轴安装偏移 -->\n    \u003Cxmacro_define_value name=\"gimbal_yaw_height\" value=\"0.21046\" \u002F>\n",[20,5268,5269,5273],{"__ignoreMap":98},[155,5270,5271],{"class":157,"line":158},[155,5272,4469],{"class":1229},[155,5274,5275,5277,5279,5281,5283,5285,5287,5289,5292],{"class":157,"line":191},[155,5276,269],{"class":161},[155,5278,236],{"class":165},[155,5280,170],{"class":169},[155,5282,173],{"class":161},[155,5284,4482],{"class":176},[155,5286,180],{"class":169},[155,5288,173],{"class":161},[155,5290,5291],{"class":176},"\"0.21046\"",[155,5293,1203],{"class":161},[16,5295,5296,5297,5299],{},"除了改尺寸以外，由于咱们没有大小Yaw结构，而Gazebo又只给了小Yaw控制器，所以咱们把",[20,5298,5229],{},"给固定死吧。",[16,5301,4413,5302,5040],{},[20,5303,5304],{},"\u002Fsrc\u002Frmoss_gz_resources\u002Fresource\u002Fmodels\u002Fysu2026_sentry_robot\u002Fysu2026_sentry_robot.def.xmacro",[92,5306,5308],{"className":149,"code":5307,"language":151,"meta":98,"style":98},"        \u003Cjoint name=\"gimbal_yaw_odom_joint\" type=\"revolute\">\n            \u003Cpose relative_to='chassis'>0 0 ${gimbal_yaw_height} 0 0 0\u003C\u002Fpose>\n            \u003Cparent>chassis\u003C\u002Fparent>\n            \u003Cchild>gimbal_yaw_odom\u003C\u002Fchild>\n            \u003Caxis>\n                \u003Cxyz>0 0 1\u003C\u002Fxyz>\n                \u003Climit>\n                    \u003Ceffort>100\u003C\u002Feffort>\n                    \u003Cvelocity>50\u003C\u002Fvelocity>\n                    \u003Clower>-1.79769e+308\u003C\u002Flower>\n                    \u003Cupper>1.79769e+308\u003C\u002Fupper>\n                \u003C\u002Flimit>\n            \u003C\u002Faxis>\n        \u003C\u002Fjoint>\n",[20,5309,5310,5330,5349,5361,5374,5383,5397,5406,5421,5435,5449,5463,5472,5480],{"__ignoreMap":98},[155,5311,5312,5314,5316,5318,5320,5322,5324,5326,5328],{"class":157,"line":158},[155,5313,1354],{"class":161},[155,5315,4536],{"class":165},[155,5317,170],{"class":169},[155,5319,173],{"class":161},[155,5321,5090],{"class":176},[155,5323,4546],{"class":169},[155,5325,173],{"class":161},[155,5327,5097],{"class":176},[155,5329,263],{"class":161},[155,5331,5332,5334,5336,5338,5340,5342,5345,5347],{"class":157,"line":191},[155,5333,3435],{"class":161},[155,5335,1357],{"class":165},[155,5337,5108],{"class":169},[155,5339,173],{"class":161},[155,5341,5113],{"class":176},[155,5343,5344],{"class":161},">0 0 ${gimbal_yaw_height} 0 0 0\u003C\u002F",[155,5346,1357],{"class":165},[155,5348,263],{"class":161},[155,5350,5351,5353,5355,5357,5359],{"class":157,"line":198},[155,5352,3435],{"class":161},[155,5354,4573],{"class":165},[155,5356,4590],{"class":161},[155,5358,4573],{"class":165},[155,5360,263],{"class":161},[155,5362,5363,5365,5367,5370,5372],{"class":157,"line":266},[155,5364,3435],{"class":161},[155,5366,4587],{"class":165},[155,5368,5369],{"class":161},">gimbal_yaw_odom\u003C\u002F",[155,5371,4587],{"class":165},[155,5373,263],{"class":161},[155,5375,5376,5378,5381],{"class":157,"line":282},[155,5377,3435],{"class":161},[155,5379,5380],{"class":165},"axis",[155,5382,263],{"class":161},[155,5384,5385,5387,5390,5393,5395],{"class":157,"line":297},[155,5386,3445],{"class":161},[155,5388,5389],{"class":165},"xyz",[155,5391,5392],{"class":161},">0 0 1\u003C\u002F",[155,5394,5389],{"class":165},[155,5396,263],{"class":161},[155,5398,5399,5401,5404],{"class":157,"line":486},[155,5400,3445],{"class":161},[155,5402,5403],{"class":165},"limit",[155,5405,263],{"class":161},[155,5407,5408,5411,5414,5417,5419],{"class":157,"line":495},[155,5409,5410],{"class":161},"                    \u003C",[155,5412,5413],{"class":165},"effort",[155,5415,5416],{"class":161},">100\u003C\u002F",[155,5418,5413],{"class":165},[155,5420,263],{"class":161},[155,5422,5423,5425,5428,5431,5433],{"class":157,"line":500},[155,5424,5410],{"class":161},[155,5426,5427],{"class":165},"velocity",[155,5429,5430],{"class":161},">50\u003C\u002F",[155,5432,5427],{"class":165},[155,5434,263],{"class":161},[155,5436,5437,5439,5442,5445,5447],{"class":157,"line":1647},[155,5438,5410],{"class":161},[155,5440,5441],{"class":165},"lower",[155,5443,5444],{"class":161},">-1.79769e+308\u003C\u002F",[155,5446,5441],{"class":165},[155,5448,263],{"class":161},[155,5450,5451,5453,5456,5459,5461],{"class":157,"line":1657},[155,5452,5410],{"class":161},[155,5454,5455],{"class":165},"upper",[155,5457,5458],{"class":161},">1.79769e+308\u003C\u002F",[155,5460,5455],{"class":165},[155,5462,263],{"class":161},[155,5464,5465,5468,5470],{"class":157,"line":1662},[155,5466,5467],{"class":161},"                \u003C\u002F",[155,5469,5403],{"class":165},[155,5471,263],{"class":161},[155,5473,5474,5476,5478],{"class":157,"line":1672},[155,5475,3648],{"class":161},[155,5477,5380],{"class":165},[155,5479,263],{"class":161},[155,5481,5482,5484,5486],{"class":157,"line":1678},[155,5483,5125],{"class":161},[155,5485,4536],{"class":165},[155,5487,263],{"class":161},[16,5489,5046],{},[92,5491,5493],{"className":149,"code":5492,"language":151,"meta":98,"style":98},"        \u003Cjoint name=\"gimbal_yaw_odom_joint\" type=\"fixed\">\n            \u003Cpose relative_to=\"chassis\">0 0 ${gimbal_yaw_height} 0 0 0\u003C\u002Fpose>\n            \u003Cparent>chassis\u003C\u002Fparent>\n            \u003Cchild>gimbal_yaw_odom\u003C\u002Fchild>\n        \u003C\u002Fjoint>\n",[20,5494,5495,5515,5533,5545,5557],{"__ignoreMap":98},[155,5496,5497,5499,5501,5503,5505,5507,5509,5511,5513],{"class":157,"line":158},[155,5498,1354],{"class":161},[155,5500,4536],{"class":165},[155,5502,170],{"class":169},[155,5504,173],{"class":161},[155,5506,5090],{"class":176},[155,5508,4546],{"class":169},[155,5510,173],{"class":161},[155,5512,4551],{"class":176},[155,5514,263],{"class":161},[155,5516,5517,5519,5521,5523,5525,5527,5529,5531],{"class":157,"line":191},[155,5518,3435],{"class":161},[155,5520,1357],{"class":165},[155,5522,5108],{"class":169},[155,5524,173],{"class":161},[155,5526,3428],{"class":176},[155,5528,5344],{"class":161},[155,5530,1357],{"class":165},[155,5532,263],{"class":161},[155,5534,5535,5537,5539,5541,5543],{"class":157,"line":198},[155,5536,3435],{"class":161},[155,5538,4573],{"class":165},[155,5540,4590],{"class":161},[155,5542,4573],{"class":165},[155,5544,263],{"class":161},[155,5546,5547,5549,5551,5553,5555],{"class":157,"line":266},[155,5548,3435],{"class":161},[155,5550,4587],{"class":165},[155,5552,5369],{"class":161},[155,5554,4587],{"class":165},[155,5556,263],{"class":161},[155,5558,5559,5561,5563],{"class":157,"line":282},[155,5560,5125],{"class":161},[155,5562,4536],{"class":165},[155,5564,263],{"class":161},[138,5566,5567],{},[141,5568,5569],{},"云台高度gimbal_pitch_height",[92,5571,5574],{"className":5572,"code":5573,"language":97,"meta":98},[95],"                    ● pitch 旋转轴\n                    │\n                    │ gimbal_pitch_height\n                    │\n                    ● yaw 旋转轴\n                    │\n                    │ gimbal_yaw_height\n                    │\n                    ● chassis 原点\n                    │\n                    │ chassis_height\n                    │\n────────────────────● 地面\n",[20,5575,5573],{"__ignoreMap":98},[92,5577,5579],{"className":149,"code":5578,"language":151,"meta":98,"style":98},"\u003Cjoint name=\"gimbal_pitch_odom_joint\" type=\"fixed\">\n    \u003Cpose relative_to=\"gimbal_yaw_odom\">\n        0 0 ${gimbal_pitch_height} 0 0 0\n    \u003C\u002Fpose>\n",[20,5580,5581,5601,5616,5621],{"__ignoreMap":98},[155,5582,5583,5585,5587,5589,5591,5593,5595,5597,5599],{"class":157,"line":158},[155,5584,162],{"class":161},[155,5586,4536],{"class":165},[155,5588,170],{"class":169},[155,5590,173],{"class":161},[155,5592,5146],{"class":176},[155,5594,4546],{"class":169},[155,5596,173],{"class":161},[155,5598,4551],{"class":176},[155,5600,263],{"class":161},[155,5602,5603,5605,5607,5609,5611,5614],{"class":157,"line":191},[155,5604,269],{"class":161},[155,5606,1357],{"class":165},[155,5608,5108],{"class":169},[155,5610,173],{"class":161},[155,5612,5613],{"class":176},"\"gimbal_yaw_odom\"",[155,5615,263],{"class":161},[155,5617,5618],{"class":157,"line":198},[155,5619,5620],{"class":161},"        0 0 ${gimbal_pitch_height} 0 0 0\n",[155,5622,5623,5625,5627],{"class":157,"line":266},[155,5624,366],{"class":161},[155,5626,1357],{"class":165},[155,5628,263],{"class":161},[92,5630,5632],{"className":149,"code":5631,"language":151,"meta":98,"style":98},"\u003Cjoint name=\"gimbal_pitch_joint\" type=\"revolute\">\n    \u003Cpose relative_to=\"gimbal_yaw\">\n        0 0 ${gimbal_pitch_height} 0 0 0\n    \u003C\u002Fpose>\n",[20,5633,5634,5655,5670,5674],{"__ignoreMap":98},[155,5635,5636,5638,5640,5642,5644,5647,5649,5651,5653],{"class":157,"line":158},[155,5637,162],{"class":161},[155,5639,4536],{"class":165},[155,5641,170],{"class":169},[155,5643,173],{"class":161},[155,5645,5646],{"class":176},"\"gimbal_pitch_joint\"",[155,5648,4546],{"class":169},[155,5650,173],{"class":161},[155,5652,5097],{"class":176},[155,5654,263],{"class":161},[155,5656,5657,5659,5661,5663,5665,5668],{"class":157,"line":191},[155,5658,269],{"class":161},[155,5660,1357],{"class":165},[155,5662,5108],{"class":169},[155,5664,173],{"class":161},[155,5666,5667],{"class":176},"\"gimbal_yaw\"",[155,5669,263],{"class":161},[155,5671,5672],{"class":157,"line":198},[155,5673,5620],{"class":161},[155,5675,5676,5678,5680],{"class":157,"line":266},[155,5677,366],{"class":161},[155,5679,1357],{"class":165},[155,5681,263],{"class":161},[16,5683,5684],{},"这里大小pitch是重合的。",[16,5686,5687],{},"云台高度gimbal_pitch_height所表示是大 Yaw 轴中心 → Pitch 旋转轴中心的垂直高度差。",[16,5689,5690],{},"也就是 yaw 旋转轴中心 → pitch 旋转轴中心的垂直距离。",[16,5692,5693],{},"如下图云台高度gimbal_pitch_height是 96.41mm",[16,5695,5696],{},[3517,5697],{"alt":3519,"src":5698},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2026\u002F09\u002F20\u002F1791189237016.webp",[92,5700,5702],{"className":149,"code":5701,"language":151,"meta":98,"style":98},"    \u003C!-- gimbal_pitch 相对于 gimbal_yaw 的高度差 -->\n    \u003Cxmacro_define_value name=\"gimbal_pitch_height\" value=\"0.09641\" \u002F>\n",[20,5703,5704,5708],{"__ignoreMap":98},[155,5705,5706],{"class":157,"line":158},[155,5707,4496],{"class":1229},[155,5709,5710,5712,5714,5716,5718,5720,5722,5724,5727],{"class":157,"line":191},[155,5711,269],{"class":161},[155,5713,236],{"class":165},[155,5715,170],{"class":169},[155,5717,173],{"class":161},[155,5719,4509],{"class":176},[155,5721,180],{"class":169},[155,5723,173],{"class":161},[155,5725,5726],{"class":176},"\"0.09641\"",[155,5728,1203],{"class":161},[5730,5731,5732],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}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 .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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":98,"searchDepth":191,"depth":191,"links":5734},[5735],{"id":14,"depth":191,"text":5,"children":5736},[5737,5738],{"id":131,"depth":198,"text":131},{"id":988,"depth":198,"text":988},"0300-0100","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description",{"title":5,"description":98},"wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","uaO9B8u4ZH3uNlADrLZZS6sSzeemgpm5eFKpkyUmjgk",[5752,5759,5765,5767,5773,5779,5785,5791,5797,5803,5809,5815,5821,5827,5833,5839,5845,5851,5857,5863,5869,5875,5881,5887,5893,5899,5905,5911,5917,5923,5929,5935,5941,5947,5953,5959,5965,5971],{"path":5753,"stem":5754,"title":5755,"authors":5756,"date":5740,"chapterOrder":5757,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":5760,"stem":5761,"title":5762,"authors":5763,"date":5740,"chapterOrder":5764,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":5747,"stem":5749,"title":5,"authors":5766,"date":5740,"chapterOrder":5739,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},[7],{"path":5768,"stem":5769,"title":5770,"authors":5771,"date":5740,"chapterOrder":5772,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0200-mid360-an-zhuang-wei-zhi","wiki\u002F2026-09-20-导航\u002F0300-0200-MID360安装位置","MID360安装位置",[7],"0300-0200",{"path":5774,"stem":5775,"title":5776,"authors":5777,"date":5740,"chapterOrder":5778,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0300-launch-yu-bao-yi-lai-pei-zhi","wiki\u002F2026-09-20-导航\u002F0300-0300-Launch与包依赖配置","Launch与包依赖配置",[7],"0300-0300",{"path":5780,"stem":5781,"title":5782,"authors":5783,"date":5740,"chapterOrder":5784,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":5786,"stem":5787,"title":5788,"authors":5789,"date":5740,"chapterOrder":5790,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":5792,"stem":5793,"title":5794,"authors":5795,"date":5740,"chapterOrder":5796,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":5798,"stem":5799,"title":5800,"authors":5801,"date":5740,"chapterOrder":5802,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0100-linux-yu-mcu-shu-ju-dui-jie","wiki\u002F2026-09-20-导航\u002F0400-0100-Linux与MCU数据对接","Linux与MCU数据对接",[7],"0400-0100",{"path":5804,"stem":5805,"title":5806,"authors":5807,"date":5740,"chapterOrder":5808,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":5810,"stem":5811,"title":5812,"authors":5813,"date":5740,"chapterOrder":5814,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":5816,"stem":5817,"title":5818,"authors":5819,"date":5740,"chapterOrder":5820,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0400-mid360-yu-tf-lian-tiao","wiki\u002F2026-09-20-导航\u002F0400-0400-MID360与TF联调","MID360与TF联调",[7],"0400-0400",{"path":5822,"stem":5823,"title":5824,"authors":5825,"date":5740,"chapterOrder":5826,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":5828,"stem":5829,"title":5830,"authors":5831,"date":5740,"chapterOrder":5832,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0100-point-lio","wiki\u002F2026-09-20-导航\u002F0500-0100-Point_LIO","Point_LIO（激光与IMU融合里程计，建图与定位算法）",[7],"0500-0100",{"path":5834,"stem":5835,"title":5836,"authors":5837,"date":5740,"chapterOrder":5838,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0200-loam-interface","wiki\u002F2026-09-20-导航\u002F0500-0200-loam_interface","loam_interface（Point-LIO输出的坐标与话题适配）",[7],"0500-0200",{"path":5840,"stem":5841,"title":5842,"authors":5843,"date":5740,"chapterOrder":5844,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0300-sensor-scan-generation","wiki\u002F2026-09-20-导航\u002F0500-0300-sensor_scan_generation","sensor_scan_generation（雷达点云换系与底盘、云台位姿转换）",[7],"0500-0300",{"path":5846,"stem":5847,"title":5848,"authors":5849,"date":5740,"chapterOrder":5850,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":5852,"stem":5853,"title":5854,"authors":5855,"date":5740,"chapterOrder":5856,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0500-terrain-analysis-ext","wiki\u002F2026-09-20-导航\u002F0500-0500-terrain_analysis_ext","terrain_analysis_ext（扩展远场地形与近远场结果合并）",[7],"0500-0500",{"path":5858,"stem":5859,"title":5860,"authors":5861,"date":5740,"chapterOrder":5862,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform","wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"0500-0600",{"path":5864,"stem":5865,"title":5866,"authors":5867,"date":5740,"chapterOrder":5868,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0700-small-gicp-relocalization","wiki\u002F2026-09-20-导航\u002F0500-0700-small_gicp_relocalization","small_gicp_relocalization（先验点云地图重定位）",[7],"0500-0700",{"path":5870,"stem":5871,"title":5872,"authors":5873,"date":5740,"chapterOrder":5874,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0800-pointcloud-to-laserscan","wiki\u002F2026-09-20-导航\u002F0500-0800-pointcloud_to_laserscan","pointcloud_to_laserscan（三维地形点云转二维扫描）",[7],"0500-0800",{"path":5876,"stem":5877,"title":5878,"authors":5879,"date":5740,"chapterOrder":5880,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":5882,"stem":5883,"title":5884,"authors":5885,"date":5740,"chapterOrder":5886,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":5888,"stem":5889,"title":5890,"authors":5891,"date":5740,"chapterOrder":5892,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":5894,"stem":5895,"title":5896,"authors":5897,"date":5740,"chapterOrder":5898,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":5900,"stem":5901,"title":5902,"authors":5903,"date":5740,"chapterOrder":5904,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":5906,"stem":5907,"title":5908,"authors":5909,"date":5740,"chapterOrder":5910,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":5912,"stem":5913,"title":5914,"authors":5915,"date":5740,"chapterOrder":5916,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":5918,"stem":5919,"title":5920,"authors":5921,"date":5740,"chapterOrder":5922,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1600-planner-server","wiki\u002F2026-09-20-导航\u002F0500-1600-planner_server","planner_server（Theta*全局路径规划）",[7],"0500-1600",{"path":5924,"stem":5925,"title":5926,"authors":5927,"date":5740,"chapterOrder":5928,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":5930,"stem":5931,"title":5932,"authors":5933,"date":5740,"chapterOrder":5934,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":5936,"stem":5937,"title":5938,"authors":5939,"date":5740,"chapterOrder":5940,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":5942,"stem":5943,"title":5944,"authors":5945,"date":5740,"chapterOrder":5946,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":5948,"stem":5949,"title":5950,"authors":5951,"date":5740,"chapterOrder":5952,"chapterDepth":158,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2100-pb-teleop-twist-joy-node","wiki\u002F2026-09-20-导航\u002F0500-2100-pb_teleop_twist_joy_node","pb_teleop_twist_joy_node（手柄输入与可替换控制入口）",[7],"0500-2100",{"path":5954,"stem":5955,"title":5956,"authors":5957,"date":5740,"chapterOrder":5958,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":5960,"stem":5961,"title":5962,"authors":5963,"date":5740,"chapterOrder":5964,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":5966,"stem":5967,"title":5968,"authors":5969,"date":5740,"chapterOrder":5970,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":5745},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":5742,"stem":5972,"title":5973,"authors":5974,"date":5740,"chapterOrder":5975,"chapterDepth":5758,"docKey":5741,"docRoot":5742,"docTitle":5743,"isWikiDoc":194,"isWikiIndex":194},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[5977,5979,5982,5985],{"name":7,"image":5978},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":5980,"image":5981},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":5983,"image":5984},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":5986,"image":5987},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431905753]