[{"data":1,"prerenderedAt":15462},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":15337},{"id":4,"title":5,"body":6,"chapter":427,"chapterSort":15324,"date":15325,"description":19,"docKey":15326,"docRoot":15327,"docTitle":15328,"extension":15329,"isWikiDoc":776,"isWikiIndex":15330,"layout":15331,"meta":15332,"navigation":776,"path":15333,"seo":15334,"stem":15335,"wikiDepth":87,"__hash__":15336},"content/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言.md","可视化平台RVIZ2与URDF建模语言",{"type":7,"value":8,"toc":15314},"minimark",[9,13,21,26,31,34,39,44,49,54,59,62,67,75,102,109,114,121,128,133,138,157,162,171,176,179,184,187,192,195,200,203,208,211,216,219,224,227,232,235,240,243,248,251,254,257,262,265,270,273,278,281,286,602,605,610,613,616,619,622,640,644,649,654,659,664,669,674,677,704,707,733,736,741,744,747,750,753,756,760,765,887,890,895,900,1355,1360,1432,1437,1472,1477,1496,1501,1526,1531,1537,1540,1545,1550,1558,1562,1565,1573,1578,1581,1586,1589,1594,1597,1605,1608,1611,1616,1619,1622,1625,1628,1631,1636,1764,1768,1771,1797,1802,1805,1831,1834,1839,1842,1846,1849,1854,1857,1860,1863,1866,1871,1876,1881,1886,1889,1894,1899,1902,1907,1910,1918,1921,1926,1931,1934,1939,1944,1949,2296,2301,2306,2311,2316,2319,2324,2329,2337,2342,2350,2353,2357,2360,2365,2368,2373,2378,2383,2388,2393,2396,2401,2404,2427,2432,2437,2442,2445,2450,2453,2458,2461,2464,2469,2472,2477,2530,2535,2540,2545,2962,2965,3500,3504,3507,3512,3515,3523,3526,3529,3537,3540,3544,3549,3552,3555,3558,3563,3566,3573,3681,3684,3687,3698,3719,3722,3730,3767,3779,3782,3787,3988,3993,4021,4026,4031,4034,4039,4044,4049,4054,4062,4065,4073,4076,4084,4087,4095,4098,4106,4109,4114,4117,4122,4127,4135,4142,4147,4338,4341,4346,4349,4352,4361,4364,4369,4374,4379,4382,4385,4390,4393,4396,4401,4406,4409,4414,4417,4422,4425,4430,4435,4438,4441,4444,4449,4482,4485,4691,4696,4699,4704,4707,4710,4715,4718,4723,4726,4731,4734,4739,4744,4747,4750,4755,4758,4761,4766,4769,4774,4779,4784,4789,4794,4799,4804,4807,4812,4815,4820,4823,4828,4831,4836,4839,4844,4847,4852,4855,4860,4863,4907,4912,4917,4920,4925,4928,4933,4941,4944,4949,4954,4959,4962,4967,4970,4978,4995,5000,5005,5008,5013,5016,5449,5452,5455,5460,5468,5471,5474,5479,5482,5485,5490,5493,5496,5499,5502,5507,5512,5517,5522,5598,5676,5679,5687,5690,5693,6265,6268,6273,6276,6281,7576,7579,7607,7612,7616,7619,7633,7639,7645,7652,7655,7667,7670,7675,7678,7683,7686,7691,7697,7704,7706,7717,7720,7725,7728,7740,7745,7752,7757,7762,7767,7772,7775,7779,7782,7785,7790,7793,7796,7803,7806,7813,7816,7821,7824,7829,7834,7839,7842,7847,7852,7857,7862,7867,7872,7875,7879,7884,7891,7896,7901,7906,7909,7914,7917,7922,7927,7930,7935,7940,7945,7950,7953,7958,7966,7969,7972,7977,7980,7983,7986,7991,7996,8001,8006,8011,8016,8019,8024,8027,8032,8035,8040,8045,8050,8055,8060,8065,8068,8072,8077,8082,8087,8092,8159,8164,8172,8175,8180,8188,8193,8198,8201,8227,8230,8295,8298,8545,8548,8845,8850,8853,8858,9363,9368,9371,9374,9382,9385,9390,9393,9398,9403,9406,9411,9414,11914,11919,11935,11940,11945,11950,11961,11966,11971,11986,11991,11996,12001,12006,12011,12019,12024,12027,12032,12035,12039,12042,12045,12048,12053,12058,12063,12066,12069,12076,12084,12087,12098,12102,12105,12108,12111,12116,12119,12123,12128,12131,12143,12150,12155,12158,12161,12166,12169,12172,12175,12211,12214,12221,12224,12227,12580,12585,12588,12591,12594,12597,12634,12637,13208,13211,13216,13219,13227,13230,13233,13255,13258,13337,13402,13407,13412,13415,13418,13420,13426,13431,13434,13437,13440,13443,13457,13460,13538,13541,13544,14448,14451,14454,14805,14808,14811,15186,15189,15192,15291,15294,15299,15302,15307,15310],[10,11,12],"h3",{"id":12},"可视化简介",[14,15,16],"p",{},[17,18],"img",{"alt":19,"src":20},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1353.webp",[14,22,23],{},[17,24],{"alt":19,"src":25},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1354.webp",[14,27,28],{},[17,29],{"alt":19,"src":30},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1355.webp",[14,32,33],{},"坐标相关、激光雷达相关、摄像头相关的rviz2插件",[14,35,36],{},[17,37],{"alt":19,"src":38},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1356.webp",[14,40,41],{},[17,42],{"alt":19,"src":43},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1357.webp",[14,45,46],{},[17,47],{"alt":19,"src":48},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1358.webp",[14,50,51],{},[17,52],{"alt":19,"src":53},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1359.webp",[14,55,56],{},[17,57],{"alt":19,"src":58},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1360.webp",[10,60,61],{"id":61},"rviz2基本使用",[14,63,64],{},[17,65],{"alt":19,"src":66},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1361.webp",[14,68,69,70,74],{},"以",[71,72,73],"code",{},"sudo apt install ros-[ROS_DISTRO]-desktop","格式安装ROS2时，RViz已经默认被安装了。",[76,77,81],"pre",{"className":78,"code":79,"language":80,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","sudo apt install ros-[ROS_DISTRO]-rviz2\n","bash",[71,82,83],{"__ignoreMap":19},[84,85,88,92,96,99],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sScJk","sudo",[84,93,95],{"class":94},"sZZnC"," apt",[84,97,98],{"class":94}," install",[84,100,101],{"class":94}," ros-[ROS_DISTRO]-rviz2\n",[14,103,104,108],{},[105,106,107],"strong",{},"备注："," 命令中的 [ROS_DISTRO] 指代ROS2版本。",[14,110,111],{},[17,112],{"alt":19,"src":113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1362.webp",[14,115,116,117,120],{},"方式1：",[71,118,119],{},"rviz2","；",[14,122,123,124,127],{},"方式2：",[71,125,126],{},"ros2 run rviz2 rviz2","。",[14,129,130],{},[17,131],{"alt":19,"src":132},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1363.webp",[14,134,135],{},[105,136,137],{},"rviz2 启动之后，默认界面如下：",[139,140,141,145,148,151,154],"ol",{},[142,143,144],"li",{},"上部为工具栏：包括视角控制、预估位姿设置、目标设置等，还可以添加自定义插件；",[142,146,147],{},"左侧为插件显示区：包括添加、删除、复制、重命名插件，显示插件，以及设置插件属性等功能；",[142,149,150],{},"中间为3D试图显示区：以可视化的方式显示添加的插件信息；",[142,152,153],{},"右侧为观测视角设置区：可以设置不同的观测视角；",[142,155,156],{},"下侧为时间显示区：包括系统时间和ROS时间。",[14,158,159],{},[105,160,161],{},"左侧插件显示区默认有两个插件：",[163,164,165,168],"ul",{},[142,166,167],{},"Global Options：该插件用于设置全局显示相关的参数，一般情况下，需要自行设置的是 Fixed Frame 选项，该选项是其他所有数据在可视化显示时所参考的全局坐标系；",[142,169,170],{},"Global Status：该插件用于显示在 Global Options 设置完毕 Fixed Frame 之后，所有的坐标变换是否正常。",[14,172,173],{},[17,174],{"alt":19,"src":175},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1364.webp",[14,177,178],{},"最上面是菜单区，左侧是插件显示区，中间是3D调试区，右侧是视角切换区域，最下方是时间区ROS Time是ROS2时间，Wall Time是系统时间，Elapsed是Rviz2运行的时间。",[14,180,181],{},[17,182],{"alt":19,"src":183},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1365.webp",[14,185,186],{},"可以保存rviz2的配置，也可以打开配置",[14,188,189],{},[17,190],{"alt":19,"src":191},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1366.webp",[14,193,194],{},"设置显示面板",[14,196,197],{},[17,198],{"alt":19,"src":199},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1367.webp",[14,201,202],{},"可以设置平面网格的个数",[14,204,205],{},[17,206],{"alt":19,"src":207},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1368.webp",[14,209,210],{},"可以设置竖直方向网格的个数",[14,212,213],{},[17,214],{"alt":19,"src":215},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1369.webp",[14,217,218],{},"可以设置网格边长是多大",[14,220,221],{},[17,222],{"alt":19,"src":223},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1370.webp",[14,225,226],{},"改变sRGB的4个通道",[14,228,229],{},[17,230],{"alt":19,"src":231},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1371.webp",[14,233,234],{},"可以改变视角",[14,236,237],{},[17,238],{"alt":19,"src":239},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1372.webp",[14,241,242],{},"设置偏移量，如果Z是-1，那么网格会相对于坐标系下沉1个单位",[14,244,245],{},[17,246],{"alt":19,"src":247},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1373.webp",[14,249,250],{},"Fixed name一般是根坐标系的名称",[14,252,253],{},"background color就是背景色",[14,255,256],{},"frame rate是坐标系的发布频率",[14,258,259],{},[17,260],{"alt":19,"src":261},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1374.webp",[14,263,264],{},"全局状态，当fixed name设置对后，就无警告了",[14,266,267],{},[17,268],{"alt":19,"src":269},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1375.webp",[14,271,272],{},"视角切换(一般默认)",[14,274,275],{},[17,276],{"alt":19,"src":277},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1376.webp",[14,279,280],{},"可以翻转Z轴",[14,282,283],{},[105,284,285],{},"常用插件：",[287,288,289,309],"table",{},[290,291,292],"thead",{},[293,294,295,300,303,306],"tr",{},[296,297,299],"th",{"align":298},"left","序号",[296,301,302],{"align":298},"名称",[296,304,305],{"align":298},"功能",[296,307,308],{"align":298},"消息类型",[310,311,312,326,340,353,367,381,395,409,423,437,451,465,479,493,507,521,535,549,562,575,589],"tbody",{},[293,313,314,318,321,324],{},[315,316,317],"td",{"align":298},"1",[315,319,320],{"align":298},"Axes",[315,322,323],{"align":298},"显示 rviz2 默认的坐标系。",[315,325],{"align":298},[293,327,328,331,334,337],{},[315,329,330],{"align":298},"2",[315,332,333],{"align":298},"Camera",[315,335,336],{"align":298},"显示相机图像，必须需要使用消息：CameraInfo。",[315,338,339],{"align":298},"sensor_msgs/msg/Image，sensor_msgs/msg/CameraInfo",[293,341,342,345,348,351],{},[315,343,344],{"align":298},"3",[315,346,347],{"align":298},"Grid",[315,349,350],{"align":298},"显示以参考坐标系原点为中心的网格。",[315,352],{"align":298},[293,354,355,358,361,364],{},[315,356,357],{"align":298},"4",[315,359,360],{"align":298},"Grid Cells",[315,362,363],{"align":298},"从网格中绘制单元格，通常是导航堆栈中成本地图中的障碍物。",[315,365,366],{"align":298},"nav_msgs/msg/GridCells",[293,368,369,372,375,378],{},[315,370,371],{"align":298},"5",[315,373,374],{"align":298},"Image",[315,376,377],{"align":298},"显示相机图像，但是和Camera插件不同，它不需要使用 CameraInfo 消息。",[315,379,380],{"align":298},"sensor_msgs/msg/Image",[293,382,383,386,389,392],{},[315,384,385],{"align":298},"6",[315,387,388],{"align":298},"InteractiveMarker",[315,390,391],{"align":298},"显示来自一个或多个交互式标记服务器的 3D 对象，并允许与它们进行鼠标交互。",[315,393,394],{"align":298},"visualization_msgs/msg/InteractiveMarker",[293,396,397,400,403,406],{},[315,398,399],{"align":298},"7",[315,401,402],{"align":298},"Laser Scan",[315,404,405],{"align":298},"显示激光雷达数据。",[315,407,408],{"align":298},"sensor_msgs/msg/LaserScan",[293,410,411,414,417,420],{},[315,412,413],{"align":298},"8",[315,415,416],{"align":298},"Map",[315,418,419],{"align":298},"显示地图数据。",[315,421,422],{"align":298},"nav_msgs/msg/OccupancyGrid",[293,424,425,428,431,434],{},[315,426,427],{"align":298},"9",[315,429,430],{"align":298},"Markers",[315,432,433],{"align":298},"允许开发者通过主题显示任意原始形状的几何体。",[315,435,436],{"align":298},"visualization_msgs/msg/Marker，visualization_msgs/msg/MarkerArray",[293,438,439,442,445,448],{},[315,440,441],{"align":298},"10",[315,443,444],{"align":298},"Path",[315,446,447],{"align":298},"显示机器人导航中的路径相关数据。",[315,449,450],{"align":298},"nav_msgs/msg/Path",[293,452,453,456,459,462],{},[315,454,455],{"align":298},"11",[315,457,458],{"align":298},"PointStamped",[315,460,461],{"align":298},"以小球的形式绘制一个点。",[315,463,464],{"align":298},"geometry_msgs/msg/PointStamped",[293,466,467,470,473,476],{},[315,468,469],{"align":298},"12",[315,471,472],{"align":298},"Pose",[315,474,475],{"align":298},"以箭头或坐标轴的方式绘制位姿。",[315,477,478],{"align":298},"geometry_msgs/msg/PoseStamped",[293,480,481,484,487,490],{},[315,482,483],{"align":298},"13",[315,485,486],{"align":298},"Pose Array",[315,488,489],{"align":298},"绘制一组 Pose。",[315,491,492],{"align":298},"geometry_msgs/msg/PoseArray",[293,494,495,498,501,504],{},[315,496,497],{"align":298},"14",[315,499,500],{"align":298},"Point Cloud2",[315,502,503],{"align":298},"绘制点云数据。",[315,505,506],{"align":298},"sensor_msgs/msg/PointCloud，sensor_msgs/msg/PointCloud2",[293,508,509,512,515,518],{},[315,510,511],{"align":298},"15",[315,513,514],{"align":298},"Polygon",[315,516,517],{"align":298},"将多边形的轮廓绘制为线。",[315,519,520],{"align":298},"geometry_msgs/msg/Polygon",[293,522,523,526,529,532],{},[315,524,525],{"align":298},"16",[315,527,528],{"align":298},"Odometry",[315,530,531],{"align":298},"显示随着时间推移累积的里程计消息。",[315,533,534],{"align":298},"nav_msgs/msg/Odometry",[293,536,537,540,543,546],{},[315,538,539],{"align":298},"17",[315,541,542],{"align":298},"Range",[315,544,545],{"align":298},"显示表示来自声纳或红外距离传感器的距离测量值的圆锥。",[315,547,548],{"align":298},"sensor_msgs/msg/Range",[293,550,551,554,557,560],{},[315,552,553],{"align":298},"18",[315,555,556],{"align":298},"RobotModel",[315,558,559],{"align":298},"显示机器人模型。",[315,561],{"align":298},[293,563,564,567,570,573],{},[315,565,566],{"align":298},"19",[315,568,569],{"align":298},"TF",[315,571,572],{"align":298},"显示 tf 变换层次结构。",[315,574],{"align":298},[293,576,577,580,583,586],{},[315,578,579],{"align":298},"20",[315,581,582],{"align":298},"Wrench",[315,584,585],{"align":298},"将geometry_msgs /WrenchStamped消息显示为表示力的箭头和表示扭矩的箭头加圆圈。",[315,587,588],{"align":298},"geometry_msgs/msg/WrenchStamped",[293,590,591,594,597,600],{},[315,592,593],{"align":298},"21",[315,595,596],{"align":298},"Oculus",[315,598,599],{"align":298},"将 RViz 场景渲染到 Oculus 头戴设备。",[315,601],{"align":298},[14,603,604],{},"上述每一种插件又包含了诸多属性，可以通过设置插件属性来控制插件的最终显示效果。",[14,606,607],{},[17,608],{"alt":19,"src":609},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1377.webp",[14,611,612],{},"Image是摄像头数据插件",[14,614,615],{},"LaserScan是激光雷达数据插件",[14,617,618],{},"TF是坐标变换插件",[14,620,621],{},"RobotModel是机器人模型插件",[76,623,627],{"className":624,"code":625,"language":626,"meta":19,"style":19},"language-TypeScript shiki shiki-themes github-light github-dark","ros2 run rviz2 rviz2 -d xxx.rviz\n#可以读取自己保存的rviz配置\n","TypeScript",[71,628,629,634],{"__ignoreMap":19},[84,630,631],{"class":86,"line":87},[84,632,633],{},"ros2 run rviz2 rviz2 -d xxx.rviz\n",[84,635,637],{"class":86,"line":636},2,[84,638,639],{},"#可以读取自己保存的rviz配置\n",[10,641,643],{"id":642},"rviz2集成urdf基本流程","rviz2集成URDF基本流程",[645,646,648],"h4",{"id":647},"案例分析","  案例分析",[14,650,651],{},[17,652],{"alt":19,"src":653},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1378.webp",[14,655,656],{},[17,657],{"alt":19,"src":658},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1379.webp",[14,660,661],{},[17,662],{"alt":19,"src":663},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1380.webp",[14,665,666],{},[17,667],{"alt":19,"src":668},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1381.webp",[14,670,671],{},[17,672],{"alt":19,"src":673},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1382.webp",[14,675,676],{},"请调用如下命令，安装案例所需的两个功能包(可以控制机器人关节运动)：",[76,678,680],{"className":78,"code":679,"language":80,"meta":19,"style":19},"sudo apt install ros-humble-joint-state-publisher\nsudo apt install ros-humble-joint-state-publisher-gui\n",[71,681,682,693],{"__ignoreMap":19},[84,683,684,686,688,690],{"class":86,"line":87},[84,685,91],{"class":90},[84,687,95],{"class":94},[84,689,98],{"class":94},[84,691,692],{"class":94}," ros-humble-joint-state-publisher\n",[84,694,695,697,699,701],{"class":86,"line":636},[84,696,91],{"class":90},[84,698,95],{"class":94},[84,700,98],{"class":94},[84,702,703],{"class":94}," ros-humble-joint-state-publisher-gui\n",[14,705,706],{},"终端下进入工作空间的src目录，调用如下命令创建C++功能包。",[76,708,710],{"className":78,"code":709,"language":80,"meta":19,"style":19},"ros2 pkg create cpp06_urdf --build-type ament_cmake\n",[71,711,712],{"__ignoreMap":19},[84,713,714,717,720,723,726,730],{"class":86,"line":87},[84,715,716],{"class":90},"ros2",[84,718,719],{"class":94}," pkg",[84,721,722],{"class":94}," create",[84,724,725],{"class":94}," cpp06_urdf",[84,727,729],{"class":728},"sj4cs"," --build-type",[84,731,732],{"class":94}," ament_cmake\n",[14,734,735],{},"功能包下新建 urdf、rviz、launch、meshes目录以备用，其中 urdf 目录下再新建子目录 urdf 与 xacro，分别用于存储 urdf 文件和 xacro 文件。",[14,737,738],{},[17,739],{"alt":19,"src":740},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1383.webp",[14,742,743],{},"launch存放launch文件",[14,745,746],{},"urdf文件里面存放urdf三维模型文件",[14,748,749],{},"meshes存放stl模型",[14,751,752],{},"xacro可以简化urdf文件，并且增强其灵活性",[14,754,755],{},"rviz存放rviz2的配置",[645,757,759],{"id":758},"框架搭建","  框架搭建",[14,761,762],{},[17,763],{"alt":19,"src":764},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1384.webp",[76,766,770],{"className":767,"code":768,"language":769,"meta":19,"style":19},"language-xml shiki shiki-themes github-light github-dark","\n \u003Crobot> name=\"hello_world\"\n   \u003Clink> name=\"base_link\"\n     \u003Cvisual>\n       \u003Cgeometry>\n         \u003Cbox size=\"0.5 0.2 0.1\"/>\n       \u003C/geometry>\n     \u003C/visual>\n   \u003C/link>\n \u003C/robot>\n","xml",[71,771,772,778,791,803,815,826,847,857,867,877],{"__ignoreMap":19},[84,773,774],{"class":86,"line":87},[84,775,777],{"emptyLinePlaceholder":776},true,"\n",[84,779,780,784,788],{"class":86,"line":636},[84,781,783],{"class":782},"sVt8B"," \u003C",[84,785,787],{"class":786},"s9eBZ","robot",[84,789,790],{"class":782},"> name=\"hello_world\"\n",[84,792,794,797,800],{"class":86,"line":793},3,[84,795,796],{"class":782},"   \u003C",[84,798,799],{"class":786},"link",[84,801,802],{"class":782},"> name=\"base_link\"\n",[84,804,806,809,812],{"class":86,"line":805},4,[84,807,808],{"class":782},"     \u003C",[84,810,811],{"class":786},"visual",[84,813,814],{"class":782},">\n",[84,816,818,821,824],{"class":86,"line":817},5,[84,819,820],{"class":782},"       \u003C",[84,822,823],{"class":786},"geometry",[84,825,814],{"class":782},[84,827,829,832,835,838,841,844],{"class":86,"line":828},6,[84,830,831],{"class":782},"         \u003C",[84,833,834],{"class":786},"box",[84,836,837],{"class":90}," size",[84,839,840],{"class":782},"=",[84,842,843],{"class":94},"\"0.5 0.2 0.1\"",[84,845,846],{"class":782},"/>\n",[84,848,850,853,855],{"class":86,"line":849},7,[84,851,852],{"class":782},"       \u003C/",[84,854,823],{"class":786},[84,856,814],{"class":782},[84,858,860,863,865],{"class":86,"line":859},8,[84,861,862],{"class":782},"     \u003C/",[84,864,811],{"class":786},[84,866,814],{"class":782},[84,868,870,873,875],{"class":86,"line":869},9,[84,871,872],{"class":782},"   \u003C/",[84,874,799],{"class":786},[84,876,814],{"class":782},[84,878,880,883,885],{"class":86,"line":879},10,[84,881,882],{"class":782}," \u003C/",[84,884,787],{"class":786},[84,886,814],{"class":782},[14,888,889],{},"  标准的XML文件",[14,891,892],{},[17,893],{"alt":19,"src":894},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1385.webp",[14,896,897],{},[17,898],{"alt":19,"src":899},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1386.webp",[76,901,905],{"className":902,"code":903,"language":904,"meta":19,"style":19},"language-python shiki shiki-themes github-light github-dark","from launch import LaunchDescription\nfrom launch_ros.actions import Node\nimport os\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command,LaunchConfiguration\nfrom launch.actions import DeclareLaunchArgument\n\n#示例：ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo01_helloworld.urdf\ndef generate_launch_description():\n\n    cpp06_urdf_dir = get_package_share_directory(\"cpp06_urdf\")\n    default_model_path = os.path.join(cpp06_urdf_dir,\"urdf/urdf\",\"demo01_helloworld.urdf\")\n    default_rviz_path = os.path.join(cpp06_urdf_dir,\"rviz\",\"display.rviz\")\n    model = DeclareLaunchArgument(name=\"model\", default_value=default_model_path)\n\n    # 加载机器人模型\n\n    # 1.启动 robot_state_publisher 节点并以参数方式加载 urdf 文件\n    robot_description = ParameterValue(Command([\"xacro \",LaunchConfiguration(\"model\")]))\n    robot_state_publisher = Node(\n        package=\"robot_state_publisher\",\n        executable=\"robot_state_publisher\",\n        parameters=[{\"robot_description\": robot_description}]\n    )\n\n    # 2.启动 joint_state_publisher 节点发布非固定关节状态\n    joint_state_publisher = Node(\n        package=\"joint_state_publisher\",\n        executable=\"joint_state_publisher\"\n    )\n\n    # rviz2 节点\n    rviz2 = Node(\n        package=\"rviz2\",\n        executable=\"rviz2\"\n\n        # arguments=[\"-d\", default_rviz_path]\n    )\n    return LaunchDescription([\n        model,\n        robot_state_publisher,\n        joint_state_publisher,\n        rviz2\n    ])\n","python",[71,906,907,922,934,941,953,965,977,989,993,999,1010,1015,1032,1054,1074,1105,1110,1116,1121,1127,1149,1160,1174,1186,1203,1209,1214,1220,1230,1242,1252,1257,1262,1268,1278,1290,1300,1305,1311,1316,1325,1331,1337,1343,1349],{"__ignoreMap":19},[84,908,909,913,916,919],{"class":86,"line":87},[84,910,912],{"class":911},"szBVR","from",[84,914,915],{"class":782}," launch ",[84,917,918],{"class":911},"import",[84,920,921],{"class":782}," LaunchDescription\n",[84,923,924,926,929,931],{"class":86,"line":636},[84,925,912],{"class":911},[84,927,928],{"class":782}," launch_ros.actions ",[84,930,918],{"class":911},[84,932,933],{"class":782}," Node\n",[84,935,936,938],{"class":86,"line":793},[84,937,918],{"class":911},[84,939,940],{"class":782}," os\n",[84,942,943,945,948,950],{"class":86,"line":805},[84,944,912],{"class":911},[84,946,947],{"class":782}," ament_index_python.packages ",[84,949,918],{"class":911},[84,951,952],{"class":782}," get_package_share_directory\n",[84,954,955,957,960,962],{"class":86,"line":817},[84,956,912],{"class":911},[84,958,959],{"class":782}," launch_ros.parameter_descriptions ",[84,961,918],{"class":911},[84,963,964],{"class":782}," ParameterValue\n",[84,966,967,969,972,974],{"class":86,"line":828},[84,968,912],{"class":911},[84,970,971],{"class":782}," launch.substitutions ",[84,973,918],{"class":911},[84,975,976],{"class":782}," Command,LaunchConfiguration\n",[84,978,979,981,984,986],{"class":86,"line":849},[84,980,912],{"class":911},[84,982,983],{"class":782}," launch.actions ",[84,985,918],{"class":911},[84,987,988],{"class":782}," DeclareLaunchArgument\n",[84,990,991],{"class":86,"line":859},[84,992,777],{"emptyLinePlaceholder":776},[84,994,995],{"class":86,"line":869},[84,996,998],{"class":997},"sJ8bj","#示例：ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo01_helloworld.urdf\n",[84,1000,1001,1004,1007],{"class":86,"line":879},[84,1002,1003],{"class":911},"def",[84,1005,1006],{"class":90}," generate_launch_description",[84,1008,1009],{"class":782},"():\n",[84,1011,1013],{"class":86,"line":1012},11,[84,1014,777],{"emptyLinePlaceholder":776},[84,1016,1018,1021,1023,1026,1029],{"class":86,"line":1017},12,[84,1019,1020],{"class":782},"    cpp06_urdf_dir ",[84,1022,840],{"class":911},[84,1024,1025],{"class":782}," get_package_share_directory(",[84,1027,1028],{"class":94},"\"cpp06_urdf\"",[84,1030,1031],{"class":782},")\n",[84,1033,1035,1038,1040,1043,1046,1049,1052],{"class":86,"line":1034},13,[84,1036,1037],{"class":782},"    default_model_path ",[84,1039,840],{"class":911},[84,1041,1042],{"class":782}," os.path.join(cpp06_urdf_dir,",[84,1044,1045],{"class":94},"\"urdf/urdf\"",[84,1047,1048],{"class":782},",",[84,1050,1051],{"class":94},"\"demo01_helloworld.urdf\"",[84,1053,1031],{"class":782},[84,1055,1057,1060,1062,1064,1067,1069,1072],{"class":86,"line":1056},14,[84,1058,1059],{"class":782},"    default_rviz_path ",[84,1061,840],{"class":911},[84,1063,1042],{"class":782},[84,1065,1066],{"class":94},"\"rviz\"",[84,1068,1048],{"class":782},[84,1070,1071],{"class":94},"\"display.rviz\"",[84,1073,1031],{"class":782},[84,1075,1077,1080,1082,1085,1089,1091,1094,1097,1100,1102],{"class":86,"line":1076},15,[84,1078,1079],{"class":782},"    model ",[84,1081,840],{"class":911},[84,1083,1084],{"class":782}," DeclareLaunchArgument(",[84,1086,1088],{"class":1087},"s4XuR","name",[84,1090,840],{"class":911},[84,1092,1093],{"class":94},"\"model\"",[84,1095,1096],{"class":782},", ",[84,1098,1099],{"class":1087},"default_value",[84,1101,840],{"class":911},[84,1103,1104],{"class":782},"default_model_path)\n",[84,1106,1108],{"class":86,"line":1107},16,[84,1109,777],{"emptyLinePlaceholder":776},[84,1111,1113],{"class":86,"line":1112},17,[84,1114,1115],{"class":997},"    # 加载机器人模型\n",[84,1117,1119],{"class":86,"line":1118},18,[84,1120,777],{"emptyLinePlaceholder":776},[84,1122,1124],{"class":86,"line":1123},19,[84,1125,1126],{"class":997},"    # 1.启动 robot_state_publisher 节点并以参数方式加载 urdf 文件\n",[84,1128,1130,1133,1135,1138,1141,1144,1146],{"class":86,"line":1129},20,[84,1131,1132],{"class":782},"    robot_description ",[84,1134,840],{"class":911},[84,1136,1137],{"class":782}," ParameterValue(Command([",[84,1139,1140],{"class":94},"\"xacro \"",[84,1142,1143],{"class":782},",LaunchConfiguration(",[84,1145,1093],{"class":94},[84,1147,1148],{"class":782},")]))\n",[84,1150,1152,1155,1157],{"class":86,"line":1151},21,[84,1153,1154],{"class":782},"    robot_state_publisher ",[84,1156,840],{"class":911},[84,1158,1159],{"class":782}," Node(\n",[84,1161,1163,1166,1168,1171],{"class":86,"line":1162},22,[84,1164,1165],{"class":1087},"        package",[84,1167,840],{"class":911},[84,1169,1170],{"class":94},"\"robot_state_publisher\"",[84,1172,1173],{"class":782},",\n",[84,1175,1177,1180,1182,1184],{"class":86,"line":1176},23,[84,1178,1179],{"class":1087},"        executable",[84,1181,840],{"class":911},[84,1183,1170],{"class":94},[84,1185,1173],{"class":782},[84,1187,1189,1192,1194,1197,1200],{"class":86,"line":1188},24,[84,1190,1191],{"class":1087},"        parameters",[84,1193,840],{"class":911},[84,1195,1196],{"class":782},"[{",[84,1198,1199],{"class":94},"\"robot_description\"",[84,1201,1202],{"class":782},": robot_description}]\n",[84,1204,1206],{"class":86,"line":1205},25,[84,1207,1208],{"class":782},"    )\n",[84,1210,1212],{"class":86,"line":1211},26,[84,1213,777],{"emptyLinePlaceholder":776},[84,1215,1217],{"class":86,"line":1216},27,[84,1218,1219],{"class":997},"    # 2.启动 joint_state_publisher 节点发布非固定关节状态\n",[84,1221,1223,1226,1228],{"class":86,"line":1222},28,[84,1224,1225],{"class":782},"    joint_state_publisher ",[84,1227,840],{"class":911},[84,1229,1159],{"class":782},[84,1231,1233,1235,1237,1240],{"class":86,"line":1232},29,[84,1234,1165],{"class":1087},[84,1236,840],{"class":911},[84,1238,1239],{"class":94},"\"joint_state_publisher\"",[84,1241,1173],{"class":782},[84,1243,1245,1247,1249],{"class":86,"line":1244},30,[84,1246,1179],{"class":1087},[84,1248,840],{"class":911},[84,1250,1251],{"class":94},"\"joint_state_publisher\"\n",[84,1253,1255],{"class":86,"line":1254},31,[84,1256,1208],{"class":782},[84,1258,1260],{"class":86,"line":1259},32,[84,1261,777],{"emptyLinePlaceholder":776},[84,1263,1265],{"class":86,"line":1264},33,[84,1266,1267],{"class":997},"    # rviz2 节点\n",[84,1269,1271,1274,1276],{"class":86,"line":1270},34,[84,1272,1273],{"class":782},"    rviz2 ",[84,1275,840],{"class":911},[84,1277,1159],{"class":782},[84,1279,1281,1283,1285,1288],{"class":86,"line":1280},35,[84,1282,1165],{"class":1087},[84,1284,840],{"class":911},[84,1286,1287],{"class":94},"\"rviz2\"",[84,1289,1173],{"class":782},[84,1291,1293,1295,1297],{"class":86,"line":1292},36,[84,1294,1179],{"class":1087},[84,1296,840],{"class":911},[84,1298,1299],{"class":94},"\"rviz2\"\n",[84,1301,1303],{"class":86,"line":1302},37,[84,1304,777],{"emptyLinePlaceholder":776},[84,1306,1308],{"class":86,"line":1307},38,[84,1309,1310],{"class":997},"        # arguments=[\"-d\", default_rviz_path]\n",[84,1312,1314],{"class":86,"line":1313},39,[84,1315,1208],{"class":782},[84,1317,1319,1322],{"class":86,"line":1318},40,[84,1320,1321],{"class":911},"    return",[84,1323,1324],{"class":782}," LaunchDescription([\n",[84,1326,1328],{"class":86,"line":1327},41,[84,1329,1330],{"class":782},"        model,\n",[84,1332,1334],{"class":86,"line":1333},42,[84,1335,1336],{"class":782},"        robot_state_publisher,\n",[84,1338,1340],{"class":86,"line":1339},43,[84,1341,1342],{"class":782},"        joint_state_publisher,\n",[84,1344,1346],{"class":86,"line":1345},44,[84,1347,1348],{"class":782},"        rviz2\n",[84,1350,1352],{"class":86,"line":1351},45,[84,1353,1354],{"class":782},"    ])\n",[14,1356,1357],{},[17,1358],{"alt":19,"src":1359},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1387.webp",[76,1361,1363],{"className":767,"code":1362,"language":769,"meta":19,"style":19},"\u003Cexec_depend>rviz2\u003C/exec_depend>\n\u003Cexec_depend>xacro\u003C/exec_depend>\n\u003Cexec_depend>robot_state_publisher\u003C/exec_depend>\n\u003Cexec_depend>joint_state_publisher\u003C/exec_depend>\n\u003Cexec_depend>ros2launch\u003C/exec_depend>\n",[71,1364,1365,1380,1393,1406,1419],{"__ignoreMap":19},[84,1366,1367,1370,1373,1376,1378],{"class":86,"line":87},[84,1368,1369],{"class":782},"\u003C",[84,1371,1372],{"class":786},"exec_depend",[84,1374,1375],{"class":782},">rviz2\u003C/",[84,1377,1372],{"class":786},[84,1379,814],{"class":782},[84,1381,1382,1384,1386,1389,1391],{"class":86,"line":636},[84,1383,1369],{"class":782},[84,1385,1372],{"class":786},[84,1387,1388],{"class":782},">xacro\u003C/",[84,1390,1372],{"class":786},[84,1392,814],{"class":782},[84,1394,1395,1397,1399,1402,1404],{"class":86,"line":793},[84,1396,1369],{"class":782},[84,1398,1372],{"class":786},[84,1400,1401],{"class":782},">robot_state_publisher\u003C/",[84,1403,1372],{"class":786},[84,1405,814],{"class":782},[84,1407,1408,1410,1412,1415,1417],{"class":86,"line":805},[84,1409,1369],{"class":782},[84,1411,1372],{"class":786},[84,1413,1414],{"class":782},">joint_state_publisher\u003C/",[84,1416,1372],{"class":786},[84,1418,814],{"class":782},[84,1420,1421,1423,1425,1428,1430],{"class":86,"line":817},[84,1422,1369],{"class":782},[84,1424,1372],{"class":786},[84,1426,1427],{"class":782},">ros2launch\u003C/",[84,1429,1372],{"class":786},[84,1431,814],{"class":782},[14,1433,1434],{},[17,1435],{"alt":19,"src":1436},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1388.webp",[76,1438,1442],{"className":1439,"code":1440,"language":1441,"meta":19,"style":19},"language-cmake shiki shiki-themes github-light github-dark","install(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share/${PROJECT_NAME}  \n)\n","cmake",[71,1443,1444,1452,1457,1468],{"__ignoreMap":19},[84,1445,1446,1449],{"class":86,"line":87},[84,1447,1448],{"class":911},"install",[84,1450,1451],{"class":782},"(\n",[84,1453,1454],{"class":86,"line":636},[84,1455,1456],{"class":782},"  DIRECTORY launch urdf rviz meshes\n",[84,1458,1459,1462,1465],{"class":86,"line":793},[84,1460,1461],{"class":782},"  DESTINATION share/",[84,1463,1464],{"class":911},"${PROJECT_NAME}",[84,1466,1467],{"class":782},"  \n",[84,1469,1470],{"class":86,"line":805},[84,1471,1031],{"class":782},[14,1473,1474],{},[17,1475],{"alt":19,"src":1476},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1389.webp",[76,1478,1480],{"className":78,"code":1479,"language":80,"meta":19,"style":19},"colcon build --packages-select cpp06_urdf\n",[71,1481,1482],{"__ignoreMap":19},[84,1483,1484,1487,1490,1493],{"class":86,"line":87},[84,1485,1486],{"class":90},"colcon",[84,1488,1489],{"class":94}," build",[84,1491,1492],{"class":728}," --packages-select",[84,1494,1495],{"class":94}," cpp06_urdf\n",[14,1497,1498],{},[17,1499],{"alt":19,"src":1500},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1390.webp",[76,1502,1504],{"className":78,"code":1503,"language":80,"meta":19,"style":19},"source install/setup.bash\nros2 launch cpp06_urdf display.launch.py\n",[71,1505,1506,1514],{"__ignoreMap":19},[84,1507,1508,1511],{"class":86,"line":87},[84,1509,1510],{"class":728},"source",[84,1512,1513],{"class":94}," install/setup.bash\n",[84,1515,1516,1518,1521,1523],{"class":86,"line":636},[84,1517,716],{"class":90},[84,1519,1520],{"class":94}," launch",[84,1522,725],{"class":94},[84,1524,1525],{"class":94}," display.launch.py\n",[14,1527,1528],{},[17,1529],{"alt":19,"src":1530},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1391.webp",[14,1532,1533,1534],{},"   ",[105,1535,1536],{},"小提示：",[14,1538,1539],{},"  在本章的后续案例中，所有实现都遵循上述步骤，在后续案例中我们只需要关注 urdf 实现即可，launch 文件和 配置文件无需修改。",[14,1541,1542],{},[17,1543],{"alt":19,"src":1544},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1392.webp",[14,1546,1547],{},[17,1548],{"alt":19,"src":1549},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1393.webp",[14,1551,1552,1555],{},[17,1553],{"alt":19,"src":1554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1394.webp",[17,1556],{"alt":19,"src":1557},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1395.webp",[645,1559,1561],{"id":1560},"urdf文件","  urdf文件",[14,1563,1564],{},"  按ctrl+\\生成注释",[14,1566,1567,1570],{},[17,1568],{"alt":19,"src":1569},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1396.webp",[17,1571],{"alt":19,"src":1572},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1397.webp",[14,1574,1575],{},[17,1576],{"alt":19,"src":1577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1398.webp",[14,1579,1580],{},"因为安装过urdf插件，所以有提示，需要创建robot根标签",[14,1582,1583],{},[17,1584],{"alt":19,"src":1585},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1399.webp",[14,1587,1588],{},"第一个属性为机器人名字",[14,1590,1591],{},[17,1592],{"alt":19,"src":1593},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1400.webp",[14,1595,1596],{},"第二个有个xml namespace，指向xacro",[14,1598,1599,1602],{},[17,1600],{"alt":19,"src":1601},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1401.webp",[17,1603],{"alt":19,"src":1604},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1402.webp",[14,1606,1607],{},"第三个有个xml namespace，指向xacro，然后还有一个机器人名字",[14,1609,1610],{},"(暂时用最简单的，也就是第一个)",[14,1612,1613],{},[17,1614],{"alt":19,"src":1615},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1403.webp",[14,1617,1618],{},"link标签叫连杆，也需要起个名字，连杆一般指刚体部分",[14,1620,1621],{},"link有个子集标签，叫visual",[14,1623,1624],{},"visual标签下要写机器人形状",[14,1626,1627],{},"然后该标签下又有一个子集标签叫geometry(几何形状)",[14,1629,1630],{},"然后又有子集标签叫box(矩形体状)后面的size后面对应长宽高",[14,1632,1633],{},[17,1634],{"alt":19,"src":1635},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1404.webp",[76,1637,1639],{"className":767,"code":1638,"language":769,"meta":19,"style":19},"\n \u003Crobot name=\"boxrobot\"> \n\n    \u003Clink name=\"base_link\"> \n\n      \u003Cvisual>\n\n        \u003Cgeometry>\n\n          \u003Cbox size=\"1.0 0.5 0.1\"/>\n        \u003C/geometry>\n      \u003C/visual>\n    \u003C/link>\n  \u003C/robot>\n",[71,1640,1641,1645,1662,1666,1682,1686,1695,1699,1708,1712,1728,1737,1746,1755],{"__ignoreMap":19},[84,1642,1643],{"class":86,"line":87},[84,1644,777],{"emptyLinePlaceholder":776},[84,1646,1647,1649,1651,1654,1656,1659],{"class":86,"line":636},[84,1648,783],{"class":782},[84,1650,787],{"class":786},[84,1652,1653],{"class":90}," name",[84,1655,840],{"class":782},[84,1657,1658],{"class":94},"\"boxrobot\"",[84,1660,1661],{"class":782},"> \n",[84,1663,1664],{"class":86,"line":793},[84,1665,777],{"emptyLinePlaceholder":776},[84,1667,1668,1671,1673,1675,1677,1680],{"class":86,"line":805},[84,1669,1670],{"class":782},"    \u003C",[84,1672,799],{"class":786},[84,1674,1653],{"class":90},[84,1676,840],{"class":782},[84,1678,1679],{"class":94},"\"base_link\"",[84,1681,1661],{"class":782},[84,1683,1684],{"class":86,"line":817},[84,1685,777],{"emptyLinePlaceholder":776},[84,1687,1688,1691,1693],{"class":86,"line":828},[84,1689,1690],{"class":782},"      \u003C",[84,1692,811],{"class":786},[84,1694,814],{"class":782},[84,1696,1697],{"class":86,"line":849},[84,1698,777],{"emptyLinePlaceholder":776},[84,1700,1701,1704,1706],{"class":86,"line":859},[84,1702,1703],{"class":782},"        \u003C",[84,1705,823],{"class":786},[84,1707,814],{"class":782},[84,1709,1710],{"class":86,"line":869},[84,1711,777],{"emptyLinePlaceholder":776},[84,1713,1714,1717,1719,1721,1723,1726],{"class":86,"line":879},[84,1715,1716],{"class":782},"          \u003C",[84,1718,834],{"class":786},[84,1720,837],{"class":90},[84,1722,840],{"class":782},[84,1724,1725],{"class":94},"\"1.0 0.5 0.1\"",[84,1727,846],{"class":782},[84,1729,1730,1733,1735],{"class":86,"line":1012},[84,1731,1732],{"class":782},"        \u003C/",[84,1734,823],{"class":786},[84,1736,814],{"class":782},[84,1738,1739,1742,1744],{"class":86,"line":1017},[84,1740,1741],{"class":782},"      \u003C/",[84,1743,811],{"class":786},[84,1745,814],{"class":782},[84,1747,1748,1751,1753],{"class":86,"line":1034},[84,1749,1750],{"class":782},"    \u003C/",[84,1752,799],{"class":786},[84,1754,814],{"class":782},[84,1756,1757,1760,1762],{"class":86,"line":1056},[84,1758,1759],{"class":782},"  \u003C/",[84,1761,787],{"class":786},[84,1763,814],{"class":782},[645,1765,1767],{"id":1766},"xacro工具将磁盘文件加载到ros2中的工具","  xacro工具(将磁盘文件加载到ROS2中的工具)",[14,1769,1770],{},"搜索是否安装过xacro",[76,1772,1774],{"className":78,"code":1773,"language":80,"meta":19,"style":19},"ros2 pkg list | grep -i xacro\n",[71,1775,1776],{"__ignoreMap":19},[84,1777,1778,1780,1782,1785,1788,1791,1794],{"class":86,"line":87},[84,1779,716],{"class":90},[84,1781,719],{"class":94},[84,1783,1784],{"class":94}," list",[84,1786,1787],{"class":911}," |",[84,1789,1790],{"class":90}," grep",[84,1792,1793],{"class":728}," -i",[84,1795,1796],{"class":94}," xacro\n",[14,1798,1799],{},[17,1800],{"alt":19,"src":1801},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1405.webp",[14,1803,1804],{},"如果打印了xacro说明安装了，如果没打印，则要手动安装",[76,1806,1808],{"className":78,"code":1807,"language":80,"meta":19,"style":19},"sudo apt-get update\nsudo apt-get install ros-humble-xacro\n",[71,1809,1810,1820],{"__ignoreMap":19},[84,1811,1812,1814,1817],{"class":86,"line":87},[84,1813,91],{"class":90},[84,1815,1816],{"class":94}," apt-get",[84,1818,1819],{"class":94}," update\n",[84,1821,1822,1824,1826,1828],{"class":86,"line":636},[84,1823,91],{"class":90},[84,1825,1816],{"class":94},[84,1827,98],{"class":94},[84,1829,1830],{"class":94}," ros-humble-xacro\n",[14,1832,1833],{},"使用xacro读取文件",[14,1835,1836],{},[17,1837],{"alt":19,"src":1838},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1406.webp",[14,1840,1841],{},"文件里的内容被输出到了终端，咱们一般集成到launch文件中。咱们在终端里是只能查看内容，但是用launch就可以把文件弄到节点里，也就是集成到ROS2里。",[645,1843,1845],{"id":1844},"launch核心实现","  launch核心实现",[14,1847,1848],{},"核心实现就三步，加载机器人模型，节点发布非固定关节的状态，启动rviz2节点",[14,1850,1851],{},[17,1852],{"alt":19,"src":1853},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1407.webp",[14,1855,1856],{},"创建rviz2节点很简单，就声明下包名，声明下executable。",[14,1858,1859],{},"加载机器人模型比较复杂，加载机器人模型，也要创建一个节点，",[14,1861,1862],{},"然后有参数，参数里有个键叫robot_description，然后这个键对应一个值",[14,1864,1865],{},"值是ParameterValue对象，这个对象里执行了一个指令，叫xacro，然后后面又有一个Launch配置，其实就是urdf文件的路径。",[14,1867,1868],{},[17,1869],{"alt":19,"src":1870},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1408.webp",[14,1872,1873],{},[17,1874],{"alt":19,"src":1875},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1409.webp",[14,1877,1878],{},[17,1879],{"alt":19,"src":1880},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1410.webp",[14,1882,1883],{},[17,1884],{"alt":19,"src":1885},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1411.webp",[14,1887,1888],{},"这个值，其实就是URDF文件里的内容，但是内容太长了，所以我们把它封装成一个对象。",[14,1890,1891],{},[17,1892],{"alt":19,"src":1893},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1412.webp",[14,1895,1896],{},[17,1897],{"alt":19,"src":1898},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1413.webp",[14,1900,1901],{},"命令行，不能直接当对象参数值，所以还要封装",[14,1903,1904],{},[17,1905],{"alt":19,"src":1906},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1414.webp",[14,1908,1909],{},"Comand是专门封装终端指令执行的",[14,1911,1912,1915],{},[17,1913],{"alt":19,"src":1914},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1415.webp",[17,1916],{"alt":19,"src":1917},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1416.webp",[14,1919,1920],{},"记得xacro后面要有空格，这里填路径",[14,1922,1923],{},[17,1924],{"alt":19,"src":1925},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1417.webp",[14,1927,1928],{},[17,1929],{"alt":19,"src":1930},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1418.webp",[14,1932,1933],{},"此时已经定位到cpp06_urdf的share路径下的cpp06_urdf路径了，返回的也就是该路径的字符串",[14,1935,1936],{},[17,1937],{"alt":19,"src":1938},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1419.webp",[14,1940,1941],{},[17,1942],{"alt":19,"src":1943},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1420.webp",[14,1945,1946],{},[17,1947],{"alt":19,"src":1948},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1421.webp",[76,1950,1952],{"className":902,"code":1951,"language":904,"meta":19,"style":19},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\n\n# from launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\n\n# from launch.actions import DeclareLaunchArgument\n\n# from launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\n\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command\n\np_value = ParameterValue(Command([\"xacro \",get_package_share_directory(\"cpp06_urdf\") + \"/urdf/urdf/demo01_boxrobot.urdf\"]))\nrobot_state_pub = Node(\n    package=\"robot_state_publisher\",\n    executable=\"robot_state_publisher\",\n    parameters=[{\"robot_description\":p_value}]\n)\n\nrviz2 = Node(\n    package=\"rviz2\",\n    executable=\"rviz2\"\n    )\n\ndef generate_launch_description():\n    return LaunchDescription([robot_state_pub,rviz2])\n",[71,1953,1954,1964,1974,1978,1983,1987,1992,1996,2001,2005,2010,2014,2019,2023,2028,2032,2037,2041,2046,2050,2055,2059,2064,2068,2073,2077,2082,2086,2091,2095,2100,2104,2109,2113,2118,2128,2132,2142,2153,2157,2185,2194,2205,2216,2230,2234,2239,2249,2260,2269,2274,2279,2288],{"__ignoreMap":19},[84,1955,1956,1958,1960,1962],{"class":86,"line":87},[84,1957,912],{"class":911},[84,1959,915],{"class":782},[84,1961,918],{"class":911},[84,1963,921],{"class":782},[84,1965,1966,1968,1970,1972],{"class":86,"line":636},[84,1967,912],{"class":911},[84,1969,928],{"class":782},[84,1971,918],{"class":911},[84,1973,933],{"class":782},[84,1975,1976],{"class":86,"line":793},[84,1977,777],{"emptyLinePlaceholder":776},[84,1979,1980],{"class":86,"line":805},[84,1981,1982],{"class":997},"# 封装终端指令相关类\n",[84,1984,1985],{"class":86,"line":817},[84,1986,777],{"emptyLinePlaceholder":776},[84,1988,1989],{"class":86,"line":828},[84,1990,1991],{"class":997},"# from launch.actions import ExecuteProcess\n",[84,1993,1994],{"class":86,"line":849},[84,1995,777],{"emptyLinePlaceholder":776},[84,1997,1998],{"class":86,"line":859},[84,1999,2000],{"class":997},"# from launch.substitutions import FindExecutable\n",[84,2002,2003],{"class":86,"line":869},[84,2004,777],{"emptyLinePlaceholder":776},[84,2006,2007],{"class":86,"line":879},[84,2008,2009],{"class":997},"# 参数声明与获取\n",[84,2011,2012],{"class":86,"line":1012},[84,2013,777],{"emptyLinePlaceholder":776},[84,2015,2016],{"class":86,"line":1017},[84,2017,2018],{"class":997},"# from launch.actions import DeclareLaunchArgument\n",[84,2020,2021],{"class":86,"line":1034},[84,2022,777],{"emptyLinePlaceholder":776},[84,2024,2025],{"class":86,"line":1056},[84,2026,2027],{"class":997},"# from launch.substitutions import LaunchConfiguration\n",[84,2029,2030],{"class":86,"line":1076},[84,2031,777],{"emptyLinePlaceholder":776},[84,2033,2034],{"class":86,"line":1107},[84,2035,2036],{"class":997},"# 文件包含相关\n",[84,2038,2039],{"class":86,"line":1112},[84,2040,777],{"emptyLinePlaceholder":776},[84,2042,2043],{"class":86,"line":1118},[84,2044,2045],{"class":997},"# from launch.actions import IncludeLaunchDescription\n",[84,2047,2048],{"class":86,"line":1123},[84,2049,777],{"emptyLinePlaceholder":776},[84,2051,2052],{"class":86,"line":1129},[84,2053,2054],{"class":997},"# from launch.launch_description_sources import PythonLaunchDescriptionSource\n",[84,2056,2057],{"class":86,"line":1151},[84,2058,777],{"emptyLinePlaceholder":776},[84,2060,2061],{"class":86,"line":1162},[84,2062,2063],{"class":997},"# 分组相关\n",[84,2065,2066],{"class":86,"line":1176},[84,2067,777],{"emptyLinePlaceholder":776},[84,2069,2070],{"class":86,"line":1188},[84,2071,2072],{"class":997},"# from launch_ros.actions import PushRosNamespace\n",[84,2074,2075],{"class":86,"line":1205},[84,2076,777],{"emptyLinePlaceholder":776},[84,2078,2079],{"class":86,"line":1211},[84,2080,2081],{"class":997},"# from launch.actions import GroupAction\n",[84,2083,2084],{"class":86,"line":1216},[84,2085,777],{"emptyLinePlaceholder":776},[84,2087,2088],{"class":86,"line":1222},[84,2089,2090],{"class":997},"# 事件相关\n",[84,2092,2093],{"class":86,"line":1232},[84,2094,777],{"emptyLinePlaceholder":776},[84,2096,2097],{"class":86,"line":1244},[84,2098,2099],{"class":997},"# from launch.event_handlers import OnProcessStart,OnProcessExit\n",[84,2101,2102],{"class":86,"line":1254},[84,2103,777],{"emptyLinePlaceholder":776},[84,2105,2106],{"class":86,"line":1259},[84,2107,2108],{"class":997},"# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n",[84,2110,2111],{"class":86,"line":1264},[84,2112,777],{"emptyLinePlaceholder":776},[84,2114,2115],{"class":86,"line":1270},[84,2116,2117],{"class":997},"# 获取功能包下share目录或路径\n",[84,2119,2120,2122,2124,2126],{"class":86,"line":1280},[84,2121,912],{"class":911},[84,2123,947],{"class":782},[84,2125,918],{"class":911},[84,2127,952],{"class":782},[84,2129,2130],{"class":86,"line":1292},[84,2131,777],{"emptyLinePlaceholder":776},[84,2133,2134,2136,2138,2140],{"class":86,"line":1302},[84,2135,912],{"class":911},[84,2137,959],{"class":782},[84,2139,918],{"class":911},[84,2141,964],{"class":782},[84,2143,2144,2146,2148,2150],{"class":86,"line":1307},[84,2145,912],{"class":911},[84,2147,971],{"class":782},[84,2149,918],{"class":911},[84,2151,2152],{"class":782}," Command\n",[84,2154,2155],{"class":86,"line":1313},[84,2156,777],{"emptyLinePlaceholder":776},[84,2158,2159,2162,2164,2166,2168,2171,2173,2176,2179,2182],{"class":86,"line":1318},[84,2160,2161],{"class":782},"p_value ",[84,2163,840],{"class":911},[84,2165,1137],{"class":782},[84,2167,1140],{"class":94},[84,2169,2170],{"class":782},",get_package_share_directory(",[84,2172,1028],{"class":94},[84,2174,2175],{"class":782},") ",[84,2177,2178],{"class":911},"+",[84,2180,2181],{"class":94}," \"/urdf/urdf/demo01_boxrobot.urdf\"",[84,2183,2184],{"class":782},"]))\n",[84,2186,2187,2190,2192],{"class":86,"line":1327},[84,2188,2189],{"class":782},"robot_state_pub ",[84,2191,840],{"class":911},[84,2193,1159],{"class":782},[84,2195,2196,2199,2201,2203],{"class":86,"line":1333},[84,2197,2198],{"class":1087},"    package",[84,2200,840],{"class":911},[84,2202,1170],{"class":94},[84,2204,1173],{"class":782},[84,2206,2207,2210,2212,2214],{"class":86,"line":1339},[84,2208,2209],{"class":1087},"    executable",[84,2211,840],{"class":911},[84,2213,1170],{"class":94},[84,2215,1173],{"class":782},[84,2217,2218,2221,2223,2225,2227],{"class":86,"line":1345},[84,2219,2220],{"class":1087},"    parameters",[84,2222,840],{"class":911},[84,2224,1196],{"class":782},[84,2226,1199],{"class":94},[84,2228,2229],{"class":782},":p_value}]\n",[84,2231,2232],{"class":86,"line":1351},[84,2233,1031],{"class":782},[84,2235,2237],{"class":86,"line":2236},46,[84,2238,777],{"emptyLinePlaceholder":776},[84,2240,2242,2245,2247],{"class":86,"line":2241},47,[84,2243,2244],{"class":782},"rviz2 ",[84,2246,840],{"class":911},[84,2248,1159],{"class":782},[84,2250,2252,2254,2256,2258],{"class":86,"line":2251},48,[84,2253,2198],{"class":1087},[84,2255,840],{"class":911},[84,2257,1287],{"class":94},[84,2259,1173],{"class":782},[84,2261,2263,2265,2267],{"class":86,"line":2262},49,[84,2264,2209],{"class":1087},[84,2266,840],{"class":911},[84,2268,1299],{"class":94},[84,2270,2272],{"class":86,"line":2271},50,[84,2273,1208],{"class":782},[84,2275,2277],{"class":86,"line":2276},51,[84,2278,777],{"emptyLinePlaceholder":776},[84,2280,2282,2284,2286],{"class":86,"line":2281},52,[84,2283,1003],{"class":911},[84,2285,1006],{"class":90},[84,2287,1009],{"class":782},[84,2289,2291,2293],{"class":86,"line":2290},53,[84,2292,1321],{"class":911},[84,2294,2295],{"class":782}," LaunchDescription([robot_state_pub,rviz2])\n",[14,2297,2298],{},[17,2299],{"alt":19,"src":2300},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1422.webp",[14,2302,2303],{},[17,2304],{"alt":19,"src":2305},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1423.webp",[14,2307,2308],{},[17,2309],{"alt":19,"src":2310},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1424.webp",[14,2312,2313],{},[17,2314],{"alt":19,"src":2315},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1425.webp",[14,2317,2318],{},"点击左下角Add添加RobotModel插件",[14,2320,2321],{},[17,2322],{"alt":19,"src":2323},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1426.webp",[14,2325,2326],{},[17,2327],{"alt":19,"src":2328},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1427.webp",[14,2330,2331,2334],{},[17,2332],{"alt":19,"src":2333},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1428.webp",[17,2335],{"alt":19,"src":2336},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1429.webp",[14,2338,2339],{},[17,2340],{"alt":19,"src":2341},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1430.webp",[14,2343,2344,2347],{},[17,2345],{"alt":19,"src":2346},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1431.webp",[17,2348],{"alt":19,"src":2349},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1432.webp",[14,2351,2352],{},"新建一个坐标系插件，长沿着X，宽沿着Y，高沿着Z",[645,2354,2356],{"id":2355},"launch优化说明与实现","  launch优化说明与实现",[14,2358,2359],{},"我们还需要优化三个点，第一个是打开关节节点，第二是设置rviz2默认配置文件，第三是Launch文件中我们将读取的urdf文件写死了，所以要优化结构。",[14,2361,2362],{},[17,2363],{"alt":19,"src":2364},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1433.webp",[14,2366,2367],{},"还要启动这个节点，来控制关节运动，可以改成joint_state_publisher_gui，出现图形化界面。",[14,2369,2370],{},[17,2371],{"alt":19,"src":2372},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1434.webp",[14,2374,2375],{},[17,2376],{"alt":19,"src":2377},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1435.webp",[14,2379,2380],{},[17,2381],{"alt":19,"src":2382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1436.webp",[14,2384,2385],{},[17,2386],{"alt":19,"src":2387},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1437.webp",[14,2389,2390],{},[17,2391],{"alt":19,"src":2392},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1438.webp",[14,2394,2395],{},"保存一下rviz2的配置",[14,2397,2398],{},[17,2399],{"alt":19,"src":2400},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1439.webp",[14,2402,2403],{},"正常的指令是",[76,2405,2407],{"className":78,"code":2406,"language":80,"meta":19,"style":19},"ros2 run rviz2 rviz2 -d rviz2配置的路径\n",[71,2408,2409],{"__ignoreMap":19},[84,2410,2411,2413,2416,2419,2421,2424],{"class":86,"line":87},[84,2412,716],{"class":90},[84,2414,2415],{"class":94}," run",[84,2417,2418],{"class":94}," rviz2",[84,2420,2418],{"class":94},[84,2422,2423],{"class":728}," -d",[84,2425,2426],{"class":94}," rviz2配置的路径\n",[14,2428,2429],{},[17,2430],{"alt":19,"src":2431},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1440.webp",[14,2433,2434],{},[17,2435],{"alt":19,"src":2436},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1441.webp",[14,2438,2439],{},[17,2440],{"alt":19,"src":2441},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1442.webp",[14,2443,2444],{},"创建一个参数叫model，值是后面那一长串。",[14,2446,2447],{},[17,2448],{"alt":19,"src":2449},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1443.webp",[14,2451,2452],{},"LaunchConfiguration是解析参数",[14,2454,2455],{},[17,2456],{"alt":19,"src":2457},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1444.webp",[14,2459,2460],{},"记得要把model放在最前面，放在后面是不可以的，现在已经把路径封装完毕了。",[14,2462,2463],{},"现在启动是正常启动默认的urdf路径。",[14,2465,2466],{},[17,2467],{"alt":19,"src":2468},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1445.webp",[14,2470,2471],{},"解析非默认值的urdf，在终端里也有类似于get_package_share_directory，以下就是(这里参数model少写了个L)要把参数值用反引号(ESC与TAB中间的按键)框起来。",[14,2473,2474],{},[17,2475],{"alt":19,"src":2476},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1446.webp",[76,2478,2480],{"className":78,"code":2479,"language":80,"meta":19,"style":19},"ros2 pkg prefix --share cpp06_urdf\n\nros2 run launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/hahah.urdf\n",[71,2481,2482,2496,2500],{"__ignoreMap":19},[84,2483,2484,2486,2488,2491,2494],{"class":86,"line":87},[84,2485,716],{"class":90},[84,2487,719],{"class":94},[84,2489,2490],{"class":94}," prefix",[84,2492,2493],{"class":728}," --share",[84,2495,1495],{"class":94},[84,2497,2498],{"class":86,"line":636},[84,2499,777],{"emptyLinePlaceholder":776},[84,2501,2502,2504,2506,2508,2510,2513,2516,2518,2521,2524,2527],{"class":86,"line":793},[84,2503,716],{"class":90},[84,2505,2415],{"class":94},[84,2507,1520],{"class":94},[84,2509,725],{"class":94},[84,2511,2512],{"class":94}," display.launch.py",[84,2514,2515],{"class":94}," model:=`",[84,2517,716],{"class":90},[84,2519,2520],{"class":94}," pkg prefix ",[84,2522,2523],{"class":728},"--share",[84,2525,2526],{"class":94}," cpp06_urdf`",[84,2528,2529],{"class":90},"/urdf/urdf/hahah.urdf\n",[14,2531,2532],{},[17,2533],{"alt":19,"src":2534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1447.webp",[14,2536,2537],{},[17,2538],{"alt":19,"src":2539},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1448.webp",[14,2541,2542],{},[17,2543],{"alt":19,"src":2544},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1449.webp",[76,2546,2548],{"className":902,"code":2547,"language":904,"meta":19,"style":19},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\n\n# from launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\nfrom launch.actions import DeclareLaunchArgument\nfrom launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\n\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command\n\nmodel = DeclareLaunchArgument(name=\"model\",default_value=get_package_share_directory(\"cpp06_urdf\") + \"/urdf/urdf/demo01_boxrobot.urdf\")\n\np_value = ParameterValue(Command([\"xacro \",LaunchConfiguration(\"model\")]))\nrobot_state_pub = Node(\n    package=\"robot_state_publisher\",\n    executable=\"robot_state_publisher\",\n    parameters=[{\"robot_description\":p_value}]\n)\n\njoint_state_pub = Node(\n    package=\"joint_state_publisher\",\n    executable=\"joint_state_publisher\"\n    )\n\nrviz2 = Node(\n    package=\"rviz2\",\n    executable=\"rviz2\",\n    arguments=[\"-d\",get_package_share_directory(\"cpp06_urdf\") + \"/rviz/urdf.rviz\"]\n    )\n\ndef generate_launch_description():\n    return LaunchDescription([model,robot_state_pub,joint_state_pub,rviz2])\n",[71,2549,2550,2560,2570,2574,2578,2582,2586,2590,2594,2598,2602,2612,2623,2627,2631,2635,2639,2643,2647,2651,2655,2659,2663,2667,2671,2675,2679,2683,2687,2691,2695,2699,2703,2713,2717,2727,2737,2741,2775,2779,2795,2803,2813,2823,2835,2839,2843,2852,2862,2870,2874,2878,2886,2896,2907,2935,2940,2945,2954],{"__ignoreMap":19},[84,2551,2552,2554,2556,2558],{"class":86,"line":87},[84,2553,912],{"class":911},[84,2555,915],{"class":782},[84,2557,918],{"class":911},[84,2559,921],{"class":782},[84,2561,2562,2564,2566,2568],{"class":86,"line":636},[84,2563,912],{"class":911},[84,2565,928],{"class":782},[84,2567,918],{"class":911},[84,2569,933],{"class":782},[84,2571,2572],{"class":86,"line":793},[84,2573,777],{"emptyLinePlaceholder":776},[84,2575,2576],{"class":86,"line":805},[84,2577,1982],{"class":997},[84,2579,2580],{"class":86,"line":817},[84,2581,777],{"emptyLinePlaceholder":776},[84,2583,2584],{"class":86,"line":828},[84,2585,1991],{"class":997},[84,2587,2588],{"class":86,"line":849},[84,2589,777],{"emptyLinePlaceholder":776},[84,2591,2592],{"class":86,"line":859},[84,2593,2000],{"class":997},[84,2595,2596],{"class":86,"line":869},[84,2597,777],{"emptyLinePlaceholder":776},[84,2599,2600],{"class":86,"line":879},[84,2601,2009],{"class":997},[84,2603,2604,2606,2608,2610],{"class":86,"line":1012},[84,2605,912],{"class":911},[84,2607,983],{"class":782},[84,2609,918],{"class":911},[84,2611,988],{"class":782},[84,2613,2614,2616,2618,2620],{"class":86,"line":1017},[84,2615,912],{"class":911},[84,2617,971],{"class":782},[84,2619,918],{"class":911},[84,2621,2622],{"class":782}," LaunchConfiguration\n",[84,2624,2625],{"class":86,"line":1034},[84,2626,777],{"emptyLinePlaceholder":776},[84,2628,2629],{"class":86,"line":1056},[84,2630,2036],{"class":997},[84,2632,2633],{"class":86,"line":1076},[84,2634,777],{"emptyLinePlaceholder":776},[84,2636,2637],{"class":86,"line":1107},[84,2638,2045],{"class":997},[84,2640,2641],{"class":86,"line":1112},[84,2642,777],{"emptyLinePlaceholder":776},[84,2644,2645],{"class":86,"line":1118},[84,2646,2054],{"class":997},[84,2648,2649],{"class":86,"line":1123},[84,2650,777],{"emptyLinePlaceholder":776},[84,2652,2653],{"class":86,"line":1129},[84,2654,2063],{"class":997},[84,2656,2657],{"class":86,"line":1151},[84,2658,777],{"emptyLinePlaceholder":776},[84,2660,2661],{"class":86,"line":1162},[84,2662,2072],{"class":997},[84,2664,2665],{"class":86,"line":1176},[84,2666,777],{"emptyLinePlaceholder":776},[84,2668,2669],{"class":86,"line":1188},[84,2670,2081],{"class":997},[84,2672,2673],{"class":86,"line":1205},[84,2674,777],{"emptyLinePlaceholder":776},[84,2676,2677],{"class":86,"line":1211},[84,2678,2090],{"class":997},[84,2680,2681],{"class":86,"line":1216},[84,2682,777],{"emptyLinePlaceholder":776},[84,2684,2685],{"class":86,"line":1222},[84,2686,2099],{"class":997},[84,2688,2689],{"class":86,"line":1232},[84,2690,777],{"emptyLinePlaceholder":776},[84,2692,2693],{"class":86,"line":1244},[84,2694,2108],{"class":997},[84,2696,2697],{"class":86,"line":1254},[84,2698,777],{"emptyLinePlaceholder":776},[84,2700,2701],{"class":86,"line":1259},[84,2702,2117],{"class":997},[84,2704,2705,2707,2709,2711],{"class":86,"line":1264},[84,2706,912],{"class":911},[84,2708,947],{"class":782},[84,2710,918],{"class":911},[84,2712,952],{"class":782},[84,2714,2715],{"class":86,"line":1270},[84,2716,777],{"emptyLinePlaceholder":776},[84,2718,2719,2721,2723,2725],{"class":86,"line":1280},[84,2720,912],{"class":911},[84,2722,959],{"class":782},[84,2724,918],{"class":911},[84,2726,964],{"class":782},[84,2728,2729,2731,2733,2735],{"class":86,"line":1292},[84,2730,912],{"class":911},[84,2732,971],{"class":782},[84,2734,918],{"class":911},[84,2736,2152],{"class":782},[84,2738,2739],{"class":86,"line":1302},[84,2740,777],{"emptyLinePlaceholder":776},[84,2742,2743,2746,2748,2750,2752,2754,2756,2758,2760,2762,2765,2767,2769,2771,2773],{"class":86,"line":1307},[84,2744,2745],{"class":782},"model ",[84,2747,840],{"class":911},[84,2749,1084],{"class":782},[84,2751,1088],{"class":1087},[84,2753,840],{"class":911},[84,2755,1093],{"class":94},[84,2757,1048],{"class":782},[84,2759,1099],{"class":1087},[84,2761,840],{"class":911},[84,2763,2764],{"class":782},"get_package_share_directory(",[84,2766,1028],{"class":94},[84,2768,2175],{"class":782},[84,2770,2178],{"class":911},[84,2772,2181],{"class":94},[84,2774,1031],{"class":782},[84,2776,2777],{"class":86,"line":1313},[84,2778,777],{"emptyLinePlaceholder":776},[84,2780,2781,2783,2785,2787,2789,2791,2793],{"class":86,"line":1318},[84,2782,2161],{"class":782},[84,2784,840],{"class":911},[84,2786,1137],{"class":782},[84,2788,1140],{"class":94},[84,2790,1143],{"class":782},[84,2792,1093],{"class":94},[84,2794,1148],{"class":782},[84,2796,2797,2799,2801],{"class":86,"line":1327},[84,2798,2189],{"class":782},[84,2800,840],{"class":911},[84,2802,1159],{"class":782},[84,2804,2805,2807,2809,2811],{"class":86,"line":1333},[84,2806,2198],{"class":1087},[84,2808,840],{"class":911},[84,2810,1170],{"class":94},[84,2812,1173],{"class":782},[84,2814,2815,2817,2819,2821],{"class":86,"line":1339},[84,2816,2209],{"class":1087},[84,2818,840],{"class":911},[84,2820,1170],{"class":94},[84,2822,1173],{"class":782},[84,2824,2825,2827,2829,2831,2833],{"class":86,"line":1345},[84,2826,2220],{"class":1087},[84,2828,840],{"class":911},[84,2830,1196],{"class":782},[84,2832,1199],{"class":94},[84,2834,2229],{"class":782},[84,2836,2837],{"class":86,"line":1351},[84,2838,1031],{"class":782},[84,2840,2841],{"class":86,"line":2236},[84,2842,777],{"emptyLinePlaceholder":776},[84,2844,2845,2848,2850],{"class":86,"line":2241},[84,2846,2847],{"class":782},"joint_state_pub ",[84,2849,840],{"class":911},[84,2851,1159],{"class":782},[84,2853,2854,2856,2858,2860],{"class":86,"line":2251},[84,2855,2198],{"class":1087},[84,2857,840],{"class":911},[84,2859,1239],{"class":94},[84,2861,1173],{"class":782},[84,2863,2864,2866,2868],{"class":86,"line":2262},[84,2865,2209],{"class":1087},[84,2867,840],{"class":911},[84,2869,1251],{"class":94},[84,2871,2872],{"class":86,"line":2271},[84,2873,1208],{"class":782},[84,2875,2876],{"class":86,"line":2276},[84,2877,777],{"emptyLinePlaceholder":776},[84,2879,2880,2882,2884],{"class":86,"line":2281},[84,2881,2244],{"class":782},[84,2883,840],{"class":911},[84,2885,1159],{"class":782},[84,2887,2888,2890,2892,2894],{"class":86,"line":2290},[84,2889,2198],{"class":1087},[84,2891,840],{"class":911},[84,2893,1287],{"class":94},[84,2895,1173],{"class":782},[84,2897,2899,2901,2903,2905],{"class":86,"line":2898},54,[84,2900,2209],{"class":1087},[84,2902,840],{"class":911},[84,2904,1287],{"class":94},[84,2906,1173],{"class":782},[84,2908,2910,2913,2915,2918,2921,2923,2925,2927,2929,2932],{"class":86,"line":2909},55,[84,2911,2912],{"class":1087},"    arguments",[84,2914,840],{"class":911},[84,2916,2917],{"class":782},"[",[84,2919,2920],{"class":94},"\"-d\"",[84,2922,2170],{"class":782},[84,2924,1028],{"class":94},[84,2926,2175],{"class":782},[84,2928,2178],{"class":911},[84,2930,2931],{"class":94}," \"/rviz/urdf.rviz\"",[84,2933,2934],{"class":782},"]\n",[84,2936,2938],{"class":86,"line":2937},56,[84,2939,1208],{"class":782},[84,2941,2943],{"class":86,"line":2942},57,[84,2944,777],{"emptyLinePlaceholder":776},[84,2946,2948,2950,2952],{"class":86,"line":2947},58,[84,2949,1003],{"class":911},[84,2951,1006],{"class":90},[84,2953,1009],{"class":782},[84,2955,2957,2959],{"class":86,"line":2956},59,[84,2958,1321],{"class":911},[84,2960,2961],{"class":782}," LaunchDescription([model,robot_state_pub,joint_state_pub,rviz2])\n",[14,2963,2964],{},"继续优化最终的代码为：",[76,2966,2968],{"className":902,"code":2967,"language":904,"meta":19,"style":19},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\n\n# from launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\nfrom launch.actions import DeclareLaunchArgument\nfrom launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\n\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command\n\nimport os\n\ncpp06_urdf_dir = get_package_share_directory(\"cpp06_urdf\")\n\ndefault_model_path = os.path.join(cpp06_urdf_dir,\"urdf/urdf\",\"demo01_boxrobot.urdf\")\ndefault_rviz_path = os.path.join(cpp06_urdf_dir,\"rviz\",\"urdf.rviz\")\n\nmodel = DeclareLaunchArgument(name=\"model\",default_value=default_model_path)\n\np_value = ParameterValue(Command([\"xacro \",LaunchConfiguration(\"model\")]))\nrobot_state_pub = Node(\n    package=\"robot_state_publisher\",\n    executable=\"robot_state_publisher\",\n    parameters=[{\"robot_description\":p_value}]\n)\n\n# 关节信息节点\n\n# joint_state_pub = Node(\n\n#     package=\"joint_state_publisher\",\n\n#     executable=\"joint_state_publisher\"\n\n# )\n\n# 关节信息节点图形界面(建议)\njoint_state_pub = Node(\n    package=\"joint_state_publisher_gui\",\n    executable=\"joint_state_publisher_gui\"\n)\n\nrviz2 = Node(\n    package=\"rviz2\",\n    executable=\"rviz2\",\n\n#    arguments=[\"-d\",get_package_share_directory(\"cpp06_urdf\") + \"/rviz/urdf.rviz\"]\n    arguments=[\"-d\",default_rviz_path]\n\n    )\n\ndef generate_launch_description():\n    return LaunchDescription([model,robot_state_pub,joint_state_pub,rviz2])\n",[71,2969,2970,2980,2990,2994,2998,3002,3006,3010,3014,3018,3022,3032,3042,3046,3050,3054,3058,3062,3066,3070,3074,3078,3082,3086,3090,3094,3098,3102,3106,3110,3114,3118,3122,3132,3136,3146,3156,3160,3166,3170,3183,3187,3205,3223,3227,3249,3253,3269,3277,3287,3297,3309,3313,3317,3322,3326,3331,3335,3340,3344,3350,3355,3361,3366,3372,3381,3393,3403,3408,3413,3422,3433,3444,3449,3455,3469,3474,3479,3484,3493],{"__ignoreMap":19},[84,2971,2972,2974,2976,2978],{"class":86,"line":87},[84,2973,912],{"class":911},[84,2975,915],{"class":782},[84,2977,918],{"class":911},[84,2979,921],{"class":782},[84,2981,2982,2984,2986,2988],{"class":86,"line":636},[84,2983,912],{"class":911},[84,2985,928],{"class":782},[84,2987,918],{"class":911},[84,2989,933],{"class":782},[84,2991,2992],{"class":86,"line":793},[84,2993,777],{"emptyLinePlaceholder":776},[84,2995,2996],{"class":86,"line":805},[84,2997,1982],{"class":997},[84,2999,3000],{"class":86,"line":817},[84,3001,777],{"emptyLinePlaceholder":776},[84,3003,3004],{"class":86,"line":828},[84,3005,1991],{"class":997},[84,3007,3008],{"class":86,"line":849},[84,3009,777],{"emptyLinePlaceholder":776},[84,3011,3012],{"class":86,"line":859},[84,3013,2000],{"class":997},[84,3015,3016],{"class":86,"line":869},[84,3017,777],{"emptyLinePlaceholder":776},[84,3019,3020],{"class":86,"line":879},[84,3021,2009],{"class":997},[84,3023,3024,3026,3028,3030],{"class":86,"line":1012},[84,3025,912],{"class":911},[84,3027,983],{"class":782},[84,3029,918],{"class":911},[84,3031,988],{"class":782},[84,3033,3034,3036,3038,3040],{"class":86,"line":1017},[84,3035,912],{"class":911},[84,3037,971],{"class":782},[84,3039,918],{"class":911},[84,3041,2622],{"class":782},[84,3043,3044],{"class":86,"line":1034},[84,3045,777],{"emptyLinePlaceholder":776},[84,3047,3048],{"class":86,"line":1056},[84,3049,2036],{"class":997},[84,3051,3052],{"class":86,"line":1076},[84,3053,777],{"emptyLinePlaceholder":776},[84,3055,3056],{"class":86,"line":1107},[84,3057,2045],{"class":997},[84,3059,3060],{"class":86,"line":1112},[84,3061,777],{"emptyLinePlaceholder":776},[84,3063,3064],{"class":86,"line":1118},[84,3065,2054],{"class":997},[84,3067,3068],{"class":86,"line":1123},[84,3069,777],{"emptyLinePlaceholder":776},[84,3071,3072],{"class":86,"line":1129},[84,3073,2063],{"class":997},[84,3075,3076],{"class":86,"line":1151},[84,3077,777],{"emptyLinePlaceholder":776},[84,3079,3080],{"class":86,"line":1162},[84,3081,2072],{"class":997},[84,3083,3084],{"class":86,"line":1176},[84,3085,777],{"emptyLinePlaceholder":776},[84,3087,3088],{"class":86,"line":1188},[84,3089,2081],{"class":997},[84,3091,3092],{"class":86,"line":1205},[84,3093,777],{"emptyLinePlaceholder":776},[84,3095,3096],{"class":86,"line":1211},[84,3097,2090],{"class":997},[84,3099,3100],{"class":86,"line":1216},[84,3101,777],{"emptyLinePlaceholder":776},[84,3103,3104],{"class":86,"line":1222},[84,3105,2099],{"class":997},[84,3107,3108],{"class":86,"line":1232},[84,3109,777],{"emptyLinePlaceholder":776},[84,3111,3112],{"class":86,"line":1244},[84,3113,2108],{"class":997},[84,3115,3116],{"class":86,"line":1254},[84,3117,777],{"emptyLinePlaceholder":776},[84,3119,3120],{"class":86,"line":1259},[84,3121,2117],{"class":997},[84,3123,3124,3126,3128,3130],{"class":86,"line":1264},[84,3125,912],{"class":911},[84,3127,947],{"class":782},[84,3129,918],{"class":911},[84,3131,952],{"class":782},[84,3133,3134],{"class":86,"line":1270},[84,3135,777],{"emptyLinePlaceholder":776},[84,3137,3138,3140,3142,3144],{"class":86,"line":1280},[84,3139,912],{"class":911},[84,3141,959],{"class":782},[84,3143,918],{"class":911},[84,3145,964],{"class":782},[84,3147,3148,3150,3152,3154],{"class":86,"line":1292},[84,3149,912],{"class":911},[84,3151,971],{"class":782},[84,3153,918],{"class":911},[84,3155,2152],{"class":782},[84,3157,3158],{"class":86,"line":1302},[84,3159,777],{"emptyLinePlaceholder":776},[84,3161,3162,3164],{"class":86,"line":1307},[84,3163,918],{"class":911},[84,3165,940],{"class":782},[84,3167,3168],{"class":86,"line":1313},[84,3169,777],{"emptyLinePlaceholder":776},[84,3171,3172,3175,3177,3179,3181],{"class":86,"line":1318},[84,3173,3174],{"class":782},"cpp06_urdf_dir ",[84,3176,840],{"class":911},[84,3178,1025],{"class":782},[84,3180,1028],{"class":94},[84,3182,1031],{"class":782},[84,3184,3185],{"class":86,"line":1327},[84,3186,777],{"emptyLinePlaceholder":776},[84,3188,3189,3192,3194,3196,3198,3200,3203],{"class":86,"line":1333},[84,3190,3191],{"class":782},"default_model_path ",[84,3193,840],{"class":911},[84,3195,1042],{"class":782},[84,3197,1045],{"class":94},[84,3199,1048],{"class":782},[84,3201,3202],{"class":94},"\"demo01_boxrobot.urdf\"",[84,3204,1031],{"class":782},[84,3206,3207,3210,3212,3214,3216,3218,3221],{"class":86,"line":1339},[84,3208,3209],{"class":782},"default_rviz_path ",[84,3211,840],{"class":911},[84,3213,1042],{"class":782},[84,3215,1066],{"class":94},[84,3217,1048],{"class":782},[84,3219,3220],{"class":94},"\"urdf.rviz\"",[84,3222,1031],{"class":782},[84,3224,3225],{"class":86,"line":1345},[84,3226,777],{"emptyLinePlaceholder":776},[84,3228,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247],{"class":86,"line":1351},[84,3230,2745],{"class":782},[84,3232,840],{"class":911},[84,3234,1084],{"class":782},[84,3236,1088],{"class":1087},[84,3238,840],{"class":911},[84,3240,1093],{"class":94},[84,3242,1048],{"class":782},[84,3244,1099],{"class":1087},[84,3246,840],{"class":911},[84,3248,1104],{"class":782},[84,3250,3251],{"class":86,"line":2236},[84,3252,777],{"emptyLinePlaceholder":776},[84,3254,3255,3257,3259,3261,3263,3265,3267],{"class":86,"line":2241},[84,3256,2161],{"class":782},[84,3258,840],{"class":911},[84,3260,1137],{"class":782},[84,3262,1140],{"class":94},[84,3264,1143],{"class":782},[84,3266,1093],{"class":94},[84,3268,1148],{"class":782},[84,3270,3271,3273,3275],{"class":86,"line":2251},[84,3272,2189],{"class":782},[84,3274,840],{"class":911},[84,3276,1159],{"class":782},[84,3278,3279,3281,3283,3285],{"class":86,"line":2262},[84,3280,2198],{"class":1087},[84,3282,840],{"class":911},[84,3284,1170],{"class":94},[84,3286,1173],{"class":782},[84,3288,3289,3291,3293,3295],{"class":86,"line":2271},[84,3290,2209],{"class":1087},[84,3292,840],{"class":911},[84,3294,1170],{"class":94},[84,3296,1173],{"class":782},[84,3298,3299,3301,3303,3305,3307],{"class":86,"line":2276},[84,3300,2220],{"class":1087},[84,3302,840],{"class":911},[84,3304,1196],{"class":782},[84,3306,1199],{"class":94},[84,3308,2229],{"class":782},[84,3310,3311],{"class":86,"line":2281},[84,3312,1031],{"class":782},[84,3314,3315],{"class":86,"line":2290},[84,3316,777],{"emptyLinePlaceholder":776},[84,3318,3319],{"class":86,"line":2898},[84,3320,3321],{"class":997},"# 关节信息节点\n",[84,3323,3324],{"class":86,"line":2909},[84,3325,777],{"emptyLinePlaceholder":776},[84,3327,3328],{"class":86,"line":2937},[84,3329,3330],{"class":997},"# joint_state_pub = Node(\n",[84,3332,3333],{"class":86,"line":2942},[84,3334,777],{"emptyLinePlaceholder":776},[84,3336,3337],{"class":86,"line":2947},[84,3338,3339],{"class":997},"#     package=\"joint_state_publisher\",\n",[84,3341,3342],{"class":86,"line":2956},[84,3343,777],{"emptyLinePlaceholder":776},[84,3345,3347],{"class":86,"line":3346},60,[84,3348,3349],{"class":997},"#     executable=\"joint_state_publisher\"\n",[84,3351,3353],{"class":86,"line":3352},61,[84,3354,777],{"emptyLinePlaceholder":776},[84,3356,3358],{"class":86,"line":3357},62,[84,3359,3360],{"class":997},"# )\n",[84,3362,3364],{"class":86,"line":3363},63,[84,3365,777],{"emptyLinePlaceholder":776},[84,3367,3369],{"class":86,"line":3368},64,[84,3370,3371],{"class":997},"# 关节信息节点图形界面(建议)\n",[84,3373,3375,3377,3379],{"class":86,"line":3374},65,[84,3376,2847],{"class":782},[84,3378,840],{"class":911},[84,3380,1159],{"class":782},[84,3382,3384,3386,3388,3391],{"class":86,"line":3383},66,[84,3385,2198],{"class":1087},[84,3387,840],{"class":911},[84,3389,3390],{"class":94},"\"joint_state_publisher_gui\"",[84,3392,1173],{"class":782},[84,3394,3396,3398,3400],{"class":86,"line":3395},67,[84,3397,2209],{"class":1087},[84,3399,840],{"class":911},[84,3401,3402],{"class":94},"\"joint_state_publisher_gui\"\n",[84,3404,3406],{"class":86,"line":3405},68,[84,3407,1031],{"class":782},[84,3409,3411],{"class":86,"line":3410},69,[84,3412,777],{"emptyLinePlaceholder":776},[84,3414,3416,3418,3420],{"class":86,"line":3415},70,[84,3417,2244],{"class":782},[84,3419,840],{"class":911},[84,3421,1159],{"class":782},[84,3423,3425,3427,3429,3431],{"class":86,"line":3424},71,[84,3426,2198],{"class":1087},[84,3428,840],{"class":911},[84,3430,1287],{"class":94},[84,3432,1173],{"class":782},[84,3434,3436,3438,3440,3442],{"class":86,"line":3435},72,[84,3437,2209],{"class":1087},[84,3439,840],{"class":911},[84,3441,1287],{"class":94},[84,3443,1173],{"class":782},[84,3445,3447],{"class":86,"line":3446},73,[84,3448,777],{"emptyLinePlaceholder":776},[84,3450,3452],{"class":86,"line":3451},74,[84,3453,3454],{"class":997},"#    arguments=[\"-d\",get_package_share_directory(\"cpp06_urdf\") + \"/rviz/urdf.rviz\"]\n",[84,3456,3458,3460,3462,3464,3466],{"class":86,"line":3457},75,[84,3459,2912],{"class":1087},[84,3461,840],{"class":911},[84,3463,2917],{"class":782},[84,3465,2920],{"class":94},[84,3467,3468],{"class":782},",default_rviz_path]\n",[84,3470,3472],{"class":86,"line":3471},76,[84,3473,777],{"emptyLinePlaceholder":776},[84,3475,3477],{"class":86,"line":3476},77,[84,3478,1208],{"class":782},[84,3480,3482],{"class":86,"line":3481},78,[84,3483,777],{"emptyLinePlaceholder":776},[84,3485,3487,3489,3491],{"class":86,"line":3486},79,[84,3488,1003],{"class":911},[84,3490,1006],{"class":90},[84,3492,1009],{"class":782},[84,3494,3496,3498],{"class":86,"line":3495},80,[84,3497,1321],{"class":911},[84,3499,2961],{"class":782},[10,3501,3503],{"id":3502},"urdf语法","URDF语法",[645,3505,3506],{"id":3506},"简介",[14,3508,3509],{},[17,3510],{"alt":19,"src":3511},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1450.webp",[645,3513,3514],{"id":3514},"robot根标签",[14,3516,3517,3520],{},[17,3518],{"alt":19,"src":3519},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1451.webp",[17,3521],{"alt":19,"src":3522},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1452.webp",[14,3524,3525],{},"对机器人进行分割，分割成几个子集，比如一个子集描述头，一个子集描述身子，最后再合成合集，成机器人",[14,3527,3528],{},"虽然我的子文件和主文件在逻辑上是有包含关系的，但是其实，他们都是单独的urdf文件。主文件中，robot标签的name属性必须写，子文件可以不写，如果写，那么子文件name的值与主文件的必须相同！",[14,3530,3531,3534],{},[17,3532],{"alt":19,"src":3533},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1453.webp",[17,3535],{"alt":19,"src":3536},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1454.webp",[645,3538,3539],{"id":3539},"link标签",[3541,3542,3506],"h5",{"id":3543},"简介-1",[14,3545,3546],{},[17,3547],{"alt":19,"src":3548},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1455.webp",[14,3550,3551],{},"每一个link都是刚体，都是独立部件",[14,3553,3554],{},"Link是通过joint进行拼接的",[14,3556,3557],{},"Link主要包含三部分，Visual，Collision和Inertial",[14,3559,3560],{},[17,3561],{"alt":19,"src":3562},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1456.webp",[14,3564,3565],{},"没加尖括号的是属性，加了的是标签",[14,3567,3568,3572],{},[105,3569,3570],{},[811,3571],{}," （可选）：用于描述link的可视化属性，可以设置link的形状（立方体、球体、圆柱等）。",[163,3574,3575,3580],{},[142,3576,3577,3579],{},[105,3578,1088],{}," （可选）：指定link名称，此名称会映射为同名坐标系，还可以通过引用该值定位定位link。",[142,3581,3582,3586,3587],{},[105,3583,3584],{},[823,3585],{}," （必填）：用于设置link的形状，比如：立方体、球体或圆柱。",[163,3588,3589,3596,3604,3612,3628,3650],{},[142,3590,3591,3595],{},[105,3592,3593],{},[834,3594],{}," ：立方体标签，通过size属性设置立方体的边长，原点为其几何中心。",[142,3597,3598,3603],{},[105,3599,3600],{},[3601,3602],"cylinder",{}," ：圆柱标签，通过radius属性设置圆柱半径，通过length属性设置圆柱高度，原点为其几何中心。",[142,3605,3606,3611],{},[105,3607,3608],{},[3609,3610],"sphere",{}," ：球体标签，通过radius属性设置球体半径，原点为其几何中心。",[142,3613,3614,3619,3620],{},[105,3615,3616],{},[3617,3618],"mesh",{}," ：通过属性filename引用“皮肤”文件，为link设置外观，该文件必须是本地文件。使用 package://",[3621,3622,3623,3624],"packagename",{},"/",[3625,3626,3627],"path",{},"为文件名添加前缀。",[142,3629,3630,3635,3636],{},[105,3631,3632],{},[3633,3634],"origin",{}," （可选）：用于设置link的相对偏移量以及旋转角度，如未指定则使用默认值（无偏移且无旋转）。",[163,3637,3638,3644],{},[142,3639,3640,3643],{},[105,3641,3642],{},"xyz"," ：表示x、y、z三个维度上的偏移量（以米为单位），不同数值之间使用空格分隔，如未指定则使用默认值（三个维度无偏移）。",[142,3645,3646,3649],{},[105,3647,3648],{},"rpy"," ：表示翻滚、俯仰与偏航的角度（以弧度为单位），不同数值之间使用空格分隔，如未指定则使用默认值（三个维度无旋转）。",[142,3651,3652,3657,3658],{},[105,3653,3654],{},[3655,3656],"material",{}," （可选）：视觉元素的材质。也可以在根标签robot中定义material标签，然后，可以在link中按名称进行引用。",[163,3659,3660,3665,3673],{},[142,3661,3662,3664],{},[105,3663,1088],{}," （可选）：为material指定名称，可以通过该值进行引用。",[142,3666,3667,3672],{},[105,3668,3669],{},[3670,3671],"color",{}," （可选）：rgba 材质的颜色，由代表red/green/blue/alpha 的四个数字组成，每个数字的范围为 [0,1]。",[142,3674,3675,3680],{},[105,3676,3677],{},[3678,3679],"texture",{}," （可选）：材质的纹理，可以由属性filename设置。",[14,3682,3683],{},"当有多个Visual的时候，需要给Visual设置name，所以是个可选项。",[14,3685,3686],{},"Collision与仿真有关系，我们可以给我们的机器人的刚体设置一个碰撞区间，只要障碍物进入了区间，那么就发生了碰撞，一般碰撞区间要比实际大小要大。",[14,3688,3689,3694,3695],{},[105,3690,3691],{},[3692,3693],"collision",{}," （可选）：link的碰撞属性。可以与link的视觉属性一致，也可以不同，比如：我们会通常使用更简单的碰撞模型来减少计算时间，或者设置的值大于link的视觉属性，以尽量避免碰撞。另外，同一链接可以存在多个 ",[3692,3696,3697],{},"标签实例，多个几何图形组合表示link的碰撞属性。",[163,3699,3700,3705,3712],{},[142,3701,3702,3704],{},[105,3703,1088],{}," （可选）：为collision设置名称。",[142,3706,3707,3711],{},[105,3708,3709],{},[823,3710],{}," （必须）：请参考visual标签的geometry使用规则。",[142,3713,3714,3718],{},[105,3715,3716],{},[3633,3717],{}," （可选）：请参考visual标签的origin使用规则。",[14,3720,3721],{},"Inertial是设置惯性矩阵的，也是和仿真有关系的。比如说机器人刹车，会出现前倾的情况，比如说惯性矩阵的重心高一些，那么急刹车就会出现翻车的情况了。",[14,3723,3724,3729],{},[105,3725,3726],{},[3727,3728],"inertial",{}," （可选）：用于设置link的质量、质心位置和中心惯性特性，如果未指定，则默认为质量为0、惯性为0。",[163,3731,3732,3751,3759],{},[142,3733,3734,3738,3739],{},[105,3735,3736],{},[3633,3737],{}," （可选）：该位姿（平移、旋转）描述了链接的质心框架 C 相对于链接框架 L 的位置和方向。",[163,3740,3741,3746],{},[142,3742,3743,3745],{},[105,3744,3642],{}," ：表示从 Lo（链接框架原点）到 Co（链接的质心）的位置向量为 x L̂x + y L̂y + z L̂z，其中 L̂x、L̂y、L̂z 是链接框架 L 的正交单位向量。",[142,3747,3748,3750],{},[105,3749,3648],{}," ：将 C 的单位向量 Ĉx、Ĉy、Ĉz 相对于链接框架 L 的方向表示为以弧度为单位的欧拉旋转序列 (r p y)。注意：Ĉx、Ĉy、Ĉz 不需要与连杆的惯性主轴对齐。",[142,3752,3753,3758],{},[105,3754,3755],{},[3756,3757],"mass",{}," （必填）：通过其value属性设置link的质量。",[142,3760,3761,3766],{},[105,3762,3763],{},[3764,3765],"inertia",{}," （必填）：对于固定在质心坐标系 C 中的单位向量 Ĉx、Ĉy、Ĉz，该连杆的惯性矩 ixx、iyy、izz 以及关于 Co（连杆的质心）的惯性 ixy、ixz、iyz 的乘积。",[14,3768,3769,3772,3773],{},[105,3770,3771],{},"注意："," ",[3692,3774,3775,3776],{}," 和 ",[3727,3777,3778],{}," 在仿真环境下才需要使用到，如果只是在 rviz2 中集成 urdf，那么不必须为 link 定义这两个标签。",[3541,3780,3781],{"id":3781},"使用",[14,3783,3784],{},[17,3785],{"alt":19,"src":3786},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1457.webp",[76,3788,3790],{"className":767,"code":3789,"language":769,"meta":19,"style":19},"\u003Crobot name=\"link_demo\">\n\n  \u003Cmaterial name=\"yellow\">\n    \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n  \u003C/material>\n  \u003Clink name=\"base_link\">\n    \u003Cvisual>\n\n        \u003Cgeometry>\n\n            \u003Cbox size=\"0.5 0.3 0.1\" />\n\n        \u003C/geometry>\n\n        \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n\n        \u003Cmaterial name=\"yellow\"/>\n    \u003C/visual>\n  \u003C/link>\n\u003C/robot>\n",[71,3791,3792,3807,3811,3827,3844,3852,3866,3874,3878,3886,3890,3906,3910,3918,3922,3945,3949,3963,3971,3979],{"__ignoreMap":19},[84,3793,3794,3796,3798,3800,3802,3805],{"class":86,"line":87},[84,3795,1369],{"class":782},[84,3797,787],{"class":786},[84,3799,1653],{"class":90},[84,3801,840],{"class":782},[84,3803,3804],{"class":94},"\"link_demo\"",[84,3806,814],{"class":782},[84,3808,3809],{"class":86,"line":636},[84,3810,777],{"emptyLinePlaceholder":776},[84,3812,3813,3816,3818,3820,3822,3825],{"class":86,"line":793},[84,3814,3815],{"class":782},"  \u003C",[84,3817,3655],{"class":786},[84,3819,1653],{"class":90},[84,3821,840],{"class":782},[84,3823,3824],{"class":94},"\"yellow\"",[84,3826,814],{"class":782},[84,3828,3829,3831,3833,3836,3838,3841],{"class":86,"line":805},[84,3830,1670],{"class":782},[84,3832,3670],{"class":786},[84,3834,3835],{"class":90}," rgba",[84,3837,840],{"class":782},[84,3839,3840],{"class":94},"\"0.7 0.7 0 0.8\"",[84,3842,3843],{"class":782}," />\n",[84,3845,3846,3848,3850],{"class":86,"line":817},[84,3847,1759],{"class":782},[84,3849,3655],{"class":786},[84,3851,814],{"class":782},[84,3853,3854,3856,3858,3860,3862,3864],{"class":86,"line":828},[84,3855,3815],{"class":782},[84,3857,799],{"class":786},[84,3859,1653],{"class":90},[84,3861,840],{"class":782},[84,3863,1679],{"class":94},[84,3865,814],{"class":782},[84,3867,3868,3870,3872],{"class":86,"line":849},[84,3869,1670],{"class":782},[84,3871,811],{"class":786},[84,3873,814],{"class":782},[84,3875,3876],{"class":86,"line":859},[84,3877,777],{"emptyLinePlaceholder":776},[84,3879,3880,3882,3884],{"class":86,"line":869},[84,3881,1703],{"class":782},[84,3883,823],{"class":786},[84,3885,814],{"class":782},[84,3887,3888],{"class":86,"line":879},[84,3889,777],{"emptyLinePlaceholder":776},[84,3891,3892,3895,3897,3899,3901,3904],{"class":86,"line":1012},[84,3893,3894],{"class":782},"            \u003C",[84,3896,834],{"class":786},[84,3898,837],{"class":90},[84,3900,840],{"class":782},[84,3902,3903],{"class":94},"\"0.5 0.3 0.1\"",[84,3905,3843],{"class":782},[84,3907,3908],{"class":86,"line":1017},[84,3909,777],{"emptyLinePlaceholder":776},[84,3911,3912,3914,3916],{"class":86,"line":1034},[84,3913,1732],{"class":782},[84,3915,823],{"class":786},[84,3917,814],{"class":782},[84,3919,3920],{"class":86,"line":1056},[84,3921,777],{"emptyLinePlaceholder":776},[84,3923,3924,3926,3928,3931,3933,3936,3939,3941,3943],{"class":86,"line":1076},[84,3925,1703],{"class":782},[84,3927,3633],{"class":786},[84,3929,3930],{"class":90}," xyz",[84,3932,840],{"class":782},[84,3934,3935],{"class":94},"\"0 0 0\"",[84,3937,3938],{"class":90}," rpy",[84,3940,840],{"class":782},[84,3942,3935],{"class":94},[84,3944,3843],{"class":782},[84,3946,3947],{"class":86,"line":1107},[84,3948,777],{"emptyLinePlaceholder":776},[84,3950,3951,3953,3955,3957,3959,3961],{"class":86,"line":1112},[84,3952,1703],{"class":782},[84,3954,3655],{"class":786},[84,3956,1653],{"class":90},[84,3958,840],{"class":782},[84,3960,3824],{"class":94},[84,3962,846],{"class":782},[84,3964,3965,3967,3969],{"class":86,"line":1118},[84,3966,1750],{"class":782},[84,3968,811],{"class":786},[84,3970,814],{"class":782},[84,3972,3973,3975,3977],{"class":86,"line":1123},[84,3974,1759],{"class":782},[84,3976,799],{"class":786},[84,3978,814],{"class":782},[84,3980,3981,3984,3986],{"class":86,"line":1129},[84,3982,3983],{"class":782},"\u003C/",[84,3985,787],{"class":786},[84,3987,814],{"class":782},[14,3989,3990],{},[17,3991],{"alt":19,"src":3992},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1458.webp",[76,3994,3996],{"className":78,"code":3995,"language":80,"meta":19,"style":19},"ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo02_link.urdf\n",[71,3997,3998],{"__ignoreMap":19},[84,3999,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018],{"class":86,"line":87},[84,4001,716],{"class":90},[84,4003,1520],{"class":94},[84,4005,725],{"class":94},[84,4007,2512],{"class":94},[84,4009,2515],{"class":94},[84,4011,716],{"class":90},[84,4013,2520],{"class":94},[84,4015,2523],{"class":728},[84,4017,2526],{"class":94},[84,4019,4020],{"class":90},"/urdf/urdf/demo02_link.urdf\n",[14,4022,4023],{},[17,4024],{"alt":19,"src":4025},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1459.webp",[14,4027,4028],{},[17,4029],{"alt":19,"src":4030},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1460.webp",[14,4032,4033],{},"矩形体，球形，圆柱体",[14,4035,4036],{},[17,4037],{"alt":19,"src":4038},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1461.webp",[14,4040,4041],{},[17,4042],{"alt":19,"src":4043},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1462.webp",[14,4045,4046],{},[17,4047],{"alt":19,"src":4048},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1463.webp",[14,4050,4051],{},[17,4052],{"alt":19,"src":4053},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1464.webp",[14,4055,4056,4059],{},[17,4057],{"alt":19,"src":4058},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1465.webp",[17,4060],{"alt":19,"src":4061},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1466.webp",[14,4063,4064],{},"平移量，X平移1，Y和Z平移0，rpy旋转度设置为0(旋转度分别是欧拉角里的翻滚角Roll(绕X)，俯仰角Pitch(绕Y)，航向角Yaw(绕Z))",[14,4066,4067,4070],{},[17,4068],{"alt":19,"src":4069},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1467.webp",[17,4071],{"alt":19,"src":4072},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1468.webp",[14,4074,4075],{},"发现长方体在X上偏移了1",[14,4077,4078,4081],{},[17,4079],{"alt":19,"src":4080},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1469.webp",[17,4082],{"alt":19,"src":4083},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1470.webp",[14,4085,4086],{},"让航向角Yaw(绕Z运动)为0.5 rad",[14,4088,4089,4092],{},[17,4090],{"alt":19,"src":4091},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1471.webp",[17,4093],{"alt":19,"src":4094},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1472.webp",[14,4096,4097],{},"设置翻滚角Roll(绕X运动)为0.5rad",[14,4099,4100,4103],{},[17,4101],{"alt":19,"src":4102},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1473.webp",[17,4104],{"alt":19,"src":4105},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1474.webp",[14,4107,4108],{},"设置俯仰角Pitch(绕Y运动)为0.5rad",[14,4110,4111],{},[17,4112],{"alt":19,"src":4113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1475.webp",[14,4115,4116],{},"sRGB是R,G,B,Alpha(浮点模型，所以范围是0-1.0)",[14,4118,4119],{},[17,4120],{"alt":19,"src":4121},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1476.webp",[14,4123,4124],{},[17,4125],{"alt":19,"src":4126},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1477.webp",[14,4128,4129,4132],{},[17,4130],{"alt":19,"src":4131},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1478.webp",[17,4133],{"alt":19,"src":4134},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1479.webp",[14,4136,4137,4138],{},"如果一个颜色要被用好几次，可以封装成一个类似于全局变量的东西，然后在其他link中调用时，直接用",[3655,4139,4141],{"name":4140},"对应属性值"," （这里是个闭环，注意）",[14,4143,4144],{},[17,4145],{"alt":19,"src":4146},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1480.webp",[76,4148,4150],{"className":767,"code":4149,"language":769,"meta":19,"style":19},"\u003Crobot name=\"link_demo\">\n\n    \u003Cmaterial name=\"yellow\">\n      \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n    \u003C/material>\n    \u003Clink name=\"base_link\">\n      \u003Cvisual>\n\n          \u003Cgeometry>\n\n              \u003Cbox size=\"0.5 0.3 0.1\" />\n\n          \u003C/geometry>\n\n          \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n\n          \u003Cmaterial name=\"yellow\"/>\n      \u003C/visual>\n    \u003C/link>\n  \u003C/robot>\n",[71,4151,4152,4166,4170,4184,4198,4206,4220,4228,4232,4240,4244,4259,4263,4272,4276,4296,4300,4314,4322,4330],{"__ignoreMap":19},[84,4153,4154,4156,4158,4160,4162,4164],{"class":86,"line":87},[84,4155,1369],{"class":782},[84,4157,787],{"class":786},[84,4159,1653],{"class":90},[84,4161,840],{"class":782},[84,4163,3804],{"class":94},[84,4165,814],{"class":782},[84,4167,4168],{"class":86,"line":636},[84,4169,777],{"emptyLinePlaceholder":776},[84,4171,4172,4174,4176,4178,4180,4182],{"class":86,"line":793},[84,4173,1670],{"class":782},[84,4175,3655],{"class":786},[84,4177,1653],{"class":90},[84,4179,840],{"class":782},[84,4181,3824],{"class":94},[84,4183,814],{"class":782},[84,4185,4186,4188,4190,4192,4194,4196],{"class":86,"line":805},[84,4187,1690],{"class":782},[84,4189,3670],{"class":786},[84,4191,3835],{"class":90},[84,4193,840],{"class":782},[84,4195,3840],{"class":94},[84,4197,3843],{"class":782},[84,4199,4200,4202,4204],{"class":86,"line":817},[84,4201,1750],{"class":782},[84,4203,3655],{"class":786},[84,4205,814],{"class":782},[84,4207,4208,4210,4212,4214,4216,4218],{"class":86,"line":828},[84,4209,1670],{"class":782},[84,4211,799],{"class":786},[84,4213,1653],{"class":90},[84,4215,840],{"class":782},[84,4217,1679],{"class":94},[84,4219,814],{"class":782},[84,4221,4222,4224,4226],{"class":86,"line":849},[84,4223,1690],{"class":782},[84,4225,811],{"class":786},[84,4227,814],{"class":782},[84,4229,4230],{"class":86,"line":859},[84,4231,777],{"emptyLinePlaceholder":776},[84,4233,4234,4236,4238],{"class":86,"line":869},[84,4235,1716],{"class":782},[84,4237,823],{"class":786},[84,4239,814],{"class":782},[84,4241,4242],{"class":86,"line":879},[84,4243,777],{"emptyLinePlaceholder":776},[84,4245,4246,4249,4251,4253,4255,4257],{"class":86,"line":1012},[84,4247,4248],{"class":782},"              \u003C",[84,4250,834],{"class":786},[84,4252,837],{"class":90},[84,4254,840],{"class":782},[84,4256,3903],{"class":94},[84,4258,3843],{"class":782},[84,4260,4261],{"class":86,"line":1017},[84,4262,777],{"emptyLinePlaceholder":776},[84,4264,4265,4268,4270],{"class":86,"line":1034},[84,4266,4267],{"class":782},"          \u003C/",[84,4269,823],{"class":786},[84,4271,814],{"class":782},[84,4273,4274],{"class":86,"line":1056},[84,4275,777],{"emptyLinePlaceholder":776},[84,4277,4278,4280,4282,4284,4286,4288,4290,4292,4294],{"class":86,"line":1076},[84,4279,1716],{"class":782},[84,4281,3633],{"class":786},[84,4283,3930],{"class":90},[84,4285,840],{"class":782},[84,4287,3935],{"class":94},[84,4289,3938],{"class":90},[84,4291,840],{"class":782},[84,4293,3935],{"class":94},[84,4295,3843],{"class":782},[84,4297,4298],{"class":86,"line":1107},[84,4299,777],{"emptyLinePlaceholder":776},[84,4301,4302,4304,4306,4308,4310,4312],{"class":86,"line":1112},[84,4303,1716],{"class":782},[84,4305,3655],{"class":786},[84,4307,1653],{"class":90},[84,4309,840],{"class":782},[84,4311,3824],{"class":94},[84,4313,846],{"class":782},[84,4315,4316,4318,4320],{"class":86,"line":1118},[84,4317,1741],{"class":782},[84,4319,811],{"class":786},[84,4321,814],{"class":782},[84,4323,4324,4326,4328],{"class":86,"line":1123},[84,4325,1750],{"class":782},[84,4327,799],{"class":786},[84,4329,814],{"class":782},[84,4331,4332,4334,4336],{"class":86,"line":1129},[84,4333,1759],{"class":782},[84,4335,787],{"class":786},[84,4337,814],{"class":782},[3541,4339,4340],{"id":4340},"使用补充",[14,4342,4343],{},[17,4344],{"alt":19,"src":4345},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1481.webp",[14,4347,4348],{},"mesh标签是引用皮肤文件，一般是stl文件，可以用SolidWorks导出，可以看文档后面的SW2URDF",[14,4350,4351],{},"如果不会使用solidworks，可以学，这东西2天半就能学会，只是一个工具，只会画图没有啥水平，最重要的还是机械设计比较难。想学的可以看兄弟社团机械学会微信公众号的视频进行学习。",[14,4353,4354],{},[4355,4356,4360],"a",{"href":4357,"rel":4358},"https://mp.weixin.qq.com/mp/homepage?%5C_%5C_biz=MzI4MjkyMDgyMA==&hid=7&sn=1efc3d3cee0142970227785f767cc7c8&scene=18",[4359],"nofollow","https://mp.weixin.qq.com/mp/homepage?\\_\\_biz=MzI4MjkyMDgyMA==&hid=7&sn=1efc3d3cee0142970227785f767cc7c8&scene=18",[14,4362,4363],{},"当然，没时间学习可以直接用别人画好的机器人，在Github上搜索turtlebot3",[14,4365,4366],{},[17,4367],{"alt":19,"src":4368},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1482.webp",[14,4370,4371],{},[17,4372],{"alt":19,"src":4373},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1483.webp",[14,4375,4376],{},[17,4377],{"alt":19,"src":4378},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1484.webp",[14,4380,4381],{},"这里有已经导出的模型，bases里是外观的模型，sensors是传感器的模型，wheels是轮子的模型。",[14,4383,4384],{},"我们克隆下仓库，注意要克隆branch是ros2的分支。",[14,4386,4387],{},[17,4388],{"alt":19,"src":4389},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1485.webp",[14,4391,4392],{},"我们引用一个就行了，看看效果即可，真正的应用还是要用SolidWorks通过SW2URDF插件进行导出",[14,4394,4395],{},"把项目里的meshes/bases里的burger_base.stl拷贝到我们WS里的meshes目录",[14,4397,4398],{},[17,4399],{"alt":19,"src":4400},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1486.webp",[14,4402,4403],{},[17,4404],{"alt":19,"src":4405},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1487.webp",[14,4407,4408],{},"filename是写刚才的皮肤文件，package://就是协议名，后面跟包名，也就是cpp06_urdf。然后跟功能包下的文件路径，也就是meshes/burger_base.stl（其实也就是share下的路径）",[14,4410,4411],{},[17,4412],{"alt":19,"src":4413},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1488.webp",[14,4415,4416],{},"因为是个三维模型，所以在填scale大小缩放时，需要填3个比例，咱们都填1.0即可。",[14,4418,4419],{},[17,4420],{"alt":19,"src":4421},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1489.webp",[14,4423,4424],{},"为什么显示的模型会这么大呢，因为rviz2以米为单位，而stl是以mm为单位，注意。在机械上，默认不说单位就都是mm，不要乱改单位，一般都要以mm为单位，咱们是做机器人的，要专业一些。",[14,4426,4427],{},[17,4428],{"alt":19,"src":4429},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1490.webp",[14,4431,4432],{},[17,4433],{"alt":19,"src":4434},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1491.webp",[645,4436,4437],{"id":4437},"joint标签",[3541,4439,3506],{"id":4440},"简介-2",[14,4442,4443],{},"urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性，还可以指定关节运动的安全极限，机器人的两个部件(分别称之为 parent link 与 child link)以”关节“的形式相连接，不同的关节有不同的运动形式: 旋转、滑动、固定、旋转速度、旋转角度限制....,比如:安装在底座上的轮子可以360度旋转，而摄像头则可能是完全固定在底座上。",[14,4445,4446],{},[17,4447],{"alt":19,"src":4448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1492.webp",[163,4450,4451,4456],{},[142,4452,4453,4455],{},[105,4454,1088],{}," （必填）：为关节命名，名称需要唯一。",[142,4457,4458,4461,4462],{},[105,4459,4460],{},"type"," （必填）：设置关节类型，可用类型如下：",[163,4463,4464,4467,4470,4473,4476,4479],{},[142,4465,4466],{},"continuous：旋转关节，可以绕单轴无限旋转。",[142,4468,4469],{},"revolute：旋转关节，类似于 continues，但是有旋转角度限制。",[142,4471,4472],{},"prismatic：滑动关节，沿某一轴线移动的关节，有位置极限。",[142,4474,4475],{},"planer：平面关节，允许在平面正交方向上平移或旋转。",[142,4477,4478],{},"floating：浮动关节，允许进行平移、旋转运动。",[142,4480,4481],{},"fixed：固定关节，不允许运动的特殊关节。",[14,4483,4484],{},"以下是子级标签",[163,4486,4487,4502,4517,4536,4549,4571,4593,4627,4659],{},[142,4488,4489,4494,4495],{},[105,4490,4491],{},[4492,4493],"parent",{}," （必填）：指定父级link。",[163,4496,4497],{},[142,4498,4499,4501],{},[105,4500,799],{}," （必填）：父级link的名字，是这个link在机器人结构树中的名字。",[142,4503,4504,4509,4510],{},[105,4505,4506],{},[4507,4508],"child",{}," （必填）：指定子级link。",[163,4511,4512],{},[142,4513,4514,4516],{},[105,4515,799],{}," （必填）：子级link的名字，是这个link在机器人结构树中的名字。",[142,4518,4519,4523,4524],{},[105,4520,4521],{},[3633,4522],{}," （可选）：这是从父link到子link的转换，关节位于子link的原点。",[163,4525,4526,4531],{},[142,4527,4528,4530],{},[105,4529,3642],{}," ：各轴线上的偏移量。",[142,4532,4533,4535],{},[105,4534,3648],{}," ：各轴线上的偏移弧度。",[142,4537,4538,4541,4542],{},[105,4539,4540],{},"\u003Caxis>"," （可选）：如不设置，默认值为（1，0，0）。",[163,4543,4544],{},[142,4545,4546,4548],{},[105,4547,3642],{}," ：用于设置围绕哪个关节轴运动。",[142,4550,4551,4556,4557],{},[105,4552,4553],{},[4554,4555],"calibration",{}," （可选）：关节的参考位置，用于校准关节的绝对位置。",[163,4558,4559,4565],{},[142,4560,4561,4564],{},[105,4562,4563],{},"rising"," （可选）：当关节向正方向移动时，该参考位置将触发上升沿。",[142,4566,4567,4570],{},[105,4568,4569],{},"falling"," （可选）：当关节向正方向移动时，该参考位置将触发下降沿。",[142,4572,4573,4578,4579],{},[105,4574,4575],{},[4576,4577],"dynamics",{}," （可选）：指定接头物理特性的元素。这些值用于指定关节的建模属性，对仿真较为有用。",[163,4580,4581,4587],{},[142,4582,4583,4586],{},[105,4584,4585],{},"damping"," （可选）：关节的物理阻尼值，默认为0。",[142,4588,4589,4592],{},[105,4590,4591],{},"friction"," （可选）：关节的物理静摩擦值，默认为0。",[142,4594,4595,4600,4601],{},[105,4596,4597],{},[4598,4599],"limit",{}," （关节类型是revolute或prismatic时为必须的）：",[163,4602,4603,4609,4615,4621],{},[142,4604,4605,4608],{},[105,4606,4607],{},"lower"," （可选）：指定关节下限的属性（旋转关节以弧度为单位，棱柱关节以米为单位）。如果关节是连续的，则省略。",[142,4610,4611,4614],{},[105,4612,4613],{},"upper"," （可选）：指定关节上限的属性（旋转关节以弧度为单位，棱柱关节以米为单位）。如果关节是连续的，则省略。",[142,4616,4617,4620],{},[105,4618,4619],{},"effort"," （必填）：指定关节可受力的最大值。",[142,4622,4623,4626],{},[105,4624,4625],{},"velocity"," （必填）：用于设置最大关节速度（旋转关节以弧度每秒 [rad/s] 为单位，棱柱关节以米每秒 [m/s] 为单位）。",[142,4628,4629,4634,4635,127,4639],{},[105,4630,4631],{},[4632,4633],"mimic",{}," （可选）：此标签用于指定定义的关节模仿另一个现有关节。该关节的值可以计算为",[4636,4637,4638],"em",{},"value = multiplier * other_joint_value + offset",[163,4640,4641,4647,4653],{},[142,4642,4643,4646],{},[105,4644,4645],{},"joint"," （必填）：指定要模拟的关节的名称。",[142,4648,4649,4652],{},[105,4650,4651],{},"multiplier"," （可选）：指定上述公式中的乘法因子。",[142,4654,4655,4658],{},[105,4656,4657],{},"offset"," （可选）：指定要在上述公式中添加的偏移量，默认为 0（旋转关节的单位是弧度，棱柱关节的单位是米）。",[142,4660,4661,4664,4665],{},[105,4662,4663],{},"\u003Csafety_controller>"," （可选）：安全控制器。",[163,4666,4667,4673,4679,4685],{},[142,4668,4669,4672],{},[105,4670,4671],{},"soft_lower_limit"," （可选）：指定安全控制器开始限制关节位置的下关节边界，此限制需要大于joint下限。",[142,4674,4675,4678],{},[105,4676,4677],{},"soft_upper_limit"," （可选）：指定安全控制器开始限制关节位置的关节上边界的属性，此限制需要小于joint上限。",[142,4680,4681,4684],{},[105,4682,4683],{},"k_position"," （可选）：指定位置和速度限制之间的关系。",[142,4686,4687,4690],{},[105,4688,4689],{},"k_velocity"," （必填）：指定力和速度限制之间的关系。",[14,4692,4693],{},[17,4694],{"alt":19,"src":4695},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1493.webp",[14,4697,4698],{},"关节名称是必填的，且是唯一的。",[14,4700,4701],{},[17,4702],{"alt":19,"src":4703},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1494.webp",[14,4705,4706],{},"咱们最常用的是有限位的revolute类型的关节，continuous可无限旋转的关节，fixed固定关节，这个根据具体的关节类型来填。",[14,4708,4709],{},"revolute一般用于工业机器人机械臂的关节，continuous比如舵轮结构的“关节”，fixed就是一些固定的不能运动的结构关节。",[14,4711,4712],{},[17,4713],{"alt":19,"src":4714},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1495.webp",[14,4716,4717],{},"子集标签很多，咱们用的最常用的就几个，记住常用的即可。",[14,4719,4720],{},[17,4721],{"alt":19,"src":4722},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1496.webp",[14,4724,4725],{},"parent标签，link属性指定父级link的名字。",[14,4727,4728],{},[17,4729],{"alt":19,"src":4730},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1497.webp",[14,4732,4733],{},"child标签类似。",[14,4735,4736],{},[17,4737],{"alt":19,"src":4738},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1498.webp",[14,4740,4741],{},[17,4742],{"alt":19,"src":4743},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1499.webp",[14,4745,4746],{},"这个轴，默认是1，0，0，以X轴进行旋转，但是咱们一般是需要设置的，可通过SolidWorks设置基准轴进行设置。",[14,4748,4749],{},"剩下的标签，都与关节类型有关，比如limit，如果关节类型是revolute，而且不设置limit，那么在joint_state_publisher_gui里是无法调关节的角度的。",[14,4751,4752],{},[17,4753],{"alt":19,"src":4754},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1500.webp",[14,4756,4757],{},"其他标签用到的时候再进行介绍。",[3541,4759,4760],{"id":4760},"练习",[14,4762,4763],{},[17,4764],{"alt":19,"src":4765},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1501.webp",[14,4767,4768],{},"先把俩关节，单独实现，然后再通过joint关节进行连接。",[14,4770,4771],{},[17,4772],{"alt":19,"src":4773},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1502.webp",[14,4775,4776],{},[17,4777],{"alt":19,"src":4778},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1503.webp",[14,4780,4781],{},[17,4782],{"alt":19,"src":4783},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1504.webp",[14,4785,4786],{},[17,4787],{"alt":19,"src":4788},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1505.webp",[14,4790,4791],{},[17,4792],{"alt":19,"src":4793},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1506.webp",[14,4795,4796],{},[17,4797],{"alt":19,"src":4798},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1507.webp",[14,4800,4801],{},[17,4802],{"alt":19,"src":4803},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1508.webp",[14,4805,4806],{},"黄色的话，红和绿要多一些。",[14,4808,4809],{},[17,4810],{"alt":19,"src":4811},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1509.webp",[14,4813,4814],{},"这是红色。",[14,4816,4817],{},[17,4818],{"alt":19,"src":4819},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1510.webp",[14,4821,4822],{},"底盘Link就创建完毕了，",[14,4824,4825],{},[17,4826],{"alt":19,"src":4827},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1511.webp",[14,4829,4830],{},"摄像头Link也创建完毕了，",[14,4832,4833],{},[17,4834],{"alt":19,"src":4835},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1512.webp",[14,4837,4838],{},"关节名字设置为camera2base_link，也就是摄像头连接底座的joint，然后类型是360度都可以转的continuous。",[14,4840,4841],{},[17,4842],{"alt":19,"src":4843},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1513.webp",[14,4845,4846],{},"填入子级Link与父级Link",[14,4848,4849],{},[17,4850],{"alt":19,"src":4851},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1514.webp",[14,4853,4854],{},"这样两个Link就通过该Joint连接到一起了。",[14,4856,4857],{},[17,4858],{"alt":19,"src":4859},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1515.webp",[14,4861,4862],{},"还需要设置这俩选项，咱们先不设置，先看默认是什么状态。",[76,4864,4866],{"className":78,"code":4865,"language":80,"meta":19,"style":19},"colcon build --packages-select cpp06_urdf\nsource install/setup.bash\nros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo03_joint.urdf\n",[71,4867,4868,4878,4884],{"__ignoreMap":19},[84,4869,4870,4872,4874,4876],{"class":86,"line":87},[84,4871,1486],{"class":90},[84,4873,1489],{"class":94},[84,4875,1492],{"class":728},[84,4877,1495],{"class":94},[84,4879,4880,4882],{"class":86,"line":636},[84,4881,1510],{"class":728},[84,4883,1513],{"class":94},[84,4885,4886,4888,4890,4892,4894,4896,4898,4900,4902,4904],{"class":86,"line":793},[84,4887,716],{"class":90},[84,4889,1520],{"class":94},[84,4891,725],{"class":94},[84,4893,2512],{"class":94},[84,4895,2515],{"class":94},[84,4897,716],{"class":90},[84,4899,2520],{"class":94},[84,4901,2523],{"class":728},[84,4903,2526],{"class":94},[84,4905,4906],{"class":90},"/urdf/urdf/demo03_joint.urdf\n",[14,4908,4909],{},[17,4910],{"alt":19,"src":4911},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1516.webp",[14,4913,4914],{},[17,4915],{"alt":19,"src":4916},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1517.webp",[14,4918,4919],{},"可以打开TF看看坐标系，勾上Show Names，发现是重合的。所以显示效果不满足咱们的逻辑业务。（默认状态下），所以需要设置偏移量。",[14,4921,4922],{},[17,4923],{"alt":19,"src":4924},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1518.webp",[14,4926,4927],{},"如果咱们想把摄像头移动到车头，如图所示，在X上有偏移量，Y没有，但是Z有。然后roll，pitch，yaw上没有。",[14,4929,4930],{},[17,4931],{"alt":19,"src":4932},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1519.webp",[14,4934,4935,4938],{},[17,4936],{"alt":19,"src":4937},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1520.webp",[17,4939],{"alt":19,"src":4940},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1521.webp",[14,4942,4943],{},"Z的高度就是1/2的底盘高度+1/2的摄像头高度",[14,4945,4946],{},[17,4947],{"alt":19,"src":4948},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1522.webp",[14,4950,4951],{},[17,4952],{"alt":19,"src":4953},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1523.webp",[14,4955,4956],{},[17,4957],{"alt":19,"src":4958},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1524.webp",[14,4960,4961],{},"咱们要绕Yaw旋转，所以也就是绕Z轴旋转，也就是001，注意一定得是整形，不能是浮点型。",[14,4963,4964],{},[17,4965],{"alt":19,"src":4966},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1525.webp",[14,4968,4969],{},"想要看是否能旋转，要打开joint_state_publisher_gui，可以从launch中打开，也可以从终端中直接打开。",[14,4971,4972,4975],{},[17,4973],{"alt":19,"src":4974},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1526.webp",[17,4976],{"alt":19,"src":4977},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1527.webp",[76,4979,4981],{"className":78,"code":4980,"language":80,"meta":19,"style":19},"ros2 run joint_state_publisher_gui joint_state_publisher_gui\n",[71,4982,4983],{"__ignoreMap":19},[84,4984,4985,4987,4989,4992],{"class":86,"line":87},[84,4986,716],{"class":90},[84,4988,2415],{"class":94},[84,4990,4991],{"class":94}," joint_state_publisher_gui",[84,4993,4994],{"class":94}," joint_state_publisher_gui\n",[14,4996,4997],{},[17,4998],{"alt":19,"src":4999},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1528.webp",[14,5001,5002],{},[17,5003],{"alt":19,"src":5004},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1529.webp",[14,5006,5007],{},"拖拽滚动条可改变摄像头的Yaw",[14,5009,5010],{},[17,5011],{"alt":19,"src":5012},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1530.webp",[14,5014,5015],{},"Randomize是随机数，Center是回中(复位)",[76,5017,5019],{"className":767,"code":5018,"language":769,"meta":19,"style":19},"\n \u003Crobot name=\"joint_demo\">\n\n  \u003Cmaterial name=\"yellow\">\n    \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n  \u003C/material>\n  \u003Cmaterial name=\"red\">\n    \u003Ccolor rgba=\"0.8 0.1 0.1 0.8\" />\n  \u003C/material>\n  \u003Clink name=\"base_link\">\n    \u003Cvisual>\n\n        \u003Cgeometry>\n            \u003Cbox size=\"0.5 0.3 0.1\" />\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n        \u003Cmaterial name=\"yellow\"/>\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Clink name=\"camera\">\n      \u003Cvisual>\n          \u003Cgeometry>\n              \u003Cbox size=\"0.02 0.05 0.05\" />\n          \u003C/geometry>\n          \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n          \u003Cmaterial name=\"red\" />\n      \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"camera2baselink\" type=\"continuous\">\n      \u003Cparent link=\"base_link\"/>\n      \u003Cchild link=\"camera\" />\n\n      \u003Corigin xyz=\"0.2 0 0.075\" rpy=\"0 0 0\" />\n      \u003Caxis xyz=\"0 0 1\" />\n  \u003C/joint>\n\n\u003C/robot>\n",[71,5020,5021,5025,5040,5044,5058,5072,5080,5095,5110,5118,5132,5140,5144,5152,5166,5174,5194,5208,5216,5224,5228,5243,5251,5259,5274,5282,5302,5316,5324,5332,5336,5359,5374,5388,5392,5413,5429,5437,5441],{"__ignoreMap":19},[84,5022,5023],{"class":86,"line":87},[84,5024,777],{"emptyLinePlaceholder":776},[84,5026,5027,5029,5031,5033,5035,5038],{"class":86,"line":636},[84,5028,783],{"class":782},[84,5030,787],{"class":786},[84,5032,1653],{"class":90},[84,5034,840],{"class":782},[84,5036,5037],{"class":94},"\"joint_demo\"",[84,5039,814],{"class":782},[84,5041,5042],{"class":86,"line":793},[84,5043,777],{"emptyLinePlaceholder":776},[84,5045,5046,5048,5050,5052,5054,5056],{"class":86,"line":805},[84,5047,3815],{"class":782},[84,5049,3655],{"class":786},[84,5051,1653],{"class":90},[84,5053,840],{"class":782},[84,5055,3824],{"class":94},[84,5057,814],{"class":782},[84,5059,5060,5062,5064,5066,5068,5070],{"class":86,"line":817},[84,5061,1670],{"class":782},[84,5063,3670],{"class":786},[84,5065,3835],{"class":90},[84,5067,840],{"class":782},[84,5069,3840],{"class":94},[84,5071,3843],{"class":782},[84,5073,5074,5076,5078],{"class":86,"line":828},[84,5075,1759],{"class":782},[84,5077,3655],{"class":786},[84,5079,814],{"class":782},[84,5081,5082,5084,5086,5088,5090,5093],{"class":86,"line":849},[84,5083,3815],{"class":782},[84,5085,3655],{"class":786},[84,5087,1653],{"class":90},[84,5089,840],{"class":782},[84,5091,5092],{"class":94},"\"red\"",[84,5094,814],{"class":782},[84,5096,5097,5099,5101,5103,5105,5108],{"class":86,"line":859},[84,5098,1670],{"class":782},[84,5100,3670],{"class":786},[84,5102,3835],{"class":90},[84,5104,840],{"class":782},[84,5106,5107],{"class":94},"\"0.8 0.1 0.1 0.8\"",[84,5109,3843],{"class":782},[84,5111,5112,5114,5116],{"class":86,"line":869},[84,5113,1759],{"class":782},[84,5115,3655],{"class":786},[84,5117,814],{"class":782},[84,5119,5120,5122,5124,5126,5128,5130],{"class":86,"line":879},[84,5121,3815],{"class":782},[84,5123,799],{"class":786},[84,5125,1653],{"class":90},[84,5127,840],{"class":782},[84,5129,1679],{"class":94},[84,5131,814],{"class":782},[84,5133,5134,5136,5138],{"class":86,"line":1012},[84,5135,1670],{"class":782},[84,5137,811],{"class":786},[84,5139,814],{"class":782},[84,5141,5142],{"class":86,"line":1017},[84,5143,777],{"emptyLinePlaceholder":776},[84,5145,5146,5148,5150],{"class":86,"line":1034},[84,5147,1703],{"class":782},[84,5149,823],{"class":786},[84,5151,814],{"class":782},[84,5153,5154,5156,5158,5160,5162,5164],{"class":86,"line":1056},[84,5155,3894],{"class":782},[84,5157,834],{"class":786},[84,5159,837],{"class":90},[84,5161,840],{"class":782},[84,5163,3903],{"class":94},[84,5165,3843],{"class":782},[84,5167,5168,5170,5172],{"class":86,"line":1076},[84,5169,1732],{"class":782},[84,5171,823],{"class":786},[84,5173,814],{"class":782},[84,5175,5176,5178,5180,5182,5184,5186,5188,5190,5192],{"class":86,"line":1107},[84,5177,1703],{"class":782},[84,5179,3633],{"class":786},[84,5181,3930],{"class":90},[84,5183,840],{"class":782},[84,5185,3935],{"class":94},[84,5187,3938],{"class":90},[84,5189,840],{"class":782},[84,5191,3935],{"class":94},[84,5193,3843],{"class":782},[84,5195,5196,5198,5200,5202,5204,5206],{"class":86,"line":1112},[84,5197,1703],{"class":782},[84,5199,3655],{"class":786},[84,5201,1653],{"class":90},[84,5203,840],{"class":782},[84,5205,3824],{"class":94},[84,5207,846],{"class":782},[84,5209,5210,5212,5214],{"class":86,"line":1118},[84,5211,1750],{"class":782},[84,5213,811],{"class":786},[84,5215,814],{"class":782},[84,5217,5218,5220,5222],{"class":86,"line":1123},[84,5219,1759],{"class":782},[84,5221,799],{"class":786},[84,5223,814],{"class":782},[84,5225,5226],{"class":86,"line":1129},[84,5227,777],{"emptyLinePlaceholder":776},[84,5229,5230,5232,5234,5236,5238,5241],{"class":86,"line":1151},[84,5231,3815],{"class":782},[84,5233,799],{"class":786},[84,5235,1653],{"class":90},[84,5237,840],{"class":782},[84,5239,5240],{"class":94},"\"camera\"",[84,5242,814],{"class":782},[84,5244,5245,5247,5249],{"class":86,"line":1162},[84,5246,1690],{"class":782},[84,5248,811],{"class":786},[84,5250,814],{"class":782},[84,5252,5253,5255,5257],{"class":86,"line":1176},[84,5254,1716],{"class":782},[84,5256,823],{"class":786},[84,5258,814],{"class":782},[84,5260,5261,5263,5265,5267,5269,5272],{"class":86,"line":1188},[84,5262,4248],{"class":782},[84,5264,834],{"class":786},[84,5266,837],{"class":90},[84,5268,840],{"class":782},[84,5270,5271],{"class":94},"\"0.02 0.05 0.05\"",[84,5273,3843],{"class":782},[84,5275,5276,5278,5280],{"class":86,"line":1205},[84,5277,4267],{"class":782},[84,5279,823],{"class":786},[84,5281,814],{"class":782},[84,5283,5284,5286,5288,5290,5292,5294,5296,5298,5300],{"class":86,"line":1211},[84,5285,1716],{"class":782},[84,5287,3633],{"class":786},[84,5289,3930],{"class":90},[84,5291,840],{"class":782},[84,5293,3935],{"class":94},[84,5295,3938],{"class":90},[84,5297,840],{"class":782},[84,5299,3935],{"class":94},[84,5301,3843],{"class":782},[84,5303,5304,5306,5308,5310,5312,5314],{"class":86,"line":1216},[84,5305,1716],{"class":782},[84,5307,3655],{"class":786},[84,5309,1653],{"class":90},[84,5311,840],{"class":782},[84,5313,5092],{"class":94},[84,5315,3843],{"class":782},[84,5317,5318,5320,5322],{"class":86,"line":1222},[84,5319,1741],{"class":782},[84,5321,811],{"class":786},[84,5323,814],{"class":782},[84,5325,5326,5328,5330],{"class":86,"line":1232},[84,5327,1759],{"class":782},[84,5329,799],{"class":786},[84,5331,814],{"class":782},[84,5333,5334],{"class":86,"line":1244},[84,5335,777],{"emptyLinePlaceholder":776},[84,5337,5338,5340,5342,5344,5346,5349,5352,5354,5357],{"class":86,"line":1254},[84,5339,3815],{"class":782},[84,5341,4645],{"class":786},[84,5343,1653],{"class":90},[84,5345,840],{"class":782},[84,5347,5348],{"class":94},"\"camera2baselink\"",[84,5350,5351],{"class":90}," type",[84,5353,840],{"class":782},[84,5355,5356],{"class":94},"\"continuous\"",[84,5358,814],{"class":782},[84,5360,5361,5363,5365,5368,5370,5372],{"class":86,"line":1259},[84,5362,1690],{"class":782},[84,5364,4492],{"class":786},[84,5366,5367],{"class":90}," link",[84,5369,840],{"class":782},[84,5371,1679],{"class":94},[84,5373,846],{"class":782},[84,5375,5376,5378,5380,5382,5384,5386],{"class":86,"line":1264},[84,5377,1690],{"class":782},[84,5379,4507],{"class":786},[84,5381,5367],{"class":90},[84,5383,840],{"class":782},[84,5385,5240],{"class":94},[84,5387,3843],{"class":782},[84,5389,5390],{"class":86,"line":1270},[84,5391,777],{"emptyLinePlaceholder":776},[84,5393,5394,5396,5398,5400,5402,5405,5407,5409,5411],{"class":86,"line":1280},[84,5395,1690],{"class":782},[84,5397,3633],{"class":786},[84,5399,3930],{"class":90},[84,5401,840],{"class":782},[84,5403,5404],{"class":94},"\"0.2 0 0.075\"",[84,5406,3938],{"class":90},[84,5408,840],{"class":782},[84,5410,3935],{"class":94},[84,5412,3843],{"class":782},[84,5414,5415,5417,5420,5422,5424,5427],{"class":86,"line":1292},[84,5416,1690],{"class":782},[84,5418,5419],{"class":786},"axis",[84,5421,3930],{"class":90},[84,5423,840],{"class":782},[84,5425,5426],{"class":94},"\"0 0 1\"",[84,5428,3843],{"class":782},[84,5430,5431,5433,5435],{"class":86,"line":1302},[84,5432,1759],{"class":782},[84,5434,4645],{"class":786},[84,5436,814],{"class":782},[84,5438,5439],{"class":86,"line":1307},[84,5440,777],{"emptyLinePlaceholder":776},[84,5442,5443,5445,5447],{"class":86,"line":1313},[84,5444,3983],{"class":782},[84,5446,787],{"class":786},[84,5448,814],{"class":782},[3541,5450,5451],{"id":5451},"joint_state_publisher",[14,5453,5454],{},"bug:Yaw不稳定，会一直回中。",[14,5456,5457],{},[17,5458],{"alt":19,"src":5459},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1531.webp",[14,5461,5462,5465],{},[17,5463],{"alt":19,"src":5464},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1532.webp",[17,5466],{"alt":19,"src":5467},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1533.webp",[14,5469,5470],{},"其实是因为launch里启动的和终端里启动的冲突了。",[14,5472,5473],{},"解决方案：只启动其中一个。",[14,5475,5476],{},[17,5477],{"alt":19,"src":5478},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1534.webp",[14,5480,5481],{},"解决方案：直接在Launch里启动GUI版本的，这样即可解决。(但是不建议)",[14,5483,5484],{},"建议方案：用非GUI版本的，因为以后，我们控制关节是用程序控制，而不是GUI控制。",[14,5486,5487],{},[17,5488],{"alt":19,"src":5489},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1535.webp",[14,5491,5492],{},"如果只是想展示模型，用GUI，",[14,5494,5495],{},"如果想用程序控制，用普通版。",[3541,5497,5498],{"id":5498},"base_footprint",[14,5500,5501],{},"bug:机器人底盘半沉入地下",[14,5503,5504],{},[17,5505],{"alt":19,"src":5506},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1536.webp",[14,5508,5509],{},[17,5510],{"alt":19,"src":5511},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1537.webp",[14,5513,5514],{},[17,5515],{"alt":19,"src":5516},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1538.webp",[14,5518,5519],{},[17,5520],{"alt":19,"src":5521},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1539.webp",[76,5523,5525],{"className":767,"code":5524,"language":769,"meta":19,"style":19},"  \u003Clink name=\"base_footprint\">\n    \u003Cvisual>\n      \u003Cgeometry>\n          \u003Csphere radius=\"0.001\"/>\n      \u003C/geometry>\n    \u003C/visual>\n  \u003C/link>\n",[71,5526,5527,5542,5550,5558,5574,5582,5590],{"__ignoreMap":19},[84,5528,5529,5531,5533,5535,5537,5540],{"class":86,"line":87},[84,5530,3815],{"class":782},[84,5532,799],{"class":786},[84,5534,1653],{"class":90},[84,5536,840],{"class":782},[84,5538,5539],{"class":94},"\"base_footprint\"",[84,5541,814],{"class":782},[84,5543,5544,5546,5548],{"class":86,"line":636},[84,5545,1670],{"class":782},[84,5547,811],{"class":786},[84,5549,814],{"class":782},[84,5551,5552,5554,5556],{"class":86,"line":793},[84,5553,1690],{"class":782},[84,5555,823],{"class":786},[84,5557,814],{"class":782},[84,5559,5560,5562,5564,5567,5569,5572],{"class":86,"line":805},[84,5561,1716],{"class":782},[84,5563,3609],{"class":786},[84,5565,5566],{"class":90}," radius",[84,5568,840],{"class":782},[84,5570,5571],{"class":94},"\"0.001\"",[84,5573,846],{"class":782},[84,5575,5576,5578,5580],{"class":86,"line":817},[84,5577,1741],{"class":782},[84,5579,823],{"class":786},[84,5581,814],{"class":782},[84,5583,5584,5586,5588],{"class":86,"line":828},[84,5585,1750],{"class":782},[84,5587,811],{"class":786},[84,5589,814],{"class":782},[84,5591,5592,5594,5596],{"class":86,"line":849},[84,5593,1759],{"class":782},[84,5595,799],{"class":786},[84,5597,814],{"class":782},[76,5599,5601],{"className":767,"code":5600,"language":769,"meta":19,"style":19},"    \u003Cjoint name=\"baselink2basefootprint\" type=\"fixed\">\n      \u003Cparent link=\"base_footprint\"/>\n      \u003Cchild link=\"base_link\"/>\n      \u003Corigin xyz=\"0.0 0.0 0.05\"/>\n    \u003C/joint>\n",[71,5602,5603,5625,5639,5653,5668],{"__ignoreMap":19},[84,5604,5605,5607,5609,5611,5613,5616,5618,5620,5623],{"class":86,"line":87},[84,5606,1670],{"class":782},[84,5608,4645],{"class":786},[84,5610,1653],{"class":90},[84,5612,840],{"class":782},[84,5614,5615],{"class":94},"\"baselink2basefootprint\"",[84,5617,5351],{"class":90},[84,5619,840],{"class":782},[84,5621,5622],{"class":94},"\"fixed\"",[84,5624,814],{"class":782},[84,5626,5627,5629,5631,5633,5635,5637],{"class":86,"line":636},[84,5628,1690],{"class":782},[84,5630,4492],{"class":786},[84,5632,5367],{"class":90},[84,5634,840],{"class":782},[84,5636,5539],{"class":94},[84,5638,846],{"class":782},[84,5640,5641,5643,5645,5647,5649,5651],{"class":86,"line":793},[84,5642,1690],{"class":782},[84,5644,4507],{"class":786},[84,5646,5367],{"class":90},[84,5648,840],{"class":782},[84,5650,1679],{"class":94},[84,5652,846],{"class":782},[84,5654,5655,5657,5659,5661,5663,5666],{"class":86,"line":805},[84,5656,1690],{"class":782},[84,5658,3633],{"class":786},[84,5660,3930],{"class":90},[84,5662,840],{"class":782},[84,5664,5665],{"class":94},"\"0.0 0.0 0.05\"",[84,5667,846],{"class":782},[84,5669,5670,5672,5674],{"class":86,"line":817},[84,5671,1750],{"class":782},[84,5673,4645],{"class":786},[84,5675,814],{"class":782},[14,5677,5678],{},"Z的偏移量要填下沉底盘的距离，也就是整车底盘的一半。",[14,5680,5681,5684],{},[17,5682],{"alt":19,"src":5683},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1540.webp",[17,5685],{"alt":19,"src":5686},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1541.webp",[14,5688,5689],{},"修改参考坐标系",[14,5691,5692],{},"其实这个优化，可以不做，影响不大。但是建议用有basefootprint版本的。",[76,5694,5696],{"className":767,"code":5695,"language":769,"meta":19,"style":19},"\n \u003Crobot name=\"base_footprint_demo\">\n\n  \u003Cmaterial name=\"yellow\">\n    \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n  \u003C/material>\n  \u003Cmaterial name=\"red\">\n    \u003Ccolor rgba=\"0.8 0.1 0.1 0.8\" />\n  \u003C/material>\n\n  \u003Clink name=\"base_footprint\">\n    \u003Cvisual>\n      \u003Cgeometry>\n          \u003Csphere radius=\"0.001\"/>\n      \u003C/geometry>\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Clink name=\"base_link\">\n    \u003Cvisual>\n\n        \u003Cgeometry>\n            \u003Cbox size=\"0.5 0.3 0.1\" />\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n        \u003Cmaterial name=\"yellow\"/>\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"baselink2basefootprint\" type=\"fixed\">\n    \u003Cparent link=\"base_footprint\"/>\n    \u003Cchild link=\"base_link\"/>\n    \u003Corigin xyz=\"0.0 0.0 0.05\"/>\n  \u003C/joint>\n\n  \u003Clink name=\"camera\">\n      \u003Cvisual>\n          \u003Cgeometry>\n              \u003Cbox size=\"0.02 0.05 0.05\" />\n          \u003C/geometry>\n          \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n          \u003Cmaterial name=\"red\" />\n      \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"camera2baselink\" type=\"fixed\">\n      \u003Cparent link=\"base_link\"/>\n      \u003Cchild link=\"camera\" />\n\n      \u003Corigin xyz=\"0.2 0 0.075\" rpy=\"0 0 0\" />\n      \u003Caxis xyz=\"0 0 1\" />\n  \u003C/joint>\n\n\u003C/robot>\n",[71,5697,5698,5702,5717,5721,5735,5749,5757,5771,5785,5793,5797,5811,5819,5827,5841,5849,5857,5865,5869,5883,5891,5895,5903,5917,5925,5945,5959,5967,5975,5979,5999,6013,6027,6041,6049,6053,6067,6075,6083,6097,6105,6125,6139,6147,6155,6159,6179,6193,6207,6211,6231,6245,6253,6257],{"__ignoreMap":19},[84,5699,5700],{"class":86,"line":87},[84,5701,777],{"emptyLinePlaceholder":776},[84,5703,5704,5706,5708,5710,5712,5715],{"class":86,"line":636},[84,5705,783],{"class":782},[84,5707,787],{"class":786},[84,5709,1653],{"class":90},[84,5711,840],{"class":782},[84,5713,5714],{"class":94},"\"base_footprint_demo\"",[84,5716,814],{"class":782},[84,5718,5719],{"class":86,"line":793},[84,5720,777],{"emptyLinePlaceholder":776},[84,5722,5723,5725,5727,5729,5731,5733],{"class":86,"line":805},[84,5724,3815],{"class":782},[84,5726,3655],{"class":786},[84,5728,1653],{"class":90},[84,5730,840],{"class":782},[84,5732,3824],{"class":94},[84,5734,814],{"class":782},[84,5736,5737,5739,5741,5743,5745,5747],{"class":86,"line":817},[84,5738,1670],{"class":782},[84,5740,3670],{"class":786},[84,5742,3835],{"class":90},[84,5744,840],{"class":782},[84,5746,3840],{"class":94},[84,5748,3843],{"class":782},[84,5750,5751,5753,5755],{"class":86,"line":828},[84,5752,1759],{"class":782},[84,5754,3655],{"class":786},[84,5756,814],{"class":782},[84,5758,5759,5761,5763,5765,5767,5769],{"class":86,"line":849},[84,5760,3815],{"class":782},[84,5762,3655],{"class":786},[84,5764,1653],{"class":90},[84,5766,840],{"class":782},[84,5768,5092],{"class":94},[84,5770,814],{"class":782},[84,5772,5773,5775,5777,5779,5781,5783],{"class":86,"line":859},[84,5774,1670],{"class":782},[84,5776,3670],{"class":786},[84,5778,3835],{"class":90},[84,5780,840],{"class":782},[84,5782,5107],{"class":94},[84,5784,3843],{"class":782},[84,5786,5787,5789,5791],{"class":86,"line":869},[84,5788,1759],{"class":782},[84,5790,3655],{"class":786},[84,5792,814],{"class":782},[84,5794,5795],{"class":86,"line":879},[84,5796,777],{"emptyLinePlaceholder":776},[84,5798,5799,5801,5803,5805,5807,5809],{"class":86,"line":1012},[84,5800,3815],{"class":782},[84,5802,799],{"class":786},[84,5804,1653],{"class":90},[84,5806,840],{"class":782},[84,5808,5539],{"class":94},[84,5810,814],{"class":782},[84,5812,5813,5815,5817],{"class":86,"line":1017},[84,5814,1670],{"class":782},[84,5816,811],{"class":786},[84,5818,814],{"class":782},[84,5820,5821,5823,5825],{"class":86,"line":1034},[84,5822,1690],{"class":782},[84,5824,823],{"class":786},[84,5826,814],{"class":782},[84,5828,5829,5831,5833,5835,5837,5839],{"class":86,"line":1056},[84,5830,1716],{"class":782},[84,5832,3609],{"class":786},[84,5834,5566],{"class":90},[84,5836,840],{"class":782},[84,5838,5571],{"class":94},[84,5840,846],{"class":782},[84,5842,5843,5845,5847],{"class":86,"line":1076},[84,5844,1741],{"class":782},[84,5846,823],{"class":786},[84,5848,814],{"class":782},[84,5850,5851,5853,5855],{"class":86,"line":1107},[84,5852,1750],{"class":782},[84,5854,811],{"class":786},[84,5856,814],{"class":782},[84,5858,5859,5861,5863],{"class":86,"line":1112},[84,5860,1759],{"class":782},[84,5862,799],{"class":786},[84,5864,814],{"class":782},[84,5866,5867],{"class":86,"line":1118},[84,5868,777],{"emptyLinePlaceholder":776},[84,5870,5871,5873,5875,5877,5879,5881],{"class":86,"line":1123},[84,5872,3815],{"class":782},[84,5874,799],{"class":786},[84,5876,1653],{"class":90},[84,5878,840],{"class":782},[84,5880,1679],{"class":94},[84,5882,814],{"class":782},[84,5884,5885,5887,5889],{"class":86,"line":1129},[84,5886,1670],{"class":782},[84,5888,811],{"class":786},[84,5890,814],{"class":782},[84,5892,5893],{"class":86,"line":1151},[84,5894,777],{"emptyLinePlaceholder":776},[84,5896,5897,5899,5901],{"class":86,"line":1162},[84,5898,1703],{"class":782},[84,5900,823],{"class":786},[84,5902,814],{"class":782},[84,5904,5905,5907,5909,5911,5913,5915],{"class":86,"line":1176},[84,5906,3894],{"class":782},[84,5908,834],{"class":786},[84,5910,837],{"class":90},[84,5912,840],{"class":782},[84,5914,3903],{"class":94},[84,5916,3843],{"class":782},[84,5918,5919,5921,5923],{"class":86,"line":1188},[84,5920,1732],{"class":782},[84,5922,823],{"class":786},[84,5924,814],{"class":782},[84,5926,5927,5929,5931,5933,5935,5937,5939,5941,5943],{"class":86,"line":1205},[84,5928,1703],{"class":782},[84,5930,3633],{"class":786},[84,5932,3930],{"class":90},[84,5934,840],{"class":782},[84,5936,3935],{"class":94},[84,5938,3938],{"class":90},[84,5940,840],{"class":782},[84,5942,3935],{"class":94},[84,5944,3843],{"class":782},[84,5946,5947,5949,5951,5953,5955,5957],{"class":86,"line":1211},[84,5948,1703],{"class":782},[84,5950,3655],{"class":786},[84,5952,1653],{"class":90},[84,5954,840],{"class":782},[84,5956,3824],{"class":94},[84,5958,846],{"class":782},[84,5960,5961,5963,5965],{"class":86,"line":1216},[84,5962,1750],{"class":782},[84,5964,811],{"class":786},[84,5966,814],{"class":782},[84,5968,5969,5971,5973],{"class":86,"line":1222},[84,5970,1759],{"class":782},[84,5972,799],{"class":786},[84,5974,814],{"class":782},[84,5976,5977],{"class":86,"line":1232},[84,5978,777],{"emptyLinePlaceholder":776},[84,5980,5981,5983,5985,5987,5989,5991,5993,5995,5997],{"class":86,"line":1244},[84,5982,3815],{"class":782},[84,5984,4645],{"class":786},[84,5986,1653],{"class":90},[84,5988,840],{"class":782},[84,5990,5615],{"class":94},[84,5992,5351],{"class":90},[84,5994,840],{"class":782},[84,5996,5622],{"class":94},[84,5998,814],{"class":782},[84,6000,6001,6003,6005,6007,6009,6011],{"class":86,"line":1254},[84,6002,1670],{"class":782},[84,6004,4492],{"class":786},[84,6006,5367],{"class":90},[84,6008,840],{"class":782},[84,6010,5539],{"class":94},[84,6012,846],{"class":782},[84,6014,6015,6017,6019,6021,6023,6025],{"class":86,"line":1259},[84,6016,1670],{"class":782},[84,6018,4507],{"class":786},[84,6020,5367],{"class":90},[84,6022,840],{"class":782},[84,6024,1679],{"class":94},[84,6026,846],{"class":782},[84,6028,6029,6031,6033,6035,6037,6039],{"class":86,"line":1264},[84,6030,1670],{"class":782},[84,6032,3633],{"class":786},[84,6034,3930],{"class":90},[84,6036,840],{"class":782},[84,6038,5665],{"class":94},[84,6040,846],{"class":782},[84,6042,6043,6045,6047],{"class":86,"line":1270},[84,6044,1759],{"class":782},[84,6046,4645],{"class":786},[84,6048,814],{"class":782},[84,6050,6051],{"class":86,"line":1280},[84,6052,777],{"emptyLinePlaceholder":776},[84,6054,6055,6057,6059,6061,6063,6065],{"class":86,"line":1292},[84,6056,3815],{"class":782},[84,6058,799],{"class":786},[84,6060,1653],{"class":90},[84,6062,840],{"class":782},[84,6064,5240],{"class":94},[84,6066,814],{"class":782},[84,6068,6069,6071,6073],{"class":86,"line":1302},[84,6070,1690],{"class":782},[84,6072,811],{"class":786},[84,6074,814],{"class":782},[84,6076,6077,6079,6081],{"class":86,"line":1307},[84,6078,1716],{"class":782},[84,6080,823],{"class":786},[84,6082,814],{"class":782},[84,6084,6085,6087,6089,6091,6093,6095],{"class":86,"line":1313},[84,6086,4248],{"class":782},[84,6088,834],{"class":786},[84,6090,837],{"class":90},[84,6092,840],{"class":782},[84,6094,5271],{"class":94},[84,6096,3843],{"class":782},[84,6098,6099,6101,6103],{"class":86,"line":1318},[84,6100,4267],{"class":782},[84,6102,823],{"class":786},[84,6104,814],{"class":782},[84,6106,6107,6109,6111,6113,6115,6117,6119,6121,6123],{"class":86,"line":1327},[84,6108,1716],{"class":782},[84,6110,3633],{"class":786},[84,6112,3930],{"class":90},[84,6114,840],{"class":782},[84,6116,3935],{"class":94},[84,6118,3938],{"class":90},[84,6120,840],{"class":782},[84,6122,3935],{"class":94},[84,6124,3843],{"class":782},[84,6126,6127,6129,6131,6133,6135,6137],{"class":86,"line":1333},[84,6128,1716],{"class":782},[84,6130,3655],{"class":786},[84,6132,1653],{"class":90},[84,6134,840],{"class":782},[84,6136,5092],{"class":94},[84,6138,3843],{"class":782},[84,6140,6141,6143,6145],{"class":86,"line":1339},[84,6142,1741],{"class":782},[84,6144,811],{"class":786},[84,6146,814],{"class":782},[84,6148,6149,6151,6153],{"class":86,"line":1345},[84,6150,1759],{"class":782},[84,6152,799],{"class":786},[84,6154,814],{"class":782},[84,6156,6157],{"class":86,"line":1351},[84,6158,777],{"emptyLinePlaceholder":776},[84,6160,6161,6163,6165,6167,6169,6171,6173,6175,6177],{"class":86,"line":2236},[84,6162,3815],{"class":782},[84,6164,4645],{"class":786},[84,6166,1653],{"class":90},[84,6168,840],{"class":782},[84,6170,5348],{"class":94},[84,6172,5351],{"class":90},[84,6174,840],{"class":782},[84,6176,5622],{"class":94},[84,6178,814],{"class":782},[84,6180,6181,6183,6185,6187,6189,6191],{"class":86,"line":2241},[84,6182,1690],{"class":782},[84,6184,4492],{"class":786},[84,6186,5367],{"class":90},[84,6188,840],{"class":782},[84,6190,1679],{"class":94},[84,6192,846],{"class":782},[84,6194,6195,6197,6199,6201,6203,6205],{"class":86,"line":2251},[84,6196,1690],{"class":782},[84,6198,4507],{"class":786},[84,6200,5367],{"class":90},[84,6202,840],{"class":782},[84,6204,5240],{"class":94},[84,6206,3843],{"class":782},[84,6208,6209],{"class":86,"line":2262},[84,6210,777],{"emptyLinePlaceholder":776},[84,6212,6213,6215,6217,6219,6221,6223,6225,6227,6229],{"class":86,"line":2271},[84,6214,1690],{"class":782},[84,6216,3633],{"class":786},[84,6218,3930],{"class":90},[84,6220,840],{"class":782},[84,6222,5404],{"class":94},[84,6224,3938],{"class":90},[84,6226,840],{"class":782},[84,6228,3935],{"class":94},[84,6230,3843],{"class":782},[84,6232,6233,6235,6237,6239,6241,6243],{"class":86,"line":2276},[84,6234,1690],{"class":782},[84,6236,5419],{"class":786},[84,6238,3930],{"class":90},[84,6240,840],{"class":782},[84,6242,5426],{"class":94},[84,6244,3843],{"class":782},[84,6246,6247,6249,6251],{"class":86,"line":2281},[84,6248,1759],{"class":782},[84,6250,4645],{"class":786},[84,6252,814],{"class":782},[84,6254,6255],{"class":86,"line":2290},[84,6256,777],{"emptyLinePlaceholder":776},[84,6258,6259,6261,6263],{"class":86,"line":2898},[84,6260,3983],{"class":782},[84,6262,787],{"class":786},[84,6264,814],{"class":782},[645,6266,4760],{"id":6267},"练习-1",[14,6269,6270],{},[17,6271],{"alt":19,"src":6272},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1542.webp",[14,6274,6275],{},"没必要太深入练习，咱们可以直接用SolidWorks建模，更为友好。",[14,6277,6278],{},[17,6279],{"alt":19,"src":6280},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1543.webp",[76,6282,6284],{"className":767,"code":6283,"language":769,"meta":19,"style":19},"\n \u003Crobot name=\"exercise_demo\">\n\n  \u003Cmaterial name=\"yellow\">\n    \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n  \u003C/material>\n  \u003Cmaterial name=\"red\">\n    \u003Ccolor rgba=\"0.8 0.1 0.1 0.8\" />\n  \u003C/material>\n  \u003Cmaterial name=\"gray\">\n    \u003Ccolor rgba=\"0.2 0.2 0.2 0.8\" />\n  \u003C/material>\n\n  \u003Clink name=\"base_footprint\">\n    \u003Cvisual>\n      \u003Cgeometry>\n          \u003Csphere radius=\"0.001\"/>\n      \u003C/geometry>\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Clink name=\"base_link\">\n    \u003Cvisual>\n\n        \u003Cgeometry>\n            \u003Cbox size=\"0.2 0.12 0.07\" />\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n        \u003Cmaterial name=\"yellow\"/>\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"baselink2basefootprint\" type=\"fixed\">\n    \u003Cparent link=\"base_footprint\"/>\n    \u003Cchild link=\"base_link\"/>\n    \u003Corigin xyz=\"0.0 0.0 0.05\"/>\n  \u003C/joint>\n\n  \u003Clink name=\"front_left_wheel\">\n      \u003Cvisual>\n          \u003Cgeometry>\n              \u003Ccylinder radius=\"0.025\" length=\"0.02\"/>\n          \u003C/geometry>\n          \u003Corigin xyz=\"0 0 0\" rpy=\"1.57 0 0\" />\n          \u003Cmaterial name=\"gray\" />\n      \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"frontleftwheel2baselink\" type=\"continuous\">\n      \u003Cparent link=\"base_link\"/>\n      \u003Cchild link=\"front_left_wheel\" />\n\n      \u003Corigin xyz=\"0.075 0.06 -0.025\" rpy=\"0 0 0\" />\n      \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Clink name=\"front_right_wheel\">\n    \u003Cvisual>\n        \u003Cgeometry>\n            \u003Ccylinder radius=\"0.025\" length=\"0.02\"/>\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57 0 0\" />\n        \u003Cmaterial name=\"gray\" />\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"frontrightwheel2baselink\" type=\"continuous\">\n      \u003Cparent link=\"base_link\"/>\n      \u003Cchild link=\"front_right_wheel\" />\n\n      \u003Corigin xyz=\"0.075 -0.06 -0.025\" rpy=\"0 0 0\" />\n      \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Clink name=\"back_left_wheel\">\n    \u003Cvisual>\n        \u003Cgeometry>\n            \u003Ccylinder radius=\"0.025\" length=\"0.02\"/>\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57 0 0\" />\n        \u003Cmaterial name=\"gray\" />\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"backleftwheel2baselink\" type=\"continuous\">\n    \u003Cparent link=\"base_link\"/>\n    \u003Cchild link=\"back_left_wheel\" />\n\n    \u003Corigin xyz=\"-0.075 0.06 -0.025\" rpy=\"0 0 0\" />\n    \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Clink name=\"back_right_wheel\">\n    \u003Cvisual>\n        \u003Cgeometry>\n            \u003Ccylinder radius=\"0.025\" length=\"0.02\"/>\n        \u003C/geometry>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57 0 0\" />\n        \u003Cmaterial name=\"gray\" />\n    \u003C/visual>\n  \u003C/link>\n\n  \u003Cjoint name=\"backrightwheel2baselink\" type=\"continuous\">\n    \u003Cparent link=\"base_link\"/>\n    \u003Cchild link=\"back_right_wheel\" />\n\n    \u003Corigin xyz=\"-0.075 -0.06 -0.025\" rpy=\"0 0 0\" />\n    \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n\u003C/robot>\n",[71,6285,6286,6290,6305,6309,6323,6337,6345,6359,6373,6381,6396,6411,6419,6423,6437,6445,6453,6467,6475,6483,6491,6495,6509,6517,6521,6529,6544,6552,6572,6586,6594,6602,6606,6626,6640,6654,6668,6676,6680,6695,6703,6711,6734,6742,6763,6777,6785,6793,6797,6818,6832,6846,6850,6871,6886,6894,6898,6913,6921,6929,6949,6957,6977,6991,6999,7007,7011,7032,7046,7060,7064,7085,7099,7107,7111,7126,7134,7142,7162,7170,7190,7205,7214,7223,7228,7250,7265,7280,7285,7307,7322,7331,7336,7352,7361,7370,7391,7400,7421,7436,7445,7454,7459,7481,7496,7511,7516,7538,7553,7562,7567],{"__ignoreMap":19},[84,6287,6288],{"class":86,"line":87},[84,6289,777],{"emptyLinePlaceholder":776},[84,6291,6292,6294,6296,6298,6300,6303],{"class":86,"line":636},[84,6293,783],{"class":782},[84,6295,787],{"class":786},[84,6297,1653],{"class":90},[84,6299,840],{"class":782},[84,6301,6302],{"class":94},"\"exercise_demo\"",[84,6304,814],{"class":782},[84,6306,6307],{"class":86,"line":793},[84,6308,777],{"emptyLinePlaceholder":776},[84,6310,6311,6313,6315,6317,6319,6321],{"class":86,"line":805},[84,6312,3815],{"class":782},[84,6314,3655],{"class":786},[84,6316,1653],{"class":90},[84,6318,840],{"class":782},[84,6320,3824],{"class":94},[84,6322,814],{"class":782},[84,6324,6325,6327,6329,6331,6333,6335],{"class":86,"line":817},[84,6326,1670],{"class":782},[84,6328,3670],{"class":786},[84,6330,3835],{"class":90},[84,6332,840],{"class":782},[84,6334,3840],{"class":94},[84,6336,3843],{"class":782},[84,6338,6339,6341,6343],{"class":86,"line":828},[84,6340,1759],{"class":782},[84,6342,3655],{"class":786},[84,6344,814],{"class":782},[84,6346,6347,6349,6351,6353,6355,6357],{"class":86,"line":849},[84,6348,3815],{"class":782},[84,6350,3655],{"class":786},[84,6352,1653],{"class":90},[84,6354,840],{"class":782},[84,6356,5092],{"class":94},[84,6358,814],{"class":782},[84,6360,6361,6363,6365,6367,6369,6371],{"class":86,"line":859},[84,6362,1670],{"class":782},[84,6364,3670],{"class":786},[84,6366,3835],{"class":90},[84,6368,840],{"class":782},[84,6370,5107],{"class":94},[84,6372,3843],{"class":782},[84,6374,6375,6377,6379],{"class":86,"line":869},[84,6376,1759],{"class":782},[84,6378,3655],{"class":786},[84,6380,814],{"class":782},[84,6382,6383,6385,6387,6389,6391,6394],{"class":86,"line":879},[84,6384,3815],{"class":782},[84,6386,3655],{"class":786},[84,6388,1653],{"class":90},[84,6390,840],{"class":782},[84,6392,6393],{"class":94},"\"gray\"",[84,6395,814],{"class":782},[84,6397,6398,6400,6402,6404,6406,6409],{"class":86,"line":1012},[84,6399,1670],{"class":782},[84,6401,3670],{"class":786},[84,6403,3835],{"class":90},[84,6405,840],{"class":782},[84,6407,6408],{"class":94},"\"0.2 0.2 0.2 0.8\"",[84,6410,3843],{"class":782},[84,6412,6413,6415,6417],{"class":86,"line":1017},[84,6414,1759],{"class":782},[84,6416,3655],{"class":786},[84,6418,814],{"class":782},[84,6420,6421],{"class":86,"line":1034},[84,6422,777],{"emptyLinePlaceholder":776},[84,6424,6425,6427,6429,6431,6433,6435],{"class":86,"line":1056},[84,6426,3815],{"class":782},[84,6428,799],{"class":786},[84,6430,1653],{"class":90},[84,6432,840],{"class":782},[84,6434,5539],{"class":94},[84,6436,814],{"class":782},[84,6438,6439,6441,6443],{"class":86,"line":1076},[84,6440,1670],{"class":782},[84,6442,811],{"class":786},[84,6444,814],{"class":782},[84,6446,6447,6449,6451],{"class":86,"line":1107},[84,6448,1690],{"class":782},[84,6450,823],{"class":786},[84,6452,814],{"class":782},[84,6454,6455,6457,6459,6461,6463,6465],{"class":86,"line":1112},[84,6456,1716],{"class":782},[84,6458,3609],{"class":786},[84,6460,5566],{"class":90},[84,6462,840],{"class":782},[84,6464,5571],{"class":94},[84,6466,846],{"class":782},[84,6468,6469,6471,6473],{"class":86,"line":1118},[84,6470,1741],{"class":782},[84,6472,823],{"class":786},[84,6474,814],{"class":782},[84,6476,6477,6479,6481],{"class":86,"line":1123},[84,6478,1750],{"class":782},[84,6480,811],{"class":786},[84,6482,814],{"class":782},[84,6484,6485,6487,6489],{"class":86,"line":1129},[84,6486,1759],{"class":782},[84,6488,799],{"class":786},[84,6490,814],{"class":782},[84,6492,6493],{"class":86,"line":1151},[84,6494,777],{"emptyLinePlaceholder":776},[84,6496,6497,6499,6501,6503,6505,6507],{"class":86,"line":1162},[84,6498,3815],{"class":782},[84,6500,799],{"class":786},[84,6502,1653],{"class":90},[84,6504,840],{"class":782},[84,6506,1679],{"class":94},[84,6508,814],{"class":782},[84,6510,6511,6513,6515],{"class":86,"line":1176},[84,6512,1670],{"class":782},[84,6514,811],{"class":786},[84,6516,814],{"class":782},[84,6518,6519],{"class":86,"line":1188},[84,6520,777],{"emptyLinePlaceholder":776},[84,6522,6523,6525,6527],{"class":86,"line":1205},[84,6524,1703],{"class":782},[84,6526,823],{"class":786},[84,6528,814],{"class":782},[84,6530,6531,6533,6535,6537,6539,6542],{"class":86,"line":1211},[84,6532,3894],{"class":782},[84,6534,834],{"class":786},[84,6536,837],{"class":90},[84,6538,840],{"class":782},[84,6540,6541],{"class":94},"\"0.2 0.12 0.07\"",[84,6543,3843],{"class":782},[84,6545,6546,6548,6550],{"class":86,"line":1216},[84,6547,1732],{"class":782},[84,6549,823],{"class":786},[84,6551,814],{"class":782},[84,6553,6554,6556,6558,6560,6562,6564,6566,6568,6570],{"class":86,"line":1222},[84,6555,1703],{"class":782},[84,6557,3633],{"class":786},[84,6559,3930],{"class":90},[84,6561,840],{"class":782},[84,6563,3935],{"class":94},[84,6565,3938],{"class":90},[84,6567,840],{"class":782},[84,6569,3935],{"class":94},[84,6571,3843],{"class":782},[84,6573,6574,6576,6578,6580,6582,6584],{"class":86,"line":1232},[84,6575,1703],{"class":782},[84,6577,3655],{"class":786},[84,6579,1653],{"class":90},[84,6581,840],{"class":782},[84,6583,3824],{"class":94},[84,6585,846],{"class":782},[84,6587,6588,6590,6592],{"class":86,"line":1244},[84,6589,1750],{"class":782},[84,6591,811],{"class":786},[84,6593,814],{"class":782},[84,6595,6596,6598,6600],{"class":86,"line":1254},[84,6597,1759],{"class":782},[84,6599,799],{"class":786},[84,6601,814],{"class":782},[84,6603,6604],{"class":86,"line":1259},[84,6605,777],{"emptyLinePlaceholder":776},[84,6607,6608,6610,6612,6614,6616,6618,6620,6622,6624],{"class":86,"line":1264},[84,6609,3815],{"class":782},[84,6611,4645],{"class":786},[84,6613,1653],{"class":90},[84,6615,840],{"class":782},[84,6617,5615],{"class":94},[84,6619,5351],{"class":90},[84,6621,840],{"class":782},[84,6623,5622],{"class":94},[84,6625,814],{"class":782},[84,6627,6628,6630,6632,6634,6636,6638],{"class":86,"line":1270},[84,6629,1670],{"class":782},[84,6631,4492],{"class":786},[84,6633,5367],{"class":90},[84,6635,840],{"class":782},[84,6637,5539],{"class":94},[84,6639,846],{"class":782},[84,6641,6642,6644,6646,6648,6650,6652],{"class":86,"line":1280},[84,6643,1670],{"class":782},[84,6645,4507],{"class":786},[84,6647,5367],{"class":90},[84,6649,840],{"class":782},[84,6651,1679],{"class":94},[84,6653,846],{"class":782},[84,6655,6656,6658,6660,6662,6664,6666],{"class":86,"line":1292},[84,6657,1670],{"class":782},[84,6659,3633],{"class":786},[84,6661,3930],{"class":90},[84,6663,840],{"class":782},[84,6665,5665],{"class":94},[84,6667,846],{"class":782},[84,6669,6670,6672,6674],{"class":86,"line":1302},[84,6671,1759],{"class":782},[84,6673,4645],{"class":786},[84,6675,814],{"class":782},[84,6677,6678],{"class":86,"line":1307},[84,6679,777],{"emptyLinePlaceholder":776},[84,6681,6682,6684,6686,6688,6690,6693],{"class":86,"line":1313},[84,6683,3815],{"class":782},[84,6685,799],{"class":786},[84,6687,1653],{"class":90},[84,6689,840],{"class":782},[84,6691,6692],{"class":94},"\"front_left_wheel\"",[84,6694,814],{"class":782},[84,6696,6697,6699,6701],{"class":86,"line":1318},[84,6698,1690],{"class":782},[84,6700,811],{"class":786},[84,6702,814],{"class":782},[84,6704,6705,6707,6709],{"class":86,"line":1327},[84,6706,1716],{"class":782},[84,6708,823],{"class":786},[84,6710,814],{"class":782},[84,6712,6713,6715,6717,6719,6721,6724,6727,6729,6732],{"class":86,"line":1333},[84,6714,4248],{"class":782},[84,6716,3601],{"class":786},[84,6718,5566],{"class":90},[84,6720,840],{"class":782},[84,6722,6723],{"class":94},"\"0.025\"",[84,6725,6726],{"class":90}," length",[84,6728,840],{"class":782},[84,6730,6731],{"class":94},"\"0.02\"",[84,6733,846],{"class":782},[84,6735,6736,6738,6740],{"class":86,"line":1339},[84,6737,4267],{"class":782},[84,6739,823],{"class":786},[84,6741,814],{"class":782},[84,6743,6744,6746,6748,6750,6752,6754,6756,6758,6761],{"class":86,"line":1345},[84,6745,1716],{"class":782},[84,6747,3633],{"class":786},[84,6749,3930],{"class":90},[84,6751,840],{"class":782},[84,6753,3935],{"class":94},[84,6755,3938],{"class":90},[84,6757,840],{"class":782},[84,6759,6760],{"class":94},"\"1.57 0 0\"",[84,6762,3843],{"class":782},[84,6764,6765,6767,6769,6771,6773,6775],{"class":86,"line":1351},[84,6766,1716],{"class":782},[84,6768,3655],{"class":786},[84,6770,1653],{"class":90},[84,6772,840],{"class":782},[84,6774,6393],{"class":94},[84,6776,3843],{"class":782},[84,6778,6779,6781,6783],{"class":86,"line":2236},[84,6780,1741],{"class":782},[84,6782,811],{"class":786},[84,6784,814],{"class":782},[84,6786,6787,6789,6791],{"class":86,"line":2241},[84,6788,1759],{"class":782},[84,6790,799],{"class":786},[84,6792,814],{"class":782},[84,6794,6795],{"class":86,"line":2251},[84,6796,777],{"emptyLinePlaceholder":776},[84,6798,6799,6801,6803,6805,6807,6810,6812,6814,6816],{"class":86,"line":2262},[84,6800,3815],{"class":782},[84,6802,4645],{"class":786},[84,6804,1653],{"class":90},[84,6806,840],{"class":782},[84,6808,6809],{"class":94},"\"frontleftwheel2baselink\"",[84,6811,5351],{"class":90},[84,6813,840],{"class":782},[84,6815,5356],{"class":94},[84,6817,814],{"class":782},[84,6819,6820,6822,6824,6826,6828,6830],{"class":86,"line":2271},[84,6821,1690],{"class":782},[84,6823,4492],{"class":786},[84,6825,5367],{"class":90},[84,6827,840],{"class":782},[84,6829,1679],{"class":94},[84,6831,846],{"class":782},[84,6833,6834,6836,6838,6840,6842,6844],{"class":86,"line":2276},[84,6835,1690],{"class":782},[84,6837,4507],{"class":786},[84,6839,5367],{"class":90},[84,6841,840],{"class":782},[84,6843,6692],{"class":94},[84,6845,3843],{"class":782},[84,6847,6848],{"class":86,"line":2281},[84,6849,777],{"emptyLinePlaceholder":776},[84,6851,6852,6854,6856,6858,6860,6863,6865,6867,6869],{"class":86,"line":2290},[84,6853,1690],{"class":782},[84,6855,3633],{"class":786},[84,6857,3930],{"class":90},[84,6859,840],{"class":782},[84,6861,6862],{"class":94},"\"0.075 0.06 -0.025\"",[84,6864,3938],{"class":90},[84,6866,840],{"class":782},[84,6868,3935],{"class":94},[84,6870,3843],{"class":782},[84,6872,6873,6875,6877,6879,6881,6884],{"class":86,"line":2898},[84,6874,1690],{"class":782},[84,6876,5419],{"class":786},[84,6878,3930],{"class":90},[84,6880,840],{"class":782},[84,6882,6883],{"class":94},"\"0 1 0\"",[84,6885,3843],{"class":782},[84,6887,6888,6890,6892],{"class":86,"line":2909},[84,6889,1759],{"class":782},[84,6891,4645],{"class":786},[84,6893,814],{"class":782},[84,6895,6896],{"class":86,"line":2937},[84,6897,777],{"emptyLinePlaceholder":776},[84,6899,6900,6902,6904,6906,6908,6911],{"class":86,"line":2942},[84,6901,3815],{"class":782},[84,6903,799],{"class":786},[84,6905,1653],{"class":90},[84,6907,840],{"class":782},[84,6909,6910],{"class":94},"\"front_right_wheel\"",[84,6912,814],{"class":782},[84,6914,6915,6917,6919],{"class":86,"line":2947},[84,6916,1670],{"class":782},[84,6918,811],{"class":786},[84,6920,814],{"class":782},[84,6922,6923,6925,6927],{"class":86,"line":2956},[84,6924,1703],{"class":782},[84,6926,823],{"class":786},[84,6928,814],{"class":782},[84,6930,6931,6933,6935,6937,6939,6941,6943,6945,6947],{"class":86,"line":3346},[84,6932,3894],{"class":782},[84,6934,3601],{"class":786},[84,6936,5566],{"class":90},[84,6938,840],{"class":782},[84,6940,6723],{"class":94},[84,6942,6726],{"class":90},[84,6944,840],{"class":782},[84,6946,6731],{"class":94},[84,6948,846],{"class":782},[84,6950,6951,6953,6955],{"class":86,"line":3352},[84,6952,1732],{"class":782},[84,6954,823],{"class":786},[84,6956,814],{"class":782},[84,6958,6959,6961,6963,6965,6967,6969,6971,6973,6975],{"class":86,"line":3357},[84,6960,1703],{"class":782},[84,6962,3633],{"class":786},[84,6964,3930],{"class":90},[84,6966,840],{"class":782},[84,6968,3935],{"class":94},[84,6970,3938],{"class":90},[84,6972,840],{"class":782},[84,6974,6760],{"class":94},[84,6976,3843],{"class":782},[84,6978,6979,6981,6983,6985,6987,6989],{"class":86,"line":3363},[84,6980,1703],{"class":782},[84,6982,3655],{"class":786},[84,6984,1653],{"class":90},[84,6986,840],{"class":782},[84,6988,6393],{"class":94},[84,6990,3843],{"class":782},[84,6992,6993,6995,6997],{"class":86,"line":3368},[84,6994,1750],{"class":782},[84,6996,811],{"class":786},[84,6998,814],{"class":782},[84,7000,7001,7003,7005],{"class":86,"line":3374},[84,7002,1759],{"class":782},[84,7004,799],{"class":786},[84,7006,814],{"class":782},[84,7008,7009],{"class":86,"line":3383},[84,7010,777],{"emptyLinePlaceholder":776},[84,7012,7013,7015,7017,7019,7021,7024,7026,7028,7030],{"class":86,"line":3395},[84,7014,3815],{"class":782},[84,7016,4645],{"class":786},[84,7018,1653],{"class":90},[84,7020,840],{"class":782},[84,7022,7023],{"class":94},"\"frontrightwheel2baselink\"",[84,7025,5351],{"class":90},[84,7027,840],{"class":782},[84,7029,5356],{"class":94},[84,7031,814],{"class":782},[84,7033,7034,7036,7038,7040,7042,7044],{"class":86,"line":3405},[84,7035,1690],{"class":782},[84,7037,4492],{"class":786},[84,7039,5367],{"class":90},[84,7041,840],{"class":782},[84,7043,1679],{"class":94},[84,7045,846],{"class":782},[84,7047,7048,7050,7052,7054,7056,7058],{"class":86,"line":3410},[84,7049,1690],{"class":782},[84,7051,4507],{"class":786},[84,7053,5367],{"class":90},[84,7055,840],{"class":782},[84,7057,6910],{"class":94},[84,7059,3843],{"class":782},[84,7061,7062],{"class":86,"line":3415},[84,7063,777],{"emptyLinePlaceholder":776},[84,7065,7066,7068,7070,7072,7074,7077,7079,7081,7083],{"class":86,"line":3424},[84,7067,1690],{"class":782},[84,7069,3633],{"class":786},[84,7071,3930],{"class":90},[84,7073,840],{"class":782},[84,7075,7076],{"class":94},"\"0.075 -0.06 -0.025\"",[84,7078,3938],{"class":90},[84,7080,840],{"class":782},[84,7082,3935],{"class":94},[84,7084,3843],{"class":782},[84,7086,7087,7089,7091,7093,7095,7097],{"class":86,"line":3435},[84,7088,1690],{"class":782},[84,7090,5419],{"class":786},[84,7092,3930],{"class":90},[84,7094,840],{"class":782},[84,7096,6883],{"class":94},[84,7098,3843],{"class":782},[84,7100,7101,7103,7105],{"class":86,"line":3446},[84,7102,1759],{"class":782},[84,7104,4645],{"class":786},[84,7106,814],{"class":782},[84,7108,7109],{"class":86,"line":3451},[84,7110,777],{"emptyLinePlaceholder":776},[84,7112,7113,7115,7117,7119,7121,7124],{"class":86,"line":3457},[84,7114,3815],{"class":782},[84,7116,799],{"class":786},[84,7118,1653],{"class":90},[84,7120,840],{"class":782},[84,7122,7123],{"class":94},"\"back_left_wheel\"",[84,7125,814],{"class":782},[84,7127,7128,7130,7132],{"class":86,"line":3471},[84,7129,1670],{"class":782},[84,7131,811],{"class":786},[84,7133,814],{"class":782},[84,7135,7136,7138,7140],{"class":86,"line":3476},[84,7137,1703],{"class":782},[84,7139,823],{"class":786},[84,7141,814],{"class":782},[84,7143,7144,7146,7148,7150,7152,7154,7156,7158,7160],{"class":86,"line":3481},[84,7145,3894],{"class":782},[84,7147,3601],{"class":786},[84,7149,5566],{"class":90},[84,7151,840],{"class":782},[84,7153,6723],{"class":94},[84,7155,6726],{"class":90},[84,7157,840],{"class":782},[84,7159,6731],{"class":94},[84,7161,846],{"class":782},[84,7163,7164,7166,7168],{"class":86,"line":3486},[84,7165,1732],{"class":782},[84,7167,823],{"class":786},[84,7169,814],{"class":782},[84,7171,7172,7174,7176,7178,7180,7182,7184,7186,7188],{"class":86,"line":3495},[84,7173,1703],{"class":782},[84,7175,3633],{"class":786},[84,7177,3930],{"class":90},[84,7179,840],{"class":782},[84,7181,3935],{"class":94},[84,7183,3938],{"class":90},[84,7185,840],{"class":782},[84,7187,6760],{"class":94},[84,7189,3843],{"class":782},[84,7191,7193,7195,7197,7199,7201,7203],{"class":86,"line":7192},81,[84,7194,1703],{"class":782},[84,7196,3655],{"class":786},[84,7198,1653],{"class":90},[84,7200,840],{"class":782},[84,7202,6393],{"class":94},[84,7204,3843],{"class":782},[84,7206,7208,7210,7212],{"class":86,"line":7207},82,[84,7209,1750],{"class":782},[84,7211,811],{"class":786},[84,7213,814],{"class":782},[84,7215,7217,7219,7221],{"class":86,"line":7216},83,[84,7218,1759],{"class":782},[84,7220,799],{"class":786},[84,7222,814],{"class":782},[84,7224,7226],{"class":86,"line":7225},84,[84,7227,777],{"emptyLinePlaceholder":776},[84,7229,7231,7233,7235,7237,7239,7242,7244,7246,7248],{"class":86,"line":7230},85,[84,7232,3815],{"class":782},[84,7234,4645],{"class":786},[84,7236,1653],{"class":90},[84,7238,840],{"class":782},[84,7240,7241],{"class":94},"\"backleftwheel2baselink\"",[84,7243,5351],{"class":90},[84,7245,840],{"class":782},[84,7247,5356],{"class":94},[84,7249,814],{"class":782},[84,7251,7253,7255,7257,7259,7261,7263],{"class":86,"line":7252},86,[84,7254,1670],{"class":782},[84,7256,4492],{"class":786},[84,7258,5367],{"class":90},[84,7260,840],{"class":782},[84,7262,1679],{"class":94},[84,7264,846],{"class":782},[84,7266,7268,7270,7272,7274,7276,7278],{"class":86,"line":7267},87,[84,7269,1670],{"class":782},[84,7271,4507],{"class":786},[84,7273,5367],{"class":90},[84,7275,840],{"class":782},[84,7277,7123],{"class":94},[84,7279,3843],{"class":782},[84,7281,7283],{"class":86,"line":7282},88,[84,7284,777],{"emptyLinePlaceholder":776},[84,7286,7288,7290,7292,7294,7296,7299,7301,7303,7305],{"class":86,"line":7287},89,[84,7289,1670],{"class":782},[84,7291,3633],{"class":786},[84,7293,3930],{"class":90},[84,7295,840],{"class":782},[84,7297,7298],{"class":94},"\"-0.075 0.06 -0.025\"",[84,7300,3938],{"class":90},[84,7302,840],{"class":782},[84,7304,3935],{"class":94},[84,7306,3843],{"class":782},[84,7308,7310,7312,7314,7316,7318,7320],{"class":86,"line":7309},90,[84,7311,1670],{"class":782},[84,7313,5419],{"class":786},[84,7315,3930],{"class":90},[84,7317,840],{"class":782},[84,7319,6883],{"class":94},[84,7321,3843],{"class":782},[84,7323,7325,7327,7329],{"class":86,"line":7324},91,[84,7326,1759],{"class":782},[84,7328,4645],{"class":786},[84,7330,814],{"class":782},[84,7332,7334],{"class":86,"line":7333},92,[84,7335,777],{"emptyLinePlaceholder":776},[84,7337,7339,7341,7343,7345,7347,7350],{"class":86,"line":7338},93,[84,7340,3815],{"class":782},[84,7342,799],{"class":786},[84,7344,1653],{"class":90},[84,7346,840],{"class":782},[84,7348,7349],{"class":94},"\"back_right_wheel\"",[84,7351,814],{"class":782},[84,7353,7355,7357,7359],{"class":86,"line":7354},94,[84,7356,1670],{"class":782},[84,7358,811],{"class":786},[84,7360,814],{"class":782},[84,7362,7364,7366,7368],{"class":86,"line":7363},95,[84,7365,1703],{"class":782},[84,7367,823],{"class":786},[84,7369,814],{"class":782},[84,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389],{"class":86,"line":7372},96,[84,7374,3894],{"class":782},[84,7376,3601],{"class":786},[84,7378,5566],{"class":90},[84,7380,840],{"class":782},[84,7382,6723],{"class":94},[84,7384,6726],{"class":90},[84,7386,840],{"class":782},[84,7388,6731],{"class":94},[84,7390,846],{"class":782},[84,7392,7394,7396,7398],{"class":86,"line":7393},97,[84,7395,1732],{"class":782},[84,7397,823],{"class":786},[84,7399,814],{"class":782},[84,7401,7403,7405,7407,7409,7411,7413,7415,7417,7419],{"class":86,"line":7402},98,[84,7404,1703],{"class":782},[84,7406,3633],{"class":786},[84,7408,3930],{"class":90},[84,7410,840],{"class":782},[84,7412,3935],{"class":94},[84,7414,3938],{"class":90},[84,7416,840],{"class":782},[84,7418,6760],{"class":94},[84,7420,3843],{"class":782},[84,7422,7424,7426,7428,7430,7432,7434],{"class":86,"line":7423},99,[84,7425,1703],{"class":782},[84,7427,3655],{"class":786},[84,7429,1653],{"class":90},[84,7431,840],{"class":782},[84,7433,6393],{"class":94},[84,7435,3843],{"class":782},[84,7437,7439,7441,7443],{"class":86,"line":7438},100,[84,7440,1750],{"class":782},[84,7442,811],{"class":786},[84,7444,814],{"class":782},[84,7446,7448,7450,7452],{"class":86,"line":7447},101,[84,7449,1759],{"class":782},[84,7451,799],{"class":786},[84,7453,814],{"class":782},[84,7455,7457],{"class":86,"line":7456},102,[84,7458,777],{"emptyLinePlaceholder":776},[84,7460,7462,7464,7466,7468,7470,7473,7475,7477,7479],{"class":86,"line":7461},103,[84,7463,3815],{"class":782},[84,7465,4645],{"class":786},[84,7467,1653],{"class":90},[84,7469,840],{"class":782},[84,7471,7472],{"class":94},"\"backrightwheel2baselink\"",[84,7474,5351],{"class":90},[84,7476,840],{"class":782},[84,7478,5356],{"class":94},[84,7480,814],{"class":782},[84,7482,7484,7486,7488,7490,7492,7494],{"class":86,"line":7483},104,[84,7485,1670],{"class":782},[84,7487,4492],{"class":786},[84,7489,5367],{"class":90},[84,7491,840],{"class":782},[84,7493,1679],{"class":94},[84,7495,846],{"class":782},[84,7497,7499,7501,7503,7505,7507,7509],{"class":86,"line":7498},105,[84,7500,1670],{"class":782},[84,7502,4507],{"class":786},[84,7504,5367],{"class":90},[84,7506,840],{"class":782},[84,7508,7349],{"class":94},[84,7510,3843],{"class":782},[84,7512,7514],{"class":86,"line":7513},106,[84,7515,777],{"emptyLinePlaceholder":776},[84,7517,7519,7521,7523,7525,7527,7530,7532,7534,7536],{"class":86,"line":7518},107,[84,7520,1670],{"class":782},[84,7522,3633],{"class":786},[84,7524,3930],{"class":90},[84,7526,840],{"class":782},[84,7528,7529],{"class":94},"\"-0.075 -0.06 -0.025\"",[84,7531,3938],{"class":90},[84,7533,840],{"class":782},[84,7535,3935],{"class":94},[84,7537,3843],{"class":782},[84,7539,7541,7543,7545,7547,7549,7551],{"class":86,"line":7540},108,[84,7542,1670],{"class":782},[84,7544,5419],{"class":786},[84,7546,3930],{"class":90},[84,7548,840],{"class":782},[84,7550,6883],{"class":94},[84,7552,3843],{"class":782},[84,7554,7556,7558,7560],{"class":86,"line":7555},109,[84,7557,1759],{"class":782},[84,7559,4645],{"class":786},[84,7561,814],{"class":782},[84,7563,7565],{"class":86,"line":7564},110,[84,7566,777],{"emptyLinePlaceholder":776},[84,7568,7570,7572,7574],{"class":86,"line":7569},111,[84,7571,3983],{"class":782},[84,7573,787],{"class":786},[84,7575,814],{"class":782},[14,7577,7578],{},"终端运行",[76,7580,7582],{"className":78,"code":7581,"language":80,"meta":19,"style":19},"ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo05_exercise.urdf\n",[71,7583,7584],{"__ignoreMap":19},[84,7585,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604],{"class":86,"line":87},[84,7587,716],{"class":90},[84,7589,1520],{"class":94},[84,7591,725],{"class":94},[84,7593,2512],{"class":94},[84,7595,2515],{"class":94},[84,7597,716],{"class":90},[84,7599,2520],{"class":94},[84,7601,2523],{"class":728},[84,7603,2526],{"class":94},[84,7605,7606],{"class":90},"/urdf/urdf/demo05_exercise.urdf\n",[14,7608,7609],{},[17,7610],{"alt":19,"src":7611},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1544.webp",[10,7613,7615],{"id":7614},"urdf工具","URDF工具",[14,7617,7618],{},"在 ROS2 中，提供了一些URDF文件相关的工具，比如:",[163,7620,7621,7627],{},[142,7622,7623,7626],{},[71,7624,7625],{},"check_urdf","命令可以检查复杂的 urdf 文件是否存在语法问题；",[142,7628,7629,7632],{},[71,7630,7631],{},"urdf_to_graphviz","命令可以查看 urdf 模型结构，显示不同 link 的层级关系。",[14,7634,7635,7636,127],{},"当然，要使用工具之前，请先安装，安装命令：",[71,7637,7638],{},"sudo apt install liburdfdom-tools",[645,7640,7642],{"id":7641},"check_urdf-语法检查",[105,7643,7644],{},"check_urdf 语法检查",[14,7646,7647,7648,7651],{},"进入urdf文件所属目录，调用：",[71,7649,7650],{},"check_urdf urdf文件","，如果不抛出异常，说明文件合法，否则非法。",[14,7653,7654],{},"示例，终端下进入功能包 cpp06_urdf 的 urdf/urdf 目录，执行如下命令：",[76,7656,7658],{"className":78,"code":7657,"language":80,"meta":19,"style":19},"check_urdf demo05_exercise.urdf\n",[71,7659,7660],{"__ignoreMap":19},[84,7661,7662,7664],{"class":86,"line":87},[84,7663,7625],{"class":90},[84,7665,7666],{"class":94}," demo05_exercise.urdf\n",[14,7668,7669],{},"urdf 文件如无异常，将显示urdf中link的层级关系，如下图所示：",[14,7671,7672],{},[17,7673],{"alt":19,"src":7674},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1545.webp",[14,7676,7677],{},"否则将会给出错误提示。",[14,7679,7680],{},[17,7681],{"alt":19,"src":7682},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1546.webp",[14,7684,7685],{},"演示错误，",[14,7687,7688],{},[17,7689],{"alt":19,"src":7690},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1547.webp",[645,7692,7694],{"id":7693},"urdf_to_graphviz-结构查看",[105,7695,7696],{},"urdf_to_graphviz 结构查看",[14,7698,7699,7700,7703],{},"进入urdf文件所属目录，调用:",[71,7701,7702],{},"urdf_to_graphviz urdf文件","，当前目录下会生成 pdf 文件。",[14,7705,7654],{},[76,7707,7709],{"className":78,"code":7708,"language":80,"meta":19,"style":19},"urdf_to_graphviz demo05_exercise.urdf\n",[71,7710,7711],{"__ignoreMap":19},[84,7712,7713,7715],{"class":86,"line":87},[84,7714,7631],{"class":90},[84,7716,7666],{"class":94},[14,7718,7719],{},"当前目录下，将生成以urdf中robot名称命名的.pdf和.gv文件，打开pdf文件会显示如下图内容：",[14,7721,7722],{},[17,7723],{"alt":19,"src":7724},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1548.webp",[14,7726,7727],{},"在上图中会以树形结构显示link与joint的关系。",[14,7729,7730,7732,7733,7736,7737,7739],{},[105,7731,3771],{}," 该工具以前名为",[71,7734,7735],{},"urdf_to_graphiz","现建议使用",[71,7738,7631],{},"替代。",[14,7741,7742],{},[17,7743],{"alt":19,"src":7744},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1549.webp",[14,7746,7747,7749,7750,127],{},[71,7748,7735],{},"是历史版本，已经被废弃，建议用",[71,7751,7631],{},[14,7753,7754],{},[17,7755],{"alt":19,"src":7756},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1550.webp",[14,7758,7759],{},[17,7760],{"alt":19,"src":7761},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1551.webp",[14,7763,7764],{},[17,7765],{"alt":19,"src":7766},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1552.webp",[14,7768,7769],{},[17,7770],{"alt":19,"src":7771},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1553.webp",[14,7773,7774],{},"黑色方框代表Link，蓝色代表Joint，也会展示平移量和旋转度等信息。",[10,7776,7778],{"id":7777},"sw2urdf","SW2URDF",[645,7780,7781],{"id":7781},"solidworks简介",[14,7783,7784],{},"SolidWorks是一种计算机辅助设计（CAD）和计算机辅助制造（CAM）软件，由Dassault Systèmes SolidWorks Corp.开发。它主要用于工程设计和制造，可用于创建3D三维模型、进行装配设计、进行工程分析和绘图等。SolidWorks具有直观的用户界面和强大的功能，使工程师和设计师能够快速而精确地设计复杂的零部件和装配体。该软件广泛应用于机械、航空航天、汽车、医疗设备等行业，是工程设计领域的重要工具之一。",[14,7786,7787],{},[17,7788],{"alt":19,"src":7789},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1554.webp",[645,7791,7792],{"id":7792},"solidworks插件sw2urdf介绍",[14,7794,7795],{},"sw2urdf插件维基百科：",[14,7797,7798],{},[4355,7799,7802],{"href":7800,"rel":7801},"https://wiki.ros.org/sw%5C_urdf%5C_exporter",[4359],"https://wiki.ros.org/sw\\_urdf\\_exporter",[14,7804,7805],{},"github下载链接：",[14,7807,7808],{},[4355,7809,7812],{"href":7810,"rel":7811},"https://github.com/ros/solidworks%5C_urdf%5C_exporter/releases",[4359],"https://github.com/ros/solidworks\\_urdf\\_exporter/releases",[14,7814,7815],{},"虽然github链接上写着只支持到SW2021，但是目前发现最新版SW(2022、2024经测试)也是可以正常用的。",[14,7817,7818],{},[17,7819],{"alt":19,"src":7820},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1555.webp",[645,7822,7823],{"id":7823},"安装sw2urdf",[139,7825,7826],{},[142,7827,7828],{},"去github上下载sw2urdf插件（这个SW版本不用管，实测在后续的SW版本依然可用）",[14,7830,7831],{},[17,7832],{"alt":19,"src":7833},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1556.webp",[139,7835,7836],{"start":636},[142,7837,7838],{},"查看SW的安装路径",[14,7840,7841],{},"比如我的路径\"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\\"",[14,7843,7844],{},[17,7845],{"alt":19,"src":7846},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1557.webp",[139,7848,7849],{"start":793},[142,7850,7851],{},"打开插件安装器，默认情况下会自动找到你的SW路径进行安装，如果没有自动找到路径安装，那么需要手动选取SW安装路径。",[14,7853,7854],{},[17,7855],{"alt":19,"src":7856},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1558.webp",[139,7858,7859],{"start":805},[142,7860,7861],{},"查看插件是否安装成功",[14,7863,7864],{},[17,7865],{"alt":19,"src":7866},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1559.webp",[14,7868,7869],{},[17,7870],{"alt":19,"src":7871},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1560.webp",[14,7873,7874],{},"如图这样就是安装成功了。",[645,7876,7878],{"id":7877},"导出urdf与meshes","导出URDF与Meshes",[139,7880,7881],{},[142,7882,7883],{},"如图是一个标准的SW装配体图(大家也可以尝试自己手撸一个，里面没有传动装置也可以)",[14,7885,7886,7887],{},"这个过程看不太懂的话，可以参考一下古月居老师的视频，结合本教程一起学习。 【SolidWorks模型导出urdf（古月居老师）-哔哩哔哩】",[4355,7888,7889],{"href":7889,"rel":7890},"https://www.bilibili.com/video/BV1Tx411o7rH",[4359],[14,7892,7893],{},[17,7894],{"alt":19,"src":7895},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1561.webp",[139,7897,7898],{"start":636},[142,7899,7900],{},"对joint关节建立基准轴",[14,7902,7903],{},[17,7904],{"alt":19,"src":7905},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1562.webp",[14,7907,7908],{},"选择关节的圆柱面或者其他面，对转轴进行标定",[14,7910,7911],{},[17,7912],{"alt":19,"src":7913},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1563.webp",[14,7915,7916],{},"如果建完基准轴，发现不能够正常展示，那么就打开该选项。",[14,7918,7919],{},[17,7920],{"alt":19,"src":7921},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1564.webp",[14,7923,7924],{},[17,7925],{"alt":19,"src":7926},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1565.webp",[14,7928,7929],{},"建完所有系后",[139,7931,7932],{"start":793},[142,7933,7934],{},"打开export as URDF选项",[14,7936,7937],{},[17,7938],{"alt":19,"src":7939},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1566.webp",[139,7941,7942],{"start":805},[142,7943,7944],{},"需要先选择base_link基底刚体",[14,7946,7947],{},[17,7948],{"alt":19,"src":7949},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1567.webp",[14,7951,7952],{},"这里的Global Origin可能需要自己选择，就选择Origin_Global即可，但是一般选择automatically Generate即可。",[139,7954,7955],{"start":817},[142,7956,7957],{},"因为他的base_link通过一个joint连接了一个child_link，所以，这个选项要填1。",[14,7959,7960,7963],{},[17,7961],{"alt":19,"src":7962},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1568.webp",[17,7964],{"alt":19,"src":7965},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1569.webp",[14,7967,7968],{},"咱们把base_link连接的关节叫joint1，把joint1连接的更上面的刚体叫做link1,",[14,7970,7971],{},"然后参考基准轴选择刚才咱们在这个关节处建立的基准轴1，然后joint type关节类型选择revolute（有限位的关节，只有这样，机器人关节才可以正常运动）",[14,7973,7974],{},[17,7975],{"alt":19,"src":7976},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1570.webp",[14,7978,7979],{},"这里的参考坐标系系统可以选择automatically Generate，也可以选择Origin_Joint1。",[14,7981,7982],{},"然后再在link1上加一，创建link2。",[14,7984,7985],{},"后面的link3，link4添加步骤是一样的，不再详细展示。",[14,7987,7988],{},[17,7989],{"alt":19,"src":7990},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1571.webp",[14,7992,7993],{},[17,7994],{"alt":19,"src":7995},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1572.webp",[14,7997,7998],{},[17,7999],{"alt":19,"src":8000},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1573.webp",[139,8002,8003],{"start":828},[142,8004,8005],{},"点击preview and export",[14,8007,8008],{},[17,8009],{"alt":19,"src":8010},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1574.webp",[139,8012,8013],{"start":849},[142,8014,8015],{},"对关节进行限位设置",[14,8017,8018],{},"coordinates是坐标系，axis是轴，如果这里Axis坐标显示错误，那么说明Coordinates或者Axis选择错了，请手动选择正确的坐标系或者基准轴。",[14,8020,8021],{},[17,8022],{"alt":19,"src":8023},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1575.webp",[14,8025,8026],{},"如果转轴生成错误，比如都是000，可以自己填一下。",[14,8028,8029],{},[17,8030],{"alt":19,"src":8031},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1576.webp",[14,8033,8034],{},"比如这里是X轴，可以把左轮全填-100,右轮100（这里，仅供参考，chatgpt提供的解决方案）",[14,8036,8037],{},[17,8038],{"alt":19,"src":8039},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1577.webp",[139,8041,8042],{"start":859},[142,8043,8044],{},"查看矩阵，并点导出urdf与meshes",[14,8046,8047],{},[17,8048],{"alt":19,"src":8049},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1578.webp",[14,8051,8052],{},[17,8053],{"alt":19,"src":8054},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1579.webp",[14,8056,8057],{},[17,8058],{"alt":19,"src":8059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1580.webp",[14,8061,8062],{},[17,8063],{"alt":19,"src":8064},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1581.webp",[14,8066,8067],{},"这样就成功生成ROS1的WS了，将WS移动至Linux系统。",[645,8069,8071],{"id":8070},"将ros1的ws转化为ros2的ws","将ROS1的WS转化为ROS2的WS",[139,8073,8074],{},[142,8075,8076],{},"先将ROS1的WS移动到Linux系统上",[14,8078,8079],{},[17,8080],{"alt":19,"src":8081},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1582.webp",[139,8083,8084],{"start":636},[142,8085,8086],{},"新建一个ROS2的WS",[14,8088,8089],{},[17,8090],{"alt":19,"src":8091},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1583.webp",[76,8093,8095],{"className":78,"code":8094,"language":80,"meta":19,"style":19},"mkdir -p ros2_4axisrobot_ws/src\ncd ros2_4axisrobot_ws/\ncolcon build\ncd src\nros2 pkg create cpp01_urdf --build-type ament_cmake\ncd ..\ncode .\n",[71,8096,8097,8108,8116,8123,8130,8145,8152],{"__ignoreMap":19},[84,8098,8099,8102,8105],{"class":86,"line":87},[84,8100,8101],{"class":90},"mkdir",[84,8103,8104],{"class":728}," -p",[84,8106,8107],{"class":94}," ros2_4axisrobot_ws/src\n",[84,8109,8110,8113],{"class":86,"line":636},[84,8111,8112],{"class":728},"cd",[84,8114,8115],{"class":94}," ros2_4axisrobot_ws/\n",[84,8117,8118,8120],{"class":86,"line":793},[84,8119,1486],{"class":90},[84,8121,8122],{"class":94}," build\n",[84,8124,8125,8127],{"class":86,"line":805},[84,8126,8112],{"class":728},[84,8128,8129],{"class":94}," src\n",[84,8131,8132,8134,8136,8138,8141,8143],{"class":86,"line":817},[84,8133,716],{"class":90},[84,8135,719],{"class":94},[84,8137,722],{"class":94},[84,8139,8140],{"class":94}," cpp01_urdf",[84,8142,729],{"class":728},[84,8144,732],{"class":94},[84,8146,8147,8149],{"class":86,"line":828},[84,8148,8112],{"class":728},[84,8150,8151],{"class":94}," ..\n",[84,8153,8154,8156],{"class":86,"line":849},[84,8155,71],{"class":90},[84,8157,8158],{"class":94}," .\n",[139,8160,8161],{"start":793},[142,8162,8163],{},"完善WS的目录",[14,8165,8166,8169],{},[17,8167],{"alt":19,"src":8168},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1584.webp",[17,8170],{"alt":19,"src":8171},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1585.webp",[14,8173,8174],{},"在./src/cpp01_urdf路径下创建launch、meshes、rviz、urdf等等文件夹，在urdf文件夹下再新建urdf和xacro文件夹",[139,8176,8177],{"start":805},[142,8178,8179],{},"复制ROS1的WS里的URDF和Meshes到ROS2的WS中",[14,8181,8182,8185],{},[17,8183],{"alt":19,"src":8184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1586.webp",[17,8186],{"alt":19,"src":8187},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1587.webp",[14,8189,8190],{},[17,8191],{"alt":19,"src":8192},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1588.webp",[139,8194,8195],{"start":817},[142,8196,8197],{},"对CMake和package进行配置",[14,8199,8200],{},"在CMake中请添加",[76,8202,8203],{"className":1439,"code":1440,"language":1441,"meta":19,"style":19},[71,8204,8205,8211,8215,8223],{"__ignoreMap":19},[84,8206,8207,8209],{"class":86,"line":87},[84,8208,1448],{"class":911},[84,8210,1451],{"class":782},[84,8212,8213],{"class":86,"line":636},[84,8214,1456],{"class":782},[84,8216,8217,8219,8221],{"class":86,"line":793},[84,8218,1461],{"class":782},[84,8220,1464],{"class":911},[84,8222,1467],{"class":782},[84,8224,8225],{"class":86,"line":805},[84,8226,1031],{"class":782},[14,8228,8229],{},"在Package.xml中请添加",[76,8231,8233],{"className":767,"code":8232,"language":769,"meta":19,"style":19},"  \u003Cexec_depend>rviz2\u003C/exec_depend>\n  \u003Cexec_depend>xacro\u003C/exec_depend>\n  \u003Cexec_depend>robot_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>joint_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>ros2launch\u003C/exec_depend>\n",[71,8234,8235,8247,8259,8271,8283],{"__ignoreMap":19},[84,8236,8237,8239,8241,8243,8245],{"class":86,"line":87},[84,8238,3815],{"class":782},[84,8240,1372],{"class":786},[84,8242,1375],{"class":782},[84,8244,1372],{"class":786},[84,8246,814],{"class":782},[84,8248,8249,8251,8253,8255,8257],{"class":86,"line":636},[84,8250,3815],{"class":782},[84,8252,1372],{"class":786},[84,8254,1388],{"class":782},[84,8256,1372],{"class":786},[84,8258,814],{"class":782},[84,8260,8261,8263,8265,8267,8269],{"class":86,"line":793},[84,8262,3815],{"class":782},[84,8264,1372],{"class":786},[84,8266,1401],{"class":782},[84,8268,1372],{"class":786},[84,8270,814],{"class":782},[84,8272,8273,8275,8277,8279,8281],{"class":86,"line":805},[84,8274,3815],{"class":782},[84,8276,1372],{"class":786},[84,8278,1414],{"class":782},[84,8280,1372],{"class":786},[84,8282,814],{"class":782},[84,8284,8285,8287,8289,8291,8293],{"class":86,"line":817},[84,8286,3815],{"class":782},[84,8288,1372],{"class":786},[84,8290,1427],{"class":782},[84,8292,1372],{"class":786},[84,8294,814],{"class":782},[14,8296,8297],{},"CMakeLists.txt",[76,8299,8301],{"className":1439,"code":8300,"language":1441,"meta":19,"style":19},"cmake_minimum_required(VERSION 3.8)\nproject(cpp01_urdf)\n\nif(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n  add_compile_options(-Wall -Wextra -Wpedantic)\nendif()\n\n# find dependencies\nfind_package(ament_cmake REQUIRED)\n\n# uncomment the following section in order to fill in\n\n# further dependencies manually.\n\n# find_package(\u003Cdependency> REQUIRED)\n\ninstall(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share/${PROJECT_NAME}  \n)\n\nif(BUILD_TESTING)\n  find_package(ament_lint_auto REQUIRED)\n\n  # the following line skips the linter which checks for copyrights\n\n  # comment the line when a copyright and license is added to all source files\n  set(ament_cmake_copyright_FOUND TRUE)\n\n  # the following line skips cpplint (only works in a git repo)\n\n  # comment the line when this package is in a git repo and when\n\n  # a copyright and license is added to all source files\n  set(ament_cmake_cpplint_FOUND TRUE)\n  ament_lint_auto_find_test_dependencies()\nendif()\n\nament_package()\n\n",[71,8302,8303,8317,8325,8329,8351,8359,8367,8371,8376,8384,8388,8393,8397,8402,8406,8411,8415,8421,8425,8433,8437,8441,8448,8456,8460,8465,8469,8474,8487,8491,8496,8500,8505,8509,8514,8525,8530,8536,8540],{"__ignoreMap":19},[84,8304,8305,8308,8311,8314],{"class":86,"line":87},[84,8306,8307],{"class":911},"cmake_minimum_required",[84,8309,8310],{"class":782},"(",[84,8312,8313],{"class":90},"VERSION",[84,8315,8316],{"class":782}," 3.8)\n",[84,8318,8319,8322],{"class":86,"line":636},[84,8320,8321],{"class":911},"project",[84,8323,8324],{"class":782},"(cpp01_urdf)\n",[84,8326,8327],{"class":86,"line":793},[84,8328,777],{"emptyLinePlaceholder":776},[84,8330,8331,8334,8337,8340,8343,8346,8349],{"class":86,"line":805},[84,8332,8333],{"class":911},"if",[84,8335,8336],{"class":782},"(CMAKE_COMPILER_IS_GNUCXX ",[84,8338,8339],{"class":911},"OR",[84,8341,8342],{"class":782}," CMAKE_CXX_COMPILER_ID ",[84,8344,8345],{"class":911},"MATCHES",[84,8347,8348],{"class":94}," \"Clang\"",[84,8350,1031],{"class":782},[84,8352,8353,8356],{"class":86,"line":817},[84,8354,8355],{"class":911},"  add_compile_options",[84,8357,8358],{"class":782},"(-Wall -Wextra -Wpedantic)\n",[84,8360,8361,8364],{"class":86,"line":828},[84,8362,8363],{"class":911},"endif",[84,8365,8366],{"class":782},"()\n",[84,8368,8369],{"class":86,"line":849},[84,8370,777],{"emptyLinePlaceholder":776},[84,8372,8373],{"class":86,"line":859},[84,8374,8375],{"class":997},"# find dependencies\n",[84,8377,8378,8381],{"class":86,"line":869},[84,8379,8380],{"class":911},"find_package",[84,8382,8383],{"class":782},"(ament_cmake REQUIRED)\n",[84,8385,8386],{"class":86,"line":879},[84,8387,777],{"emptyLinePlaceholder":776},[84,8389,8390],{"class":86,"line":1012},[84,8391,8392],{"class":997},"# uncomment the following section in order to fill in\n",[84,8394,8395],{"class":86,"line":1017},[84,8396,777],{"emptyLinePlaceholder":776},[84,8398,8399],{"class":86,"line":1034},[84,8400,8401],{"class":997},"# further dependencies manually.\n",[84,8403,8404],{"class":86,"line":1056},[84,8405,777],{"emptyLinePlaceholder":776},[84,8407,8408],{"class":86,"line":1076},[84,8409,8410],{"class":997},"# find_package(\u003Cdependency> REQUIRED)\n",[84,8412,8413],{"class":86,"line":1107},[84,8414,777],{"emptyLinePlaceholder":776},[84,8416,8417,8419],{"class":86,"line":1112},[84,8418,1448],{"class":911},[84,8420,1451],{"class":782},[84,8422,8423],{"class":86,"line":1118},[84,8424,1456],{"class":782},[84,8426,8427,8429,8431],{"class":86,"line":1123},[84,8428,1461],{"class":782},[84,8430,1464],{"class":911},[84,8432,1467],{"class":782},[84,8434,8435],{"class":86,"line":1129},[84,8436,1031],{"class":782},[84,8438,8439],{"class":86,"line":1151},[84,8440,777],{"emptyLinePlaceholder":776},[84,8442,8443,8445],{"class":86,"line":1162},[84,8444,8333],{"class":911},[84,8446,8447],{"class":782},"(BUILD_TESTING)\n",[84,8449,8450,8453],{"class":86,"line":1176},[84,8451,8452],{"class":911},"  find_package",[84,8454,8455],{"class":782},"(ament_lint_auto REQUIRED)\n",[84,8457,8458],{"class":86,"line":1188},[84,8459,777],{"emptyLinePlaceholder":776},[84,8461,8462],{"class":86,"line":1205},[84,8463,8464],{"class":997},"  # the following line skips the linter which checks for copyrights\n",[84,8466,8467],{"class":86,"line":1211},[84,8468,777],{"emptyLinePlaceholder":776},[84,8470,8471],{"class":86,"line":1216},[84,8472,8473],{"class":997},"  # comment the line when a copyright and license is added to all source files\n",[84,8475,8476,8479,8482,8485],{"class":86,"line":1222},[84,8477,8478],{"class":911},"  set",[84,8480,8481],{"class":782},"(ament_cmake_copyright_FOUND ",[84,8483,8484],{"class":911},"TRUE",[84,8486,1031],{"class":782},[84,8488,8489],{"class":86,"line":1232},[84,8490,777],{"emptyLinePlaceholder":776},[84,8492,8493],{"class":86,"line":1244},[84,8494,8495],{"class":997},"  # the following line skips cpplint (only works in a git repo)\n",[84,8497,8498],{"class":86,"line":1254},[84,8499,777],{"emptyLinePlaceholder":776},[84,8501,8502],{"class":86,"line":1259},[84,8503,8504],{"class":997},"  # comment the line when this package is in a git repo and when\n",[84,8506,8507],{"class":86,"line":1264},[84,8508,777],{"emptyLinePlaceholder":776},[84,8510,8511],{"class":86,"line":1270},[84,8512,8513],{"class":997},"  # a copyright and license is added to all source files\n",[84,8515,8516,8518,8521,8523],{"class":86,"line":1280},[84,8517,8478],{"class":911},[84,8519,8520],{"class":782},"(ament_cmake_cpplint_FOUND ",[84,8522,8484],{"class":911},[84,8524,1031],{"class":782},[84,8526,8527],{"class":86,"line":1292},[84,8528,8529],{"class":782},"  ament_lint_auto_find_test_dependencies()\n",[84,8531,8532,8534],{"class":86,"line":1302},[84,8533,8363],{"class":911},[84,8535,8366],{"class":782},[84,8537,8538],{"class":86,"line":1307},[84,8539,777],{"emptyLinePlaceholder":776},[84,8541,8542],{"class":86,"line":1313},[84,8543,8544],{"class":782},"ament_package()\n",[14,8546,8547],{},"package.xml",[76,8549,8551],{"className":767,"code":8550,"language":769,"meta":19,"style":19},"\u003C?xml version=\"1.0\"?>\n\u003C?xml-model href=\"http://download.ros.org/schema/package_format3.xsd\" schematypens=\"http://www.w3.org/2001/XMLSchema\"?>\n\u003Cpackage format=\"3\">\n  \u003Cname>cpp01_urdf\u003C/name>\n  \u003Cversion>0.0.0\u003C/version>\n  \u003Cdescription>TODO: Package description\u003C/description>\n  \u003Cmaintainer email=\"tungchiahui@gmail.com\">tungchiahui\u003C/maintainer>\n  \u003Clicense>TODO: License declaration\u003C/license>\n\n  \u003Cbuildtool_depend>ament_cmake\u003C/buildtool_depend>\n\n  \u003Cexec_depend>rviz2\u003C/exec_depend>\n  \u003Cexec_depend>xacro\u003C/exec_depend>\n  \u003Cexec_depend>robot_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>joint_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>ros2launch\u003C/exec_depend>\n\n  \u003Ctest_depend>ament_lint_auto\u003C/test_depend>\n  \u003Ctest_depend>ament_lint_common\u003C/test_depend>\n\n  \u003Cexport>\n    \u003Cbuild_type>ament_cmake\u003C/build_type>\n  \u003C/export>\n\u003C/package>\n\n",[71,8552,8553,8571,8596,8613,8626,8640,8654,8676,8690,8694,8708,8712,8724,8736,8748,8760,8772,8776,8790,8803,8807,8816,8829,8837],{"__ignoreMap":19},[84,8554,8555,8558,8560,8563,8565,8568],{"class":86,"line":87},[84,8556,8557],{"class":782},"\u003C?",[84,8559,769],{"class":786},[84,8561,8562],{"class":90}," version",[84,8564,840],{"class":782},[84,8566,8567],{"class":94},"\"1.0\"",[84,8569,8570],{"class":782},"?>\n",[84,8572,8573,8575,8578,8581,8583,8586,8589,8591,8594],{"class":86,"line":636},[84,8574,8557],{"class":782},[84,8576,8577],{"class":786},"xml-model",[84,8579,8580],{"class":90}," href",[84,8582,840],{"class":782},[84,8584,8585],{"class":94},"\"http://download.ros.org/schema/package_format3.xsd\"",[84,8587,8588],{"class":90}," schematypens",[84,8590,840],{"class":782},[84,8592,8593],{"class":94},"\"http://www.w3.org/2001/XMLSchema\"",[84,8595,8570],{"class":782},[84,8597,8598,8600,8603,8606,8608,8611],{"class":86,"line":793},[84,8599,1369],{"class":782},[84,8601,8602],{"class":786},"package",[84,8604,8605],{"class":90}," format",[84,8607,840],{"class":782},[84,8609,8610],{"class":94},"\"3\"",[84,8612,814],{"class":782},[84,8614,8615,8617,8619,8622,8624],{"class":86,"line":805},[84,8616,3815],{"class":782},[84,8618,1088],{"class":786},[84,8620,8621],{"class":782},">cpp01_urdf\u003C/",[84,8623,1088],{"class":786},[84,8625,814],{"class":782},[84,8627,8628,8630,8633,8636,8638],{"class":86,"line":817},[84,8629,3815],{"class":782},[84,8631,8632],{"class":786},"version",[84,8634,8635],{"class":782},">0.0.0\u003C/",[84,8637,8632],{"class":786},[84,8639,814],{"class":782},[84,8641,8642,8644,8647,8650,8652],{"class":86,"line":828},[84,8643,3815],{"class":782},[84,8645,8646],{"class":786},"description",[84,8648,8649],{"class":782},">TODO: Package description\u003C/",[84,8651,8646],{"class":786},[84,8653,814],{"class":782},[84,8655,8656,8658,8661,8664,8666,8669,8672,8674],{"class":86,"line":849},[84,8657,3815],{"class":782},[84,8659,8660],{"class":786},"maintainer",[84,8662,8663],{"class":90}," email",[84,8665,840],{"class":782},[84,8667,8668],{"class":94},"\"tungchiahui@gmail.com\"",[84,8670,8671],{"class":782},">tungchiahui\u003C/",[84,8673,8660],{"class":786},[84,8675,814],{"class":782},[84,8677,8678,8680,8683,8686,8688],{"class":86,"line":859},[84,8679,3815],{"class":782},[84,8681,8682],{"class":786},"license",[84,8684,8685],{"class":782},">TODO: License declaration\u003C/",[84,8687,8682],{"class":786},[84,8689,814],{"class":782},[84,8691,8692],{"class":86,"line":869},[84,8693,777],{"emptyLinePlaceholder":776},[84,8695,8696,8698,8701,8704,8706],{"class":86,"line":879},[84,8697,3815],{"class":782},[84,8699,8700],{"class":786},"buildtool_depend",[84,8702,8703],{"class":782},">ament_cmake\u003C/",[84,8705,8700],{"class":786},[84,8707,814],{"class":782},[84,8709,8710],{"class":86,"line":1012},[84,8711,777],{"emptyLinePlaceholder":776},[84,8713,8714,8716,8718,8720,8722],{"class":86,"line":1017},[84,8715,3815],{"class":782},[84,8717,1372],{"class":786},[84,8719,1375],{"class":782},[84,8721,1372],{"class":786},[84,8723,814],{"class":782},[84,8725,8726,8728,8730,8732,8734],{"class":86,"line":1034},[84,8727,3815],{"class":782},[84,8729,1372],{"class":786},[84,8731,1388],{"class":782},[84,8733,1372],{"class":786},[84,8735,814],{"class":782},[84,8737,8738,8740,8742,8744,8746],{"class":86,"line":1056},[84,8739,3815],{"class":782},[84,8741,1372],{"class":786},[84,8743,1401],{"class":782},[84,8745,1372],{"class":786},[84,8747,814],{"class":782},[84,8749,8750,8752,8754,8756,8758],{"class":86,"line":1076},[84,8751,3815],{"class":782},[84,8753,1372],{"class":786},[84,8755,1414],{"class":782},[84,8757,1372],{"class":786},[84,8759,814],{"class":782},[84,8761,8762,8764,8766,8768,8770],{"class":86,"line":1107},[84,8763,3815],{"class":782},[84,8765,1372],{"class":786},[84,8767,1427],{"class":782},[84,8769,1372],{"class":786},[84,8771,814],{"class":782},[84,8773,8774],{"class":86,"line":1112},[84,8775,777],{"emptyLinePlaceholder":776},[84,8777,8778,8780,8783,8786,8788],{"class":86,"line":1118},[84,8779,3815],{"class":782},[84,8781,8782],{"class":786},"test_depend",[84,8784,8785],{"class":782},">ament_lint_auto\u003C/",[84,8787,8782],{"class":786},[84,8789,814],{"class":782},[84,8791,8792,8794,8796,8799,8801],{"class":86,"line":1123},[84,8793,3815],{"class":782},[84,8795,8782],{"class":786},[84,8797,8798],{"class":782},">ament_lint_common\u003C/",[84,8800,8782],{"class":786},[84,8802,814],{"class":782},[84,8804,8805],{"class":86,"line":1129},[84,8806,777],{"emptyLinePlaceholder":776},[84,8808,8809,8811,8814],{"class":86,"line":1151},[84,8810,3815],{"class":782},[84,8812,8813],{"class":786},"export",[84,8815,814],{"class":782},[84,8817,8818,8820,8823,8825,8827],{"class":86,"line":1162},[84,8819,1670],{"class":782},[84,8821,8822],{"class":786},"build_type",[84,8824,8703],{"class":782},[84,8826,8822],{"class":786},[84,8828,814],{"class":782},[84,8830,8831,8833,8835],{"class":86,"line":1176},[84,8832,1759],{"class":782},[84,8834,8813],{"class":786},[84,8836,814],{"class":782},[84,8838,8839,8841,8843],{"class":86,"line":1188},[84,8840,3983],{"class":782},[84,8842,8602],{"class":786},[84,8844,814],{"class":782},[139,8846,8847],{"start":828},[142,8848,8849],{},"对launch文件进行编写",[14,8851,8852],{},"详细过程请看URDF有关Launch的核心优化那一节",[14,8854,8855],{},[17,8856],{"alt":19,"src":8857},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1589.webp",[76,8859,8861],{"className":902,"code":8860,"language":904,"meta":19,"style":19},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\n\n# from launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\nfrom launch.actions import DeclareLaunchArgument\nfrom launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\n\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command\n\nimport os\n\ncpp01_urdf_dir = get_package_share_directory(\"cpp01_urdf\")\n\ndefault_model_path = os.path.join(cpp01_urdf_dir,\"urdf/urdf\",\"4axisrobot.urdf\")\ndefault_rviz_path = os.path.join(cpp01_urdf_dir,\"rviz\",\"urdf.rviz\")\n\nmodel = DeclareLaunchArgument(name=\"model\",default_value=default_model_path)\n\np_value = ParameterValue(Command([\"xacro \",LaunchConfiguration(\"model\")]))\nrobot_state_pub = Node(\n    package=\"robot_state_publisher\",\n    executable=\"robot_state_publisher\",\n    parameters=[{\"robot_description\":p_value}]\n)\n\n# 关节信息节点(建议)\n\n# joint_state_pub = Node(\n\n#     package=\"joint_state_publisher\",\n\n#     executable=\"joint_state_publisher\"\n\n# )\n\n# 关节信息节点图形界面\njoint_state_pub = Node(\n    package=\"joint_state_publisher_gui\",\n    executable=\"joint_state_publisher_gui\"\n)\n\nrviz2 = Node(\n    package=\"rviz2\",\n    executable=\"rviz2\",\n\n#    arguments=[\"-d\",get_package_share_directory(\"cpp06_urdf\") + \"/rviz/urdf.rviz\"]\n    arguments=[\"-d\",default_rviz_path]\n\n    )\n\ndef generate_launch_description():\n    return LaunchDescription([model,robot_state_pub,joint_state_pub,rviz2])\n",[71,8862,8863,8873,8883,8887,8891,8895,8899,8903,8907,8911,8915,8925,8935,8939,8943,8947,8951,8955,8959,8963,8967,8971,8975,8979,8983,8987,8991,8995,8999,9003,9007,9011,9015,9025,9029,9039,9049,9053,9059,9063,9077,9081,9099,9115,9119,9141,9145,9161,9169,9179,9189,9201,9205,9209,9214,9218,9222,9226,9230,9234,9238,9242,9246,9250,9255,9263,9273,9281,9285,9289,9297,9307,9317,9321,9325,9337,9341,9345,9349,9357],{"__ignoreMap":19},[84,8864,8865,8867,8869,8871],{"class":86,"line":87},[84,8866,912],{"class":911},[84,8868,915],{"class":782},[84,8870,918],{"class":911},[84,8872,921],{"class":782},[84,8874,8875,8877,8879,8881],{"class":86,"line":636},[84,8876,912],{"class":911},[84,8878,928],{"class":782},[84,8880,918],{"class":911},[84,8882,933],{"class":782},[84,8884,8885],{"class":86,"line":793},[84,8886,777],{"emptyLinePlaceholder":776},[84,8888,8889],{"class":86,"line":805},[84,8890,1982],{"class":997},[84,8892,8893],{"class":86,"line":817},[84,8894,777],{"emptyLinePlaceholder":776},[84,8896,8897],{"class":86,"line":828},[84,8898,1991],{"class":997},[84,8900,8901],{"class":86,"line":849},[84,8902,777],{"emptyLinePlaceholder":776},[84,8904,8905],{"class":86,"line":859},[84,8906,2000],{"class":997},[84,8908,8909],{"class":86,"line":869},[84,8910,777],{"emptyLinePlaceholder":776},[84,8912,8913],{"class":86,"line":879},[84,8914,2009],{"class":997},[84,8916,8917,8919,8921,8923],{"class":86,"line":1012},[84,8918,912],{"class":911},[84,8920,983],{"class":782},[84,8922,918],{"class":911},[84,8924,988],{"class":782},[84,8926,8927,8929,8931,8933],{"class":86,"line":1017},[84,8928,912],{"class":911},[84,8930,971],{"class":782},[84,8932,918],{"class":911},[84,8934,2622],{"class":782},[84,8936,8937],{"class":86,"line":1034},[84,8938,777],{"emptyLinePlaceholder":776},[84,8940,8941],{"class":86,"line":1056},[84,8942,2036],{"class":997},[84,8944,8945],{"class":86,"line":1076},[84,8946,777],{"emptyLinePlaceholder":776},[84,8948,8949],{"class":86,"line":1107},[84,8950,2045],{"class":997},[84,8952,8953],{"class":86,"line":1112},[84,8954,777],{"emptyLinePlaceholder":776},[84,8956,8957],{"class":86,"line":1118},[84,8958,2054],{"class":997},[84,8960,8961],{"class":86,"line":1123},[84,8962,777],{"emptyLinePlaceholder":776},[84,8964,8965],{"class":86,"line":1129},[84,8966,2063],{"class":997},[84,8968,8969],{"class":86,"line":1151},[84,8970,777],{"emptyLinePlaceholder":776},[84,8972,8973],{"class":86,"line":1162},[84,8974,2072],{"class":997},[84,8976,8977],{"class":86,"line":1176},[84,8978,777],{"emptyLinePlaceholder":776},[84,8980,8981],{"class":86,"line":1188},[84,8982,2081],{"class":997},[84,8984,8985],{"class":86,"line":1205},[84,8986,777],{"emptyLinePlaceholder":776},[84,8988,8989],{"class":86,"line":1211},[84,8990,2090],{"class":997},[84,8992,8993],{"class":86,"line":1216},[84,8994,777],{"emptyLinePlaceholder":776},[84,8996,8997],{"class":86,"line":1222},[84,8998,2099],{"class":997},[84,9000,9001],{"class":86,"line":1232},[84,9002,777],{"emptyLinePlaceholder":776},[84,9004,9005],{"class":86,"line":1244},[84,9006,2108],{"class":997},[84,9008,9009],{"class":86,"line":1254},[84,9010,777],{"emptyLinePlaceholder":776},[84,9012,9013],{"class":86,"line":1259},[84,9014,2117],{"class":997},[84,9016,9017,9019,9021,9023],{"class":86,"line":1264},[84,9018,912],{"class":911},[84,9020,947],{"class":782},[84,9022,918],{"class":911},[84,9024,952],{"class":782},[84,9026,9027],{"class":86,"line":1270},[84,9028,777],{"emptyLinePlaceholder":776},[84,9030,9031,9033,9035,9037],{"class":86,"line":1280},[84,9032,912],{"class":911},[84,9034,959],{"class":782},[84,9036,918],{"class":911},[84,9038,964],{"class":782},[84,9040,9041,9043,9045,9047],{"class":86,"line":1292},[84,9042,912],{"class":911},[84,9044,971],{"class":782},[84,9046,918],{"class":911},[84,9048,2152],{"class":782},[84,9050,9051],{"class":86,"line":1302},[84,9052,777],{"emptyLinePlaceholder":776},[84,9054,9055,9057],{"class":86,"line":1307},[84,9056,918],{"class":911},[84,9058,940],{"class":782},[84,9060,9061],{"class":86,"line":1313},[84,9062,777],{"emptyLinePlaceholder":776},[84,9064,9065,9068,9070,9072,9075],{"class":86,"line":1318},[84,9066,9067],{"class":782},"cpp01_urdf_dir ",[84,9069,840],{"class":911},[84,9071,1025],{"class":782},[84,9073,9074],{"class":94},"\"cpp01_urdf\"",[84,9076,1031],{"class":782},[84,9078,9079],{"class":86,"line":1327},[84,9080,777],{"emptyLinePlaceholder":776},[84,9082,9083,9085,9087,9090,9092,9094,9097],{"class":86,"line":1333},[84,9084,3191],{"class":782},[84,9086,840],{"class":911},[84,9088,9089],{"class":782}," os.path.join(cpp01_urdf_dir,",[84,9091,1045],{"class":94},[84,9093,1048],{"class":782},[84,9095,9096],{"class":94},"\"4axisrobot.urdf\"",[84,9098,1031],{"class":782},[84,9100,9101,9103,9105,9107,9109,9111,9113],{"class":86,"line":1339},[84,9102,3209],{"class":782},[84,9104,840],{"class":911},[84,9106,9089],{"class":782},[84,9108,1066],{"class":94},[84,9110,1048],{"class":782},[84,9112,3220],{"class":94},[84,9114,1031],{"class":782},[84,9116,9117],{"class":86,"line":1345},[84,9118,777],{"emptyLinePlaceholder":776},[84,9120,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139],{"class":86,"line":1351},[84,9122,2745],{"class":782},[84,9124,840],{"class":911},[84,9126,1084],{"class":782},[84,9128,1088],{"class":1087},[84,9130,840],{"class":911},[84,9132,1093],{"class":94},[84,9134,1048],{"class":782},[84,9136,1099],{"class":1087},[84,9138,840],{"class":911},[84,9140,1104],{"class":782},[84,9142,9143],{"class":86,"line":2236},[84,9144,777],{"emptyLinePlaceholder":776},[84,9146,9147,9149,9151,9153,9155,9157,9159],{"class":86,"line":2241},[84,9148,2161],{"class":782},[84,9150,840],{"class":911},[84,9152,1137],{"class":782},[84,9154,1140],{"class":94},[84,9156,1143],{"class":782},[84,9158,1093],{"class":94},[84,9160,1148],{"class":782},[84,9162,9163,9165,9167],{"class":86,"line":2251},[84,9164,2189],{"class":782},[84,9166,840],{"class":911},[84,9168,1159],{"class":782},[84,9170,9171,9173,9175,9177],{"class":86,"line":2262},[84,9172,2198],{"class":1087},[84,9174,840],{"class":911},[84,9176,1170],{"class":94},[84,9178,1173],{"class":782},[84,9180,9181,9183,9185,9187],{"class":86,"line":2271},[84,9182,2209],{"class":1087},[84,9184,840],{"class":911},[84,9186,1170],{"class":94},[84,9188,1173],{"class":782},[84,9190,9191,9193,9195,9197,9199],{"class":86,"line":2276},[84,9192,2220],{"class":1087},[84,9194,840],{"class":911},[84,9196,1196],{"class":782},[84,9198,1199],{"class":94},[84,9200,2229],{"class":782},[84,9202,9203],{"class":86,"line":2281},[84,9204,1031],{"class":782},[84,9206,9207],{"class":86,"line":2290},[84,9208,777],{"emptyLinePlaceholder":776},[84,9210,9211],{"class":86,"line":2898},[84,9212,9213],{"class":997},"# 关节信息节点(建议)\n",[84,9215,9216],{"class":86,"line":2909},[84,9217,777],{"emptyLinePlaceholder":776},[84,9219,9220],{"class":86,"line":2937},[84,9221,3330],{"class":997},[84,9223,9224],{"class":86,"line":2942},[84,9225,777],{"emptyLinePlaceholder":776},[84,9227,9228],{"class":86,"line":2947},[84,9229,3339],{"class":997},[84,9231,9232],{"class":86,"line":2956},[84,9233,777],{"emptyLinePlaceholder":776},[84,9235,9236],{"class":86,"line":3346},[84,9237,3349],{"class":997},[84,9239,9240],{"class":86,"line":3352},[84,9241,777],{"emptyLinePlaceholder":776},[84,9243,9244],{"class":86,"line":3357},[84,9245,3360],{"class":997},[84,9247,9248],{"class":86,"line":3363},[84,9249,777],{"emptyLinePlaceholder":776},[84,9251,9252],{"class":86,"line":3368},[84,9253,9254],{"class":997},"# 关节信息节点图形界面\n",[84,9256,9257,9259,9261],{"class":86,"line":3374},[84,9258,2847],{"class":782},[84,9260,840],{"class":911},[84,9262,1159],{"class":782},[84,9264,9265,9267,9269,9271],{"class":86,"line":3383},[84,9266,2198],{"class":1087},[84,9268,840],{"class":911},[84,9270,3390],{"class":94},[84,9272,1173],{"class":782},[84,9274,9275,9277,9279],{"class":86,"line":3395},[84,9276,2209],{"class":1087},[84,9278,840],{"class":911},[84,9280,3402],{"class":94},[84,9282,9283],{"class":86,"line":3405},[84,9284,1031],{"class":782},[84,9286,9287],{"class":86,"line":3410},[84,9288,777],{"emptyLinePlaceholder":776},[84,9290,9291,9293,9295],{"class":86,"line":3415},[84,9292,2244],{"class":782},[84,9294,840],{"class":911},[84,9296,1159],{"class":782},[84,9298,9299,9301,9303,9305],{"class":86,"line":3424},[84,9300,2198],{"class":1087},[84,9302,840],{"class":911},[84,9304,1287],{"class":94},[84,9306,1173],{"class":782},[84,9308,9309,9311,9313,9315],{"class":86,"line":3435},[84,9310,2209],{"class":1087},[84,9312,840],{"class":911},[84,9314,1287],{"class":94},[84,9316,1173],{"class":782},[84,9318,9319],{"class":86,"line":3446},[84,9320,777],{"emptyLinePlaceholder":776},[84,9322,9323],{"class":86,"line":3451},[84,9324,3454],{"class":997},[84,9326,9327,9329,9331,9333,9335],{"class":86,"line":3457},[84,9328,2912],{"class":1087},[84,9330,840],{"class":911},[84,9332,2917],{"class":782},[84,9334,2920],{"class":94},[84,9336,3468],{"class":782},[84,9338,9339],{"class":86,"line":3471},[84,9340,777],{"emptyLinePlaceholder":776},[84,9342,9343],{"class":86,"line":3476},[84,9344,1208],{"class":782},[84,9346,9347],{"class":86,"line":3481},[84,9348,777],{"emptyLinePlaceholder":776},[84,9350,9351,9353,9355],{"class":86,"line":3486},[84,9352,1003],{"class":911},[84,9354,1006],{"class":90},[84,9356,1009],{"class":782},[84,9358,9359,9361],{"class":86,"line":3495},[84,9360,1321],{"class":911},[84,9362,2961],{"class":782},[139,9364,9365],{"start":849},[142,9366,9367],{},"对URDF文件进行修改",[14,9369,9370],{},"修改的内容主要有两项，一个是meshes的路径，一个是删掉易引起报错的注释。",[14,9372,9373],{},"主要由于ROS1的WS和ROS2的WS路径不同，所以，我们只需要修改有关路径的内容，比如说Meshes的路径",[14,9375,9376,9379],{},[17,9377],{"alt":19,"src":9378},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1590.webp",[17,9380],{"alt":19,"src":9381},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1591.webp",[14,9383,9384],{},"package://一般是share目录，所以我们需要从cpp01_urdf这一级开始写（share目录需要编译后才会显示）",[14,9386,9387],{},[17,9388],{"alt":19,"src":9389},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1592.webp",[14,9391,9392],{},"然后按Ctrl+H",[14,9394,9395],{},[17,9396],{"alt":19,"src":9397},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1593.webp",[14,9399,9400],{},[17,9401],{"alt":19,"src":9402},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1594.webp",[14,9404,9405],{},"然后还需要删除掉urdf文件刚开始的注释，否则也会报错",[14,9407,9408],{},[17,9409],{"alt":19,"src":9410},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1595.webp",[14,9412,9413],{},"如下是替换完毕的URDF文件：",[76,9415,9417],{"className":767,"code":9416,"language":769,"meta":19,"style":19},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Crobot\n  name=\"4axisrobot\">\n  \u003Clink\n    name=\"base_link\">\n    \u003Cinertial>\n      \u003Corigin\n        xyz=\"-0.0819771145953119 -0.0394328123681598 -0.0605612328464761\"\n        rpy=\"0 0 0\" />\n      \u003Cmass\n        value=\"7.43807257011133\" />\n      \u003Cinertia\n        ixx=\"0.33173827700719\"\n        ixy=\"-1.91350798633049E-05\"\n        ixz=\"-2.38586363043925E-05\"\n        iyy=\"0.510937907009661\"\n        iyz=\"1.14706407748075E-05\"\n        izz=\"0.66107272632796\" />\n    \u003C/inertial>\n    \u003Cvisual>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/base_link.STL\" />\n      \u003C/geometry>\n      \u003Cmaterial\n        name=\"\">\n        \u003Ccolor\n          rgba=\"0.792156862745098 0.819607843137255 0.933333333333333 1\" />\n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/base_link.STL\" />\n      \u003C/geometry>\n    \u003C/collision>\n  \u003C/link>\n  \u003Clink\n    name=\"link1\">\n    \u003Cinertial>\n      \u003Corigin\n        xyz=\"0.19141 -0.050676 -0.030057\"\n        rpy=\"0 0 0\" />\n      \u003Cmass\n        value=\"21.822\" />\n      \u003Cinertia\n        ixx=\"0.50464\"\n        ixy=\"0.13295\"\n        ixz=\"0.087353\"\n        iyy=\"0.59136\"\n        iyz=\"-0.066053\"\n        izz=\"0.64081\" />\n    \u003C/inertial>\n    \u003Cvisual>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link1.STL\" />\n      \u003C/geometry>\n      \u003Cmaterial\n        name=\"\">\n        \u003Ccolor\n          rgba=\"0.79216 0.81961 0.93333 1\" />\n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link1.STL\" />\n      \u003C/geometry>\n    \u003C/collision>\n  \u003C/link>\n  \u003Cjoint\n    name=\"joint1\"\n    type=\"revolute\">\n    \u003Corigin\n      xyz=\"-0.081947 -0.039447 0.11191\"\n      rpy=\"0.40394 -1.5708 0\" />\n    \u003Cparent\n      link=\"base_link\" />\n    \u003Cchild\n      link=\"link1\" />\n    \u003Caxis\n      xyz=\"1 0 0\" />\n    \u003Climit\n      lower=\"-3.14\"\n      upper=\"3.14\"\n      effort=\"100\"\n      velocity=\"1\" />\n  \u003C/joint>\n  \u003Clink\n    name=\"link2\">\n    \u003Cinertial>\n      \u003Corigin\n        xyz=\"0.00711598521454873 0.430460941882332 -0.181074256126024\"\n        rpy=\"0 0 0\" />\n      \u003Cmass\n        value=\"30.6115349647897\" />\n      \u003Cinertia\n        ixx=\"2.84056101478768\"\n        ixy=\"0.00176700425270318\"\n        ixz=\"-0.000605507690039326\"\n        iyy=\"0.803420593303961\"\n        iyz=\"0.881921487314161\"\n        izz=\"2.25142021571439\" />\n    \u003C/inertial>\n    \u003Cvisual>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link2.STL\" />\n      \u003C/geometry>\n      \u003Cmaterial\n        name=\"\">\n        \u003Ccolor\n          rgba=\"0.792156862745098 0.819607843137255 0.933333333333333 1\" />\n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link2.STL\" />\n      \u003C/geometry>\n    \u003C/collision>\n  \u003C/link>\n  \u003Cjoint\n    name=\"joint2\"\n    type=\"revolute\">\n    \u003Corigin\n      xyz=\"0.35141 -0.28119 0.13918\"\n      rpy=\"-2.0566 1.1982 1.5708\" />\n    \u003Cparent\n      link=\"link1\" />\n    \u003Cchild\n      link=\"link2\" />\n    \u003Caxis\n      xyz=\"-1 0 0\" />\n    \u003Climit\n      lower=\"-3.14\"\n      upper=\"3.14\"\n      effort=\"100\"\n      velocity=\"1\" />\n  \u003C/joint>\n  \u003Clink\n    name=\"link3\">\n    \u003Cinertial>\n      \u003Corigin\n        xyz=\"0.00112887115421612 0.0366346915274407 0.31720330934553\"\n        rpy=\"0 0 0\" />\n      \u003Cmass\n        value=\"32.192726667578\" />\n      \u003Cinertia\n        ixx=\"4.01515983126431\"\n        ixy=\"0.0013193752174692\"\n        ixz=\"0.0113529938102155\"\n        iyy=\"3.86196311673823\"\n        iyz=\"-0.336440022491883\"\n        izz=\"0.399977905540088\" />\n    \u003C/inertial>\n    \u003Cvisual>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link3.STL\" />\n      \u003C/geometry>\n      \u003Cmaterial\n        name=\"\">\n        \u003Ccolor\n          rgba=\"0.792156862745098 0.819607843137255 0.933333333333333 1\" />\n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link3.STL\" />\n      \u003C/geometry>\n    \u003C/collision>\n  \u003C/link>\n  \u003Cjoint\n    name=\"joint3\"\n    type=\"revolute\">\n    \u003Corigin\n      xyz=\"0.3765 0.82481 -0.49591\"\n      rpy=\"2.5802 0 0\" />\n    \u003Cparent\n      link=\"link2\" />\n    \u003Cchild\n      link=\"link3\" />\n    \u003Caxis\n      xyz=\"1 0 0\" />\n    \u003Climit\n      lower=\"-3.14\"\n      upper=\"3.14\"\n      effort=\"100\"\n      velocity=\"1\" />\n  \u003C/joint>\n  \u003Clink\n    name=\"link4\">\n    \u003Cinertial>\n      \u003Corigin\n        xyz=\"0.162516620557178 -0.213844847423599 3.38133504529381E-07\"\n        rpy=\"0 0 0\" />\n      \u003Cmass\n        value=\"12.1646007734167\" />\n      \u003Cinertia\n        ixx=\"0.288208127188405\"\n        ixy=\"0.00080326659836716\"\n        ixz=\"8.72489392803044E-07\"\n        iyy=\"0.107000706575729\"\n        iyz=\"-1.48935044230573E-07\"\n        izz=\"0.295147863994059\" />\n    \u003C/inertial>\n    \u003Cvisual>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link4.STL\" />\n      \u003C/geometry>\n      \u003Cmaterial\n        name=\"\">\n        \u003Ccolor\n          rgba=\"0.792156862745098 0.819607843137255 0.933333333333333 1\" />\n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin\n        xyz=\"0 0 0\"\n        rpy=\"0 0 0\" />\n      \u003Cgeometry>\n        \u003Cmesh\n          filename=\"package://cpp01_urdf/meshes/link4.STL\" />\n      \u003C/geometry>\n    \u003C/collision>\n  \u003C/link>\n  \u003Cjoint\n    name=\"joint4\"\n    type=\"revolute\">\n    \u003Corigin\n      xyz=\"0 0.070837 0.99728\"\n      rpy=\"0.82315 -1.5708 0\" />\n    \u003Cparent\n      link=\"link3\" />\n    \u003Cchild\n      link=\"link4\" />\n    \u003Caxis\n      xyz=\"1 0 0\" />\n    \u003Climit\n      lower=\"-3.14\"\n      upper=\"3.14\"\n      effort=\"100\"\n      velocity=\"1\" />\n  \u003C/joint>\n\u003C/robot>\n",[71,9418,9419,9441,9448,9460,9467,9478,9486,9493,9503,9514,9521,9533,9540,9550,9560,9570,9580,9590,9602,9610,9618,9624,9633,9643,9651,9658,9670,9678,9685,9697,9704,9716,9724,9732,9740,9746,9754,9764,9772,9778,9788,9796,9804,9812,9818,9829,9837,9843,9852,9862,9868,9879,9885,9894,9903,9912,9921,9930,9941,9949,9957,9963,9971,9981,9989,9995,10006,10014,10020,10030,10036,10047,10055,10063,10071,10077,10085,10095,10103,10109,10119,10127,10135,10143,10150,10159,10171,10177,10187,10199,10206,10217,10224,10234,10241,10252,10259,10269,10279,10289,10301,10309,10315,10326,10334,10340,10349,10359,10365,10376,10382,10391,10401,10411,10421,10431,10443,10452,10461,10468,10477,10488,10497,10504,10516,10525,10532,10543,10550,10561,10570,10579,10588,10595,10604,10615,10624,10631,10642,10651,10660,10669,10676,10686,10697,10704,10714,10726,10733,10744,10751,10762,10769,10781,10788,10797,10806,10815,10826,10835,10842,10854,10863,10870,10880,10891,10898,10910,10917,10927,10937,10947,10957,10967,10979,10988,10997,11004,11013,11024,11033,11040,11052,11061,11068,11079,11086,11097,11106,11115,11124,11131,11140,11151,11160,11167,11178,11187,11196,11205,11212,11222,11233,11240,11250,11262,11269,11280,11287,11298,11305,11316,11323,11332,11341,11350,11361,11370,11377,11389,11398,11405,11415,11426,11433,11445,11452,11462,11472,11482,11492,11502,11514,11523,11532,11539,11548,11559,11568,11575,11587,11596,11603,11614,11621,11632,11641,11650,11659,11666,11675,11686,11695,11702,11713,11722,11731,11740,11747,11757,11768,11775,11785,11797,11804,11815,11822,11833,11840,11851,11858,11867,11876,11885,11896,11905],{"__ignoreMap":19},[84,9420,9421,9423,9425,9427,9429,9431,9434,9436,9439],{"class":86,"line":87},[84,9422,8557],{"class":782},[84,9424,769],{"class":786},[84,9426,8562],{"class":90},[84,9428,840],{"class":782},[84,9430,8567],{"class":94},[84,9432,9433],{"class":90}," encoding",[84,9435,840],{"class":782},[84,9437,9438],{"class":94},"\"utf-8\"",[84,9440,8570],{"class":782},[84,9442,9443,9445],{"class":86,"line":636},[84,9444,1369],{"class":782},[84,9446,9447],{"class":786},"robot\n",[84,9449,9450,9453,9455,9458],{"class":86,"line":793},[84,9451,9452],{"class":90},"  name",[84,9454,840],{"class":782},[84,9456,9457],{"class":94},"\"4axisrobot\"",[84,9459,814],{"class":782},[84,9461,9462,9464],{"class":86,"line":805},[84,9463,3815],{"class":782},[84,9465,9466],{"class":786},"link\n",[84,9468,9469,9472,9474,9476],{"class":86,"line":817},[84,9470,9471],{"class":90},"    name",[84,9473,840],{"class":782},[84,9475,1679],{"class":94},[84,9477,814],{"class":782},[84,9479,9480,9482,9484],{"class":86,"line":828},[84,9481,1670],{"class":782},[84,9483,3727],{"class":786},[84,9485,814],{"class":782},[84,9487,9488,9490],{"class":86,"line":849},[84,9489,1690],{"class":782},[84,9491,9492],{"class":786},"origin\n",[84,9494,9495,9498,9500],{"class":86,"line":859},[84,9496,9497],{"class":90},"        xyz",[84,9499,840],{"class":782},[84,9501,9502],{"class":94},"\"-0.0819771145953119 -0.0394328123681598 -0.0605612328464761\"\n",[84,9504,9505,9508,9510,9512],{"class":86,"line":869},[84,9506,9507],{"class":90},"        rpy",[84,9509,840],{"class":782},[84,9511,3935],{"class":94},[84,9513,3843],{"class":782},[84,9515,9516,9518],{"class":86,"line":879},[84,9517,1690],{"class":782},[84,9519,9520],{"class":786},"mass\n",[84,9522,9523,9526,9528,9531],{"class":86,"line":1012},[84,9524,9525],{"class":90},"        value",[84,9527,840],{"class":782},[84,9529,9530],{"class":94},"\"7.43807257011133\"",[84,9532,3843],{"class":782},[84,9534,9535,9537],{"class":86,"line":1017},[84,9536,1690],{"class":782},[84,9538,9539],{"class":786},"inertia\n",[84,9541,9542,9545,9547],{"class":86,"line":1034},[84,9543,9544],{"class":90},"        ixx",[84,9546,840],{"class":782},[84,9548,9549],{"class":94},"\"0.33173827700719\"\n",[84,9551,9552,9555,9557],{"class":86,"line":1056},[84,9553,9554],{"class":90},"        ixy",[84,9556,840],{"class":782},[84,9558,9559],{"class":94},"\"-1.91350798633049E-05\"\n",[84,9561,9562,9565,9567],{"class":86,"line":1076},[84,9563,9564],{"class":90},"        ixz",[84,9566,840],{"class":782},[84,9568,9569],{"class":94},"\"-2.38586363043925E-05\"\n",[84,9571,9572,9575,9577],{"class":86,"line":1107},[84,9573,9574],{"class":90},"        iyy",[84,9576,840],{"class":782},[84,9578,9579],{"class":94},"\"0.510937907009661\"\n",[84,9581,9582,9585,9587],{"class":86,"line":1112},[84,9583,9584],{"class":90},"        iyz",[84,9586,840],{"class":782},[84,9588,9589],{"class":94},"\"1.14706407748075E-05\"\n",[84,9591,9592,9595,9597,9600],{"class":86,"line":1118},[84,9593,9594],{"class":90},"        izz",[84,9596,840],{"class":782},[84,9598,9599],{"class":94},"\"0.66107272632796\"",[84,9601,3843],{"class":782},[84,9603,9604,9606,9608],{"class":86,"line":1123},[84,9605,1750],{"class":782},[84,9607,3727],{"class":786},[84,9609,814],{"class":782},[84,9611,9612,9614,9616],{"class":86,"line":1129},[84,9613,1670],{"class":782},[84,9615,811],{"class":786},[84,9617,814],{"class":782},[84,9619,9620,9622],{"class":86,"line":1151},[84,9621,1690],{"class":782},[84,9623,9492],{"class":786},[84,9625,9626,9628,9630],{"class":86,"line":1162},[84,9627,9497],{"class":90},[84,9629,840],{"class":782},[84,9631,9632],{"class":94},"\"0 0 0\"\n",[84,9634,9635,9637,9639,9641],{"class":86,"line":1176},[84,9636,9507],{"class":90},[84,9638,840],{"class":782},[84,9640,3935],{"class":94},[84,9642,3843],{"class":782},[84,9644,9645,9647,9649],{"class":86,"line":1188},[84,9646,1690],{"class":782},[84,9648,823],{"class":786},[84,9650,814],{"class":782},[84,9652,9653,9655],{"class":86,"line":1205},[84,9654,1703],{"class":782},[84,9656,9657],{"class":786},"mesh\n",[84,9659,9660,9663,9665,9668],{"class":86,"line":1211},[84,9661,9662],{"class":90},"          filename",[84,9664,840],{"class":782},[84,9666,9667],{"class":94},"\"package://cpp01_urdf/meshes/base_link.STL\"",[84,9669,3843],{"class":782},[84,9671,9672,9674,9676],{"class":86,"line":1216},[84,9673,1741],{"class":782},[84,9675,823],{"class":786},[84,9677,814],{"class":782},[84,9679,9680,9682],{"class":86,"line":1222},[84,9681,1690],{"class":782},[84,9683,9684],{"class":786},"material\n",[84,9686,9687,9690,9692,9695],{"class":86,"line":1232},[84,9688,9689],{"class":90},"        name",[84,9691,840],{"class":782},[84,9693,9694],{"class":94},"\"\"",[84,9696,814],{"class":782},[84,9698,9699,9701],{"class":86,"line":1244},[84,9700,1703],{"class":782},[84,9702,9703],{"class":786},"color\n",[84,9705,9706,9709,9711,9714],{"class":86,"line":1254},[84,9707,9708],{"class":90},"          rgba",[84,9710,840],{"class":782},[84,9712,9713],{"class":94},"\"0.792156862745098 0.819607843137255 0.933333333333333 1\"",[84,9715,3843],{"class":782},[84,9717,9718,9720,9722],{"class":86,"line":1259},[84,9719,1741],{"class":782},[84,9721,3655],{"class":786},[84,9723,814],{"class":782},[84,9725,9726,9728,9730],{"class":86,"line":1264},[84,9727,1750],{"class":782},[84,9729,811],{"class":786},[84,9731,814],{"class":782},[84,9733,9734,9736,9738],{"class":86,"line":1270},[84,9735,1670],{"class":782},[84,9737,3692],{"class":786},[84,9739,814],{"class":782},[84,9741,9742,9744],{"class":86,"line":1280},[84,9743,1690],{"class":782},[84,9745,9492],{"class":786},[84,9747,9748,9750,9752],{"class":86,"line":1292},[84,9749,9497],{"class":90},[84,9751,840],{"class":782},[84,9753,9632],{"class":94},[84,9755,9756,9758,9760,9762],{"class":86,"line":1302},[84,9757,9507],{"class":90},[84,9759,840],{"class":782},[84,9761,3935],{"class":94},[84,9763,3843],{"class":782},[84,9765,9766,9768,9770],{"class":86,"line":1307},[84,9767,1690],{"class":782},[84,9769,823],{"class":786},[84,9771,814],{"class":782},[84,9773,9774,9776],{"class":86,"line":1313},[84,9775,1703],{"class":782},[84,9777,9657],{"class":786},[84,9779,9780,9782,9784,9786],{"class":86,"line":1318},[84,9781,9662],{"class":90},[84,9783,840],{"class":782},[84,9785,9667],{"class":94},[84,9787,3843],{"class":782},[84,9789,9790,9792,9794],{"class":86,"line":1327},[84,9791,1741],{"class":782},[84,9793,823],{"class":786},[84,9795,814],{"class":782},[84,9797,9798,9800,9802],{"class":86,"line":1333},[84,9799,1750],{"class":782},[84,9801,3692],{"class":786},[84,9803,814],{"class":782},[84,9805,9806,9808,9810],{"class":86,"line":1339},[84,9807,1759],{"class":782},[84,9809,799],{"class":786},[84,9811,814],{"class":782},[84,9813,9814,9816],{"class":86,"line":1345},[84,9815,3815],{"class":782},[84,9817,9466],{"class":786},[84,9819,9820,9822,9824,9827],{"class":86,"line":1351},[84,9821,9471],{"class":90},[84,9823,840],{"class":782},[84,9825,9826],{"class":94},"\"link1\"",[84,9828,814],{"class":782},[84,9830,9831,9833,9835],{"class":86,"line":2236},[84,9832,1670],{"class":782},[84,9834,3727],{"class":786},[84,9836,814],{"class":782},[84,9838,9839,9841],{"class":86,"line":2241},[84,9840,1690],{"class":782},[84,9842,9492],{"class":786},[84,9844,9845,9847,9849],{"class":86,"line":2251},[84,9846,9497],{"class":90},[84,9848,840],{"class":782},[84,9850,9851],{"class":94},"\"0.19141 -0.050676 -0.030057\"\n",[84,9853,9854,9856,9858,9860],{"class":86,"line":2262},[84,9855,9507],{"class":90},[84,9857,840],{"class":782},[84,9859,3935],{"class":94},[84,9861,3843],{"class":782},[84,9863,9864,9866],{"class":86,"line":2271},[84,9865,1690],{"class":782},[84,9867,9520],{"class":786},[84,9869,9870,9872,9874,9877],{"class":86,"line":2276},[84,9871,9525],{"class":90},[84,9873,840],{"class":782},[84,9875,9876],{"class":94},"\"21.822\"",[84,9878,3843],{"class":782},[84,9880,9881,9883],{"class":86,"line":2281},[84,9882,1690],{"class":782},[84,9884,9539],{"class":786},[84,9886,9887,9889,9891],{"class":86,"line":2290},[84,9888,9544],{"class":90},[84,9890,840],{"class":782},[84,9892,9893],{"class":94},"\"0.50464\"\n",[84,9895,9896,9898,9900],{"class":86,"line":2898},[84,9897,9554],{"class":90},[84,9899,840],{"class":782},[84,9901,9902],{"class":94},"\"0.13295\"\n",[84,9904,9905,9907,9909],{"class":86,"line":2909},[84,9906,9564],{"class":90},[84,9908,840],{"class":782},[84,9910,9911],{"class":94},"\"0.087353\"\n",[84,9913,9914,9916,9918],{"class":86,"line":2937},[84,9915,9574],{"class":90},[84,9917,840],{"class":782},[84,9919,9920],{"class":94},"\"0.59136\"\n",[84,9922,9923,9925,9927],{"class":86,"line":2942},[84,9924,9584],{"class":90},[84,9926,840],{"class":782},[84,9928,9929],{"class":94},"\"-0.066053\"\n",[84,9931,9932,9934,9936,9939],{"class":86,"line":2947},[84,9933,9594],{"class":90},[84,9935,840],{"class":782},[84,9937,9938],{"class":94},"\"0.64081\"",[84,9940,3843],{"class":782},[84,9942,9943,9945,9947],{"class":86,"line":2956},[84,9944,1750],{"class":782},[84,9946,3727],{"class":786},[84,9948,814],{"class":782},[84,9950,9951,9953,9955],{"class":86,"line":3346},[84,9952,1670],{"class":782},[84,9954,811],{"class":786},[84,9956,814],{"class":782},[84,9958,9959,9961],{"class":86,"line":3352},[84,9960,1690],{"class":782},[84,9962,9492],{"class":786},[84,9964,9965,9967,9969],{"class":86,"line":3357},[84,9966,9497],{"class":90},[84,9968,840],{"class":782},[84,9970,9632],{"class":94},[84,9972,9973,9975,9977,9979],{"class":86,"line":3363},[84,9974,9507],{"class":90},[84,9976,840],{"class":782},[84,9978,3935],{"class":94},[84,9980,3843],{"class":782},[84,9982,9983,9985,9987],{"class":86,"line":3368},[84,9984,1690],{"class":782},[84,9986,823],{"class":786},[84,9988,814],{"class":782},[84,9990,9991,9993],{"class":86,"line":3374},[84,9992,1703],{"class":782},[84,9994,9657],{"class":786},[84,9996,9997,9999,10001,10004],{"class":86,"line":3383},[84,9998,9662],{"class":90},[84,10000,840],{"class":782},[84,10002,10003],{"class":94},"\"package://cpp01_urdf/meshes/link1.STL\"",[84,10005,3843],{"class":782},[84,10007,10008,10010,10012],{"class":86,"line":3395},[84,10009,1741],{"class":782},[84,10011,823],{"class":786},[84,10013,814],{"class":782},[84,10015,10016,10018],{"class":86,"line":3405},[84,10017,1690],{"class":782},[84,10019,9684],{"class":786},[84,10021,10022,10024,10026,10028],{"class":86,"line":3410},[84,10023,9689],{"class":90},[84,10025,840],{"class":782},[84,10027,9694],{"class":94},[84,10029,814],{"class":782},[84,10031,10032,10034],{"class":86,"line":3415},[84,10033,1703],{"class":782},[84,10035,9703],{"class":786},[84,10037,10038,10040,10042,10045],{"class":86,"line":3424},[84,10039,9708],{"class":90},[84,10041,840],{"class":782},[84,10043,10044],{"class":94},"\"0.79216 0.81961 0.93333 1\"",[84,10046,3843],{"class":782},[84,10048,10049,10051,10053],{"class":86,"line":3435},[84,10050,1741],{"class":782},[84,10052,3655],{"class":786},[84,10054,814],{"class":782},[84,10056,10057,10059,10061],{"class":86,"line":3446},[84,10058,1750],{"class":782},[84,10060,811],{"class":786},[84,10062,814],{"class":782},[84,10064,10065,10067,10069],{"class":86,"line":3451},[84,10066,1670],{"class":782},[84,10068,3692],{"class":786},[84,10070,814],{"class":782},[84,10072,10073,10075],{"class":86,"line":3457},[84,10074,1690],{"class":782},[84,10076,9492],{"class":786},[84,10078,10079,10081,10083],{"class":86,"line":3471},[84,10080,9497],{"class":90},[84,10082,840],{"class":782},[84,10084,9632],{"class":94},[84,10086,10087,10089,10091,10093],{"class":86,"line":3476},[84,10088,9507],{"class":90},[84,10090,840],{"class":782},[84,10092,3935],{"class":94},[84,10094,3843],{"class":782},[84,10096,10097,10099,10101],{"class":86,"line":3481},[84,10098,1690],{"class":782},[84,10100,823],{"class":786},[84,10102,814],{"class":782},[84,10104,10105,10107],{"class":86,"line":3486},[84,10106,1703],{"class":782},[84,10108,9657],{"class":786},[84,10110,10111,10113,10115,10117],{"class":86,"line":3495},[84,10112,9662],{"class":90},[84,10114,840],{"class":782},[84,10116,10003],{"class":94},[84,10118,3843],{"class":782},[84,10120,10121,10123,10125],{"class":86,"line":7192},[84,10122,1741],{"class":782},[84,10124,823],{"class":786},[84,10126,814],{"class":782},[84,10128,10129,10131,10133],{"class":86,"line":7207},[84,10130,1750],{"class":782},[84,10132,3692],{"class":786},[84,10134,814],{"class":782},[84,10136,10137,10139,10141],{"class":86,"line":7216},[84,10138,1759],{"class":782},[84,10140,799],{"class":786},[84,10142,814],{"class":782},[84,10144,10145,10147],{"class":86,"line":7225},[84,10146,3815],{"class":782},[84,10148,10149],{"class":786},"joint\n",[84,10151,10152,10154,10156],{"class":86,"line":7230},[84,10153,9471],{"class":90},[84,10155,840],{"class":782},[84,10157,10158],{"class":94},"\"joint1\"\n",[84,10160,10161,10164,10166,10169],{"class":86,"line":7252},[84,10162,10163],{"class":90},"    type",[84,10165,840],{"class":782},[84,10167,10168],{"class":94},"\"revolute\"",[84,10170,814],{"class":782},[84,10172,10173,10175],{"class":86,"line":7267},[84,10174,1670],{"class":782},[84,10176,9492],{"class":786},[84,10178,10179,10182,10184],{"class":86,"line":7282},[84,10180,10181],{"class":90},"      xyz",[84,10183,840],{"class":782},[84,10185,10186],{"class":94},"\"-0.081947 -0.039447 0.11191\"\n",[84,10188,10189,10192,10194,10197],{"class":86,"line":7287},[84,10190,10191],{"class":90},"      rpy",[84,10193,840],{"class":782},[84,10195,10196],{"class":94},"\"0.40394 -1.5708 0\"",[84,10198,3843],{"class":782},[84,10200,10201,10203],{"class":86,"line":7309},[84,10202,1670],{"class":782},[84,10204,10205],{"class":786},"parent\n",[84,10207,10208,10211,10213,10215],{"class":86,"line":7324},[84,10209,10210],{"class":90},"      link",[84,10212,840],{"class":782},[84,10214,1679],{"class":94},[84,10216,3843],{"class":782},[84,10218,10219,10221],{"class":86,"line":7333},[84,10220,1670],{"class":782},[84,10222,10223],{"class":786},"child\n",[84,10225,10226,10228,10230,10232],{"class":86,"line":7338},[84,10227,10210],{"class":90},[84,10229,840],{"class":782},[84,10231,9826],{"class":94},[84,10233,3843],{"class":782},[84,10235,10236,10238],{"class":86,"line":7354},[84,10237,1670],{"class":782},[84,10239,10240],{"class":786},"axis\n",[84,10242,10243,10245,10247,10250],{"class":86,"line":7363},[84,10244,10181],{"class":90},[84,10246,840],{"class":782},[84,10248,10249],{"class":94},"\"1 0 0\"",[84,10251,3843],{"class":782},[84,10253,10254,10256],{"class":86,"line":7372},[84,10255,1670],{"class":782},[84,10257,10258],{"class":786},"limit\n",[84,10260,10261,10264,10266],{"class":86,"line":7393},[84,10262,10263],{"class":90},"      lower",[84,10265,840],{"class":782},[84,10267,10268],{"class":94},"\"-3.14\"\n",[84,10270,10271,10274,10276],{"class":86,"line":7402},[84,10272,10273],{"class":90},"      upper",[84,10275,840],{"class":782},[84,10277,10278],{"class":94},"\"3.14\"\n",[84,10280,10281,10284,10286],{"class":86,"line":7423},[84,10282,10283],{"class":90},"      effort",[84,10285,840],{"class":782},[84,10287,10288],{"class":94},"\"100\"\n",[84,10290,10291,10294,10296,10299],{"class":86,"line":7438},[84,10292,10293],{"class":90},"      velocity",[84,10295,840],{"class":782},[84,10297,10298],{"class":94},"\"1\"",[84,10300,3843],{"class":782},[84,10302,10303,10305,10307],{"class":86,"line":7447},[84,10304,1759],{"class":782},[84,10306,4645],{"class":786},[84,10308,814],{"class":782},[84,10310,10311,10313],{"class":86,"line":7456},[84,10312,3815],{"class":782},[84,10314,9466],{"class":786},[84,10316,10317,10319,10321,10324],{"class":86,"line":7461},[84,10318,9471],{"class":90},[84,10320,840],{"class":782},[84,10322,10323],{"class":94},"\"link2\"",[84,10325,814],{"class":782},[84,10327,10328,10330,10332],{"class":86,"line":7483},[84,10329,1670],{"class":782},[84,10331,3727],{"class":786},[84,10333,814],{"class":782},[84,10335,10336,10338],{"class":86,"line":7498},[84,10337,1690],{"class":782},[84,10339,9492],{"class":786},[84,10341,10342,10344,10346],{"class":86,"line":7513},[84,10343,9497],{"class":90},[84,10345,840],{"class":782},[84,10347,10348],{"class":94},"\"0.00711598521454873 0.430460941882332 -0.181074256126024\"\n",[84,10350,10351,10353,10355,10357],{"class":86,"line":7518},[84,10352,9507],{"class":90},[84,10354,840],{"class":782},[84,10356,3935],{"class":94},[84,10358,3843],{"class":782},[84,10360,10361,10363],{"class":86,"line":7540},[84,10362,1690],{"class":782},[84,10364,9520],{"class":786},[84,10366,10367,10369,10371,10374],{"class":86,"line":7555},[84,10368,9525],{"class":90},[84,10370,840],{"class":782},[84,10372,10373],{"class":94},"\"30.6115349647897\"",[84,10375,3843],{"class":782},[84,10377,10378,10380],{"class":86,"line":7564},[84,10379,1690],{"class":782},[84,10381,9539],{"class":786},[84,10383,10384,10386,10388],{"class":86,"line":7569},[84,10385,9544],{"class":90},[84,10387,840],{"class":782},[84,10389,10390],{"class":94},"\"2.84056101478768\"\n",[84,10392,10394,10396,10398],{"class":86,"line":10393},112,[84,10395,9554],{"class":90},[84,10397,840],{"class":782},[84,10399,10400],{"class":94},"\"0.00176700425270318\"\n",[84,10402,10404,10406,10408],{"class":86,"line":10403},113,[84,10405,9564],{"class":90},[84,10407,840],{"class":782},[84,10409,10410],{"class":94},"\"-0.000605507690039326\"\n",[84,10412,10414,10416,10418],{"class":86,"line":10413},114,[84,10415,9574],{"class":90},[84,10417,840],{"class":782},[84,10419,10420],{"class":94},"\"0.803420593303961\"\n",[84,10422,10424,10426,10428],{"class":86,"line":10423},115,[84,10425,9584],{"class":90},[84,10427,840],{"class":782},[84,10429,10430],{"class":94},"\"0.881921487314161\"\n",[84,10432,10434,10436,10438,10441],{"class":86,"line":10433},116,[84,10435,9594],{"class":90},[84,10437,840],{"class":782},[84,10439,10440],{"class":94},"\"2.25142021571439\"",[84,10442,3843],{"class":782},[84,10444,10446,10448,10450],{"class":86,"line":10445},117,[84,10447,1750],{"class":782},[84,10449,3727],{"class":786},[84,10451,814],{"class":782},[84,10453,10455,10457,10459],{"class":86,"line":10454},118,[84,10456,1670],{"class":782},[84,10458,811],{"class":786},[84,10460,814],{"class":782},[84,10462,10464,10466],{"class":86,"line":10463},119,[84,10465,1690],{"class":782},[84,10467,9492],{"class":786},[84,10469,10471,10473,10475],{"class":86,"line":10470},120,[84,10472,9497],{"class":90},[84,10474,840],{"class":782},[84,10476,9632],{"class":94},[84,10478,10480,10482,10484,10486],{"class":86,"line":10479},121,[84,10481,9507],{"class":90},[84,10483,840],{"class":782},[84,10485,3935],{"class":94},[84,10487,3843],{"class":782},[84,10489,10491,10493,10495],{"class":86,"line":10490},122,[84,10492,1690],{"class":782},[84,10494,823],{"class":786},[84,10496,814],{"class":782},[84,10498,10500,10502],{"class":86,"line":10499},123,[84,10501,1703],{"class":782},[84,10503,9657],{"class":786},[84,10505,10507,10509,10511,10514],{"class":86,"line":10506},124,[84,10508,9662],{"class":90},[84,10510,840],{"class":782},[84,10512,10513],{"class":94},"\"package://cpp01_urdf/meshes/link2.STL\"",[84,10515,3843],{"class":782},[84,10517,10519,10521,10523],{"class":86,"line":10518},125,[84,10520,1741],{"class":782},[84,10522,823],{"class":786},[84,10524,814],{"class":782},[84,10526,10528,10530],{"class":86,"line":10527},126,[84,10529,1690],{"class":782},[84,10531,9684],{"class":786},[84,10533,10535,10537,10539,10541],{"class":86,"line":10534},127,[84,10536,9689],{"class":90},[84,10538,840],{"class":782},[84,10540,9694],{"class":94},[84,10542,814],{"class":782},[84,10544,10546,10548],{"class":86,"line":10545},128,[84,10547,1703],{"class":782},[84,10549,9703],{"class":786},[84,10551,10553,10555,10557,10559],{"class":86,"line":10552},129,[84,10554,9708],{"class":90},[84,10556,840],{"class":782},[84,10558,9713],{"class":94},[84,10560,3843],{"class":782},[84,10562,10564,10566,10568],{"class":86,"line":10563},130,[84,10565,1741],{"class":782},[84,10567,3655],{"class":786},[84,10569,814],{"class":782},[84,10571,10573,10575,10577],{"class":86,"line":10572},131,[84,10574,1750],{"class":782},[84,10576,811],{"class":786},[84,10578,814],{"class":782},[84,10580,10582,10584,10586],{"class":86,"line":10581},132,[84,10583,1670],{"class":782},[84,10585,3692],{"class":786},[84,10587,814],{"class":782},[84,10589,10591,10593],{"class":86,"line":10590},133,[84,10592,1690],{"class":782},[84,10594,9492],{"class":786},[84,10596,10598,10600,10602],{"class":86,"line":10597},134,[84,10599,9497],{"class":90},[84,10601,840],{"class":782},[84,10603,9632],{"class":94},[84,10605,10607,10609,10611,10613],{"class":86,"line":10606},135,[84,10608,9507],{"class":90},[84,10610,840],{"class":782},[84,10612,3935],{"class":94},[84,10614,3843],{"class":782},[84,10616,10618,10620,10622],{"class":86,"line":10617},136,[84,10619,1690],{"class":782},[84,10621,823],{"class":786},[84,10623,814],{"class":782},[84,10625,10627,10629],{"class":86,"line":10626},137,[84,10628,1703],{"class":782},[84,10630,9657],{"class":786},[84,10632,10634,10636,10638,10640],{"class":86,"line":10633},138,[84,10635,9662],{"class":90},[84,10637,840],{"class":782},[84,10639,10513],{"class":94},[84,10641,3843],{"class":782},[84,10643,10645,10647,10649],{"class":86,"line":10644},139,[84,10646,1741],{"class":782},[84,10648,823],{"class":786},[84,10650,814],{"class":782},[84,10652,10654,10656,10658],{"class":86,"line":10653},140,[84,10655,1750],{"class":782},[84,10657,3692],{"class":786},[84,10659,814],{"class":782},[84,10661,10663,10665,10667],{"class":86,"line":10662},141,[84,10664,1759],{"class":782},[84,10666,799],{"class":786},[84,10668,814],{"class":782},[84,10670,10672,10674],{"class":86,"line":10671},142,[84,10673,3815],{"class":782},[84,10675,10149],{"class":786},[84,10677,10679,10681,10683],{"class":86,"line":10678},143,[84,10680,9471],{"class":90},[84,10682,840],{"class":782},[84,10684,10685],{"class":94},"\"joint2\"\n",[84,10687,10689,10691,10693,10695],{"class":86,"line":10688},144,[84,10690,10163],{"class":90},[84,10692,840],{"class":782},[84,10694,10168],{"class":94},[84,10696,814],{"class":782},[84,10698,10700,10702],{"class":86,"line":10699},145,[84,10701,1670],{"class":782},[84,10703,9492],{"class":786},[84,10705,10707,10709,10711],{"class":86,"line":10706},146,[84,10708,10181],{"class":90},[84,10710,840],{"class":782},[84,10712,10713],{"class":94},"\"0.35141 -0.28119 0.13918\"\n",[84,10715,10717,10719,10721,10724],{"class":86,"line":10716},147,[84,10718,10191],{"class":90},[84,10720,840],{"class":782},[84,10722,10723],{"class":94},"\"-2.0566 1.1982 1.5708\"",[84,10725,3843],{"class":782},[84,10727,10729,10731],{"class":86,"line":10728},148,[84,10730,1670],{"class":782},[84,10732,10205],{"class":786},[84,10734,10736,10738,10740,10742],{"class":86,"line":10735},149,[84,10737,10210],{"class":90},[84,10739,840],{"class":782},[84,10741,9826],{"class":94},[84,10743,3843],{"class":782},[84,10745,10747,10749],{"class":86,"line":10746},150,[84,10748,1670],{"class":782},[84,10750,10223],{"class":786},[84,10752,10754,10756,10758,10760],{"class":86,"line":10753},151,[84,10755,10210],{"class":90},[84,10757,840],{"class":782},[84,10759,10323],{"class":94},[84,10761,3843],{"class":782},[84,10763,10765,10767],{"class":86,"line":10764},152,[84,10766,1670],{"class":782},[84,10768,10240],{"class":786},[84,10770,10772,10774,10776,10779],{"class":86,"line":10771},153,[84,10773,10181],{"class":90},[84,10775,840],{"class":782},[84,10777,10778],{"class":94},"\"-1 0 0\"",[84,10780,3843],{"class":782},[84,10782,10784,10786],{"class":86,"line":10783},154,[84,10785,1670],{"class":782},[84,10787,10258],{"class":786},[84,10789,10791,10793,10795],{"class":86,"line":10790},155,[84,10792,10263],{"class":90},[84,10794,840],{"class":782},[84,10796,10268],{"class":94},[84,10798,10800,10802,10804],{"class":86,"line":10799},156,[84,10801,10273],{"class":90},[84,10803,840],{"class":782},[84,10805,10278],{"class":94},[84,10807,10809,10811,10813],{"class":86,"line":10808},157,[84,10810,10283],{"class":90},[84,10812,840],{"class":782},[84,10814,10288],{"class":94},[84,10816,10818,10820,10822,10824],{"class":86,"line":10817},158,[84,10819,10293],{"class":90},[84,10821,840],{"class":782},[84,10823,10298],{"class":94},[84,10825,3843],{"class":782},[84,10827,10829,10831,10833],{"class":86,"line":10828},159,[84,10830,1759],{"class":782},[84,10832,4645],{"class":786},[84,10834,814],{"class":782},[84,10836,10838,10840],{"class":86,"line":10837},160,[84,10839,3815],{"class":782},[84,10841,9466],{"class":786},[84,10843,10845,10847,10849,10852],{"class":86,"line":10844},161,[84,10846,9471],{"class":90},[84,10848,840],{"class":782},[84,10850,10851],{"class":94},"\"link3\"",[84,10853,814],{"class":782},[84,10855,10857,10859,10861],{"class":86,"line":10856},162,[84,10858,1670],{"class":782},[84,10860,3727],{"class":786},[84,10862,814],{"class":782},[84,10864,10866,10868],{"class":86,"line":10865},163,[84,10867,1690],{"class":782},[84,10869,9492],{"class":786},[84,10871,10873,10875,10877],{"class":86,"line":10872},164,[84,10874,9497],{"class":90},[84,10876,840],{"class":782},[84,10878,10879],{"class":94},"\"0.00112887115421612 0.0366346915274407 0.31720330934553\"\n",[84,10881,10883,10885,10887,10889],{"class":86,"line":10882},165,[84,10884,9507],{"class":90},[84,10886,840],{"class":782},[84,10888,3935],{"class":94},[84,10890,3843],{"class":782},[84,10892,10894,10896],{"class":86,"line":10893},166,[84,10895,1690],{"class":782},[84,10897,9520],{"class":786},[84,10899,10901,10903,10905,10908],{"class":86,"line":10900},167,[84,10902,9525],{"class":90},[84,10904,840],{"class":782},[84,10906,10907],{"class":94},"\"32.192726667578\"",[84,10909,3843],{"class":782},[84,10911,10913,10915],{"class":86,"line":10912},168,[84,10914,1690],{"class":782},[84,10916,9539],{"class":786},[84,10918,10920,10922,10924],{"class":86,"line":10919},169,[84,10921,9544],{"class":90},[84,10923,840],{"class":782},[84,10925,10926],{"class":94},"\"4.01515983126431\"\n",[84,10928,10930,10932,10934],{"class":86,"line":10929},170,[84,10931,9554],{"class":90},[84,10933,840],{"class":782},[84,10935,10936],{"class":94},"\"0.0013193752174692\"\n",[84,10938,10940,10942,10944],{"class":86,"line":10939},171,[84,10941,9564],{"class":90},[84,10943,840],{"class":782},[84,10945,10946],{"class":94},"\"0.0113529938102155\"\n",[84,10948,10950,10952,10954],{"class":86,"line":10949},172,[84,10951,9574],{"class":90},[84,10953,840],{"class":782},[84,10955,10956],{"class":94},"\"3.86196311673823\"\n",[84,10958,10960,10962,10964],{"class":86,"line":10959},173,[84,10961,9584],{"class":90},[84,10963,840],{"class":782},[84,10965,10966],{"class":94},"\"-0.336440022491883\"\n",[84,10968,10970,10972,10974,10977],{"class":86,"line":10969},174,[84,10971,9594],{"class":90},[84,10973,840],{"class":782},[84,10975,10976],{"class":94},"\"0.399977905540088\"",[84,10978,3843],{"class":782},[84,10980,10982,10984,10986],{"class":86,"line":10981},175,[84,10983,1750],{"class":782},[84,10985,3727],{"class":786},[84,10987,814],{"class":782},[84,10989,10991,10993,10995],{"class":86,"line":10990},176,[84,10992,1670],{"class":782},[84,10994,811],{"class":786},[84,10996,814],{"class":782},[84,10998,11000,11002],{"class":86,"line":10999},177,[84,11001,1690],{"class":782},[84,11003,9492],{"class":786},[84,11005,11007,11009,11011],{"class":86,"line":11006},178,[84,11008,9497],{"class":90},[84,11010,840],{"class":782},[84,11012,9632],{"class":94},[84,11014,11016,11018,11020,11022],{"class":86,"line":11015},179,[84,11017,9507],{"class":90},[84,11019,840],{"class":782},[84,11021,3935],{"class":94},[84,11023,3843],{"class":782},[84,11025,11027,11029,11031],{"class":86,"line":11026},180,[84,11028,1690],{"class":782},[84,11030,823],{"class":786},[84,11032,814],{"class":782},[84,11034,11036,11038],{"class":86,"line":11035},181,[84,11037,1703],{"class":782},[84,11039,9657],{"class":786},[84,11041,11043,11045,11047,11050],{"class":86,"line":11042},182,[84,11044,9662],{"class":90},[84,11046,840],{"class":782},[84,11048,11049],{"class":94},"\"package://cpp01_urdf/meshes/link3.STL\"",[84,11051,3843],{"class":782},[84,11053,11055,11057,11059],{"class":86,"line":11054},183,[84,11056,1741],{"class":782},[84,11058,823],{"class":786},[84,11060,814],{"class":782},[84,11062,11064,11066],{"class":86,"line":11063},184,[84,11065,1690],{"class":782},[84,11067,9684],{"class":786},[84,11069,11071,11073,11075,11077],{"class":86,"line":11070},185,[84,11072,9689],{"class":90},[84,11074,840],{"class":782},[84,11076,9694],{"class":94},[84,11078,814],{"class":782},[84,11080,11082,11084],{"class":86,"line":11081},186,[84,11083,1703],{"class":782},[84,11085,9703],{"class":786},[84,11087,11089,11091,11093,11095],{"class":86,"line":11088},187,[84,11090,9708],{"class":90},[84,11092,840],{"class":782},[84,11094,9713],{"class":94},[84,11096,3843],{"class":782},[84,11098,11100,11102,11104],{"class":86,"line":11099},188,[84,11101,1741],{"class":782},[84,11103,3655],{"class":786},[84,11105,814],{"class":782},[84,11107,11109,11111,11113],{"class":86,"line":11108},189,[84,11110,1750],{"class":782},[84,11112,811],{"class":786},[84,11114,814],{"class":782},[84,11116,11118,11120,11122],{"class":86,"line":11117},190,[84,11119,1670],{"class":782},[84,11121,3692],{"class":786},[84,11123,814],{"class":782},[84,11125,11127,11129],{"class":86,"line":11126},191,[84,11128,1690],{"class":782},[84,11130,9492],{"class":786},[84,11132,11134,11136,11138],{"class":86,"line":11133},192,[84,11135,9497],{"class":90},[84,11137,840],{"class":782},[84,11139,9632],{"class":94},[84,11141,11143,11145,11147,11149],{"class":86,"line":11142},193,[84,11144,9507],{"class":90},[84,11146,840],{"class":782},[84,11148,3935],{"class":94},[84,11150,3843],{"class":782},[84,11152,11154,11156,11158],{"class":86,"line":11153},194,[84,11155,1690],{"class":782},[84,11157,823],{"class":786},[84,11159,814],{"class":782},[84,11161,11163,11165],{"class":86,"line":11162},195,[84,11164,1703],{"class":782},[84,11166,9657],{"class":786},[84,11168,11170,11172,11174,11176],{"class":86,"line":11169},196,[84,11171,9662],{"class":90},[84,11173,840],{"class":782},[84,11175,11049],{"class":94},[84,11177,3843],{"class":782},[84,11179,11181,11183,11185],{"class":86,"line":11180},197,[84,11182,1741],{"class":782},[84,11184,823],{"class":786},[84,11186,814],{"class":782},[84,11188,11190,11192,11194],{"class":86,"line":11189},198,[84,11191,1750],{"class":782},[84,11193,3692],{"class":786},[84,11195,814],{"class":782},[84,11197,11199,11201,11203],{"class":86,"line":11198},199,[84,11200,1759],{"class":782},[84,11202,799],{"class":786},[84,11204,814],{"class":782},[84,11206,11208,11210],{"class":86,"line":11207},200,[84,11209,3815],{"class":782},[84,11211,10149],{"class":786},[84,11213,11215,11217,11219],{"class":86,"line":11214},201,[84,11216,9471],{"class":90},[84,11218,840],{"class":782},[84,11220,11221],{"class":94},"\"joint3\"\n",[84,11223,11225,11227,11229,11231],{"class":86,"line":11224},202,[84,11226,10163],{"class":90},[84,11228,840],{"class":782},[84,11230,10168],{"class":94},[84,11232,814],{"class":782},[84,11234,11236,11238],{"class":86,"line":11235},203,[84,11237,1670],{"class":782},[84,11239,9492],{"class":786},[84,11241,11243,11245,11247],{"class":86,"line":11242},204,[84,11244,10181],{"class":90},[84,11246,840],{"class":782},[84,11248,11249],{"class":94},"\"0.3765 0.82481 -0.49591\"\n",[84,11251,11253,11255,11257,11260],{"class":86,"line":11252},205,[84,11254,10191],{"class":90},[84,11256,840],{"class":782},[84,11258,11259],{"class":94},"\"2.5802 0 0\"",[84,11261,3843],{"class":782},[84,11263,11265,11267],{"class":86,"line":11264},206,[84,11266,1670],{"class":782},[84,11268,10205],{"class":786},[84,11270,11272,11274,11276,11278],{"class":86,"line":11271},207,[84,11273,10210],{"class":90},[84,11275,840],{"class":782},[84,11277,10323],{"class":94},[84,11279,3843],{"class":782},[84,11281,11283,11285],{"class":86,"line":11282},208,[84,11284,1670],{"class":782},[84,11286,10223],{"class":786},[84,11288,11290,11292,11294,11296],{"class":86,"line":11289},209,[84,11291,10210],{"class":90},[84,11293,840],{"class":782},[84,11295,10851],{"class":94},[84,11297,3843],{"class":782},[84,11299,11301,11303],{"class":86,"line":11300},210,[84,11302,1670],{"class":782},[84,11304,10240],{"class":786},[84,11306,11308,11310,11312,11314],{"class":86,"line":11307},211,[84,11309,10181],{"class":90},[84,11311,840],{"class":782},[84,11313,10249],{"class":94},[84,11315,3843],{"class":782},[84,11317,11319,11321],{"class":86,"line":11318},212,[84,11320,1670],{"class":782},[84,11322,10258],{"class":786},[84,11324,11326,11328,11330],{"class":86,"line":11325},213,[84,11327,10263],{"class":90},[84,11329,840],{"class":782},[84,11331,10268],{"class":94},[84,11333,11335,11337,11339],{"class":86,"line":11334},214,[84,11336,10273],{"class":90},[84,11338,840],{"class":782},[84,11340,10278],{"class":94},[84,11342,11344,11346,11348],{"class":86,"line":11343},215,[84,11345,10283],{"class":90},[84,11347,840],{"class":782},[84,11349,10288],{"class":94},[84,11351,11353,11355,11357,11359],{"class":86,"line":11352},216,[84,11354,10293],{"class":90},[84,11356,840],{"class":782},[84,11358,10298],{"class":94},[84,11360,3843],{"class":782},[84,11362,11364,11366,11368],{"class":86,"line":11363},217,[84,11365,1759],{"class":782},[84,11367,4645],{"class":786},[84,11369,814],{"class":782},[84,11371,11373,11375],{"class":86,"line":11372},218,[84,11374,3815],{"class":782},[84,11376,9466],{"class":786},[84,11378,11380,11382,11384,11387],{"class":86,"line":11379},219,[84,11381,9471],{"class":90},[84,11383,840],{"class":782},[84,11385,11386],{"class":94},"\"link4\"",[84,11388,814],{"class":782},[84,11390,11392,11394,11396],{"class":86,"line":11391},220,[84,11393,1670],{"class":782},[84,11395,3727],{"class":786},[84,11397,814],{"class":782},[84,11399,11401,11403],{"class":86,"line":11400},221,[84,11402,1690],{"class":782},[84,11404,9492],{"class":786},[84,11406,11408,11410,11412],{"class":86,"line":11407},222,[84,11409,9497],{"class":90},[84,11411,840],{"class":782},[84,11413,11414],{"class":94},"\"0.162516620557178 -0.213844847423599 3.38133504529381E-07\"\n",[84,11416,11418,11420,11422,11424],{"class":86,"line":11417},223,[84,11419,9507],{"class":90},[84,11421,840],{"class":782},[84,11423,3935],{"class":94},[84,11425,3843],{"class":782},[84,11427,11429,11431],{"class":86,"line":11428},224,[84,11430,1690],{"class":782},[84,11432,9520],{"class":786},[84,11434,11436,11438,11440,11443],{"class":86,"line":11435},225,[84,11437,9525],{"class":90},[84,11439,840],{"class":782},[84,11441,11442],{"class":94},"\"12.1646007734167\"",[84,11444,3843],{"class":782},[84,11446,11448,11450],{"class":86,"line":11447},226,[84,11449,1690],{"class":782},[84,11451,9539],{"class":786},[84,11453,11455,11457,11459],{"class":86,"line":11454},227,[84,11456,9544],{"class":90},[84,11458,840],{"class":782},[84,11460,11461],{"class":94},"\"0.288208127188405\"\n",[84,11463,11465,11467,11469],{"class":86,"line":11464},228,[84,11466,9554],{"class":90},[84,11468,840],{"class":782},[84,11470,11471],{"class":94},"\"0.00080326659836716\"\n",[84,11473,11475,11477,11479],{"class":86,"line":11474},229,[84,11476,9564],{"class":90},[84,11478,840],{"class":782},[84,11480,11481],{"class":94},"\"8.72489392803044E-07\"\n",[84,11483,11485,11487,11489],{"class":86,"line":11484},230,[84,11486,9574],{"class":90},[84,11488,840],{"class":782},[84,11490,11491],{"class":94},"\"0.107000706575729\"\n",[84,11493,11495,11497,11499],{"class":86,"line":11494},231,[84,11496,9584],{"class":90},[84,11498,840],{"class":782},[84,11500,11501],{"class":94},"\"-1.48935044230573E-07\"\n",[84,11503,11505,11507,11509,11512],{"class":86,"line":11504},232,[84,11506,9594],{"class":90},[84,11508,840],{"class":782},[84,11510,11511],{"class":94},"\"0.295147863994059\"",[84,11513,3843],{"class":782},[84,11515,11517,11519,11521],{"class":86,"line":11516},233,[84,11518,1750],{"class":782},[84,11520,3727],{"class":786},[84,11522,814],{"class":782},[84,11524,11526,11528,11530],{"class":86,"line":11525},234,[84,11527,1670],{"class":782},[84,11529,811],{"class":786},[84,11531,814],{"class":782},[84,11533,11535,11537],{"class":86,"line":11534},235,[84,11536,1690],{"class":782},[84,11538,9492],{"class":786},[84,11540,11542,11544,11546],{"class":86,"line":11541},236,[84,11543,9497],{"class":90},[84,11545,840],{"class":782},[84,11547,9632],{"class":94},[84,11549,11551,11553,11555,11557],{"class":86,"line":11550},237,[84,11552,9507],{"class":90},[84,11554,840],{"class":782},[84,11556,3935],{"class":94},[84,11558,3843],{"class":782},[84,11560,11562,11564,11566],{"class":86,"line":11561},238,[84,11563,1690],{"class":782},[84,11565,823],{"class":786},[84,11567,814],{"class":782},[84,11569,11571,11573],{"class":86,"line":11570},239,[84,11572,1703],{"class":782},[84,11574,9657],{"class":786},[84,11576,11578,11580,11582,11585],{"class":86,"line":11577},240,[84,11579,9662],{"class":90},[84,11581,840],{"class":782},[84,11583,11584],{"class":94},"\"package://cpp01_urdf/meshes/link4.STL\"",[84,11586,3843],{"class":782},[84,11588,11590,11592,11594],{"class":86,"line":11589},241,[84,11591,1741],{"class":782},[84,11593,823],{"class":786},[84,11595,814],{"class":782},[84,11597,11599,11601],{"class":86,"line":11598},242,[84,11600,1690],{"class":782},[84,11602,9684],{"class":786},[84,11604,11606,11608,11610,11612],{"class":86,"line":11605},243,[84,11607,9689],{"class":90},[84,11609,840],{"class":782},[84,11611,9694],{"class":94},[84,11613,814],{"class":782},[84,11615,11617,11619],{"class":86,"line":11616},244,[84,11618,1703],{"class":782},[84,11620,9703],{"class":786},[84,11622,11624,11626,11628,11630],{"class":86,"line":11623},245,[84,11625,9708],{"class":90},[84,11627,840],{"class":782},[84,11629,9713],{"class":94},[84,11631,3843],{"class":782},[84,11633,11635,11637,11639],{"class":86,"line":11634},246,[84,11636,1741],{"class":782},[84,11638,3655],{"class":786},[84,11640,814],{"class":782},[84,11642,11644,11646,11648],{"class":86,"line":11643},247,[84,11645,1750],{"class":782},[84,11647,811],{"class":786},[84,11649,814],{"class":782},[84,11651,11653,11655,11657],{"class":86,"line":11652},248,[84,11654,1670],{"class":782},[84,11656,3692],{"class":786},[84,11658,814],{"class":782},[84,11660,11662,11664],{"class":86,"line":11661},249,[84,11663,1690],{"class":782},[84,11665,9492],{"class":786},[84,11667,11669,11671,11673],{"class":86,"line":11668},250,[84,11670,9497],{"class":90},[84,11672,840],{"class":782},[84,11674,9632],{"class":94},[84,11676,11678,11680,11682,11684],{"class":86,"line":11677},251,[84,11679,9507],{"class":90},[84,11681,840],{"class":782},[84,11683,3935],{"class":94},[84,11685,3843],{"class":782},[84,11687,11689,11691,11693],{"class":86,"line":11688},252,[84,11690,1690],{"class":782},[84,11692,823],{"class":786},[84,11694,814],{"class":782},[84,11696,11698,11700],{"class":86,"line":11697},253,[84,11699,1703],{"class":782},[84,11701,9657],{"class":786},[84,11703,11705,11707,11709,11711],{"class":86,"line":11704},254,[84,11706,9662],{"class":90},[84,11708,840],{"class":782},[84,11710,11584],{"class":94},[84,11712,3843],{"class":782},[84,11714,11716,11718,11720],{"class":86,"line":11715},255,[84,11717,1741],{"class":782},[84,11719,823],{"class":786},[84,11721,814],{"class":782},[84,11723,11725,11727,11729],{"class":86,"line":11724},256,[84,11726,1750],{"class":782},[84,11728,3692],{"class":786},[84,11730,814],{"class":782},[84,11732,11734,11736,11738],{"class":86,"line":11733},257,[84,11735,1759],{"class":782},[84,11737,799],{"class":786},[84,11739,814],{"class":782},[84,11741,11743,11745],{"class":86,"line":11742},258,[84,11744,3815],{"class":782},[84,11746,10149],{"class":786},[84,11748,11750,11752,11754],{"class":86,"line":11749},259,[84,11751,9471],{"class":90},[84,11753,840],{"class":782},[84,11755,11756],{"class":94},"\"joint4\"\n",[84,11758,11760,11762,11764,11766],{"class":86,"line":11759},260,[84,11761,10163],{"class":90},[84,11763,840],{"class":782},[84,11765,10168],{"class":94},[84,11767,814],{"class":782},[84,11769,11771,11773],{"class":86,"line":11770},261,[84,11772,1670],{"class":782},[84,11774,9492],{"class":786},[84,11776,11778,11780,11782],{"class":86,"line":11777},262,[84,11779,10181],{"class":90},[84,11781,840],{"class":782},[84,11783,11784],{"class":94},"\"0 0.070837 0.99728\"\n",[84,11786,11788,11790,11792,11795],{"class":86,"line":11787},263,[84,11789,10191],{"class":90},[84,11791,840],{"class":782},[84,11793,11794],{"class":94},"\"0.82315 -1.5708 0\"",[84,11796,3843],{"class":782},[84,11798,11800,11802],{"class":86,"line":11799},264,[84,11801,1670],{"class":782},[84,11803,10205],{"class":786},[84,11805,11807,11809,11811,11813],{"class":86,"line":11806},265,[84,11808,10210],{"class":90},[84,11810,840],{"class":782},[84,11812,10851],{"class":94},[84,11814,3843],{"class":782},[84,11816,11818,11820],{"class":86,"line":11817},266,[84,11819,1670],{"class":782},[84,11821,10223],{"class":786},[84,11823,11825,11827,11829,11831],{"class":86,"line":11824},267,[84,11826,10210],{"class":90},[84,11828,840],{"class":782},[84,11830,11386],{"class":94},[84,11832,3843],{"class":782},[84,11834,11836,11838],{"class":86,"line":11835},268,[84,11837,1670],{"class":782},[84,11839,10240],{"class":786},[84,11841,11843,11845,11847,11849],{"class":86,"line":11842},269,[84,11844,10181],{"class":90},[84,11846,840],{"class":782},[84,11848,10249],{"class":94},[84,11850,3843],{"class":782},[84,11852,11854,11856],{"class":86,"line":11853},270,[84,11855,1670],{"class":782},[84,11857,10258],{"class":786},[84,11859,11861,11863,11865],{"class":86,"line":11860},271,[84,11862,10263],{"class":90},[84,11864,840],{"class":782},[84,11866,10268],{"class":94},[84,11868,11870,11872,11874],{"class":86,"line":11869},272,[84,11871,10273],{"class":90},[84,11873,840],{"class":782},[84,11875,10278],{"class":94},[84,11877,11879,11881,11883],{"class":86,"line":11878},273,[84,11880,10283],{"class":90},[84,11882,840],{"class":782},[84,11884,10288],{"class":94},[84,11886,11888,11890,11892,11894],{"class":86,"line":11887},274,[84,11889,10293],{"class":90},[84,11891,840],{"class":782},[84,11893,10298],{"class":94},[84,11895,3843],{"class":782},[84,11897,11899,11901,11903],{"class":86,"line":11898},275,[84,11900,1759],{"class":782},[84,11902,4645],{"class":786},[84,11904,814],{"class":782},[84,11906,11908,11910,11912],{"class":86,"line":11907},276,[84,11909,3983],{"class":782},[84,11911,787],{"class":786},[84,11913,814],{"class":782},[139,11915,11916],{"start":859},[142,11917,11918],{},"编译",[76,11920,11922],{"className":78,"code":11921,"language":80,"meta":19,"style":19},"colcon build --packages-select cpp01_urdf\n",[71,11923,11924],{"__ignoreMap":19},[84,11925,11926,11928,11930,11932],{"class":86,"line":87},[84,11927,1486],{"class":90},[84,11929,1489],{"class":94},[84,11931,1492],{"class":728},[84,11933,11934],{"class":94}," cpp01_urdf\n",[14,11936,11937],{},[17,11938],{"alt":19,"src":11939},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1596.webp",[14,11941,11942],{},[17,11943],{"alt":19,"src":11944},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1597.webp",[139,11946,11947],{"start":869},[142,11948,11949],{},"更新终端环境",[76,11951,11953],{"className":78,"code":11952,"language":80,"meta":19,"style":19},"source install/setup.bash\n",[71,11954,11955],{"__ignoreMap":19},[84,11956,11957,11959],{"class":86,"line":87},[84,11958,1510],{"class":728},[84,11960,1513],{"class":94},[14,11962,11963],{},[17,11964],{"alt":19,"src":11965},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1598.webp",[139,11967,11968],{"start":879},[142,11969,11970],{},"运行Launch",[76,11972,11974],{"className":78,"code":11973,"language":80,"meta":19,"style":19},"ros2 launch cpp01_urdf display.launch.py\n",[71,11975,11976],{"__ignoreMap":19},[84,11977,11978,11980,11982,11984],{"class":86,"line":87},[84,11979,716],{"class":90},[84,11981,1520],{"class":94},[84,11983,8140],{"class":94},[84,11985,1525],{"class":94},[14,11987,11988],{},[17,11989],{"alt":19,"src":11990},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1599.webp",[14,11992,11993],{},[17,11994],{"alt":19,"src":11995},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1600.webp",[139,11997,11998],{"start":1012},[142,11999,12000],{},"在Rviz2中添加插件以及基本配置",[14,12002,12003],{},[17,12004],{"alt":19,"src":12005},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1601.webp",[139,12007,12008],{"start":1017},[142,12009,12010],{},"使用joint_state_publisher_gui可以调关节的角度",[14,12012,12013,12016],{},[17,12014],{"alt":19,"src":12015},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1602.webp",[17,12017],{"alt":19,"src":12018},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1603.webp",[139,12020,12021],{"start":1034},[142,12022,12023],{},"保存rviz2的配置到rviz文件夹中",[14,12025,12026],{},"首先点击rviz2的菜单栏上的File，然后选择Save Config as",[14,12028,12029],{},[17,12030],{"alt":19,"src":12031},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1604.webp",[14,12033,12034],{},"可以去本节简介看效果视频",[645,12036,12038],{"id":12037},"注意事项仅供参考chatgpt的解决方案","注意事项（仅供参考，ChatGPT的解决方案）",[3541,12040,12041],{"id":12041},"坐标系1",[14,12043,12044],{},"轮子要用continuous的关节，并且尽量自己选坐标系，要求从后面看车的话，左是Y，前是X，上是Z。所有的坐标系都要求。",[14,12046,12047],{},"可以先让他帮你自动生成一个，你再去修改坐标系，要简单一些。",[14,12049,12050],{},[17,12051],{"alt":19,"src":12052},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1605.webp",[14,12054,12055],{},[17,12056],{"alt":19,"src":12057},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1606.webp",[14,12059,12060],{},[17,12061],{"alt":19,"src":12062},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1607.webp",[3541,12064,12065],{"id":12065},"坐标系让车躺着",[14,12067,12068],{},"如果你的车在rviz2里是侧着睡觉的，那么：",[14,12070,12071,12072,12075],{},"哈哈，没错，这种“整车侧着躺尸”的情况 ",[105,12073,12074],{},"90%就是 STL 的坐标轴方向搞错了"," 。很多 CAD 工具导出的 STL 模型默认是：",[163,12077,12078,12081],{},[142,12079,12080],{},"Z 轴朝前（例如 SolidWorks：Z朝前，Y朝上，用右手坐标系推X坐标系位置，从车屁股后面看是朝左。）",[142,12082,12083],{},"或者 Y 轴朝上（例如 Blender）",[14,12085,12086],{},"而 ROS/URDF 的坐标系统是：",[163,12088,12089,12092,12095],{},[142,12090,12091],{},"X 向前（前进方向）",[142,12093,12094],{},"Y 向左（平移方向）",[142,12096,12097],{},"Z 向上（重力方向）",[3541,12099,12101],{"id":12100},"车直走变旋转旋转变直走","车直走变旋转，旋转变直走",[14,12103,12104],{},"那说明你的转轴有问题。",[14,12106,12107],{},"如果向前走成了左转，那么说明左轮的转轴错了，少了个符号，加上就行了。",[14,12109,12110],{},"比如这个010,你应该改成0-10",[14,12112,12113],{},[17,12114],{"alt":19,"src":12115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1608.webp",[10,12117,12118],{"id":12118},"xacro",[645,12120,12122],{"id":12121},"场景作用与概念","场景、作用与概念",[14,12124,12125],{},[105,12126,12127],{},"场景",[14,12129,12130],{},"前面 URDF 文件构建机器人模型的过程中，存在若干问题。",[12132,12133,12134,12137,12140],"blockquote",{},[14,12135,12136],{},"问题1：在设计关节的位置时，需要按照一定的规则计算，规则是固定的，但是在 URDF 中依赖于人工计算，存在不便，容易计算失误，且当某些参数发生改变时，还需要重新计算。",[14,12138,12139],{},"问题2：URDF中的部分内容是高度重复的，比如车轮的设计实现，不同轮子只是部分参数不同，形状、颜色、翻转量都是一致的，在实际应用中，构建复杂的机器人模型时，更是易于出现高度重复的设计，按照一般的编程思想涉及到重复代码应该考虑封装、复用，但是在之前的URDF文件中并没有相关操作。",[14,12141,12142],{},"......",[14,12144,12145,12146,12149],{},"如果在一般编程语言中遇到类似问题，我们可以通过变量结合函数解决。对应的，在 ROS 中也给出了类似编程的优化方案，该方案称之为： ",[105,12147,12148],{},"Xacro（可以理解为urdf2.0）"," 。",[14,12151,12152],{},[105,12153,12154],{},"概念",[14,12156,12157],{},"Xacro 是 XML Macros 的缩写，Xacro 是一种 XML 宏语言，是可编程的 XML。",[14,12159,12160],{},"Xacro 可以声明变量，可以通过数学运算求解；可以使用流程控制控制执行顺序；还可以通过宏封装(可以想成函数)、复用功能，从而提高代码复用率以及程序的安全性。",[14,12162,12163],{},[105,12164,12165],{},"作用",[14,12167,12168],{},"较之于纯粹的 URDF 实现，可以编写更安全、精简、易读性更强的机器人模型文件，且可以提高编写效率。",[645,12170,12171],{"id":12171},"快速体验",[14,12173,12174],{},"先安装xacro",[76,12176,12178],{"className":78,"code":12177,"language":80,"meta":19,"style":19},"#humble版本\nsudo apt install ros-humble-xacro\n#jazzy版本\nsudo apt install ros-jazzy-xacro\n",[71,12179,12180,12185,12195,12200],{"__ignoreMap":19},[84,12181,12182],{"class":86,"line":87},[84,12183,12184],{"class":997},"#humble版本\n",[84,12186,12187,12189,12191,12193],{"class":86,"line":636},[84,12188,91],{"class":90},[84,12190,95],{"class":94},[84,12192,98],{"class":94},[84,12194,1830],{"class":94},[84,12196,12197],{"class":86,"line":793},[84,12198,12199],{"class":997},"#jazzy版本\n",[84,12201,12202,12204,12206,12208],{"class":86,"line":805},[84,12203,91],{"class":90},[84,12205,95],{"class":94},[84,12207,98],{"class":94},[84,12209,12210],{"class":94}," ros-jazzy-xacro\n",[14,12212,12213],{},"1.需求",[14,12215,12216,12217,12220],{},"使用xacro优化 ",[105,12218,12219],{},"6.4.4 URDF练习"," 中的小车底盘实现，需要使用变量封装车辆参数，并使用 xacro 宏封装轮子重复的代码并调用宏创建四个轮子(注意: 在此，演示 xacro 的基本使用，不必要生成合法的 URDF )。",[14,12222,12223],{},"2.实现",[14,12225,12226],{},"功能包cpp06_urdf的urdf/xacro目录下，新建xacro文件demo01_helloworld.urdf.xacro，并编辑文件，输入如下内容：",[76,12228,12230],{"className":767,"code":12229,"language":769,"meta":19,"style":19},"\u003Crobot name=\"mycar\" xmlns:xacro=\"http://wiki.ros.org/xacro\">\n\n    \u003Cxacro:property name=\"wheel_radius\" value=\"0.025\" />\n    \u003Cxacro:property name=\"wheel_length\" value=\"0.02\" />\n    \u003Cxacro:property name=\"PI\" value=\"3.1415927\" />\n\n    \u003Cxacro:macro name=\"wheel_func\" params=\"wheel_name\" >\n        \u003Clink name=\"${wheel_name}_wheel\">\n            \u003Cvisual>\n                \u003Cgeometry>\n                    \u003Ccylinder radius=\"${wheel_radius}\" length=\"${wheel_length}\" />\n                \u003C/geometry>\n\n                \u003Corigin xyz=\"0 0 0\" rpy=\"${PI / 2} 0 0\" />\n\n                \u003Cmaterial name=\"wheel_color\">\n                    \u003Ccolor rgba=\"0 0 0 0.3\" />\n                \u003C/material>\n            \u003C/visual>\n        \u003C/link>\n    \u003C/xacro:macro>\n    \u003Cxacro:wheel_func wheel_name=\"left_front\"/>\n    \u003Cxacro:wheel_func wheel_name=\"left_back\"/>\n    \u003Cxacro:wheel_func wheel_name=\"right_front\"/>\n    \u003Cxacro:wheel_func wheel_name=\"right_back\"/>\n\u003C/robot>\n",[71,12231,12232,12255,12259,12282,12303,12325,12329,12354,12369,12377,12386,12409,12418,12422,12443,12447,12462,12477,12485,12494,12502,12510,12527,12542,12557,12572],{"__ignoreMap":19},[84,12233,12234,12236,12238,12240,12242,12245,12248,12250,12253],{"class":86,"line":87},[84,12235,1369],{"class":782},[84,12237,787],{"class":786},[84,12239,1653],{"class":90},[84,12241,840],{"class":782},[84,12243,12244],{"class":94},"\"mycar\"",[84,12246,12247],{"class":90}," xmlns:xacro",[84,12249,840],{"class":782},[84,12251,12252],{"class":94},"\"http://wiki.ros.org/xacro\"",[84,12254,814],{"class":782},[84,12256,12257],{"class":86,"line":636},[84,12258,777],{"emptyLinePlaceholder":776},[84,12260,12261,12263,12266,12268,12270,12273,12276,12278,12280],{"class":86,"line":793},[84,12262,1670],{"class":782},[84,12264,12265],{"class":786},"xacro:property",[84,12267,1653],{"class":90},[84,12269,840],{"class":782},[84,12271,12272],{"class":94},"\"wheel_radius\"",[84,12274,12275],{"class":90}," value",[84,12277,840],{"class":782},[84,12279,6723],{"class":94},[84,12281,3843],{"class":782},[84,12283,12284,12286,12288,12290,12292,12295,12297,12299,12301],{"class":86,"line":805},[84,12285,1670],{"class":782},[84,12287,12265],{"class":786},[84,12289,1653],{"class":90},[84,12291,840],{"class":782},[84,12293,12294],{"class":94},"\"wheel_length\"",[84,12296,12275],{"class":90},[84,12298,840],{"class":782},[84,12300,6731],{"class":94},[84,12302,3843],{"class":782},[84,12304,12305,12307,12309,12311,12313,12316,12318,12320,12323],{"class":86,"line":817},[84,12306,1670],{"class":782},[84,12308,12265],{"class":786},[84,12310,1653],{"class":90},[84,12312,840],{"class":782},[84,12314,12315],{"class":94},"\"PI\"",[84,12317,12275],{"class":90},[84,12319,840],{"class":782},[84,12321,12322],{"class":94},"\"3.1415927\"",[84,12324,3843],{"class":782},[84,12326,12327],{"class":86,"line":828},[84,12328,777],{"emptyLinePlaceholder":776},[84,12330,12331,12333,12336,12338,12340,12343,12346,12348,12351],{"class":86,"line":849},[84,12332,1670],{"class":782},[84,12334,12335],{"class":786},"xacro:macro",[84,12337,1653],{"class":90},[84,12339,840],{"class":782},[84,12341,12342],{"class":94},"\"wheel_func\"",[84,12344,12345],{"class":90}," params",[84,12347,840],{"class":782},[84,12349,12350],{"class":94},"\"wheel_name\"",[84,12352,12353],{"class":782}," >\n",[84,12355,12356,12358,12360,12362,12364,12367],{"class":86,"line":859},[84,12357,1703],{"class":782},[84,12359,799],{"class":786},[84,12361,1653],{"class":90},[84,12363,840],{"class":782},[84,12365,12366],{"class":94},"\"${wheel_name}_wheel\"",[84,12368,814],{"class":782},[84,12370,12371,12373,12375],{"class":86,"line":869},[84,12372,3894],{"class":782},[84,12374,811],{"class":786},[84,12376,814],{"class":782},[84,12378,12379,12382,12384],{"class":86,"line":879},[84,12380,12381],{"class":782},"                \u003C",[84,12383,823],{"class":786},[84,12385,814],{"class":782},[84,12387,12388,12391,12393,12395,12397,12400,12402,12404,12407],{"class":86,"line":1012},[84,12389,12390],{"class":782},"                    \u003C",[84,12392,3601],{"class":786},[84,12394,5566],{"class":90},[84,12396,840],{"class":782},[84,12398,12399],{"class":94},"\"${wheel_radius}\"",[84,12401,6726],{"class":90},[84,12403,840],{"class":782},[84,12405,12406],{"class":94},"\"${wheel_length}\"",[84,12408,3843],{"class":782},[84,12410,12411,12414,12416],{"class":86,"line":1017},[84,12412,12413],{"class":782},"                \u003C/",[84,12415,823],{"class":786},[84,12417,814],{"class":782},[84,12419,12420],{"class":86,"line":1034},[84,12421,777],{"emptyLinePlaceholder":776},[84,12423,12424,12426,12428,12430,12432,12434,12436,12438,12441],{"class":86,"line":1056},[84,12425,12381],{"class":782},[84,12427,3633],{"class":786},[84,12429,3930],{"class":90},[84,12431,840],{"class":782},[84,12433,3935],{"class":94},[84,12435,3938],{"class":90},[84,12437,840],{"class":782},[84,12439,12440],{"class":94},"\"${PI / 2} 0 0\"",[84,12442,3843],{"class":782},[84,12444,12445],{"class":86,"line":1076},[84,12446,777],{"emptyLinePlaceholder":776},[84,12448,12449,12451,12453,12455,12457,12460],{"class":86,"line":1107},[84,12450,12381],{"class":782},[84,12452,3655],{"class":786},[84,12454,1653],{"class":90},[84,12456,840],{"class":782},[84,12458,12459],{"class":94},"\"wheel_color\"",[84,12461,814],{"class":782},[84,12463,12464,12466,12468,12470,12472,12475],{"class":86,"line":1112},[84,12465,12390],{"class":782},[84,12467,3670],{"class":786},[84,12469,3835],{"class":90},[84,12471,840],{"class":782},[84,12473,12474],{"class":94},"\"0 0 0 0.3\"",[84,12476,3843],{"class":782},[84,12478,12479,12481,12483],{"class":86,"line":1118},[84,12480,12413],{"class":782},[84,12482,3655],{"class":786},[84,12484,814],{"class":782},[84,12486,12487,12490,12492],{"class":86,"line":1123},[84,12488,12489],{"class":782},"            \u003C/",[84,12491,811],{"class":786},[84,12493,814],{"class":782},[84,12495,12496,12498,12500],{"class":86,"line":1129},[84,12497,1732],{"class":782},[84,12499,799],{"class":786},[84,12501,814],{"class":782},[84,12503,12504,12506,12508],{"class":86,"line":1151},[84,12505,1750],{"class":782},[84,12507,12335],{"class":786},[84,12509,814],{"class":782},[84,12511,12512,12514,12517,12520,12522,12525],{"class":86,"line":1162},[84,12513,1670],{"class":782},[84,12515,12516],{"class":786},"xacro:wheel_func",[84,12518,12519],{"class":90}," wheel_name",[84,12521,840],{"class":782},[84,12523,12524],{"class":94},"\"left_front\"",[84,12526,846],{"class":782},[84,12528,12529,12531,12533,12535,12537,12540],{"class":86,"line":1176},[84,12530,1670],{"class":782},[84,12532,12516],{"class":786},[84,12534,12519],{"class":90},[84,12536,840],{"class":782},[84,12538,12539],{"class":94},"\"left_back\"",[84,12541,846],{"class":782},[84,12543,12544,12546,12548,12550,12552,12555],{"class":86,"line":1188},[84,12545,1670],{"class":782},[84,12547,12516],{"class":786},[84,12549,12519],{"class":90},[84,12551,840],{"class":782},[84,12553,12554],{"class":94},"\"right_front\"",[84,12556,846],{"class":782},[84,12558,12559,12561,12563,12565,12567,12570],{"class":86,"line":1205},[84,12560,1670],{"class":782},[84,12562,12516],{"class":786},[84,12564,12519],{"class":90},[84,12566,840],{"class":782},[84,12568,12569],{"class":94},"\"right_back\"",[84,12571,846],{"class":782},[84,12573,12574,12576,12578],{"class":86,"line":1211},[84,12575,3983],{"class":782},[84,12577,787],{"class":786},[84,12579,814],{"class":782},[14,12581,12582],{},[17,12583],{"alt":19,"src":12584},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1609.webp",[14,12586,12587],{},"宏类似函数",[14,12589,12590],{},"params类似入口参数",[14,12592,12593],{},"子标签类似函数体",[14,12595,12596],{},"终端下进入当前文件所述目录，输入如下指令：",[76,12598,12600],{"className":78,"code":12599,"language":80,"meta":19,"style":19},"cd src/cpp06_urdf/urdf/xacro/\nxacro demo01_helloworld.urdf.xacro\n#或者\nros2 run xacro xacro demo01_helloworld.urdf.xacro\n",[71,12601,12602,12609,12616,12621],{"__ignoreMap":19},[84,12603,12604,12606],{"class":86,"line":87},[84,12605,8112],{"class":728},[84,12607,12608],{"class":94}," src/cpp06_urdf/urdf/xacro/\n",[84,12610,12611,12613],{"class":86,"line":636},[84,12612,12118],{"class":90},[84,12614,12615],{"class":94}," demo01_helloworld.urdf.xacro\n",[84,12617,12618],{"class":86,"line":793},[84,12619,12620],{"class":997},"#或者\n",[84,12622,12623,12625,12627,12630,12632],{"class":86,"line":805},[84,12624,716],{"class":90},[84,12626,2415],{"class":94},[84,12628,12629],{"class":94}," xacro",[84,12631,12629],{"class":94},[84,12633,12615],{"class":94},[14,12635,12636],{},"终端将会输出如下内容（以下内容是纯urdf）：",[76,12638,12640],{"className":767,"code":12639,"language":769,"meta":19,"style":19},"\u003C?xml version=\"1.0\" ?>\n\n\u003Crobot name=\"mycar\">\n  \u003Clink name=\"left_front_wheel\">\n    \u003Cvisual>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.025\"/>\n      \u003C/geometry>\n      \u003Corigin rpy=\"1.57079635 0 0\" xyz=\"0 0 0\"/>\n      \u003Cmaterial name=\"wheel_color\">\n        \u003Ccolor rgba=\"0 0 0 0.3\"/>\n      \u003C/material>\n    \u003C/visual>\n  \u003C/link>\n  \u003Clink name=\"left_back_wheel\">\n    \u003Cvisual>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.025\"/>\n      \u003C/geometry>\n      \u003Corigin rpy=\"1.57079635 0 0\" xyz=\"0 0 0\"/>\n      \u003Cmaterial name=\"wheel_color\">\n        \u003Ccolor rgba=\"0 0 0 0.3\"/>\n      \u003C/material>\n    \u003C/visual>\n  \u003C/link>\n  \u003Clink name=\"right_front_wheel\">\n    \u003Cvisual>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.025\"/>\n      \u003C/geometry>\n      \u003Corigin rpy=\"1.57079635 0 0\" xyz=\"0 0 0\"/>\n      \u003Cmaterial name=\"wheel_color\">\n        \u003Ccolor rgba=\"0 0 0 0.3\"/>\n      \u003C/material>\n    \u003C/visual>\n  \u003C/link>\n  \u003Clink name=\"right_back_wheel\">\n    \u003Cvisual>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.025\"/>\n      \u003C/geometry>\n      \u003Corigin rpy=\"1.57079635 0 0\" xyz=\"0 0 0\"/>\n      \u003Cmaterial name=\"wheel_color\">\n        \u003Ccolor rgba=\"0 0 0 0.3\"/>\n      \u003C/material>\n    \u003C/visual>\n  \u003C/link>\n\u003C/robot>\n",[71,12641,12642,12657,12661,12675,12690,12698,12706,12726,12734,12755,12769,12783,12791,12799,12807,12822,12830,12838,12858,12866,12886,12900,12914,12922,12930,12938,12953,12961,12969,12989,12997,13017,13031,13045,13053,13061,13069,13084,13092,13100,13120,13128,13148,13162,13176,13184,13192,13200],{"__ignoreMap":19},[84,12643,12644,12646,12648,12650,12652,12654],{"class":86,"line":87},[84,12645,8557],{"class":782},[84,12647,769],{"class":786},[84,12649,8562],{"class":90},[84,12651,840],{"class":782},[84,12653,8567],{"class":94},[84,12655,12656],{"class":782}," ?>\n",[84,12658,12659],{"class":86,"line":636},[84,12660,777],{"emptyLinePlaceholder":776},[84,12662,12663,12665,12667,12669,12671,12673],{"class":86,"line":793},[84,12664,1369],{"class":782},[84,12666,787],{"class":786},[84,12668,1653],{"class":90},[84,12670,840],{"class":782},[84,12672,12244],{"class":94},[84,12674,814],{"class":782},[84,12676,12677,12679,12681,12683,12685,12688],{"class":86,"line":805},[84,12678,3815],{"class":782},[84,12680,799],{"class":786},[84,12682,1653],{"class":90},[84,12684,840],{"class":782},[84,12686,12687],{"class":94},"\"left_front_wheel\"",[84,12689,814],{"class":782},[84,12691,12692,12694,12696],{"class":86,"line":817},[84,12693,1670],{"class":782},[84,12695,811],{"class":786},[84,12697,814],{"class":782},[84,12699,12700,12702,12704],{"class":86,"line":828},[84,12701,1690],{"class":782},[84,12703,823],{"class":786},[84,12705,814],{"class":782},[84,12707,12708,12710,12712,12714,12716,12718,12720,12722,12724],{"class":86,"line":849},[84,12709,1703],{"class":782},[84,12711,3601],{"class":786},[84,12713,6726],{"class":90},[84,12715,840],{"class":782},[84,12717,6731],{"class":94},[84,12719,5566],{"class":90},[84,12721,840],{"class":782},[84,12723,6723],{"class":94},[84,12725,846],{"class":782},[84,12727,12728,12730,12732],{"class":86,"line":859},[84,12729,1741],{"class":782},[84,12731,823],{"class":786},[84,12733,814],{"class":782},[84,12735,12736,12738,12740,12742,12744,12747,12749,12751,12753],{"class":86,"line":869},[84,12737,1690],{"class":782},[84,12739,3633],{"class":786},[84,12741,3938],{"class":90},[84,12743,840],{"class":782},[84,12745,12746],{"class":94},"\"1.57079635 0 0\"",[84,12748,3930],{"class":90},[84,12750,840],{"class":782},[84,12752,3935],{"class":94},[84,12754,846],{"class":782},[84,12756,12757,12759,12761,12763,12765,12767],{"class":86,"line":879},[84,12758,1690],{"class":782},[84,12760,3655],{"class":786},[84,12762,1653],{"class":90},[84,12764,840],{"class":782},[84,12766,12459],{"class":94},[84,12768,814],{"class":782},[84,12770,12771,12773,12775,12777,12779,12781],{"class":86,"line":1012},[84,12772,1703],{"class":782},[84,12774,3670],{"class":786},[84,12776,3835],{"class":90},[84,12778,840],{"class":782},[84,12780,12474],{"class":94},[84,12782,846],{"class":782},[84,12784,12785,12787,12789],{"class":86,"line":1017},[84,12786,1741],{"class":782},[84,12788,3655],{"class":786},[84,12790,814],{"class":782},[84,12792,12793,12795,12797],{"class":86,"line":1034},[84,12794,1750],{"class":782},[84,12796,811],{"class":786},[84,12798,814],{"class":782},[84,12800,12801,12803,12805],{"class":86,"line":1056},[84,12802,1759],{"class":782},[84,12804,799],{"class":786},[84,12806,814],{"class":782},[84,12808,12809,12811,12813,12815,12817,12820],{"class":86,"line":1076},[84,12810,3815],{"class":782},[84,12812,799],{"class":786},[84,12814,1653],{"class":90},[84,12816,840],{"class":782},[84,12818,12819],{"class":94},"\"left_back_wheel\"",[84,12821,814],{"class":782},[84,12823,12824,12826,12828],{"class":86,"line":1107},[84,12825,1670],{"class":782},[84,12827,811],{"class":786},[84,12829,814],{"class":782},[84,12831,12832,12834,12836],{"class":86,"line":1112},[84,12833,1690],{"class":782},[84,12835,823],{"class":786},[84,12837,814],{"class":782},[84,12839,12840,12842,12844,12846,12848,12850,12852,12854,12856],{"class":86,"line":1118},[84,12841,1703],{"class":782},[84,12843,3601],{"class":786},[84,12845,6726],{"class":90},[84,12847,840],{"class":782},[84,12849,6731],{"class":94},[84,12851,5566],{"class":90},[84,12853,840],{"class":782},[84,12855,6723],{"class":94},[84,12857,846],{"class":782},[84,12859,12860,12862,12864],{"class":86,"line":1123},[84,12861,1741],{"class":782},[84,12863,823],{"class":786},[84,12865,814],{"class":782},[84,12867,12868,12870,12872,12874,12876,12878,12880,12882,12884],{"class":86,"line":1129},[84,12869,1690],{"class":782},[84,12871,3633],{"class":786},[84,12873,3938],{"class":90},[84,12875,840],{"class":782},[84,12877,12746],{"class":94},[84,12879,3930],{"class":90},[84,12881,840],{"class":782},[84,12883,3935],{"class":94},[84,12885,846],{"class":782},[84,12887,12888,12890,12892,12894,12896,12898],{"class":86,"line":1151},[84,12889,1690],{"class":782},[84,12891,3655],{"class":786},[84,12893,1653],{"class":90},[84,12895,840],{"class":782},[84,12897,12459],{"class":94},[84,12899,814],{"class":782},[84,12901,12902,12904,12906,12908,12910,12912],{"class":86,"line":1162},[84,12903,1703],{"class":782},[84,12905,3670],{"class":786},[84,12907,3835],{"class":90},[84,12909,840],{"class":782},[84,12911,12474],{"class":94},[84,12913,846],{"class":782},[84,12915,12916,12918,12920],{"class":86,"line":1176},[84,12917,1741],{"class":782},[84,12919,3655],{"class":786},[84,12921,814],{"class":782},[84,12923,12924,12926,12928],{"class":86,"line":1188},[84,12925,1750],{"class":782},[84,12927,811],{"class":786},[84,12929,814],{"class":782},[84,12931,12932,12934,12936],{"class":86,"line":1205},[84,12933,1759],{"class":782},[84,12935,799],{"class":786},[84,12937,814],{"class":782},[84,12939,12940,12942,12944,12946,12948,12951],{"class":86,"line":1211},[84,12941,3815],{"class":782},[84,12943,799],{"class":786},[84,12945,1653],{"class":90},[84,12947,840],{"class":782},[84,12949,12950],{"class":94},"\"right_front_wheel\"",[84,12952,814],{"class":782},[84,12954,12955,12957,12959],{"class":86,"line":1216},[84,12956,1670],{"class":782},[84,12958,811],{"class":786},[84,12960,814],{"class":782},[84,12962,12963,12965,12967],{"class":86,"line":1222},[84,12964,1690],{"class":782},[84,12966,823],{"class":786},[84,12968,814],{"class":782},[84,12970,12971,12973,12975,12977,12979,12981,12983,12985,12987],{"class":86,"line":1232},[84,12972,1703],{"class":782},[84,12974,3601],{"class":786},[84,12976,6726],{"class":90},[84,12978,840],{"class":782},[84,12980,6731],{"class":94},[84,12982,5566],{"class":90},[84,12984,840],{"class":782},[84,12986,6723],{"class":94},[84,12988,846],{"class":782},[84,12990,12991,12993,12995],{"class":86,"line":1244},[84,12992,1741],{"class":782},[84,12994,823],{"class":786},[84,12996,814],{"class":782},[84,12998,12999,13001,13003,13005,13007,13009,13011,13013,13015],{"class":86,"line":1254},[84,13000,1690],{"class":782},[84,13002,3633],{"class":786},[84,13004,3938],{"class":90},[84,13006,840],{"class":782},[84,13008,12746],{"class":94},[84,13010,3930],{"class":90},[84,13012,840],{"class":782},[84,13014,3935],{"class":94},[84,13016,846],{"class":782},[84,13018,13019,13021,13023,13025,13027,13029],{"class":86,"line":1259},[84,13020,1690],{"class":782},[84,13022,3655],{"class":786},[84,13024,1653],{"class":90},[84,13026,840],{"class":782},[84,13028,12459],{"class":94},[84,13030,814],{"class":782},[84,13032,13033,13035,13037,13039,13041,13043],{"class":86,"line":1264},[84,13034,1703],{"class":782},[84,13036,3670],{"class":786},[84,13038,3835],{"class":90},[84,13040,840],{"class":782},[84,13042,12474],{"class":94},[84,13044,846],{"class":782},[84,13046,13047,13049,13051],{"class":86,"line":1270},[84,13048,1741],{"class":782},[84,13050,3655],{"class":786},[84,13052,814],{"class":782},[84,13054,13055,13057,13059],{"class":86,"line":1280},[84,13056,1750],{"class":782},[84,13058,811],{"class":786},[84,13060,814],{"class":782},[84,13062,13063,13065,13067],{"class":86,"line":1292},[84,13064,1759],{"class":782},[84,13066,799],{"class":786},[84,13068,814],{"class":782},[84,13070,13071,13073,13075,13077,13079,13082],{"class":86,"line":1302},[84,13072,3815],{"class":782},[84,13074,799],{"class":786},[84,13076,1653],{"class":90},[84,13078,840],{"class":782},[84,13080,13081],{"class":94},"\"right_back_wheel\"",[84,13083,814],{"class":782},[84,13085,13086,13088,13090],{"class":86,"line":1307},[84,13087,1670],{"class":782},[84,13089,811],{"class":786},[84,13091,814],{"class":782},[84,13093,13094,13096,13098],{"class":86,"line":1313},[84,13095,1690],{"class":782},[84,13097,823],{"class":786},[84,13099,814],{"class":782},[84,13101,13102,13104,13106,13108,13110,13112,13114,13116,13118],{"class":86,"line":1318},[84,13103,1703],{"class":782},[84,13105,3601],{"class":786},[84,13107,6726],{"class":90},[84,13109,840],{"class":782},[84,13111,6731],{"class":94},[84,13113,5566],{"class":90},[84,13115,840],{"class":782},[84,13117,6723],{"class":94},[84,13119,846],{"class":782},[84,13121,13122,13124,13126],{"class":86,"line":1327},[84,13123,1741],{"class":782},[84,13125,823],{"class":786},[84,13127,814],{"class":782},[84,13129,13130,13132,13134,13136,13138,13140,13142,13144,13146],{"class":86,"line":1333},[84,13131,1690],{"class":782},[84,13133,3633],{"class":786},[84,13135,3938],{"class":90},[84,13137,840],{"class":782},[84,13139,12746],{"class":94},[84,13141,3930],{"class":90},[84,13143,840],{"class":782},[84,13145,3935],{"class":94},[84,13147,846],{"class":782},[84,13149,13150,13152,13154,13156,13158,13160],{"class":86,"line":1339},[84,13151,1690],{"class":782},[84,13153,3655],{"class":786},[84,13155,1653],{"class":90},[84,13157,840],{"class":782},[84,13159,12459],{"class":94},[84,13161,814],{"class":782},[84,13163,13164,13166,13168,13170,13172,13174],{"class":86,"line":1345},[84,13165,1703],{"class":782},[84,13167,3670],{"class":786},[84,13169,3835],{"class":90},[84,13171,840],{"class":782},[84,13173,12474],{"class":94},[84,13175,846],{"class":782},[84,13177,13178,13180,13182],{"class":86,"line":1351},[84,13179,1741],{"class":782},[84,13181,3655],{"class":786},[84,13183,814],{"class":782},[84,13185,13186,13188,13190],{"class":86,"line":2236},[84,13187,1750],{"class":782},[84,13189,811],{"class":786},[84,13191,814],{"class":782},[84,13193,13194,13196,13198],{"class":86,"line":2241},[84,13195,1759],{"class":782},[84,13197,799],{"class":786},[84,13199,814],{"class":782},[84,13201,13202,13204,13206],{"class":86,"line":2251},[84,13203,3983],{"class":782},[84,13205,787],{"class":786},[84,13207,814],{"class":782},[14,13209,13210],{},"显然的，通过xacro我们方便的实现了代码复用。",[14,13212,13213],{},[17,13214],{"alt":19,"src":13215},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1610.webp",[3541,13217,13218],{"id":13218},"语法",[76,13220,13225],{"className":13221,"code":13223,"language":13224},[13222],"language-text","1.  简介\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1611.webp)\n\n  xacro 提供了可编程接口，类似于计算机语言，包括变量声明调用、函数声明与调用等语法实现。在使用 xacro 生成 urdf 时，根标签`robot`中**必须**包含命名空间声明:`xmlns:xacro=\"``http://wiki.ros.org/xacro``\"`。\n\n   **变量**\n\n  变量用于封装 URDF 中的一些字段，比如: PAI 值，小车的尺寸，轮子半径 ....，变量的基本使用语法包括变量定义、变量调用、变量运算等。\n\n  1.1变量定义\n\n  语法格式：\n\n```xml\n\u003Cxacro:property name=\"变量名\" value=\"变量值\" />\n```\n\n  示例：\n\n```xml\n\u003Cxacro:property name=\"PI\" value=\"3.1416\"/>\n\u003Cxacro:property name=\"wheel_radius\" value=\"0.025\"/>\n\u003Cxacro:property name=\"wheel_length\" value=\"0.02\"/>\n```\n\n  1.2变量调用\n\n  语法格式：\n\n```xml\n${变量名}\n```\n\n  示例：\n\n```xml\n\u003Cgeometry>\n    \u003Ccylinder radius=\"${wheel_radius}\" length=\"${wheel_length}\" />\n\u003C/geometry>\n```\n\n  1.3变量运算\n\n  语法格式：\n\n```xml\n${数学表达式}\n```\n\n  示例：\n\n```xml\n\u003Corigin xyz=\"0 0 0\" rpy=\"${PI / 2} 0 0\" />\n```\n\n```xml\n\u003Crobot xmlns:xacro=\"http://www.ros.org/wiki/xacro\" name=\"demo2_pro\">\n\n\u003Cxacro:property name=\"num1\" value=\"10\"/>\n\u003Cxacro:property name=\"num2\" value=\"20\"/>\n\n\u003Ccar length=\"${num1}\" width=\"${num2}\"/>\n\n\u003Csum value=\"${num1 + num2}\"/>\n\u003C/robot>\n```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1612.webp)\n\n   **宏**\n\n  类似于函数实现，提高代码复用率，优化代码结构，提高安全性。宏的基本使用语法包括宏的定义与调用。\n\n  2.1宏定义\n\n  语法格式：\n\n```xml\n\u003Cxacro:macro name=\"宏名称\" params=\"参数列表(多参数之间使用空格分隔)\">\n    .....\n    参数调用格式: ${参数名}\n\u003C/xacro:macro>\n```\n\n  示例：\n\n```xml\n\u003Cxacro:macro name=\"wheel_func\" params=\"wheel_name\" >\n    \u003Clink name=\"${wheel_name}_wheel\">\n        \u003Cvisual>\n            \u003Cgeometry>\n                \u003Ccylinder radius=\"${wheel_radius}\" length=\"${wheel_length}\" />\n            \u003C/geometry>\n\n            \u003Corigin xyz=\"0 0 0\" rpy=\"${PI / 2} 0 0\" />\n\n            \u003Cmaterial name=\"wheel_color\">\n                \u003Ccolor rgba=\"0 0 0 0.3\" />\n            \u003C/material>\n        \u003C/visual>\n    \u003C/link>\n\u003C/xacro:macro>\n```\n\n  2.2宏调用\n\n  语法格式：\n\n```xml\n\u003Cxacro:宏名称 参数1=xxx 参数2=xxx/>\n```\n\n  示例：\n\n```xml\n\u003Cxacro:wheel_func wheel_name=\"left_front\"/>\n\u003Cxacro:wheel_func wheel_name=\"left_back\"/>\n\u003Cxacro:wheel_func wheel_name=\"right_front\"/>\n\u003Cxacro:wheel_func wheel_name=\"right_back\"/>\n```\n\n```xml\n\u003Crobot xmlns:xacro=\"http://www.ros.org/wiki/xacro\" name=\"demo3_func\">\n\n    \u003Cxacro:macro name=\"get_sum\" params=\"num1 num2\">\n        \u003Csum value=\"${num1 + num2}\"/>\n    \u003C/xacro:macro>\n\n    \u003Cxacro:get_sum num1=\"20\" num2=\"30\"/>\n    \u003Cxacro:get_sum num1=\"70\" num2=\"30\"/>\n\n\u003C/robot>\n```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1613.webp)\n\n   **文件**\n","text",[71,13226,13223],{"__ignoreMap":19},[14,13228,13229],{},"机器人由多部件组成，不同部件可能封装为单独的 xacro 文件，最后再将不同的文件集成，组合为完整机器人，可以使用文件包含实现。",[14,13231,13232],{},"语法格式：",[76,13234,13236],{"className":767,"code":13235,"language":769,"meta":19,"style":19},"\u003Cxacro:include filename=\"其他xacro文件\" />\n",[71,13237,13238],{"__ignoreMap":19},[84,13239,13240,13242,13245,13248,13250,13253],{"class":86,"line":87},[84,13241,1369],{"class":782},[84,13243,13244],{"class":786},"xacro:include",[84,13246,13247],{"class":90}," filename",[84,13249,840],{"class":782},[84,13251,13252],{"class":94},"\"其他xacro文件\"",[84,13254,3843],{"class":782},[14,13256,13257],{},"示例：",[76,13259,13261],{"className":767,"code":13260,"language":769,"meta":19,"style":19},"\u003Crobot name=\"car\" xmlns:xacro=\"http://wiki.ros.org/xacro\">\n      \u003Cxacro:include filename=\"car_base.xacro\" />\n      \u003Cxacro:include filename=\"car_camera.xacro\" />\n      \u003Cxacro:include filename=\"car_laser.xacro\" />\n\u003C/robot>\n",[71,13262,13263,13284,13299,13314,13329],{"__ignoreMap":19},[84,13264,13265,13267,13269,13271,13273,13276,13278,13280,13282],{"class":86,"line":87},[84,13266,1369],{"class":782},[84,13268,787],{"class":786},[84,13270,1653],{"class":90},[84,13272,840],{"class":782},[84,13274,13275],{"class":94},"\"car\"",[84,13277,12247],{"class":90},[84,13279,840],{"class":782},[84,13281,12252],{"class":94},[84,13283,814],{"class":782},[84,13285,13286,13288,13290,13292,13294,13297],{"class":86,"line":636},[84,13287,1690],{"class":782},[84,13289,13244],{"class":786},[84,13291,13247],{"class":90},[84,13293,840],{"class":782},[84,13295,13296],{"class":94},"\"car_base.xacro\"",[84,13298,3843],{"class":782},[84,13300,13301,13303,13305,13307,13309,13312],{"class":86,"line":793},[84,13302,1690],{"class":782},[84,13304,13244],{"class":786},[84,13306,13247],{"class":90},[84,13308,840],{"class":782},[84,13310,13311],{"class":94},"\"car_camera.xacro\"",[84,13313,3843],{"class":782},[84,13315,13316,13318,13320,13322,13324,13327],{"class":86,"line":805},[84,13317,1690],{"class":782},[84,13319,13244],{"class":786},[84,13321,13247],{"class":90},[84,13323,840],{"class":782},[84,13325,13326],{"class":94},"\"car_laser.xacro\"",[84,13328,3843],{"class":782},[84,13330,13331,13333,13335],{"class":86,"line":817},[84,13332,3983],{"class":782},[84,13334,787],{"class":786},[84,13336,814],{"class":782},[76,13338,13340],{"className":767,"code":13339,"language":769,"meta":19,"style":19},"\u003Crobot xmlns:xacro=\"http://www.ros.org/wiki/xacro\" name=\"demo4_include\">\n    \u003Cxacro:include filename=\"demo02_base_pro.urdf.xacro\"/>\n    \u003Cxacro:include filename=\"demo03_base_func.urdf.xacro\"/>\n\u003C/robot>\n",[71,13341,13342,13364,13379,13394],{"__ignoreMap":19},[84,13343,13344,13346,13348,13350,13352,13355,13357,13359,13362],{"class":86,"line":87},[84,13345,1369],{"class":782},[84,13347,787],{"class":786},[84,13349,12247],{"class":90},[84,13351,840],{"class":782},[84,13353,13354],{"class":94},"\"http://www.ros.org/wiki/xacro\"",[84,13356,1653],{"class":90},[84,13358,840],{"class":782},[84,13360,13361],{"class":94},"\"demo4_include\"",[84,13363,814],{"class":782},[84,13365,13366,13368,13370,13372,13374,13377],{"class":86,"line":636},[84,13367,1670],{"class":782},[84,13369,13244],{"class":786},[84,13371,13247],{"class":90},[84,13373,840],{"class":782},[84,13375,13376],{"class":94},"\"demo02_base_pro.urdf.xacro\"",[84,13378,846],{"class":782},[84,13380,13381,13383,13385,13387,13389,13392],{"class":86,"line":793},[84,13382,1670],{"class":782},[84,13384,13244],{"class":786},[84,13386,13247],{"class":90},[84,13388,840],{"class":782},[84,13390,13391],{"class":94},"\"demo03_base_func.urdf.xacro\"",[84,13393,846],{"class":782},[84,13395,13396,13398,13400],{"class":86,"line":805},[84,13397,3983],{"class":782},[84,13399,787],{"class":786},[84,13401,814],{"class":782},[14,13403,13404],{},[17,13405],{"alt":19,"src":13406},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1614.webp",[14,13408,13409],{},[4636,13410,13411],{},"但不建议这样，建议父级xacro和子级xacro使用同样的name。",[645,13413,4760],{"id":13414},"练习-2",[3541,13416,13417],{"id":13417},"框架",[14,13419,12213],{},[14,13421,13422,13423,13425],{},"使用xacro创建一个四轮机器人模型，该模型底盘可以参考 ",[105,13424,12219],{}," 中的实现，并且在底盘之上添加了相机与激光雷达。相机与激光雷达的尺寸参数、安装位置可自定义。",[14,13427,13428],{},[17,13429],{"alt":19,"src":13430},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1615.webp",[14,13432,13433],{},"2.实现分析",[14,13435,13436],{},"需求中的机器人模型是由底盘、摄像头和雷达三部分组成的，那么可以将每一部分都封装进一个xacro文件，最后再通过xacro文件包含组织成一个完整的机器人模型。",[14,13438,13439],{},"3.实现",[14,13441,13442],{},"功能包cpp06_urdf的urdf/xacro目录下，新建多个xacro文件，分别为：",[163,13444,13445,13448,13451,13454],{},[142,13446,13447],{},"car.urdf.xacro：用于包含不同机器人部件对应的xacro文件；",[142,13449,13450],{},"car_base.urdf.xacro：描述机器人底盘的xacro文件；",[142,13452,13453],{},"car_camera.urdf.xacro：描述摄像头的xacro文件；",[142,13455,13456],{},"car_laser.urdf.xacro：描述雷达的xacro文件。",[14,13458,13459],{},"编辑car.urdf.xacro文件，输入如下内容：",[76,13461,13463],{"className":767,"code":13462,"language":769,"meta":19,"style":19},"\u003Crobot name=\"car\" xmlns:xacro=\"http://wiki.ros.org/xacro\">\n    \u003Cxacro:include filename=\"car_base.urdf.xacro\"/>\n    \u003Cxacro:include filename=\"car_camera.urdf.xacro\"/>\n    \u003Cxacro:include filename=\"car_laser.urdf.xacro\"/>\n\u003C/robot>\n",[71,13464,13465,13485,13500,13515,13530],{"__ignoreMap":19},[84,13466,13467,13469,13471,13473,13475,13477,13479,13481,13483],{"class":86,"line":87},[84,13468,1369],{"class":782},[84,13470,787],{"class":786},[84,13472,1653],{"class":90},[84,13474,840],{"class":782},[84,13476,13275],{"class":94},[84,13478,12247],{"class":90},[84,13480,840],{"class":782},[84,13482,12252],{"class":94},[84,13484,814],{"class":782},[84,13486,13487,13489,13491,13493,13495,13498],{"class":86,"line":636},[84,13488,1670],{"class":782},[84,13490,13244],{"class":786},[84,13492,13247],{"class":90},[84,13494,840],{"class":782},[84,13496,13497],{"class":94},"\"car_base.urdf.xacro\"",[84,13499,846],{"class":782},[84,13501,13502,13504,13506,13508,13510,13513],{"class":86,"line":793},[84,13503,1670],{"class":782},[84,13505,13244],{"class":786},[84,13507,13247],{"class":90},[84,13509,840],{"class":782},[84,13511,13512],{"class":94},"\"car_camera.urdf.xacro\"",[84,13514,846],{"class":782},[84,13516,13517,13519,13521,13523,13525,13528],{"class":86,"line":805},[84,13518,1670],{"class":782},[84,13520,13244],{"class":786},[84,13522,13247],{"class":90},[84,13524,840],{"class":782},[84,13526,13527],{"class":94},"\"car_laser.urdf.xacro\"",[84,13529,846],{"class":782},[84,13531,13532,13534,13536],{"class":86,"line":817},[84,13533,3983],{"class":782},[84,13535,787],{"class":786},[84,13537,814],{"class":782},[3541,13539,13540],{"id":13540},"车体",[14,13542,13543],{},"编辑car_base.urdf.xacro文件，输入如下内容：",[76,13545,13547],{"className":767,"code":13546,"language":769,"meta":19,"style":19},"\u003Crobot xmlns:xacro=\"http://wiki.ros.org/xacro\">\n\n    \u003Cxacro:property name=\"PI\" value=\"3.1416\"/>\n\n    \u003Cxacro:property name=\"base_link_x\" value=\"0.2\"/>\n    \u003Cxacro:property name=\"base_link_y\" value=\"0.12\"/>\n    \u003Cxacro:property name=\"base_link_z\" value=\"0.07\"/>\n\n    \u003Cxacro:property name=\"distance\" value=\"0.015\"/>\n\n    \u003Cxacro:property name=\"wheel_radius\" value=\"0.025\"/>\n    \u003Cxacro:property name=\"wheel_length\" value=\"0.02\"/>\n\n    \u003Cmaterial name=\"yellow\">\n        \u003Ccolor rgba=\"0.7 0.7 0 0.8\" />\n    \u003C/material>\n    \u003Cmaterial name=\"red\">\n        \u003Ccolor rgba=\"0.8 0.1 0.1 0.8\" />\n    \u003C/material>\n    \u003Cmaterial name=\"gray\">\n        \u003Ccolor rgba=\"0.2 0.2 0.2 0.95\" />\n      \u003C/material>\n\n    \u003Clink name=\"base_footprint\">\n        \u003Cvisual>\n            \u003Cgeometry>\n                \u003Csphere radius=\"0.001\"/>\n            \u003C/geometry>\n        \u003C/visual>\n    \u003C/link>\n\n    \u003Clink name=\"base_link\">\n        \u003Cvisual>\n\n            \u003Cgeometry>\n                \u003Cbox size=\"${base_link_x} ${base_link_y} ${base_link_z}\" />\n            \u003C/geometry>\n            \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n            \u003Cmaterial name=\"yellow\"/>\n        \u003C/visual>\n    \u003C/link>\n    \u003Cjoint name=\"baselink2basefootprint\" type=\"fixed\">\n        \u003Cparent link=\"base_footprint\"/>\n        \u003Cchild link=\"base_link\"/>\n        \u003Corigin xyz=\"0.0 0.0 ${distance + base_link_z / 2}\"/>\n    \u003C/joint>\n\n    \u003Cxacro:macro name=\"wheel_func\" params=\"wheel_name is_front is_left\" >\n        \u003Clink name=\"${wheel_name}_wheel\">\n            \u003Cvisual>\n                \u003Cgeometry>\n                    \u003Ccylinder radius=\"${wheel_radius}\" length=\"${wheel_length}\" />\n                \u003C/geometry>\n                \u003Corigin xyz=\"0 0 0\" rpy=\"${PI / 2} 0 0\" />\n                \u003Cmaterial name=\"gray\"/>\n            \u003C/visual>\n        \u003C/link>\n        \u003Cjoint name=\"${wheel_name}2baselink\" type=\"continuous\">\n            \u003Cparent link=\"base_link\"  />\n            \u003Cchild link=\"${wheel_name}_wheel\" />\n            \u003Corigin xyz=\"${(base_link_x / 2 - wheel_radius) * is_front} ${base_link_y / 2 * is_left} ${(base_link_z / 2 + distance - wheel_radius) * -1}\" rpy=\"0 0 0\" />\n            \u003Caxis xyz=\"0 1 0\" />\n        \u003C/joint>\n    \u003C/xacro:macro>\n\n    \u003Cxacro:wheel_func wheel_name=\"left_front\" is_front=\"1\" is_left=\"1\" />\n    \u003Cxacro:wheel_func wheel_name=\"left_back\" is_front=\"-1\" is_left=\"1\" />\n    \u003Cxacro:wheel_func wheel_name=\"right_front\" is_front=\"1\" is_left=\"-1\" />\n    \u003Cxacro:wheel_func wheel_name=\"right_back\" is_front=\"-1\" is_left=\"-1\" />\n\u003C/robot>\n",[71,13548,13549,13563,13567,13588,13592,13614,13636,13658,13662,13684,13688,13708,13728,13732,13746,13760,13768,13782,13796,13804,13818,13833,13841,13845,13859,13867,13875,13889,13897,13905,13913,13917,13931,13939,13943,13951,13966,13974,13994,14008,14016,14024,14044,14058,14072,14087,14095,14099,14120,14134,14142,14150,14170,14178,14198,14212,14220,14228,14249,14264,14278,14299,14313,14321,14329,14333,14361,14388,14414,14440],{"__ignoreMap":19},[84,13550,13551,13553,13555,13557,13559,13561],{"class":86,"line":87},[84,13552,1369],{"class":782},[84,13554,787],{"class":786},[84,13556,12247],{"class":90},[84,13558,840],{"class":782},[84,13560,12252],{"class":94},[84,13562,814],{"class":782},[84,13564,13565],{"class":86,"line":636},[84,13566,777],{"emptyLinePlaceholder":776},[84,13568,13569,13571,13573,13575,13577,13579,13581,13583,13586],{"class":86,"line":793},[84,13570,1670],{"class":782},[84,13572,12265],{"class":786},[84,13574,1653],{"class":90},[84,13576,840],{"class":782},[84,13578,12315],{"class":94},[84,13580,12275],{"class":90},[84,13582,840],{"class":782},[84,13584,13585],{"class":94},"\"3.1416\"",[84,13587,846],{"class":782},[84,13589,13590],{"class":86,"line":805},[84,13591,777],{"emptyLinePlaceholder":776},[84,13593,13594,13596,13598,13600,13602,13605,13607,13609,13612],{"class":86,"line":817},[84,13595,1670],{"class":782},[84,13597,12265],{"class":786},[84,13599,1653],{"class":90},[84,13601,840],{"class":782},[84,13603,13604],{"class":94},"\"base_link_x\"",[84,13606,12275],{"class":90},[84,13608,840],{"class":782},[84,13610,13611],{"class":94},"\"0.2\"",[84,13613,846],{"class":782},[84,13615,13616,13618,13620,13622,13624,13627,13629,13631,13634],{"class":86,"line":828},[84,13617,1670],{"class":782},[84,13619,12265],{"class":786},[84,13621,1653],{"class":90},[84,13623,840],{"class":782},[84,13625,13626],{"class":94},"\"base_link_y\"",[84,13628,12275],{"class":90},[84,13630,840],{"class":782},[84,13632,13633],{"class":94},"\"0.12\"",[84,13635,846],{"class":782},[84,13637,13638,13640,13642,13644,13646,13649,13651,13653,13656],{"class":86,"line":849},[84,13639,1670],{"class":782},[84,13641,12265],{"class":786},[84,13643,1653],{"class":90},[84,13645,840],{"class":782},[84,13647,13648],{"class":94},"\"base_link_z\"",[84,13650,12275],{"class":90},[84,13652,840],{"class":782},[84,13654,13655],{"class":94},"\"0.07\"",[84,13657,846],{"class":782},[84,13659,13660],{"class":86,"line":859},[84,13661,777],{"emptyLinePlaceholder":776},[84,13663,13664,13666,13668,13670,13672,13675,13677,13679,13682],{"class":86,"line":869},[84,13665,1670],{"class":782},[84,13667,12265],{"class":786},[84,13669,1653],{"class":90},[84,13671,840],{"class":782},[84,13673,13674],{"class":94},"\"distance\"",[84,13676,12275],{"class":90},[84,13678,840],{"class":782},[84,13680,13681],{"class":94},"\"0.015\"",[84,13683,846],{"class":782},[84,13685,13686],{"class":86,"line":879},[84,13687,777],{"emptyLinePlaceholder":776},[84,13689,13690,13692,13694,13696,13698,13700,13702,13704,13706],{"class":86,"line":1012},[84,13691,1670],{"class":782},[84,13693,12265],{"class":786},[84,13695,1653],{"class":90},[84,13697,840],{"class":782},[84,13699,12272],{"class":94},[84,13701,12275],{"class":90},[84,13703,840],{"class":782},[84,13705,6723],{"class":94},[84,13707,846],{"class":782},[84,13709,13710,13712,13714,13716,13718,13720,13722,13724,13726],{"class":86,"line":1017},[84,13711,1670],{"class":782},[84,13713,12265],{"class":786},[84,13715,1653],{"class":90},[84,13717,840],{"class":782},[84,13719,12294],{"class":94},[84,13721,12275],{"class":90},[84,13723,840],{"class":782},[84,13725,6731],{"class":94},[84,13727,846],{"class":782},[84,13729,13730],{"class":86,"line":1034},[84,13731,777],{"emptyLinePlaceholder":776},[84,13733,13734,13736,13738,13740,13742,13744],{"class":86,"line":1056},[84,13735,1670],{"class":782},[84,13737,3655],{"class":786},[84,13739,1653],{"class":90},[84,13741,840],{"class":782},[84,13743,3824],{"class":94},[84,13745,814],{"class":782},[84,13747,13748,13750,13752,13754,13756,13758],{"class":86,"line":1076},[84,13749,1703],{"class":782},[84,13751,3670],{"class":786},[84,13753,3835],{"class":90},[84,13755,840],{"class":782},[84,13757,3840],{"class":94},[84,13759,3843],{"class":782},[84,13761,13762,13764,13766],{"class":86,"line":1107},[84,13763,1750],{"class":782},[84,13765,3655],{"class":786},[84,13767,814],{"class":782},[84,13769,13770,13772,13774,13776,13778,13780],{"class":86,"line":1112},[84,13771,1670],{"class":782},[84,13773,3655],{"class":786},[84,13775,1653],{"class":90},[84,13777,840],{"class":782},[84,13779,5092],{"class":94},[84,13781,814],{"class":782},[84,13783,13784,13786,13788,13790,13792,13794],{"class":86,"line":1118},[84,13785,1703],{"class":782},[84,13787,3670],{"class":786},[84,13789,3835],{"class":90},[84,13791,840],{"class":782},[84,13793,5107],{"class":94},[84,13795,3843],{"class":782},[84,13797,13798,13800,13802],{"class":86,"line":1123},[84,13799,1750],{"class":782},[84,13801,3655],{"class":786},[84,13803,814],{"class":782},[84,13805,13806,13808,13810,13812,13814,13816],{"class":86,"line":1129},[84,13807,1670],{"class":782},[84,13809,3655],{"class":786},[84,13811,1653],{"class":90},[84,13813,840],{"class":782},[84,13815,6393],{"class":94},[84,13817,814],{"class":782},[84,13819,13820,13822,13824,13826,13828,13831],{"class":86,"line":1151},[84,13821,1703],{"class":782},[84,13823,3670],{"class":786},[84,13825,3835],{"class":90},[84,13827,840],{"class":782},[84,13829,13830],{"class":94},"\"0.2 0.2 0.2 0.95\"",[84,13832,3843],{"class":782},[84,13834,13835,13837,13839],{"class":86,"line":1162},[84,13836,1741],{"class":782},[84,13838,3655],{"class":786},[84,13840,814],{"class":782},[84,13842,13843],{"class":86,"line":1176},[84,13844,777],{"emptyLinePlaceholder":776},[84,13846,13847,13849,13851,13853,13855,13857],{"class":86,"line":1188},[84,13848,1670],{"class":782},[84,13850,799],{"class":786},[84,13852,1653],{"class":90},[84,13854,840],{"class":782},[84,13856,5539],{"class":94},[84,13858,814],{"class":782},[84,13860,13861,13863,13865],{"class":86,"line":1205},[84,13862,1703],{"class":782},[84,13864,811],{"class":786},[84,13866,814],{"class":782},[84,13868,13869,13871,13873],{"class":86,"line":1211},[84,13870,3894],{"class":782},[84,13872,823],{"class":786},[84,13874,814],{"class":782},[84,13876,13877,13879,13881,13883,13885,13887],{"class":86,"line":1216},[84,13878,12381],{"class":782},[84,13880,3609],{"class":786},[84,13882,5566],{"class":90},[84,13884,840],{"class":782},[84,13886,5571],{"class":94},[84,13888,846],{"class":782},[84,13890,13891,13893,13895],{"class":86,"line":1222},[84,13892,12489],{"class":782},[84,13894,823],{"class":786},[84,13896,814],{"class":782},[84,13898,13899,13901,13903],{"class":86,"line":1232},[84,13900,1732],{"class":782},[84,13902,811],{"class":786},[84,13904,814],{"class":782},[84,13906,13907,13909,13911],{"class":86,"line":1244},[84,13908,1750],{"class":782},[84,13910,799],{"class":786},[84,13912,814],{"class":782},[84,13914,13915],{"class":86,"line":1254},[84,13916,777],{"emptyLinePlaceholder":776},[84,13918,13919,13921,13923,13925,13927,13929],{"class":86,"line":1259},[84,13920,1670],{"class":782},[84,13922,799],{"class":786},[84,13924,1653],{"class":90},[84,13926,840],{"class":782},[84,13928,1679],{"class":94},[84,13930,814],{"class":782},[84,13932,13933,13935,13937],{"class":86,"line":1264},[84,13934,1703],{"class":782},[84,13936,811],{"class":786},[84,13938,814],{"class":782},[84,13940,13941],{"class":86,"line":1270},[84,13942,777],{"emptyLinePlaceholder":776},[84,13944,13945,13947,13949],{"class":86,"line":1280},[84,13946,3894],{"class":782},[84,13948,823],{"class":786},[84,13950,814],{"class":782},[84,13952,13953,13955,13957,13959,13961,13964],{"class":86,"line":1292},[84,13954,12381],{"class":782},[84,13956,834],{"class":786},[84,13958,837],{"class":90},[84,13960,840],{"class":782},[84,13962,13963],{"class":94},"\"${base_link_x} ${base_link_y} ${base_link_z}\"",[84,13965,3843],{"class":782},[84,13967,13968,13970,13972],{"class":86,"line":1302},[84,13969,12489],{"class":782},[84,13971,823],{"class":786},[84,13973,814],{"class":782},[84,13975,13976,13978,13980,13982,13984,13986,13988,13990,13992],{"class":86,"line":1307},[84,13977,3894],{"class":782},[84,13979,3633],{"class":786},[84,13981,3930],{"class":90},[84,13983,840],{"class":782},[84,13985,3935],{"class":94},[84,13987,3938],{"class":90},[84,13989,840],{"class":782},[84,13991,3935],{"class":94},[84,13993,3843],{"class":782},[84,13995,13996,13998,14000,14002,14004,14006],{"class":86,"line":1313},[84,13997,3894],{"class":782},[84,13999,3655],{"class":786},[84,14001,1653],{"class":90},[84,14003,840],{"class":782},[84,14005,3824],{"class":94},[84,14007,846],{"class":782},[84,14009,14010,14012,14014],{"class":86,"line":1318},[84,14011,1732],{"class":782},[84,14013,811],{"class":786},[84,14015,814],{"class":782},[84,14017,14018,14020,14022],{"class":86,"line":1327},[84,14019,1750],{"class":782},[84,14021,799],{"class":786},[84,14023,814],{"class":782},[84,14025,14026,14028,14030,14032,14034,14036,14038,14040,14042],{"class":86,"line":1333},[84,14027,1670],{"class":782},[84,14029,4645],{"class":786},[84,14031,1653],{"class":90},[84,14033,840],{"class":782},[84,14035,5615],{"class":94},[84,14037,5351],{"class":90},[84,14039,840],{"class":782},[84,14041,5622],{"class":94},[84,14043,814],{"class":782},[84,14045,14046,14048,14050,14052,14054,14056],{"class":86,"line":1339},[84,14047,1703],{"class":782},[84,14049,4492],{"class":786},[84,14051,5367],{"class":90},[84,14053,840],{"class":782},[84,14055,5539],{"class":94},[84,14057,846],{"class":782},[84,14059,14060,14062,14064,14066,14068,14070],{"class":86,"line":1345},[84,14061,1703],{"class":782},[84,14063,4507],{"class":786},[84,14065,5367],{"class":90},[84,14067,840],{"class":782},[84,14069,1679],{"class":94},[84,14071,846],{"class":782},[84,14073,14074,14076,14078,14080,14082,14085],{"class":86,"line":1351},[84,14075,1703],{"class":782},[84,14077,3633],{"class":786},[84,14079,3930],{"class":90},[84,14081,840],{"class":782},[84,14083,14084],{"class":94},"\"0.0 0.0 ${distance + base_link_z / 2}\"",[84,14086,846],{"class":782},[84,14088,14089,14091,14093],{"class":86,"line":2236},[84,14090,1750],{"class":782},[84,14092,4645],{"class":786},[84,14094,814],{"class":782},[84,14096,14097],{"class":86,"line":2241},[84,14098,777],{"emptyLinePlaceholder":776},[84,14100,14101,14103,14105,14107,14109,14111,14113,14115,14118],{"class":86,"line":2251},[84,14102,1670],{"class":782},[84,14104,12335],{"class":786},[84,14106,1653],{"class":90},[84,14108,840],{"class":782},[84,14110,12342],{"class":94},[84,14112,12345],{"class":90},[84,14114,840],{"class":782},[84,14116,14117],{"class":94},"\"wheel_name is_front is_left\"",[84,14119,12353],{"class":782},[84,14121,14122,14124,14126,14128,14130,14132],{"class":86,"line":2262},[84,14123,1703],{"class":782},[84,14125,799],{"class":786},[84,14127,1653],{"class":90},[84,14129,840],{"class":782},[84,14131,12366],{"class":94},[84,14133,814],{"class":782},[84,14135,14136,14138,14140],{"class":86,"line":2271},[84,14137,3894],{"class":782},[84,14139,811],{"class":786},[84,14141,814],{"class":782},[84,14143,14144,14146,14148],{"class":86,"line":2276},[84,14145,12381],{"class":782},[84,14147,823],{"class":786},[84,14149,814],{"class":782},[84,14151,14152,14154,14156,14158,14160,14162,14164,14166,14168],{"class":86,"line":2281},[84,14153,12390],{"class":782},[84,14155,3601],{"class":786},[84,14157,5566],{"class":90},[84,14159,840],{"class":782},[84,14161,12399],{"class":94},[84,14163,6726],{"class":90},[84,14165,840],{"class":782},[84,14167,12406],{"class":94},[84,14169,3843],{"class":782},[84,14171,14172,14174,14176],{"class":86,"line":2290},[84,14173,12413],{"class":782},[84,14175,823],{"class":786},[84,14177,814],{"class":782},[84,14179,14180,14182,14184,14186,14188,14190,14192,14194,14196],{"class":86,"line":2898},[84,14181,12381],{"class":782},[84,14183,3633],{"class":786},[84,14185,3930],{"class":90},[84,14187,840],{"class":782},[84,14189,3935],{"class":94},[84,14191,3938],{"class":90},[84,14193,840],{"class":782},[84,14195,12440],{"class":94},[84,14197,3843],{"class":782},[84,14199,14200,14202,14204,14206,14208,14210],{"class":86,"line":2909},[84,14201,12381],{"class":782},[84,14203,3655],{"class":786},[84,14205,1653],{"class":90},[84,14207,840],{"class":782},[84,14209,6393],{"class":94},[84,14211,846],{"class":782},[84,14213,14214,14216,14218],{"class":86,"line":2937},[84,14215,12489],{"class":782},[84,14217,811],{"class":786},[84,14219,814],{"class":782},[84,14221,14222,14224,14226],{"class":86,"line":2942},[84,14223,1732],{"class":782},[84,14225,799],{"class":786},[84,14227,814],{"class":782},[84,14229,14230,14232,14234,14236,14238,14241,14243,14245,14247],{"class":86,"line":2947},[84,14231,1703],{"class":782},[84,14233,4645],{"class":786},[84,14235,1653],{"class":90},[84,14237,840],{"class":782},[84,14239,14240],{"class":94},"\"${wheel_name}2baselink\"",[84,14242,5351],{"class":90},[84,14244,840],{"class":782},[84,14246,5356],{"class":94},[84,14248,814],{"class":782},[84,14250,14251,14253,14255,14257,14259,14261],{"class":86,"line":2956},[84,14252,3894],{"class":782},[84,14254,4492],{"class":786},[84,14256,5367],{"class":90},[84,14258,840],{"class":782},[84,14260,1679],{"class":94},[84,14262,14263],{"class":782},"  />\n",[84,14265,14266,14268,14270,14272,14274,14276],{"class":86,"line":3346},[84,14267,3894],{"class":782},[84,14269,4507],{"class":786},[84,14271,5367],{"class":90},[84,14273,840],{"class":782},[84,14275,12366],{"class":94},[84,14277,3843],{"class":782},[84,14279,14280,14282,14284,14286,14288,14291,14293,14295,14297],{"class":86,"line":3352},[84,14281,3894],{"class":782},[84,14283,3633],{"class":786},[84,14285,3930],{"class":90},[84,14287,840],{"class":782},[84,14289,14290],{"class":94},"\"${(base_link_x / 2 - wheel_radius) * is_front} ${base_link_y / 2 * is_left} ${(base_link_z / 2 + distance - wheel_radius) * -1}\"",[84,14292,3938],{"class":90},[84,14294,840],{"class":782},[84,14296,3935],{"class":94},[84,14298,3843],{"class":782},[84,14300,14301,14303,14305,14307,14309,14311],{"class":86,"line":3357},[84,14302,3894],{"class":782},[84,14304,5419],{"class":786},[84,14306,3930],{"class":90},[84,14308,840],{"class":782},[84,14310,6883],{"class":94},[84,14312,3843],{"class":782},[84,14314,14315,14317,14319],{"class":86,"line":3363},[84,14316,1732],{"class":782},[84,14318,4645],{"class":786},[84,14320,814],{"class":782},[84,14322,14323,14325,14327],{"class":86,"line":3368},[84,14324,1750],{"class":782},[84,14326,12335],{"class":786},[84,14328,814],{"class":782},[84,14330,14331],{"class":86,"line":3374},[84,14332,777],{"emptyLinePlaceholder":776},[84,14334,14335,14337,14339,14341,14343,14345,14348,14350,14352,14355,14357,14359],{"class":86,"line":3383},[84,14336,1670],{"class":782},[84,14338,12516],{"class":786},[84,14340,12519],{"class":90},[84,14342,840],{"class":782},[84,14344,12524],{"class":94},[84,14346,14347],{"class":90}," is_front",[84,14349,840],{"class":782},[84,14351,10298],{"class":94},[84,14353,14354],{"class":90}," is_left",[84,14356,840],{"class":782},[84,14358,10298],{"class":94},[84,14360,3843],{"class":782},[84,14362,14363,14365,14367,14369,14371,14373,14375,14377,14380,14382,14384,14386],{"class":86,"line":3395},[84,14364,1670],{"class":782},[84,14366,12516],{"class":786},[84,14368,12519],{"class":90},[84,14370,840],{"class":782},[84,14372,12539],{"class":94},[84,14374,14347],{"class":90},[84,14376,840],{"class":782},[84,14378,14379],{"class":94},"\"-1\"",[84,14381,14354],{"class":90},[84,14383,840],{"class":782},[84,14385,10298],{"class":94},[84,14387,3843],{"class":782},[84,14389,14390,14392,14394,14396,14398,14400,14402,14404,14406,14408,14410,14412],{"class":86,"line":3405},[84,14391,1670],{"class":782},[84,14393,12516],{"class":786},[84,14395,12519],{"class":90},[84,14397,840],{"class":782},[84,14399,12554],{"class":94},[84,14401,14347],{"class":90},[84,14403,840],{"class":782},[84,14405,10298],{"class":94},[84,14407,14354],{"class":90},[84,14409,840],{"class":782},[84,14411,14379],{"class":94},[84,14413,3843],{"class":782},[84,14415,14416,14418,14420,14422,14424,14426,14428,14430,14432,14434,14436,14438],{"class":86,"line":3410},[84,14417,1670],{"class":782},[84,14419,12516],{"class":786},[84,14421,12519],{"class":90},[84,14423,840],{"class":782},[84,14425,12569],{"class":94},[84,14427,14347],{"class":90},[84,14429,840],{"class":782},[84,14431,14379],{"class":94},[84,14433,14354],{"class":90},[84,14435,840],{"class":782},[84,14437,14379],{"class":94},[84,14439,3843],{"class":782},[84,14441,14442,14444,14446],{"class":86,"line":3415},[84,14443,3983],{"class":782},[84,14445,787],{"class":786},[84,14447,814],{"class":782},[3541,14449,14450],{"id":14450},"添加摄像头",[14,14452,14453],{},"编辑car_camera.urdf.xacro文件，输入如下内容：",[76,14455,14457],{"className":767,"code":14456,"language":769,"meta":19,"style":19},"\n\u003Crobot xmlns:xacro=\"http://wiki.ros.org/xacro\">\n\n    \u003Cxacro:property name=\"camera_x\" value=\"0.012\" /> \n    \u003Cxacro:property name=\"camera_y\" value=\"0.05\" /> \n    \u003Cxacro:property name=\"camera_z\" value=\"0.01\" /> \n    \u003Cxacro:property name=\"camera_joint_x\" value=\"${base_link_x / 2 - camera_x / 2}\" /> \n    \u003Cxacro:property name=\"camera_joint_y\" value=\"0.0\" /> \n    \u003Cxacro:property name=\"camera_joint_z\" value=\"${base_link_z / 2 + camera_z / 2}\" /> \n\n    \u003Clink name=\"camera\">\n        \u003Cvisual>\n            \u003Cgeometry>\n                \u003Cbox size=\"${camera_x} ${camera_y} ${camera_z}\" />\n            \u003C/geometry>\n            \u003Corigin xyz=\"0.0 0.0 0.0\" rpy=\"0.0 0.0 0.0\" />\n            \u003Cmaterial name=\"red\" />\n        \u003C/visual>\n    \u003C/link>\n\n    \u003Cjoint name=\"camera2baselink\" type=\"fixed\">\n        \u003Cparent link=\"base_link\" />\n        \u003Cchild link=\"camera\" />\n        \u003Corigin xyz=\"${camera_joint_x} ${camera_joint_y} ${camera_joint_z}\" />\n    \u003C/joint>\n\u003C/robot>\n",[71,14458,14459,14463,14477,14481,14504,14526,14548,14570,14592,14614,14618,14632,14640,14648,14663,14671,14692,14706,14714,14722,14726,14746,14760,14774,14789,14797],{"__ignoreMap":19},[84,14460,14461],{"class":86,"line":87},[84,14462,777],{"emptyLinePlaceholder":776},[84,14464,14465,14467,14469,14471,14473,14475],{"class":86,"line":636},[84,14466,1369],{"class":782},[84,14468,787],{"class":786},[84,14470,12247],{"class":90},[84,14472,840],{"class":782},[84,14474,12252],{"class":94},[84,14476,814],{"class":782},[84,14478,14479],{"class":86,"line":793},[84,14480,777],{"emptyLinePlaceholder":776},[84,14482,14483,14485,14487,14489,14491,14494,14496,14498,14501],{"class":86,"line":805},[84,14484,1670],{"class":782},[84,14486,12265],{"class":786},[84,14488,1653],{"class":90},[84,14490,840],{"class":782},[84,14492,14493],{"class":94},"\"camera_x\"",[84,14495,12275],{"class":90},[84,14497,840],{"class":782},[84,14499,14500],{"class":94},"\"0.012\"",[84,14502,14503],{"class":782}," /> \n",[84,14505,14506,14508,14510,14512,14514,14517,14519,14521,14524],{"class":86,"line":817},[84,14507,1670],{"class":782},[84,14509,12265],{"class":786},[84,14511,1653],{"class":90},[84,14513,840],{"class":782},[84,14515,14516],{"class":94},"\"camera_y\"",[84,14518,12275],{"class":90},[84,14520,840],{"class":782},[84,14522,14523],{"class":94},"\"0.05\"",[84,14525,14503],{"class":782},[84,14527,14528,14530,14532,14534,14536,14539,14541,14543,14546],{"class":86,"line":828},[84,14529,1670],{"class":782},[84,14531,12265],{"class":786},[84,14533,1653],{"class":90},[84,14535,840],{"class":782},[84,14537,14538],{"class":94},"\"camera_z\"",[84,14540,12275],{"class":90},[84,14542,840],{"class":782},[84,14544,14545],{"class":94},"\"0.01\"",[84,14547,14503],{"class":782},[84,14549,14550,14552,14554,14556,14558,14561,14563,14565,14568],{"class":86,"line":849},[84,14551,1670],{"class":782},[84,14553,12265],{"class":786},[84,14555,1653],{"class":90},[84,14557,840],{"class":782},[84,14559,14560],{"class":94},"\"camera_joint_x\"",[84,14562,12275],{"class":90},[84,14564,840],{"class":782},[84,14566,14567],{"class":94},"\"${base_link_x / 2 - camera_x / 2}\"",[84,14569,14503],{"class":782},[84,14571,14572,14574,14576,14578,14580,14583,14585,14587,14590],{"class":86,"line":859},[84,14573,1670],{"class":782},[84,14575,12265],{"class":786},[84,14577,1653],{"class":90},[84,14579,840],{"class":782},[84,14581,14582],{"class":94},"\"camera_joint_y\"",[84,14584,12275],{"class":90},[84,14586,840],{"class":782},[84,14588,14589],{"class":94},"\"0.0\"",[84,14591,14503],{"class":782},[84,14593,14594,14596,14598,14600,14602,14605,14607,14609,14612],{"class":86,"line":869},[84,14595,1670],{"class":782},[84,14597,12265],{"class":786},[84,14599,1653],{"class":90},[84,14601,840],{"class":782},[84,14603,14604],{"class":94},"\"camera_joint_z\"",[84,14606,12275],{"class":90},[84,14608,840],{"class":782},[84,14610,14611],{"class":94},"\"${base_link_z / 2 + camera_z / 2}\"",[84,14613,14503],{"class":782},[84,14615,14616],{"class":86,"line":879},[84,14617,777],{"emptyLinePlaceholder":776},[84,14619,14620,14622,14624,14626,14628,14630],{"class":86,"line":1012},[84,14621,1670],{"class":782},[84,14623,799],{"class":786},[84,14625,1653],{"class":90},[84,14627,840],{"class":782},[84,14629,5240],{"class":94},[84,14631,814],{"class":782},[84,14633,14634,14636,14638],{"class":86,"line":1017},[84,14635,1703],{"class":782},[84,14637,811],{"class":786},[84,14639,814],{"class":782},[84,14641,14642,14644,14646],{"class":86,"line":1034},[84,14643,3894],{"class":782},[84,14645,823],{"class":786},[84,14647,814],{"class":782},[84,14649,14650,14652,14654,14656,14658,14661],{"class":86,"line":1056},[84,14651,12381],{"class":782},[84,14653,834],{"class":786},[84,14655,837],{"class":90},[84,14657,840],{"class":782},[84,14659,14660],{"class":94},"\"${camera_x} ${camera_y} ${camera_z}\"",[84,14662,3843],{"class":782},[84,14664,14665,14667,14669],{"class":86,"line":1076},[84,14666,12489],{"class":782},[84,14668,823],{"class":786},[84,14670,814],{"class":782},[84,14672,14673,14675,14677,14679,14681,14684,14686,14688,14690],{"class":86,"line":1107},[84,14674,3894],{"class":782},[84,14676,3633],{"class":786},[84,14678,3930],{"class":90},[84,14680,840],{"class":782},[84,14682,14683],{"class":94},"\"0.0 0.0 0.0\"",[84,14685,3938],{"class":90},[84,14687,840],{"class":782},[84,14689,14683],{"class":94},[84,14691,3843],{"class":782},[84,14693,14694,14696,14698,14700,14702,14704],{"class":86,"line":1112},[84,14695,3894],{"class":782},[84,14697,3655],{"class":786},[84,14699,1653],{"class":90},[84,14701,840],{"class":782},[84,14703,5092],{"class":94},[84,14705,3843],{"class":782},[84,14707,14708,14710,14712],{"class":86,"line":1118},[84,14709,1732],{"class":782},[84,14711,811],{"class":786},[84,14713,814],{"class":782},[84,14715,14716,14718,14720],{"class":86,"line":1123},[84,14717,1750],{"class":782},[84,14719,799],{"class":786},[84,14721,814],{"class":782},[84,14723,14724],{"class":86,"line":1129},[84,14725,777],{"emptyLinePlaceholder":776},[84,14727,14728,14730,14732,14734,14736,14738,14740,14742,14744],{"class":86,"line":1151},[84,14729,1670],{"class":782},[84,14731,4645],{"class":786},[84,14733,1653],{"class":90},[84,14735,840],{"class":782},[84,14737,5348],{"class":94},[84,14739,5351],{"class":90},[84,14741,840],{"class":782},[84,14743,5622],{"class":94},[84,14745,814],{"class":782},[84,14747,14748,14750,14752,14754,14756,14758],{"class":86,"line":1162},[84,14749,1703],{"class":782},[84,14751,4492],{"class":786},[84,14753,5367],{"class":90},[84,14755,840],{"class":782},[84,14757,1679],{"class":94},[84,14759,3843],{"class":782},[84,14761,14762,14764,14766,14768,14770,14772],{"class":86,"line":1176},[84,14763,1703],{"class":782},[84,14765,4507],{"class":786},[84,14767,5367],{"class":90},[84,14769,840],{"class":782},[84,14771,5240],{"class":94},[84,14773,3843],{"class":782},[84,14775,14776,14778,14780,14782,14784,14787],{"class":86,"line":1188},[84,14777,1703],{"class":782},[84,14779,3633],{"class":786},[84,14781,3930],{"class":90},[84,14783,840],{"class":782},[84,14785,14786],{"class":94},"\"${camera_joint_x} ${camera_joint_y} ${camera_joint_z}\"",[84,14788,3843],{"class":782},[84,14790,14791,14793,14795],{"class":86,"line":1205},[84,14792,1750],{"class":782},[84,14794,4645],{"class":786},[84,14796,814],{"class":782},[84,14798,14799,14801,14803],{"class":86,"line":1211},[84,14800,3983],{"class":782},[84,14802,787],{"class":786},[84,14804,814],{"class":782},[3541,14806,14807],{"id":14807},"添加雷达",[14,14809,14810],{},"编辑car_laser.urdf.xacro文件，输入如下内容：",[76,14812,14814],{"className":767,"code":14813,"language":769,"meta":19,"style":19},"\n\u003Crobot xmlns:xacro=\"http://wiki.ros.org/xacro\">\n\n    \u003Cmaterial name=\"blue\">\n        \u003Ccolor rgba=\"0.0 0.0 0.4 0.95\" />\n    \u003C/material>\n\n    \u003Cxacro:property name=\"laser_length\" value=\"0.03\" /> \n    \u003Cxacro:property name=\"laser_radius\" value=\"0.03\" /> \n    \u003Cxacro:property name=\"laser_joint_x\" value=\"0.0\" /> \n    \u003Cxacro:property name=\"laser_joint_y\" value=\"0.0\" /> \n    \u003Cxacro:property name=\"laser_joint_z\" value=\"${base_link_z / 2 + laser_length / 2}\" /> \n\n    \u003Clink name=\"laser\">\n        \u003Cvisual>\n            \u003Cgeometry>\n                \u003Ccylinder radius=\"${laser_radius}\" length=\"${laser_length}\" />\n            \u003C/geometry>\n            \u003Corigin xyz=\"0.0 0.0 0.0\" rpy=\"0.0 0.0 0.0\" />\n            \u003Cmaterial name=\"blue\" />\n        \u003C/visual>\n    \u003C/link>\n\n    \u003Cjoint name=\"laser2baselink\" type=\"fixed\">\n        \u003Cparent link=\"base_link\" />\n        \u003Cchild link=\"laser\" />\n        \u003Corigin xyz=\"${laser_joint_x} ${laser_joint_y} ${laser_joint_z}\" />\n    \u003C/joint>\n\u003C/robot>\n",[71,14815,14816,14820,14834,14838,14853,14868,14876,14880,14902,14923,14944,14965,14987,14991,15006,15014,15022,15044,15052,15072,15086,15094,15102,15106,15127,15141,15155,15170,15178],{"__ignoreMap":19},[84,14817,14818],{"class":86,"line":87},[84,14819,777],{"emptyLinePlaceholder":776},[84,14821,14822,14824,14826,14828,14830,14832],{"class":86,"line":636},[84,14823,1369],{"class":782},[84,14825,787],{"class":786},[84,14827,12247],{"class":90},[84,14829,840],{"class":782},[84,14831,12252],{"class":94},[84,14833,814],{"class":782},[84,14835,14836],{"class":86,"line":793},[84,14837,777],{"emptyLinePlaceholder":776},[84,14839,14840,14842,14844,14846,14848,14851],{"class":86,"line":805},[84,14841,1670],{"class":782},[84,14843,3655],{"class":786},[84,14845,1653],{"class":90},[84,14847,840],{"class":782},[84,14849,14850],{"class":94},"\"blue\"",[84,14852,814],{"class":782},[84,14854,14855,14857,14859,14861,14863,14866],{"class":86,"line":817},[84,14856,1703],{"class":782},[84,14858,3670],{"class":786},[84,14860,3835],{"class":90},[84,14862,840],{"class":782},[84,14864,14865],{"class":94},"\"0.0 0.0 0.4 0.95\"",[84,14867,3843],{"class":782},[84,14869,14870,14872,14874],{"class":86,"line":828},[84,14871,1750],{"class":782},[84,14873,3655],{"class":786},[84,14875,814],{"class":782},[84,14877,14878],{"class":86,"line":849},[84,14879,777],{"emptyLinePlaceholder":776},[84,14881,14882,14884,14886,14888,14890,14893,14895,14897,14900],{"class":86,"line":859},[84,14883,1670],{"class":782},[84,14885,12265],{"class":786},[84,14887,1653],{"class":90},[84,14889,840],{"class":782},[84,14891,14892],{"class":94},"\"laser_length\"",[84,14894,12275],{"class":90},[84,14896,840],{"class":782},[84,14898,14899],{"class":94},"\"0.03\"",[84,14901,14503],{"class":782},[84,14903,14904,14906,14908,14910,14912,14915,14917,14919,14921],{"class":86,"line":869},[84,14905,1670],{"class":782},[84,14907,12265],{"class":786},[84,14909,1653],{"class":90},[84,14911,840],{"class":782},[84,14913,14914],{"class":94},"\"laser_radius\"",[84,14916,12275],{"class":90},[84,14918,840],{"class":782},[84,14920,14899],{"class":94},[84,14922,14503],{"class":782},[84,14924,14925,14927,14929,14931,14933,14936,14938,14940,14942],{"class":86,"line":879},[84,14926,1670],{"class":782},[84,14928,12265],{"class":786},[84,14930,1653],{"class":90},[84,14932,840],{"class":782},[84,14934,14935],{"class":94},"\"laser_joint_x\"",[84,14937,12275],{"class":90},[84,14939,840],{"class":782},[84,14941,14589],{"class":94},[84,14943,14503],{"class":782},[84,14945,14946,14948,14950,14952,14954,14957,14959,14961,14963],{"class":86,"line":1012},[84,14947,1670],{"class":782},[84,14949,12265],{"class":786},[84,14951,1653],{"class":90},[84,14953,840],{"class":782},[84,14955,14956],{"class":94},"\"laser_joint_y\"",[84,14958,12275],{"class":90},[84,14960,840],{"class":782},[84,14962,14589],{"class":94},[84,14964,14503],{"class":782},[84,14966,14967,14969,14971,14973,14975,14978,14980,14982,14985],{"class":86,"line":1017},[84,14968,1670],{"class":782},[84,14970,12265],{"class":786},[84,14972,1653],{"class":90},[84,14974,840],{"class":782},[84,14976,14977],{"class":94},"\"laser_joint_z\"",[84,14979,12275],{"class":90},[84,14981,840],{"class":782},[84,14983,14984],{"class":94},"\"${base_link_z / 2 + laser_length / 2}\"",[84,14986,14503],{"class":782},[84,14988,14989],{"class":86,"line":1034},[84,14990,777],{"emptyLinePlaceholder":776},[84,14992,14993,14995,14997,14999,15001,15004],{"class":86,"line":1056},[84,14994,1670],{"class":782},[84,14996,799],{"class":786},[84,14998,1653],{"class":90},[84,15000,840],{"class":782},[84,15002,15003],{"class":94},"\"laser\"",[84,15005,814],{"class":782},[84,15007,15008,15010,15012],{"class":86,"line":1076},[84,15009,1703],{"class":782},[84,15011,811],{"class":786},[84,15013,814],{"class":782},[84,15015,15016,15018,15020],{"class":86,"line":1107},[84,15017,3894],{"class":782},[84,15019,823],{"class":786},[84,15021,814],{"class":782},[84,15023,15024,15026,15028,15030,15032,15035,15037,15039,15042],{"class":86,"line":1112},[84,15025,12381],{"class":782},[84,15027,3601],{"class":786},[84,15029,5566],{"class":90},[84,15031,840],{"class":782},[84,15033,15034],{"class":94},"\"${laser_radius}\"",[84,15036,6726],{"class":90},[84,15038,840],{"class":782},[84,15040,15041],{"class":94},"\"${laser_length}\"",[84,15043,3843],{"class":782},[84,15045,15046,15048,15050],{"class":86,"line":1118},[84,15047,12489],{"class":782},[84,15049,823],{"class":786},[84,15051,814],{"class":782},[84,15053,15054,15056,15058,15060,15062,15064,15066,15068,15070],{"class":86,"line":1123},[84,15055,3894],{"class":782},[84,15057,3633],{"class":786},[84,15059,3930],{"class":90},[84,15061,840],{"class":782},[84,15063,14683],{"class":94},[84,15065,3938],{"class":90},[84,15067,840],{"class":782},[84,15069,14683],{"class":94},[84,15071,3843],{"class":782},[84,15073,15074,15076,15078,15080,15082,15084],{"class":86,"line":1129},[84,15075,3894],{"class":782},[84,15077,3655],{"class":786},[84,15079,1653],{"class":90},[84,15081,840],{"class":782},[84,15083,14850],{"class":94},[84,15085,3843],{"class":782},[84,15087,15088,15090,15092],{"class":86,"line":1151},[84,15089,1732],{"class":782},[84,15091,811],{"class":786},[84,15093,814],{"class":782},[84,15095,15096,15098,15100],{"class":86,"line":1162},[84,15097,1750],{"class":782},[84,15099,799],{"class":786},[84,15101,814],{"class":782},[84,15103,15104],{"class":86,"line":1176},[84,15105,777],{"emptyLinePlaceholder":776},[84,15107,15108,15110,15112,15114,15116,15119,15121,15123,15125],{"class":86,"line":1188},[84,15109,1670],{"class":782},[84,15111,4645],{"class":786},[84,15113,1653],{"class":90},[84,15115,840],{"class":782},[84,15117,15118],{"class":94},"\"laser2baselink\"",[84,15120,5351],{"class":90},[84,15122,840],{"class":782},[84,15124,5622],{"class":94},[84,15126,814],{"class":782},[84,15128,15129,15131,15133,15135,15137,15139],{"class":86,"line":1205},[84,15130,1703],{"class":782},[84,15132,4492],{"class":786},[84,15134,5367],{"class":90},[84,15136,840],{"class":782},[84,15138,1679],{"class":94},[84,15140,3843],{"class":782},[84,15142,15143,15145,15147,15149,15151,15153],{"class":86,"line":1211},[84,15144,1703],{"class":782},[84,15146,4507],{"class":786},[84,15148,5367],{"class":90},[84,15150,840],{"class":782},[84,15152,15003],{"class":94},[84,15154,3843],{"class":782},[84,15156,15157,15159,15161,15163,15165,15168],{"class":86,"line":1216},[84,15158,1703],{"class":782},[84,15160,3633],{"class":786},[84,15162,3930],{"class":90},[84,15164,840],{"class":782},[84,15166,15167],{"class":94},"\"${laser_joint_x} ${laser_joint_y} ${laser_joint_z}\"",[84,15169,3843],{"class":782},[84,15171,15172,15174,15176],{"class":86,"line":1222},[84,15173,1750],{"class":782},[84,15175,4645],{"class":786},[84,15177,814],{"class":782},[84,15179,15180,15182,15184],{"class":86,"line":1232},[84,15181,3983],{"class":782},[84,15183,787],{"class":786},[84,15185,814],{"class":782},[3541,15187,15188],{"id":15188},"执行",[14,15190,15191],{},"编译后，工作空间终端下调用如下命令执行：",[76,15193,15195],{"className":78,"code":15194,"language":80,"meta":19,"style":19},"\n# ROS Humble\nros2 launch cpp06_urdf display.launch.py model:=ros2 pkg prefix --share cpp06_urdf/urdf/xacro/car.urdf.xacro\n#ROS Jazzy\ncolcon build\nsource install/setup.bash\nros2 run xacro xacro $(ros2 pkg prefix cpp06_urdf)/share/cpp06_urdf/urdf/xacro/car.urdf.xacro -o ./src/cpp06_urdf/urdf/urdf/car.urdf\nros2 launch cpp06_urdf display.launch.py model:=./src/cpp06_urdf/urdf/urdf/car.urdf\n",[71,15196,15197,15201,15206,15228,15233,15239,15245,15278],{"__ignoreMap":19},[84,15198,15199],{"class":86,"line":87},[84,15200,777],{"emptyLinePlaceholder":776},[84,15202,15203],{"class":86,"line":636},[84,15204,15205],{"class":997},"# ROS Humble\n",[84,15207,15208,15210,15212,15214,15216,15219,15221,15223,15225],{"class":86,"line":793},[84,15209,716],{"class":90},[84,15211,1520],{"class":94},[84,15213,725],{"class":94},[84,15215,2512],{"class":94},[84,15217,15218],{"class":94}," model:=ros2",[84,15220,719],{"class":94},[84,15222,2490],{"class":94},[84,15224,2493],{"class":728},[84,15226,15227],{"class":94}," cpp06_urdf/urdf/xacro/car.urdf.xacro\n",[84,15229,15230],{"class":86,"line":805},[84,15231,15232],{"class":997},"#ROS Jazzy\n",[84,15234,15235,15237],{"class":86,"line":817},[84,15236,1486],{"class":90},[84,15238,8122],{"class":94},[84,15240,15241,15243],{"class":86,"line":828},[84,15242,1510],{"class":728},[84,15244,1513],{"class":94},[84,15246,15247,15249,15251,15253,15255,15258,15260,15262,15264,15266,15269,15272,15275],{"class":86,"line":849},[84,15248,716],{"class":90},[84,15250,2415],{"class":94},[84,15252,12629],{"class":94},[84,15254,12629],{"class":94},[84,15256,15257],{"class":782}," $(",[84,15259,716],{"class":90},[84,15261,719],{"class":94},[84,15263,2490],{"class":94},[84,15265,725],{"class":94},[84,15267,15268],{"class":782},")",[84,15270,15271],{"class":94},"/share/cpp06_urdf/urdf/xacro/car.urdf.xacro",[84,15273,15274],{"class":728}," -o",[84,15276,15277],{"class":94}," ./src/cpp06_urdf/urdf/urdf/car.urdf\n",[84,15279,15280,15282,15284,15286,15288],{"class":86,"line":859},[84,15281,716],{"class":90},[84,15283,1520],{"class":94},[84,15285,725],{"class":94},[84,15287,2512],{"class":94},[84,15289,15290],{"class":94}," model:=./src/cpp06_urdf/urdf/urdf/car.urdf\n",[14,15292,15293],{},"命令执行后，rviz2 中可以显示与需求类似的机器人模型。",[14,15295,15296],{},[17,15297],{"alt":19,"src":15298},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1616.webp",[10,15300,15301],{"id":15301},"小结",[14,15303,15304],{},[17,15305],{"alt":19,"src":15306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1617.webp",[14,15308,15309],{},"目前只是空壳，激光雷达和摄像头以及轮子还都是空壳，到进阶联系中，才可以实现作用。",[15311,15312,15313],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":19,"searchDepth":636,"depth":636,"links":15315},[15316,15317,15318,15319,15320,15321,15322,15323],{"id":12,"depth":793,"text":12},{"id":61,"depth":793,"text":61},{"id":642,"depth":793,"text":643},{"id":3502,"depth":793,"text":3503},{"id":7614,"depth":793,"text":7615},{"id":7777,"depth":793,"text":7778},{"id":12118,"depth":793,"text":12118},{"id":15301,"depth":793,"text":15301},9000000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan",{"title":5,"description":19},"wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","g-mcdhMjXADqqSXUsZazVGrgVgaBWOQ2NR7TcLjjyow",[15338,15343,15348,15354,15360,15366,15372,15377,15382,15387,15392,15397,15402,15407,15412,15417,15422,15427,15432,15437,15442,15447,15452,15457,15458],{"path":15339,"stem":15340,"title":15341,"date":15325,"chapter":317,"chapterSort":15342,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍",1000000,{"path":15344,"stem":15345,"title":15346,"date":15325,"chapter":441,"chapterSort":15347,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":15349,"stem":15350,"title":15351,"date":15325,"chapter":15352,"chapterSort":15353,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":15355,"stem":15356,"title":15357,"date":15325,"chapter":15358,"chapterSort":15359,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":15361,"stem":15362,"title":15363,"date":15325,"chapter":15364,"chapterSort":15365,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":15367,"stem":15368,"title":15369,"date":15325,"chapter":15370,"chapterSort":15371,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":15373,"stem":15374,"title":15375,"date":15325,"chapter":455,"chapterSort":15376,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台",11000000,{"path":15378,"stem":15379,"title":15380,"date":15325,"chapter":469,"chapterSort":15381,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",12000000,{"path":15383,"stem":15384,"title":15385,"date":15325,"chapter":483,"chapterSort":15386,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial",13000000,{"path":15388,"stem":15389,"title":15390,"date":15325,"chapter":497,"chapterSort":15391,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件",14000000,{"path":15393,"stem":15394,"title":15395,"date":15325,"chapter":511,"chapterSort":15396,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control",15000000,{"path":15398,"stem":15399,"title":15400,"date":15325,"chapter":525,"chapterSort":15401,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",16000000,{"path":15403,"stem":15404,"title":15405,"date":15325,"chapter":539,"chapterSort":15406,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",17000000,{"path":15408,"stem":15409,"title":15410,"date":15325,"chapter":553,"chapterSort":15411,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS",18000000,{"path":15413,"stem":15414,"title":15415,"date":15325,"chapter":566,"chapterSort":15416,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台",19000000,{"path":15418,"stem":15419,"title":15420,"date":15325,"chapter":330,"chapterSort":15421,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作",2000000,{"path":15423,"stem":15424,"title":15425,"date":15325,"chapter":579,"chapterSort":15426,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV",20000000,{"path":15428,"stem":15429,"title":15430,"date":15325,"chapter":344,"chapterSort":15431,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包",3000000,{"path":15433,"stem":15434,"title":15435,"date":15325,"chapter":357,"chapterSort":15436,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信",4000000,{"path":15438,"stem":15439,"title":15440,"date":15325,"chapter":371,"chapterSort":15441,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制",5000000,{"path":15443,"stem":15444,"title":15445,"date":15325,"chapter":385,"chapterSort":15446,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch",6000000,{"path":15448,"stem":15449,"title":15450,"date":15325,"chapter":399,"chapterSort":15451,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2",7000000,{"path":15453,"stem":15454,"title":15455,"date":15325,"chapter":413,"chapterSort":15456,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF",8000000,{"path":15333,"stem":15335,"title":5,"date":15325,"chapter":427,"chapterSort":15324,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":15330},{"path":15327,"stem":15459,"title":15460,"date":15325,"chapter":15331,"chapterSort":15461,"docKey":15326,"docRoot":15327,"docTitle":15328,"isWikiDoc":776,"isWikiIndex":776},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560328791]