[{"data":1,"prerenderedAt":16976},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":16628,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":16960,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan":16975},{"id":4,"title":5,"body":6,"canonicalPath":16610,"chapter":429,"chapterSort":16611,"date":16612,"description":20,"docI18nKey":16613,"docKey":16614,"docRoot":16615,"docTitle":16616,"extension":16617,"i18nKey":16618,"isBlogPost":16619,"isWikiDoc":807,"isWikiIndex":16619,"layout":16620,"legacyPath":16620,"locale":16621,"localeSlug":16622,"meta":16623,"navigation":807,"path":16610,"seo":16624,"sourcePath":16625,"sourceStem":16618,"stem":16626,"wikiDepth":89,"__hash__":16627},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言.md","Visualization Platform RVIZ2 and URDF Modeling Language",{"type":7,"value":8,"toc":16600},"minimark",[9,14,22,27,32,35,40,45,50,55,60,64,69,77,104,111,116,123,130,135,140,159,164,173,178,181,186,189,194,197,202,205,210,213,218,221,226,229,234,237,242,245,250,253,256,259,264,267,272,275,280,283,288,604,607,612,615,618,621,624,642,646,651,656,661,666,671,676,679,706,713,739,767,772,775,778,781,784,787,791,796,918,921,926,931,1385,1390,1462,1467,1502,1507,1526,1531,1556,1561,1566,1569,1574,1579,1587,1591,1594,1602,1607,1610,1615,1618,1623,1626,1634,1637,1640,1645,1648,1651,1654,1657,1660,1665,1793,1797,1800,1826,1831,1837,1863,1866,1871,1874,1878,1881,1886,1889,1892,1899,1902,1907,1912,1917,1922,1925,1930,1935,1938,1943,1946,1954,1957,1962,1967,1977,1982,1987,1992,2339,2344,2349,2354,2359,2362,2367,2372,2380,2385,2393,2396,2400,2403,2408,2415,2420,2425,2430,2435,2440,2443,2448,2451,2474,2479,2484,2489,2496,2501,2504,2509,2512,2515,2520,2530,2535,2588,2593,2598,2603,3020,3023,3558,3562,3566,3571,3575,3583,3586,3599,3607,3611,3615,3620,3623,3626,3629,3634,3637,3644,3780,3783,3786,3797,3819,3822,3830,3863,3875,3879,3884,4085,4090,4118,4123,4128,4131,4136,4141,4146,4151,4159,4162,4170,4173,4181,4184,4192,4195,4203,4206,4211,4214,4219,4224,4232,4239,4244,4435,4439,4444,4450,4453,4462,4465,4470,4475,4480,4495,4501,4506,4509,4523,4528,4533,4551,4556,4559,4564,4567,4572,4577,4581,4584,4590,4595,4628,4631,4850,4855,4858,4863,4866,4869,4874,4877,4882,4890,4895,4900,4905,4910,4913,4927,4932,4935,4939,4944,4947,4952,4957,4962,4967,4972,4977,4982,4985,4990,4993,4998,5001,5006,5009,5014,5025,5030,5033,5038,5041,5046,5049,5093,5098,5103,5106,5111,5114,5119,5127,5130,5135,5140,5145,5148,5153,5159,5167,5184,5189,5194,5197,5202,5205,5638,5641,5644,5649,5657,5660,5663,5668,5671,5674,5679,5682,5685,5688,5691,5696,5701,5706,5711,5787,5865,5868,5876,5879,5882,6454,6457,6462,6465,6470,7765,7768,7796,7801,7805,7808,7822,7828,7834,7841,7851,7863,7866,7871,7874,7879,7882,7887,7893,7900,7906,7917,7928,7933,7936,7948,7953,7960,7965,7970,7975,7980,7983,7987,7991,7994,7999,8003,8006,8013,8016,8023,8026,8031,8035,8040,8045,8050,8053,8058,8063,8068,8073,8078,8083,8086,8090,8095,8105,8110,8115,8120,8123,8128,8131,8136,8141,8144,8149,8154,8159,8164,8167,8172,8180,8183,8186,8191,8194,8197,8200,8205,8210,8215,8220,8225,8230,8233,8238,8241,8246,8249,8254,8259,8264,8269,8274,8279,8282,8286,8291,8296,8301,8306,8373,8378,8386,8389,8394,8402,8407,8412,8415,8441,8444,8509,8512,8759,8762,9059,9064,9067,9072,9577,9582,9585,9588,9596,9611,9616,9619,9624,9629,9632,9637,9640,12140,12145,12161,12166,12171,12176,12187,12192,12197,12212,12217,12222,12227,12232,12237,12245,12250,12260,12265,12268,12272,12276,12279,12282,12287,12292,12297,12301,12304,12311,12319,12322,12333,12337,12340,12343,12346,12351,12353,12357,12362,12365,12377,12383,12388,12391,12394,12399,12402,12406,12409,12445,12450,12457,12462,12465,12818,12823,12826,12829,12832,12835,12872,12875,13446,13449,13454,13457,13465,13477,13482,13485,13488,13491,14517,14520,14599,14663,14668,14673,14676,14679,14683,14689,14694,14699,14702,14706,14715,14729,14736,14814,14818,14823,15726,15730,15735,16086,16090,16095,16470,16474,16477,16576,16579,16584,16588,16593,16596],[10,11,13],"h3",{"id":12},"visual-introduction","Visual Introduction",[15,16,17],"p",{},[18,19],"img",{"alt":20,"src":21},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1353.webp",[15,23,24],{},[18,25],{"alt":20,"src":26},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1354.webp",[15,28,29],{},[18,30],{"alt":20,"src":31},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1355.webp",[15,33,34],{},"Rviz2 plugins related to coordinates, LiDAR, and cameras.",[15,36,37],{},[18,38],{"alt":20,"src":39},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1356.webp",[15,41,42],{},[18,43],{"alt":20,"src":44},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1357.webp",[15,46,47],{},[18,48],{"alt":20,"src":49},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1358.webp",[15,51,52],{},[18,53],{"alt":20,"src":54},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1359.webp",[15,56,57],{},[18,58],{"alt":20,"src":59},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1360.webp",[10,61,63],{"id":62},"basic-usage-of-rviz2","Basic usage of rviz2",[15,65,66],{},[18,67],{"alt":20,"src":68},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1361.webp",[15,70,71,72,76],{},"When installing ROS2 in the ",[73,74,75],"code",{},"sudo apt install ros-[ROS_DISTRO]-desktop"," format, RViz is already installed by default.",[78,79,83],"pre",{"className":80,"code":81,"language":82,"meta":20,"style":20},"language-bash shiki shiki-themes github-light github-dark","sudo apt install ros-[ROS_DISTRO]-rviz2\n","bash",[73,84,85],{"__ignoreMap":20},[86,87,90,94,98,101],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"sScJk","sudo",[86,95,97],{"class":96},"sZZnC"," apt",[86,99,100],{"class":96}," install",[86,102,103],{"class":96}," ros-[ROS_DISTRO]-rviz2\n",[15,105,106,110],{},[107,108,109],"strong",{},"Note:"," The [ROS_DISTRO] in the command refers to the ROS2 version.",[15,112,113],{},[18,114],{"alt":20,"src":115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1362.webp",[15,117,118,119,122],{},"Method 1: ",[73,120,121],{},"rviz2",";",[15,124,125,126,129],{},"Method 2: ",[73,127,128],{},"ros2 run rviz2 rviz2",".",[15,131,132],{},[18,133],{"alt":20,"src":134},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1363.webp",[15,136,137],{},[107,138,139],{},"After rviz2 starts, the default interface is as follows:",[141,142,143,147,150,153,156],"ol",{},[144,145,146],"li",{},"The upper part is the toolbar, which includes view control, estimated pose setting, target setting, and more. Custom plugins can also be added.",[144,148,149],{},"The left side is the plugin display area: it includes functions such as adding, deleting, copying, and renaming plugins, displaying plugins, and setting plugin properties.",[144,151,152],{},"In the middle is the 3D view display area: it visually shows the added plugin information.",[144,154,155],{},"On the right is the observation angle settings area: you can set different observation angles.",[144,157,158],{},"Below is the time display area: including system time and ROS time.",[15,160,161],{},[107,162,163],{},"The left plugin display area has two plugins by default:",[165,166,167,170],"ul",{},[144,168,169],{},"Global Options: This plugin is used to set global display-related parameters. Generally, the option that needs to be configured manually is the Fixed Frame option, which defines the global coordinate system that all other data reference during visualization.",[144,171,172],{},"Global Status: This plugin is used to display whether all coordinate transformations are functioning properly after the Fixed Frame is set in the Global Options.",[15,174,175],{},[18,176],{"alt":20,"src":177},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1364.webp",[15,179,180],{},"At the very top is the menu area, on the left is the plugin display area, in the center is the 3D debugging area, on the right is the view switching area, and at the very bottom is the time area. ROS Time refers to the ROS2 time, Wall Time refers to the system time, and Elapsed is the time Rviz2 has been running.",[15,182,183],{},[18,184],{"alt":20,"src":185},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1365.webp",[15,187,188],{},"You can save the rviz2 configuration, and also open a configuration.",[15,190,191],{},[18,192],{"alt":20,"src":193},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1366.webp",[15,195,196],{},"Set up the display panel",[15,198,199],{},[18,200],{"alt":20,"src":201},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1367.webp",[15,203,204],{},"You can set the number of grid cells on the plane.",[15,206,207],{},[18,208],{"alt":20,"src":209},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1368.webp",[15,211,212],{},"You can set the number of vertical grid cells.",[15,214,215],{},[18,216],{"alt":20,"src":217},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1369.webp",[15,219,220],{},"You can set the grid side length to any size.",[15,222,223],{},[18,224],{"alt":20,"src":225},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1370.webp",[15,227,228],{},"Change the 4 channels of sRGB",[15,230,231],{},[18,232],{"alt":20,"src":233},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1371.webp",[15,235,236],{},"The perspective can be changed.",[15,238,239],{},[18,240],{"alt":20,"src":241},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1372.webp",[15,243,244],{},"Set the offset. If Z is -1, the grid will sink 1 unit relative to the coordinate system.",[15,246,247],{},[18,248],{"alt":20,"src":249},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1373.webp",[15,251,252],{},"Fixed name is typically the name of the root coordinate system.",[15,254,255],{},"background color is the background color",[15,257,258],{},"frame rate is the publishing frequency of the coordinate system",[15,260,261],{},[18,262],{"alt":20,"src":263},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1374.webp",[15,265,266],{},"When the fixed name is set correctly, there will be no warning for the global state.",[15,268,269],{},[18,270],{"alt":20,"src":271},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1375.webp",[15,273,274],{},"Perspective switching (generally default)",[15,276,277],{},[18,278],{"alt":20,"src":279},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1376.webp",[15,281,282],{},"Can flip the Z-axis.",[15,284,285],{},[107,286,287],{},"Common Plugins:",[289,290,291,311],"table",{},[292,293,294],"thead",{},[295,296,297,302,305,308],"tr",{},[298,299,301],"th",{"align":300},"left","Serial number",[298,303,304],{"align":300},"Name",[298,306,307],{"align":300},"Function",[298,309,310],{"align":300},"Message type",[312,313,314,328,342,355,369,383,397,411,425,439,453,467,481,495,509,523,537,551,564,577,591],"tbody",{},[295,315,316,320,323,326],{},[317,318,319],"td",{"align":300},"1",[317,321,322],{"align":300},"Axes",[317,324,325],{"align":300},"Display the default coordinate system of rviz2.",[317,327],{"align":300},[295,329,330,333,336,339],{},[317,331,332],{"align":300},"2",[317,334,335],{"align":300},"Camera",[317,337,338],{"align":300},"To display the camera image, you must use the message: CameraInfo.",[317,340,341],{"align":300},"sensor_msgs/msg/Image，sensor_msgs/msg/CameraInfo",[295,343,344,347,350,353],{},[317,345,346],{"align":300},"3",[317,348,349],{"align":300},"Grid",[317,351,352],{"align":300},"Display a grid centered on the origin of the reference coordinate system.",[317,354],{"align":300},[295,356,357,360,363,366],{},[317,358,359],{"align":300},"4",[317,361,362],{"align":300},"Grid Cells",[317,364,365],{"align":300},"Drawing cells from a grid, typically representing obstacles in the costmap of a navigation stack.",[317,367,368],{"align":300},"nav_msgs/msg/GridCells",[295,370,371,374,377,380],{},[317,372,373],{"align":300},"5",[317,375,376],{"align":300},"Image",[317,378,379],{"align":300},"Displays the camera image, but unlike the Camera plugin, it does not require using the CameraInfo message.",[317,381,382],{"align":300},"sensor_msgs/msg/Image",[295,384,385,388,391,394],{},[317,386,387],{"align":300},"6",[317,389,390],{"align":300},"InteractiveMarker",[317,392,393],{"align":300},"Displays 3D objects from one or more interactive marker servers and allows mouse interaction with them.",[317,395,396],{"align":300},"visualization_msgs/msg/InteractiveMarker",[295,398,399,402,405,408],{},[317,400,401],{"align":300},"7",[317,403,404],{"align":300},"Laser Scan",[317,406,407],{"align":300},"Display LiDAR data.",[317,409,410],{"align":300},"sensor_msgs/msg/LaserScan",[295,412,413,416,419,422],{},[317,414,415],{"align":300},"8",[317,417,418],{"align":300},"Map",[317,420,421],{"align":300},"Display map data.",[317,423,424],{"align":300},"nav_msgs/msg/OccupancyGrid",[295,426,427,430,433,436],{},[317,428,429],{"align":300},"9",[317,431,432],{"align":300},"Markers",[317,434,435],{"align":300},"Allows developers to display geometry of any original shape through theming.",[317,437,438],{"align":300},"visualization_msgs/msg/Marker，visualization_msgs/msg/MarkerArray",[295,440,441,444,447,450],{},[317,442,443],{"align":300},"10",[317,445,446],{"align":300},"Path",[317,448,449],{"align":300},"Display path-related data in robot navigation.",[317,451,452],{"align":300},"nav_msgs/msg/Path",[295,454,455,458,461,464],{},[317,456,457],{"align":300},"11",[317,459,460],{"align":300},"PointStamped",[317,462,463],{"align":300},"Draw a point in the form of a small ball.",[317,465,466],{"align":300},"geometry_msgs/msg/PointStamped",[295,468,469,472,475,478],{},[317,470,471],{"align":300},"12",[317,473,474],{"align":300},"Pose",[317,476,477],{"align":300},"Draw the pose using arrows or coordinate axes.",[317,479,480],{"align":300},"geometry_msgs/msg/PoseStamped",[295,482,483,486,489,492],{},[317,484,485],{"align":300},"13",[317,487,488],{"align":300},"Pose Array",[317,490,491],{"align":300},"Draw a set of poses.",[317,493,494],{"align":300},"geometry_msgs/msg/PoseArray",[295,496,497,500,503,506],{},[317,498,499],{"align":300},"14",[317,501,502],{"align":300},"Point Cloud2",[317,504,505],{"align":300},"Plot point cloud data.",[317,507,508],{"align":300},"sensor_msgs/msg/PointCloud，sensor_msgs/msg/PointCloud2",[295,510,511,514,517,520],{},[317,512,513],{"align":300},"15",[317,515,516],{"align":300},"Polygon",[317,518,519],{"align":300},"Draw the outline of the polygon as a line.",[317,521,522],{"align":300},"geometry_msgs/msg/Polygon",[295,524,525,528,531,534],{},[317,526,527],{"align":300},"16",[317,529,530],{"align":300},"Odometry",[317,532,533],{"align":300},"Displays the accumulated odometry messages over time.",[317,535,536],{"align":300},"nav_msgs/msg/Odometry",[295,538,539,542,545,548],{},[317,540,541],{"align":300},"17",[317,543,544],{"align":300},"Range",[317,546,547],{"align":300},"Displays a cone representing distance measurements from a sonar or infrared distance sensor.",[317,549,550],{"align":300},"sensor_msgs/msg/Range",[295,552,553,556,559,562],{},[317,554,555],{"align":300},"18",[317,557,558],{"align":300},"RobotModel",[317,560,561],{"align":300},"Display the robot model.",[317,563],{"align":300},[295,565,566,569,572,575],{},[317,567,568],{"align":300},"19",[317,570,571],{"align":300},"TF",[317,573,574],{"align":300},"Display the tf transform hierarchy.",[317,576],{"align":300},[295,578,579,582,585,588],{},[317,580,581],{"align":300},"20",[317,583,584],{"align":300},"Wrench",[317,586,587],{"align":300},"Display the geometry_msgs/WrenchStamped message as an arrow representing force and an arrow with a circle representing torque.",[317,589,590],{"align":300},"geometry_msgs/msg/WrenchStamped",[295,592,593,596,599,602],{},[317,594,595],{"align":300},"21",[317,597,598],{"align":300},"Oculus",[317,600,601],{"align":300},"Render the RViz scene onto an Oculus headset.",[317,603],{"align":300},[15,605,606],{},"Each of the above plugins also contains many properties, which can be configured to control the final display effect of the plugin.",[15,608,609],{},[18,610],{"alt":20,"src":611},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1377.webp",[15,613,614],{},"Image is a camera data plugin.",[15,616,617],{},"LaserScan is a LiDAR data plugin.",[15,619,620],{},"TF is a coordinate transformation plugin.",[15,622,623],{},"RobotModel is a robot model plugin.",[78,625,629],{"className":626,"code":627,"language":628,"meta":20,"style":20},"language-TypeScript shiki shiki-themes github-light github-dark","ros2 run rviz2 rviz2 -d xxx.rviz\n#可以读取自己保存的rviz配置\n","TypeScript",[73,630,631,636],{"__ignoreMap":20},[86,632,633],{"class":88,"line":89},[86,634,635],{},"ros2 run rviz2 rviz2 -d xxx.rviz\n",[86,637,639],{"class":88,"line":638},2,[86,640,641],{},"#可以读取自己保存的rviz配置\n",[10,643,645],{"id":644},"basic-workflow-for-integrating-urdf-with-rviz2","Basic workflow for integrating URDF with rviz2",[647,648,650],"h4",{"id":649},"case-analysis","  Case Analysis",[15,652,653],{},[18,654],{"alt":20,"src":655},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1378.webp",[15,657,658],{},[18,659],{"alt":20,"src":660},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1379.webp",[15,662,663],{},[18,664],{"alt":20,"src":665},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1380.webp",[15,667,668],{},[18,669],{"alt":20,"src":670},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1381.webp",[15,672,673],{},[18,674],{"alt":20,"src":675},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1382.webp",[15,677,678],{},"Please run the following command to install the two required function packages (which can control the robot's joint movements):",[78,680,682],{"className":80,"code":681,"language":82,"meta":20,"style":20},"sudo apt install ros-humble-joint-state-publisher\nsudo apt install ros-humble-joint-state-publisher-gui\n",[73,683,684,695],{"__ignoreMap":20},[86,685,686,688,690,692],{"class":88,"line":89},[86,687,93],{"class":92},[86,689,97],{"class":96},[86,691,100],{"class":96},[86,693,694],{"class":96}," ros-humble-joint-state-publisher\n",[86,696,697,699,701,703],{"class":88,"line":638},[86,698,93],{"class":92},[86,700,97],{"class":96},[86,702,100],{"class":96},[86,704,705],{"class":96}," ros-humble-joint-state-publisher-gui\n",[15,707,708,709,712],{},"In the terminal, navigate to the ",[73,710,711],{},"src"," directory of your workspace and run the following command to create a C++ package.",[78,714,716],{"className":80,"code":715,"language":82,"meta":20,"style":20},"ros2 pkg create cpp06_urdf --build-type ament_cmake\n",[73,717,718],{"__ignoreMap":20},[86,719,720,723,726,729,732,736],{"class":88,"line":89},[86,721,722],{"class":92},"ros2",[86,724,725],{"class":96}," pkg",[86,727,728],{"class":96}," create",[86,730,731],{"class":96}," cpp06_urdf",[86,733,735],{"class":734},"sj4cs"," --build-type",[86,737,738],{"class":96}," ament_cmake\n",[15,740,741,742,745,746,745,749,752,753,756,757,759,760,762,763,766],{},"Create the ",[73,743,744],{},"urdf",", ",[73,747,748],{},"rviz",[73,750,751],{},"launch",", and ",[73,754,755],{},"meshes"," directories under the function package for later use. Within the ",[73,758,744],{}," directory, create subdirectories ",[73,761,744],{}," and ",[73,764,765],{},"xacro"," to store URDF files and Xacro files respectively.",[15,768,769],{},[18,770],{"alt":20,"src":771},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1383.webp",[15,773,774],{},"launch stores launch files",[15,776,777],{},"The urdf file stores the 3D model file in URDF format.",[15,779,780],{},"meshes stores STL models",[15,782,783],{},"xacro can simplify URDF files and enhance their flexibility.",[15,785,786],{},"rviz stores the configuration for rviz2",[647,788,790],{"id":789},"framework-setup","  Framework setup",[15,792,793],{},[18,794],{"alt":20,"src":795},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1384.webp",[78,797,801],{"className":798,"code":799,"language":800,"meta":20,"style":20},"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",[73,802,803,809,822,834,846,857,878,888,898,908],{"__ignoreMap":20},[86,804,805],{"class":88,"line":89},[86,806,808],{"emptyLinePlaceholder":807},true,"\n",[86,810,811,815,819],{"class":88,"line":638},[86,812,814],{"class":813},"sVt8B"," \u003C",[86,816,818],{"class":817},"s9eBZ","robot",[86,820,821],{"class":813},"> name=\"hello_world\"\n",[86,823,825,828,831],{"class":88,"line":824},3,[86,826,827],{"class":813},"   \u003C",[86,829,830],{"class":817},"link",[86,832,833],{"class":813},"> name=\"base_link\"\n",[86,835,837,840,843],{"class":88,"line":836},4,[86,838,839],{"class":813},"     \u003C",[86,841,842],{"class":817},"visual",[86,844,845],{"class":813},">\n",[86,847,849,852,855],{"class":88,"line":848},5,[86,850,851],{"class":813},"       \u003C",[86,853,854],{"class":817},"geometry",[86,856,845],{"class":813},[86,858,860,863,866,869,872,875],{"class":88,"line":859},6,[86,861,862],{"class":813},"         \u003C",[86,864,865],{"class":817},"box",[86,867,868],{"class":92}," size",[86,870,871],{"class":813},"=",[86,873,874],{"class":96},"\"0.5 0.2 0.1\"",[86,876,877],{"class":813},"/>\n",[86,879,881,884,886],{"class":88,"line":880},7,[86,882,883],{"class":813},"       \u003C/",[86,885,854],{"class":817},[86,887,845],{"class":813},[86,889,891,894,896],{"class":88,"line":890},8,[86,892,893],{"class":813},"     \u003C/",[86,895,842],{"class":817},[86,897,845],{"class":813},[86,899,901,904,906],{"class":88,"line":900},9,[86,902,903],{"class":813},"   \u003C/",[86,905,830],{"class":817},[86,907,845],{"class":813},[86,909,911,914,916],{"class":88,"line":910},10,[86,912,913],{"class":813}," \u003C/",[86,915,818],{"class":817},[86,917,845],{"class":813},[15,919,920],{},"Standard XML file",[15,922,923],{},[18,924],{"alt":20,"src":925},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1385.webp",[15,927,928],{},[18,929],{"alt":20,"src":930},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1386.webp",[78,932,936],{"className":933,"code":934,"language":935,"meta":20,"style":20},"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",[73,937,938,953,965,972,984,996,1008,1020,1024,1030,1041,1046,1063,1085,1105,1135,1140,1146,1151,1157,1179,1190,1204,1216,1233,1239,1244,1250,1260,1272,1282,1287,1292,1298,1308,1320,1330,1335,1341,1346,1355,1361,1367,1373,1379],{"__ignoreMap":20},[86,939,940,944,947,950],{"class":88,"line":89},[86,941,943],{"class":942},"szBVR","from",[86,945,946],{"class":813}," launch ",[86,948,949],{"class":942},"import",[86,951,952],{"class":813}," LaunchDescription\n",[86,954,955,957,960,962],{"class":88,"line":638},[86,956,943],{"class":942},[86,958,959],{"class":813}," launch_ros.actions ",[86,961,949],{"class":942},[86,963,964],{"class":813}," Node\n",[86,966,967,969],{"class":88,"line":824},[86,968,949],{"class":942},[86,970,971],{"class":813}," os\n",[86,973,974,976,979,981],{"class":88,"line":836},[86,975,943],{"class":942},[86,977,978],{"class":813}," ament_index_python.packages ",[86,980,949],{"class":942},[86,982,983],{"class":813}," get_package_share_directory\n",[86,985,986,988,991,993],{"class":88,"line":848},[86,987,943],{"class":942},[86,989,990],{"class":813}," launch_ros.parameter_descriptions ",[86,992,949],{"class":942},[86,994,995],{"class":813}," ParameterValue\n",[86,997,998,1000,1003,1005],{"class":88,"line":859},[86,999,943],{"class":942},[86,1001,1002],{"class":813}," launch.substitutions ",[86,1004,949],{"class":942},[86,1006,1007],{"class":813}," Command,LaunchConfiguration\n",[86,1009,1010,1012,1015,1017],{"class":88,"line":880},[86,1011,943],{"class":942},[86,1013,1014],{"class":813}," launch.actions ",[86,1016,949],{"class":942},[86,1018,1019],{"class":813}," DeclareLaunchArgument\n",[86,1021,1022],{"class":88,"line":890},[86,1023,808],{"emptyLinePlaceholder":807},[86,1025,1026],{"class":88,"line":900},[86,1027,1029],{"class":1028},"sJ8bj","#示例：ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo01_helloworld.urdf\n",[86,1031,1032,1035,1038],{"class":88,"line":910},[86,1033,1034],{"class":942},"def",[86,1036,1037],{"class":92}," generate_launch_description",[86,1039,1040],{"class":813},"():\n",[86,1042,1044],{"class":88,"line":1043},11,[86,1045,808],{"emptyLinePlaceholder":807},[86,1047,1049,1052,1054,1057,1060],{"class":88,"line":1048},12,[86,1050,1051],{"class":813},"    cpp06_urdf_dir ",[86,1053,871],{"class":942},[86,1055,1056],{"class":813}," get_package_share_directory(",[86,1058,1059],{"class":96},"\"cpp06_urdf\"",[86,1061,1062],{"class":813},")\n",[86,1064,1066,1069,1071,1074,1077,1080,1083],{"class":88,"line":1065},13,[86,1067,1068],{"class":813},"    default_model_path ",[86,1070,871],{"class":942},[86,1072,1073],{"class":813}," os.path.join(cpp06_urdf_dir,",[86,1075,1076],{"class":96},"\"urdf/urdf\"",[86,1078,1079],{"class":813},",",[86,1081,1082],{"class":96},"\"demo01_helloworld.urdf\"",[86,1084,1062],{"class":813},[86,1086,1088,1091,1093,1095,1098,1100,1103],{"class":88,"line":1087},14,[86,1089,1090],{"class":813},"    default_rviz_path ",[86,1092,871],{"class":942},[86,1094,1073],{"class":813},[86,1096,1097],{"class":96},"\"rviz\"",[86,1099,1079],{"class":813},[86,1101,1102],{"class":96},"\"display.rviz\"",[86,1104,1062],{"class":813},[86,1106,1108,1111,1113,1116,1120,1122,1125,1127,1130,1132],{"class":88,"line":1107},15,[86,1109,1110],{"class":813},"    model ",[86,1112,871],{"class":942},[86,1114,1115],{"class":813}," DeclareLaunchArgument(",[86,1117,1119],{"class":1118},"s4XuR","name",[86,1121,871],{"class":942},[86,1123,1124],{"class":96},"\"model\"",[86,1126,745],{"class":813},[86,1128,1129],{"class":1118},"default_value",[86,1131,871],{"class":942},[86,1133,1134],{"class":813},"default_model_path)\n",[86,1136,1138],{"class":88,"line":1137},16,[86,1139,808],{"emptyLinePlaceholder":807},[86,1141,1143],{"class":88,"line":1142},17,[86,1144,1145],{"class":1028},"    # 加载机器人模型\n",[86,1147,1149],{"class":88,"line":1148},18,[86,1150,808],{"emptyLinePlaceholder":807},[86,1152,1154],{"class":88,"line":1153},19,[86,1155,1156],{"class":1028},"    # 1.启动 robot_state_publisher 节点并以参数方式加载 urdf 文件\n",[86,1158,1160,1163,1165,1168,1171,1174,1176],{"class":88,"line":1159},20,[86,1161,1162],{"class":813},"    robot_description ",[86,1164,871],{"class":942},[86,1166,1167],{"class":813}," ParameterValue(Command([",[86,1169,1170],{"class":96},"\"xacro \"",[86,1172,1173],{"class":813},",LaunchConfiguration(",[86,1175,1124],{"class":96},[86,1177,1178],{"class":813},")]))\n",[86,1180,1182,1185,1187],{"class":88,"line":1181},21,[86,1183,1184],{"class":813},"    robot_state_publisher ",[86,1186,871],{"class":942},[86,1188,1189],{"class":813}," Node(\n",[86,1191,1193,1196,1198,1201],{"class":88,"line":1192},22,[86,1194,1195],{"class":1118},"        package",[86,1197,871],{"class":942},[86,1199,1200],{"class":96},"\"robot_state_publisher\"",[86,1202,1203],{"class":813},",\n",[86,1205,1207,1210,1212,1214],{"class":88,"line":1206},23,[86,1208,1209],{"class":1118},"        executable",[86,1211,871],{"class":942},[86,1213,1200],{"class":96},[86,1215,1203],{"class":813},[86,1217,1219,1222,1224,1227,1230],{"class":88,"line":1218},24,[86,1220,1221],{"class":1118},"        parameters",[86,1223,871],{"class":942},[86,1225,1226],{"class":813},"[{",[86,1228,1229],{"class":96},"\"robot_description\"",[86,1231,1232],{"class":813},": robot_description}]\n",[86,1234,1236],{"class":88,"line":1235},25,[86,1237,1238],{"class":813},"    )\n",[86,1240,1242],{"class":88,"line":1241},26,[86,1243,808],{"emptyLinePlaceholder":807},[86,1245,1247],{"class":88,"line":1246},27,[86,1248,1249],{"class":1028},"    # 2.启动 joint_state_publisher 节点发布非固定关节状态\n",[86,1251,1253,1256,1258],{"class":88,"line":1252},28,[86,1254,1255],{"class":813},"    joint_state_publisher ",[86,1257,871],{"class":942},[86,1259,1189],{"class":813},[86,1261,1263,1265,1267,1270],{"class":88,"line":1262},29,[86,1264,1195],{"class":1118},[86,1266,871],{"class":942},[86,1268,1269],{"class":96},"\"joint_state_publisher\"",[86,1271,1203],{"class":813},[86,1273,1275,1277,1279],{"class":88,"line":1274},30,[86,1276,1209],{"class":1118},[86,1278,871],{"class":942},[86,1280,1281],{"class":96},"\"joint_state_publisher\"\n",[86,1283,1285],{"class":88,"line":1284},31,[86,1286,1238],{"class":813},[86,1288,1290],{"class":88,"line":1289},32,[86,1291,808],{"emptyLinePlaceholder":807},[86,1293,1295],{"class":88,"line":1294},33,[86,1296,1297],{"class":1028},"    # rviz2 节点\n",[86,1299,1301,1304,1306],{"class":88,"line":1300},34,[86,1302,1303],{"class":813},"    rviz2 ",[86,1305,871],{"class":942},[86,1307,1189],{"class":813},[86,1309,1311,1313,1315,1318],{"class":88,"line":1310},35,[86,1312,1195],{"class":1118},[86,1314,871],{"class":942},[86,1316,1317],{"class":96},"\"rviz2\"",[86,1319,1203],{"class":813},[86,1321,1323,1325,1327],{"class":88,"line":1322},36,[86,1324,1209],{"class":1118},[86,1326,871],{"class":942},[86,1328,1329],{"class":96},"\"rviz2\"\n",[86,1331,1333],{"class":88,"line":1332},37,[86,1334,808],{"emptyLinePlaceholder":807},[86,1336,1338],{"class":88,"line":1337},38,[86,1339,1340],{"class":1028},"        # arguments=[\"-d\", default_rviz_path]\n",[86,1342,1344],{"class":88,"line":1343},39,[86,1345,1238],{"class":813},[86,1347,1349,1352],{"class":88,"line":1348},40,[86,1350,1351],{"class":942},"    return",[86,1353,1354],{"class":813}," LaunchDescription([\n",[86,1356,1358],{"class":88,"line":1357},41,[86,1359,1360],{"class":813},"        model,\n",[86,1362,1364],{"class":88,"line":1363},42,[86,1365,1366],{"class":813},"        robot_state_publisher,\n",[86,1368,1370],{"class":88,"line":1369},43,[86,1371,1372],{"class":813},"        joint_state_publisher,\n",[86,1374,1376],{"class":88,"line":1375},44,[86,1377,1378],{"class":813},"        rviz2\n",[86,1380,1382],{"class":88,"line":1381},45,[86,1383,1384],{"class":813},"    ])\n",[15,1386,1387],{},[18,1388],{"alt":20,"src":1389},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1387.webp",[78,1391,1393],{"className":798,"code":1392,"language":800,"meta":20,"style":20},"\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",[73,1394,1395,1410,1423,1436,1449],{"__ignoreMap":20},[86,1396,1397,1400,1403,1406,1408],{"class":88,"line":89},[86,1398,1399],{"class":813},"\u003C",[86,1401,1402],{"class":817},"exec_depend",[86,1404,1405],{"class":813},">rviz2\u003C/",[86,1407,1402],{"class":817},[86,1409,845],{"class":813},[86,1411,1412,1414,1416,1419,1421],{"class":88,"line":638},[86,1413,1399],{"class":813},[86,1415,1402],{"class":817},[86,1417,1418],{"class":813},">xacro\u003C/",[86,1420,1402],{"class":817},[86,1422,845],{"class":813},[86,1424,1425,1427,1429,1432,1434],{"class":88,"line":824},[86,1426,1399],{"class":813},[86,1428,1402],{"class":817},[86,1430,1431],{"class":813},">robot_state_publisher\u003C/",[86,1433,1402],{"class":817},[86,1435,845],{"class":813},[86,1437,1438,1440,1442,1445,1447],{"class":88,"line":836},[86,1439,1399],{"class":813},[86,1441,1402],{"class":817},[86,1443,1444],{"class":813},">joint_state_publisher\u003C/",[86,1446,1402],{"class":817},[86,1448,845],{"class":813},[86,1450,1451,1453,1455,1458,1460],{"class":88,"line":848},[86,1452,1399],{"class":813},[86,1454,1402],{"class":817},[86,1456,1457],{"class":813},">ros2launch\u003C/",[86,1459,1402],{"class":817},[86,1461,845],{"class":813},[15,1463,1464],{},[18,1465],{"alt":20,"src":1466},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1388.webp",[78,1468,1472],{"className":1469,"code":1470,"language":1471,"meta":20,"style":20},"language-cmake shiki shiki-themes github-light github-dark","install(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share/${PROJECT_NAME}  \n)\n","cmake",[73,1473,1474,1482,1487,1498],{"__ignoreMap":20},[86,1475,1476,1479],{"class":88,"line":89},[86,1477,1478],{"class":942},"install",[86,1480,1481],{"class":813},"(\n",[86,1483,1484],{"class":88,"line":638},[86,1485,1486],{"class":813},"  DIRECTORY launch urdf rviz meshes\n",[86,1488,1489,1492,1495],{"class":88,"line":824},[86,1490,1491],{"class":813},"  DESTINATION share/",[86,1493,1494],{"class":942},"${PROJECT_NAME}",[86,1496,1497],{"class":813},"  \n",[86,1499,1500],{"class":88,"line":836},[86,1501,1062],{"class":813},[15,1503,1504],{},[18,1505],{"alt":20,"src":1506},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1389.webp",[78,1508,1510],{"className":80,"code":1509,"language":82,"meta":20,"style":20},"colcon build --packages-select cpp06_urdf\n",[73,1511,1512],{"__ignoreMap":20},[86,1513,1514,1517,1520,1523],{"class":88,"line":89},[86,1515,1516],{"class":92},"colcon",[86,1518,1519],{"class":96}," build",[86,1521,1522],{"class":734}," --packages-select",[86,1524,1525],{"class":96}," cpp06_urdf\n",[15,1527,1528],{},[18,1529],{"alt":20,"src":1530},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1390.webp",[78,1532,1534],{"className":80,"code":1533,"language":82,"meta":20,"style":20},"source install/setup.bash\nros2 launch cpp06_urdf display.launch.py\n",[73,1535,1536,1544],{"__ignoreMap":20},[86,1537,1538,1541],{"class":88,"line":89},[86,1539,1540],{"class":734},"source",[86,1542,1543],{"class":96}," install/setup.bash\n",[86,1545,1546,1548,1551,1553],{"class":88,"line":638},[86,1547,722],{"class":92},[86,1549,1550],{"class":96}," launch",[86,1552,731],{"class":96},[86,1554,1555],{"class":96}," display.launch.py\n",[15,1557,1558],{},[18,1559],{"alt":20,"src":1560},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1391.webp",[15,1562,1563],{},[107,1564,1565],{},"Tip:",[15,1567,1568],{},"In the subsequent cases in this chapter, all implementations follow the steps above. In the following cases, we only need to focus on the URDF implementation; the launch files and configuration files do not need to be modified.",[15,1570,1571],{},[18,1572],{"alt":20,"src":1573},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1392.webp",[15,1575,1576],{},[18,1577],{"alt":20,"src":1578},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1393.webp",[15,1580,1581,1584],{},[18,1582],{"alt":20,"src":1583},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1394.webp",[18,1585],{"alt":20,"src":1586},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1395.webp",[647,1588,1590],{"id":1589},"urdf-file","  URDF file",[15,1592,1593],{},"Press Ctrl+\\ to generate comments.",[15,1595,1596,1599],{},[18,1597],{"alt":20,"src":1598},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1396.webp",[18,1600],{"alt":20,"src":1601},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1397.webp",[15,1603,1604],{},[18,1605],{"alt":20,"src":1606},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1398.webp",[15,1608,1609],{},"Because the URDF plugin is already installed, there is a prompt indicating that a robot root tag needs to be created.",[15,1611,1612],{},[18,1613],{"alt":20,"src":1614},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1399.webp",[15,1616,1617],{},"The first attribute is the robot's name.",[15,1619,1620],{},[18,1621],{"alt":20,"src":1622},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1400.webp",[15,1624,1625],{},"The second one has an XML namespace pointing to xacro.",[15,1627,1628,1631],{},[18,1629],{"alt":20,"src":1630},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1401.webp",[18,1632],{"alt":20,"src":1633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1402.webp",[15,1635,1636],{},"The third one has an XML namespace pointing to xacro, and also a robot name.",[15,1638,1639],{},"(For now, use the simplest one, which is the first.)",[15,1641,1642],{},[18,1643],{"alt":20,"src":1644},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1403.webp",[15,1646,1647],{},"The link tag is called a link, and it also needs a name. A link generally refers to the rigid body part.",[15,1649,1650],{},"The link has a subset tag called visual.",[15,1652,1653],{},"Under the visual tag, write about the robot's shape.",[15,1655,1656],{},"Then under that tag, there is a subset tag called geometry.",[15,1658,1659],{},"Then there is a subset tag called box (rectangular shape), followed by size which corresponds to length, width, and height.",[15,1661,1662],{},[18,1663],{"alt":20,"src":1664},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1404.webp",[78,1666,1668],{"className":798,"code":1667,"language":800,"meta":20,"style":20},"\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",[73,1669,1670,1674,1691,1695,1711,1715,1724,1728,1737,1741,1757,1766,1775,1784],{"__ignoreMap":20},[86,1671,1672],{"class":88,"line":89},[86,1673,808],{"emptyLinePlaceholder":807},[86,1675,1676,1678,1680,1683,1685,1688],{"class":88,"line":638},[86,1677,814],{"class":813},[86,1679,818],{"class":817},[86,1681,1682],{"class":92}," name",[86,1684,871],{"class":813},[86,1686,1687],{"class":96},"\"boxrobot\"",[86,1689,1690],{"class":813},"> \n",[86,1692,1693],{"class":88,"line":824},[86,1694,808],{"emptyLinePlaceholder":807},[86,1696,1697,1700,1702,1704,1706,1709],{"class":88,"line":836},[86,1698,1699],{"class":813},"    \u003C",[86,1701,830],{"class":817},[86,1703,1682],{"class":92},[86,1705,871],{"class":813},[86,1707,1708],{"class":96},"\"base_link\"",[86,1710,1690],{"class":813},[86,1712,1713],{"class":88,"line":848},[86,1714,808],{"emptyLinePlaceholder":807},[86,1716,1717,1720,1722],{"class":88,"line":859},[86,1718,1719],{"class":813},"      \u003C",[86,1721,842],{"class":817},[86,1723,845],{"class":813},[86,1725,1726],{"class":88,"line":880},[86,1727,808],{"emptyLinePlaceholder":807},[86,1729,1730,1733,1735],{"class":88,"line":890},[86,1731,1732],{"class":813},"        \u003C",[86,1734,854],{"class":817},[86,1736,845],{"class":813},[86,1738,1739],{"class":88,"line":900},[86,1740,808],{"emptyLinePlaceholder":807},[86,1742,1743,1746,1748,1750,1752,1755],{"class":88,"line":910},[86,1744,1745],{"class":813},"          \u003C",[86,1747,865],{"class":817},[86,1749,868],{"class":92},[86,1751,871],{"class":813},[86,1753,1754],{"class":96},"\"1.0 0.5 0.1\"",[86,1756,877],{"class":813},[86,1758,1759,1762,1764],{"class":88,"line":1043},[86,1760,1761],{"class":813},"        \u003C/",[86,1763,854],{"class":817},[86,1765,845],{"class":813},[86,1767,1768,1771,1773],{"class":88,"line":1048},[86,1769,1770],{"class":813},"      \u003C/",[86,1772,842],{"class":817},[86,1774,845],{"class":813},[86,1776,1777,1780,1782],{"class":88,"line":1065},[86,1778,1779],{"class":813},"    \u003C/",[86,1781,830],{"class":817},[86,1783,845],{"class":813},[86,1785,1786,1789,1791],{"class":88,"line":1087},[86,1787,1788],{"class":813},"  \u003C/",[86,1790,818],{"class":817},[86,1792,845],{"class":813},[647,1794,1796],{"id":1795},"xacro-tool-a-tool-for-loading-disk-files-into-ros2","  xacro tool (a tool for loading disk files into ROS2)",[15,1798,1799],{},"Search whether xacro has been installed.",[78,1801,1803],{"className":80,"code":1802,"language":82,"meta":20,"style":20},"ros2 pkg list | grep -i xacro\n",[73,1804,1805],{"__ignoreMap":20},[86,1806,1807,1809,1811,1814,1817,1820,1823],{"class":88,"line":89},[86,1808,722],{"class":92},[86,1810,725],{"class":96},[86,1812,1813],{"class":96}," list",[86,1815,1816],{"class":942}," |",[86,1818,1819],{"class":92}," grep",[86,1821,1822],{"class":734}," -i",[86,1824,1825],{"class":96}," xacro\n",[15,1827,1828],{},[18,1829],{"alt":20,"src":1830},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1405.webp",[15,1832,1833,1834,1836],{},"If ",[73,1835,765],{}," is printed, it means it is installed. If nothing is printed, it needs to be installed manually.",[78,1838,1840],{"className":80,"code":1839,"language":82,"meta":20,"style":20},"sudo apt-get update\nsudo apt-get install ros-humble-xacro\n",[73,1841,1842,1852],{"__ignoreMap":20},[86,1843,1844,1846,1849],{"class":88,"line":89},[86,1845,93],{"class":92},[86,1847,1848],{"class":96}," apt-get",[86,1850,1851],{"class":96}," update\n",[86,1853,1854,1856,1858,1860],{"class":88,"line":638},[86,1855,93],{"class":92},[86,1857,1848],{"class":96},[86,1859,100],{"class":96},[86,1861,1862],{"class":96}," ros-humble-xacro\n",[15,1864,1865],{},"Use xacro to read a file",[15,1867,1868],{},[18,1869],{"alt":20,"src":1870},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1406.webp",[15,1872,1873],{},"The content from the file was output to the terminal; we typically integrate it into a launch file. In the terminal, we can only view the content, but using a launch file allows us to bring the file into a node, meaning it gets integrated into ROS2.",[647,1875,1877],{"id":1876},"core-implementation-of-launch","  Core implementation of launch",[15,1879,1880],{},"The core implementation involves just three steps: loading the robot model, publishing the state of non-fixed joints from a node, and launching the rviz2 node.",[15,1882,1883],{},[18,1884],{"alt":20,"src":1885},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1407.webp",[15,1887,1888],{},"Creating an rviz2 node is very simple — just declare the package name and declare the executable.",[15,1890,1891],{},"Loading a robot model is relatively complex. To load a robot model, you also need to create a node.",[15,1893,1894,1895,1898],{},"Then there are parameters, and within the parameters there is a key called ",[73,1896,1897],{},"robot_description",", which corresponds to a value.",[15,1900,1901],{},"The value is a ParameterValue object. This object executes a command called xacro, followed by a Launch configuration, which is essentially the path to the URDF file.",[15,1903,1904],{},[18,1905],{"alt":20,"src":1906},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1408.webp",[15,1908,1909],{},[18,1910],{"alt":20,"src":1911},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1409.webp",[15,1913,1914],{},[18,1915],{"alt":20,"src":1916},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1410.webp",[15,1918,1919],{},[18,1920],{"alt":20,"src":1921},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1411.webp",[15,1923,1924],{},"This value is essentially the content from the URDF file, but since the content is too long, we encapsulate it into an object.",[15,1926,1927],{},[18,1928],{"alt":20,"src":1929},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1412.webp",[15,1931,1932],{},[18,1933],{"alt":20,"src":1934},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1413.webp",[15,1936,1937],{},"The command line cannot be directly used as an object parameter value, so it still needs to be encapsulated.",[15,1939,1940],{},[18,1941],{"alt":20,"src":1942},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1414.webp",[15,1944,1945],{},"Comand is specifically designed to encapsulate terminal command execution.",[15,1947,1948,1951],{},[18,1949],{"alt":20,"src":1950},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1415.webp",[18,1952],{"alt":20,"src":1953},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1416.webp",[15,1955,1956],{},"Remember to have a space after xacro, and fill in the path here.",[15,1958,1959],{},[18,1960],{"alt":20,"src":1961},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1417.webp",[15,1963,1964],{},[18,1965],{"alt":20,"src":1966},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1418.webp",[15,1968,1969,1970,1973,1974,1976],{},"We have now located the ",[73,1971,1972],{},"cpp06_urdf"," path under the share directory of ",[73,1975,1972],{},", and the returned value is the string of that path.",[15,1978,1979],{},[18,1980],{"alt":20,"src":1981},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1419.webp",[15,1983,1984],{},[18,1985],{"alt":20,"src":1986},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1420.webp",[15,1988,1989],{},[18,1990],{"alt":20,"src":1991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1421.webp",[78,1993,1995],{"className":933,"code":1994,"language":935,"meta":20,"style":20},"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",[73,1996,1997,2007,2017,2021,2026,2030,2035,2039,2044,2048,2053,2057,2062,2066,2071,2075,2080,2084,2089,2093,2098,2102,2107,2111,2116,2120,2125,2129,2134,2138,2143,2147,2152,2156,2161,2171,2175,2185,2196,2200,2228,2237,2248,2259,2273,2277,2282,2292,2303,2312,2317,2322,2331],{"__ignoreMap":20},[86,1998,1999,2001,2003,2005],{"class":88,"line":89},[86,2000,943],{"class":942},[86,2002,946],{"class":813},[86,2004,949],{"class":942},[86,2006,952],{"class":813},[86,2008,2009,2011,2013,2015],{"class":88,"line":638},[86,2010,943],{"class":942},[86,2012,959],{"class":813},[86,2014,949],{"class":942},[86,2016,964],{"class":813},[86,2018,2019],{"class":88,"line":824},[86,2020,808],{"emptyLinePlaceholder":807},[86,2022,2023],{"class":88,"line":836},[86,2024,2025],{"class":1028},"# 封装终端指令相关类\n",[86,2027,2028],{"class":88,"line":848},[86,2029,808],{"emptyLinePlaceholder":807},[86,2031,2032],{"class":88,"line":859},[86,2033,2034],{"class":1028},"# from launch.actions import ExecuteProcess\n",[86,2036,2037],{"class":88,"line":880},[86,2038,808],{"emptyLinePlaceholder":807},[86,2040,2041],{"class":88,"line":890},[86,2042,2043],{"class":1028},"# from launch.substitutions import FindExecutable\n",[86,2045,2046],{"class":88,"line":900},[86,2047,808],{"emptyLinePlaceholder":807},[86,2049,2050],{"class":88,"line":910},[86,2051,2052],{"class":1028},"# 参数声明与获取\n",[86,2054,2055],{"class":88,"line":1043},[86,2056,808],{"emptyLinePlaceholder":807},[86,2058,2059],{"class":88,"line":1048},[86,2060,2061],{"class":1028},"# from launch.actions import DeclareLaunchArgument\n",[86,2063,2064],{"class":88,"line":1065},[86,2065,808],{"emptyLinePlaceholder":807},[86,2067,2068],{"class":88,"line":1087},[86,2069,2070],{"class":1028},"# from launch.substitutions import LaunchConfiguration\n",[86,2072,2073],{"class":88,"line":1107},[86,2074,808],{"emptyLinePlaceholder":807},[86,2076,2077],{"class":88,"line":1137},[86,2078,2079],{"class":1028},"# 文件包含相关\n",[86,2081,2082],{"class":88,"line":1142},[86,2083,808],{"emptyLinePlaceholder":807},[86,2085,2086],{"class":88,"line":1148},[86,2087,2088],{"class":1028},"# from launch.actions import IncludeLaunchDescription\n",[86,2090,2091],{"class":88,"line":1153},[86,2092,808],{"emptyLinePlaceholder":807},[86,2094,2095],{"class":88,"line":1159},[86,2096,2097],{"class":1028},"# from launch.launch_description_sources import PythonLaunchDescriptionSource\n",[86,2099,2100],{"class":88,"line":1181},[86,2101,808],{"emptyLinePlaceholder":807},[86,2103,2104],{"class":88,"line":1192},[86,2105,2106],{"class":1028},"# 分组相关\n",[86,2108,2109],{"class":88,"line":1206},[86,2110,808],{"emptyLinePlaceholder":807},[86,2112,2113],{"class":88,"line":1218},[86,2114,2115],{"class":1028},"# from launch_ros.actions import PushRosNamespace\n",[86,2117,2118],{"class":88,"line":1235},[86,2119,808],{"emptyLinePlaceholder":807},[86,2121,2122],{"class":88,"line":1241},[86,2123,2124],{"class":1028},"# from launch.actions import GroupAction\n",[86,2126,2127],{"class":88,"line":1246},[86,2128,808],{"emptyLinePlaceholder":807},[86,2130,2131],{"class":88,"line":1252},[86,2132,2133],{"class":1028},"# 事件相关\n",[86,2135,2136],{"class":88,"line":1262},[86,2137,808],{"emptyLinePlaceholder":807},[86,2139,2140],{"class":88,"line":1274},[86,2141,2142],{"class":1028},"# from launch.event_handlers import OnProcessStart,OnProcessExit\n",[86,2144,2145],{"class":88,"line":1284},[86,2146,808],{"emptyLinePlaceholder":807},[86,2148,2149],{"class":88,"line":1289},[86,2150,2151],{"class":1028},"# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n",[86,2153,2154],{"class":88,"line":1294},[86,2155,808],{"emptyLinePlaceholder":807},[86,2157,2158],{"class":88,"line":1300},[86,2159,2160],{"class":1028},"# 获取功能包下share目录或路径\n",[86,2162,2163,2165,2167,2169],{"class":88,"line":1310},[86,2164,943],{"class":942},[86,2166,978],{"class":813},[86,2168,949],{"class":942},[86,2170,983],{"class":813},[86,2172,2173],{"class":88,"line":1322},[86,2174,808],{"emptyLinePlaceholder":807},[86,2176,2177,2179,2181,2183],{"class":88,"line":1332},[86,2178,943],{"class":942},[86,2180,990],{"class":813},[86,2182,949],{"class":942},[86,2184,995],{"class":813},[86,2186,2187,2189,2191,2193],{"class":88,"line":1337},[86,2188,943],{"class":942},[86,2190,1002],{"class":813},[86,2192,949],{"class":942},[86,2194,2195],{"class":813}," Command\n",[86,2197,2198],{"class":88,"line":1343},[86,2199,808],{"emptyLinePlaceholder":807},[86,2201,2202,2205,2207,2209,2211,2214,2216,2219,2222,2225],{"class":88,"line":1348},[86,2203,2204],{"class":813},"p_value ",[86,2206,871],{"class":942},[86,2208,1167],{"class":813},[86,2210,1170],{"class":96},[86,2212,2213],{"class":813},",get_package_share_directory(",[86,2215,1059],{"class":96},[86,2217,2218],{"class":813},") ",[86,2220,2221],{"class":942},"+",[86,2223,2224],{"class":96}," \"/urdf/urdf/demo01_boxrobot.urdf\"",[86,2226,2227],{"class":813},"]))\n",[86,2229,2230,2233,2235],{"class":88,"line":1357},[86,2231,2232],{"class":813},"robot_state_pub ",[86,2234,871],{"class":942},[86,2236,1189],{"class":813},[86,2238,2239,2242,2244,2246],{"class":88,"line":1363},[86,2240,2241],{"class":1118},"    package",[86,2243,871],{"class":942},[86,2245,1200],{"class":96},[86,2247,1203],{"class":813},[86,2249,2250,2253,2255,2257],{"class":88,"line":1369},[86,2251,2252],{"class":1118},"    executable",[86,2254,871],{"class":942},[86,2256,1200],{"class":96},[86,2258,1203],{"class":813},[86,2260,2261,2264,2266,2268,2270],{"class":88,"line":1375},[86,2262,2263],{"class":1118},"    parameters",[86,2265,871],{"class":942},[86,2267,1226],{"class":813},[86,2269,1229],{"class":96},[86,2271,2272],{"class":813},":p_value}]\n",[86,2274,2275],{"class":88,"line":1381},[86,2276,1062],{"class":813},[86,2278,2280],{"class":88,"line":2279},46,[86,2281,808],{"emptyLinePlaceholder":807},[86,2283,2285,2288,2290],{"class":88,"line":2284},47,[86,2286,2287],{"class":813},"rviz2 ",[86,2289,871],{"class":942},[86,2291,1189],{"class":813},[86,2293,2295,2297,2299,2301],{"class":88,"line":2294},48,[86,2296,2241],{"class":1118},[86,2298,871],{"class":942},[86,2300,1317],{"class":96},[86,2302,1203],{"class":813},[86,2304,2306,2308,2310],{"class":88,"line":2305},49,[86,2307,2252],{"class":1118},[86,2309,871],{"class":942},[86,2311,1329],{"class":96},[86,2313,2315],{"class":88,"line":2314},50,[86,2316,1238],{"class":813},[86,2318,2320],{"class":88,"line":2319},51,[86,2321,808],{"emptyLinePlaceholder":807},[86,2323,2325,2327,2329],{"class":88,"line":2324},52,[86,2326,1034],{"class":942},[86,2328,1037],{"class":92},[86,2330,1040],{"class":813},[86,2332,2334,2336],{"class":88,"line":2333},53,[86,2335,1351],{"class":942},[86,2337,2338],{"class":813}," LaunchDescription([robot_state_pub,rviz2])\n",[15,2340,2341],{},[18,2342],{"alt":20,"src":2343},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1422.webp",[15,2345,2346],{},[18,2347],{"alt":20,"src":2348},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1423.webp",[15,2350,2351],{},[18,2352],{"alt":20,"src":2353},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1424.webp",[15,2355,2356],{},[18,2357],{"alt":20,"src":2358},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1425.webp",[15,2360,2361],{},"Click Add in the lower left corner to add the RobotModel plugin.",[15,2363,2364],{},[18,2365],{"alt":20,"src":2366},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1426.webp",[15,2368,2369],{},[18,2370],{"alt":20,"src":2371},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1427.webp",[15,2373,2374,2377],{},[18,2375],{"alt":20,"src":2376},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1428.webp",[18,2378],{"alt":20,"src":2379},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1429.webp",[15,2381,2382],{},[18,2383],{"alt":20,"src":2384},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1430.webp",[15,2386,2387,2390],{},[18,2388],{"alt":20,"src":2389},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1431.webp",[18,2391],{"alt":20,"src":2392},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1432.webp",[15,2394,2395],{},"Create a new coordinate system plugin, with length along X, width along Y, and height along Z.",[647,2397,2399],{"id":2398},"launch-optimization-explanation-and-implementation","  Launch Optimization Explanation and Implementation",[15,2401,2402],{},"We still need to optimize three points: first, opening the joint node; second, setting the default configuration file for rviz2; and third, the URDF file path is hardcoded in the Launch file, so the structure needs to be improved.",[15,2404,2405],{},[18,2406],{"alt":20,"src":2407},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1433.webp",[15,2409,2410,2411,2414],{},"You also need to start this node to control joint motion. You can change it to ",[73,2412,2413],{},"joint_state_publisher_gui",", which will bring up a graphical interface.",[15,2416,2417],{},[18,2418],{"alt":20,"src":2419},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1434.webp",[15,2421,2422],{},[18,2423],{"alt":20,"src":2424},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1435.webp",[15,2426,2427],{},[18,2428],{"alt":20,"src":2429},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1436.webp",[15,2431,2432],{},[18,2433],{"alt":20,"src":2434},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1437.webp",[15,2436,2437],{},[18,2438],{"alt":20,"src":2439},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1438.webp",[15,2441,2442],{},"Save the rviz2 configuration.",[15,2444,2445],{},[18,2446],{"alt":20,"src":2447},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1439.webp",[15,2449,2450],{},"Normal command.",[78,2452,2454],{"className":80,"code":2453,"language":82,"meta":20,"style":20},"ros2 run rviz2 rviz2 -d rviz2配置的路径\n",[73,2455,2456],{"__ignoreMap":20},[86,2457,2458,2460,2463,2466,2468,2471],{"class":88,"line":89},[86,2459,722],{"class":92},[86,2461,2462],{"class":96}," run",[86,2464,2465],{"class":96}," rviz2",[86,2467,2465],{"class":96},[86,2469,2470],{"class":734}," -d",[86,2472,2473],{"class":96}," rviz2配置的路径\n",[15,2475,2476],{},[18,2477],{"alt":20,"src":2478},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1440.webp",[15,2480,2481],{},[18,2482],{"alt":20,"src":2483},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1441.webp",[15,2485,2486],{},[18,2487],{"alt":20,"src":2488},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1442.webp",[15,2490,2491,2492,2495],{},"Create a parameter called ",[73,2493,2494],{},"model"," with the value being that long string.",[15,2497,2498],{},[18,2499],{"alt":20,"src":2500},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1443.webp",[15,2502,2503],{},"LaunchConfiguration parses parameters.",[15,2505,2506],{},[18,2507],{"alt":20,"src":2508},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1444.webp",[15,2510,2511],{},"Remember to put the model at the very front; placing it at the end is not allowed. The path has now been fully encapsulated.",[15,2513,2514],{},"Now it starts normally using the default URDF path.",[15,2516,2517],{},[18,2518],{"alt":20,"src":2519},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1445.webp",[15,2521,2522,2523,2526,2527,2529],{},"Parse a non-default URDF. In the terminal, there is also something similar to ",[73,2524,2525],{},"get_package_share_directory",". The following is an example (here the parameter ",[73,2528,2494],{}," is missing an 'L'): you need to enclose the parameter value in backticks (the key between ESC and TAB).",[15,2531,2532],{},[18,2533],{"alt":20,"src":2534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1446.webp",[78,2536,2538],{"className":80,"code":2537,"language":82,"meta":20,"style":20},"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",[73,2539,2540,2554,2558],{"__ignoreMap":20},[86,2541,2542,2544,2546,2549,2552],{"class":88,"line":89},[86,2543,722],{"class":92},[86,2545,725],{"class":96},[86,2547,2548],{"class":96}," prefix",[86,2550,2551],{"class":734}," --share",[86,2553,1525],{"class":96},[86,2555,2556],{"class":88,"line":638},[86,2557,808],{"emptyLinePlaceholder":807},[86,2559,2560,2562,2564,2566,2568,2571,2574,2576,2579,2582,2585],{"class":88,"line":824},[86,2561,722],{"class":92},[86,2563,2462],{"class":96},[86,2565,1550],{"class":96},[86,2567,731],{"class":96},[86,2569,2570],{"class":96}," display.launch.py",[86,2572,2573],{"class":96}," model:=`",[86,2575,722],{"class":92},[86,2577,2578],{"class":96}," pkg prefix ",[86,2580,2581],{"class":734},"--share",[86,2583,2584],{"class":96}," cpp06_urdf`",[86,2586,2587],{"class":92},"/urdf/urdf/hahah.urdf\n",[15,2589,2590],{},[18,2591],{"alt":20,"src":2592},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1447.webp",[15,2594,2595],{},[18,2596],{"alt":20,"src":2597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1448.webp",[15,2599,2600],{},[18,2601],{"alt":20,"src":2602},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1449.webp",[78,2604,2606],{"className":933,"code":2605,"language":935,"meta":20,"style":20},"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",[73,2607,2608,2618,2628,2632,2636,2640,2644,2648,2652,2656,2660,2670,2681,2685,2689,2693,2697,2701,2705,2709,2713,2717,2721,2725,2729,2733,2737,2741,2745,2749,2753,2757,2761,2771,2775,2785,2795,2799,2833,2837,2853,2861,2871,2881,2893,2897,2901,2910,2920,2928,2932,2936,2944,2954,2965,2993,2998,3003,3012],{"__ignoreMap":20},[86,2609,2610,2612,2614,2616],{"class":88,"line":89},[86,2611,943],{"class":942},[86,2613,946],{"class":813},[86,2615,949],{"class":942},[86,2617,952],{"class":813},[86,2619,2620,2622,2624,2626],{"class":88,"line":638},[86,2621,943],{"class":942},[86,2623,959],{"class":813},[86,2625,949],{"class":942},[86,2627,964],{"class":813},[86,2629,2630],{"class":88,"line":824},[86,2631,808],{"emptyLinePlaceholder":807},[86,2633,2634],{"class":88,"line":836},[86,2635,2025],{"class":1028},[86,2637,2638],{"class":88,"line":848},[86,2639,808],{"emptyLinePlaceholder":807},[86,2641,2642],{"class":88,"line":859},[86,2643,2034],{"class":1028},[86,2645,2646],{"class":88,"line":880},[86,2647,808],{"emptyLinePlaceholder":807},[86,2649,2650],{"class":88,"line":890},[86,2651,2043],{"class":1028},[86,2653,2654],{"class":88,"line":900},[86,2655,808],{"emptyLinePlaceholder":807},[86,2657,2658],{"class":88,"line":910},[86,2659,2052],{"class":1028},[86,2661,2662,2664,2666,2668],{"class":88,"line":1043},[86,2663,943],{"class":942},[86,2665,1014],{"class":813},[86,2667,949],{"class":942},[86,2669,1019],{"class":813},[86,2671,2672,2674,2676,2678],{"class":88,"line":1048},[86,2673,943],{"class":942},[86,2675,1002],{"class":813},[86,2677,949],{"class":942},[86,2679,2680],{"class":813}," LaunchConfiguration\n",[86,2682,2683],{"class":88,"line":1065},[86,2684,808],{"emptyLinePlaceholder":807},[86,2686,2687],{"class":88,"line":1087},[86,2688,2079],{"class":1028},[86,2690,2691],{"class":88,"line":1107},[86,2692,808],{"emptyLinePlaceholder":807},[86,2694,2695],{"class":88,"line":1137},[86,2696,2088],{"class":1028},[86,2698,2699],{"class":88,"line":1142},[86,2700,808],{"emptyLinePlaceholder":807},[86,2702,2703],{"class":88,"line":1148},[86,2704,2097],{"class":1028},[86,2706,2707],{"class":88,"line":1153},[86,2708,808],{"emptyLinePlaceholder":807},[86,2710,2711],{"class":88,"line":1159},[86,2712,2106],{"class":1028},[86,2714,2715],{"class":88,"line":1181},[86,2716,808],{"emptyLinePlaceholder":807},[86,2718,2719],{"class":88,"line":1192},[86,2720,2115],{"class":1028},[86,2722,2723],{"class":88,"line":1206},[86,2724,808],{"emptyLinePlaceholder":807},[86,2726,2727],{"class":88,"line":1218},[86,2728,2124],{"class":1028},[86,2730,2731],{"class":88,"line":1235},[86,2732,808],{"emptyLinePlaceholder":807},[86,2734,2735],{"class":88,"line":1241},[86,2736,2133],{"class":1028},[86,2738,2739],{"class":88,"line":1246},[86,2740,808],{"emptyLinePlaceholder":807},[86,2742,2743],{"class":88,"line":1252},[86,2744,2142],{"class":1028},[86,2746,2747],{"class":88,"line":1262},[86,2748,808],{"emptyLinePlaceholder":807},[86,2750,2751],{"class":88,"line":1274},[86,2752,2151],{"class":1028},[86,2754,2755],{"class":88,"line":1284},[86,2756,808],{"emptyLinePlaceholder":807},[86,2758,2759],{"class":88,"line":1289},[86,2760,2160],{"class":1028},[86,2762,2763,2765,2767,2769],{"class":88,"line":1294},[86,2764,943],{"class":942},[86,2766,978],{"class":813},[86,2768,949],{"class":942},[86,2770,983],{"class":813},[86,2772,2773],{"class":88,"line":1300},[86,2774,808],{"emptyLinePlaceholder":807},[86,2776,2777,2779,2781,2783],{"class":88,"line":1310},[86,2778,943],{"class":942},[86,2780,990],{"class":813},[86,2782,949],{"class":942},[86,2784,995],{"class":813},[86,2786,2787,2789,2791,2793],{"class":88,"line":1322},[86,2788,943],{"class":942},[86,2790,1002],{"class":813},[86,2792,949],{"class":942},[86,2794,2195],{"class":813},[86,2796,2797],{"class":88,"line":1332},[86,2798,808],{"emptyLinePlaceholder":807},[86,2800,2801,2804,2806,2808,2810,2812,2814,2816,2818,2820,2823,2825,2827,2829,2831],{"class":88,"line":1337},[86,2802,2803],{"class":813},"model ",[86,2805,871],{"class":942},[86,2807,1115],{"class":813},[86,2809,1119],{"class":1118},[86,2811,871],{"class":942},[86,2813,1124],{"class":96},[86,2815,1079],{"class":813},[86,2817,1129],{"class":1118},[86,2819,871],{"class":942},[86,2821,2822],{"class":813},"get_package_share_directory(",[86,2824,1059],{"class":96},[86,2826,2218],{"class":813},[86,2828,2221],{"class":942},[86,2830,2224],{"class":96},[86,2832,1062],{"class":813},[86,2834,2835],{"class":88,"line":1343},[86,2836,808],{"emptyLinePlaceholder":807},[86,2838,2839,2841,2843,2845,2847,2849,2851],{"class":88,"line":1348},[86,2840,2204],{"class":813},[86,2842,871],{"class":942},[86,2844,1167],{"class":813},[86,2846,1170],{"class":96},[86,2848,1173],{"class":813},[86,2850,1124],{"class":96},[86,2852,1178],{"class":813},[86,2854,2855,2857,2859],{"class":88,"line":1357},[86,2856,2232],{"class":813},[86,2858,871],{"class":942},[86,2860,1189],{"class":813},[86,2862,2863,2865,2867,2869],{"class":88,"line":1363},[86,2864,2241],{"class":1118},[86,2866,871],{"class":942},[86,2868,1200],{"class":96},[86,2870,1203],{"class":813},[86,2872,2873,2875,2877,2879],{"class":88,"line":1369},[86,2874,2252],{"class":1118},[86,2876,871],{"class":942},[86,2878,1200],{"class":96},[86,2880,1203],{"class":813},[86,2882,2883,2885,2887,2889,2891],{"class":88,"line":1375},[86,2884,2263],{"class":1118},[86,2886,871],{"class":942},[86,2888,1226],{"class":813},[86,2890,1229],{"class":96},[86,2892,2272],{"class":813},[86,2894,2895],{"class":88,"line":1381},[86,2896,1062],{"class":813},[86,2898,2899],{"class":88,"line":2279},[86,2900,808],{"emptyLinePlaceholder":807},[86,2902,2903,2906,2908],{"class":88,"line":2284},[86,2904,2905],{"class":813},"joint_state_pub ",[86,2907,871],{"class":942},[86,2909,1189],{"class":813},[86,2911,2912,2914,2916,2918],{"class":88,"line":2294},[86,2913,2241],{"class":1118},[86,2915,871],{"class":942},[86,2917,1269],{"class":96},[86,2919,1203],{"class":813},[86,2921,2922,2924,2926],{"class":88,"line":2305},[86,2923,2252],{"class":1118},[86,2925,871],{"class":942},[86,2927,1281],{"class":96},[86,2929,2930],{"class":88,"line":2314},[86,2931,1238],{"class":813},[86,2933,2934],{"class":88,"line":2319},[86,2935,808],{"emptyLinePlaceholder":807},[86,2937,2938,2940,2942],{"class":88,"line":2324},[86,2939,2287],{"class":813},[86,2941,871],{"class":942},[86,2943,1189],{"class":813},[86,2945,2946,2948,2950,2952],{"class":88,"line":2333},[86,2947,2241],{"class":1118},[86,2949,871],{"class":942},[86,2951,1317],{"class":96},[86,2953,1203],{"class":813},[86,2955,2957,2959,2961,2963],{"class":88,"line":2956},54,[86,2958,2252],{"class":1118},[86,2960,871],{"class":942},[86,2962,1317],{"class":96},[86,2964,1203],{"class":813},[86,2966,2968,2971,2973,2976,2979,2981,2983,2985,2987,2990],{"class":88,"line":2967},55,[86,2969,2970],{"class":1118},"    arguments",[86,2972,871],{"class":942},[86,2974,2975],{"class":813},"[",[86,2977,2978],{"class":96},"\"-d\"",[86,2980,2213],{"class":813},[86,2982,1059],{"class":96},[86,2984,2218],{"class":813},[86,2986,2221],{"class":942},[86,2988,2989],{"class":96}," \"/rviz/urdf.rviz\"",[86,2991,2992],{"class":813},"]\n",[86,2994,2996],{"class":88,"line":2995},56,[86,2997,1238],{"class":813},[86,2999,3001],{"class":88,"line":3000},57,[86,3002,808],{"emptyLinePlaceholder":807},[86,3004,3006,3008,3010],{"class":88,"line":3005},58,[86,3007,1034],{"class":942},[86,3009,1037],{"class":92},[86,3011,1040],{"class":813},[86,3013,3015,3017],{"class":88,"line":3014},59,[86,3016,1351],{"class":942},[86,3018,3019],{"class":813}," LaunchDescription([model,robot_state_pub,joint_state_pub,rviz2])\n",[15,3021,3022],{},"Continue optimizing the final code to:",[78,3024,3026],{"className":933,"code":3025,"language":935,"meta":20,"style":20},"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",[73,3027,3028,3038,3048,3052,3056,3060,3064,3068,3072,3076,3080,3090,3100,3104,3108,3112,3116,3120,3124,3128,3132,3136,3140,3144,3148,3152,3156,3160,3164,3168,3172,3176,3180,3190,3194,3204,3214,3218,3224,3228,3241,3245,3263,3281,3285,3307,3311,3327,3335,3345,3355,3367,3371,3375,3380,3384,3389,3393,3398,3402,3408,3413,3419,3424,3430,3439,3451,3461,3466,3471,3480,3491,3502,3507,3513,3527,3532,3537,3542,3551],{"__ignoreMap":20},[86,3029,3030,3032,3034,3036],{"class":88,"line":89},[86,3031,943],{"class":942},[86,3033,946],{"class":813},[86,3035,949],{"class":942},[86,3037,952],{"class":813},[86,3039,3040,3042,3044,3046],{"class":88,"line":638},[86,3041,943],{"class":942},[86,3043,959],{"class":813},[86,3045,949],{"class":942},[86,3047,964],{"class":813},[86,3049,3050],{"class":88,"line":824},[86,3051,808],{"emptyLinePlaceholder":807},[86,3053,3054],{"class":88,"line":836},[86,3055,2025],{"class":1028},[86,3057,3058],{"class":88,"line":848},[86,3059,808],{"emptyLinePlaceholder":807},[86,3061,3062],{"class":88,"line":859},[86,3063,2034],{"class":1028},[86,3065,3066],{"class":88,"line":880},[86,3067,808],{"emptyLinePlaceholder":807},[86,3069,3070],{"class":88,"line":890},[86,3071,2043],{"class":1028},[86,3073,3074],{"class":88,"line":900},[86,3075,808],{"emptyLinePlaceholder":807},[86,3077,3078],{"class":88,"line":910},[86,3079,2052],{"class":1028},[86,3081,3082,3084,3086,3088],{"class":88,"line":1043},[86,3083,943],{"class":942},[86,3085,1014],{"class":813},[86,3087,949],{"class":942},[86,3089,1019],{"class":813},[86,3091,3092,3094,3096,3098],{"class":88,"line":1048},[86,3093,943],{"class":942},[86,3095,1002],{"class":813},[86,3097,949],{"class":942},[86,3099,2680],{"class":813},[86,3101,3102],{"class":88,"line":1065},[86,3103,808],{"emptyLinePlaceholder":807},[86,3105,3106],{"class":88,"line":1087},[86,3107,2079],{"class":1028},[86,3109,3110],{"class":88,"line":1107},[86,3111,808],{"emptyLinePlaceholder":807},[86,3113,3114],{"class":88,"line":1137},[86,3115,2088],{"class":1028},[86,3117,3118],{"class":88,"line":1142},[86,3119,808],{"emptyLinePlaceholder":807},[86,3121,3122],{"class":88,"line":1148},[86,3123,2097],{"class":1028},[86,3125,3126],{"class":88,"line":1153},[86,3127,808],{"emptyLinePlaceholder":807},[86,3129,3130],{"class":88,"line":1159},[86,3131,2106],{"class":1028},[86,3133,3134],{"class":88,"line":1181},[86,3135,808],{"emptyLinePlaceholder":807},[86,3137,3138],{"class":88,"line":1192},[86,3139,2115],{"class":1028},[86,3141,3142],{"class":88,"line":1206},[86,3143,808],{"emptyLinePlaceholder":807},[86,3145,3146],{"class":88,"line":1218},[86,3147,2124],{"class":1028},[86,3149,3150],{"class":88,"line":1235},[86,3151,808],{"emptyLinePlaceholder":807},[86,3153,3154],{"class":88,"line":1241},[86,3155,2133],{"class":1028},[86,3157,3158],{"class":88,"line":1246},[86,3159,808],{"emptyLinePlaceholder":807},[86,3161,3162],{"class":88,"line":1252},[86,3163,2142],{"class":1028},[86,3165,3166],{"class":88,"line":1262},[86,3167,808],{"emptyLinePlaceholder":807},[86,3169,3170],{"class":88,"line":1274},[86,3171,2151],{"class":1028},[86,3173,3174],{"class":88,"line":1284},[86,3175,808],{"emptyLinePlaceholder":807},[86,3177,3178],{"class":88,"line":1289},[86,3179,2160],{"class":1028},[86,3181,3182,3184,3186,3188],{"class":88,"line":1294},[86,3183,943],{"class":942},[86,3185,978],{"class":813},[86,3187,949],{"class":942},[86,3189,983],{"class":813},[86,3191,3192],{"class":88,"line":1300},[86,3193,808],{"emptyLinePlaceholder":807},[86,3195,3196,3198,3200,3202],{"class":88,"line":1310},[86,3197,943],{"class":942},[86,3199,990],{"class":813},[86,3201,949],{"class":942},[86,3203,995],{"class":813},[86,3205,3206,3208,3210,3212],{"class":88,"line":1322},[86,3207,943],{"class":942},[86,3209,1002],{"class":813},[86,3211,949],{"class":942},[86,3213,2195],{"class":813},[86,3215,3216],{"class":88,"line":1332},[86,3217,808],{"emptyLinePlaceholder":807},[86,3219,3220,3222],{"class":88,"line":1337},[86,3221,949],{"class":942},[86,3223,971],{"class":813},[86,3225,3226],{"class":88,"line":1343},[86,3227,808],{"emptyLinePlaceholder":807},[86,3229,3230,3233,3235,3237,3239],{"class":88,"line":1348},[86,3231,3232],{"class":813},"cpp06_urdf_dir ",[86,3234,871],{"class":942},[86,3236,1056],{"class":813},[86,3238,1059],{"class":96},[86,3240,1062],{"class":813},[86,3242,3243],{"class":88,"line":1357},[86,3244,808],{"emptyLinePlaceholder":807},[86,3246,3247,3250,3252,3254,3256,3258,3261],{"class":88,"line":1363},[86,3248,3249],{"class":813},"default_model_path ",[86,3251,871],{"class":942},[86,3253,1073],{"class":813},[86,3255,1076],{"class":96},[86,3257,1079],{"class":813},[86,3259,3260],{"class":96},"\"demo01_boxrobot.urdf\"",[86,3262,1062],{"class":813},[86,3264,3265,3268,3270,3272,3274,3276,3279],{"class":88,"line":1369},[86,3266,3267],{"class":813},"default_rviz_path ",[86,3269,871],{"class":942},[86,3271,1073],{"class":813},[86,3273,1097],{"class":96},[86,3275,1079],{"class":813},[86,3277,3278],{"class":96},"\"urdf.rviz\"",[86,3280,1062],{"class":813},[86,3282,3283],{"class":88,"line":1375},[86,3284,808],{"emptyLinePlaceholder":807},[86,3286,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305],{"class":88,"line":1381},[86,3288,2803],{"class":813},[86,3290,871],{"class":942},[86,3292,1115],{"class":813},[86,3294,1119],{"class":1118},[86,3296,871],{"class":942},[86,3298,1124],{"class":96},[86,3300,1079],{"class":813},[86,3302,1129],{"class":1118},[86,3304,871],{"class":942},[86,3306,1134],{"class":813},[86,3308,3309],{"class":88,"line":2279},[86,3310,808],{"emptyLinePlaceholder":807},[86,3312,3313,3315,3317,3319,3321,3323,3325],{"class":88,"line":2284},[86,3314,2204],{"class":813},[86,3316,871],{"class":942},[86,3318,1167],{"class":813},[86,3320,1170],{"class":96},[86,3322,1173],{"class":813},[86,3324,1124],{"class":96},[86,3326,1178],{"class":813},[86,3328,3329,3331,3333],{"class":88,"line":2294},[86,3330,2232],{"class":813},[86,3332,871],{"class":942},[86,3334,1189],{"class":813},[86,3336,3337,3339,3341,3343],{"class":88,"line":2305},[86,3338,2241],{"class":1118},[86,3340,871],{"class":942},[86,3342,1200],{"class":96},[86,3344,1203],{"class":813},[86,3346,3347,3349,3351,3353],{"class":88,"line":2314},[86,3348,2252],{"class":1118},[86,3350,871],{"class":942},[86,3352,1200],{"class":96},[86,3354,1203],{"class":813},[86,3356,3357,3359,3361,3363,3365],{"class":88,"line":2319},[86,3358,2263],{"class":1118},[86,3360,871],{"class":942},[86,3362,1226],{"class":813},[86,3364,1229],{"class":96},[86,3366,2272],{"class":813},[86,3368,3369],{"class":88,"line":2324},[86,3370,1062],{"class":813},[86,3372,3373],{"class":88,"line":2333},[86,3374,808],{"emptyLinePlaceholder":807},[86,3376,3377],{"class":88,"line":2956},[86,3378,3379],{"class":1028},"# 关节信息节点\n",[86,3381,3382],{"class":88,"line":2967},[86,3383,808],{"emptyLinePlaceholder":807},[86,3385,3386],{"class":88,"line":2995},[86,3387,3388],{"class":1028},"# joint_state_pub = Node(\n",[86,3390,3391],{"class":88,"line":3000},[86,3392,808],{"emptyLinePlaceholder":807},[86,3394,3395],{"class":88,"line":3005},[86,3396,3397],{"class":1028},"#     package=\"joint_state_publisher\",\n",[86,3399,3400],{"class":88,"line":3014},[86,3401,808],{"emptyLinePlaceholder":807},[86,3403,3405],{"class":88,"line":3404},60,[86,3406,3407],{"class":1028},"#     executable=\"joint_state_publisher\"\n",[86,3409,3411],{"class":88,"line":3410},61,[86,3412,808],{"emptyLinePlaceholder":807},[86,3414,3416],{"class":88,"line":3415},62,[86,3417,3418],{"class":1028},"# )\n",[86,3420,3422],{"class":88,"line":3421},63,[86,3423,808],{"emptyLinePlaceholder":807},[86,3425,3427],{"class":88,"line":3426},64,[86,3428,3429],{"class":1028},"# 关节信息节点图形界面(建议)\n",[86,3431,3433,3435,3437],{"class":88,"line":3432},65,[86,3434,2905],{"class":813},[86,3436,871],{"class":942},[86,3438,1189],{"class":813},[86,3440,3442,3444,3446,3449],{"class":88,"line":3441},66,[86,3443,2241],{"class":1118},[86,3445,871],{"class":942},[86,3447,3448],{"class":96},"\"joint_state_publisher_gui\"",[86,3450,1203],{"class":813},[86,3452,3454,3456,3458],{"class":88,"line":3453},67,[86,3455,2252],{"class":1118},[86,3457,871],{"class":942},[86,3459,3460],{"class":96},"\"joint_state_publisher_gui\"\n",[86,3462,3464],{"class":88,"line":3463},68,[86,3465,1062],{"class":813},[86,3467,3469],{"class":88,"line":3468},69,[86,3470,808],{"emptyLinePlaceholder":807},[86,3472,3474,3476,3478],{"class":88,"line":3473},70,[86,3475,2287],{"class":813},[86,3477,871],{"class":942},[86,3479,1189],{"class":813},[86,3481,3483,3485,3487,3489],{"class":88,"line":3482},71,[86,3484,2241],{"class":1118},[86,3486,871],{"class":942},[86,3488,1317],{"class":96},[86,3490,1203],{"class":813},[86,3492,3494,3496,3498,3500],{"class":88,"line":3493},72,[86,3495,2252],{"class":1118},[86,3497,871],{"class":942},[86,3499,1317],{"class":96},[86,3501,1203],{"class":813},[86,3503,3505],{"class":88,"line":3504},73,[86,3506,808],{"emptyLinePlaceholder":807},[86,3508,3510],{"class":88,"line":3509},74,[86,3511,3512],{"class":1028},"#    arguments=[\"-d\",get_package_share_directory(\"cpp06_urdf\") + \"/rviz/urdf.rviz\"]\n",[86,3514,3516,3518,3520,3522,3524],{"class":88,"line":3515},75,[86,3517,2970],{"class":1118},[86,3519,871],{"class":942},[86,3521,2975],{"class":813},[86,3523,2978],{"class":96},[86,3525,3526],{"class":813},",default_rviz_path]\n",[86,3528,3530],{"class":88,"line":3529},76,[86,3531,808],{"emptyLinePlaceholder":807},[86,3533,3535],{"class":88,"line":3534},77,[86,3536,1238],{"class":813},[86,3538,3540],{"class":88,"line":3539},78,[86,3541,808],{"emptyLinePlaceholder":807},[86,3543,3545,3547,3549],{"class":88,"line":3544},79,[86,3546,1034],{"class":942},[86,3548,1037],{"class":92},[86,3550,1040],{"class":813},[86,3552,3554,3556],{"class":88,"line":3553},80,[86,3555,1351],{"class":942},[86,3557,3019],{"class":813},[10,3559,3561],{"id":3560},"urdf-syntax","URDF syntax",[647,3563,3565],{"id":3564},"introduction","Introduction",[15,3567,3568],{},[18,3569],{"alt":20,"src":3570},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1450.webp",[647,3572,3574],{"id":3573},"robot-root-tag","robot root tag",[15,3576,3577,3580],{},[18,3578],{"alt":20,"src":3579},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1451.webp",[18,3581],{"alt":20,"src":3582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1452.webp",[15,3584,3585],{},"Segment the robot into several subsets. For example, one subset describes the head, another describes the body, and finally combine them into a complete set to form the robot.",[15,3587,3588,3589,3591,3592,3595,3596,3598],{},"Although my sub-files and main file are logically related through inclusion, they are actually separate URDF files. In the main file, the ",[73,3590,1119],{}," attribute of the ",[73,3593,3594],{},"\u003Crobot>"," tag must be specified. The sub-files do not need to include it, but if they do, the value of ",[73,3597,1119],{}," in the sub-file must match that of the main file!",[15,3600,3601,3604],{},[18,3602],{"alt":20,"src":3603},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1453.webp",[18,3605],{"alt":20,"src":3606},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1454.webp",[647,3608,3610],{"id":3609},"link-tag","link tag",[3612,3613,3565],"h5",{"id":3614},"introduction-1",[15,3616,3617],{},[18,3618],{"alt":20,"src":3619},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1455.webp",[15,3621,3622],{},"Each link is a rigid body and an independent component.",[15,3624,3625],{},"Link is assembled through joints.",[15,3627,3628],{},"The Link mainly consists of three parts: Visual, Collision, and Inertial.",[15,3630,3631],{},[18,3632],{"alt":20,"src":3633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1456.webp",[15,3635,3636],{},"Items without angle brackets are attributes; those with angle brackets are tags.",[15,3638,3639,3643],{},[107,3640,3641],{},[842,3642],{}," (optional): Used to describe the visual properties of a link. You can set the shape of the link (cube, sphere, cylinder, etc.).",[165,3645,3646,3651],{},[144,3647,3648,3650],{},[107,3649,1119],{}," (optional): Specifies the name of the link. This name maps to a coordinate frame of the same name, and the link can also be located by referencing this value.",[144,3652,3653,3657,3658],{},[107,3654,3655],{},[854,3656],{}," (required): Used to set the shape of the link, such as a cube, sphere, or cylinder.",[165,3659,3660,3671,3687,3698,3713,3733],{},[144,3661,3662,3666,3667,3670],{},[107,3663,3664],{},[865,3665],{},": A cube tag, where the side length of the cube is set via the ",[73,3668,3669],{},"size"," attribute, and the origin is its geometric center.",[144,3672,3673,3678,3679,3682,3683,3686],{},[107,3674,3675],{},[3676,3677],"cylinder",{},": Cylinder tag. Set the cylinder radius using the ",[73,3680,3681],{},"radius"," attribute, and set the cylinder height using the ",[73,3684,3685],{},"length"," attribute. The origin is at its geometric center.",[144,3688,3689,3694,3695,3697],{},[107,3690,3691],{},[3692,3693],"sphere",{},": A sphere tag that sets the sphere's radius via the ",[73,3696,3681],{}," attribute, with its origin at the geometric center.",[144,3699,3700,3705,3706,3709,3710,129],{},[107,3701,3702],{},[3703,3704],"mesh",{}," : Uses the ",[73,3707,3708],{},"filename"," attribute to reference a \"skin\" file, setting the appearance for the link. The file must be a local file. Prefix the filename with ",[73,3711,3712],{},"package://\u003Cpackagename>/\u003Cpath>",[144,3714,3715,3718,3719],{},[107,3716,3717],{},"(Optional)",": Used to set the relative offset and rotation angle of the link. If not specified, default values are used (no offset and no rotation).",[165,3720,3721,3727],{},[144,3722,3723,3726],{},[107,3724,3725],{},"xyz",": Indicates the offset in the x, y, and z dimensions (in meters). Separate different values with spaces. If not specified, the default value is used (no offset in any of the three dimensions).",[144,3728,3729,3732],{},[107,3730,3731],{},"rpy",": Represents the roll, pitch, and yaw angles (in radians). Separate different values with spaces. If not specified, the default values are used (no rotation in any of the three dimensions).",[144,3734,3735,3740,3741,3744,3745,3747,3748,129,3751],{},[107,3736,3737],{},[3738,3739],"material",{}," (optional): The material of the visual element. A ",[73,3742,3743],{},"\u003Cmaterial>"," tag can also be defined in the root ",[73,3746,3594],{}," tag, and then referenced by name in a ",[73,3749,3750],{},"\u003Clink>",[165,3752,3753,3758,3769],{},[144,3754,3755,3757],{},[107,3756,1119],{}," (optional): Specifies a name for the material, which can be used for referencing it.",[144,3759,3760,3765,3766,129],{},[107,3761,3762],{},[3763,3764],"color",{}," (optional): The color of an rgba material, composed of four numbers representing red/green/blue/alpha, each ranging from ",[86,3767,3768],{},"0, 1",[144,3770,3771,3776,3777,3779],{},[107,3772,3773],{},[3774,3775],"texture",{}," (optional): The texture of the material, which can be set via the ",[73,3778,3708],{}," attribute.",[15,3781,3782],{},"When there are multiple Visuals, you need to set a name for each Visual, so it is optional.",[15,3784,3785],{},"Collision is related to simulation. We can set a collision range for our robot's rigid bodies. As long as an obstacle enters that range, a collision occurs. Typically, the collision range is larger than the actual size.",[15,3787,3788,3793,3794],{},[107,3789,3790],{},[3791,3792],"collision",{}," (optional): The collision properties of a link. These can be the same as or different from the link's visual properties. For example, we often use simpler collision models to reduce computation time, or set values larger than the link's visual properties to help avoid collisions. Additionally, a single link can have multiple ",[3791,3795,3796],{}," tag instances, where multiple geometric shapes combine to represent the link's collision properties.",[165,3798,3799,3804,3811],{},[144,3800,3801,3803],{},[107,3802,1119],{}," (optional): Set a name for the collision.",[144,3805,3806,3810],{},[107,3807,3808],{},[854,3809],{}," (required): Please refer to the geometry usage rules in the visual tag.",[144,3812,3813,3818],{},[107,3814,3815],{},[3816,3817],"origin",{}," (optional): Please refer to the usage rules for the origin attribute in the visual tag.",[15,3820,3821],{},"Inertial is used to set the inertia matrix, which is also related to simulation. For example, when a robot brakes, it may tilt forward. If the center of mass in the inertia matrix is higher, then sudden braking could cause the robot to flip over.",[15,3823,3824,3829],{},[107,3825,3826],{},[3827,3828],"inertial",{}," (optional): Used to set the link's mass, center of mass position, and central inertia properties. If not specified, the default is mass 0 and inertia 0.",[165,3831,3832,3849,3855],{},[144,3833,3834,3836,3837],{},[107,3835,3717],{},": This pose (translation, rotation) describes the position and orientation of the link's center of mass frame C relative to the link frame L.",[165,3838,3839,3844],{},[144,3840,3841,3843],{},[107,3842,3725],{}," : indicates that the position vector from Lo (link frame origin) to Co (link's center of mass) is x L̂x + y L̂y + z L̂z, where L̂x, L̂y, L̂z are the orthonormal unit vectors of the link frame L.",[144,3845,3846,3848],{},[107,3847,3731],{},": Represents the orientation of the C-frame unit vectors Ĉx, Ĉy, Ĉz relative to the link frame L as a sequence of Euler rotations (r p y) in radians. Note: Ĉx, Ĉy, Ĉz do not need to be aligned with the link's principal axes of inertia.",[144,3850,3851,3852,3779],{},"** (Required)**: Set the quality of the link via its ",[73,3853,3854],{},"value",[144,3856,3857,3862],{},[107,3858,3859],{},[3860,3861],"inertia",{}," (required): The moments of inertia ixx, iyy, izz and the products of inertia ixy, ixz, iyz about Co (the link's center of mass) for the unit vectors Ĉx, Ĉy, Ĉz fixed in the centroidal coordinate system C.",[15,3864,3865,3867,3868,762,3871,3874],{},[107,3866,109],{}," ",[73,3869,3870],{},"\u003Ccollision>",[73,3872,3873],{},"\u003Cinertial>"," are only needed in simulation environments. If you are simply integrating URDF in rviz2, it is not necessary to define these two tags for the link.",[3612,3876,3878],{"id":3877},"use","Use",[15,3880,3881],{},[18,3882],{"alt":20,"src":3883},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1457.webp",[78,3885,3887],{"className":798,"code":3886,"language":800,"meta":20,"style":20},"\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",[73,3888,3889,3904,3908,3924,3941,3949,3963,3971,3975,3983,3987,4003,4007,4015,4019,4042,4046,4060,4068,4076],{"__ignoreMap":20},[86,3890,3891,3893,3895,3897,3899,3902],{"class":88,"line":89},[86,3892,1399],{"class":813},[86,3894,818],{"class":817},[86,3896,1682],{"class":92},[86,3898,871],{"class":813},[86,3900,3901],{"class":96},"\"link_demo\"",[86,3903,845],{"class":813},[86,3905,3906],{"class":88,"line":638},[86,3907,808],{"emptyLinePlaceholder":807},[86,3909,3910,3913,3915,3917,3919,3922],{"class":88,"line":824},[86,3911,3912],{"class":813},"  \u003C",[86,3914,3738],{"class":817},[86,3916,1682],{"class":92},[86,3918,871],{"class":813},[86,3920,3921],{"class":96},"\"yellow\"",[86,3923,845],{"class":813},[86,3925,3926,3928,3930,3933,3935,3938],{"class":88,"line":836},[86,3927,1699],{"class":813},[86,3929,3763],{"class":817},[86,3931,3932],{"class":92}," rgba",[86,3934,871],{"class":813},[86,3936,3937],{"class":96},"\"0.7 0.7 0 0.8\"",[86,3939,3940],{"class":813}," />\n",[86,3942,3943,3945,3947],{"class":88,"line":848},[86,3944,1788],{"class":813},[86,3946,3738],{"class":817},[86,3948,845],{"class":813},[86,3950,3951,3953,3955,3957,3959,3961],{"class":88,"line":859},[86,3952,3912],{"class":813},[86,3954,830],{"class":817},[86,3956,1682],{"class":92},[86,3958,871],{"class":813},[86,3960,1708],{"class":96},[86,3962,845],{"class":813},[86,3964,3965,3967,3969],{"class":88,"line":880},[86,3966,1699],{"class":813},[86,3968,842],{"class":817},[86,3970,845],{"class":813},[86,3972,3973],{"class":88,"line":890},[86,3974,808],{"emptyLinePlaceholder":807},[86,3976,3977,3979,3981],{"class":88,"line":900},[86,3978,1732],{"class":813},[86,3980,854],{"class":817},[86,3982,845],{"class":813},[86,3984,3985],{"class":88,"line":910},[86,3986,808],{"emptyLinePlaceholder":807},[86,3988,3989,3992,3994,3996,3998,4001],{"class":88,"line":1043},[86,3990,3991],{"class":813},"            \u003C",[86,3993,865],{"class":817},[86,3995,868],{"class":92},[86,3997,871],{"class":813},[86,3999,4000],{"class":96},"\"0.5 0.3 0.1\"",[86,4002,3940],{"class":813},[86,4004,4005],{"class":88,"line":1048},[86,4006,808],{"emptyLinePlaceholder":807},[86,4008,4009,4011,4013],{"class":88,"line":1065},[86,4010,1761],{"class":813},[86,4012,854],{"class":817},[86,4014,845],{"class":813},[86,4016,4017],{"class":88,"line":1087},[86,4018,808],{"emptyLinePlaceholder":807},[86,4020,4021,4023,4025,4028,4030,4033,4036,4038,4040],{"class":88,"line":1107},[86,4022,1732],{"class":813},[86,4024,3816],{"class":817},[86,4026,4027],{"class":92}," xyz",[86,4029,871],{"class":813},[86,4031,4032],{"class":96},"\"0 0 0\"",[86,4034,4035],{"class":92}," rpy",[86,4037,871],{"class":813},[86,4039,4032],{"class":96},[86,4041,3940],{"class":813},[86,4043,4044],{"class":88,"line":1137},[86,4045,808],{"emptyLinePlaceholder":807},[86,4047,4048,4050,4052,4054,4056,4058],{"class":88,"line":1142},[86,4049,1732],{"class":813},[86,4051,3738],{"class":817},[86,4053,1682],{"class":92},[86,4055,871],{"class":813},[86,4057,3921],{"class":96},[86,4059,877],{"class":813},[86,4061,4062,4064,4066],{"class":88,"line":1148},[86,4063,1779],{"class":813},[86,4065,842],{"class":817},[86,4067,845],{"class":813},[86,4069,4070,4072,4074],{"class":88,"line":1153},[86,4071,1788],{"class":813},[86,4073,830],{"class":817},[86,4075,845],{"class":813},[86,4077,4078,4081,4083],{"class":88,"line":1159},[86,4079,4080],{"class":813},"\u003C/",[86,4082,818],{"class":817},[86,4084,845],{"class":813},[15,4086,4087],{},[18,4088],{"alt":20,"src":4089},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1458.webp",[78,4091,4093],{"className":80,"code":4092,"language":82,"meta":20,"style":20},"ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo02_link.urdf\n",[73,4094,4095],{"__ignoreMap":20},[86,4096,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115],{"class":88,"line":89},[86,4098,722],{"class":92},[86,4100,1550],{"class":96},[86,4102,731],{"class":96},[86,4104,2570],{"class":96},[86,4106,2573],{"class":96},[86,4108,722],{"class":92},[86,4110,2578],{"class":96},[86,4112,2581],{"class":734},[86,4114,2584],{"class":96},[86,4116,4117],{"class":92},"/urdf/urdf/demo02_link.urdf\n",[15,4119,4120],{},[18,4121],{"alt":20,"src":4122},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1459.webp",[15,4124,4125],{},[18,4126],{"alt":20,"src":4127},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1460.webp",[15,4129,4130],{},"Rectangular solid, sphere, cylinder",[15,4132,4133],{},[18,4134],{"alt":20,"src":4135},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1461.webp",[15,4137,4138],{},[18,4139],{"alt":20,"src":4140},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1462.webp",[15,4142,4143],{},[18,4144],{"alt":20,"src":4145},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1463.webp",[15,4147,4148],{},[18,4149],{"alt":20,"src":4150},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1464.webp",[15,4152,4153,4156],{},[18,4154],{"alt":20,"src":4155},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1465.webp",[18,4157],{"alt":20,"src":4158},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1466.webp",[15,4160,4161],{},"Translation amount: X translation 1, Y and Z translation 0, rpy rotation set to 0 (the rotation angles are respectively Roll (around X), Pitch (around Y), and Yaw (around Z) in Euler angles).",[15,4163,4164,4167],{},[18,4165],{"alt":20,"src":4166},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1467.webp",[18,4168],{"alt":20,"src":4169},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1468.webp",[15,4171,4172],{},"Found that the cuboid is offset by 1 on the X axis.",[15,4174,4175,4178],{},[18,4176],{"alt":20,"src":4177},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1469.webp",[18,4179],{"alt":20,"src":4180},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1470.webp",[15,4182,4183],{},"Set the yaw angle (motion around Z) to 0.5 rad.",[15,4185,4186,4189],{},[18,4187],{"alt":20,"src":4188},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1471.webp",[18,4190],{"alt":20,"src":4191},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1472.webp",[15,4193,4194],{},"Set the Roll angle (motion around X) to 0.5 rad.",[15,4196,4197,4200],{},[18,4198],{"alt":20,"src":4199},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1473.webp",[18,4201],{"alt":20,"src":4202},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1474.webp",[15,4204,4205],{},"Set the pitch angle (rotation around Y) to 0.5 rad.",[15,4207,4208],{},[18,4209],{"alt":20,"src":4210},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1475.webp",[15,4212,4213],{},"sRGB is R, G, B, Alpha (a floating-point model, so the range is 0–1.0).",[15,4215,4216],{},[18,4217],{"alt":20,"src":4218},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1476.webp",[15,4220,4221],{},[18,4222],{"alt":20,"src":4223},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1477.webp",[15,4225,4226,4229],{},[18,4227],{"alt":20,"src":4228},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1478.webp",[18,4230],{"alt":20,"src":4231},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1479.webp",[15,4233,4234,4235],{},"If a color needs to be used multiple times, it can be encapsulated into something like a global variable, and then when referencing it in other links, simply use ",[3738,4236,4238],{"name":4237},"corresponding attribute value"," (note that this forms a closed loop).",[15,4240,4241],{},[18,4242],{"alt":20,"src":4243},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1480.webp",[78,4245,4247],{"className":798,"code":4246,"language":800,"meta":20,"style":20},"\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",[73,4248,4249,4263,4267,4281,4295,4303,4317,4325,4329,4337,4341,4356,4360,4369,4373,4393,4397,4411,4419,4427],{"__ignoreMap":20},[86,4250,4251,4253,4255,4257,4259,4261],{"class":88,"line":89},[86,4252,1399],{"class":813},[86,4254,818],{"class":817},[86,4256,1682],{"class":92},[86,4258,871],{"class":813},[86,4260,3901],{"class":96},[86,4262,845],{"class":813},[86,4264,4265],{"class":88,"line":638},[86,4266,808],{"emptyLinePlaceholder":807},[86,4268,4269,4271,4273,4275,4277,4279],{"class":88,"line":824},[86,4270,1699],{"class":813},[86,4272,3738],{"class":817},[86,4274,1682],{"class":92},[86,4276,871],{"class":813},[86,4278,3921],{"class":96},[86,4280,845],{"class":813},[86,4282,4283,4285,4287,4289,4291,4293],{"class":88,"line":836},[86,4284,1719],{"class":813},[86,4286,3763],{"class":817},[86,4288,3932],{"class":92},[86,4290,871],{"class":813},[86,4292,3937],{"class":96},[86,4294,3940],{"class":813},[86,4296,4297,4299,4301],{"class":88,"line":848},[86,4298,1779],{"class":813},[86,4300,3738],{"class":817},[86,4302,845],{"class":813},[86,4304,4305,4307,4309,4311,4313,4315],{"class":88,"line":859},[86,4306,1699],{"class":813},[86,4308,830],{"class":817},[86,4310,1682],{"class":92},[86,4312,871],{"class":813},[86,4314,1708],{"class":96},[86,4316,845],{"class":813},[86,4318,4319,4321,4323],{"class":88,"line":880},[86,4320,1719],{"class":813},[86,4322,842],{"class":817},[86,4324,845],{"class":813},[86,4326,4327],{"class":88,"line":890},[86,4328,808],{"emptyLinePlaceholder":807},[86,4330,4331,4333,4335],{"class":88,"line":900},[86,4332,1745],{"class":813},[86,4334,854],{"class":817},[86,4336,845],{"class":813},[86,4338,4339],{"class":88,"line":910},[86,4340,808],{"emptyLinePlaceholder":807},[86,4342,4343,4346,4348,4350,4352,4354],{"class":88,"line":1043},[86,4344,4345],{"class":813},"              \u003C",[86,4347,865],{"class":817},[86,4349,868],{"class":92},[86,4351,871],{"class":813},[86,4353,4000],{"class":96},[86,4355,3940],{"class":813},[86,4357,4358],{"class":88,"line":1048},[86,4359,808],{"emptyLinePlaceholder":807},[86,4361,4362,4365,4367],{"class":88,"line":1065},[86,4363,4364],{"class":813},"          \u003C/",[86,4366,854],{"class":817},[86,4368,845],{"class":813},[86,4370,4371],{"class":88,"line":1087},[86,4372,808],{"emptyLinePlaceholder":807},[86,4374,4375,4377,4379,4381,4383,4385,4387,4389,4391],{"class":88,"line":1107},[86,4376,1745],{"class":813},[86,4378,3816],{"class":817},[86,4380,4027],{"class":92},[86,4382,871],{"class":813},[86,4384,4032],{"class":96},[86,4386,4035],{"class":92},[86,4388,871],{"class":813},[86,4390,4032],{"class":96},[86,4392,3940],{"class":813},[86,4394,4395],{"class":88,"line":1137},[86,4396,808],{"emptyLinePlaceholder":807},[86,4398,4399,4401,4403,4405,4407,4409],{"class":88,"line":1142},[86,4400,1745],{"class":813},[86,4402,3738],{"class":817},[86,4404,1682],{"class":92},[86,4406,871],{"class":813},[86,4408,3921],{"class":96},[86,4410,877],{"class":813},[86,4412,4413,4415,4417],{"class":88,"line":1148},[86,4414,1770],{"class":813},[86,4416,842],{"class":817},[86,4418,845],{"class":813},[86,4420,4421,4423,4425],{"class":88,"line":1153},[86,4422,1779],{"class":813},[86,4424,830],{"class":817},[86,4426,845],{"class":813},[86,4428,4429,4431,4433],{"class":88,"line":1159},[86,4430,1788],{"class":813},[86,4432,818],{"class":817},[86,4434,845],{"class":813},[3612,4436,4438],{"id":4437},"using-supplements","Using supplements",[15,4440,4441],{},[18,4442],{"alt":20,"src":4443},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1481.webp",[15,4445,4446,4447,4449],{},"The ",[73,4448,3703],{}," tag references a skin file, typically an STL file, which can be exported from SolidWorks. Refer to the SW2URDF documentation later in this guide.",[15,4451,4452],{},"If you don’t know how to use SolidWorks, you can learn it — it only takes about two and a half days to pick up. It’s just a tool; simply being able to draw doesn’t mean much. The most important and difficult part is mechanical design. If you want to learn, you can watch the videos from the Mechanical Society’s WeChat public account of the brother club.",[15,4454,4455],{},[4456,4457,4461],"a",{"href":4458,"rel":4459},"https://mp.weixin.qq.com/mp/homepage?%5C_%5C_biz=MzI4MjkyMDgyMA==&hid=7&sn=1efc3d3cee0142970227785f767cc7c8&scene=18",[4460],"nofollow","https://mp.weixin.qq.com/mp/homepage?\\_\\_biz=MzI4MjkyMDgyMA==&hid=7&sn=1efc3d3cee0142970227785f767cc7c8&scene=18",[15,4463,4464],{},"Of course, if you don't have time to learn, you can directly use a robot that someone else has already designed. Search for \"turtlebot3\" on GitHub.",[15,4466,4467],{},[18,4468],{"alt":20,"src":4469},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1482.webp",[15,4471,4472],{},[18,4473],{"alt":20,"src":4474},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1483.webp",[15,4476,4477],{},[18,4478],{"alt":20,"src":4479},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1484.webp",[15,4481,4482,4483,4486,4487,4490,4491,4494],{},"Here are the exported models: the ",[73,4484,4485],{},"bases"," folder contains the appearance models, ",[73,4488,4489],{},"sensors"," contains the sensor models, and ",[73,4492,4493],{},"wheels"," contains the wheel models.",[15,4496,4497,4498,4500],{},"We clone the repository, making sure to clone the branch that is the ",[73,4499,722],{}," branch.",[15,4502,4503],{},[18,4504],{"alt":20,"src":4505},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1485.webp",[15,4507,4508],{},"We'll just reference one to see how it works; for real applications, you'll need to export using SolidWorks through the SW2URDF plugin.",[15,4510,4511,4512,4515,4516,4519,4520,4522],{},"Copy the ",[73,4513,4514],{},"burger_base.stl"," file from the ",[73,4517,4518],{},"meshes/bases"," directory in the project into the ",[73,4521,755],{}," directory in our workspace.",[15,4524,4525],{},[18,4526],{"alt":20,"src":4527},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1486.webp",[15,4529,4530],{},[18,4531],{"alt":20,"src":4532},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1487.webp",[15,4534,4535,4536,4539,4540,4542,4543,4546,4547,4550],{},"The filename is the skin file just mentioned. ",[73,4537,4538],{},"package://"," is the protocol name, followed by the package name, which is ",[73,4541,1972],{},". Then comes the file path under the functional package, which is ",[73,4544,4545],{},"meshes/burger_base.stl"," (which is actually the path under ",[73,4548,4549],{},"share",").",[15,4552,4553],{},[18,4554],{"alt":20,"src":4555},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1488.webp",[15,4557,4558],{},"Since it is a 3D model, when filling in the scale values, you need to enter three ratios. Just fill in 1.0 for all of them.",[15,4560,4561],{},[18,4562],{"alt":20,"src":4563},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1489.webp",[15,4565,4566],{},"Why is the displayed model so large? Because rviz2 uses meters as its unit, while STL uses millimeters — keep that in mind. In mechanical design, if no unit is specified, it's assumed to be millimeters by default. Don't arbitrarily change the units; generally, millimeters should be used. We're building robots here, so let's be professional.",[15,4568,4569],{},[18,4570],{"alt":20,"src":4571},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1490.webp",[15,4573,4574],{},[18,4575],{"alt":20,"src":4576},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1491.webp",[647,4578,4580],{"id":4579},"joint-tag","joint tag",[3612,4582,3565],{"id":4583},"introduction-2",[15,4585,4446,4586,4589],{},[73,4587,4588],{},"joint"," tag in URDF is used to describe the kinematic and dynamic properties of a robot joint, and can also specify safety limits for joint motion. Two parts of the robot (referred to as the parent link and child link) are connected in the form of a \"joint.\" Different joints have different types of motion: rotation, sliding, fixed, rotational speed, rotational angle limits, etc. For example, a wheel mounted on a base can rotate 360 degrees, while a camera might be completely fixed to the base.",[15,4591,4592],{},[18,4593],{"alt":20,"src":4594},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1492.webp",[165,4596,4597,4602],{},[144,4598,4599,4601],{},[107,4600,1119],{}," (required): Name the joint; the name must be unique.",[144,4603,4604,4607,4608],{},[107,4605,4606],{},"type"," (required): Sets the joint type. Available types are as follows:",[165,4609,4610,4613,4616,4619,4622,4625],{},[144,4611,4612],{},"continuous: A rotary joint that can rotate infinitely around a single axis.",[144,4614,4615],{},"revolute: a rotational joint, similar to continuous, but with a limited range of rotation.",[144,4617,4618],{},"prismatic: a sliding joint that moves along a single axis, with position limits.",[144,4620,4621],{},"planer: A planar joint that allows translation or rotation in orthogonal directions within a plane.",[144,4623,4624],{},"floating: floating joint, allowing translational and rotational movement.",[144,4626,4627],{},"fixed: A special joint that is fixed and does not allow movement.",[15,4629,4630],{},"Here are the child-level tags.",[165,4632,4633,4648,4663,4681,4694,4716,4738,4787,4818],{},[144,4634,4635,4640,4641],{},[107,4636,4637],{},[4638,4639],"parent",{}," (required): Specifies the parent link.",[165,4642,4643],{},[144,4644,4645,4647],{},[107,4646,830],{}," (required): The name of the parent link, which is the name of this link in the robot's structure tree.",[144,4649,4650,4655,4656],{},[107,4651,4652],{},[4653,4654],"child",{}," (required): Specifies the child link.",[165,4657,4658],{},[144,4659,4660,4662],{},[107,4661,830],{}," (required): The name of the child link, which is the name of this link in the robot's structure tree.",[144,4664,4665,4668,4669],{},[107,4666,4667],{},"(optional)",": This is the transformation from the parent link to the child link, with the joint located at the origin of the child link.",[165,4670,4671,4676],{},[144,4672,4673,4675],{},[107,4674,3725],{}," : The offsets on each axis.",[144,4677,4678,4680],{},[107,4679,3731],{},": The offset radians on each axis.",[144,4682,4683,4686,4687],{},[107,4684,4685],{},"\u003Caxis>"," (optional): If not set, the default value is (1, 0, 0).",[165,4688,4689],{},[144,4690,4691,4693],{},[107,4692,3725],{},": Used to set which joint axis the motion revolves around.",[144,4695,4696,4701,4702],{},[107,4697,4698],{},[4699,4700],"calibration",{}," (optional): The reference position of the joint, used to calibrate the absolute position of the joint.",[165,4703,4704,4710],{},[144,4705,4706,4709],{},[107,4707,4708],{},"rising"," (optional): When the joint moves in the positive direction, this reference position triggers a rising edge.",[144,4711,4712,4715],{},[107,4713,4714],{},"falling"," (optional): When the joint moves in the positive direction, this reference position triggers a falling edge.",[144,4717,4718,4723,4724],{},[107,4719,4720],{},[4721,4722],"dynamics",{}," (optional): An element that specifies the physical characteristics of a joint. These values are used to define the joint's modeling properties and are useful for simulation.",[165,4725,4726,4732],{},[144,4727,4728,4731],{},[107,4729,4730],{},"damping"," (optional): The physical damping value of the joint, defaults to 0.",[144,4733,4734,4737],{},[107,4735,4736],{},"friction"," (optional): The physical static friction value of the joint, defaults to 0.",[144,4739,4740,4745,4746,4749,4750,4753,4754],{},[107,4741,4742],{},[4743,4744],"limit",{}," (required when the joint type is ",[73,4747,4748],{},"revolute"," or ",[73,4751,4752],{},"prismatic","):",[165,4755,4756,4762,4768,4774],{},[144,4757,4758,4761],{},[107,4759,4760],{},"lower"," (optional): Specifies the lower limit of the joint (in radians for revolute joints, in meters for prismatic joints). Omitted if the joint is continuous.",[144,4763,4764,4767],{},[107,4765,4766],{},"upper"," (optional): Attribute specifying the upper limit of the joint (in radians for revolute joints, in meters for prismatic joints). Omitted if the joint is continuous.",[144,4769,4770,4773],{},[107,4771,4772],{},"effort"," (required): Specifies the maximum force a joint can withstand.",[144,4775,4776,4779,4780,4783,4784,4550],{},[107,4777,4778],{},"velocity"," (required): Used to set the maximum joint velocity (for revolute joints in radians per second ",[86,4781,4782],{},"rad/s",", for prismatic joints in meters per second ",[86,4785,4786],{},"m/s",[144,4788,4789,4794,4795,129,4799],{},[107,4790,4791],{},[4792,4793],"mimic",{}," (optional): This tag is used to specify that the defined joint mimics another existing joint. The value of this joint can be calculated as ",[4796,4797,4798],"em",{},"value = multiplier * other_joint_value + offset",[165,4800,4801,4806,4812],{},[144,4802,4803,4805],{},[107,4804,4588],{}," (required): Specifies the name of the joint to simulate.",[144,4807,4808,4811],{},[107,4809,4810],{},"multiplier"," (optional): Specifies the multiplication factor in the formula above.",[144,4813,4814,4817],{},[107,4815,4816],{},"offset"," (optional): Specifies the offset to be added to the above formula, defaulting to 0 (in radians for revolute joints and meters for prismatic joints).",[144,4819,4820,4823,4824],{},[107,4821,4822],{},"\u003Csafety_controller>"," (optional): Safety controller.",[165,4825,4826,4832,4838,4844],{},[144,4827,4828,4831],{},[107,4829,4830],{},"soft_lower_limit"," (optional): Specifies the lower joint boundary at which the safety controller begins to limit the joint position. This limit must be greater than the joint's lower limit.",[144,4833,4834,4837],{},[107,4835,4836],{},"soft_upper_limit"," (optional): Specifies the attribute of the joint's upper boundary where the safety controller begins to limit the joint position. This limit must be less than the joint's upper limit.",[144,4839,4840,4843],{},[107,4841,4842],{},"k_position"," (optional): Specifies the relationship between position and velocity limits.",[144,4845,4846,4849],{},[107,4847,4848],{},"k_velocity"," (required): Specifies the relationship between force and velocity limits.",[15,4851,4852],{},[18,4853],{"alt":20,"src":4854},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1493.webp",[15,4856,4857],{},"The joint name is required and must be unique.",[15,4859,4860],{},[18,4861],{"alt":20,"src":4862},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1494.webp",[15,4864,4865],{},"The most commonly used joints are the revolute type with limited range, the continuous type that can rotate indefinitely, and the fixed type. Fill this in based on the specific joint type.",[15,4867,4868],{},"A revolute joint is typically used for the joints of an industrial robotic arm, a continuous joint is used for structures like a steering wheel joint, and a fixed joint is used for structural joints that cannot move.",[15,4870,4871],{},[18,4872],{"alt":20,"src":4873},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1495.webp",[15,4875,4876],{},"There are many subset tags, but we only use a few of the most common ones. Just remember the commonly used ones.",[15,4878,4879],{},[18,4880],{"alt":20,"src":4881},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1496.webp",[15,4883,4446,4884,4886,4887,4889],{},[73,4885,4638],{}," tag, with the ",[73,4888,830],{}," attribute specifying the name of the parent link.",[15,4891,4892],{},[18,4893],{"alt":20,"src":4894},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1497.webp",[15,4896,4446,4897,4899],{},[73,4898,4653],{}," tag is similar.",[15,4901,4902],{},[18,4903],{"alt":20,"src":4904},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1498.webp",[15,4906,4907],{},[18,4908],{"alt":20,"src":4909},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1499.webp",[15,4911,4912],{},"This axis defaults to 1, 0, 0, rotating around the X-axis, but it usually needs to be configured. You can set a reference axis through SolidWorks.",[15,4914,4915,4916,4918,4919,4921,4922,4924,4925,129],{},"The remaining tags are all related to joint types, such as ",[73,4917,4743],{},". If the joint type is ",[73,4920,4748],{}," and no ",[73,4923,4743],{}," is set, then the joint angle cannot be adjusted in ",[73,4926,2413],{},[15,4928,4929],{},[18,4930],{"alt":20,"src":4931},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1500.webp",[15,4933,4934],{},"Other tags will be introduced when they are used.",[3612,4936,4938],{"id":4937},"practice","Practice",[15,4940,4941],{},[18,4942],{"alt":20,"src":4943},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1501.webp",[15,4945,4946],{},"First implement the two joints individually, then connect them through the joint.",[15,4948,4949],{},[18,4950],{"alt":20,"src":4951},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1502.webp",[15,4953,4954],{},[18,4955],{"alt":20,"src":4956},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1503.webp",[15,4958,4959],{},[18,4960],{"alt":20,"src":4961},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1504.webp",[15,4963,4964],{},[18,4965],{"alt":20,"src":4966},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1505.webp",[15,4968,4969],{},[18,4970],{"alt":20,"src":4971},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1506.webp",[15,4973,4974],{},[18,4975],{"alt":20,"src":4976},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1507.webp",[15,4978,4979],{},[18,4980],{"alt":20,"src":4981},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1508.webp",[15,4983,4984],{},"If it's yellow, there should be more red and green.",[15,4986,4987],{},[18,4988],{"alt":20,"src":4989},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1509.webp",[15,4991,4992],{},"This is red.",[15,4994,4995],{},[18,4996],{"alt":20,"src":4997},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1510.webp",[15,4999,5000],{},"The chassis Link has been created.",[15,5002,5003],{},[18,5004],{"alt":20,"src":5005},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1511.webp",[15,5007,5008],{},"The camera link has also been created.",[15,5010,5011],{},[18,5012],{"alt":20,"src":5013},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1512.webp",[15,5015,5016,5017,5020,5021,5024],{},"Set the joint name to ",[73,5018,5019],{},"camera2base_link",", which is the joint connecting the camera to the base. Then set the type to ",[73,5022,5023],{},"continuous",", allowing 360-degree rotation.",[15,5026,5027],{},[18,5028],{"alt":20,"src":5029},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1513.webp",[15,5031,5032],{},"Fill in the child link and parent link.",[15,5034,5035],{},[18,5036],{"alt":20,"src":5037},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1514.webp",[15,5039,5040],{},"This way, the two Links are connected together through this Joint.",[15,5042,5043],{},[18,5044],{"alt":20,"src":5045},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1515.webp",[15,5047,5048],{},"We still need to configure these two options, but let's not set them for now. First, let's see what the default state is.",[78,5050,5052],{"className":80,"code":5051,"language":82,"meta":20,"style":20},"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",[73,5053,5054,5064,5070],{"__ignoreMap":20},[86,5055,5056,5058,5060,5062],{"class":88,"line":89},[86,5057,1516],{"class":92},[86,5059,1519],{"class":96},[86,5061,1522],{"class":734},[86,5063,1525],{"class":96},[86,5065,5066,5068],{"class":88,"line":638},[86,5067,1540],{"class":734},[86,5069,1543],{"class":96},[86,5071,5072,5074,5076,5078,5080,5082,5084,5086,5088,5090],{"class":88,"line":824},[86,5073,722],{"class":92},[86,5075,1550],{"class":96},[86,5077,731],{"class":96},[86,5079,2570],{"class":96},[86,5081,2573],{"class":96},[86,5083,722],{"class":92},[86,5085,2578],{"class":96},[86,5087,2581],{"class":734},[86,5089,2584],{"class":96},[86,5091,5092],{"class":92},"/urdf/urdf/demo03_joint.urdf\n",[15,5094,5095],{},[18,5096],{"alt":20,"src":5097},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1516.webp",[15,5099,5100],{},[18,5101],{"alt":20,"src":5102},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1517.webp",[15,5104,5105],{},"You can open TF to check the coordinate frames, check Show Names, and you'll find they overlap. So the display doesn't match our logical business logic (in the default state). Therefore, you need to set an offset.",[15,5107,5108],{},[18,5109],{"alt":20,"src":5110},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1518.webp",[15,5112,5113],{},"If we want to move the camera to the front of the car, as shown in the diagram, there is an offset in X, none in Y, but there is in Z. There is no offset in roll, pitch, or yaw.",[15,5115,5116],{},[18,5117],{"alt":20,"src":5118},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1519.webp",[15,5120,5121,5124],{},[18,5122],{"alt":20,"src":5123},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1520.webp",[18,5125],{"alt":20,"src":5126},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1521.webp",[15,5128,5129],{},"The height of Z is 1/2 of the chassis height plus 1/2 of the camera height.",[15,5131,5132],{},[18,5133],{"alt":20,"src":5134},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1522.webp",[15,5136,5137],{},[18,5138],{"alt":20,"src":5139},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1523.webp",[15,5141,5142],{},[18,5143],{"alt":20,"src":5144},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1524.webp",[15,5146,5147],{},"We're going to rotate around Yaw, which means rotating around the Z-axis, i.e., (0, 0, 1). Note that it must be an integer, not a floating-point number.",[15,5149,5150],{},[18,5151],{"alt":20,"src":5152},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1525.webp",[15,5154,5155,5156,5158],{},"To check if rotation is possible, open ",[73,5157,2413],{},". You can open it from the launch file or directly from the terminal.",[15,5160,5161,5164],{},[18,5162],{"alt":20,"src":5163},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1526.webp",[18,5165],{"alt":20,"src":5166},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1527.webp",[78,5168,5170],{"className":80,"code":5169,"language":82,"meta":20,"style":20},"ros2 run joint_state_publisher_gui joint_state_publisher_gui\n",[73,5171,5172],{"__ignoreMap":20},[86,5173,5174,5176,5178,5181],{"class":88,"line":89},[86,5175,722],{"class":92},[86,5177,2462],{"class":96},[86,5179,5180],{"class":96}," joint_state_publisher_gui",[86,5182,5183],{"class":96}," joint_state_publisher_gui\n",[15,5185,5186],{},[18,5187],{"alt":20,"src":5188},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1528.webp",[15,5190,5191],{},[18,5192],{"alt":20,"src":5193},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1529.webp",[15,5195,5196],{},"Drag the scrollbar to change the camera's Yaw.",[15,5198,5199],{},[18,5200],{"alt":20,"src":5201},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1530.webp",[15,5203,5204],{},"Randomize means random number, Center means return to center (reset).",[78,5206,5208],{"className":798,"code":5207,"language":800,"meta":20,"style":20},"\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",[73,5209,5210,5214,5229,5233,5247,5261,5269,5284,5299,5307,5321,5329,5333,5341,5355,5363,5383,5397,5405,5413,5417,5432,5440,5448,5463,5471,5491,5505,5513,5521,5525,5548,5563,5577,5581,5602,5618,5626,5630],{"__ignoreMap":20},[86,5211,5212],{"class":88,"line":89},[86,5213,808],{"emptyLinePlaceholder":807},[86,5215,5216,5218,5220,5222,5224,5227],{"class":88,"line":638},[86,5217,814],{"class":813},[86,5219,818],{"class":817},[86,5221,1682],{"class":92},[86,5223,871],{"class":813},[86,5225,5226],{"class":96},"\"joint_demo\"",[86,5228,845],{"class":813},[86,5230,5231],{"class":88,"line":824},[86,5232,808],{"emptyLinePlaceholder":807},[86,5234,5235,5237,5239,5241,5243,5245],{"class":88,"line":836},[86,5236,3912],{"class":813},[86,5238,3738],{"class":817},[86,5240,1682],{"class":92},[86,5242,871],{"class":813},[86,5244,3921],{"class":96},[86,5246,845],{"class":813},[86,5248,5249,5251,5253,5255,5257,5259],{"class":88,"line":848},[86,5250,1699],{"class":813},[86,5252,3763],{"class":817},[86,5254,3932],{"class":92},[86,5256,871],{"class":813},[86,5258,3937],{"class":96},[86,5260,3940],{"class":813},[86,5262,5263,5265,5267],{"class":88,"line":859},[86,5264,1788],{"class":813},[86,5266,3738],{"class":817},[86,5268,845],{"class":813},[86,5270,5271,5273,5275,5277,5279,5282],{"class":88,"line":880},[86,5272,3912],{"class":813},[86,5274,3738],{"class":817},[86,5276,1682],{"class":92},[86,5278,871],{"class":813},[86,5280,5281],{"class":96},"\"red\"",[86,5283,845],{"class":813},[86,5285,5286,5288,5290,5292,5294,5297],{"class":88,"line":890},[86,5287,1699],{"class":813},[86,5289,3763],{"class":817},[86,5291,3932],{"class":92},[86,5293,871],{"class":813},[86,5295,5296],{"class":96},"\"0.8 0.1 0.1 0.8\"",[86,5298,3940],{"class":813},[86,5300,5301,5303,5305],{"class":88,"line":900},[86,5302,1788],{"class":813},[86,5304,3738],{"class":817},[86,5306,845],{"class":813},[86,5308,5309,5311,5313,5315,5317,5319],{"class":88,"line":910},[86,5310,3912],{"class":813},[86,5312,830],{"class":817},[86,5314,1682],{"class":92},[86,5316,871],{"class":813},[86,5318,1708],{"class":96},[86,5320,845],{"class":813},[86,5322,5323,5325,5327],{"class":88,"line":1043},[86,5324,1699],{"class":813},[86,5326,842],{"class":817},[86,5328,845],{"class":813},[86,5330,5331],{"class":88,"line":1048},[86,5332,808],{"emptyLinePlaceholder":807},[86,5334,5335,5337,5339],{"class":88,"line":1065},[86,5336,1732],{"class":813},[86,5338,854],{"class":817},[86,5340,845],{"class":813},[86,5342,5343,5345,5347,5349,5351,5353],{"class":88,"line":1087},[86,5344,3991],{"class":813},[86,5346,865],{"class":817},[86,5348,868],{"class":92},[86,5350,871],{"class":813},[86,5352,4000],{"class":96},[86,5354,3940],{"class":813},[86,5356,5357,5359,5361],{"class":88,"line":1107},[86,5358,1761],{"class":813},[86,5360,854],{"class":817},[86,5362,845],{"class":813},[86,5364,5365,5367,5369,5371,5373,5375,5377,5379,5381],{"class":88,"line":1137},[86,5366,1732],{"class":813},[86,5368,3816],{"class":817},[86,5370,4027],{"class":92},[86,5372,871],{"class":813},[86,5374,4032],{"class":96},[86,5376,4035],{"class":92},[86,5378,871],{"class":813},[86,5380,4032],{"class":96},[86,5382,3940],{"class":813},[86,5384,5385,5387,5389,5391,5393,5395],{"class":88,"line":1142},[86,5386,1732],{"class":813},[86,5388,3738],{"class":817},[86,5390,1682],{"class":92},[86,5392,871],{"class":813},[86,5394,3921],{"class":96},[86,5396,877],{"class":813},[86,5398,5399,5401,5403],{"class":88,"line":1148},[86,5400,1779],{"class":813},[86,5402,842],{"class":817},[86,5404,845],{"class":813},[86,5406,5407,5409,5411],{"class":88,"line":1153},[86,5408,1788],{"class":813},[86,5410,830],{"class":817},[86,5412,845],{"class":813},[86,5414,5415],{"class":88,"line":1159},[86,5416,808],{"emptyLinePlaceholder":807},[86,5418,5419,5421,5423,5425,5427,5430],{"class":88,"line":1181},[86,5420,3912],{"class":813},[86,5422,830],{"class":817},[86,5424,1682],{"class":92},[86,5426,871],{"class":813},[86,5428,5429],{"class":96},"\"camera\"",[86,5431,845],{"class":813},[86,5433,5434,5436,5438],{"class":88,"line":1192},[86,5435,1719],{"class":813},[86,5437,842],{"class":817},[86,5439,845],{"class":813},[86,5441,5442,5444,5446],{"class":88,"line":1206},[86,5443,1745],{"class":813},[86,5445,854],{"class":817},[86,5447,845],{"class":813},[86,5449,5450,5452,5454,5456,5458,5461],{"class":88,"line":1218},[86,5451,4345],{"class":813},[86,5453,865],{"class":817},[86,5455,868],{"class":92},[86,5457,871],{"class":813},[86,5459,5460],{"class":96},"\"0.02 0.05 0.05\"",[86,5462,3940],{"class":813},[86,5464,5465,5467,5469],{"class":88,"line":1235},[86,5466,4364],{"class":813},[86,5468,854],{"class":817},[86,5470,845],{"class":813},[86,5472,5473,5475,5477,5479,5481,5483,5485,5487,5489],{"class":88,"line":1241},[86,5474,1745],{"class":813},[86,5476,3816],{"class":817},[86,5478,4027],{"class":92},[86,5480,871],{"class":813},[86,5482,4032],{"class":96},[86,5484,4035],{"class":92},[86,5486,871],{"class":813},[86,5488,4032],{"class":96},[86,5490,3940],{"class":813},[86,5492,5493,5495,5497,5499,5501,5503],{"class":88,"line":1246},[86,5494,1745],{"class":813},[86,5496,3738],{"class":817},[86,5498,1682],{"class":92},[86,5500,871],{"class":813},[86,5502,5281],{"class":96},[86,5504,3940],{"class":813},[86,5506,5507,5509,5511],{"class":88,"line":1252},[86,5508,1770],{"class":813},[86,5510,842],{"class":817},[86,5512,845],{"class":813},[86,5514,5515,5517,5519],{"class":88,"line":1262},[86,5516,1788],{"class":813},[86,5518,830],{"class":817},[86,5520,845],{"class":813},[86,5522,5523],{"class":88,"line":1274},[86,5524,808],{"emptyLinePlaceholder":807},[86,5526,5527,5529,5531,5533,5535,5538,5541,5543,5546],{"class":88,"line":1284},[86,5528,3912],{"class":813},[86,5530,4588],{"class":817},[86,5532,1682],{"class":92},[86,5534,871],{"class":813},[86,5536,5537],{"class":96},"\"camera2baselink\"",[86,5539,5540],{"class":92}," type",[86,5542,871],{"class":813},[86,5544,5545],{"class":96},"\"continuous\"",[86,5547,845],{"class":813},[86,5549,5550,5552,5554,5557,5559,5561],{"class":88,"line":1289},[86,5551,1719],{"class":813},[86,5553,4638],{"class":817},[86,5555,5556],{"class":92}," link",[86,5558,871],{"class":813},[86,5560,1708],{"class":96},[86,5562,877],{"class":813},[86,5564,5565,5567,5569,5571,5573,5575],{"class":88,"line":1294},[86,5566,1719],{"class":813},[86,5568,4653],{"class":817},[86,5570,5556],{"class":92},[86,5572,871],{"class":813},[86,5574,5429],{"class":96},[86,5576,3940],{"class":813},[86,5578,5579],{"class":88,"line":1300},[86,5580,808],{"emptyLinePlaceholder":807},[86,5582,5583,5585,5587,5589,5591,5594,5596,5598,5600],{"class":88,"line":1310},[86,5584,1719],{"class":813},[86,5586,3816],{"class":817},[86,5588,4027],{"class":92},[86,5590,871],{"class":813},[86,5592,5593],{"class":96},"\"0.2 0 0.075\"",[86,5595,4035],{"class":92},[86,5597,871],{"class":813},[86,5599,4032],{"class":96},[86,5601,3940],{"class":813},[86,5603,5604,5606,5609,5611,5613,5616],{"class":88,"line":1322},[86,5605,1719],{"class":813},[86,5607,5608],{"class":817},"axis",[86,5610,4027],{"class":92},[86,5612,871],{"class":813},[86,5614,5615],{"class":96},"\"0 0 1\"",[86,5617,3940],{"class":813},[86,5619,5620,5622,5624],{"class":88,"line":1332},[86,5621,1788],{"class":813},[86,5623,4588],{"class":817},[86,5625,845],{"class":813},[86,5627,5628],{"class":88,"line":1337},[86,5629,808],{"emptyLinePlaceholder":807},[86,5631,5632,5634,5636],{"class":88,"line":1343},[86,5633,4080],{"class":813},[86,5635,818],{"class":817},[86,5637,845],{"class":813},[3612,5639,5640],{"id":5640},"joint_state_publisher",[15,5642,5643],{},"bug: Yaw is unstable and keeps returning to center.",[15,5645,5646],{},[18,5647],{"alt":20,"src":5648},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1531.webp",[15,5650,5651,5654],{},[18,5652],{"alt":20,"src":5653},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1532.webp",[18,5655],{"alt":20,"src":5656},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1533.webp",[15,5658,5659],{},"Actually, it's because the one launched in the launch file conflicts with the one started in the terminal.",[15,5661,5662],{},"Solution: Start only one of them.",[15,5664,5665],{},[18,5666],{"alt":20,"src":5667},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1534.webp",[15,5669,5670],{},"Solution: Directly launch the GUI version in Launch to resolve this. (But not recommended.)",[15,5672,5673],{},"Suggested approach: Use the non-GUI version, because in the future, we will control the joints programmatically, not via GUI.",[15,5675,5676],{},[18,5677],{"alt":20,"src":5678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1535.webp",[15,5680,5681],{},"If you just want to display the model, use the GUI.",[15,5683,5684],{},"If you want to control it with a program, use the standard version.",[3612,5686,5687],{"id":5687},"base_footprint",[15,5689,5690],{},"bug: robot chassis partially submerged underground",[15,5692,5693],{},[18,5694],{"alt":20,"src":5695},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1536.webp",[15,5697,5698],{},[18,5699],{"alt":20,"src":5700},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1537.webp",[15,5702,5703],{},[18,5704],{"alt":20,"src":5705},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1538.webp",[15,5707,5708],{},[18,5709],{"alt":20,"src":5710},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1539.webp",[78,5712,5714],{"className":798,"code":5713,"language":800,"meta":20,"style":20},"  \u003Clink name=\"base_footprint\">\n    \u003Cvisual>\n      \u003Cgeometry>\n          \u003Csphere radius=\"0.001\"/>\n      \u003C/geometry>\n    \u003C/visual>\n  \u003C/link>\n",[73,5715,5716,5731,5739,5747,5763,5771,5779],{"__ignoreMap":20},[86,5717,5718,5720,5722,5724,5726,5729],{"class":88,"line":89},[86,5719,3912],{"class":813},[86,5721,830],{"class":817},[86,5723,1682],{"class":92},[86,5725,871],{"class":813},[86,5727,5728],{"class":96},"\"base_footprint\"",[86,5730,845],{"class":813},[86,5732,5733,5735,5737],{"class":88,"line":638},[86,5734,1699],{"class":813},[86,5736,842],{"class":817},[86,5738,845],{"class":813},[86,5740,5741,5743,5745],{"class":88,"line":824},[86,5742,1719],{"class":813},[86,5744,854],{"class":817},[86,5746,845],{"class":813},[86,5748,5749,5751,5753,5756,5758,5761],{"class":88,"line":836},[86,5750,1745],{"class":813},[86,5752,3692],{"class":817},[86,5754,5755],{"class":92}," radius",[86,5757,871],{"class":813},[86,5759,5760],{"class":96},"\"0.001\"",[86,5762,877],{"class":813},[86,5764,5765,5767,5769],{"class":88,"line":848},[86,5766,1770],{"class":813},[86,5768,854],{"class":817},[86,5770,845],{"class":813},[86,5772,5773,5775,5777],{"class":88,"line":859},[86,5774,1779],{"class":813},[86,5776,842],{"class":817},[86,5778,845],{"class":813},[86,5780,5781,5783,5785],{"class":88,"line":880},[86,5782,1788],{"class":813},[86,5784,830],{"class":817},[86,5786,845],{"class":813},[78,5788,5790],{"className":798,"code":5789,"language":800,"meta":20,"style":20},"    \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",[73,5791,5792,5814,5828,5842,5857],{"__ignoreMap":20},[86,5793,5794,5796,5798,5800,5802,5805,5807,5809,5812],{"class":88,"line":89},[86,5795,1699],{"class":813},[86,5797,4588],{"class":817},[86,5799,1682],{"class":92},[86,5801,871],{"class":813},[86,5803,5804],{"class":96},"\"baselink2basefootprint\"",[86,5806,5540],{"class":92},[86,5808,871],{"class":813},[86,5810,5811],{"class":96},"\"fixed\"",[86,5813,845],{"class":813},[86,5815,5816,5818,5820,5822,5824,5826],{"class":88,"line":638},[86,5817,1719],{"class":813},[86,5819,4638],{"class":817},[86,5821,5556],{"class":92},[86,5823,871],{"class":813},[86,5825,5728],{"class":96},[86,5827,877],{"class":813},[86,5829,5830,5832,5834,5836,5838,5840],{"class":88,"line":824},[86,5831,1719],{"class":813},[86,5833,4653],{"class":817},[86,5835,5556],{"class":92},[86,5837,871],{"class":813},[86,5839,1708],{"class":96},[86,5841,877],{"class":813},[86,5843,5844,5846,5848,5850,5852,5855],{"class":88,"line":836},[86,5845,1719],{"class":813},[86,5847,3816],{"class":817},[86,5849,4027],{"class":92},[86,5851,871],{"class":813},[86,5853,5854],{"class":96},"\"0.0 0.0 0.05\"",[86,5856,877],{"class":813},[86,5858,5859,5861,5863],{"class":88,"line":848},[86,5860,1779],{"class":813},[86,5862,4588],{"class":817},[86,5864,845],{"class":813},[15,5866,5867],{},"The Z offset should be filled with the distance the chassis sinks, which is half of the entire vehicle chassis.",[15,5869,5870,5873],{},[18,5871],{"alt":20,"src":5872},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1540.webp",[18,5874],{"alt":20,"src":5875},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1541.webp",[15,5877,5878],{},"Modify the reference coordinate system",[15,5880,5881],{},"Actually, this optimization is optional and won't make much difference. However, it is recommended to use the version with basefootprint.",[78,5883,5885],{"className":798,"code":5884,"language":800,"meta":20,"style":20},"\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",[73,5886,5887,5891,5906,5910,5924,5938,5946,5960,5974,5982,5986,6000,6008,6016,6030,6038,6046,6054,6058,6072,6080,6084,6092,6106,6114,6134,6148,6156,6164,6168,6188,6202,6216,6230,6238,6242,6256,6264,6272,6286,6294,6314,6328,6336,6344,6348,6368,6382,6396,6400,6420,6434,6442,6446],{"__ignoreMap":20},[86,5888,5889],{"class":88,"line":89},[86,5890,808],{"emptyLinePlaceholder":807},[86,5892,5893,5895,5897,5899,5901,5904],{"class":88,"line":638},[86,5894,814],{"class":813},[86,5896,818],{"class":817},[86,5898,1682],{"class":92},[86,5900,871],{"class":813},[86,5902,5903],{"class":96},"\"base_footprint_demo\"",[86,5905,845],{"class":813},[86,5907,5908],{"class":88,"line":824},[86,5909,808],{"emptyLinePlaceholder":807},[86,5911,5912,5914,5916,5918,5920,5922],{"class":88,"line":836},[86,5913,3912],{"class":813},[86,5915,3738],{"class":817},[86,5917,1682],{"class":92},[86,5919,871],{"class":813},[86,5921,3921],{"class":96},[86,5923,845],{"class":813},[86,5925,5926,5928,5930,5932,5934,5936],{"class":88,"line":848},[86,5927,1699],{"class":813},[86,5929,3763],{"class":817},[86,5931,3932],{"class":92},[86,5933,871],{"class":813},[86,5935,3937],{"class":96},[86,5937,3940],{"class":813},[86,5939,5940,5942,5944],{"class":88,"line":859},[86,5941,1788],{"class":813},[86,5943,3738],{"class":817},[86,5945,845],{"class":813},[86,5947,5948,5950,5952,5954,5956,5958],{"class":88,"line":880},[86,5949,3912],{"class":813},[86,5951,3738],{"class":817},[86,5953,1682],{"class":92},[86,5955,871],{"class":813},[86,5957,5281],{"class":96},[86,5959,845],{"class":813},[86,5961,5962,5964,5966,5968,5970,5972],{"class":88,"line":890},[86,5963,1699],{"class":813},[86,5965,3763],{"class":817},[86,5967,3932],{"class":92},[86,5969,871],{"class":813},[86,5971,5296],{"class":96},[86,5973,3940],{"class":813},[86,5975,5976,5978,5980],{"class":88,"line":900},[86,5977,1788],{"class":813},[86,5979,3738],{"class":817},[86,5981,845],{"class":813},[86,5983,5984],{"class":88,"line":910},[86,5985,808],{"emptyLinePlaceholder":807},[86,5987,5988,5990,5992,5994,5996,5998],{"class":88,"line":1043},[86,5989,3912],{"class":813},[86,5991,830],{"class":817},[86,5993,1682],{"class":92},[86,5995,871],{"class":813},[86,5997,5728],{"class":96},[86,5999,845],{"class":813},[86,6001,6002,6004,6006],{"class":88,"line":1048},[86,6003,1699],{"class":813},[86,6005,842],{"class":817},[86,6007,845],{"class":813},[86,6009,6010,6012,6014],{"class":88,"line":1065},[86,6011,1719],{"class":813},[86,6013,854],{"class":817},[86,6015,845],{"class":813},[86,6017,6018,6020,6022,6024,6026,6028],{"class":88,"line":1087},[86,6019,1745],{"class":813},[86,6021,3692],{"class":817},[86,6023,5755],{"class":92},[86,6025,871],{"class":813},[86,6027,5760],{"class":96},[86,6029,877],{"class":813},[86,6031,6032,6034,6036],{"class":88,"line":1107},[86,6033,1770],{"class":813},[86,6035,854],{"class":817},[86,6037,845],{"class":813},[86,6039,6040,6042,6044],{"class":88,"line":1137},[86,6041,1779],{"class":813},[86,6043,842],{"class":817},[86,6045,845],{"class":813},[86,6047,6048,6050,6052],{"class":88,"line":1142},[86,6049,1788],{"class":813},[86,6051,830],{"class":817},[86,6053,845],{"class":813},[86,6055,6056],{"class":88,"line":1148},[86,6057,808],{"emptyLinePlaceholder":807},[86,6059,6060,6062,6064,6066,6068,6070],{"class":88,"line":1153},[86,6061,3912],{"class":813},[86,6063,830],{"class":817},[86,6065,1682],{"class":92},[86,6067,871],{"class":813},[86,6069,1708],{"class":96},[86,6071,845],{"class":813},[86,6073,6074,6076,6078],{"class":88,"line":1159},[86,6075,1699],{"class":813},[86,6077,842],{"class":817},[86,6079,845],{"class":813},[86,6081,6082],{"class":88,"line":1181},[86,6083,808],{"emptyLinePlaceholder":807},[86,6085,6086,6088,6090],{"class":88,"line":1192},[86,6087,1732],{"class":813},[86,6089,854],{"class":817},[86,6091,845],{"class":813},[86,6093,6094,6096,6098,6100,6102,6104],{"class":88,"line":1206},[86,6095,3991],{"class":813},[86,6097,865],{"class":817},[86,6099,868],{"class":92},[86,6101,871],{"class":813},[86,6103,4000],{"class":96},[86,6105,3940],{"class":813},[86,6107,6108,6110,6112],{"class":88,"line":1218},[86,6109,1761],{"class":813},[86,6111,854],{"class":817},[86,6113,845],{"class":813},[86,6115,6116,6118,6120,6122,6124,6126,6128,6130,6132],{"class":88,"line":1235},[86,6117,1732],{"class":813},[86,6119,3816],{"class":817},[86,6121,4027],{"class":92},[86,6123,871],{"class":813},[86,6125,4032],{"class":96},[86,6127,4035],{"class":92},[86,6129,871],{"class":813},[86,6131,4032],{"class":96},[86,6133,3940],{"class":813},[86,6135,6136,6138,6140,6142,6144,6146],{"class":88,"line":1241},[86,6137,1732],{"class":813},[86,6139,3738],{"class":817},[86,6141,1682],{"class":92},[86,6143,871],{"class":813},[86,6145,3921],{"class":96},[86,6147,877],{"class":813},[86,6149,6150,6152,6154],{"class":88,"line":1246},[86,6151,1779],{"class":813},[86,6153,842],{"class":817},[86,6155,845],{"class":813},[86,6157,6158,6160,6162],{"class":88,"line":1252},[86,6159,1788],{"class":813},[86,6161,830],{"class":817},[86,6163,845],{"class":813},[86,6165,6166],{"class":88,"line":1262},[86,6167,808],{"emptyLinePlaceholder":807},[86,6169,6170,6172,6174,6176,6178,6180,6182,6184,6186],{"class":88,"line":1274},[86,6171,3912],{"class":813},[86,6173,4588],{"class":817},[86,6175,1682],{"class":92},[86,6177,871],{"class":813},[86,6179,5804],{"class":96},[86,6181,5540],{"class":92},[86,6183,871],{"class":813},[86,6185,5811],{"class":96},[86,6187,845],{"class":813},[86,6189,6190,6192,6194,6196,6198,6200],{"class":88,"line":1284},[86,6191,1699],{"class":813},[86,6193,4638],{"class":817},[86,6195,5556],{"class":92},[86,6197,871],{"class":813},[86,6199,5728],{"class":96},[86,6201,877],{"class":813},[86,6203,6204,6206,6208,6210,6212,6214],{"class":88,"line":1289},[86,6205,1699],{"class":813},[86,6207,4653],{"class":817},[86,6209,5556],{"class":92},[86,6211,871],{"class":813},[86,6213,1708],{"class":96},[86,6215,877],{"class":813},[86,6217,6218,6220,6222,6224,6226,6228],{"class":88,"line":1294},[86,6219,1699],{"class":813},[86,6221,3816],{"class":817},[86,6223,4027],{"class":92},[86,6225,871],{"class":813},[86,6227,5854],{"class":96},[86,6229,877],{"class":813},[86,6231,6232,6234,6236],{"class":88,"line":1300},[86,6233,1788],{"class":813},[86,6235,4588],{"class":817},[86,6237,845],{"class":813},[86,6239,6240],{"class":88,"line":1310},[86,6241,808],{"emptyLinePlaceholder":807},[86,6243,6244,6246,6248,6250,6252,6254],{"class":88,"line":1322},[86,6245,3912],{"class":813},[86,6247,830],{"class":817},[86,6249,1682],{"class":92},[86,6251,871],{"class":813},[86,6253,5429],{"class":96},[86,6255,845],{"class":813},[86,6257,6258,6260,6262],{"class":88,"line":1332},[86,6259,1719],{"class":813},[86,6261,842],{"class":817},[86,6263,845],{"class":813},[86,6265,6266,6268,6270],{"class":88,"line":1337},[86,6267,1745],{"class":813},[86,6269,854],{"class":817},[86,6271,845],{"class":813},[86,6273,6274,6276,6278,6280,6282,6284],{"class":88,"line":1343},[86,6275,4345],{"class":813},[86,6277,865],{"class":817},[86,6279,868],{"class":92},[86,6281,871],{"class":813},[86,6283,5460],{"class":96},[86,6285,3940],{"class":813},[86,6287,6288,6290,6292],{"class":88,"line":1348},[86,6289,4364],{"class":813},[86,6291,854],{"class":817},[86,6293,845],{"class":813},[86,6295,6296,6298,6300,6302,6304,6306,6308,6310,6312],{"class":88,"line":1357},[86,6297,1745],{"class":813},[86,6299,3816],{"class":817},[86,6301,4027],{"class":92},[86,6303,871],{"class":813},[86,6305,4032],{"class":96},[86,6307,4035],{"class":92},[86,6309,871],{"class":813},[86,6311,4032],{"class":96},[86,6313,3940],{"class":813},[86,6315,6316,6318,6320,6322,6324,6326],{"class":88,"line":1363},[86,6317,1745],{"class":813},[86,6319,3738],{"class":817},[86,6321,1682],{"class":92},[86,6323,871],{"class":813},[86,6325,5281],{"class":96},[86,6327,3940],{"class":813},[86,6329,6330,6332,6334],{"class":88,"line":1369},[86,6331,1770],{"class":813},[86,6333,842],{"class":817},[86,6335,845],{"class":813},[86,6337,6338,6340,6342],{"class":88,"line":1375},[86,6339,1788],{"class":813},[86,6341,830],{"class":817},[86,6343,845],{"class":813},[86,6345,6346],{"class":88,"line":1381},[86,6347,808],{"emptyLinePlaceholder":807},[86,6349,6350,6352,6354,6356,6358,6360,6362,6364,6366],{"class":88,"line":2279},[86,6351,3912],{"class":813},[86,6353,4588],{"class":817},[86,6355,1682],{"class":92},[86,6357,871],{"class":813},[86,6359,5537],{"class":96},[86,6361,5540],{"class":92},[86,6363,871],{"class":813},[86,6365,5811],{"class":96},[86,6367,845],{"class":813},[86,6369,6370,6372,6374,6376,6378,6380],{"class":88,"line":2284},[86,6371,1719],{"class":813},[86,6373,4638],{"class":817},[86,6375,5556],{"class":92},[86,6377,871],{"class":813},[86,6379,1708],{"class":96},[86,6381,877],{"class":813},[86,6383,6384,6386,6388,6390,6392,6394],{"class":88,"line":2294},[86,6385,1719],{"class":813},[86,6387,4653],{"class":817},[86,6389,5556],{"class":92},[86,6391,871],{"class":813},[86,6393,5429],{"class":96},[86,6395,3940],{"class":813},[86,6397,6398],{"class":88,"line":2305},[86,6399,808],{"emptyLinePlaceholder":807},[86,6401,6402,6404,6406,6408,6410,6412,6414,6416,6418],{"class":88,"line":2314},[86,6403,1719],{"class":813},[86,6405,3816],{"class":817},[86,6407,4027],{"class":92},[86,6409,871],{"class":813},[86,6411,5593],{"class":96},[86,6413,4035],{"class":92},[86,6415,871],{"class":813},[86,6417,4032],{"class":96},[86,6419,3940],{"class":813},[86,6421,6422,6424,6426,6428,6430,6432],{"class":88,"line":2319},[86,6423,1719],{"class":813},[86,6425,5608],{"class":817},[86,6427,4027],{"class":92},[86,6429,871],{"class":813},[86,6431,5615],{"class":96},[86,6433,3940],{"class":813},[86,6435,6436,6438,6440],{"class":88,"line":2324},[86,6437,1788],{"class":813},[86,6439,4588],{"class":817},[86,6441,845],{"class":813},[86,6443,6444],{"class":88,"line":2333},[86,6445,808],{"emptyLinePlaceholder":807},[86,6447,6448,6450,6452],{"class":88,"line":2956},[86,6449,4080],{"class":813},[86,6451,818],{"class":817},[86,6453,845],{"class":813},[647,6455,4938],{"id":6456},"practice-1",[15,6458,6459],{},[18,6460],{"alt":20,"src":6461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1542.webp",[15,6463,6464],{},"No need to practice too deeply; we can directly use SolidWorks for modeling, which is more user-friendly.",[15,6466,6467],{},[18,6468],{"alt":20,"src":6469},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1543.webp",[78,6471,6473],{"className":798,"code":6472,"language":800,"meta":20,"style":20},"\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",[73,6474,6475,6479,6494,6498,6512,6526,6534,6548,6562,6570,6585,6600,6608,6612,6626,6634,6642,6656,6664,6672,6680,6684,6698,6706,6710,6718,6733,6741,6761,6775,6783,6791,6795,6815,6829,6843,6857,6865,6869,6884,6892,6900,6923,6931,6952,6966,6974,6982,6986,7007,7021,7035,7039,7060,7075,7083,7087,7102,7110,7118,7138,7146,7166,7180,7188,7196,7200,7221,7235,7249,7253,7274,7288,7296,7300,7315,7323,7331,7351,7359,7379,7394,7403,7412,7417,7439,7454,7469,7474,7496,7511,7520,7525,7541,7550,7559,7580,7589,7610,7625,7634,7643,7648,7670,7685,7700,7705,7727,7742,7751,7756],{"__ignoreMap":20},[86,6476,6477],{"class":88,"line":89},[86,6478,808],{"emptyLinePlaceholder":807},[86,6480,6481,6483,6485,6487,6489,6492],{"class":88,"line":638},[86,6482,814],{"class":813},[86,6484,818],{"class":817},[86,6486,1682],{"class":92},[86,6488,871],{"class":813},[86,6490,6491],{"class":96},"\"exercise_demo\"",[86,6493,845],{"class":813},[86,6495,6496],{"class":88,"line":824},[86,6497,808],{"emptyLinePlaceholder":807},[86,6499,6500,6502,6504,6506,6508,6510],{"class":88,"line":836},[86,6501,3912],{"class":813},[86,6503,3738],{"class":817},[86,6505,1682],{"class":92},[86,6507,871],{"class":813},[86,6509,3921],{"class":96},[86,6511,845],{"class":813},[86,6513,6514,6516,6518,6520,6522,6524],{"class":88,"line":848},[86,6515,1699],{"class":813},[86,6517,3763],{"class":817},[86,6519,3932],{"class":92},[86,6521,871],{"class":813},[86,6523,3937],{"class":96},[86,6525,3940],{"class":813},[86,6527,6528,6530,6532],{"class":88,"line":859},[86,6529,1788],{"class":813},[86,6531,3738],{"class":817},[86,6533,845],{"class":813},[86,6535,6536,6538,6540,6542,6544,6546],{"class":88,"line":880},[86,6537,3912],{"class":813},[86,6539,3738],{"class":817},[86,6541,1682],{"class":92},[86,6543,871],{"class":813},[86,6545,5281],{"class":96},[86,6547,845],{"class":813},[86,6549,6550,6552,6554,6556,6558,6560],{"class":88,"line":890},[86,6551,1699],{"class":813},[86,6553,3763],{"class":817},[86,6555,3932],{"class":92},[86,6557,871],{"class":813},[86,6559,5296],{"class":96},[86,6561,3940],{"class":813},[86,6563,6564,6566,6568],{"class":88,"line":900},[86,6565,1788],{"class":813},[86,6567,3738],{"class":817},[86,6569,845],{"class":813},[86,6571,6572,6574,6576,6578,6580,6583],{"class":88,"line":910},[86,6573,3912],{"class":813},[86,6575,3738],{"class":817},[86,6577,1682],{"class":92},[86,6579,871],{"class":813},[86,6581,6582],{"class":96},"\"gray\"",[86,6584,845],{"class":813},[86,6586,6587,6589,6591,6593,6595,6598],{"class":88,"line":1043},[86,6588,1699],{"class":813},[86,6590,3763],{"class":817},[86,6592,3932],{"class":92},[86,6594,871],{"class":813},[86,6596,6597],{"class":96},"\"0.2 0.2 0.2 0.8\"",[86,6599,3940],{"class":813},[86,6601,6602,6604,6606],{"class":88,"line":1048},[86,6603,1788],{"class":813},[86,6605,3738],{"class":817},[86,6607,845],{"class":813},[86,6609,6610],{"class":88,"line":1065},[86,6611,808],{"emptyLinePlaceholder":807},[86,6613,6614,6616,6618,6620,6622,6624],{"class":88,"line":1087},[86,6615,3912],{"class":813},[86,6617,830],{"class":817},[86,6619,1682],{"class":92},[86,6621,871],{"class":813},[86,6623,5728],{"class":96},[86,6625,845],{"class":813},[86,6627,6628,6630,6632],{"class":88,"line":1107},[86,6629,1699],{"class":813},[86,6631,842],{"class":817},[86,6633,845],{"class":813},[86,6635,6636,6638,6640],{"class":88,"line":1137},[86,6637,1719],{"class":813},[86,6639,854],{"class":817},[86,6641,845],{"class":813},[86,6643,6644,6646,6648,6650,6652,6654],{"class":88,"line":1142},[86,6645,1745],{"class":813},[86,6647,3692],{"class":817},[86,6649,5755],{"class":92},[86,6651,871],{"class":813},[86,6653,5760],{"class":96},[86,6655,877],{"class":813},[86,6657,6658,6660,6662],{"class":88,"line":1148},[86,6659,1770],{"class":813},[86,6661,854],{"class":817},[86,6663,845],{"class":813},[86,6665,6666,6668,6670],{"class":88,"line":1153},[86,6667,1779],{"class":813},[86,6669,842],{"class":817},[86,6671,845],{"class":813},[86,6673,6674,6676,6678],{"class":88,"line":1159},[86,6675,1788],{"class":813},[86,6677,830],{"class":817},[86,6679,845],{"class":813},[86,6681,6682],{"class":88,"line":1181},[86,6683,808],{"emptyLinePlaceholder":807},[86,6685,6686,6688,6690,6692,6694,6696],{"class":88,"line":1192},[86,6687,3912],{"class":813},[86,6689,830],{"class":817},[86,6691,1682],{"class":92},[86,6693,871],{"class":813},[86,6695,1708],{"class":96},[86,6697,845],{"class":813},[86,6699,6700,6702,6704],{"class":88,"line":1206},[86,6701,1699],{"class":813},[86,6703,842],{"class":817},[86,6705,845],{"class":813},[86,6707,6708],{"class":88,"line":1218},[86,6709,808],{"emptyLinePlaceholder":807},[86,6711,6712,6714,6716],{"class":88,"line":1235},[86,6713,1732],{"class":813},[86,6715,854],{"class":817},[86,6717,845],{"class":813},[86,6719,6720,6722,6724,6726,6728,6731],{"class":88,"line":1241},[86,6721,3991],{"class":813},[86,6723,865],{"class":817},[86,6725,868],{"class":92},[86,6727,871],{"class":813},[86,6729,6730],{"class":96},"\"0.2 0.12 0.07\"",[86,6732,3940],{"class":813},[86,6734,6735,6737,6739],{"class":88,"line":1246},[86,6736,1761],{"class":813},[86,6738,854],{"class":817},[86,6740,845],{"class":813},[86,6742,6743,6745,6747,6749,6751,6753,6755,6757,6759],{"class":88,"line":1252},[86,6744,1732],{"class":813},[86,6746,3816],{"class":817},[86,6748,4027],{"class":92},[86,6750,871],{"class":813},[86,6752,4032],{"class":96},[86,6754,4035],{"class":92},[86,6756,871],{"class":813},[86,6758,4032],{"class":96},[86,6760,3940],{"class":813},[86,6762,6763,6765,6767,6769,6771,6773],{"class":88,"line":1262},[86,6764,1732],{"class":813},[86,6766,3738],{"class":817},[86,6768,1682],{"class":92},[86,6770,871],{"class":813},[86,6772,3921],{"class":96},[86,6774,877],{"class":813},[86,6776,6777,6779,6781],{"class":88,"line":1274},[86,6778,1779],{"class":813},[86,6780,842],{"class":817},[86,6782,845],{"class":813},[86,6784,6785,6787,6789],{"class":88,"line":1284},[86,6786,1788],{"class":813},[86,6788,830],{"class":817},[86,6790,845],{"class":813},[86,6792,6793],{"class":88,"line":1289},[86,6794,808],{"emptyLinePlaceholder":807},[86,6796,6797,6799,6801,6803,6805,6807,6809,6811,6813],{"class":88,"line":1294},[86,6798,3912],{"class":813},[86,6800,4588],{"class":817},[86,6802,1682],{"class":92},[86,6804,871],{"class":813},[86,6806,5804],{"class":96},[86,6808,5540],{"class":92},[86,6810,871],{"class":813},[86,6812,5811],{"class":96},[86,6814,845],{"class":813},[86,6816,6817,6819,6821,6823,6825,6827],{"class":88,"line":1300},[86,6818,1699],{"class":813},[86,6820,4638],{"class":817},[86,6822,5556],{"class":92},[86,6824,871],{"class":813},[86,6826,5728],{"class":96},[86,6828,877],{"class":813},[86,6830,6831,6833,6835,6837,6839,6841],{"class":88,"line":1310},[86,6832,1699],{"class":813},[86,6834,4653],{"class":817},[86,6836,5556],{"class":92},[86,6838,871],{"class":813},[86,6840,1708],{"class":96},[86,6842,877],{"class":813},[86,6844,6845,6847,6849,6851,6853,6855],{"class":88,"line":1322},[86,6846,1699],{"class":813},[86,6848,3816],{"class":817},[86,6850,4027],{"class":92},[86,6852,871],{"class":813},[86,6854,5854],{"class":96},[86,6856,877],{"class":813},[86,6858,6859,6861,6863],{"class":88,"line":1332},[86,6860,1788],{"class":813},[86,6862,4588],{"class":817},[86,6864,845],{"class":813},[86,6866,6867],{"class":88,"line":1337},[86,6868,808],{"emptyLinePlaceholder":807},[86,6870,6871,6873,6875,6877,6879,6882],{"class":88,"line":1343},[86,6872,3912],{"class":813},[86,6874,830],{"class":817},[86,6876,1682],{"class":92},[86,6878,871],{"class":813},[86,6880,6881],{"class":96},"\"front_left_wheel\"",[86,6883,845],{"class":813},[86,6885,6886,6888,6890],{"class":88,"line":1348},[86,6887,1719],{"class":813},[86,6889,842],{"class":817},[86,6891,845],{"class":813},[86,6893,6894,6896,6898],{"class":88,"line":1357},[86,6895,1745],{"class":813},[86,6897,854],{"class":817},[86,6899,845],{"class":813},[86,6901,6902,6904,6906,6908,6910,6913,6916,6918,6921],{"class":88,"line":1363},[86,6903,4345],{"class":813},[86,6905,3676],{"class":817},[86,6907,5755],{"class":92},[86,6909,871],{"class":813},[86,6911,6912],{"class":96},"\"0.025\"",[86,6914,6915],{"class":92}," length",[86,6917,871],{"class":813},[86,6919,6920],{"class":96},"\"0.02\"",[86,6922,877],{"class":813},[86,6924,6925,6927,6929],{"class":88,"line":1369},[86,6926,4364],{"class":813},[86,6928,854],{"class":817},[86,6930,845],{"class":813},[86,6932,6933,6935,6937,6939,6941,6943,6945,6947,6950],{"class":88,"line":1375},[86,6934,1745],{"class":813},[86,6936,3816],{"class":817},[86,6938,4027],{"class":92},[86,6940,871],{"class":813},[86,6942,4032],{"class":96},[86,6944,4035],{"class":92},[86,6946,871],{"class":813},[86,6948,6949],{"class":96},"\"1.57 0 0\"",[86,6951,3940],{"class":813},[86,6953,6954,6956,6958,6960,6962,6964],{"class":88,"line":1381},[86,6955,1745],{"class":813},[86,6957,3738],{"class":817},[86,6959,1682],{"class":92},[86,6961,871],{"class":813},[86,6963,6582],{"class":96},[86,6965,3940],{"class":813},[86,6967,6968,6970,6972],{"class":88,"line":2279},[86,6969,1770],{"class":813},[86,6971,842],{"class":817},[86,6973,845],{"class":813},[86,6975,6976,6978,6980],{"class":88,"line":2284},[86,6977,1788],{"class":813},[86,6979,830],{"class":817},[86,6981,845],{"class":813},[86,6983,6984],{"class":88,"line":2294},[86,6985,808],{"emptyLinePlaceholder":807},[86,6987,6988,6990,6992,6994,6996,6999,7001,7003,7005],{"class":88,"line":2305},[86,6989,3912],{"class":813},[86,6991,4588],{"class":817},[86,6993,1682],{"class":92},[86,6995,871],{"class":813},[86,6997,6998],{"class":96},"\"frontleftwheel2baselink\"",[86,7000,5540],{"class":92},[86,7002,871],{"class":813},[86,7004,5545],{"class":96},[86,7006,845],{"class":813},[86,7008,7009,7011,7013,7015,7017,7019],{"class":88,"line":2314},[86,7010,1719],{"class":813},[86,7012,4638],{"class":817},[86,7014,5556],{"class":92},[86,7016,871],{"class":813},[86,7018,1708],{"class":96},[86,7020,877],{"class":813},[86,7022,7023,7025,7027,7029,7031,7033],{"class":88,"line":2319},[86,7024,1719],{"class":813},[86,7026,4653],{"class":817},[86,7028,5556],{"class":92},[86,7030,871],{"class":813},[86,7032,6881],{"class":96},[86,7034,3940],{"class":813},[86,7036,7037],{"class":88,"line":2324},[86,7038,808],{"emptyLinePlaceholder":807},[86,7040,7041,7043,7045,7047,7049,7052,7054,7056,7058],{"class":88,"line":2333},[86,7042,1719],{"class":813},[86,7044,3816],{"class":817},[86,7046,4027],{"class":92},[86,7048,871],{"class":813},[86,7050,7051],{"class":96},"\"0.075 0.06 -0.025\"",[86,7053,4035],{"class":92},[86,7055,871],{"class":813},[86,7057,4032],{"class":96},[86,7059,3940],{"class":813},[86,7061,7062,7064,7066,7068,7070,7073],{"class":88,"line":2956},[86,7063,1719],{"class":813},[86,7065,5608],{"class":817},[86,7067,4027],{"class":92},[86,7069,871],{"class":813},[86,7071,7072],{"class":96},"\"0 1 0\"",[86,7074,3940],{"class":813},[86,7076,7077,7079,7081],{"class":88,"line":2967},[86,7078,1788],{"class":813},[86,7080,4588],{"class":817},[86,7082,845],{"class":813},[86,7084,7085],{"class":88,"line":2995},[86,7086,808],{"emptyLinePlaceholder":807},[86,7088,7089,7091,7093,7095,7097,7100],{"class":88,"line":3000},[86,7090,3912],{"class":813},[86,7092,830],{"class":817},[86,7094,1682],{"class":92},[86,7096,871],{"class":813},[86,7098,7099],{"class":96},"\"front_right_wheel\"",[86,7101,845],{"class":813},[86,7103,7104,7106,7108],{"class":88,"line":3005},[86,7105,1699],{"class":813},[86,7107,842],{"class":817},[86,7109,845],{"class":813},[86,7111,7112,7114,7116],{"class":88,"line":3014},[86,7113,1732],{"class":813},[86,7115,854],{"class":817},[86,7117,845],{"class":813},[86,7119,7120,7122,7124,7126,7128,7130,7132,7134,7136],{"class":88,"line":3404},[86,7121,3991],{"class":813},[86,7123,3676],{"class":817},[86,7125,5755],{"class":92},[86,7127,871],{"class":813},[86,7129,6912],{"class":96},[86,7131,6915],{"class":92},[86,7133,871],{"class":813},[86,7135,6920],{"class":96},[86,7137,877],{"class":813},[86,7139,7140,7142,7144],{"class":88,"line":3410},[86,7141,1761],{"class":813},[86,7143,854],{"class":817},[86,7145,845],{"class":813},[86,7147,7148,7150,7152,7154,7156,7158,7160,7162,7164],{"class":88,"line":3415},[86,7149,1732],{"class":813},[86,7151,3816],{"class":817},[86,7153,4027],{"class":92},[86,7155,871],{"class":813},[86,7157,4032],{"class":96},[86,7159,4035],{"class":92},[86,7161,871],{"class":813},[86,7163,6949],{"class":96},[86,7165,3940],{"class":813},[86,7167,7168,7170,7172,7174,7176,7178],{"class":88,"line":3421},[86,7169,1732],{"class":813},[86,7171,3738],{"class":817},[86,7173,1682],{"class":92},[86,7175,871],{"class":813},[86,7177,6582],{"class":96},[86,7179,3940],{"class":813},[86,7181,7182,7184,7186],{"class":88,"line":3426},[86,7183,1779],{"class":813},[86,7185,842],{"class":817},[86,7187,845],{"class":813},[86,7189,7190,7192,7194],{"class":88,"line":3432},[86,7191,1788],{"class":813},[86,7193,830],{"class":817},[86,7195,845],{"class":813},[86,7197,7198],{"class":88,"line":3441},[86,7199,808],{"emptyLinePlaceholder":807},[86,7201,7202,7204,7206,7208,7210,7213,7215,7217,7219],{"class":88,"line":3453},[86,7203,3912],{"class":813},[86,7205,4588],{"class":817},[86,7207,1682],{"class":92},[86,7209,871],{"class":813},[86,7211,7212],{"class":96},"\"frontrightwheel2baselink\"",[86,7214,5540],{"class":92},[86,7216,871],{"class":813},[86,7218,5545],{"class":96},[86,7220,845],{"class":813},[86,7222,7223,7225,7227,7229,7231,7233],{"class":88,"line":3463},[86,7224,1719],{"class":813},[86,7226,4638],{"class":817},[86,7228,5556],{"class":92},[86,7230,871],{"class":813},[86,7232,1708],{"class":96},[86,7234,877],{"class":813},[86,7236,7237,7239,7241,7243,7245,7247],{"class":88,"line":3468},[86,7238,1719],{"class":813},[86,7240,4653],{"class":817},[86,7242,5556],{"class":92},[86,7244,871],{"class":813},[86,7246,7099],{"class":96},[86,7248,3940],{"class":813},[86,7250,7251],{"class":88,"line":3473},[86,7252,808],{"emptyLinePlaceholder":807},[86,7254,7255,7257,7259,7261,7263,7266,7268,7270,7272],{"class":88,"line":3482},[86,7256,1719],{"class":813},[86,7258,3816],{"class":817},[86,7260,4027],{"class":92},[86,7262,871],{"class":813},[86,7264,7265],{"class":96},"\"0.075 -0.06 -0.025\"",[86,7267,4035],{"class":92},[86,7269,871],{"class":813},[86,7271,4032],{"class":96},[86,7273,3940],{"class":813},[86,7275,7276,7278,7280,7282,7284,7286],{"class":88,"line":3493},[86,7277,1719],{"class":813},[86,7279,5608],{"class":817},[86,7281,4027],{"class":92},[86,7283,871],{"class":813},[86,7285,7072],{"class":96},[86,7287,3940],{"class":813},[86,7289,7290,7292,7294],{"class":88,"line":3504},[86,7291,1788],{"class":813},[86,7293,4588],{"class":817},[86,7295,845],{"class":813},[86,7297,7298],{"class":88,"line":3509},[86,7299,808],{"emptyLinePlaceholder":807},[86,7301,7302,7304,7306,7308,7310,7313],{"class":88,"line":3515},[86,7303,3912],{"class":813},[86,7305,830],{"class":817},[86,7307,1682],{"class":92},[86,7309,871],{"class":813},[86,7311,7312],{"class":96},"\"back_left_wheel\"",[86,7314,845],{"class":813},[86,7316,7317,7319,7321],{"class":88,"line":3529},[86,7318,1699],{"class":813},[86,7320,842],{"class":817},[86,7322,845],{"class":813},[86,7324,7325,7327,7329],{"class":88,"line":3534},[86,7326,1732],{"class":813},[86,7328,854],{"class":817},[86,7330,845],{"class":813},[86,7332,7333,7335,7337,7339,7341,7343,7345,7347,7349],{"class":88,"line":3539},[86,7334,3991],{"class":813},[86,7336,3676],{"class":817},[86,7338,5755],{"class":92},[86,7340,871],{"class":813},[86,7342,6912],{"class":96},[86,7344,6915],{"class":92},[86,7346,871],{"class":813},[86,7348,6920],{"class":96},[86,7350,877],{"class":813},[86,7352,7353,7355,7357],{"class":88,"line":3544},[86,7354,1761],{"class":813},[86,7356,854],{"class":817},[86,7358,845],{"class":813},[86,7360,7361,7363,7365,7367,7369,7371,7373,7375,7377],{"class":88,"line":3553},[86,7362,1732],{"class":813},[86,7364,3816],{"class":817},[86,7366,4027],{"class":92},[86,7368,871],{"class":813},[86,7370,4032],{"class":96},[86,7372,4035],{"class":92},[86,7374,871],{"class":813},[86,7376,6949],{"class":96},[86,7378,3940],{"class":813},[86,7380,7382,7384,7386,7388,7390,7392],{"class":88,"line":7381},81,[86,7383,1732],{"class":813},[86,7385,3738],{"class":817},[86,7387,1682],{"class":92},[86,7389,871],{"class":813},[86,7391,6582],{"class":96},[86,7393,3940],{"class":813},[86,7395,7397,7399,7401],{"class":88,"line":7396},82,[86,7398,1779],{"class":813},[86,7400,842],{"class":817},[86,7402,845],{"class":813},[86,7404,7406,7408,7410],{"class":88,"line":7405},83,[86,7407,1788],{"class":813},[86,7409,830],{"class":817},[86,7411,845],{"class":813},[86,7413,7415],{"class":88,"line":7414},84,[86,7416,808],{"emptyLinePlaceholder":807},[86,7418,7420,7422,7424,7426,7428,7431,7433,7435,7437],{"class":88,"line":7419},85,[86,7421,3912],{"class":813},[86,7423,4588],{"class":817},[86,7425,1682],{"class":92},[86,7427,871],{"class":813},[86,7429,7430],{"class":96},"\"backleftwheel2baselink\"",[86,7432,5540],{"class":92},[86,7434,871],{"class":813},[86,7436,5545],{"class":96},[86,7438,845],{"class":813},[86,7440,7442,7444,7446,7448,7450,7452],{"class":88,"line":7441},86,[86,7443,1699],{"class":813},[86,7445,4638],{"class":817},[86,7447,5556],{"class":92},[86,7449,871],{"class":813},[86,7451,1708],{"class":96},[86,7453,877],{"class":813},[86,7455,7457,7459,7461,7463,7465,7467],{"class":88,"line":7456},87,[86,7458,1699],{"class":813},[86,7460,4653],{"class":817},[86,7462,5556],{"class":92},[86,7464,871],{"class":813},[86,7466,7312],{"class":96},[86,7468,3940],{"class":813},[86,7470,7472],{"class":88,"line":7471},88,[86,7473,808],{"emptyLinePlaceholder":807},[86,7475,7477,7479,7481,7483,7485,7488,7490,7492,7494],{"class":88,"line":7476},89,[86,7478,1699],{"class":813},[86,7480,3816],{"class":817},[86,7482,4027],{"class":92},[86,7484,871],{"class":813},[86,7486,7487],{"class":96},"\"-0.075 0.06 -0.025\"",[86,7489,4035],{"class":92},[86,7491,871],{"class":813},[86,7493,4032],{"class":96},[86,7495,3940],{"class":813},[86,7497,7499,7501,7503,7505,7507,7509],{"class":88,"line":7498},90,[86,7500,1699],{"class":813},[86,7502,5608],{"class":817},[86,7504,4027],{"class":92},[86,7506,871],{"class":813},[86,7508,7072],{"class":96},[86,7510,3940],{"class":813},[86,7512,7514,7516,7518],{"class":88,"line":7513},91,[86,7515,1788],{"class":813},[86,7517,4588],{"class":817},[86,7519,845],{"class":813},[86,7521,7523],{"class":88,"line":7522},92,[86,7524,808],{"emptyLinePlaceholder":807},[86,7526,7528,7530,7532,7534,7536,7539],{"class":88,"line":7527},93,[86,7529,3912],{"class":813},[86,7531,830],{"class":817},[86,7533,1682],{"class":92},[86,7535,871],{"class":813},[86,7537,7538],{"class":96},"\"back_right_wheel\"",[86,7540,845],{"class":813},[86,7542,7544,7546,7548],{"class":88,"line":7543},94,[86,7545,1699],{"class":813},[86,7547,842],{"class":817},[86,7549,845],{"class":813},[86,7551,7553,7555,7557],{"class":88,"line":7552},95,[86,7554,1732],{"class":813},[86,7556,854],{"class":817},[86,7558,845],{"class":813},[86,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578],{"class":88,"line":7561},96,[86,7563,3991],{"class":813},[86,7565,3676],{"class":817},[86,7567,5755],{"class":92},[86,7569,871],{"class":813},[86,7571,6912],{"class":96},[86,7573,6915],{"class":92},[86,7575,871],{"class":813},[86,7577,6920],{"class":96},[86,7579,877],{"class":813},[86,7581,7583,7585,7587],{"class":88,"line":7582},97,[86,7584,1761],{"class":813},[86,7586,854],{"class":817},[86,7588,845],{"class":813},[86,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608],{"class":88,"line":7591},98,[86,7593,1732],{"class":813},[86,7595,3816],{"class":817},[86,7597,4027],{"class":92},[86,7599,871],{"class":813},[86,7601,4032],{"class":96},[86,7603,4035],{"class":92},[86,7605,871],{"class":813},[86,7607,6949],{"class":96},[86,7609,3940],{"class":813},[86,7611,7613,7615,7617,7619,7621,7623],{"class":88,"line":7612},99,[86,7614,1732],{"class":813},[86,7616,3738],{"class":817},[86,7618,1682],{"class":92},[86,7620,871],{"class":813},[86,7622,6582],{"class":96},[86,7624,3940],{"class":813},[86,7626,7628,7630,7632],{"class":88,"line":7627},100,[86,7629,1779],{"class":813},[86,7631,842],{"class":817},[86,7633,845],{"class":813},[86,7635,7637,7639,7641],{"class":88,"line":7636},101,[86,7638,1788],{"class":813},[86,7640,830],{"class":817},[86,7642,845],{"class":813},[86,7644,7646],{"class":88,"line":7645},102,[86,7647,808],{"emptyLinePlaceholder":807},[86,7649,7651,7653,7655,7657,7659,7662,7664,7666,7668],{"class":88,"line":7650},103,[86,7652,3912],{"class":813},[86,7654,4588],{"class":817},[86,7656,1682],{"class":92},[86,7658,871],{"class":813},[86,7660,7661],{"class":96},"\"backrightwheel2baselink\"",[86,7663,5540],{"class":92},[86,7665,871],{"class":813},[86,7667,5545],{"class":96},[86,7669,845],{"class":813},[86,7671,7673,7675,7677,7679,7681,7683],{"class":88,"line":7672},104,[86,7674,1699],{"class":813},[86,7676,4638],{"class":817},[86,7678,5556],{"class":92},[86,7680,871],{"class":813},[86,7682,1708],{"class":96},[86,7684,877],{"class":813},[86,7686,7688,7690,7692,7694,7696,7698],{"class":88,"line":7687},105,[86,7689,1699],{"class":813},[86,7691,4653],{"class":817},[86,7693,5556],{"class":92},[86,7695,871],{"class":813},[86,7697,7538],{"class":96},[86,7699,3940],{"class":813},[86,7701,7703],{"class":88,"line":7702},106,[86,7704,808],{"emptyLinePlaceholder":807},[86,7706,7708,7710,7712,7714,7716,7719,7721,7723,7725],{"class":88,"line":7707},107,[86,7709,1699],{"class":813},[86,7711,3816],{"class":817},[86,7713,4027],{"class":92},[86,7715,871],{"class":813},[86,7717,7718],{"class":96},"\"-0.075 -0.06 -0.025\"",[86,7720,4035],{"class":92},[86,7722,871],{"class":813},[86,7724,4032],{"class":96},[86,7726,3940],{"class":813},[86,7728,7730,7732,7734,7736,7738,7740],{"class":88,"line":7729},108,[86,7731,1699],{"class":813},[86,7733,5608],{"class":817},[86,7735,4027],{"class":92},[86,7737,871],{"class":813},[86,7739,7072],{"class":96},[86,7741,3940],{"class":813},[86,7743,7745,7747,7749],{"class":88,"line":7744},109,[86,7746,1788],{"class":813},[86,7748,4588],{"class":817},[86,7750,845],{"class":813},[86,7752,7754],{"class":88,"line":7753},110,[86,7755,808],{"emptyLinePlaceholder":807},[86,7757,7759,7761,7763],{"class":88,"line":7758},111,[86,7760,4080],{"class":813},[86,7762,818],{"class":817},[86,7764,845],{"class":813},[15,7766,7767],{},"Run in terminal",[78,7769,7771],{"className":80,"code":7770,"language":82,"meta":20,"style":20},"ros2 launch cpp06_urdf display.launch.py model:=`ros2 pkg prefix --share cpp06_urdf`/urdf/urdf/demo05_exercise.urdf\n",[73,7772,7773],{"__ignoreMap":20},[86,7774,7775,7777,7779,7781,7783,7785,7787,7789,7791,7793],{"class":88,"line":89},[86,7776,722],{"class":92},[86,7778,1550],{"class":96},[86,7780,731],{"class":96},[86,7782,2570],{"class":96},[86,7784,2573],{"class":96},[86,7786,722],{"class":92},[86,7788,2578],{"class":96},[86,7790,2581],{"class":734},[86,7792,2584],{"class":96},[86,7794,7795],{"class":92},"/urdf/urdf/demo05_exercise.urdf\n",[15,7797,7798],{},[18,7799],{"alt":20,"src":7800},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1544.webp",[10,7802,7804],{"id":7803},"urdf-tools","URDF tools",[15,7806,7807],{},"In ROS2, several tools related to URDF files are provided, such as:",[165,7809,7810,7816],{},[144,7811,4446,7812,7815],{},[73,7813,7814],{},"check_urdf"," command can check complex URDF files for syntax issues.",[144,7817,4446,7818,7821],{},[73,7819,7820],{},"urdf_to_graphviz"," command can be used to view the structure of a URDF model, displaying the hierarchical relationships between different links.",[15,7823,7824,7825,129],{},"Of course, before using the tool, please install it first. Installation command: ",[73,7826,7827],{},"sudo apt install liburdfdom-tools",[647,7829,7831],{"id":7830},"check_urdf-syntax-check",[107,7832,7833],{},"check_urdf Syntax Check",[15,7835,7836,7837,7840],{},"Enter the directory containing the URDF file and call: ",[73,7838,7839],{},"check_urdf urdf文件",". If no exception is thrown, the file is valid; otherwise, it is invalid.",[15,7842,7843,7844,7847,7848,7850],{},"Example: In the terminal, navigate to the ",[73,7845,7846],{},"urdf/urdf"," directory of the ",[73,7849,1972],{}," package and run the following command:",[78,7852,7854],{"className":80,"code":7853,"language":82,"meta":20,"style":20},"check_urdf demo05_exercise.urdf\n",[73,7855,7856],{"__ignoreMap":20},[86,7857,7858,7860],{"class":88,"line":89},[86,7859,7814],{"class":92},[86,7861,7862],{"class":96}," demo05_exercise.urdf\n",[15,7864,7865],{},"If there are no anomalies in the URDF file, the hierarchical relationship of the links in the URDF will be displayed, as shown in the following figure:",[15,7867,7868],{},[18,7869],{"alt":20,"src":7870},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1545.webp",[15,7872,7873],{},"Otherwise, an error message will be displayed.",[15,7875,7876],{},[18,7877],{"alt":20,"src":7878},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1546.webp",[15,7880,7881],{},"Demonstration error.",[15,7883,7884],{},[18,7885],{"alt":20,"src":7886},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1547.webp",[647,7888,7890],{"id":7889},"urdf_to_graphviz-structure-viewer",[107,7891,7892],{},"urdf_to_graphviz Structure Viewer",[15,7894,7895,7896,7899],{},"Navigate to the directory containing the URDF file, and run: ",[73,7897,7898],{},"urdf_to_graphviz urdf文件",". A PDF file will be generated in the current directory.",[15,7901,7843,7902,7847,7904,7850],{},[73,7903,7846],{},[73,7905,1972],{},[78,7907,7909],{"className":80,"code":7908,"language":82,"meta":20,"style":20},"urdf_to_graphviz demo05_exercise.urdf\n",[73,7910,7911],{"__ignoreMap":20},[86,7912,7913,7915],{"class":88,"line":89},[86,7914,7820],{"class":92},[86,7916,7862],{"class":96},[15,7918,7919,7920,7923,7924,7927],{},"In the current directory, a ",[73,7921,7922],{},".pdf"," and a ",[73,7925,7926],{},".gv"," file will be generated, named after the robot name in the URDF. Opening the PDF file will display content as shown in the figure below:",[15,7929,7930],{},[18,7931],{"alt":20,"src":7932},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1548.webp",[15,7934,7935],{},"In the figure above, the relationship between links and joints is displayed in a tree structure.",[15,7937,7938,7940,7941,7944,7945,7947],{},[107,7939,109],{}," This tool was previously named ",[73,7942,7943],{},"urdf_to_graphiz"," and it is now recommended to use ",[73,7946,7820],{}," instead.",[15,7949,7950],{},[18,7951],{"alt":20,"src":7952},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1549.webp",[15,7954,7955,7957,7958,129],{},[73,7956,7943],{}," is a historical version and has been deprecated. It is recommended to use ",[73,7959,7820],{},[15,7961,7962],{},[18,7963],{"alt":20,"src":7964},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1550.webp",[15,7966,7967],{},[18,7968],{"alt":20,"src":7969},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1551.webp",[15,7971,7972],{},[18,7973],{"alt":20,"src":7974},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1552.webp",[15,7976,7977],{},[18,7978],{"alt":20,"src":7979},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1553.webp",[15,7981,7982],{},"Black boxes represent Links, blue represents Joints, and information such as translation amounts and rotation degrees is also displayed.",[10,7984,7986],{"id":7985},"sw2urdf","SW2URDF",[647,7988,7990],{"id":7989},"introduction-to-solidworks","Introduction to SolidWorks",[15,7992,7993],{},"SolidWorks is a computer-aided design (CAD) and computer-aided manufacturing (CAM) software developed by Dassault Systèmes SolidWorks Corp. It is primarily used for engineering design and manufacturing, enabling users to create 3D models, perform assembly design, conduct engineering analysis, and generate drawings. SolidWorks features an intuitive user interface and powerful capabilities, allowing engineers and designers to quickly and accurately design complex parts and assemblies. This software is widely used in industries such as mechanical engineering, aerospace, automotive, and medical devices, making it a key tool in the field of engineering design.",[15,7995,7996],{},[18,7997],{"alt":20,"src":7998},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1554.webp",[647,8000,8002],{"id":8001},"introduction-to-the-solidworks-plugin-sw2urdf","Introduction to the SolidWorks Plugin SW2URDF",[15,8004,8005],{},"sw2urdf plugin Wikipedia:",[15,8007,8008],{},[4456,8009,8012],{"href":8010,"rel":8011},"https://wiki.ros.org/sw%5C_urdf%5C_exporter",[4460],"https://wiki.ros.org/sw\\_urdf\\_exporter",[15,8014,8015],{},"GitHub download link:",[15,8017,8018],{},[4456,8019,8022],{"href":8020,"rel":8021},"https://github.com/ros/solidworks%5C_urdf%5C_exporter/releases",[4460],"https://github.com/ros/solidworks\\_urdf\\_exporter/releases",[15,8024,8025],{},"Although the GitHub link states it only supports up to SW2021, it has been found that the latest versions of SW (2022 and 2024 tested) also work fine.",[15,8027,8028],{},[18,8029],{"alt":20,"src":8030},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1555.webp",[647,8032,8034],{"id":8033},"install-sw2urdf","Install sw2urdf",[141,8036,8037],{},[144,8038,8039],{},"Go to GitHub to download the sw2urdf plugin (ignore the SW version; it has been tested and still works with later SW versions).",[15,8041,8042],{},[18,8043],{"alt":20,"src":8044},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1556.webp",[141,8046,8047],{"start":638},[144,8048,8049],{},"Check the installation path of SW.",[15,8051,8052],{},"For example, my path \"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\\"",[15,8054,8055],{},[18,8056],{"alt":20,"src":8057},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1557.webp",[141,8059,8060],{"start":824},[144,8061,8062],{},"Open the plugin installer. By default, it will automatically locate your SW installation path for installation. If it does not automatically find the path, you will need to manually select the SW installation path.",[15,8064,8065],{},[18,8066],{"alt":20,"src":8067},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1558.webp",[141,8069,8070],{"start":836},[144,8071,8072],{},"Check if the plugin was installed successfully.",[15,8074,8075],{},[18,8076],{"alt":20,"src":8077},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1559.webp",[15,8079,8080],{},[18,8081],{"alt":20,"src":8082},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1560.webp",[15,8084,8085],{},"As shown in the picture, the installation was successful.",[647,8087,8089],{"id":8088},"export-urdf-and-meshes","Export URDF and Meshes",[141,8091,8092],{},[144,8093,8094],{},"The image shows a standard SolidWorks assembly drawing (you can also try to create one manually; it doesn't need to include a transmission mechanism).",[15,8096,8097,8098,3867,8101],{},"If this process is hard to follow, you can refer to Guyueju's video and study it alongside this tutorial. ",[86,8099,8100],{},"Exporting SolidWorks Models to URDF (Guyueju) - Bilibili",[4456,8102,8103],{"href":8103,"rel":8104},"https://www.bilibili.com/video/BV1Tx411o7rH",[4460],[15,8106,8107],{},[18,8108],{"alt":20,"src":8109},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1561.webp",[141,8111,8112],{"start":638},[144,8113,8114],{},"Create a reference axis for the joint.",[15,8116,8117],{},[18,8118],{"alt":20,"src":8119},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1562.webp",[15,8121,8122],{},"Select the cylindrical surface or other surface of the joint to calibrate the rotation axis.",[15,8124,8125],{},[18,8126],{"alt":20,"src":8127},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1563.webp",[15,8129,8130],{},"If you have created a datum axis and find that it is not displaying properly, then turn on this option.",[15,8132,8133],{},[18,8134],{"alt":20,"src":8135},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1564.webp",[15,8137,8138],{},[18,8139],{"alt":20,"src":8140},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1565.webp",[15,8142,8143],{},"After building all the systems",[141,8145,8146],{"start":824},[144,8147,8148],{},"Open the \"export as URDF\" option.",[15,8150,8151],{},[18,8152],{"alt":20,"src":8153},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1566.webp",[141,8155,8156],{"start":836},[144,8157,8158],{},"You need to first select the base_link base rigid body.",[15,8160,8161],{},[18,8162],{"alt":20,"src":8163},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1567.webp",[15,8165,8166],{},"Here, you may need to select the Global Origin yourself — just choose Origin_Global. However, it's usually fine to select Automatically Generate.",[141,8168,8169],{"start":848},[144,8170,8171],{},"Because his base_link connects to a child_link through a joint, this option should be set to 1.",[15,8173,8174,8177],{},[18,8175],{"alt":20,"src":8176},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1568.webp",[18,8178],{"alt":20,"src":8179},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1569.webp",[15,8181,8182],{},"Let's call the joint connecting base_link joint1, and the rigid body above joint1 link1.",[15,8184,8185],{},"Then, refer to the reference axis and select the reference axis 1 we just created at this joint. Then, for the joint type, choose Revolute (a joint with limited range of motion; only this way can the robot joint move normally).",[15,8187,8188],{},[18,8189],{"alt":20,"src":8190},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1570.webp",[15,8192,8193],{},"The reference coordinate system here can be set to automatically generate, or you can choose Origin_Joint1.",[15,8195,8196],{},"Then add one to link1 to create link2.",[15,8198,8199],{},"The steps for adding link3 and link4 are the same, so they will not be shown in detail.",[15,8201,8202],{},[18,8203],{"alt":20,"src":8204},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1571.webp",[15,8206,8207],{},[18,8208],{"alt":20,"src":8209},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1572.webp",[15,8211,8212],{},[18,8213],{"alt":20,"src":8214},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1573.webp",[141,8216,8217],{"start":859},[144,8218,8219],{},"Click preview and export",[15,8221,8222],{},[18,8223],{"alt":20,"src":8224},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1574.webp",[141,8226,8227],{"start":880},[144,8228,8229],{},"Set joint limit positions.",[15,8231,8232],{},"If the Axis coordinate is displayed incorrectly here, it means the Coordinates or Axis selection is wrong. Please manually select the correct coordinate system or reference axis.",[15,8234,8235],{},[18,8236],{"alt":20,"src":8237},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1575.webp",[15,8239,8240],{},"If the axis generation is incorrect, for example all zeros, you can fill it in manually.",[15,8242,8243],{},[18,8244],{"alt":20,"src":8245},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1576.webp",[15,8247,8248],{},"For example, here is the X-axis. You can set the left wheel to -100 and the right wheel to 100 (this is for reference only, a solution provided by ChatGPT).",[15,8250,8251],{},[18,8252],{"alt":20,"src":8253},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1577.webp",[141,8255,8256],{"start":890},[144,8257,8258],{},"View the matrix, then click Export URDF and meshes.",[15,8260,8261],{},[18,8262],{"alt":20,"src":8263},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1578.webp",[15,8265,8266],{},[18,8267],{"alt":20,"src":8268},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1579.webp",[15,8270,8271],{},[18,8272],{"alt":20,"src":8273},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1580.webp",[15,8275,8276],{},[18,8277],{"alt":20,"src":8278},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1581.webp",[15,8280,8281],{},"This successfully generates the ROS1 workspace. Move the workspace to the Linux system.",[647,8283,8285],{"id":8284},"convert-a-ros1-workspace-to-a-ros2-workspace","Convert a ROS1 workspace to a ROS2 workspace",[141,8287,8288],{},[144,8289,8290],{},"First, move the ROS1 workspace to the Linux system.",[15,8292,8293],{},[18,8294],{"alt":20,"src":8295},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1582.webp",[141,8297,8298],{"start":638},[144,8299,8300],{},"Create a new ROS2 workspace",[15,8302,8303],{},[18,8304],{"alt":20,"src":8305},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1583.webp",[78,8307,8309],{"className":80,"code":8308,"language":82,"meta":20,"style":20},"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",[73,8310,8311,8322,8330,8337,8344,8359,8366],{"__ignoreMap":20},[86,8312,8313,8316,8319],{"class":88,"line":89},[86,8314,8315],{"class":92},"mkdir",[86,8317,8318],{"class":734}," -p",[86,8320,8321],{"class":96}," ros2_4axisrobot_ws/src\n",[86,8323,8324,8327],{"class":88,"line":638},[86,8325,8326],{"class":734},"cd",[86,8328,8329],{"class":96}," ros2_4axisrobot_ws/\n",[86,8331,8332,8334],{"class":88,"line":824},[86,8333,1516],{"class":92},[86,8335,8336],{"class":96}," build\n",[86,8338,8339,8341],{"class":88,"line":836},[86,8340,8326],{"class":734},[86,8342,8343],{"class":96}," src\n",[86,8345,8346,8348,8350,8352,8355,8357],{"class":88,"line":848},[86,8347,722],{"class":92},[86,8349,725],{"class":96},[86,8351,728],{"class":96},[86,8353,8354],{"class":96}," cpp01_urdf",[86,8356,735],{"class":734},[86,8358,738],{"class":96},[86,8360,8361,8363],{"class":88,"line":859},[86,8362,8326],{"class":734},[86,8364,8365],{"class":96}," ..\n",[86,8367,8368,8370],{"class":88,"line":880},[86,8369,73],{"class":92},[86,8371,8372],{"class":96}," .\n",[141,8374,8375],{"start":824},[144,8376,8377],{},"Complete the table of contents for WS.",[15,8379,8380,8383],{},[18,8381],{"alt":20,"src":8382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1584.webp",[18,8384],{"alt":20,"src":8385},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1585.webp",[15,8387,8388],{},"Create folders such as launch, meshes, rviz, urdf, etc., under the ./src/cpp01_urdf path. Then, inside the urdf folder, create two more folders named urdf and xacro.",[141,8390,8391],{"start":836},[144,8392,8393],{},"Copy the URDF and Meshes from the ROS1 workspace into the ROS2 workspace.",[15,8395,8396,8399],{},[18,8397],{"alt":20,"src":8398},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1586.webp",[18,8400],{"alt":20,"src":8401},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1587.webp",[15,8403,8404],{},[18,8405],{"alt":20,"src":8406},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1588.webp",[141,8408,8409],{"start":848},[144,8410,8411],{},"Configure CMake and the package.",[15,8413,8414],{},"In CMake, please add",[78,8416,8417],{"className":1469,"code":1470,"language":1471,"meta":20,"style":20},[73,8418,8419,8425,8429,8437],{"__ignoreMap":20},[86,8420,8421,8423],{"class":88,"line":89},[86,8422,1478],{"class":942},[86,8424,1481],{"class":813},[86,8426,8427],{"class":88,"line":638},[86,8428,1486],{"class":813},[86,8430,8431,8433,8435],{"class":88,"line":824},[86,8432,1491],{"class":813},[86,8434,1494],{"class":942},[86,8436,1497],{"class":813},[86,8438,8439],{"class":88,"line":836},[86,8440,1062],{"class":813},[15,8442,8443],{},"In Package.xml, please add",[78,8445,8447],{"className":798,"code":8446,"language":800,"meta":20,"style":20},"  \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",[73,8448,8449,8461,8473,8485,8497],{"__ignoreMap":20},[86,8450,8451,8453,8455,8457,8459],{"class":88,"line":89},[86,8452,3912],{"class":813},[86,8454,1402],{"class":817},[86,8456,1405],{"class":813},[86,8458,1402],{"class":817},[86,8460,845],{"class":813},[86,8462,8463,8465,8467,8469,8471],{"class":88,"line":638},[86,8464,3912],{"class":813},[86,8466,1402],{"class":817},[86,8468,1418],{"class":813},[86,8470,1402],{"class":817},[86,8472,845],{"class":813},[86,8474,8475,8477,8479,8481,8483],{"class":88,"line":824},[86,8476,3912],{"class":813},[86,8478,1402],{"class":817},[86,8480,1431],{"class":813},[86,8482,1402],{"class":817},[86,8484,845],{"class":813},[86,8486,8487,8489,8491,8493,8495],{"class":88,"line":836},[86,8488,3912],{"class":813},[86,8490,1402],{"class":817},[86,8492,1444],{"class":813},[86,8494,1402],{"class":817},[86,8496,845],{"class":813},[86,8498,8499,8501,8503,8505,8507],{"class":88,"line":848},[86,8500,3912],{"class":813},[86,8502,1402],{"class":817},[86,8504,1457],{"class":813},[86,8506,1402],{"class":817},[86,8508,845],{"class":813},[15,8510,8511],{},"CMakeLists.txt",[78,8513,8515],{"className":1469,"code":8514,"language":1471,"meta":20,"style":20},"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",[73,8516,8517,8531,8539,8543,8565,8573,8581,8585,8590,8598,8602,8607,8611,8616,8620,8625,8629,8635,8639,8647,8651,8655,8662,8670,8674,8679,8683,8688,8701,8705,8710,8714,8719,8723,8728,8739,8744,8750,8754],{"__ignoreMap":20},[86,8518,8519,8522,8525,8528],{"class":88,"line":89},[86,8520,8521],{"class":942},"cmake_minimum_required",[86,8523,8524],{"class":813},"(",[86,8526,8527],{"class":92},"VERSION",[86,8529,8530],{"class":813}," 3.8)\n",[86,8532,8533,8536],{"class":88,"line":638},[86,8534,8535],{"class":942},"project",[86,8537,8538],{"class":813},"(cpp01_urdf)\n",[86,8540,8541],{"class":88,"line":824},[86,8542,808],{"emptyLinePlaceholder":807},[86,8544,8545,8548,8551,8554,8557,8560,8563],{"class":88,"line":836},[86,8546,8547],{"class":942},"if",[86,8549,8550],{"class":813},"(CMAKE_COMPILER_IS_GNUCXX ",[86,8552,8553],{"class":942},"OR",[86,8555,8556],{"class":813}," CMAKE_CXX_COMPILER_ID ",[86,8558,8559],{"class":942},"MATCHES",[86,8561,8562],{"class":96}," \"Clang\"",[86,8564,1062],{"class":813},[86,8566,8567,8570],{"class":88,"line":848},[86,8568,8569],{"class":942},"  add_compile_options",[86,8571,8572],{"class":813},"(-Wall -Wextra -Wpedantic)\n",[86,8574,8575,8578],{"class":88,"line":859},[86,8576,8577],{"class":942},"endif",[86,8579,8580],{"class":813},"()\n",[86,8582,8583],{"class":88,"line":880},[86,8584,808],{"emptyLinePlaceholder":807},[86,8586,8587],{"class":88,"line":890},[86,8588,8589],{"class":1028},"# find dependencies\n",[86,8591,8592,8595],{"class":88,"line":900},[86,8593,8594],{"class":942},"find_package",[86,8596,8597],{"class":813},"(ament_cmake REQUIRED)\n",[86,8599,8600],{"class":88,"line":910},[86,8601,808],{"emptyLinePlaceholder":807},[86,8603,8604],{"class":88,"line":1043},[86,8605,8606],{"class":1028},"# uncomment the following section in order to fill in\n",[86,8608,8609],{"class":88,"line":1048},[86,8610,808],{"emptyLinePlaceholder":807},[86,8612,8613],{"class":88,"line":1065},[86,8614,8615],{"class":1028},"# further dependencies manually.\n",[86,8617,8618],{"class":88,"line":1087},[86,8619,808],{"emptyLinePlaceholder":807},[86,8621,8622],{"class":88,"line":1107},[86,8623,8624],{"class":1028},"# find_package(\u003Cdependency> REQUIRED)\n",[86,8626,8627],{"class":88,"line":1137},[86,8628,808],{"emptyLinePlaceholder":807},[86,8630,8631,8633],{"class":88,"line":1142},[86,8632,1478],{"class":942},[86,8634,1481],{"class":813},[86,8636,8637],{"class":88,"line":1148},[86,8638,1486],{"class":813},[86,8640,8641,8643,8645],{"class":88,"line":1153},[86,8642,1491],{"class":813},[86,8644,1494],{"class":942},[86,8646,1497],{"class":813},[86,8648,8649],{"class":88,"line":1159},[86,8650,1062],{"class":813},[86,8652,8653],{"class":88,"line":1181},[86,8654,808],{"emptyLinePlaceholder":807},[86,8656,8657,8659],{"class":88,"line":1192},[86,8658,8547],{"class":942},[86,8660,8661],{"class":813},"(BUILD_TESTING)\n",[86,8663,8664,8667],{"class":88,"line":1206},[86,8665,8666],{"class":942},"  find_package",[86,8668,8669],{"class":813},"(ament_lint_auto REQUIRED)\n",[86,8671,8672],{"class":88,"line":1218},[86,8673,808],{"emptyLinePlaceholder":807},[86,8675,8676],{"class":88,"line":1235},[86,8677,8678],{"class":1028},"  # the following line skips the linter which checks for copyrights\n",[86,8680,8681],{"class":88,"line":1241},[86,8682,808],{"emptyLinePlaceholder":807},[86,8684,8685],{"class":88,"line":1246},[86,8686,8687],{"class":1028},"  # comment the line when a copyright and license is added to all source files\n",[86,8689,8690,8693,8696,8699],{"class":88,"line":1252},[86,8691,8692],{"class":942},"  set",[86,8694,8695],{"class":813},"(ament_cmake_copyright_FOUND ",[86,8697,8698],{"class":942},"TRUE",[86,8700,1062],{"class":813},[86,8702,8703],{"class":88,"line":1262},[86,8704,808],{"emptyLinePlaceholder":807},[86,8706,8707],{"class":88,"line":1274},[86,8708,8709],{"class":1028},"  # the following line skips cpplint (only works in a git repo)\n",[86,8711,8712],{"class":88,"line":1284},[86,8713,808],{"emptyLinePlaceholder":807},[86,8715,8716],{"class":88,"line":1289},[86,8717,8718],{"class":1028},"  # comment the line when this package is in a git repo and when\n",[86,8720,8721],{"class":88,"line":1294},[86,8722,808],{"emptyLinePlaceholder":807},[86,8724,8725],{"class":88,"line":1300},[86,8726,8727],{"class":1028},"  # a copyright and license is added to all source files\n",[86,8729,8730,8732,8735,8737],{"class":88,"line":1310},[86,8731,8692],{"class":942},[86,8733,8734],{"class":813},"(ament_cmake_cpplint_FOUND ",[86,8736,8698],{"class":942},[86,8738,1062],{"class":813},[86,8740,8741],{"class":88,"line":1322},[86,8742,8743],{"class":813},"  ament_lint_auto_find_test_dependencies()\n",[86,8745,8746,8748],{"class":88,"line":1332},[86,8747,8577],{"class":942},[86,8749,8580],{"class":813},[86,8751,8752],{"class":88,"line":1337},[86,8753,808],{"emptyLinePlaceholder":807},[86,8755,8756],{"class":88,"line":1343},[86,8757,8758],{"class":813},"ament_package()\n",[15,8760,8761],{},"package.xml",[78,8763,8765],{"className":798,"code":8764,"language":800,"meta":20,"style":20},"\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",[73,8766,8767,8785,8810,8827,8840,8854,8868,8890,8904,8908,8922,8926,8938,8950,8962,8974,8986,8990,9004,9017,9021,9030,9043,9051],{"__ignoreMap":20},[86,8768,8769,8772,8774,8777,8779,8782],{"class":88,"line":89},[86,8770,8771],{"class":813},"\u003C?",[86,8773,800],{"class":817},[86,8775,8776],{"class":92}," version",[86,8778,871],{"class":813},[86,8780,8781],{"class":96},"\"1.0\"",[86,8783,8784],{"class":813},"?>\n",[86,8786,8787,8789,8792,8795,8797,8800,8803,8805,8808],{"class":88,"line":638},[86,8788,8771],{"class":813},[86,8790,8791],{"class":817},"xml-model",[86,8793,8794],{"class":92}," href",[86,8796,871],{"class":813},[86,8798,8799],{"class":96},"\"http://download.ros.org/schema/package_format3.xsd\"",[86,8801,8802],{"class":92}," schematypens",[86,8804,871],{"class":813},[86,8806,8807],{"class":96},"\"http://www.w3.org/2001/XMLSchema\"",[86,8809,8784],{"class":813},[86,8811,8812,8814,8817,8820,8822,8825],{"class":88,"line":824},[86,8813,1399],{"class":813},[86,8815,8816],{"class":817},"package",[86,8818,8819],{"class":92}," format",[86,8821,871],{"class":813},[86,8823,8824],{"class":96},"\"3\"",[86,8826,845],{"class":813},[86,8828,8829,8831,8833,8836,8838],{"class":88,"line":836},[86,8830,3912],{"class":813},[86,8832,1119],{"class":817},[86,8834,8835],{"class":813},">cpp01_urdf\u003C/",[86,8837,1119],{"class":817},[86,8839,845],{"class":813},[86,8841,8842,8844,8847,8850,8852],{"class":88,"line":848},[86,8843,3912],{"class":813},[86,8845,8846],{"class":817},"version",[86,8848,8849],{"class":813},">0.0.0\u003C/",[86,8851,8846],{"class":817},[86,8853,845],{"class":813},[86,8855,8856,8858,8861,8864,8866],{"class":88,"line":859},[86,8857,3912],{"class":813},[86,8859,8860],{"class":817},"description",[86,8862,8863],{"class":813},">TODO: Package description\u003C/",[86,8865,8860],{"class":817},[86,8867,845],{"class":813},[86,8869,8870,8872,8875,8878,8880,8883,8886,8888],{"class":88,"line":880},[86,8871,3912],{"class":813},[86,8873,8874],{"class":817},"maintainer",[86,8876,8877],{"class":92}," email",[86,8879,871],{"class":813},[86,8881,8882],{"class":96},"\"tungchiahui@gmail.com\"",[86,8884,8885],{"class":813},">tungchiahui\u003C/",[86,8887,8874],{"class":817},[86,8889,845],{"class":813},[86,8891,8892,8894,8897,8900,8902],{"class":88,"line":890},[86,8893,3912],{"class":813},[86,8895,8896],{"class":817},"license",[86,8898,8899],{"class":813},">TODO: License declaration\u003C/",[86,8901,8896],{"class":817},[86,8903,845],{"class":813},[86,8905,8906],{"class":88,"line":900},[86,8907,808],{"emptyLinePlaceholder":807},[86,8909,8910,8912,8915,8918,8920],{"class":88,"line":910},[86,8911,3912],{"class":813},[86,8913,8914],{"class":817},"buildtool_depend",[86,8916,8917],{"class":813},">ament_cmake\u003C/",[86,8919,8914],{"class":817},[86,8921,845],{"class":813},[86,8923,8924],{"class":88,"line":1043},[86,8925,808],{"emptyLinePlaceholder":807},[86,8927,8928,8930,8932,8934,8936],{"class":88,"line":1048},[86,8929,3912],{"class":813},[86,8931,1402],{"class":817},[86,8933,1405],{"class":813},[86,8935,1402],{"class":817},[86,8937,845],{"class":813},[86,8939,8940,8942,8944,8946,8948],{"class":88,"line":1065},[86,8941,3912],{"class":813},[86,8943,1402],{"class":817},[86,8945,1418],{"class":813},[86,8947,1402],{"class":817},[86,8949,845],{"class":813},[86,8951,8952,8954,8956,8958,8960],{"class":88,"line":1087},[86,8953,3912],{"class":813},[86,8955,1402],{"class":817},[86,8957,1431],{"class":813},[86,8959,1402],{"class":817},[86,8961,845],{"class":813},[86,8963,8964,8966,8968,8970,8972],{"class":88,"line":1107},[86,8965,3912],{"class":813},[86,8967,1402],{"class":817},[86,8969,1444],{"class":813},[86,8971,1402],{"class":817},[86,8973,845],{"class":813},[86,8975,8976,8978,8980,8982,8984],{"class":88,"line":1137},[86,8977,3912],{"class":813},[86,8979,1402],{"class":817},[86,8981,1457],{"class":813},[86,8983,1402],{"class":817},[86,8985,845],{"class":813},[86,8987,8988],{"class":88,"line":1142},[86,8989,808],{"emptyLinePlaceholder":807},[86,8991,8992,8994,8997,9000,9002],{"class":88,"line":1148},[86,8993,3912],{"class":813},[86,8995,8996],{"class":817},"test_depend",[86,8998,8999],{"class":813},">ament_lint_auto\u003C/",[86,9001,8996],{"class":817},[86,9003,845],{"class":813},[86,9005,9006,9008,9010,9013,9015],{"class":88,"line":1153},[86,9007,3912],{"class":813},[86,9009,8996],{"class":817},[86,9011,9012],{"class":813},">ament_lint_common\u003C/",[86,9014,8996],{"class":817},[86,9016,845],{"class":813},[86,9018,9019],{"class":88,"line":1159},[86,9020,808],{"emptyLinePlaceholder":807},[86,9022,9023,9025,9028],{"class":88,"line":1181},[86,9024,3912],{"class":813},[86,9026,9027],{"class":817},"export",[86,9029,845],{"class":813},[86,9031,9032,9034,9037,9039,9041],{"class":88,"line":1192},[86,9033,1699],{"class":813},[86,9035,9036],{"class":817},"build_type",[86,9038,8917],{"class":813},[86,9040,9036],{"class":817},[86,9042,845],{"class":813},[86,9044,9045,9047,9049],{"class":88,"line":1206},[86,9046,1788],{"class":813},[86,9048,9027],{"class":817},[86,9050,845],{"class":813},[86,9052,9053,9055,9057],{"class":88,"line":1218},[86,9054,4080],{"class":813},[86,9056,8816],{"class":817},[86,9058,845],{"class":813},[141,9060,9061],{"start":859},[144,9062,9063],{},"Write the launch file.",[15,9065,9066],{},"For detailed steps, please refer to the section on core optimizations related to URDF Launch.",[15,9068,9069],{},[18,9070],{"alt":20,"src":9071},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1589.webp",[78,9073,9075],{"className":933,"code":9074,"language":935,"meta":20,"style":20},"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",[73,9076,9077,9087,9097,9101,9105,9109,9113,9117,9121,9125,9129,9139,9149,9153,9157,9161,9165,9169,9173,9177,9181,9185,9189,9193,9197,9201,9205,9209,9213,9217,9221,9225,9229,9239,9243,9253,9263,9267,9273,9277,9291,9295,9313,9329,9333,9355,9359,9375,9383,9393,9403,9415,9419,9423,9428,9432,9436,9440,9444,9448,9452,9456,9460,9464,9469,9477,9487,9495,9499,9503,9511,9521,9531,9535,9539,9551,9555,9559,9563,9571],{"__ignoreMap":20},[86,9078,9079,9081,9083,9085],{"class":88,"line":89},[86,9080,943],{"class":942},[86,9082,946],{"class":813},[86,9084,949],{"class":942},[86,9086,952],{"class":813},[86,9088,9089,9091,9093,9095],{"class":88,"line":638},[86,9090,943],{"class":942},[86,9092,959],{"class":813},[86,9094,949],{"class":942},[86,9096,964],{"class":813},[86,9098,9099],{"class":88,"line":824},[86,9100,808],{"emptyLinePlaceholder":807},[86,9102,9103],{"class":88,"line":836},[86,9104,2025],{"class":1028},[86,9106,9107],{"class":88,"line":848},[86,9108,808],{"emptyLinePlaceholder":807},[86,9110,9111],{"class":88,"line":859},[86,9112,2034],{"class":1028},[86,9114,9115],{"class":88,"line":880},[86,9116,808],{"emptyLinePlaceholder":807},[86,9118,9119],{"class":88,"line":890},[86,9120,2043],{"class":1028},[86,9122,9123],{"class":88,"line":900},[86,9124,808],{"emptyLinePlaceholder":807},[86,9126,9127],{"class":88,"line":910},[86,9128,2052],{"class":1028},[86,9130,9131,9133,9135,9137],{"class":88,"line":1043},[86,9132,943],{"class":942},[86,9134,1014],{"class":813},[86,9136,949],{"class":942},[86,9138,1019],{"class":813},[86,9140,9141,9143,9145,9147],{"class":88,"line":1048},[86,9142,943],{"class":942},[86,9144,1002],{"class":813},[86,9146,949],{"class":942},[86,9148,2680],{"class":813},[86,9150,9151],{"class":88,"line":1065},[86,9152,808],{"emptyLinePlaceholder":807},[86,9154,9155],{"class":88,"line":1087},[86,9156,2079],{"class":1028},[86,9158,9159],{"class":88,"line":1107},[86,9160,808],{"emptyLinePlaceholder":807},[86,9162,9163],{"class":88,"line":1137},[86,9164,2088],{"class":1028},[86,9166,9167],{"class":88,"line":1142},[86,9168,808],{"emptyLinePlaceholder":807},[86,9170,9171],{"class":88,"line":1148},[86,9172,2097],{"class":1028},[86,9174,9175],{"class":88,"line":1153},[86,9176,808],{"emptyLinePlaceholder":807},[86,9178,9179],{"class":88,"line":1159},[86,9180,2106],{"class":1028},[86,9182,9183],{"class":88,"line":1181},[86,9184,808],{"emptyLinePlaceholder":807},[86,9186,9187],{"class":88,"line":1192},[86,9188,2115],{"class":1028},[86,9190,9191],{"class":88,"line":1206},[86,9192,808],{"emptyLinePlaceholder":807},[86,9194,9195],{"class":88,"line":1218},[86,9196,2124],{"class":1028},[86,9198,9199],{"class":88,"line":1235},[86,9200,808],{"emptyLinePlaceholder":807},[86,9202,9203],{"class":88,"line":1241},[86,9204,2133],{"class":1028},[86,9206,9207],{"class":88,"line":1246},[86,9208,808],{"emptyLinePlaceholder":807},[86,9210,9211],{"class":88,"line":1252},[86,9212,2142],{"class":1028},[86,9214,9215],{"class":88,"line":1262},[86,9216,808],{"emptyLinePlaceholder":807},[86,9218,9219],{"class":88,"line":1274},[86,9220,2151],{"class":1028},[86,9222,9223],{"class":88,"line":1284},[86,9224,808],{"emptyLinePlaceholder":807},[86,9226,9227],{"class":88,"line":1289},[86,9228,2160],{"class":1028},[86,9230,9231,9233,9235,9237],{"class":88,"line":1294},[86,9232,943],{"class":942},[86,9234,978],{"class":813},[86,9236,949],{"class":942},[86,9238,983],{"class":813},[86,9240,9241],{"class":88,"line":1300},[86,9242,808],{"emptyLinePlaceholder":807},[86,9244,9245,9247,9249,9251],{"class":88,"line":1310},[86,9246,943],{"class":942},[86,9248,990],{"class":813},[86,9250,949],{"class":942},[86,9252,995],{"class":813},[86,9254,9255,9257,9259,9261],{"class":88,"line":1322},[86,9256,943],{"class":942},[86,9258,1002],{"class":813},[86,9260,949],{"class":942},[86,9262,2195],{"class":813},[86,9264,9265],{"class":88,"line":1332},[86,9266,808],{"emptyLinePlaceholder":807},[86,9268,9269,9271],{"class":88,"line":1337},[86,9270,949],{"class":942},[86,9272,971],{"class":813},[86,9274,9275],{"class":88,"line":1343},[86,9276,808],{"emptyLinePlaceholder":807},[86,9278,9279,9282,9284,9286,9289],{"class":88,"line":1348},[86,9280,9281],{"class":813},"cpp01_urdf_dir ",[86,9283,871],{"class":942},[86,9285,1056],{"class":813},[86,9287,9288],{"class":96},"\"cpp01_urdf\"",[86,9290,1062],{"class":813},[86,9292,9293],{"class":88,"line":1357},[86,9294,808],{"emptyLinePlaceholder":807},[86,9296,9297,9299,9301,9304,9306,9308,9311],{"class":88,"line":1363},[86,9298,3249],{"class":813},[86,9300,871],{"class":942},[86,9302,9303],{"class":813}," os.path.join(cpp01_urdf_dir,",[86,9305,1076],{"class":96},[86,9307,1079],{"class":813},[86,9309,9310],{"class":96},"\"4axisrobot.urdf\"",[86,9312,1062],{"class":813},[86,9314,9315,9317,9319,9321,9323,9325,9327],{"class":88,"line":1369},[86,9316,3267],{"class":813},[86,9318,871],{"class":942},[86,9320,9303],{"class":813},[86,9322,1097],{"class":96},[86,9324,1079],{"class":813},[86,9326,3278],{"class":96},[86,9328,1062],{"class":813},[86,9330,9331],{"class":88,"line":1375},[86,9332,808],{"emptyLinePlaceholder":807},[86,9334,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353],{"class":88,"line":1381},[86,9336,2803],{"class":813},[86,9338,871],{"class":942},[86,9340,1115],{"class":813},[86,9342,1119],{"class":1118},[86,9344,871],{"class":942},[86,9346,1124],{"class":96},[86,9348,1079],{"class":813},[86,9350,1129],{"class":1118},[86,9352,871],{"class":942},[86,9354,1134],{"class":813},[86,9356,9357],{"class":88,"line":2279},[86,9358,808],{"emptyLinePlaceholder":807},[86,9360,9361,9363,9365,9367,9369,9371,9373],{"class":88,"line":2284},[86,9362,2204],{"class":813},[86,9364,871],{"class":942},[86,9366,1167],{"class":813},[86,9368,1170],{"class":96},[86,9370,1173],{"class":813},[86,9372,1124],{"class":96},[86,9374,1178],{"class":813},[86,9376,9377,9379,9381],{"class":88,"line":2294},[86,9378,2232],{"class":813},[86,9380,871],{"class":942},[86,9382,1189],{"class":813},[86,9384,9385,9387,9389,9391],{"class":88,"line":2305},[86,9386,2241],{"class":1118},[86,9388,871],{"class":942},[86,9390,1200],{"class":96},[86,9392,1203],{"class":813},[86,9394,9395,9397,9399,9401],{"class":88,"line":2314},[86,9396,2252],{"class":1118},[86,9398,871],{"class":942},[86,9400,1200],{"class":96},[86,9402,1203],{"class":813},[86,9404,9405,9407,9409,9411,9413],{"class":88,"line":2319},[86,9406,2263],{"class":1118},[86,9408,871],{"class":942},[86,9410,1226],{"class":813},[86,9412,1229],{"class":96},[86,9414,2272],{"class":813},[86,9416,9417],{"class":88,"line":2324},[86,9418,1062],{"class":813},[86,9420,9421],{"class":88,"line":2333},[86,9422,808],{"emptyLinePlaceholder":807},[86,9424,9425],{"class":88,"line":2956},[86,9426,9427],{"class":1028},"# 关节信息节点(建议)\n",[86,9429,9430],{"class":88,"line":2967},[86,9431,808],{"emptyLinePlaceholder":807},[86,9433,9434],{"class":88,"line":2995},[86,9435,3388],{"class":1028},[86,9437,9438],{"class":88,"line":3000},[86,9439,808],{"emptyLinePlaceholder":807},[86,9441,9442],{"class":88,"line":3005},[86,9443,3397],{"class":1028},[86,9445,9446],{"class":88,"line":3014},[86,9447,808],{"emptyLinePlaceholder":807},[86,9449,9450],{"class":88,"line":3404},[86,9451,3407],{"class":1028},[86,9453,9454],{"class":88,"line":3410},[86,9455,808],{"emptyLinePlaceholder":807},[86,9457,9458],{"class":88,"line":3415},[86,9459,3418],{"class":1028},[86,9461,9462],{"class":88,"line":3421},[86,9463,808],{"emptyLinePlaceholder":807},[86,9465,9466],{"class":88,"line":3426},[86,9467,9468],{"class":1028},"# 关节信息节点图形界面\n",[86,9470,9471,9473,9475],{"class":88,"line":3432},[86,9472,2905],{"class":813},[86,9474,871],{"class":942},[86,9476,1189],{"class":813},[86,9478,9479,9481,9483,9485],{"class":88,"line":3441},[86,9480,2241],{"class":1118},[86,9482,871],{"class":942},[86,9484,3448],{"class":96},[86,9486,1203],{"class":813},[86,9488,9489,9491,9493],{"class":88,"line":3453},[86,9490,2252],{"class":1118},[86,9492,871],{"class":942},[86,9494,3460],{"class":96},[86,9496,9497],{"class":88,"line":3463},[86,9498,1062],{"class":813},[86,9500,9501],{"class":88,"line":3468},[86,9502,808],{"emptyLinePlaceholder":807},[86,9504,9505,9507,9509],{"class":88,"line":3473},[86,9506,2287],{"class":813},[86,9508,871],{"class":942},[86,9510,1189],{"class":813},[86,9512,9513,9515,9517,9519],{"class":88,"line":3482},[86,9514,2241],{"class":1118},[86,9516,871],{"class":942},[86,9518,1317],{"class":96},[86,9520,1203],{"class":813},[86,9522,9523,9525,9527,9529],{"class":88,"line":3493},[86,9524,2252],{"class":1118},[86,9526,871],{"class":942},[86,9528,1317],{"class":96},[86,9530,1203],{"class":813},[86,9532,9533],{"class":88,"line":3504},[86,9534,808],{"emptyLinePlaceholder":807},[86,9536,9537],{"class":88,"line":3509},[86,9538,3512],{"class":1028},[86,9540,9541,9543,9545,9547,9549],{"class":88,"line":3515},[86,9542,2970],{"class":1118},[86,9544,871],{"class":942},[86,9546,2975],{"class":813},[86,9548,2978],{"class":96},[86,9550,3526],{"class":813},[86,9552,9553],{"class":88,"line":3529},[86,9554,808],{"emptyLinePlaceholder":807},[86,9556,9557],{"class":88,"line":3534},[86,9558,1238],{"class":813},[86,9560,9561],{"class":88,"line":3539},[86,9562,808],{"emptyLinePlaceholder":807},[86,9564,9565,9567,9569],{"class":88,"line":3544},[86,9566,1034],{"class":942},[86,9568,1037],{"class":92},[86,9570,1040],{"class":813},[86,9572,9573,9575],{"class":88,"line":3553},[86,9574,1351],{"class":942},[86,9576,3019],{"class":813},[141,9578,9579],{"start":880},[144,9580,9581],{},"Modify the URDF file.",[15,9583,9584],{},"The main changes are two: one is the path for meshes, and the other is removing comments that could easily cause errors.",[15,9586,9587],{},"Mainly because the workspace paths for ROS1 and ROS2 are different, we only need to modify the path-related content, such as the Meshes path.",[15,9589,9590,9593],{},[18,9591],{"alt":20,"src":9592},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1590.webp",[18,9594],{"alt":20,"src":9595},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1591.webp",[15,9597,4446,9598,9600,9601,9603,9604,9607,9608,9610],{},[73,9599,4538],{}," typically refers to the ",[73,9602,4549],{}," directory, so we need to start writing from the ",[73,9605,9606],{},"cpp01_urdf"," level (the ",[73,9609,4549],{}," directory will only appear after compilation).",[15,9612,9613],{},[18,9614],{"alt":20,"src":9615},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1592.webp",[15,9617,9618],{},"Then press Ctrl+H",[15,9620,9621],{},[18,9622],{"alt":20,"src":9623},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1593.webp",[15,9625,9626],{},[18,9627],{"alt":20,"src":9628},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1594.webp",[15,9630,9631],{},"Then you also need to delete the comments at the beginning of the URDF file, otherwise it will also cause errors.",[15,9633,9634],{},[18,9635],{"alt":20,"src":9636},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1595.webp",[15,9638,9639],{},"Below is the replaced URDF file:",[78,9641,9643],{"className":798,"code":9642,"language":800,"meta":20,"style":20},"\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",[73,9644,9645,9667,9674,9686,9693,9704,9712,9719,9729,9740,9747,9759,9766,9776,9786,9796,9806,9816,9828,9836,9844,9850,9859,9869,9877,9884,9896,9904,9911,9923,9930,9942,9950,9958,9966,9972,9980,9990,9998,10004,10014,10022,10030,10038,10044,10055,10063,10069,10078,10088,10094,10105,10111,10120,10129,10138,10147,10156,10167,10175,10183,10189,10197,10207,10215,10221,10232,10240,10246,10256,10262,10273,10281,10289,10297,10303,10311,10321,10329,10335,10345,10353,10361,10369,10376,10385,10397,10403,10413,10425,10432,10443,10450,10460,10467,10478,10485,10495,10505,10515,10527,10535,10541,10552,10560,10566,10575,10585,10591,10602,10608,10617,10627,10637,10647,10657,10669,10678,10687,10694,10703,10714,10723,10730,10742,10751,10758,10769,10776,10787,10796,10805,10814,10821,10830,10841,10850,10857,10868,10877,10886,10895,10902,10912,10923,10930,10940,10952,10959,10970,10977,10988,10995,11007,11014,11023,11032,11041,11052,11061,11068,11080,11089,11096,11106,11117,11124,11136,11143,11153,11163,11173,11183,11193,11205,11214,11223,11230,11239,11250,11259,11266,11278,11287,11294,11305,11312,11323,11332,11341,11350,11357,11366,11377,11386,11393,11404,11413,11422,11431,11438,11448,11459,11466,11476,11488,11495,11506,11513,11524,11531,11542,11549,11558,11567,11576,11587,11596,11603,11615,11624,11631,11641,11652,11659,11671,11678,11688,11698,11708,11718,11728,11740,11749,11758,11765,11774,11785,11794,11801,11813,11822,11829,11840,11847,11858,11867,11876,11885,11892,11901,11912,11921,11928,11939,11948,11957,11966,11973,11983,11994,12001,12011,12023,12030,12041,12048,12059,12066,12077,12084,12093,12102,12111,12122,12131],{"__ignoreMap":20},[86,9646,9647,9649,9651,9653,9655,9657,9660,9662,9665],{"class":88,"line":89},[86,9648,8771],{"class":813},[86,9650,800],{"class":817},[86,9652,8776],{"class":92},[86,9654,871],{"class":813},[86,9656,8781],{"class":96},[86,9658,9659],{"class":92}," encoding",[86,9661,871],{"class":813},[86,9663,9664],{"class":96},"\"utf-8\"",[86,9666,8784],{"class":813},[86,9668,9669,9671],{"class":88,"line":638},[86,9670,1399],{"class":813},[86,9672,9673],{"class":817},"robot\n",[86,9675,9676,9679,9681,9684],{"class":88,"line":824},[86,9677,9678],{"class":92},"  name",[86,9680,871],{"class":813},[86,9682,9683],{"class":96},"\"4axisrobot\"",[86,9685,845],{"class":813},[86,9687,9688,9690],{"class":88,"line":836},[86,9689,3912],{"class":813},[86,9691,9692],{"class":817},"link\n",[86,9694,9695,9698,9700,9702],{"class":88,"line":848},[86,9696,9697],{"class":92},"    name",[86,9699,871],{"class":813},[86,9701,1708],{"class":96},[86,9703,845],{"class":813},[86,9705,9706,9708,9710],{"class":88,"line":859},[86,9707,1699],{"class":813},[86,9709,3827],{"class":817},[86,9711,845],{"class":813},[86,9713,9714,9716],{"class":88,"line":880},[86,9715,1719],{"class":813},[86,9717,9718],{"class":817},"origin\n",[86,9720,9721,9724,9726],{"class":88,"line":890},[86,9722,9723],{"class":92},"        xyz",[86,9725,871],{"class":813},[86,9727,9728],{"class":96},"\"-0.0819771145953119 -0.0394328123681598 -0.0605612328464761\"\n",[86,9730,9731,9734,9736,9738],{"class":88,"line":900},[86,9732,9733],{"class":92},"        rpy",[86,9735,871],{"class":813},[86,9737,4032],{"class":96},[86,9739,3940],{"class":813},[86,9741,9742,9744],{"class":88,"line":910},[86,9743,1719],{"class":813},[86,9745,9746],{"class":817},"mass\n",[86,9748,9749,9752,9754,9757],{"class":88,"line":1043},[86,9750,9751],{"class":92},"        value",[86,9753,871],{"class":813},[86,9755,9756],{"class":96},"\"7.43807257011133\"",[86,9758,3940],{"class":813},[86,9760,9761,9763],{"class":88,"line":1048},[86,9762,1719],{"class":813},[86,9764,9765],{"class":817},"inertia\n",[86,9767,9768,9771,9773],{"class":88,"line":1065},[86,9769,9770],{"class":92},"        ixx",[86,9772,871],{"class":813},[86,9774,9775],{"class":96},"\"0.33173827700719\"\n",[86,9777,9778,9781,9783],{"class":88,"line":1087},[86,9779,9780],{"class":92},"        ixy",[86,9782,871],{"class":813},[86,9784,9785],{"class":96},"\"-1.91350798633049E-05\"\n",[86,9787,9788,9791,9793],{"class":88,"line":1107},[86,9789,9790],{"class":92},"        ixz",[86,9792,871],{"class":813},[86,9794,9795],{"class":96},"\"-2.38586363043925E-05\"\n",[86,9797,9798,9801,9803],{"class":88,"line":1137},[86,9799,9800],{"class":92},"        iyy",[86,9802,871],{"class":813},[86,9804,9805],{"class":96},"\"0.510937907009661\"\n",[86,9807,9808,9811,9813],{"class":88,"line":1142},[86,9809,9810],{"class":92},"        iyz",[86,9812,871],{"class":813},[86,9814,9815],{"class":96},"\"1.14706407748075E-05\"\n",[86,9817,9818,9821,9823,9826],{"class":88,"line":1148},[86,9819,9820],{"class":92},"        izz",[86,9822,871],{"class":813},[86,9824,9825],{"class":96},"\"0.66107272632796\"",[86,9827,3940],{"class":813},[86,9829,9830,9832,9834],{"class":88,"line":1153},[86,9831,1779],{"class":813},[86,9833,3827],{"class":817},[86,9835,845],{"class":813},[86,9837,9838,9840,9842],{"class":88,"line":1159},[86,9839,1699],{"class":813},[86,9841,842],{"class":817},[86,9843,845],{"class":813},[86,9845,9846,9848],{"class":88,"line":1181},[86,9847,1719],{"class":813},[86,9849,9718],{"class":817},[86,9851,9852,9854,9856],{"class":88,"line":1192},[86,9853,9723],{"class":92},[86,9855,871],{"class":813},[86,9857,9858],{"class":96},"\"0 0 0\"\n",[86,9860,9861,9863,9865,9867],{"class":88,"line":1206},[86,9862,9733],{"class":92},[86,9864,871],{"class":813},[86,9866,4032],{"class":96},[86,9868,3940],{"class":813},[86,9870,9871,9873,9875],{"class":88,"line":1218},[86,9872,1719],{"class":813},[86,9874,854],{"class":817},[86,9876,845],{"class":813},[86,9878,9879,9881],{"class":88,"line":1235},[86,9880,1732],{"class":813},[86,9882,9883],{"class":817},"mesh\n",[86,9885,9886,9889,9891,9894],{"class":88,"line":1241},[86,9887,9888],{"class":92},"          filename",[86,9890,871],{"class":813},[86,9892,9893],{"class":96},"\"package://cpp01_urdf/meshes/base_link.STL\"",[86,9895,3940],{"class":813},[86,9897,9898,9900,9902],{"class":88,"line":1246},[86,9899,1770],{"class":813},[86,9901,854],{"class":817},[86,9903,845],{"class":813},[86,9905,9906,9908],{"class":88,"line":1252},[86,9907,1719],{"class":813},[86,9909,9910],{"class":817},"material\n",[86,9912,9913,9916,9918,9921],{"class":88,"line":1262},[86,9914,9915],{"class":92},"        name",[86,9917,871],{"class":813},[86,9919,9920],{"class":96},"\"\"",[86,9922,845],{"class":813},[86,9924,9925,9927],{"class":88,"line":1274},[86,9926,1732],{"class":813},[86,9928,9929],{"class":817},"color\n",[86,9931,9932,9935,9937,9940],{"class":88,"line":1284},[86,9933,9934],{"class":92},"          rgba",[86,9936,871],{"class":813},[86,9938,9939],{"class":96},"\"0.792156862745098 0.819607843137255 0.933333333333333 1\"",[86,9941,3940],{"class":813},[86,9943,9944,9946,9948],{"class":88,"line":1289},[86,9945,1770],{"class":813},[86,9947,3738],{"class":817},[86,9949,845],{"class":813},[86,9951,9952,9954,9956],{"class":88,"line":1294},[86,9953,1779],{"class":813},[86,9955,842],{"class":817},[86,9957,845],{"class":813},[86,9959,9960,9962,9964],{"class":88,"line":1300},[86,9961,1699],{"class":813},[86,9963,3791],{"class":817},[86,9965,845],{"class":813},[86,9967,9968,9970],{"class":88,"line":1310},[86,9969,1719],{"class":813},[86,9971,9718],{"class":817},[86,9973,9974,9976,9978],{"class":88,"line":1322},[86,9975,9723],{"class":92},[86,9977,871],{"class":813},[86,9979,9858],{"class":96},[86,9981,9982,9984,9986,9988],{"class":88,"line":1332},[86,9983,9733],{"class":92},[86,9985,871],{"class":813},[86,9987,4032],{"class":96},[86,9989,3940],{"class":813},[86,9991,9992,9994,9996],{"class":88,"line":1337},[86,9993,1719],{"class":813},[86,9995,854],{"class":817},[86,9997,845],{"class":813},[86,9999,10000,10002],{"class":88,"line":1343},[86,10001,1732],{"class":813},[86,10003,9883],{"class":817},[86,10005,10006,10008,10010,10012],{"class":88,"line":1348},[86,10007,9888],{"class":92},[86,10009,871],{"class":813},[86,10011,9893],{"class":96},[86,10013,3940],{"class":813},[86,10015,10016,10018,10020],{"class":88,"line":1357},[86,10017,1770],{"class":813},[86,10019,854],{"class":817},[86,10021,845],{"class":813},[86,10023,10024,10026,10028],{"class":88,"line":1363},[86,10025,1779],{"class":813},[86,10027,3791],{"class":817},[86,10029,845],{"class":813},[86,10031,10032,10034,10036],{"class":88,"line":1369},[86,10033,1788],{"class":813},[86,10035,830],{"class":817},[86,10037,845],{"class":813},[86,10039,10040,10042],{"class":88,"line":1375},[86,10041,3912],{"class":813},[86,10043,9692],{"class":817},[86,10045,10046,10048,10050,10053],{"class":88,"line":1381},[86,10047,9697],{"class":92},[86,10049,871],{"class":813},[86,10051,10052],{"class":96},"\"link1\"",[86,10054,845],{"class":813},[86,10056,10057,10059,10061],{"class":88,"line":2279},[86,10058,1699],{"class":813},[86,10060,3827],{"class":817},[86,10062,845],{"class":813},[86,10064,10065,10067],{"class":88,"line":2284},[86,10066,1719],{"class":813},[86,10068,9718],{"class":817},[86,10070,10071,10073,10075],{"class":88,"line":2294},[86,10072,9723],{"class":92},[86,10074,871],{"class":813},[86,10076,10077],{"class":96},"\"0.19141 -0.050676 -0.030057\"\n",[86,10079,10080,10082,10084,10086],{"class":88,"line":2305},[86,10081,9733],{"class":92},[86,10083,871],{"class":813},[86,10085,4032],{"class":96},[86,10087,3940],{"class":813},[86,10089,10090,10092],{"class":88,"line":2314},[86,10091,1719],{"class":813},[86,10093,9746],{"class":817},[86,10095,10096,10098,10100,10103],{"class":88,"line":2319},[86,10097,9751],{"class":92},[86,10099,871],{"class":813},[86,10101,10102],{"class":96},"\"21.822\"",[86,10104,3940],{"class":813},[86,10106,10107,10109],{"class":88,"line":2324},[86,10108,1719],{"class":813},[86,10110,9765],{"class":817},[86,10112,10113,10115,10117],{"class":88,"line":2333},[86,10114,9770],{"class":92},[86,10116,871],{"class":813},[86,10118,10119],{"class":96},"\"0.50464\"\n",[86,10121,10122,10124,10126],{"class":88,"line":2956},[86,10123,9780],{"class":92},[86,10125,871],{"class":813},[86,10127,10128],{"class":96},"\"0.13295\"\n",[86,10130,10131,10133,10135],{"class":88,"line":2967},[86,10132,9790],{"class":92},[86,10134,871],{"class":813},[86,10136,10137],{"class":96},"\"0.087353\"\n",[86,10139,10140,10142,10144],{"class":88,"line":2995},[86,10141,9800],{"class":92},[86,10143,871],{"class":813},[86,10145,10146],{"class":96},"\"0.59136\"\n",[86,10148,10149,10151,10153],{"class":88,"line":3000},[86,10150,9810],{"class":92},[86,10152,871],{"class":813},[86,10154,10155],{"class":96},"\"-0.066053\"\n",[86,10157,10158,10160,10162,10165],{"class":88,"line":3005},[86,10159,9820],{"class":92},[86,10161,871],{"class":813},[86,10163,10164],{"class":96},"\"0.64081\"",[86,10166,3940],{"class":813},[86,10168,10169,10171,10173],{"class":88,"line":3014},[86,10170,1779],{"class":813},[86,10172,3827],{"class":817},[86,10174,845],{"class":813},[86,10176,10177,10179,10181],{"class":88,"line":3404},[86,10178,1699],{"class":813},[86,10180,842],{"class":817},[86,10182,845],{"class":813},[86,10184,10185,10187],{"class":88,"line":3410},[86,10186,1719],{"class":813},[86,10188,9718],{"class":817},[86,10190,10191,10193,10195],{"class":88,"line":3415},[86,10192,9723],{"class":92},[86,10194,871],{"class":813},[86,10196,9858],{"class":96},[86,10198,10199,10201,10203,10205],{"class":88,"line":3421},[86,10200,9733],{"class":92},[86,10202,871],{"class":813},[86,10204,4032],{"class":96},[86,10206,3940],{"class":813},[86,10208,10209,10211,10213],{"class":88,"line":3426},[86,10210,1719],{"class":813},[86,10212,854],{"class":817},[86,10214,845],{"class":813},[86,10216,10217,10219],{"class":88,"line":3432},[86,10218,1732],{"class":813},[86,10220,9883],{"class":817},[86,10222,10223,10225,10227,10230],{"class":88,"line":3441},[86,10224,9888],{"class":92},[86,10226,871],{"class":813},[86,10228,10229],{"class":96},"\"package://cpp01_urdf/meshes/link1.STL\"",[86,10231,3940],{"class":813},[86,10233,10234,10236,10238],{"class":88,"line":3453},[86,10235,1770],{"class":813},[86,10237,854],{"class":817},[86,10239,845],{"class":813},[86,10241,10242,10244],{"class":88,"line":3463},[86,10243,1719],{"class":813},[86,10245,9910],{"class":817},[86,10247,10248,10250,10252,10254],{"class":88,"line":3468},[86,10249,9915],{"class":92},[86,10251,871],{"class":813},[86,10253,9920],{"class":96},[86,10255,845],{"class":813},[86,10257,10258,10260],{"class":88,"line":3473},[86,10259,1732],{"class":813},[86,10261,9929],{"class":817},[86,10263,10264,10266,10268,10271],{"class":88,"line":3482},[86,10265,9934],{"class":92},[86,10267,871],{"class":813},[86,10269,10270],{"class":96},"\"0.79216 0.81961 0.93333 1\"",[86,10272,3940],{"class":813},[86,10274,10275,10277,10279],{"class":88,"line":3493},[86,10276,1770],{"class":813},[86,10278,3738],{"class":817},[86,10280,845],{"class":813},[86,10282,10283,10285,10287],{"class":88,"line":3504},[86,10284,1779],{"class":813},[86,10286,842],{"class":817},[86,10288,845],{"class":813},[86,10290,10291,10293,10295],{"class":88,"line":3509},[86,10292,1699],{"class":813},[86,10294,3791],{"class":817},[86,10296,845],{"class":813},[86,10298,10299,10301],{"class":88,"line":3515},[86,10300,1719],{"class":813},[86,10302,9718],{"class":817},[86,10304,10305,10307,10309],{"class":88,"line":3529},[86,10306,9723],{"class":92},[86,10308,871],{"class":813},[86,10310,9858],{"class":96},[86,10312,10313,10315,10317,10319],{"class":88,"line":3534},[86,10314,9733],{"class":92},[86,10316,871],{"class":813},[86,10318,4032],{"class":96},[86,10320,3940],{"class":813},[86,10322,10323,10325,10327],{"class":88,"line":3539},[86,10324,1719],{"class":813},[86,10326,854],{"class":817},[86,10328,845],{"class":813},[86,10330,10331,10333],{"class":88,"line":3544},[86,10332,1732],{"class":813},[86,10334,9883],{"class":817},[86,10336,10337,10339,10341,10343],{"class":88,"line":3553},[86,10338,9888],{"class":92},[86,10340,871],{"class":813},[86,10342,10229],{"class":96},[86,10344,3940],{"class":813},[86,10346,10347,10349,10351],{"class":88,"line":7381},[86,10348,1770],{"class":813},[86,10350,854],{"class":817},[86,10352,845],{"class":813},[86,10354,10355,10357,10359],{"class":88,"line":7396},[86,10356,1779],{"class":813},[86,10358,3791],{"class":817},[86,10360,845],{"class":813},[86,10362,10363,10365,10367],{"class":88,"line":7405},[86,10364,1788],{"class":813},[86,10366,830],{"class":817},[86,10368,845],{"class":813},[86,10370,10371,10373],{"class":88,"line":7414},[86,10372,3912],{"class":813},[86,10374,10375],{"class":817},"joint\n",[86,10377,10378,10380,10382],{"class":88,"line":7419},[86,10379,9697],{"class":92},[86,10381,871],{"class":813},[86,10383,10384],{"class":96},"\"joint1\"\n",[86,10386,10387,10390,10392,10395],{"class":88,"line":7441},[86,10388,10389],{"class":92},"    type",[86,10391,871],{"class":813},[86,10393,10394],{"class":96},"\"revolute\"",[86,10396,845],{"class":813},[86,10398,10399,10401],{"class":88,"line":7456},[86,10400,1699],{"class":813},[86,10402,9718],{"class":817},[86,10404,10405,10408,10410],{"class":88,"line":7471},[86,10406,10407],{"class":92},"      xyz",[86,10409,871],{"class":813},[86,10411,10412],{"class":96},"\"-0.081947 -0.039447 0.11191\"\n",[86,10414,10415,10418,10420,10423],{"class":88,"line":7476},[86,10416,10417],{"class":92},"      rpy",[86,10419,871],{"class":813},[86,10421,10422],{"class":96},"\"0.40394 -1.5708 0\"",[86,10424,3940],{"class":813},[86,10426,10427,10429],{"class":88,"line":7498},[86,10428,1699],{"class":813},[86,10430,10431],{"class":817},"parent\n",[86,10433,10434,10437,10439,10441],{"class":88,"line":7513},[86,10435,10436],{"class":92},"      link",[86,10438,871],{"class":813},[86,10440,1708],{"class":96},[86,10442,3940],{"class":813},[86,10444,10445,10447],{"class":88,"line":7522},[86,10446,1699],{"class":813},[86,10448,10449],{"class":817},"child\n",[86,10451,10452,10454,10456,10458],{"class":88,"line":7527},[86,10453,10436],{"class":92},[86,10455,871],{"class":813},[86,10457,10052],{"class":96},[86,10459,3940],{"class":813},[86,10461,10462,10464],{"class":88,"line":7543},[86,10463,1699],{"class":813},[86,10465,10466],{"class":817},"axis\n",[86,10468,10469,10471,10473,10476],{"class":88,"line":7552},[86,10470,10407],{"class":92},[86,10472,871],{"class":813},[86,10474,10475],{"class":96},"\"1 0 0\"",[86,10477,3940],{"class":813},[86,10479,10480,10482],{"class":88,"line":7561},[86,10481,1699],{"class":813},[86,10483,10484],{"class":817},"limit\n",[86,10486,10487,10490,10492],{"class":88,"line":7582},[86,10488,10489],{"class":92},"      lower",[86,10491,871],{"class":813},[86,10493,10494],{"class":96},"\"-3.14\"\n",[86,10496,10497,10500,10502],{"class":88,"line":7591},[86,10498,10499],{"class":92},"      upper",[86,10501,871],{"class":813},[86,10503,10504],{"class":96},"\"3.14\"\n",[86,10506,10507,10510,10512],{"class":88,"line":7612},[86,10508,10509],{"class":92},"      effort",[86,10511,871],{"class":813},[86,10513,10514],{"class":96},"\"100\"\n",[86,10516,10517,10520,10522,10525],{"class":88,"line":7627},[86,10518,10519],{"class":92},"      velocity",[86,10521,871],{"class":813},[86,10523,10524],{"class":96},"\"1\"",[86,10526,3940],{"class":813},[86,10528,10529,10531,10533],{"class":88,"line":7636},[86,10530,1788],{"class":813},[86,10532,4588],{"class":817},[86,10534,845],{"class":813},[86,10536,10537,10539],{"class":88,"line":7645},[86,10538,3912],{"class":813},[86,10540,9692],{"class":817},[86,10542,10543,10545,10547,10550],{"class":88,"line":7650},[86,10544,9697],{"class":92},[86,10546,871],{"class":813},[86,10548,10549],{"class":96},"\"link2\"",[86,10551,845],{"class":813},[86,10553,10554,10556,10558],{"class":88,"line":7672},[86,10555,1699],{"class":813},[86,10557,3827],{"class":817},[86,10559,845],{"class":813},[86,10561,10562,10564],{"class":88,"line":7687},[86,10563,1719],{"class":813},[86,10565,9718],{"class":817},[86,10567,10568,10570,10572],{"class":88,"line":7702},[86,10569,9723],{"class":92},[86,10571,871],{"class":813},[86,10573,10574],{"class":96},"\"0.00711598521454873 0.430460941882332 -0.181074256126024\"\n",[86,10576,10577,10579,10581,10583],{"class":88,"line":7707},[86,10578,9733],{"class":92},[86,10580,871],{"class":813},[86,10582,4032],{"class":96},[86,10584,3940],{"class":813},[86,10586,10587,10589],{"class":88,"line":7729},[86,10588,1719],{"class":813},[86,10590,9746],{"class":817},[86,10592,10593,10595,10597,10600],{"class":88,"line":7744},[86,10594,9751],{"class":92},[86,10596,871],{"class":813},[86,10598,10599],{"class":96},"\"30.6115349647897\"",[86,10601,3940],{"class":813},[86,10603,10604,10606],{"class":88,"line":7753},[86,10605,1719],{"class":813},[86,10607,9765],{"class":817},[86,10609,10610,10612,10614],{"class":88,"line":7758},[86,10611,9770],{"class":92},[86,10613,871],{"class":813},[86,10615,10616],{"class":96},"\"2.84056101478768\"\n",[86,10618,10620,10622,10624],{"class":88,"line":10619},112,[86,10621,9780],{"class":92},[86,10623,871],{"class":813},[86,10625,10626],{"class":96},"\"0.00176700425270318\"\n",[86,10628,10630,10632,10634],{"class":88,"line":10629},113,[86,10631,9790],{"class":92},[86,10633,871],{"class":813},[86,10635,10636],{"class":96},"\"-0.000605507690039326\"\n",[86,10638,10640,10642,10644],{"class":88,"line":10639},114,[86,10641,9800],{"class":92},[86,10643,871],{"class":813},[86,10645,10646],{"class":96},"\"0.803420593303961\"\n",[86,10648,10650,10652,10654],{"class":88,"line":10649},115,[86,10651,9810],{"class":92},[86,10653,871],{"class":813},[86,10655,10656],{"class":96},"\"0.881921487314161\"\n",[86,10658,10660,10662,10664,10667],{"class":88,"line":10659},116,[86,10661,9820],{"class":92},[86,10663,871],{"class":813},[86,10665,10666],{"class":96},"\"2.25142021571439\"",[86,10668,3940],{"class":813},[86,10670,10672,10674,10676],{"class":88,"line":10671},117,[86,10673,1779],{"class":813},[86,10675,3827],{"class":817},[86,10677,845],{"class":813},[86,10679,10681,10683,10685],{"class":88,"line":10680},118,[86,10682,1699],{"class":813},[86,10684,842],{"class":817},[86,10686,845],{"class":813},[86,10688,10690,10692],{"class":88,"line":10689},119,[86,10691,1719],{"class":813},[86,10693,9718],{"class":817},[86,10695,10697,10699,10701],{"class":88,"line":10696},120,[86,10698,9723],{"class":92},[86,10700,871],{"class":813},[86,10702,9858],{"class":96},[86,10704,10706,10708,10710,10712],{"class":88,"line":10705},121,[86,10707,9733],{"class":92},[86,10709,871],{"class":813},[86,10711,4032],{"class":96},[86,10713,3940],{"class":813},[86,10715,10717,10719,10721],{"class":88,"line":10716},122,[86,10718,1719],{"class":813},[86,10720,854],{"class":817},[86,10722,845],{"class":813},[86,10724,10726,10728],{"class":88,"line":10725},123,[86,10727,1732],{"class":813},[86,10729,9883],{"class":817},[86,10731,10733,10735,10737,10740],{"class":88,"line":10732},124,[86,10734,9888],{"class":92},[86,10736,871],{"class":813},[86,10738,10739],{"class":96},"\"package://cpp01_urdf/meshes/link2.STL\"",[86,10741,3940],{"class":813},[86,10743,10745,10747,10749],{"class":88,"line":10744},125,[86,10746,1770],{"class":813},[86,10748,854],{"class":817},[86,10750,845],{"class":813},[86,10752,10754,10756],{"class":88,"line":10753},126,[86,10755,1719],{"class":813},[86,10757,9910],{"class":817},[86,10759,10761,10763,10765,10767],{"class":88,"line":10760},127,[86,10762,9915],{"class":92},[86,10764,871],{"class":813},[86,10766,9920],{"class":96},[86,10768,845],{"class":813},[86,10770,10772,10774],{"class":88,"line":10771},128,[86,10773,1732],{"class":813},[86,10775,9929],{"class":817},[86,10777,10779,10781,10783,10785],{"class":88,"line":10778},129,[86,10780,9934],{"class":92},[86,10782,871],{"class":813},[86,10784,9939],{"class":96},[86,10786,3940],{"class":813},[86,10788,10790,10792,10794],{"class":88,"line":10789},130,[86,10791,1770],{"class":813},[86,10793,3738],{"class":817},[86,10795,845],{"class":813},[86,10797,10799,10801,10803],{"class":88,"line":10798},131,[86,10800,1779],{"class":813},[86,10802,842],{"class":817},[86,10804,845],{"class":813},[86,10806,10808,10810,10812],{"class":88,"line":10807},132,[86,10809,1699],{"class":813},[86,10811,3791],{"class":817},[86,10813,845],{"class":813},[86,10815,10817,10819],{"class":88,"line":10816},133,[86,10818,1719],{"class":813},[86,10820,9718],{"class":817},[86,10822,10824,10826,10828],{"class":88,"line":10823},134,[86,10825,9723],{"class":92},[86,10827,871],{"class":813},[86,10829,9858],{"class":96},[86,10831,10833,10835,10837,10839],{"class":88,"line":10832},135,[86,10834,9733],{"class":92},[86,10836,871],{"class":813},[86,10838,4032],{"class":96},[86,10840,3940],{"class":813},[86,10842,10844,10846,10848],{"class":88,"line":10843},136,[86,10845,1719],{"class":813},[86,10847,854],{"class":817},[86,10849,845],{"class":813},[86,10851,10853,10855],{"class":88,"line":10852},137,[86,10854,1732],{"class":813},[86,10856,9883],{"class":817},[86,10858,10860,10862,10864,10866],{"class":88,"line":10859},138,[86,10861,9888],{"class":92},[86,10863,871],{"class":813},[86,10865,10739],{"class":96},[86,10867,3940],{"class":813},[86,10869,10871,10873,10875],{"class":88,"line":10870},139,[86,10872,1770],{"class":813},[86,10874,854],{"class":817},[86,10876,845],{"class":813},[86,10878,10880,10882,10884],{"class":88,"line":10879},140,[86,10881,1779],{"class":813},[86,10883,3791],{"class":817},[86,10885,845],{"class":813},[86,10887,10889,10891,10893],{"class":88,"line":10888},141,[86,10890,1788],{"class":813},[86,10892,830],{"class":817},[86,10894,845],{"class":813},[86,10896,10898,10900],{"class":88,"line":10897},142,[86,10899,3912],{"class":813},[86,10901,10375],{"class":817},[86,10903,10905,10907,10909],{"class":88,"line":10904},143,[86,10906,9697],{"class":92},[86,10908,871],{"class":813},[86,10910,10911],{"class":96},"\"joint2\"\n",[86,10913,10915,10917,10919,10921],{"class":88,"line":10914},144,[86,10916,10389],{"class":92},[86,10918,871],{"class":813},[86,10920,10394],{"class":96},[86,10922,845],{"class":813},[86,10924,10926,10928],{"class":88,"line":10925},145,[86,10927,1699],{"class":813},[86,10929,9718],{"class":817},[86,10931,10933,10935,10937],{"class":88,"line":10932},146,[86,10934,10407],{"class":92},[86,10936,871],{"class":813},[86,10938,10939],{"class":96},"\"0.35141 -0.28119 0.13918\"\n",[86,10941,10943,10945,10947,10950],{"class":88,"line":10942},147,[86,10944,10417],{"class":92},[86,10946,871],{"class":813},[86,10948,10949],{"class":96},"\"-2.0566 1.1982 1.5708\"",[86,10951,3940],{"class":813},[86,10953,10955,10957],{"class":88,"line":10954},148,[86,10956,1699],{"class":813},[86,10958,10431],{"class":817},[86,10960,10962,10964,10966,10968],{"class":88,"line":10961},149,[86,10963,10436],{"class":92},[86,10965,871],{"class":813},[86,10967,10052],{"class":96},[86,10969,3940],{"class":813},[86,10971,10973,10975],{"class":88,"line":10972},150,[86,10974,1699],{"class":813},[86,10976,10449],{"class":817},[86,10978,10980,10982,10984,10986],{"class":88,"line":10979},151,[86,10981,10436],{"class":92},[86,10983,871],{"class":813},[86,10985,10549],{"class":96},[86,10987,3940],{"class":813},[86,10989,10991,10993],{"class":88,"line":10990},152,[86,10992,1699],{"class":813},[86,10994,10466],{"class":817},[86,10996,10998,11000,11002,11005],{"class":88,"line":10997},153,[86,10999,10407],{"class":92},[86,11001,871],{"class":813},[86,11003,11004],{"class":96},"\"-1 0 0\"",[86,11006,3940],{"class":813},[86,11008,11010,11012],{"class":88,"line":11009},154,[86,11011,1699],{"class":813},[86,11013,10484],{"class":817},[86,11015,11017,11019,11021],{"class":88,"line":11016},155,[86,11018,10489],{"class":92},[86,11020,871],{"class":813},[86,11022,10494],{"class":96},[86,11024,11026,11028,11030],{"class":88,"line":11025},156,[86,11027,10499],{"class":92},[86,11029,871],{"class":813},[86,11031,10504],{"class":96},[86,11033,11035,11037,11039],{"class":88,"line":11034},157,[86,11036,10509],{"class":92},[86,11038,871],{"class":813},[86,11040,10514],{"class":96},[86,11042,11044,11046,11048,11050],{"class":88,"line":11043},158,[86,11045,10519],{"class":92},[86,11047,871],{"class":813},[86,11049,10524],{"class":96},[86,11051,3940],{"class":813},[86,11053,11055,11057,11059],{"class":88,"line":11054},159,[86,11056,1788],{"class":813},[86,11058,4588],{"class":817},[86,11060,845],{"class":813},[86,11062,11064,11066],{"class":88,"line":11063},160,[86,11065,3912],{"class":813},[86,11067,9692],{"class":817},[86,11069,11071,11073,11075,11078],{"class":88,"line":11070},161,[86,11072,9697],{"class":92},[86,11074,871],{"class":813},[86,11076,11077],{"class":96},"\"link3\"",[86,11079,845],{"class":813},[86,11081,11083,11085,11087],{"class":88,"line":11082},162,[86,11084,1699],{"class":813},[86,11086,3827],{"class":817},[86,11088,845],{"class":813},[86,11090,11092,11094],{"class":88,"line":11091},163,[86,11093,1719],{"class":813},[86,11095,9718],{"class":817},[86,11097,11099,11101,11103],{"class":88,"line":11098},164,[86,11100,9723],{"class":92},[86,11102,871],{"class":813},[86,11104,11105],{"class":96},"\"0.00112887115421612 0.0366346915274407 0.31720330934553\"\n",[86,11107,11109,11111,11113,11115],{"class":88,"line":11108},165,[86,11110,9733],{"class":92},[86,11112,871],{"class":813},[86,11114,4032],{"class":96},[86,11116,3940],{"class":813},[86,11118,11120,11122],{"class":88,"line":11119},166,[86,11121,1719],{"class":813},[86,11123,9746],{"class":817},[86,11125,11127,11129,11131,11134],{"class":88,"line":11126},167,[86,11128,9751],{"class":92},[86,11130,871],{"class":813},[86,11132,11133],{"class":96},"\"32.192726667578\"",[86,11135,3940],{"class":813},[86,11137,11139,11141],{"class":88,"line":11138},168,[86,11140,1719],{"class":813},[86,11142,9765],{"class":817},[86,11144,11146,11148,11150],{"class":88,"line":11145},169,[86,11147,9770],{"class":92},[86,11149,871],{"class":813},[86,11151,11152],{"class":96},"\"4.01515983126431\"\n",[86,11154,11156,11158,11160],{"class":88,"line":11155},170,[86,11157,9780],{"class":92},[86,11159,871],{"class":813},[86,11161,11162],{"class":96},"\"0.0013193752174692\"\n",[86,11164,11166,11168,11170],{"class":88,"line":11165},171,[86,11167,9790],{"class":92},[86,11169,871],{"class":813},[86,11171,11172],{"class":96},"\"0.0113529938102155\"\n",[86,11174,11176,11178,11180],{"class":88,"line":11175},172,[86,11177,9800],{"class":92},[86,11179,871],{"class":813},[86,11181,11182],{"class":96},"\"3.86196311673823\"\n",[86,11184,11186,11188,11190],{"class":88,"line":11185},173,[86,11187,9810],{"class":92},[86,11189,871],{"class":813},[86,11191,11192],{"class":96},"\"-0.336440022491883\"\n",[86,11194,11196,11198,11200,11203],{"class":88,"line":11195},174,[86,11197,9820],{"class":92},[86,11199,871],{"class":813},[86,11201,11202],{"class":96},"\"0.399977905540088\"",[86,11204,3940],{"class":813},[86,11206,11208,11210,11212],{"class":88,"line":11207},175,[86,11209,1779],{"class":813},[86,11211,3827],{"class":817},[86,11213,845],{"class":813},[86,11215,11217,11219,11221],{"class":88,"line":11216},176,[86,11218,1699],{"class":813},[86,11220,842],{"class":817},[86,11222,845],{"class":813},[86,11224,11226,11228],{"class":88,"line":11225},177,[86,11227,1719],{"class":813},[86,11229,9718],{"class":817},[86,11231,11233,11235,11237],{"class":88,"line":11232},178,[86,11234,9723],{"class":92},[86,11236,871],{"class":813},[86,11238,9858],{"class":96},[86,11240,11242,11244,11246,11248],{"class":88,"line":11241},179,[86,11243,9733],{"class":92},[86,11245,871],{"class":813},[86,11247,4032],{"class":96},[86,11249,3940],{"class":813},[86,11251,11253,11255,11257],{"class":88,"line":11252},180,[86,11254,1719],{"class":813},[86,11256,854],{"class":817},[86,11258,845],{"class":813},[86,11260,11262,11264],{"class":88,"line":11261},181,[86,11263,1732],{"class":813},[86,11265,9883],{"class":817},[86,11267,11269,11271,11273,11276],{"class":88,"line":11268},182,[86,11270,9888],{"class":92},[86,11272,871],{"class":813},[86,11274,11275],{"class":96},"\"package://cpp01_urdf/meshes/link3.STL\"",[86,11277,3940],{"class":813},[86,11279,11281,11283,11285],{"class":88,"line":11280},183,[86,11282,1770],{"class":813},[86,11284,854],{"class":817},[86,11286,845],{"class":813},[86,11288,11290,11292],{"class":88,"line":11289},184,[86,11291,1719],{"class":813},[86,11293,9910],{"class":817},[86,11295,11297,11299,11301,11303],{"class":88,"line":11296},185,[86,11298,9915],{"class":92},[86,11300,871],{"class":813},[86,11302,9920],{"class":96},[86,11304,845],{"class":813},[86,11306,11308,11310],{"class":88,"line":11307},186,[86,11309,1732],{"class":813},[86,11311,9929],{"class":817},[86,11313,11315,11317,11319,11321],{"class":88,"line":11314},187,[86,11316,9934],{"class":92},[86,11318,871],{"class":813},[86,11320,9939],{"class":96},[86,11322,3940],{"class":813},[86,11324,11326,11328,11330],{"class":88,"line":11325},188,[86,11327,1770],{"class":813},[86,11329,3738],{"class":817},[86,11331,845],{"class":813},[86,11333,11335,11337,11339],{"class":88,"line":11334},189,[86,11336,1779],{"class":813},[86,11338,842],{"class":817},[86,11340,845],{"class":813},[86,11342,11344,11346,11348],{"class":88,"line":11343},190,[86,11345,1699],{"class":813},[86,11347,3791],{"class":817},[86,11349,845],{"class":813},[86,11351,11353,11355],{"class":88,"line":11352},191,[86,11354,1719],{"class":813},[86,11356,9718],{"class":817},[86,11358,11360,11362,11364],{"class":88,"line":11359},192,[86,11361,9723],{"class":92},[86,11363,871],{"class":813},[86,11365,9858],{"class":96},[86,11367,11369,11371,11373,11375],{"class":88,"line":11368},193,[86,11370,9733],{"class":92},[86,11372,871],{"class":813},[86,11374,4032],{"class":96},[86,11376,3940],{"class":813},[86,11378,11380,11382,11384],{"class":88,"line":11379},194,[86,11381,1719],{"class":813},[86,11383,854],{"class":817},[86,11385,845],{"class":813},[86,11387,11389,11391],{"class":88,"line":11388},195,[86,11390,1732],{"class":813},[86,11392,9883],{"class":817},[86,11394,11396,11398,11400,11402],{"class":88,"line":11395},196,[86,11397,9888],{"class":92},[86,11399,871],{"class":813},[86,11401,11275],{"class":96},[86,11403,3940],{"class":813},[86,11405,11407,11409,11411],{"class":88,"line":11406},197,[86,11408,1770],{"class":813},[86,11410,854],{"class":817},[86,11412,845],{"class":813},[86,11414,11416,11418,11420],{"class":88,"line":11415},198,[86,11417,1779],{"class":813},[86,11419,3791],{"class":817},[86,11421,845],{"class":813},[86,11423,11425,11427,11429],{"class":88,"line":11424},199,[86,11426,1788],{"class":813},[86,11428,830],{"class":817},[86,11430,845],{"class":813},[86,11432,11434,11436],{"class":88,"line":11433},200,[86,11435,3912],{"class":813},[86,11437,10375],{"class":817},[86,11439,11441,11443,11445],{"class":88,"line":11440},201,[86,11442,9697],{"class":92},[86,11444,871],{"class":813},[86,11446,11447],{"class":96},"\"joint3\"\n",[86,11449,11451,11453,11455,11457],{"class":88,"line":11450},202,[86,11452,10389],{"class":92},[86,11454,871],{"class":813},[86,11456,10394],{"class":96},[86,11458,845],{"class":813},[86,11460,11462,11464],{"class":88,"line":11461},203,[86,11463,1699],{"class":813},[86,11465,9718],{"class":817},[86,11467,11469,11471,11473],{"class":88,"line":11468},204,[86,11470,10407],{"class":92},[86,11472,871],{"class":813},[86,11474,11475],{"class":96},"\"0.3765 0.82481 -0.49591\"\n",[86,11477,11479,11481,11483,11486],{"class":88,"line":11478},205,[86,11480,10417],{"class":92},[86,11482,871],{"class":813},[86,11484,11485],{"class":96},"\"2.5802 0 0\"",[86,11487,3940],{"class":813},[86,11489,11491,11493],{"class":88,"line":11490},206,[86,11492,1699],{"class":813},[86,11494,10431],{"class":817},[86,11496,11498,11500,11502,11504],{"class":88,"line":11497},207,[86,11499,10436],{"class":92},[86,11501,871],{"class":813},[86,11503,10549],{"class":96},[86,11505,3940],{"class":813},[86,11507,11509,11511],{"class":88,"line":11508},208,[86,11510,1699],{"class":813},[86,11512,10449],{"class":817},[86,11514,11516,11518,11520,11522],{"class":88,"line":11515},209,[86,11517,10436],{"class":92},[86,11519,871],{"class":813},[86,11521,11077],{"class":96},[86,11523,3940],{"class":813},[86,11525,11527,11529],{"class":88,"line":11526},210,[86,11528,1699],{"class":813},[86,11530,10466],{"class":817},[86,11532,11534,11536,11538,11540],{"class":88,"line":11533},211,[86,11535,10407],{"class":92},[86,11537,871],{"class":813},[86,11539,10475],{"class":96},[86,11541,3940],{"class":813},[86,11543,11545,11547],{"class":88,"line":11544},212,[86,11546,1699],{"class":813},[86,11548,10484],{"class":817},[86,11550,11552,11554,11556],{"class":88,"line":11551},213,[86,11553,10489],{"class":92},[86,11555,871],{"class":813},[86,11557,10494],{"class":96},[86,11559,11561,11563,11565],{"class":88,"line":11560},214,[86,11562,10499],{"class":92},[86,11564,871],{"class":813},[86,11566,10504],{"class":96},[86,11568,11570,11572,11574],{"class":88,"line":11569},215,[86,11571,10509],{"class":92},[86,11573,871],{"class":813},[86,11575,10514],{"class":96},[86,11577,11579,11581,11583,11585],{"class":88,"line":11578},216,[86,11580,10519],{"class":92},[86,11582,871],{"class":813},[86,11584,10524],{"class":96},[86,11586,3940],{"class":813},[86,11588,11590,11592,11594],{"class":88,"line":11589},217,[86,11591,1788],{"class":813},[86,11593,4588],{"class":817},[86,11595,845],{"class":813},[86,11597,11599,11601],{"class":88,"line":11598},218,[86,11600,3912],{"class":813},[86,11602,9692],{"class":817},[86,11604,11606,11608,11610,11613],{"class":88,"line":11605},219,[86,11607,9697],{"class":92},[86,11609,871],{"class":813},[86,11611,11612],{"class":96},"\"link4\"",[86,11614,845],{"class":813},[86,11616,11618,11620,11622],{"class":88,"line":11617},220,[86,11619,1699],{"class":813},[86,11621,3827],{"class":817},[86,11623,845],{"class":813},[86,11625,11627,11629],{"class":88,"line":11626},221,[86,11628,1719],{"class":813},[86,11630,9718],{"class":817},[86,11632,11634,11636,11638],{"class":88,"line":11633},222,[86,11635,9723],{"class":92},[86,11637,871],{"class":813},[86,11639,11640],{"class":96},"\"0.162516620557178 -0.213844847423599 3.38133504529381E-07\"\n",[86,11642,11644,11646,11648,11650],{"class":88,"line":11643},223,[86,11645,9733],{"class":92},[86,11647,871],{"class":813},[86,11649,4032],{"class":96},[86,11651,3940],{"class":813},[86,11653,11655,11657],{"class":88,"line":11654},224,[86,11656,1719],{"class":813},[86,11658,9746],{"class":817},[86,11660,11662,11664,11666,11669],{"class":88,"line":11661},225,[86,11663,9751],{"class":92},[86,11665,871],{"class":813},[86,11667,11668],{"class":96},"\"12.1646007734167\"",[86,11670,3940],{"class":813},[86,11672,11674,11676],{"class":88,"line":11673},226,[86,11675,1719],{"class":813},[86,11677,9765],{"class":817},[86,11679,11681,11683,11685],{"class":88,"line":11680},227,[86,11682,9770],{"class":92},[86,11684,871],{"class":813},[86,11686,11687],{"class":96},"\"0.288208127188405\"\n",[86,11689,11691,11693,11695],{"class":88,"line":11690},228,[86,11692,9780],{"class":92},[86,11694,871],{"class":813},[86,11696,11697],{"class":96},"\"0.00080326659836716\"\n",[86,11699,11701,11703,11705],{"class":88,"line":11700},229,[86,11702,9790],{"class":92},[86,11704,871],{"class":813},[86,11706,11707],{"class":96},"\"8.72489392803044E-07\"\n",[86,11709,11711,11713,11715],{"class":88,"line":11710},230,[86,11712,9800],{"class":92},[86,11714,871],{"class":813},[86,11716,11717],{"class":96},"\"0.107000706575729\"\n",[86,11719,11721,11723,11725],{"class":88,"line":11720},231,[86,11722,9810],{"class":92},[86,11724,871],{"class":813},[86,11726,11727],{"class":96},"\"-1.48935044230573E-07\"\n",[86,11729,11731,11733,11735,11738],{"class":88,"line":11730},232,[86,11732,9820],{"class":92},[86,11734,871],{"class":813},[86,11736,11737],{"class":96},"\"0.295147863994059\"",[86,11739,3940],{"class":813},[86,11741,11743,11745,11747],{"class":88,"line":11742},233,[86,11744,1779],{"class":813},[86,11746,3827],{"class":817},[86,11748,845],{"class":813},[86,11750,11752,11754,11756],{"class":88,"line":11751},234,[86,11753,1699],{"class":813},[86,11755,842],{"class":817},[86,11757,845],{"class":813},[86,11759,11761,11763],{"class":88,"line":11760},235,[86,11762,1719],{"class":813},[86,11764,9718],{"class":817},[86,11766,11768,11770,11772],{"class":88,"line":11767},236,[86,11769,9723],{"class":92},[86,11771,871],{"class":813},[86,11773,9858],{"class":96},[86,11775,11777,11779,11781,11783],{"class":88,"line":11776},237,[86,11778,9733],{"class":92},[86,11780,871],{"class":813},[86,11782,4032],{"class":96},[86,11784,3940],{"class":813},[86,11786,11788,11790,11792],{"class":88,"line":11787},238,[86,11789,1719],{"class":813},[86,11791,854],{"class":817},[86,11793,845],{"class":813},[86,11795,11797,11799],{"class":88,"line":11796},239,[86,11798,1732],{"class":813},[86,11800,9883],{"class":817},[86,11802,11804,11806,11808,11811],{"class":88,"line":11803},240,[86,11805,9888],{"class":92},[86,11807,871],{"class":813},[86,11809,11810],{"class":96},"\"package://cpp01_urdf/meshes/link4.STL\"",[86,11812,3940],{"class":813},[86,11814,11816,11818,11820],{"class":88,"line":11815},241,[86,11817,1770],{"class":813},[86,11819,854],{"class":817},[86,11821,845],{"class":813},[86,11823,11825,11827],{"class":88,"line":11824},242,[86,11826,1719],{"class":813},[86,11828,9910],{"class":817},[86,11830,11832,11834,11836,11838],{"class":88,"line":11831},243,[86,11833,9915],{"class":92},[86,11835,871],{"class":813},[86,11837,9920],{"class":96},[86,11839,845],{"class":813},[86,11841,11843,11845],{"class":88,"line":11842},244,[86,11844,1732],{"class":813},[86,11846,9929],{"class":817},[86,11848,11850,11852,11854,11856],{"class":88,"line":11849},245,[86,11851,9934],{"class":92},[86,11853,871],{"class":813},[86,11855,9939],{"class":96},[86,11857,3940],{"class":813},[86,11859,11861,11863,11865],{"class":88,"line":11860},246,[86,11862,1770],{"class":813},[86,11864,3738],{"class":817},[86,11866,845],{"class":813},[86,11868,11870,11872,11874],{"class":88,"line":11869},247,[86,11871,1779],{"class":813},[86,11873,842],{"class":817},[86,11875,845],{"class":813},[86,11877,11879,11881,11883],{"class":88,"line":11878},248,[86,11880,1699],{"class":813},[86,11882,3791],{"class":817},[86,11884,845],{"class":813},[86,11886,11888,11890],{"class":88,"line":11887},249,[86,11889,1719],{"class":813},[86,11891,9718],{"class":817},[86,11893,11895,11897,11899],{"class":88,"line":11894},250,[86,11896,9723],{"class":92},[86,11898,871],{"class":813},[86,11900,9858],{"class":96},[86,11902,11904,11906,11908,11910],{"class":88,"line":11903},251,[86,11905,9733],{"class":92},[86,11907,871],{"class":813},[86,11909,4032],{"class":96},[86,11911,3940],{"class":813},[86,11913,11915,11917,11919],{"class":88,"line":11914},252,[86,11916,1719],{"class":813},[86,11918,854],{"class":817},[86,11920,845],{"class":813},[86,11922,11924,11926],{"class":88,"line":11923},253,[86,11925,1732],{"class":813},[86,11927,9883],{"class":817},[86,11929,11931,11933,11935,11937],{"class":88,"line":11930},254,[86,11932,9888],{"class":92},[86,11934,871],{"class":813},[86,11936,11810],{"class":96},[86,11938,3940],{"class":813},[86,11940,11942,11944,11946],{"class":88,"line":11941},255,[86,11943,1770],{"class":813},[86,11945,854],{"class":817},[86,11947,845],{"class":813},[86,11949,11951,11953,11955],{"class":88,"line":11950},256,[86,11952,1779],{"class":813},[86,11954,3791],{"class":817},[86,11956,845],{"class":813},[86,11958,11960,11962,11964],{"class":88,"line":11959},257,[86,11961,1788],{"class":813},[86,11963,830],{"class":817},[86,11965,845],{"class":813},[86,11967,11969,11971],{"class":88,"line":11968},258,[86,11970,3912],{"class":813},[86,11972,10375],{"class":817},[86,11974,11976,11978,11980],{"class":88,"line":11975},259,[86,11977,9697],{"class":92},[86,11979,871],{"class":813},[86,11981,11982],{"class":96},"\"joint4\"\n",[86,11984,11986,11988,11990,11992],{"class":88,"line":11985},260,[86,11987,10389],{"class":92},[86,11989,871],{"class":813},[86,11991,10394],{"class":96},[86,11993,845],{"class":813},[86,11995,11997,11999],{"class":88,"line":11996},261,[86,11998,1699],{"class":813},[86,12000,9718],{"class":817},[86,12002,12004,12006,12008],{"class":88,"line":12003},262,[86,12005,10407],{"class":92},[86,12007,871],{"class":813},[86,12009,12010],{"class":96},"\"0 0.070837 0.99728\"\n",[86,12012,12014,12016,12018,12021],{"class":88,"line":12013},263,[86,12015,10417],{"class":92},[86,12017,871],{"class":813},[86,12019,12020],{"class":96},"\"0.82315 -1.5708 0\"",[86,12022,3940],{"class":813},[86,12024,12026,12028],{"class":88,"line":12025},264,[86,12027,1699],{"class":813},[86,12029,10431],{"class":817},[86,12031,12033,12035,12037,12039],{"class":88,"line":12032},265,[86,12034,10436],{"class":92},[86,12036,871],{"class":813},[86,12038,11077],{"class":96},[86,12040,3940],{"class":813},[86,12042,12044,12046],{"class":88,"line":12043},266,[86,12045,1699],{"class":813},[86,12047,10449],{"class":817},[86,12049,12051,12053,12055,12057],{"class":88,"line":12050},267,[86,12052,10436],{"class":92},[86,12054,871],{"class":813},[86,12056,11612],{"class":96},[86,12058,3940],{"class":813},[86,12060,12062,12064],{"class":88,"line":12061},268,[86,12063,1699],{"class":813},[86,12065,10466],{"class":817},[86,12067,12069,12071,12073,12075],{"class":88,"line":12068},269,[86,12070,10407],{"class":92},[86,12072,871],{"class":813},[86,12074,10475],{"class":96},[86,12076,3940],{"class":813},[86,12078,12080,12082],{"class":88,"line":12079},270,[86,12081,1699],{"class":813},[86,12083,10484],{"class":817},[86,12085,12087,12089,12091],{"class":88,"line":12086},271,[86,12088,10489],{"class":92},[86,12090,871],{"class":813},[86,12092,10494],{"class":96},[86,12094,12096,12098,12100],{"class":88,"line":12095},272,[86,12097,10499],{"class":92},[86,12099,871],{"class":813},[86,12101,10504],{"class":96},[86,12103,12105,12107,12109],{"class":88,"line":12104},273,[86,12106,10509],{"class":92},[86,12108,871],{"class":813},[86,12110,10514],{"class":96},[86,12112,12114,12116,12118,12120],{"class":88,"line":12113},274,[86,12115,10519],{"class":92},[86,12117,871],{"class":813},[86,12119,10524],{"class":96},[86,12121,3940],{"class":813},[86,12123,12125,12127,12129],{"class":88,"line":12124},275,[86,12126,1788],{"class":813},[86,12128,4588],{"class":817},[86,12130,845],{"class":813},[86,12132,12134,12136,12138],{"class":88,"line":12133},276,[86,12135,4080],{"class":813},[86,12137,818],{"class":817},[86,12139,845],{"class":813},[141,12141,12142],{"start":890},[144,12143,12144],{},"Compile",[78,12146,12148],{"className":80,"code":12147,"language":82,"meta":20,"style":20},"colcon build --packages-select cpp01_urdf\n",[73,12149,12150],{"__ignoreMap":20},[86,12151,12152,12154,12156,12158],{"class":88,"line":89},[86,12153,1516],{"class":92},[86,12155,1519],{"class":96},[86,12157,1522],{"class":734},[86,12159,12160],{"class":96}," cpp01_urdf\n",[15,12162,12163],{},[18,12164],{"alt":20,"src":12165},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1596.webp",[15,12167,12168],{},[18,12169],{"alt":20,"src":12170},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1597.webp",[141,12172,12173],{"start":900},[144,12174,12175],{},"Update the terminal environment",[78,12177,12179],{"className":80,"code":12178,"language":82,"meta":20,"style":20},"source install/setup.bash\n",[73,12180,12181],{"__ignoreMap":20},[86,12182,12183,12185],{"class":88,"line":89},[86,12184,1540],{"class":734},[86,12186,1543],{"class":96},[15,12188,12189],{},[18,12190],{"alt":20,"src":12191},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1598.webp",[141,12193,12194],{"start":910},[144,12195,12196],{},"Run Launch",[78,12198,12200],{"className":80,"code":12199,"language":82,"meta":20,"style":20},"ros2 launch cpp01_urdf display.launch.py\n",[73,12201,12202],{"__ignoreMap":20},[86,12203,12204,12206,12208,12210],{"class":88,"line":89},[86,12205,722],{"class":92},[86,12207,1550],{"class":96},[86,12209,8354],{"class":96},[86,12211,1555],{"class":96},[15,12213,12214],{},[18,12215],{"alt":20,"src":12216},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1599.webp",[15,12218,12219],{},[18,12220],{"alt":20,"src":12221},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1600.webp",[141,12223,12224],{"start":1043},[144,12225,12226],{},"Adding plugins and basic configuration in Rviz2",[15,12228,12229],{},[18,12230],{"alt":20,"src":12231},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1601.webp",[141,12233,12234],{"start":1048},[144,12235,12236],{},"You can adjust joint angles using joint_state_publisher_gui.",[15,12238,12239,12242],{},[18,12240],{"alt":20,"src":12241},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1602.webp",[18,12243],{"alt":20,"src":12244},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1603.webp",[141,12246,12247],{"start":1065},[144,12248,12249],{},"Save the rviz2 configuration to the rviz folder.",[15,12251,12252,12253,12256,12257,129],{},"First, click on ",[107,12254,12255],{},"File"," in the rviz2 menu bar, then select ",[107,12258,12259],{},"Save Config As",[15,12261,12262],{},[18,12263],{"alt":20,"src":12264},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1604.webp",[15,12266,12267],{},"You can watch the demo video in the introduction of this section.",[647,12269,12271],{"id":12270},"precautions-for-reference-only-chatgpts-solution","Precautions (for reference only, ChatGPT's solution)",[3612,12273,12275],{"id":12274},"coordinate-system-1","Coordinate system 1",[15,12277,12278],{},"The wheels must use continuous joints, and try to choose the coordinate system yourself. The requirement is that when looking at the car from behind, left is Y, forward is X, and up is Z. All coordinate systems are required.",[15,12280,12281],{},"You can first have it automatically generate one, then modify the coordinate system — that would be simpler.",[15,12283,12284],{},[18,12285],{"alt":20,"src":12286},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1605.webp",[15,12288,12289],{},[18,12290],{"alt":20,"src":12291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1606.webp",[15,12293,12294],{},[18,12295],{"alt":20,"src":12296},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1607.webp",[3612,12298,12300],{"id":12299},"the-coordinate-system-makes-the-car-lie-flat","The coordinate system makes the car lie flat.",[15,12302,12303],{},"If your car is lying on its side in rviz2, then:",[15,12305,12306,12307,12310],{},"Ha, exactly — this kind of \"vehicle lying on its side\" situation is ",[107,12308,12309],{},"90% due to incorrect STL coordinate axis orientation",". Many CAD tools export STL models with the default:",[165,12312,12313,12316],{},[144,12314,12315],{},"Z-axis forward (e.g., SolidWorks: Z forward, Y up, use the right-hand coordinate system to determine the X-axis position; viewed from behind the vehicle, it points left.)",[144,12317,12318],{},"or Y-axis up (e.g., Blender)",[15,12320,12321],{},"The ROS/URDF coordinate system is:",[165,12323,12324,12327,12330],{},[144,12325,12326],{},"X forward (direction of travel)",[144,12328,12329],{},"Y to the left (translation direction)",[144,12331,12332],{},"Z upward (direction of gravity)",[3612,12334,12336],{"id":12335},"the-car-goes-straight-and-then-turns-it-turns-and-then-goes-straight","The car goes straight and then turns; it turns and then goes straight.",[15,12338,12339],{},"That means there's a problem with your rotating shaft.",[15,12341,12342],{},"If moving forward results in a left turn, it means the left wheel's axle is wrong—missing a symbol. Just add it in.",[15,12344,12345],{},"For example, this 010 should be changed to 0-10.",[15,12347,12348],{},[18,12349],{"alt":20,"src":12350},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1608.webp",[10,12352,765],{"id":765},[647,12354,12356],{"id":12355},"scenarios-functions-and-concepts","Scenarios, Functions, and Concepts",[15,12358,12359],{},[107,12360,12361],{},"Scene",[15,12363,12364],{},"In the previous process of building the robot model using the URDF file, there were several issues.",[12366,12367,12368,12371,12374],"blockquote",{},[15,12369,12370],{},"Problem 1: When designing joint positions, calculations must follow fixed rules. However, in URDF, this relies on manual computation, which is inconvenient and prone to errors. Additionally, when certain parameters change, recalculation is required.",[15,12372,12373],{},"Problem 2: Some content in URDF is highly repetitive, such as the design and implementation of wheels. Different wheels differ only in certain parameters, while their shape, color, and rotation values are identical. In practical applications, building complex robot models often leads to highly repetitive designs. Following general programming principles, repetitive code should be encapsulated and reused. However, the previous URDF file did not include such operations.",[15,12375,12376],{},"......",[15,12378,12379,12380,129],{},"If you encounter a similar problem in a general programming language, we can solve it by combining variables with functions. Correspondingly, ROS also provides a programming-like optimization solution called: ",[107,12381,12382],{},"Xacro (which can be understood as urdf 2.0)",[15,12384,12385],{},[107,12386,12387],{},"Concept",[15,12389,12390],{},"Xacro is short for XML Macros. Xacro is an XML macro language and a programmable form of XML.",[15,12392,12393],{},"Xacro can declare variables and solve them through mathematical operations; it can use flow control to manage execution order; and it can encapsulate functionality through macros (which can be thought of as functions) and reuse them, thereby improving code reuse rates and program security.",[15,12395,12396],{},[107,12397,12398],{},"Purpose",[15,12400,12401],{},"Compared to a pure URDF implementation, it allows for writing safer, more concise, and more readable robot model files, while also improving writing efficiency.",[647,12403,12405],{"id":12404},"quick-start","Quick Start",[15,12407,12408],{},"First, install xacro.",[78,12410,12412],{"className":80,"code":12411,"language":82,"meta":20,"style":20},"#humble版本\nsudo apt install ros-humble-xacro\n#jazzy版本\nsudo apt install ros-jazzy-xacro\n",[73,12413,12414,12419,12429,12434],{"__ignoreMap":20},[86,12415,12416],{"class":88,"line":89},[86,12417,12418],{"class":1028},"#humble版本\n",[86,12420,12421,12423,12425,12427],{"class":88,"line":638},[86,12422,93],{"class":92},[86,12424,97],{"class":96},[86,12426,100],{"class":96},[86,12428,1862],{"class":96},[86,12430,12431],{"class":88,"line":824},[86,12432,12433],{"class":1028},"#jazzy版本\n",[86,12435,12436,12438,12440,12442],{"class":88,"line":836},[86,12437,93],{"class":92},[86,12439,97],{"class":96},[86,12441,100],{"class":96},[86,12443,12444],{"class":96}," ros-jazzy-xacro\n",[141,12446,12447],{},[144,12448,12449],{},"Requirements",[15,12451,12452,12453,12456],{},"Optimize the car chassis implementation from ",[107,12454,12455],{},"6.4.4 URDF Exercise"," using xacro. Use variables to encapsulate vehicle parameters, and use xacro macros to encapsulate the repetitive wheel code, then call the macro to create four wheels (Note: This demonstrates basic xacro usage; generating valid URDF is not required).",[141,12458,12459],{"start":638},[144,12460,12461],{},"Implementation",[15,12463,12464],{},"In the urdf/xacro directory of the package cpp06_urdf, create a new xacro file named demo01_helloworld.urdf.xacro, and edit the file by entering the following content:",[78,12466,12468],{"className":798,"code":12467,"language":800,"meta":20,"style":20},"\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",[73,12469,12470,12493,12497,12520,12541,12563,12567,12592,12607,12615,12624,12647,12656,12660,12681,12685,12700,12715,12723,12732,12740,12748,12765,12780,12795,12810],{"__ignoreMap":20},[86,12471,12472,12474,12476,12478,12480,12483,12486,12488,12491],{"class":88,"line":89},[86,12473,1399],{"class":813},[86,12475,818],{"class":817},[86,12477,1682],{"class":92},[86,12479,871],{"class":813},[86,12481,12482],{"class":96},"\"mycar\"",[86,12484,12485],{"class":92}," xmlns:xacro",[86,12487,871],{"class":813},[86,12489,12490],{"class":96},"\"http://wiki.ros.org/xacro\"",[86,12492,845],{"class":813},[86,12494,12495],{"class":88,"line":638},[86,12496,808],{"emptyLinePlaceholder":807},[86,12498,12499,12501,12504,12506,12508,12511,12514,12516,12518],{"class":88,"line":824},[86,12500,1699],{"class":813},[86,12502,12503],{"class":817},"xacro:property",[86,12505,1682],{"class":92},[86,12507,871],{"class":813},[86,12509,12510],{"class":96},"\"wheel_radius\"",[86,12512,12513],{"class":92}," value",[86,12515,871],{"class":813},[86,12517,6912],{"class":96},[86,12519,3940],{"class":813},[86,12521,12522,12524,12526,12528,12530,12533,12535,12537,12539],{"class":88,"line":836},[86,12523,1699],{"class":813},[86,12525,12503],{"class":817},[86,12527,1682],{"class":92},[86,12529,871],{"class":813},[86,12531,12532],{"class":96},"\"wheel_length\"",[86,12534,12513],{"class":92},[86,12536,871],{"class":813},[86,12538,6920],{"class":96},[86,12540,3940],{"class":813},[86,12542,12543,12545,12547,12549,12551,12554,12556,12558,12561],{"class":88,"line":848},[86,12544,1699],{"class":813},[86,12546,12503],{"class":817},[86,12548,1682],{"class":92},[86,12550,871],{"class":813},[86,12552,12553],{"class":96},"\"PI\"",[86,12555,12513],{"class":92},[86,12557,871],{"class":813},[86,12559,12560],{"class":96},"\"3.1415927\"",[86,12562,3940],{"class":813},[86,12564,12565],{"class":88,"line":859},[86,12566,808],{"emptyLinePlaceholder":807},[86,12568,12569,12571,12574,12576,12578,12581,12584,12586,12589],{"class":88,"line":880},[86,12570,1699],{"class":813},[86,12572,12573],{"class":817},"xacro:macro",[86,12575,1682],{"class":92},[86,12577,871],{"class":813},[86,12579,12580],{"class":96},"\"wheel_func\"",[86,12582,12583],{"class":92}," params",[86,12585,871],{"class":813},[86,12587,12588],{"class":96},"\"wheel_name\"",[86,12590,12591],{"class":813}," >\n",[86,12593,12594,12596,12598,12600,12602,12605],{"class":88,"line":890},[86,12595,1732],{"class":813},[86,12597,830],{"class":817},[86,12599,1682],{"class":92},[86,12601,871],{"class":813},[86,12603,12604],{"class":96},"\"${wheel_name}_wheel\"",[86,12606,845],{"class":813},[86,12608,12609,12611,12613],{"class":88,"line":900},[86,12610,3991],{"class":813},[86,12612,842],{"class":817},[86,12614,845],{"class":813},[86,12616,12617,12620,12622],{"class":88,"line":910},[86,12618,12619],{"class":813},"                \u003C",[86,12621,854],{"class":817},[86,12623,845],{"class":813},[86,12625,12626,12629,12631,12633,12635,12638,12640,12642,12645],{"class":88,"line":1043},[86,12627,12628],{"class":813},"                    \u003C",[86,12630,3676],{"class":817},[86,12632,5755],{"class":92},[86,12634,871],{"class":813},[86,12636,12637],{"class":96},"\"${wheel_radius}\"",[86,12639,6915],{"class":92},[86,12641,871],{"class":813},[86,12643,12644],{"class":96},"\"${wheel_length}\"",[86,12646,3940],{"class":813},[86,12648,12649,12652,12654],{"class":88,"line":1048},[86,12650,12651],{"class":813},"                \u003C/",[86,12653,854],{"class":817},[86,12655,845],{"class":813},[86,12657,12658],{"class":88,"line":1065},[86,12659,808],{"emptyLinePlaceholder":807},[86,12661,12662,12664,12666,12668,12670,12672,12674,12676,12679],{"class":88,"line":1087},[86,12663,12619],{"class":813},[86,12665,3816],{"class":817},[86,12667,4027],{"class":92},[86,12669,871],{"class":813},[86,12671,4032],{"class":96},[86,12673,4035],{"class":92},[86,12675,871],{"class":813},[86,12677,12678],{"class":96},"\"${PI / 2} 0 0\"",[86,12680,3940],{"class":813},[86,12682,12683],{"class":88,"line":1107},[86,12684,808],{"emptyLinePlaceholder":807},[86,12686,12687,12689,12691,12693,12695,12698],{"class":88,"line":1137},[86,12688,12619],{"class":813},[86,12690,3738],{"class":817},[86,12692,1682],{"class":92},[86,12694,871],{"class":813},[86,12696,12697],{"class":96},"\"wheel_color\"",[86,12699,845],{"class":813},[86,12701,12702,12704,12706,12708,12710,12713],{"class":88,"line":1142},[86,12703,12628],{"class":813},[86,12705,3763],{"class":817},[86,12707,3932],{"class":92},[86,12709,871],{"class":813},[86,12711,12712],{"class":96},"\"0 0 0 0.3\"",[86,12714,3940],{"class":813},[86,12716,12717,12719,12721],{"class":88,"line":1148},[86,12718,12651],{"class":813},[86,12720,3738],{"class":817},[86,12722,845],{"class":813},[86,12724,12725,12728,12730],{"class":88,"line":1153},[86,12726,12727],{"class":813},"            \u003C/",[86,12729,842],{"class":817},[86,12731,845],{"class":813},[86,12733,12734,12736,12738],{"class":88,"line":1159},[86,12735,1761],{"class":813},[86,12737,830],{"class":817},[86,12739,845],{"class":813},[86,12741,12742,12744,12746],{"class":88,"line":1181},[86,12743,1779],{"class":813},[86,12745,12573],{"class":817},[86,12747,845],{"class":813},[86,12749,12750,12752,12755,12758,12760,12763],{"class":88,"line":1192},[86,12751,1699],{"class":813},[86,12753,12754],{"class":817},"xacro:wheel_func",[86,12756,12757],{"class":92}," wheel_name",[86,12759,871],{"class":813},[86,12761,12762],{"class":96},"\"left_front\"",[86,12764,877],{"class":813},[86,12766,12767,12769,12771,12773,12775,12778],{"class":88,"line":1206},[86,12768,1699],{"class":813},[86,12770,12754],{"class":817},[86,12772,12757],{"class":92},[86,12774,871],{"class":813},[86,12776,12777],{"class":96},"\"left_back\"",[86,12779,877],{"class":813},[86,12781,12782,12784,12786,12788,12790,12793],{"class":88,"line":1218},[86,12783,1699],{"class":813},[86,12785,12754],{"class":817},[86,12787,12757],{"class":92},[86,12789,871],{"class":813},[86,12791,12792],{"class":96},"\"right_front\"",[86,12794,877],{"class":813},[86,12796,12797,12799,12801,12803,12805,12808],{"class":88,"line":1235},[86,12798,1699],{"class":813},[86,12800,12754],{"class":817},[86,12802,12757],{"class":92},[86,12804,871],{"class":813},[86,12806,12807],{"class":96},"\"right_back\"",[86,12809,877],{"class":813},[86,12811,12812,12814,12816],{"class":88,"line":1241},[86,12813,4080],{"class":813},[86,12815,818],{"class":817},[86,12817,845],{"class":813},[15,12819,12820],{},[18,12821],{"alt":20,"src":12822},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1609.webp",[15,12824,12825],{},"Macros are similar to functions.",[15,12827,12828],{},"params are similar to entry parameters",[15,12830,12831],{},"Sub-tags are similar to function bodies.",[15,12833,12834],{},"In the terminal, navigate to the directory mentioned in the current file and enter the following command:",[78,12836,12838],{"className":80,"code":12837,"language":82,"meta":20,"style":20},"cd src/cpp06_urdf/urdf/xacro/\nxacro demo01_helloworld.urdf.xacro\n#或者\nros2 run xacro xacro demo01_helloworld.urdf.xacro\n",[73,12839,12840,12847,12854,12859],{"__ignoreMap":20},[86,12841,12842,12844],{"class":88,"line":89},[86,12843,8326],{"class":734},[86,12845,12846],{"class":96}," src/cpp06_urdf/urdf/xacro/\n",[86,12848,12849,12851],{"class":88,"line":638},[86,12850,765],{"class":92},[86,12852,12853],{"class":96}," demo01_helloworld.urdf.xacro\n",[86,12855,12856],{"class":88,"line":824},[86,12857,12858],{"class":1028},"#或者\n",[86,12860,12861,12863,12865,12868,12870],{"class":88,"line":836},[86,12862,722],{"class":92},[86,12864,2462],{"class":96},[86,12866,12867],{"class":96}," xacro",[86,12869,12867],{"class":96},[86,12871,12853],{"class":96},[15,12873,12874],{},"The terminal will output the following content (the content below is pure URDF):",[78,12876,12878],{"className":798,"code":12877,"language":800,"meta":20,"style":20},"\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",[73,12879,12880,12895,12899,12913,12928,12936,12944,12964,12972,12993,13007,13021,13029,13037,13045,13060,13068,13076,13096,13104,13124,13138,13152,13160,13168,13176,13191,13199,13207,13227,13235,13255,13269,13283,13291,13299,13307,13322,13330,13338,13358,13366,13386,13400,13414,13422,13430,13438],{"__ignoreMap":20},[86,12881,12882,12884,12886,12888,12890,12892],{"class":88,"line":89},[86,12883,8771],{"class":813},[86,12885,800],{"class":817},[86,12887,8776],{"class":92},[86,12889,871],{"class":813},[86,12891,8781],{"class":96},[86,12893,12894],{"class":813}," ?>\n",[86,12896,12897],{"class":88,"line":638},[86,12898,808],{"emptyLinePlaceholder":807},[86,12900,12901,12903,12905,12907,12909,12911],{"class":88,"line":824},[86,12902,1399],{"class":813},[86,12904,818],{"class":817},[86,12906,1682],{"class":92},[86,12908,871],{"class":813},[86,12910,12482],{"class":96},[86,12912,845],{"class":813},[86,12914,12915,12917,12919,12921,12923,12926],{"class":88,"line":836},[86,12916,3912],{"class":813},[86,12918,830],{"class":817},[86,12920,1682],{"class":92},[86,12922,871],{"class":813},[86,12924,12925],{"class":96},"\"left_front_wheel\"",[86,12927,845],{"class":813},[86,12929,12930,12932,12934],{"class":88,"line":848},[86,12931,1699],{"class":813},[86,12933,842],{"class":817},[86,12935,845],{"class":813},[86,12937,12938,12940,12942],{"class":88,"line":859},[86,12939,1719],{"class":813},[86,12941,854],{"class":817},[86,12943,845],{"class":813},[86,12945,12946,12948,12950,12952,12954,12956,12958,12960,12962],{"class":88,"line":880},[86,12947,1732],{"class":813},[86,12949,3676],{"class":817},[86,12951,6915],{"class":92},[86,12953,871],{"class":813},[86,12955,6920],{"class":96},[86,12957,5755],{"class":92},[86,12959,871],{"class":813},[86,12961,6912],{"class":96},[86,12963,877],{"class":813},[86,12965,12966,12968,12970],{"class":88,"line":890},[86,12967,1770],{"class":813},[86,12969,854],{"class":817},[86,12971,845],{"class":813},[86,12973,12974,12976,12978,12980,12982,12985,12987,12989,12991],{"class":88,"line":900},[86,12975,1719],{"class":813},[86,12977,3816],{"class":817},[86,12979,4035],{"class":92},[86,12981,871],{"class":813},[86,12983,12984],{"class":96},"\"1.57079635 0 0\"",[86,12986,4027],{"class":92},[86,12988,871],{"class":813},[86,12990,4032],{"class":96},[86,12992,877],{"class":813},[86,12994,12995,12997,12999,13001,13003,13005],{"class":88,"line":910},[86,12996,1719],{"class":813},[86,12998,3738],{"class":817},[86,13000,1682],{"class":92},[86,13002,871],{"class":813},[86,13004,12697],{"class":96},[86,13006,845],{"class":813},[86,13008,13009,13011,13013,13015,13017,13019],{"class":88,"line":1043},[86,13010,1732],{"class":813},[86,13012,3763],{"class":817},[86,13014,3932],{"class":92},[86,13016,871],{"class":813},[86,13018,12712],{"class":96},[86,13020,877],{"class":813},[86,13022,13023,13025,13027],{"class":88,"line":1048},[86,13024,1770],{"class":813},[86,13026,3738],{"class":817},[86,13028,845],{"class":813},[86,13030,13031,13033,13035],{"class":88,"line":1065},[86,13032,1779],{"class":813},[86,13034,842],{"class":817},[86,13036,845],{"class":813},[86,13038,13039,13041,13043],{"class":88,"line":1087},[86,13040,1788],{"class":813},[86,13042,830],{"class":817},[86,13044,845],{"class":813},[86,13046,13047,13049,13051,13053,13055,13058],{"class":88,"line":1107},[86,13048,3912],{"class":813},[86,13050,830],{"class":817},[86,13052,1682],{"class":92},[86,13054,871],{"class":813},[86,13056,13057],{"class":96},"\"left_back_wheel\"",[86,13059,845],{"class":813},[86,13061,13062,13064,13066],{"class":88,"line":1137},[86,13063,1699],{"class":813},[86,13065,842],{"class":817},[86,13067,845],{"class":813},[86,13069,13070,13072,13074],{"class":88,"line":1142},[86,13071,1719],{"class":813},[86,13073,854],{"class":817},[86,13075,845],{"class":813},[86,13077,13078,13080,13082,13084,13086,13088,13090,13092,13094],{"class":88,"line":1148},[86,13079,1732],{"class":813},[86,13081,3676],{"class":817},[86,13083,6915],{"class":92},[86,13085,871],{"class":813},[86,13087,6920],{"class":96},[86,13089,5755],{"class":92},[86,13091,871],{"class":813},[86,13093,6912],{"class":96},[86,13095,877],{"class":813},[86,13097,13098,13100,13102],{"class":88,"line":1153},[86,13099,1770],{"class":813},[86,13101,854],{"class":817},[86,13103,845],{"class":813},[86,13105,13106,13108,13110,13112,13114,13116,13118,13120,13122],{"class":88,"line":1159},[86,13107,1719],{"class":813},[86,13109,3816],{"class":817},[86,13111,4035],{"class":92},[86,13113,871],{"class":813},[86,13115,12984],{"class":96},[86,13117,4027],{"class":92},[86,13119,871],{"class":813},[86,13121,4032],{"class":96},[86,13123,877],{"class":813},[86,13125,13126,13128,13130,13132,13134,13136],{"class":88,"line":1181},[86,13127,1719],{"class":813},[86,13129,3738],{"class":817},[86,13131,1682],{"class":92},[86,13133,871],{"class":813},[86,13135,12697],{"class":96},[86,13137,845],{"class":813},[86,13139,13140,13142,13144,13146,13148,13150],{"class":88,"line":1192},[86,13141,1732],{"class":813},[86,13143,3763],{"class":817},[86,13145,3932],{"class":92},[86,13147,871],{"class":813},[86,13149,12712],{"class":96},[86,13151,877],{"class":813},[86,13153,13154,13156,13158],{"class":88,"line":1206},[86,13155,1770],{"class":813},[86,13157,3738],{"class":817},[86,13159,845],{"class":813},[86,13161,13162,13164,13166],{"class":88,"line":1218},[86,13163,1779],{"class":813},[86,13165,842],{"class":817},[86,13167,845],{"class":813},[86,13169,13170,13172,13174],{"class":88,"line":1235},[86,13171,1788],{"class":813},[86,13173,830],{"class":817},[86,13175,845],{"class":813},[86,13177,13178,13180,13182,13184,13186,13189],{"class":88,"line":1241},[86,13179,3912],{"class":813},[86,13181,830],{"class":817},[86,13183,1682],{"class":92},[86,13185,871],{"class":813},[86,13187,13188],{"class":96},"\"right_front_wheel\"",[86,13190,845],{"class":813},[86,13192,13193,13195,13197],{"class":88,"line":1246},[86,13194,1699],{"class":813},[86,13196,842],{"class":817},[86,13198,845],{"class":813},[86,13200,13201,13203,13205],{"class":88,"line":1252},[86,13202,1719],{"class":813},[86,13204,854],{"class":817},[86,13206,845],{"class":813},[86,13208,13209,13211,13213,13215,13217,13219,13221,13223,13225],{"class":88,"line":1262},[86,13210,1732],{"class":813},[86,13212,3676],{"class":817},[86,13214,6915],{"class":92},[86,13216,871],{"class":813},[86,13218,6920],{"class":96},[86,13220,5755],{"class":92},[86,13222,871],{"class":813},[86,13224,6912],{"class":96},[86,13226,877],{"class":813},[86,13228,13229,13231,13233],{"class":88,"line":1274},[86,13230,1770],{"class":813},[86,13232,854],{"class":817},[86,13234,845],{"class":813},[86,13236,13237,13239,13241,13243,13245,13247,13249,13251,13253],{"class":88,"line":1284},[86,13238,1719],{"class":813},[86,13240,3816],{"class":817},[86,13242,4035],{"class":92},[86,13244,871],{"class":813},[86,13246,12984],{"class":96},[86,13248,4027],{"class":92},[86,13250,871],{"class":813},[86,13252,4032],{"class":96},[86,13254,877],{"class":813},[86,13256,13257,13259,13261,13263,13265,13267],{"class":88,"line":1289},[86,13258,1719],{"class":813},[86,13260,3738],{"class":817},[86,13262,1682],{"class":92},[86,13264,871],{"class":813},[86,13266,12697],{"class":96},[86,13268,845],{"class":813},[86,13270,13271,13273,13275,13277,13279,13281],{"class":88,"line":1294},[86,13272,1732],{"class":813},[86,13274,3763],{"class":817},[86,13276,3932],{"class":92},[86,13278,871],{"class":813},[86,13280,12712],{"class":96},[86,13282,877],{"class":813},[86,13284,13285,13287,13289],{"class":88,"line":1300},[86,13286,1770],{"class":813},[86,13288,3738],{"class":817},[86,13290,845],{"class":813},[86,13292,13293,13295,13297],{"class":88,"line":1310},[86,13294,1779],{"class":813},[86,13296,842],{"class":817},[86,13298,845],{"class":813},[86,13300,13301,13303,13305],{"class":88,"line":1322},[86,13302,1788],{"class":813},[86,13304,830],{"class":817},[86,13306,845],{"class":813},[86,13308,13309,13311,13313,13315,13317,13320],{"class":88,"line":1332},[86,13310,3912],{"class":813},[86,13312,830],{"class":817},[86,13314,1682],{"class":92},[86,13316,871],{"class":813},[86,13318,13319],{"class":96},"\"right_back_wheel\"",[86,13321,845],{"class":813},[86,13323,13324,13326,13328],{"class":88,"line":1337},[86,13325,1699],{"class":813},[86,13327,842],{"class":817},[86,13329,845],{"class":813},[86,13331,13332,13334,13336],{"class":88,"line":1343},[86,13333,1719],{"class":813},[86,13335,854],{"class":817},[86,13337,845],{"class":813},[86,13339,13340,13342,13344,13346,13348,13350,13352,13354,13356],{"class":88,"line":1348},[86,13341,1732],{"class":813},[86,13343,3676],{"class":817},[86,13345,6915],{"class":92},[86,13347,871],{"class":813},[86,13349,6920],{"class":96},[86,13351,5755],{"class":92},[86,13353,871],{"class":813},[86,13355,6912],{"class":96},[86,13357,877],{"class":813},[86,13359,13360,13362,13364],{"class":88,"line":1357},[86,13361,1770],{"class":813},[86,13363,854],{"class":817},[86,13365,845],{"class":813},[86,13367,13368,13370,13372,13374,13376,13378,13380,13382,13384],{"class":88,"line":1363},[86,13369,1719],{"class":813},[86,13371,3816],{"class":817},[86,13373,4035],{"class":92},[86,13375,871],{"class":813},[86,13377,12984],{"class":96},[86,13379,4027],{"class":92},[86,13381,871],{"class":813},[86,13383,4032],{"class":96},[86,13385,877],{"class":813},[86,13387,13388,13390,13392,13394,13396,13398],{"class":88,"line":1369},[86,13389,1719],{"class":813},[86,13391,3738],{"class":817},[86,13393,1682],{"class":92},[86,13395,871],{"class":813},[86,13397,12697],{"class":96},[86,13399,845],{"class":813},[86,13401,13402,13404,13406,13408,13410,13412],{"class":88,"line":1375},[86,13403,1732],{"class":813},[86,13405,3763],{"class":817},[86,13407,3932],{"class":92},[86,13409,871],{"class":813},[86,13411,12712],{"class":96},[86,13413,877],{"class":813},[86,13415,13416,13418,13420],{"class":88,"line":1381},[86,13417,1770],{"class":813},[86,13419,3738],{"class":817},[86,13421,845],{"class":813},[86,13423,13424,13426,13428],{"class":88,"line":2279},[86,13425,1779],{"class":813},[86,13427,842],{"class":817},[86,13429,845],{"class":813},[86,13431,13432,13434,13436],{"class":88,"line":2284},[86,13433,1788],{"class":813},[86,13435,830],{"class":817},[86,13437,845],{"class":813},[86,13439,13440,13442,13444],{"class":88,"line":2294},[86,13441,4080],{"class":813},[86,13443,818],{"class":817},[86,13445,845],{"class":813},[15,13447,13448],{},"Obviously, through xacro we have conveniently achieved code reuse.",[15,13450,13451],{},[18,13452],{"alt":20,"src":13453},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1610.webp",[3612,13455,13456],{"id":13456},"grammar",[78,13458,13463],{"className":13459,"code":13461,"language":13462},[13460],"language-text","1.  Introduction\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1611.webp)\n","text",[73,13464,13461],{"__ignoreMap":20},[15,13466,13467,13468,3867,13470,13473,13474,129],{},"xacro provides a programmable interface, similar to a computer language, including syntax for variable declaration and invocation, function declaration and invocation, and more. When using xacro to generate URDF, the root tag ",[73,13469,818],{},[107,13471,13472],{},"must"," include a namespace declaration: ",[73,13475,13476],{},"xmlns:xacro=\"``http://wiki.ros.org/xacro``\"",[15,13478,13479],{},[107,13480,13481],{},"Variables",[15,13483,13484],{},"Variables are used to encapsulate certain fields in URDF, such as: the value of PI, the dimensions of the car, the wheel radius, etc. The basic syntax for using variables includes variable definition, variable invocation, variable operations, and more.",[15,13486,13487],{},"1.1 Variable Definition",[15,13489,13490],{},"Syntax format:",[78,13492,13494],{"className":798,"code":13493,"language":800,"meta":20,"style":20},"\u003Cxacro:property name=\"变量名\" value=\"变量值\" />\n```\n\nExample:\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\n1.2 Variable Invocation\n\nSyntax format:\n\n```xml\n${变量名}\n```\n\nExample:\n\n```xml\n\u003Cgeometry>\n    \u003Ccylinder radius=\"${wheel_radius}\" length=\"${wheel_length}\" />\n\u003C/geometry>\n```\n\n1.3 Variable Operations\n\nSyntax format:\n\n```xml\n${数学表达式}\n```\n\nExample:\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**Macros**\n\nSimilar to function implementation, it improves code reusability, optimizes code structure, and enhances security. The basic usage syntax of macros includes their definition and invocation.\n\n2.1 Macro Definitions\n\nSyntax format:\n\n```xml\n\u003Cxacro:macro name=\"宏名称\" params=\"参数列表(多参数之间使用空格分隔)\">\n    .....\n    参数调用格式: ${参数名}\n\u003C/xacro:macro>\n```\n\nExample:\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\n2.2 Macro Invocation\n\nSyntax format:\n\n```xml\n\u003Cxacro:宏名称 参数1=xxx 参数2=xxx/>\n```\n\nExample:\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**Files**\n\nA robot is composed of multiple components, and different components may be encapsulated as separate xacro files. These files are then integrated and combined to form the complete robot, which can be achieved through file inclusion.\n\nSyntax format:\n\n```xml\n\u003Cxacro:include filename=\"其他xacro文件\" />\n",[73,13495,13496,13518,13523,13527,13532,13536,13541,13562,13582,13602,13606,13610,13615,13619,13624,13628,13632,13637,13641,13645,13649,13653,13657,13665,13685,13693,13697,13701,13706,13710,13714,13718,13722,13727,13731,13735,13739,13743,13747,13767,13771,13775,13779,13801,13805,13827,13849,13853,13877,13881,13897,13905,13909,13913,13918,13922,13927,13931,13936,13940,13945,13949,13953,13957,13961,13983,13988,13993,14001,14005,14009,14013,14017,14021,14041,14055,14063,14071,14091,14099,14103,14123,14127,14141,14155,14163,14171,14179,14187,14191,14195,14200,14204,14208,14212,14216,14235,14239,14243,14247,14251,14255,14269,14283,14297,14311,14315,14319,14323,14344,14348,14370,14384,14392,14396,14420,14441,14445,14453,14457,14461,14466,14470,14475,14479,14484,14488,14492,14496,14500],{"__ignoreMap":20},[86,13497,13498,13500,13502,13504,13506,13509,13511,13513,13516],{"class":88,"line":89},[86,13499,1399],{"class":813},[86,13501,12503],{"class":817},[86,13503,1682],{"class":92},[86,13505,871],{"class":813},[86,13507,13508],{"class":96},"\"变量名\"",[86,13510,12513],{"class":92},[86,13512,871],{"class":813},[86,13514,13515],{"class":96},"\"变量值\"",[86,13517,3940],{"class":813},[86,13519,13520],{"class":88,"line":638},[86,13521,13522],{"class":813},"```\n",[86,13524,13525],{"class":88,"line":824},[86,13526,808],{"emptyLinePlaceholder":807},[86,13528,13529],{"class":88,"line":836},[86,13530,13531],{"class":813},"Example:\n",[86,13533,13534],{"class":88,"line":848},[86,13535,808],{"emptyLinePlaceholder":807},[86,13537,13538],{"class":88,"line":859},[86,13539,13540],{"class":813},"```xml\n",[86,13542,13543,13545,13547,13549,13551,13553,13555,13557,13560],{"class":88,"line":880},[86,13544,1399],{"class":813},[86,13546,12503],{"class":817},[86,13548,1682],{"class":92},[86,13550,871],{"class":813},[86,13552,12553],{"class":96},[86,13554,12513],{"class":92},[86,13556,871],{"class":813},[86,13558,13559],{"class":96},"\"3.1416\"",[86,13561,877],{"class":813},[86,13563,13564,13566,13568,13570,13572,13574,13576,13578,13580],{"class":88,"line":890},[86,13565,1399],{"class":813},[86,13567,12503],{"class":817},[86,13569,1682],{"class":92},[86,13571,871],{"class":813},[86,13573,12510],{"class":96},[86,13575,12513],{"class":92},[86,13577,871],{"class":813},[86,13579,6912],{"class":96},[86,13581,877],{"class":813},[86,13583,13584,13586,13588,13590,13592,13594,13596,13598,13600],{"class":88,"line":900},[86,13585,1399],{"class":813},[86,13587,12503],{"class":817},[86,13589,1682],{"class":92},[86,13591,871],{"class":813},[86,13593,12532],{"class":96},[86,13595,12513],{"class":92},[86,13597,871],{"class":813},[86,13599,6920],{"class":96},[86,13601,877],{"class":813},[86,13603,13604],{"class":88,"line":910},[86,13605,13522],{"class":813},[86,13607,13608],{"class":88,"line":1043},[86,13609,808],{"emptyLinePlaceholder":807},[86,13611,13612],{"class":88,"line":1048},[86,13613,13614],{"class":813},"1.2 Variable Invocation\n",[86,13616,13617],{"class":88,"line":1065},[86,13618,808],{"emptyLinePlaceholder":807},[86,13620,13621],{"class":88,"line":1087},[86,13622,13623],{"class":813},"Syntax format:\n",[86,13625,13626],{"class":88,"line":1107},[86,13627,808],{"emptyLinePlaceholder":807},[86,13629,13630],{"class":88,"line":1137},[86,13631,13540],{"class":813},[86,13633,13634],{"class":88,"line":1142},[86,13635,13636],{"class":813},"${变量名}\n",[86,13638,13639],{"class":88,"line":1148},[86,13640,13522],{"class":813},[86,13642,13643],{"class":88,"line":1153},[86,13644,808],{"emptyLinePlaceholder":807},[86,13646,13647],{"class":88,"line":1159},[86,13648,13531],{"class":813},[86,13650,13651],{"class":88,"line":1181},[86,13652,808],{"emptyLinePlaceholder":807},[86,13654,13655],{"class":88,"line":1192},[86,13656,13540],{"class":813},[86,13658,13659,13661,13663],{"class":88,"line":1206},[86,13660,1399],{"class":813},[86,13662,854],{"class":817},[86,13664,845],{"class":813},[86,13666,13667,13669,13671,13673,13675,13677,13679,13681,13683],{"class":88,"line":1218},[86,13668,1699],{"class":813},[86,13670,3676],{"class":817},[86,13672,5755],{"class":92},[86,13674,871],{"class":813},[86,13676,12637],{"class":96},[86,13678,6915],{"class":92},[86,13680,871],{"class":813},[86,13682,12644],{"class":96},[86,13684,3940],{"class":813},[86,13686,13687,13689,13691],{"class":88,"line":1235},[86,13688,4080],{"class":813},[86,13690,854],{"class":817},[86,13692,845],{"class":813},[86,13694,13695],{"class":88,"line":1241},[86,13696,13522],{"class":813},[86,13698,13699],{"class":88,"line":1246},[86,13700,808],{"emptyLinePlaceholder":807},[86,13702,13703],{"class":88,"line":1252},[86,13704,13705],{"class":813},"1.3 Variable Operations\n",[86,13707,13708],{"class":88,"line":1262},[86,13709,808],{"emptyLinePlaceholder":807},[86,13711,13712],{"class":88,"line":1274},[86,13713,13623],{"class":813},[86,13715,13716],{"class":88,"line":1284},[86,13717,808],{"emptyLinePlaceholder":807},[86,13719,13720],{"class":88,"line":1289},[86,13721,13540],{"class":813},[86,13723,13724],{"class":88,"line":1294},[86,13725,13726],{"class":813},"${数学表达式}\n",[86,13728,13729],{"class":88,"line":1300},[86,13730,13522],{"class":813},[86,13732,13733],{"class":88,"line":1310},[86,13734,808],{"emptyLinePlaceholder":807},[86,13736,13737],{"class":88,"line":1322},[86,13738,13531],{"class":813},[86,13740,13741],{"class":88,"line":1332},[86,13742,808],{"emptyLinePlaceholder":807},[86,13744,13745],{"class":88,"line":1337},[86,13746,13540],{"class":813},[86,13748,13749,13751,13753,13755,13757,13759,13761,13763,13765],{"class":88,"line":1343},[86,13750,1399],{"class":813},[86,13752,3816],{"class":817},[86,13754,4027],{"class":92},[86,13756,871],{"class":813},[86,13758,4032],{"class":96},[86,13760,4035],{"class":92},[86,13762,871],{"class":813},[86,13764,12678],{"class":96},[86,13766,3940],{"class":813},[86,13768,13769],{"class":88,"line":1348},[86,13770,13522],{"class":813},[86,13772,13773],{"class":88,"line":1357},[86,13774,808],{"emptyLinePlaceholder":807},[86,13776,13777],{"class":88,"line":1363},[86,13778,13540],{"class":813},[86,13780,13781,13783,13785,13787,13789,13792,13794,13796,13799],{"class":88,"line":1369},[86,13782,1399],{"class":813},[86,13784,818],{"class":817},[86,13786,12485],{"class":92},[86,13788,871],{"class":813},[86,13790,13791],{"class":96},"\"http://www.ros.org/wiki/xacro\"",[86,13793,1682],{"class":92},[86,13795,871],{"class":813},[86,13797,13798],{"class":96},"\"demo2_pro\"",[86,13800,845],{"class":813},[86,13802,13803],{"class":88,"line":1375},[86,13804,808],{"emptyLinePlaceholder":807},[86,13806,13807,13809,13811,13813,13815,13818,13820,13822,13825],{"class":88,"line":1381},[86,13808,1399],{"class":813},[86,13810,12503],{"class":817},[86,13812,1682],{"class":92},[86,13814,871],{"class":813},[86,13816,13817],{"class":96},"\"num1\"",[86,13819,12513],{"class":92},[86,13821,871],{"class":813},[86,13823,13824],{"class":96},"\"10\"",[86,13826,877],{"class":813},[86,13828,13829,13831,13833,13835,13837,13840,13842,13844,13847],{"class":88,"line":2279},[86,13830,1399],{"class":813},[86,13832,12503],{"class":817},[86,13834,1682],{"class":92},[86,13836,871],{"class":813},[86,13838,13839],{"class":96},"\"num2\"",[86,13841,12513],{"class":92},[86,13843,871],{"class":813},[86,13845,13846],{"class":96},"\"20\"",[86,13848,877],{"class":813},[86,13850,13851],{"class":88,"line":2284},[86,13852,808],{"emptyLinePlaceholder":807},[86,13854,13855,13857,13860,13862,13864,13867,13870,13872,13875],{"class":88,"line":2294},[86,13856,1399],{"class":813},[86,13858,13859],{"class":817},"car",[86,13861,6915],{"class":92},[86,13863,871],{"class":813},[86,13865,13866],{"class":96},"\"${num1}\"",[86,13868,13869],{"class":92}," width",[86,13871,871],{"class":813},[86,13873,13874],{"class":96},"\"${num2}\"",[86,13876,877],{"class":813},[86,13878,13879],{"class":88,"line":2305},[86,13880,808],{"emptyLinePlaceholder":807},[86,13882,13883,13885,13888,13890,13892,13895],{"class":88,"line":2314},[86,13884,1399],{"class":813},[86,13886,13887],{"class":817},"sum",[86,13889,12513],{"class":92},[86,13891,871],{"class":813},[86,13893,13894],{"class":96},"\"${num1 + num2}\"",[86,13896,877],{"class":813},[86,13898,13899,13901,13903],{"class":88,"line":2319},[86,13900,4080],{"class":813},[86,13902,818],{"class":817},[86,13904,845],{"class":813},[86,13906,13907],{"class":88,"line":2324},[86,13908,13522],{"class":813},[86,13910,13911],{"class":88,"line":2333},[86,13912,808],{"emptyLinePlaceholder":807},[86,13914,13915],{"class":88,"line":2956},[86,13916,13917],{"class":813},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1612.webp)\n",[86,13919,13920],{"class":88,"line":2967},[86,13921,808],{"emptyLinePlaceholder":807},[86,13923,13924],{"class":88,"line":2995},[86,13925,13926],{"class":813},"**Macros**\n",[86,13928,13929],{"class":88,"line":3000},[86,13930,808],{"emptyLinePlaceholder":807},[86,13932,13933],{"class":88,"line":3005},[86,13934,13935],{"class":813},"Similar to function implementation, it improves code reusability, optimizes code structure, and enhances security. The basic usage syntax of macros includes their definition and invocation.\n",[86,13937,13938],{"class":88,"line":3014},[86,13939,808],{"emptyLinePlaceholder":807},[86,13941,13942],{"class":88,"line":3404},[86,13943,13944],{"class":813},"2.1 Macro Definitions\n",[86,13946,13947],{"class":88,"line":3410},[86,13948,808],{"emptyLinePlaceholder":807},[86,13950,13951],{"class":88,"line":3415},[86,13952,13623],{"class":813},[86,13954,13955],{"class":88,"line":3421},[86,13956,808],{"emptyLinePlaceholder":807},[86,13958,13959],{"class":88,"line":3426},[86,13960,13540],{"class":813},[86,13962,13963,13965,13967,13969,13971,13974,13976,13978,13981],{"class":88,"line":3432},[86,13964,1399],{"class":813},[86,13966,12573],{"class":817},[86,13968,1682],{"class":92},[86,13970,871],{"class":813},[86,13972,13973],{"class":96},"\"宏名称\"",[86,13975,12583],{"class":92},[86,13977,871],{"class":813},[86,13979,13980],{"class":96},"\"参数列表(多参数之间使用空格分隔)\"",[86,13982,845],{"class":813},[86,13984,13985],{"class":88,"line":3441},[86,13986,13987],{"class":813},"    .....\n",[86,13989,13990],{"class":88,"line":3453},[86,13991,13992],{"class":813},"    参数调用格式: ${参数名}\n",[86,13994,13995,13997,13999],{"class":88,"line":3463},[86,13996,4080],{"class":813},[86,13998,12573],{"class":817},[86,14000,845],{"class":813},[86,14002,14003],{"class":88,"line":3468},[86,14004,13522],{"class":813},[86,14006,14007],{"class":88,"line":3473},[86,14008,808],{"emptyLinePlaceholder":807},[86,14010,14011],{"class":88,"line":3482},[86,14012,13531],{"class":813},[86,14014,14015],{"class":88,"line":3493},[86,14016,808],{"emptyLinePlaceholder":807},[86,14018,14019],{"class":88,"line":3504},[86,14020,13540],{"class":813},[86,14022,14023,14025,14027,14029,14031,14033,14035,14037,14039],{"class":88,"line":3509},[86,14024,1399],{"class":813},[86,14026,12573],{"class":817},[86,14028,1682],{"class":92},[86,14030,871],{"class":813},[86,14032,12580],{"class":96},[86,14034,12583],{"class":92},[86,14036,871],{"class":813},[86,14038,12588],{"class":96},[86,14040,12591],{"class":813},[86,14042,14043,14045,14047,14049,14051,14053],{"class":88,"line":3515},[86,14044,1699],{"class":813},[86,14046,830],{"class":817},[86,14048,1682],{"class":92},[86,14050,871],{"class":813},[86,14052,12604],{"class":96},[86,14054,845],{"class":813},[86,14056,14057,14059,14061],{"class":88,"line":3529},[86,14058,1732],{"class":813},[86,14060,842],{"class":817},[86,14062,845],{"class":813},[86,14064,14065,14067,14069],{"class":88,"line":3534},[86,14066,3991],{"class":813},[86,14068,854],{"class":817},[86,14070,845],{"class":813},[86,14072,14073,14075,14077,14079,14081,14083,14085,14087,14089],{"class":88,"line":3539},[86,14074,12619],{"class":813},[86,14076,3676],{"class":817},[86,14078,5755],{"class":92},[86,14080,871],{"class":813},[86,14082,12637],{"class":96},[86,14084,6915],{"class":92},[86,14086,871],{"class":813},[86,14088,12644],{"class":96},[86,14090,3940],{"class":813},[86,14092,14093,14095,14097],{"class":88,"line":3544},[86,14094,12727],{"class":813},[86,14096,854],{"class":817},[86,14098,845],{"class":813},[86,14100,14101],{"class":88,"line":3553},[86,14102,808],{"emptyLinePlaceholder":807},[86,14104,14105,14107,14109,14111,14113,14115,14117,14119,14121],{"class":88,"line":7381},[86,14106,3991],{"class":813},[86,14108,3816],{"class":817},[86,14110,4027],{"class":92},[86,14112,871],{"class":813},[86,14114,4032],{"class":96},[86,14116,4035],{"class":92},[86,14118,871],{"class":813},[86,14120,12678],{"class":96},[86,14122,3940],{"class":813},[86,14124,14125],{"class":88,"line":7396},[86,14126,808],{"emptyLinePlaceholder":807},[86,14128,14129,14131,14133,14135,14137,14139],{"class":88,"line":7405},[86,14130,3991],{"class":813},[86,14132,3738],{"class":817},[86,14134,1682],{"class":92},[86,14136,871],{"class":813},[86,14138,12697],{"class":96},[86,14140,845],{"class":813},[86,14142,14143,14145,14147,14149,14151,14153],{"class":88,"line":7414},[86,14144,12619],{"class":813},[86,14146,3763],{"class":817},[86,14148,3932],{"class":92},[86,14150,871],{"class":813},[86,14152,12712],{"class":96},[86,14154,3940],{"class":813},[86,14156,14157,14159,14161],{"class":88,"line":7419},[86,14158,12727],{"class":813},[86,14160,3738],{"class":817},[86,14162,845],{"class":813},[86,14164,14165,14167,14169],{"class":88,"line":7441},[86,14166,1761],{"class":813},[86,14168,842],{"class":817},[86,14170,845],{"class":813},[86,14172,14173,14175,14177],{"class":88,"line":7456},[86,14174,1779],{"class":813},[86,14176,830],{"class":817},[86,14178,845],{"class":813},[86,14180,14181,14183,14185],{"class":88,"line":7471},[86,14182,4080],{"class":813},[86,14184,12573],{"class":817},[86,14186,845],{"class":813},[86,14188,14189],{"class":88,"line":7476},[86,14190,13522],{"class":813},[86,14192,14193],{"class":88,"line":7498},[86,14194,808],{"emptyLinePlaceholder":807},[86,14196,14197],{"class":88,"line":7513},[86,14198,14199],{"class":813},"2.2 Macro Invocation\n",[86,14201,14202],{"class":88,"line":7522},[86,14203,808],{"emptyLinePlaceholder":807},[86,14205,14206],{"class":88,"line":7527},[86,14207,13623],{"class":813},[86,14209,14210],{"class":88,"line":7543},[86,14211,808],{"emptyLinePlaceholder":807},[86,14213,14214],{"class":88,"line":7552},[86,14215,13540],{"class":813},[86,14217,14218,14220,14223,14226,14229,14232],{"class":88,"line":7561},[86,14219,1399],{"class":813},[86,14221,14222],{"class":817},"xacro:宏名称",[86,14224,14225],{"class":92}," 参数1",[86,14227,14228],{"class":813},"=xxx ",[86,14230,14231],{"class":92},"参数2",[86,14233,14234],{"class":813},"=xxx/>\n",[86,14236,14237],{"class":88,"line":7582},[86,14238,13522],{"class":813},[86,14240,14241],{"class":88,"line":7591},[86,14242,808],{"emptyLinePlaceholder":807},[86,14244,14245],{"class":88,"line":7612},[86,14246,13531],{"class":813},[86,14248,14249],{"class":88,"line":7627},[86,14250,808],{"emptyLinePlaceholder":807},[86,14252,14253],{"class":88,"line":7636},[86,14254,13540],{"class":813},[86,14256,14257,14259,14261,14263,14265,14267],{"class":88,"line":7645},[86,14258,1399],{"class":813},[86,14260,12754],{"class":817},[86,14262,12757],{"class":92},[86,14264,871],{"class":813},[86,14266,12762],{"class":96},[86,14268,877],{"class":813},[86,14270,14271,14273,14275,14277,14279,14281],{"class":88,"line":7650},[86,14272,1399],{"class":813},[86,14274,12754],{"class":817},[86,14276,12757],{"class":92},[86,14278,871],{"class":813},[86,14280,12777],{"class":96},[86,14282,877],{"class":813},[86,14284,14285,14287,14289,14291,14293,14295],{"class":88,"line":7672},[86,14286,1399],{"class":813},[86,14288,12754],{"class":817},[86,14290,12757],{"class":92},[86,14292,871],{"class":813},[86,14294,12792],{"class":96},[86,14296,877],{"class":813},[86,14298,14299,14301,14303,14305,14307,14309],{"class":88,"line":7687},[86,14300,1399],{"class":813},[86,14302,12754],{"class":817},[86,14304,12757],{"class":92},[86,14306,871],{"class":813},[86,14308,12807],{"class":96},[86,14310,877],{"class":813},[86,14312,14313],{"class":88,"line":7702},[86,14314,13522],{"class":813},[86,14316,14317],{"class":88,"line":7707},[86,14318,808],{"emptyLinePlaceholder":807},[86,14320,14321],{"class":88,"line":7729},[86,14322,13540],{"class":813},[86,14324,14325,14327,14329,14331,14333,14335,14337,14339,14342],{"class":88,"line":7744},[86,14326,1399],{"class":813},[86,14328,818],{"class":817},[86,14330,12485],{"class":92},[86,14332,871],{"class":813},[86,14334,13791],{"class":96},[86,14336,1682],{"class":92},[86,14338,871],{"class":813},[86,14340,14341],{"class":96},"\"demo3_func\"",[86,14343,845],{"class":813},[86,14345,14346],{"class":88,"line":7753},[86,14347,808],{"emptyLinePlaceholder":807},[86,14349,14350,14352,14354,14356,14358,14361,14363,14365,14368],{"class":88,"line":7758},[86,14351,1699],{"class":813},[86,14353,12573],{"class":817},[86,14355,1682],{"class":92},[86,14357,871],{"class":813},[86,14359,14360],{"class":96},"\"get_sum\"",[86,14362,12583],{"class":92},[86,14364,871],{"class":813},[86,14366,14367],{"class":96},"\"num1 num2\"",[86,14369,845],{"class":813},[86,14371,14372,14374,14376,14378,14380,14382],{"class":88,"line":10619},[86,14373,1732],{"class":813},[86,14375,13887],{"class":817},[86,14377,12513],{"class":92},[86,14379,871],{"class":813},[86,14381,13894],{"class":96},[86,14383,877],{"class":813},[86,14385,14386,14388,14390],{"class":88,"line":10629},[86,14387,1779],{"class":813},[86,14389,12573],{"class":817},[86,14391,845],{"class":813},[86,14393,14394],{"class":88,"line":10639},[86,14395,808],{"emptyLinePlaceholder":807},[86,14397,14398,14400,14403,14406,14408,14410,14413,14415,14418],{"class":88,"line":10649},[86,14399,1699],{"class":813},[86,14401,14402],{"class":817},"xacro:get_sum",[86,14404,14405],{"class":92}," num1",[86,14407,871],{"class":813},[86,14409,13846],{"class":96},[86,14411,14412],{"class":92}," num2",[86,14414,871],{"class":813},[86,14416,14417],{"class":96},"\"30\"",[86,14419,877],{"class":813},[86,14421,14422,14424,14426,14428,14430,14433,14435,14437,14439],{"class":88,"line":10659},[86,14423,1699],{"class":813},[86,14425,14402],{"class":817},[86,14427,14405],{"class":92},[86,14429,871],{"class":813},[86,14431,14432],{"class":96},"\"70\"",[86,14434,14412],{"class":92},[86,14436,871],{"class":813},[86,14438,14417],{"class":96},[86,14440,877],{"class":813},[86,14442,14443],{"class":88,"line":10671},[86,14444,808],{"emptyLinePlaceholder":807},[86,14446,14447,14449,14451],{"class":88,"line":10680},[86,14448,4080],{"class":813},[86,14450,818],{"class":817},[86,14452,845],{"class":813},[86,14454,14455],{"class":88,"line":10689},[86,14456,13522],{"class":813},[86,14458,14459],{"class":88,"line":10696},[86,14460,808],{"emptyLinePlaceholder":807},[86,14462,14463],{"class":88,"line":10705},[86,14464,14465],{"class":813},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1613.webp)\n",[86,14467,14468],{"class":88,"line":10716},[86,14469,808],{"emptyLinePlaceholder":807},[86,14471,14472],{"class":88,"line":10725},[86,14473,14474],{"class":813},"**Files**\n",[86,14476,14477],{"class":88,"line":10732},[86,14478,808],{"emptyLinePlaceholder":807},[86,14480,14481],{"class":88,"line":10744},[86,14482,14483],{"class":813},"A robot is composed of multiple components, and different components may be encapsulated as separate xacro files. These files are then integrated and combined to form the complete robot, which can be achieved through file inclusion.\n",[86,14485,14486],{"class":88,"line":10753},[86,14487,808],{"emptyLinePlaceholder":807},[86,14489,14490],{"class":88,"line":10760},[86,14491,13623],{"class":813},[86,14493,14494],{"class":88,"line":10771},[86,14495,808],{"emptyLinePlaceholder":807},[86,14497,14498],{"class":88,"line":10778},[86,14499,13540],{"class":813},[86,14501,14502,14504,14507,14510,14512,14515],{"class":88,"line":10789},[86,14503,1399],{"class":813},[86,14505,14506],{"class":817},"xacro:include",[86,14508,14509],{"class":92}," filename",[86,14511,871],{"class":813},[86,14513,14514],{"class":96},"\"其他xacro文件\"",[86,14516,3940],{"class":813},[15,14518,14519],{},"Example:",[78,14521,14523],{"className":798,"code":14522,"language":800,"meta":20,"style":20},"\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",[73,14524,14525,14546,14561,14576,14591],{"__ignoreMap":20},[86,14526,14527,14529,14531,14533,14535,14538,14540,14542,14544],{"class":88,"line":89},[86,14528,1399],{"class":813},[86,14530,818],{"class":817},[86,14532,1682],{"class":92},[86,14534,871],{"class":813},[86,14536,14537],{"class":96},"\"car\"",[86,14539,12485],{"class":92},[86,14541,871],{"class":813},[86,14543,12490],{"class":96},[86,14545,845],{"class":813},[86,14547,14548,14550,14552,14554,14556,14559],{"class":88,"line":638},[86,14549,1719],{"class":813},[86,14551,14506],{"class":817},[86,14553,14509],{"class":92},[86,14555,871],{"class":813},[86,14557,14558],{"class":96},"\"car_base.xacro\"",[86,14560,3940],{"class":813},[86,14562,14563,14565,14567,14569,14571,14574],{"class":88,"line":824},[86,14564,1719],{"class":813},[86,14566,14506],{"class":817},[86,14568,14509],{"class":92},[86,14570,871],{"class":813},[86,14572,14573],{"class":96},"\"car_camera.xacro\"",[86,14575,3940],{"class":813},[86,14577,14578,14580,14582,14584,14586,14589],{"class":88,"line":836},[86,14579,1719],{"class":813},[86,14581,14506],{"class":817},[86,14583,14509],{"class":92},[86,14585,871],{"class":813},[86,14587,14588],{"class":96},"\"car_laser.xacro\"",[86,14590,3940],{"class":813},[86,14592,14593,14595,14597],{"class":88,"line":848},[86,14594,4080],{"class":813},[86,14596,818],{"class":817},[86,14598,845],{"class":813},[78,14600,14602],{"className":798,"code":14601,"language":800,"meta":20,"style":20},"\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",[73,14603,14604,14625,14640,14655],{"__ignoreMap":20},[86,14605,14606,14608,14610,14612,14614,14616,14618,14620,14623],{"class":88,"line":89},[86,14607,1399],{"class":813},[86,14609,818],{"class":817},[86,14611,12485],{"class":92},[86,14613,871],{"class":813},[86,14615,13791],{"class":96},[86,14617,1682],{"class":92},[86,14619,871],{"class":813},[86,14621,14622],{"class":96},"\"demo4_include\"",[86,14624,845],{"class":813},[86,14626,14627,14629,14631,14633,14635,14638],{"class":88,"line":638},[86,14628,1699],{"class":813},[86,14630,14506],{"class":817},[86,14632,14509],{"class":92},[86,14634,871],{"class":813},[86,14636,14637],{"class":96},"\"demo02_base_pro.urdf.xacro\"",[86,14639,877],{"class":813},[86,14641,14642,14644,14646,14648,14650,14653],{"class":88,"line":824},[86,14643,1699],{"class":813},[86,14645,14506],{"class":817},[86,14647,14509],{"class":92},[86,14649,871],{"class":813},[86,14651,14652],{"class":96},"\"demo03_base_func.urdf.xacro\"",[86,14654,877],{"class":813},[86,14656,14657,14659,14661],{"class":88,"line":836},[86,14658,4080],{"class":813},[86,14660,818],{"class":817},[86,14662,845],{"class":813},[15,14664,14665],{},[18,14666],{"alt":20,"src":14667},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1614.webp",[15,14669,14670],{},[4796,14671,14672],{},"But this is not recommended; it is advised that the parent xacro and child xacro use the same name.",[647,14674,4938],{"id":14675},"practice-2",[3612,14677,14678],{"id":14678},"framework",[141,14680,14681],{},[144,14682,12449],{},[15,14684,14685,14686,14688],{},"Create a four-wheeled robot model using xacro. The chassis of this model can refer to the implementation in ",[107,14687,12455],{},", with a camera and a LiDAR added on top of the chassis. The size parameters and installation positions of the camera and LiDAR can be customized.",[15,14690,14691],{},[18,14692],{"alt":20,"src":14693},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1615.webp",[141,14695,14696],{"start":638},[144,14697,14698],{},"Implementation Analysis",[15,14700,14701],{},"The robot model in the requirements consists of three parts: the chassis, the camera, and the radar. Each part can be encapsulated into a separate xacro file, and finally, these xacro files can be included and organized to form a complete robot model.",[141,14703,14704],{"start":824},[144,14705,12461],{},[15,14707,14708,14709,7847,14712,14714],{},"In the ",[73,14710,14711],{},"urdf/xacro",[73,14713,1972],{}," package, create several new xacro files:",[165,14716,14717,14720,14723,14726],{},[144,14718,14719],{},"car.urdf.xacro: used to include the xacro files corresponding to different robot components.",[144,14721,14722],{},"car_base.urdf.xacro: The xacro file describing the robot chassis.",[144,14724,14725],{},"car_camera.urdf.xacro: Xacro file describing the camera.",[144,14727,14728],{},"car_laser.urdf.xacro: The xacro file describing the lidar.",[15,14730,14731,14732,14735],{},"Edit the ",[73,14733,14734],{},"car.urdf.xacro"," file and enter the following content:",[78,14737,14739],{"className":798,"code":14738,"language":800,"meta":20,"style":20},"\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",[73,14740,14741,14761,14776,14791,14806],{"__ignoreMap":20},[86,14742,14743,14745,14747,14749,14751,14753,14755,14757,14759],{"class":88,"line":89},[86,14744,1399],{"class":813},[86,14746,818],{"class":817},[86,14748,1682],{"class":92},[86,14750,871],{"class":813},[86,14752,14537],{"class":96},[86,14754,12485],{"class":92},[86,14756,871],{"class":813},[86,14758,12490],{"class":96},[86,14760,845],{"class":813},[86,14762,14763,14765,14767,14769,14771,14774],{"class":88,"line":638},[86,14764,1699],{"class":813},[86,14766,14506],{"class":817},[86,14768,14509],{"class":92},[86,14770,871],{"class":813},[86,14772,14773],{"class":96},"\"car_base.urdf.xacro\"",[86,14775,877],{"class":813},[86,14777,14778,14780,14782,14784,14786,14789],{"class":88,"line":824},[86,14779,1699],{"class":813},[86,14781,14506],{"class":817},[86,14783,14509],{"class":92},[86,14785,871],{"class":813},[86,14787,14788],{"class":96},"\"car_camera.urdf.xacro\"",[86,14790,877],{"class":813},[86,14792,14793,14795,14797,14799,14801,14804],{"class":88,"line":836},[86,14794,1699],{"class":813},[86,14796,14506],{"class":817},[86,14798,14509],{"class":92},[86,14800,871],{"class":813},[86,14802,14803],{"class":96},"\"car_laser.urdf.xacro\"",[86,14805,877],{"class":813},[86,14807,14808,14810,14812],{"class":88,"line":848},[86,14809,4080],{"class":813},[86,14811,818],{"class":817},[86,14813,845],{"class":813},[3612,14815,14817],{"id":14816},"the-vehicle-body","The vehicle body",[15,14819,14731,14820,14735],{},[73,14821,14822],{},"car_base.urdf.xacro",[78,14824,14826],{"className":798,"code":14825,"language":800,"meta":20,"style":20},"\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",[73,14827,14828,14842,14846,14866,14870,14892,14914,14936,14940,14962,14966,14986,15006,15010,15024,15038,15046,15060,15074,15082,15096,15111,15119,15123,15137,15145,15153,15167,15175,15183,15191,15195,15209,15217,15221,15229,15244,15252,15272,15286,15294,15302,15322,15336,15350,15365,15373,15377,15398,15412,15420,15428,15448,15456,15476,15490,15498,15506,15527,15542,15556,15577,15591,15599,15607,15611,15639,15666,15692,15718],{"__ignoreMap":20},[86,14829,14830,14832,14834,14836,14838,14840],{"class":88,"line":89},[86,14831,1399],{"class":813},[86,14833,818],{"class":817},[86,14835,12485],{"class":92},[86,14837,871],{"class":813},[86,14839,12490],{"class":96},[86,14841,845],{"class":813},[86,14843,14844],{"class":88,"line":638},[86,14845,808],{"emptyLinePlaceholder":807},[86,14847,14848,14850,14852,14854,14856,14858,14860,14862,14864],{"class":88,"line":824},[86,14849,1699],{"class":813},[86,14851,12503],{"class":817},[86,14853,1682],{"class":92},[86,14855,871],{"class":813},[86,14857,12553],{"class":96},[86,14859,12513],{"class":92},[86,14861,871],{"class":813},[86,14863,13559],{"class":96},[86,14865,877],{"class":813},[86,14867,14868],{"class":88,"line":836},[86,14869,808],{"emptyLinePlaceholder":807},[86,14871,14872,14874,14876,14878,14880,14883,14885,14887,14890],{"class":88,"line":848},[86,14873,1699],{"class":813},[86,14875,12503],{"class":817},[86,14877,1682],{"class":92},[86,14879,871],{"class":813},[86,14881,14882],{"class":96},"\"base_link_x\"",[86,14884,12513],{"class":92},[86,14886,871],{"class":813},[86,14888,14889],{"class":96},"\"0.2\"",[86,14891,877],{"class":813},[86,14893,14894,14896,14898,14900,14902,14905,14907,14909,14912],{"class":88,"line":859},[86,14895,1699],{"class":813},[86,14897,12503],{"class":817},[86,14899,1682],{"class":92},[86,14901,871],{"class":813},[86,14903,14904],{"class":96},"\"base_link_y\"",[86,14906,12513],{"class":92},[86,14908,871],{"class":813},[86,14910,14911],{"class":96},"\"0.12\"",[86,14913,877],{"class":813},[86,14915,14916,14918,14920,14922,14924,14927,14929,14931,14934],{"class":88,"line":880},[86,14917,1699],{"class":813},[86,14919,12503],{"class":817},[86,14921,1682],{"class":92},[86,14923,871],{"class":813},[86,14925,14926],{"class":96},"\"base_link_z\"",[86,14928,12513],{"class":92},[86,14930,871],{"class":813},[86,14932,14933],{"class":96},"\"0.07\"",[86,14935,877],{"class":813},[86,14937,14938],{"class":88,"line":890},[86,14939,808],{"emptyLinePlaceholder":807},[86,14941,14942,14944,14946,14948,14950,14953,14955,14957,14960],{"class":88,"line":900},[86,14943,1699],{"class":813},[86,14945,12503],{"class":817},[86,14947,1682],{"class":92},[86,14949,871],{"class":813},[86,14951,14952],{"class":96},"\"distance\"",[86,14954,12513],{"class":92},[86,14956,871],{"class":813},[86,14958,14959],{"class":96},"\"0.015\"",[86,14961,877],{"class":813},[86,14963,14964],{"class":88,"line":910},[86,14965,808],{"emptyLinePlaceholder":807},[86,14967,14968,14970,14972,14974,14976,14978,14980,14982,14984],{"class":88,"line":1043},[86,14969,1699],{"class":813},[86,14971,12503],{"class":817},[86,14973,1682],{"class":92},[86,14975,871],{"class":813},[86,14977,12510],{"class":96},[86,14979,12513],{"class":92},[86,14981,871],{"class":813},[86,14983,6912],{"class":96},[86,14985,877],{"class":813},[86,14987,14988,14990,14992,14994,14996,14998,15000,15002,15004],{"class":88,"line":1048},[86,14989,1699],{"class":813},[86,14991,12503],{"class":817},[86,14993,1682],{"class":92},[86,14995,871],{"class":813},[86,14997,12532],{"class":96},[86,14999,12513],{"class":92},[86,15001,871],{"class":813},[86,15003,6920],{"class":96},[86,15005,877],{"class":813},[86,15007,15008],{"class":88,"line":1065},[86,15009,808],{"emptyLinePlaceholder":807},[86,15011,15012,15014,15016,15018,15020,15022],{"class":88,"line":1087},[86,15013,1699],{"class":813},[86,15015,3738],{"class":817},[86,15017,1682],{"class":92},[86,15019,871],{"class":813},[86,15021,3921],{"class":96},[86,15023,845],{"class":813},[86,15025,15026,15028,15030,15032,15034,15036],{"class":88,"line":1107},[86,15027,1732],{"class":813},[86,15029,3763],{"class":817},[86,15031,3932],{"class":92},[86,15033,871],{"class":813},[86,15035,3937],{"class":96},[86,15037,3940],{"class":813},[86,15039,15040,15042,15044],{"class":88,"line":1137},[86,15041,1779],{"class":813},[86,15043,3738],{"class":817},[86,15045,845],{"class":813},[86,15047,15048,15050,15052,15054,15056,15058],{"class":88,"line":1142},[86,15049,1699],{"class":813},[86,15051,3738],{"class":817},[86,15053,1682],{"class":92},[86,15055,871],{"class":813},[86,15057,5281],{"class":96},[86,15059,845],{"class":813},[86,15061,15062,15064,15066,15068,15070,15072],{"class":88,"line":1148},[86,15063,1732],{"class":813},[86,15065,3763],{"class":817},[86,15067,3932],{"class":92},[86,15069,871],{"class":813},[86,15071,5296],{"class":96},[86,15073,3940],{"class":813},[86,15075,15076,15078,15080],{"class":88,"line":1153},[86,15077,1779],{"class":813},[86,15079,3738],{"class":817},[86,15081,845],{"class":813},[86,15083,15084,15086,15088,15090,15092,15094],{"class":88,"line":1159},[86,15085,1699],{"class":813},[86,15087,3738],{"class":817},[86,15089,1682],{"class":92},[86,15091,871],{"class":813},[86,15093,6582],{"class":96},[86,15095,845],{"class":813},[86,15097,15098,15100,15102,15104,15106,15109],{"class":88,"line":1181},[86,15099,1732],{"class":813},[86,15101,3763],{"class":817},[86,15103,3932],{"class":92},[86,15105,871],{"class":813},[86,15107,15108],{"class":96},"\"0.2 0.2 0.2 0.95\"",[86,15110,3940],{"class":813},[86,15112,15113,15115,15117],{"class":88,"line":1192},[86,15114,1770],{"class":813},[86,15116,3738],{"class":817},[86,15118,845],{"class":813},[86,15120,15121],{"class":88,"line":1206},[86,15122,808],{"emptyLinePlaceholder":807},[86,15124,15125,15127,15129,15131,15133,15135],{"class":88,"line":1218},[86,15126,1699],{"class":813},[86,15128,830],{"class":817},[86,15130,1682],{"class":92},[86,15132,871],{"class":813},[86,15134,5728],{"class":96},[86,15136,845],{"class":813},[86,15138,15139,15141,15143],{"class":88,"line":1235},[86,15140,1732],{"class":813},[86,15142,842],{"class":817},[86,15144,845],{"class":813},[86,15146,15147,15149,15151],{"class":88,"line":1241},[86,15148,3991],{"class":813},[86,15150,854],{"class":817},[86,15152,845],{"class":813},[86,15154,15155,15157,15159,15161,15163,15165],{"class":88,"line":1246},[86,15156,12619],{"class":813},[86,15158,3692],{"class":817},[86,15160,5755],{"class":92},[86,15162,871],{"class":813},[86,15164,5760],{"class":96},[86,15166,877],{"class":813},[86,15168,15169,15171,15173],{"class":88,"line":1252},[86,15170,12727],{"class":813},[86,15172,854],{"class":817},[86,15174,845],{"class":813},[86,15176,15177,15179,15181],{"class":88,"line":1262},[86,15178,1761],{"class":813},[86,15180,842],{"class":817},[86,15182,845],{"class":813},[86,15184,15185,15187,15189],{"class":88,"line":1274},[86,15186,1779],{"class":813},[86,15188,830],{"class":817},[86,15190,845],{"class":813},[86,15192,15193],{"class":88,"line":1284},[86,15194,808],{"emptyLinePlaceholder":807},[86,15196,15197,15199,15201,15203,15205,15207],{"class":88,"line":1289},[86,15198,1699],{"class":813},[86,15200,830],{"class":817},[86,15202,1682],{"class":92},[86,15204,871],{"class":813},[86,15206,1708],{"class":96},[86,15208,845],{"class":813},[86,15210,15211,15213,15215],{"class":88,"line":1294},[86,15212,1732],{"class":813},[86,15214,842],{"class":817},[86,15216,845],{"class":813},[86,15218,15219],{"class":88,"line":1300},[86,15220,808],{"emptyLinePlaceholder":807},[86,15222,15223,15225,15227],{"class":88,"line":1310},[86,15224,3991],{"class":813},[86,15226,854],{"class":817},[86,15228,845],{"class":813},[86,15230,15231,15233,15235,15237,15239,15242],{"class":88,"line":1322},[86,15232,12619],{"class":813},[86,15234,865],{"class":817},[86,15236,868],{"class":92},[86,15238,871],{"class":813},[86,15240,15241],{"class":96},"\"${base_link_x} ${base_link_y} ${base_link_z}\"",[86,15243,3940],{"class":813},[86,15245,15246,15248,15250],{"class":88,"line":1332},[86,15247,12727],{"class":813},[86,15249,854],{"class":817},[86,15251,845],{"class":813},[86,15253,15254,15256,15258,15260,15262,15264,15266,15268,15270],{"class":88,"line":1337},[86,15255,3991],{"class":813},[86,15257,3816],{"class":817},[86,15259,4027],{"class":92},[86,15261,871],{"class":813},[86,15263,4032],{"class":96},[86,15265,4035],{"class":92},[86,15267,871],{"class":813},[86,15269,4032],{"class":96},[86,15271,3940],{"class":813},[86,15273,15274,15276,15278,15280,15282,15284],{"class":88,"line":1343},[86,15275,3991],{"class":813},[86,15277,3738],{"class":817},[86,15279,1682],{"class":92},[86,15281,871],{"class":813},[86,15283,3921],{"class":96},[86,15285,877],{"class":813},[86,15287,15288,15290,15292],{"class":88,"line":1348},[86,15289,1761],{"class":813},[86,15291,842],{"class":817},[86,15293,845],{"class":813},[86,15295,15296,15298,15300],{"class":88,"line":1357},[86,15297,1779],{"class":813},[86,15299,830],{"class":817},[86,15301,845],{"class":813},[86,15303,15304,15306,15308,15310,15312,15314,15316,15318,15320],{"class":88,"line":1363},[86,15305,1699],{"class":813},[86,15307,4588],{"class":817},[86,15309,1682],{"class":92},[86,15311,871],{"class":813},[86,15313,5804],{"class":96},[86,15315,5540],{"class":92},[86,15317,871],{"class":813},[86,15319,5811],{"class":96},[86,15321,845],{"class":813},[86,15323,15324,15326,15328,15330,15332,15334],{"class":88,"line":1369},[86,15325,1732],{"class":813},[86,15327,4638],{"class":817},[86,15329,5556],{"class":92},[86,15331,871],{"class":813},[86,15333,5728],{"class":96},[86,15335,877],{"class":813},[86,15337,15338,15340,15342,15344,15346,15348],{"class":88,"line":1375},[86,15339,1732],{"class":813},[86,15341,4653],{"class":817},[86,15343,5556],{"class":92},[86,15345,871],{"class":813},[86,15347,1708],{"class":96},[86,15349,877],{"class":813},[86,15351,15352,15354,15356,15358,15360,15363],{"class":88,"line":1381},[86,15353,1732],{"class":813},[86,15355,3816],{"class":817},[86,15357,4027],{"class":92},[86,15359,871],{"class":813},[86,15361,15362],{"class":96},"\"0.0 0.0 ${distance + base_link_z / 2}\"",[86,15364,877],{"class":813},[86,15366,15367,15369,15371],{"class":88,"line":2279},[86,15368,1779],{"class":813},[86,15370,4588],{"class":817},[86,15372,845],{"class":813},[86,15374,15375],{"class":88,"line":2284},[86,15376,808],{"emptyLinePlaceholder":807},[86,15378,15379,15381,15383,15385,15387,15389,15391,15393,15396],{"class":88,"line":2294},[86,15380,1699],{"class":813},[86,15382,12573],{"class":817},[86,15384,1682],{"class":92},[86,15386,871],{"class":813},[86,15388,12580],{"class":96},[86,15390,12583],{"class":92},[86,15392,871],{"class":813},[86,15394,15395],{"class":96},"\"wheel_name is_front is_left\"",[86,15397,12591],{"class":813},[86,15399,15400,15402,15404,15406,15408,15410],{"class":88,"line":2305},[86,15401,1732],{"class":813},[86,15403,830],{"class":817},[86,15405,1682],{"class":92},[86,15407,871],{"class":813},[86,15409,12604],{"class":96},[86,15411,845],{"class":813},[86,15413,15414,15416,15418],{"class":88,"line":2314},[86,15415,3991],{"class":813},[86,15417,842],{"class":817},[86,15419,845],{"class":813},[86,15421,15422,15424,15426],{"class":88,"line":2319},[86,15423,12619],{"class":813},[86,15425,854],{"class":817},[86,15427,845],{"class":813},[86,15429,15430,15432,15434,15436,15438,15440,15442,15444,15446],{"class":88,"line":2324},[86,15431,12628],{"class":813},[86,15433,3676],{"class":817},[86,15435,5755],{"class":92},[86,15437,871],{"class":813},[86,15439,12637],{"class":96},[86,15441,6915],{"class":92},[86,15443,871],{"class":813},[86,15445,12644],{"class":96},[86,15447,3940],{"class":813},[86,15449,15450,15452,15454],{"class":88,"line":2333},[86,15451,12651],{"class":813},[86,15453,854],{"class":817},[86,15455,845],{"class":813},[86,15457,15458,15460,15462,15464,15466,15468,15470,15472,15474],{"class":88,"line":2956},[86,15459,12619],{"class":813},[86,15461,3816],{"class":817},[86,15463,4027],{"class":92},[86,15465,871],{"class":813},[86,15467,4032],{"class":96},[86,15469,4035],{"class":92},[86,15471,871],{"class":813},[86,15473,12678],{"class":96},[86,15475,3940],{"class":813},[86,15477,15478,15480,15482,15484,15486,15488],{"class":88,"line":2967},[86,15479,12619],{"class":813},[86,15481,3738],{"class":817},[86,15483,1682],{"class":92},[86,15485,871],{"class":813},[86,15487,6582],{"class":96},[86,15489,877],{"class":813},[86,15491,15492,15494,15496],{"class":88,"line":2995},[86,15493,12727],{"class":813},[86,15495,842],{"class":817},[86,15497,845],{"class":813},[86,15499,15500,15502,15504],{"class":88,"line":3000},[86,15501,1761],{"class":813},[86,15503,830],{"class":817},[86,15505,845],{"class":813},[86,15507,15508,15510,15512,15514,15516,15519,15521,15523,15525],{"class":88,"line":3005},[86,15509,1732],{"class":813},[86,15511,4588],{"class":817},[86,15513,1682],{"class":92},[86,15515,871],{"class":813},[86,15517,15518],{"class":96},"\"${wheel_name}2baselink\"",[86,15520,5540],{"class":92},[86,15522,871],{"class":813},[86,15524,5545],{"class":96},[86,15526,845],{"class":813},[86,15528,15529,15531,15533,15535,15537,15539],{"class":88,"line":3014},[86,15530,3991],{"class":813},[86,15532,4638],{"class":817},[86,15534,5556],{"class":92},[86,15536,871],{"class":813},[86,15538,1708],{"class":96},[86,15540,15541],{"class":813},"  />\n",[86,15543,15544,15546,15548,15550,15552,15554],{"class":88,"line":3404},[86,15545,3991],{"class":813},[86,15547,4653],{"class":817},[86,15549,5556],{"class":92},[86,15551,871],{"class":813},[86,15553,12604],{"class":96},[86,15555,3940],{"class":813},[86,15557,15558,15560,15562,15564,15566,15569,15571,15573,15575],{"class":88,"line":3410},[86,15559,3991],{"class":813},[86,15561,3816],{"class":817},[86,15563,4027],{"class":92},[86,15565,871],{"class":813},[86,15567,15568],{"class":96},"\"${(base_link_x / 2 - wheel_radius) * is_front} ${base_link_y / 2 * is_left} ${(base_link_z / 2 + distance - wheel_radius) * -1}\"",[86,15570,4035],{"class":92},[86,15572,871],{"class":813},[86,15574,4032],{"class":96},[86,15576,3940],{"class":813},[86,15578,15579,15581,15583,15585,15587,15589],{"class":88,"line":3415},[86,15580,3991],{"class":813},[86,15582,5608],{"class":817},[86,15584,4027],{"class":92},[86,15586,871],{"class":813},[86,15588,7072],{"class":96},[86,15590,3940],{"class":813},[86,15592,15593,15595,15597],{"class":88,"line":3421},[86,15594,1761],{"class":813},[86,15596,4588],{"class":817},[86,15598,845],{"class":813},[86,15600,15601,15603,15605],{"class":88,"line":3426},[86,15602,1779],{"class":813},[86,15604,12573],{"class":817},[86,15606,845],{"class":813},[86,15608,15609],{"class":88,"line":3432},[86,15610,808],{"emptyLinePlaceholder":807},[86,15612,15613,15615,15617,15619,15621,15623,15626,15628,15630,15633,15635,15637],{"class":88,"line":3441},[86,15614,1699],{"class":813},[86,15616,12754],{"class":817},[86,15618,12757],{"class":92},[86,15620,871],{"class":813},[86,15622,12762],{"class":96},[86,15624,15625],{"class":92}," is_front",[86,15627,871],{"class":813},[86,15629,10524],{"class":96},[86,15631,15632],{"class":92}," is_left",[86,15634,871],{"class":813},[86,15636,10524],{"class":96},[86,15638,3940],{"class":813},[86,15640,15641,15643,15645,15647,15649,15651,15653,15655,15658,15660,15662,15664],{"class":88,"line":3453},[86,15642,1699],{"class":813},[86,15644,12754],{"class":817},[86,15646,12757],{"class":92},[86,15648,871],{"class":813},[86,15650,12777],{"class":96},[86,15652,15625],{"class":92},[86,15654,871],{"class":813},[86,15656,15657],{"class":96},"\"-1\"",[86,15659,15632],{"class":92},[86,15661,871],{"class":813},[86,15663,10524],{"class":96},[86,15665,3940],{"class":813},[86,15667,15668,15670,15672,15674,15676,15678,15680,15682,15684,15686,15688,15690],{"class":88,"line":3463},[86,15669,1699],{"class":813},[86,15671,12754],{"class":817},[86,15673,12757],{"class":92},[86,15675,871],{"class":813},[86,15677,12792],{"class":96},[86,15679,15625],{"class":92},[86,15681,871],{"class":813},[86,15683,10524],{"class":96},[86,15685,15632],{"class":92},[86,15687,871],{"class":813},[86,15689,15657],{"class":96},[86,15691,3940],{"class":813},[86,15693,15694,15696,15698,15700,15702,15704,15706,15708,15710,15712,15714,15716],{"class":88,"line":3468},[86,15695,1699],{"class":813},[86,15697,12754],{"class":817},[86,15699,12757],{"class":92},[86,15701,871],{"class":813},[86,15703,12807],{"class":96},[86,15705,15625],{"class":92},[86,15707,871],{"class":813},[86,15709,15657],{"class":96},[86,15711,15632],{"class":92},[86,15713,871],{"class":813},[86,15715,15657],{"class":96},[86,15717,3940],{"class":813},[86,15719,15720,15722,15724],{"class":88,"line":3473},[86,15721,4080],{"class":813},[86,15723,818],{"class":817},[86,15725,845],{"class":813},[3612,15727,15729],{"id":15728},"add-a-camera","Add a camera",[15,15731,14731,15732,14735],{},[73,15733,15734],{},"car_camera.urdf.xacro",[78,15736,15738],{"className":798,"code":15737,"language":800,"meta":20,"style":20},"\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",[73,15739,15740,15744,15758,15762,15785,15807,15829,15851,15873,15895,15899,15913,15921,15929,15944,15952,15973,15987,15995,16003,16007,16027,16041,16055,16070,16078],{"__ignoreMap":20},[86,15741,15742],{"class":88,"line":89},[86,15743,808],{"emptyLinePlaceholder":807},[86,15745,15746,15748,15750,15752,15754,15756],{"class":88,"line":638},[86,15747,1399],{"class":813},[86,15749,818],{"class":817},[86,15751,12485],{"class":92},[86,15753,871],{"class":813},[86,15755,12490],{"class":96},[86,15757,845],{"class":813},[86,15759,15760],{"class":88,"line":824},[86,15761,808],{"emptyLinePlaceholder":807},[86,15763,15764,15766,15768,15770,15772,15775,15777,15779,15782],{"class":88,"line":836},[86,15765,1699],{"class":813},[86,15767,12503],{"class":817},[86,15769,1682],{"class":92},[86,15771,871],{"class":813},[86,15773,15774],{"class":96},"\"camera_x\"",[86,15776,12513],{"class":92},[86,15778,871],{"class":813},[86,15780,15781],{"class":96},"\"0.012\"",[86,15783,15784],{"class":813}," /> \n",[86,15786,15787,15789,15791,15793,15795,15798,15800,15802,15805],{"class":88,"line":848},[86,15788,1699],{"class":813},[86,15790,12503],{"class":817},[86,15792,1682],{"class":92},[86,15794,871],{"class":813},[86,15796,15797],{"class":96},"\"camera_y\"",[86,15799,12513],{"class":92},[86,15801,871],{"class":813},[86,15803,15804],{"class":96},"\"0.05\"",[86,15806,15784],{"class":813},[86,15808,15809,15811,15813,15815,15817,15820,15822,15824,15827],{"class":88,"line":859},[86,15810,1699],{"class":813},[86,15812,12503],{"class":817},[86,15814,1682],{"class":92},[86,15816,871],{"class":813},[86,15818,15819],{"class":96},"\"camera_z\"",[86,15821,12513],{"class":92},[86,15823,871],{"class":813},[86,15825,15826],{"class":96},"\"0.01\"",[86,15828,15784],{"class":813},[86,15830,15831,15833,15835,15837,15839,15842,15844,15846,15849],{"class":88,"line":880},[86,15832,1699],{"class":813},[86,15834,12503],{"class":817},[86,15836,1682],{"class":92},[86,15838,871],{"class":813},[86,15840,15841],{"class":96},"\"camera_joint_x\"",[86,15843,12513],{"class":92},[86,15845,871],{"class":813},[86,15847,15848],{"class":96},"\"${base_link_x / 2 - camera_x / 2}\"",[86,15850,15784],{"class":813},[86,15852,15853,15855,15857,15859,15861,15864,15866,15868,15871],{"class":88,"line":890},[86,15854,1699],{"class":813},[86,15856,12503],{"class":817},[86,15858,1682],{"class":92},[86,15860,871],{"class":813},[86,15862,15863],{"class":96},"\"camera_joint_y\"",[86,15865,12513],{"class":92},[86,15867,871],{"class":813},[86,15869,15870],{"class":96},"\"0.0\"",[86,15872,15784],{"class":813},[86,15874,15875,15877,15879,15881,15883,15886,15888,15890,15893],{"class":88,"line":900},[86,15876,1699],{"class":813},[86,15878,12503],{"class":817},[86,15880,1682],{"class":92},[86,15882,871],{"class":813},[86,15884,15885],{"class":96},"\"camera_joint_z\"",[86,15887,12513],{"class":92},[86,15889,871],{"class":813},[86,15891,15892],{"class":96},"\"${base_link_z / 2 + camera_z / 2}\"",[86,15894,15784],{"class":813},[86,15896,15897],{"class":88,"line":910},[86,15898,808],{"emptyLinePlaceholder":807},[86,15900,15901,15903,15905,15907,15909,15911],{"class":88,"line":1043},[86,15902,1699],{"class":813},[86,15904,830],{"class":817},[86,15906,1682],{"class":92},[86,15908,871],{"class":813},[86,15910,5429],{"class":96},[86,15912,845],{"class":813},[86,15914,15915,15917,15919],{"class":88,"line":1048},[86,15916,1732],{"class":813},[86,15918,842],{"class":817},[86,15920,845],{"class":813},[86,15922,15923,15925,15927],{"class":88,"line":1065},[86,15924,3991],{"class":813},[86,15926,854],{"class":817},[86,15928,845],{"class":813},[86,15930,15931,15933,15935,15937,15939,15942],{"class":88,"line":1087},[86,15932,12619],{"class":813},[86,15934,865],{"class":817},[86,15936,868],{"class":92},[86,15938,871],{"class":813},[86,15940,15941],{"class":96},"\"${camera_x} ${camera_y} ${camera_z}\"",[86,15943,3940],{"class":813},[86,15945,15946,15948,15950],{"class":88,"line":1107},[86,15947,12727],{"class":813},[86,15949,854],{"class":817},[86,15951,845],{"class":813},[86,15953,15954,15956,15958,15960,15962,15965,15967,15969,15971],{"class":88,"line":1137},[86,15955,3991],{"class":813},[86,15957,3816],{"class":817},[86,15959,4027],{"class":92},[86,15961,871],{"class":813},[86,15963,15964],{"class":96},"\"0.0 0.0 0.0\"",[86,15966,4035],{"class":92},[86,15968,871],{"class":813},[86,15970,15964],{"class":96},[86,15972,3940],{"class":813},[86,15974,15975,15977,15979,15981,15983,15985],{"class":88,"line":1142},[86,15976,3991],{"class":813},[86,15978,3738],{"class":817},[86,15980,1682],{"class":92},[86,15982,871],{"class":813},[86,15984,5281],{"class":96},[86,15986,3940],{"class":813},[86,15988,15989,15991,15993],{"class":88,"line":1148},[86,15990,1761],{"class":813},[86,15992,842],{"class":817},[86,15994,845],{"class":813},[86,15996,15997,15999,16001],{"class":88,"line":1153},[86,15998,1779],{"class":813},[86,16000,830],{"class":817},[86,16002,845],{"class":813},[86,16004,16005],{"class":88,"line":1159},[86,16006,808],{"emptyLinePlaceholder":807},[86,16008,16009,16011,16013,16015,16017,16019,16021,16023,16025],{"class":88,"line":1181},[86,16010,1699],{"class":813},[86,16012,4588],{"class":817},[86,16014,1682],{"class":92},[86,16016,871],{"class":813},[86,16018,5537],{"class":96},[86,16020,5540],{"class":92},[86,16022,871],{"class":813},[86,16024,5811],{"class":96},[86,16026,845],{"class":813},[86,16028,16029,16031,16033,16035,16037,16039],{"class":88,"line":1192},[86,16030,1732],{"class":813},[86,16032,4638],{"class":817},[86,16034,5556],{"class":92},[86,16036,871],{"class":813},[86,16038,1708],{"class":96},[86,16040,3940],{"class":813},[86,16042,16043,16045,16047,16049,16051,16053],{"class":88,"line":1206},[86,16044,1732],{"class":813},[86,16046,4653],{"class":817},[86,16048,5556],{"class":92},[86,16050,871],{"class":813},[86,16052,5429],{"class":96},[86,16054,3940],{"class":813},[86,16056,16057,16059,16061,16063,16065,16068],{"class":88,"line":1218},[86,16058,1732],{"class":813},[86,16060,3816],{"class":817},[86,16062,4027],{"class":92},[86,16064,871],{"class":813},[86,16066,16067],{"class":96},"\"${camera_joint_x} ${camera_joint_y} ${camera_joint_z}\"",[86,16069,3940],{"class":813},[86,16071,16072,16074,16076],{"class":88,"line":1235},[86,16073,1779],{"class":813},[86,16075,4588],{"class":817},[86,16077,845],{"class":813},[86,16079,16080,16082,16084],{"class":88,"line":1241},[86,16081,4080],{"class":813},[86,16083,818],{"class":817},[86,16085,845],{"class":813},[3612,16087,16089],{"id":16088},"add-radar","Add radar",[15,16091,14731,16092,14735],{},[73,16093,16094],{},"car_laser.urdf.xacro",[78,16096,16098],{"className":798,"code":16097,"language":800,"meta":20,"style":20},"\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",[73,16099,16100,16104,16118,16122,16137,16152,16160,16164,16186,16207,16228,16249,16271,16275,16290,16298,16306,16328,16336,16356,16370,16378,16386,16390,16411,16425,16439,16454,16462],{"__ignoreMap":20},[86,16101,16102],{"class":88,"line":89},[86,16103,808],{"emptyLinePlaceholder":807},[86,16105,16106,16108,16110,16112,16114,16116],{"class":88,"line":638},[86,16107,1399],{"class":813},[86,16109,818],{"class":817},[86,16111,12485],{"class":92},[86,16113,871],{"class":813},[86,16115,12490],{"class":96},[86,16117,845],{"class":813},[86,16119,16120],{"class":88,"line":824},[86,16121,808],{"emptyLinePlaceholder":807},[86,16123,16124,16126,16128,16130,16132,16135],{"class":88,"line":836},[86,16125,1699],{"class":813},[86,16127,3738],{"class":817},[86,16129,1682],{"class":92},[86,16131,871],{"class":813},[86,16133,16134],{"class":96},"\"blue\"",[86,16136,845],{"class":813},[86,16138,16139,16141,16143,16145,16147,16150],{"class":88,"line":848},[86,16140,1732],{"class":813},[86,16142,3763],{"class":817},[86,16144,3932],{"class":92},[86,16146,871],{"class":813},[86,16148,16149],{"class":96},"\"0.0 0.0 0.4 0.95\"",[86,16151,3940],{"class":813},[86,16153,16154,16156,16158],{"class":88,"line":859},[86,16155,1779],{"class":813},[86,16157,3738],{"class":817},[86,16159,845],{"class":813},[86,16161,16162],{"class":88,"line":880},[86,16163,808],{"emptyLinePlaceholder":807},[86,16165,16166,16168,16170,16172,16174,16177,16179,16181,16184],{"class":88,"line":890},[86,16167,1699],{"class":813},[86,16169,12503],{"class":817},[86,16171,1682],{"class":92},[86,16173,871],{"class":813},[86,16175,16176],{"class":96},"\"laser_length\"",[86,16178,12513],{"class":92},[86,16180,871],{"class":813},[86,16182,16183],{"class":96},"\"0.03\"",[86,16185,15784],{"class":813},[86,16187,16188,16190,16192,16194,16196,16199,16201,16203,16205],{"class":88,"line":900},[86,16189,1699],{"class":813},[86,16191,12503],{"class":817},[86,16193,1682],{"class":92},[86,16195,871],{"class":813},[86,16197,16198],{"class":96},"\"laser_radius\"",[86,16200,12513],{"class":92},[86,16202,871],{"class":813},[86,16204,16183],{"class":96},[86,16206,15784],{"class":813},[86,16208,16209,16211,16213,16215,16217,16220,16222,16224,16226],{"class":88,"line":910},[86,16210,1699],{"class":813},[86,16212,12503],{"class":817},[86,16214,1682],{"class":92},[86,16216,871],{"class":813},[86,16218,16219],{"class":96},"\"laser_joint_x\"",[86,16221,12513],{"class":92},[86,16223,871],{"class":813},[86,16225,15870],{"class":96},[86,16227,15784],{"class":813},[86,16229,16230,16232,16234,16236,16238,16241,16243,16245,16247],{"class":88,"line":1043},[86,16231,1699],{"class":813},[86,16233,12503],{"class":817},[86,16235,1682],{"class":92},[86,16237,871],{"class":813},[86,16239,16240],{"class":96},"\"laser_joint_y\"",[86,16242,12513],{"class":92},[86,16244,871],{"class":813},[86,16246,15870],{"class":96},[86,16248,15784],{"class":813},[86,16250,16251,16253,16255,16257,16259,16262,16264,16266,16269],{"class":88,"line":1048},[86,16252,1699],{"class":813},[86,16254,12503],{"class":817},[86,16256,1682],{"class":92},[86,16258,871],{"class":813},[86,16260,16261],{"class":96},"\"laser_joint_z\"",[86,16263,12513],{"class":92},[86,16265,871],{"class":813},[86,16267,16268],{"class":96},"\"${base_link_z / 2 + laser_length / 2}\"",[86,16270,15784],{"class":813},[86,16272,16273],{"class":88,"line":1065},[86,16274,808],{"emptyLinePlaceholder":807},[86,16276,16277,16279,16281,16283,16285,16288],{"class":88,"line":1087},[86,16278,1699],{"class":813},[86,16280,830],{"class":817},[86,16282,1682],{"class":92},[86,16284,871],{"class":813},[86,16286,16287],{"class":96},"\"laser\"",[86,16289,845],{"class":813},[86,16291,16292,16294,16296],{"class":88,"line":1107},[86,16293,1732],{"class":813},[86,16295,842],{"class":817},[86,16297,845],{"class":813},[86,16299,16300,16302,16304],{"class":88,"line":1137},[86,16301,3991],{"class":813},[86,16303,854],{"class":817},[86,16305,845],{"class":813},[86,16307,16308,16310,16312,16314,16316,16319,16321,16323,16326],{"class":88,"line":1142},[86,16309,12619],{"class":813},[86,16311,3676],{"class":817},[86,16313,5755],{"class":92},[86,16315,871],{"class":813},[86,16317,16318],{"class":96},"\"${laser_radius}\"",[86,16320,6915],{"class":92},[86,16322,871],{"class":813},[86,16324,16325],{"class":96},"\"${laser_length}\"",[86,16327,3940],{"class":813},[86,16329,16330,16332,16334],{"class":88,"line":1148},[86,16331,12727],{"class":813},[86,16333,854],{"class":817},[86,16335,845],{"class":813},[86,16337,16338,16340,16342,16344,16346,16348,16350,16352,16354],{"class":88,"line":1153},[86,16339,3991],{"class":813},[86,16341,3816],{"class":817},[86,16343,4027],{"class":92},[86,16345,871],{"class":813},[86,16347,15964],{"class":96},[86,16349,4035],{"class":92},[86,16351,871],{"class":813},[86,16353,15964],{"class":96},[86,16355,3940],{"class":813},[86,16357,16358,16360,16362,16364,16366,16368],{"class":88,"line":1159},[86,16359,3991],{"class":813},[86,16361,3738],{"class":817},[86,16363,1682],{"class":92},[86,16365,871],{"class":813},[86,16367,16134],{"class":96},[86,16369,3940],{"class":813},[86,16371,16372,16374,16376],{"class":88,"line":1181},[86,16373,1761],{"class":813},[86,16375,842],{"class":817},[86,16377,845],{"class":813},[86,16379,16380,16382,16384],{"class":88,"line":1192},[86,16381,1779],{"class":813},[86,16383,830],{"class":817},[86,16385,845],{"class":813},[86,16387,16388],{"class":88,"line":1206},[86,16389,808],{"emptyLinePlaceholder":807},[86,16391,16392,16394,16396,16398,16400,16403,16405,16407,16409],{"class":88,"line":1218},[86,16393,1699],{"class":813},[86,16395,4588],{"class":817},[86,16397,1682],{"class":92},[86,16399,871],{"class":813},[86,16401,16402],{"class":96},"\"laser2baselink\"",[86,16404,5540],{"class":92},[86,16406,871],{"class":813},[86,16408,5811],{"class":96},[86,16410,845],{"class":813},[86,16412,16413,16415,16417,16419,16421,16423],{"class":88,"line":1235},[86,16414,1732],{"class":813},[86,16416,4638],{"class":817},[86,16418,5556],{"class":92},[86,16420,871],{"class":813},[86,16422,1708],{"class":96},[86,16424,3940],{"class":813},[86,16426,16427,16429,16431,16433,16435,16437],{"class":88,"line":1241},[86,16428,1732],{"class":813},[86,16430,4653],{"class":817},[86,16432,5556],{"class":92},[86,16434,871],{"class":813},[86,16436,16287],{"class":96},[86,16438,3940],{"class":813},[86,16440,16441,16443,16445,16447,16449,16452],{"class":88,"line":1246},[86,16442,1732],{"class":813},[86,16444,3816],{"class":817},[86,16446,4027],{"class":92},[86,16448,871],{"class":813},[86,16450,16451],{"class":96},"\"${laser_joint_x} ${laser_joint_y} ${laser_joint_z}\"",[86,16453,3940],{"class":813},[86,16455,16456,16458,16460],{"class":88,"line":1252},[86,16457,1779],{"class":813},[86,16459,4588],{"class":817},[86,16461,845],{"class":813},[86,16463,16464,16466,16468],{"class":88,"line":1262},[86,16465,4080],{"class":813},[86,16467,818],{"class":817},[86,16469,845],{"class":813},[3612,16471,16473],{"id":16472},"execute","Execute",[15,16475,16476],{},"After compilation, execute the following command in the workspace terminal:",[78,16478,16480],{"className":80,"code":16479,"language":82,"meta":20,"style":20},"\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",[73,16481,16482,16486,16491,16513,16518,16524,16530,16563],{"__ignoreMap":20},[86,16483,16484],{"class":88,"line":89},[86,16485,808],{"emptyLinePlaceholder":807},[86,16487,16488],{"class":88,"line":638},[86,16489,16490],{"class":1028},"# ROS Humble\n",[86,16492,16493,16495,16497,16499,16501,16504,16506,16508,16510],{"class":88,"line":824},[86,16494,722],{"class":92},[86,16496,1550],{"class":96},[86,16498,731],{"class":96},[86,16500,2570],{"class":96},[86,16502,16503],{"class":96}," model:=ros2",[86,16505,725],{"class":96},[86,16507,2548],{"class":96},[86,16509,2551],{"class":734},[86,16511,16512],{"class":96}," cpp06_urdf/urdf/xacro/car.urdf.xacro\n",[86,16514,16515],{"class":88,"line":836},[86,16516,16517],{"class":1028},"#ROS Jazzy\n",[86,16519,16520,16522],{"class":88,"line":848},[86,16521,1516],{"class":92},[86,16523,8336],{"class":96},[86,16525,16526,16528],{"class":88,"line":859},[86,16527,1540],{"class":734},[86,16529,1543],{"class":96},[86,16531,16532,16534,16536,16538,16540,16543,16545,16547,16549,16551,16554,16557,16560],{"class":88,"line":880},[86,16533,722],{"class":92},[86,16535,2462],{"class":96},[86,16537,12867],{"class":96},[86,16539,12867],{"class":96},[86,16541,16542],{"class":813}," $(",[86,16544,722],{"class":92},[86,16546,725],{"class":96},[86,16548,2548],{"class":96},[86,16550,731],{"class":96},[86,16552,16553],{"class":813},")",[86,16555,16556],{"class":96},"/share/cpp06_urdf/urdf/xacro/car.urdf.xacro",[86,16558,16559],{"class":734}," -o",[86,16561,16562],{"class":96}," ./src/cpp06_urdf/urdf/urdf/car.urdf\n",[86,16564,16565,16567,16569,16571,16573],{"class":88,"line":890},[86,16566,722],{"class":92},[86,16568,1550],{"class":96},[86,16570,731],{"class":96},[86,16572,2570],{"class":96},[86,16574,16575],{"class":96}," model:=./src/cpp06_urdf/urdf/urdf/car.urdf\n",[15,16577,16578],{},"After executing the command, rviz2 displays a robot model similar to the requirements.",[15,16580,16581],{},[18,16582],{"alt":20,"src":16583},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1616.webp",[10,16585,16587],{"id":16586},"summary","Summary",[15,16589,16590],{},[18,16591],{"alt":20,"src":16592},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1617.webp",[15,16594,16595],{},"Currently, it's just an empty shell. The LiDAR, camera, and wheels are all placeholders; their functionality will only be realized in advanced practice.",[16597,16598,16599],"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":20,"searchDepth":638,"depth":638,"links":16601},[16602,16603,16604,16605,16606,16607,16608,16609],{"id":12,"depth":824,"text":13},{"id":62,"depth":824,"text":63},{"id":644,"depth":824,"text":645},{"id":3560,"depth":824,"text":3561},{"id":7803,"depth":824,"text":7804},{"id":7985,"depth":824,"text":7986},{"id":765,"depth":824,"text":765},{"id":16586,"depth":824,"text":16587},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan",9000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言",false,null,"en-US","en-us",{},{"title":5,"description":20},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","JO6AVZT1moAlUhJupS2g8jCNua8tCeFVWpJ7oLS8SdM",[16629,16634,16639,16645,16651,16657,16663,16668,16674,16680,16686,16691,16697,16703,16709,16715,16721,16727,16732,16738,16743,16749,16754,16760,16766,16772,16778,16784,16790,16796,16802,16808,16814,16819,16825,16831,16837,16843,16849,16855,16861,16867,16873,16879,16885,16890,16895,16900,16905,16910,16915,16920,16925,16930,16935,16940,16945,16950,16955,16956],{"path":16630,"stem":16631,"title":16632,"date":16612,"chapter":319,"chapterSort":16633,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2",1000000,{"path":16635,"stem":16636,"title":16637,"date":16612,"chapter":443,"chapterSort":16638,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform",10000000,{"path":16640,"stem":16641,"title":16642,"date":16612,"chapter":16643,"chapterSort":16644,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":16646,"stem":16647,"title":16648,"date":16612,"chapter":16649,"chapterSort":16650,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":16652,"stem":16653,"title":16654,"date":16612,"chapter":16655,"chapterSort":16656,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":16658,"stem":16659,"title":16660,"date":16612,"chapter":16661,"chapterSort":16662,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":16664,"stem":16665,"title":16666,"date":16612,"chapter":457,"chapterSort":16667,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform",11000000,{"path":16669,"stem":16670,"title":16671,"date":16612,"chapter":16672,"chapterSort":16673,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":16675,"stem":16676,"title":16677,"date":16612,"chapter":16678,"chapterSort":16679,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":16681,"stem":16682,"title":16683,"date":16612,"chapter":16684,"chapterSort":16685,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":16687,"stem":16688,"title":16689,"date":16612,"chapter":471,"chapterSort":16690,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)",12000000,{"path":16692,"stem":16693,"title":16694,"date":16612,"chapter":16695,"chapterSort":16696,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":16698,"stem":16699,"title":16700,"date":16612,"chapter":16701,"chapterSort":16702,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":16704,"stem":16705,"title":16706,"date":16612,"chapter":16707,"chapterSort":16708,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":16710,"stem":16711,"title":16712,"date":16612,"chapter":16713,"chapterSort":16714,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":16716,"stem":16717,"title":16718,"date":16612,"chapter":16719,"chapterSort":16720,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":16722,"stem":16723,"title":16724,"date":16612,"chapter":16725,"chapterSort":16726,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":16728,"stem":16729,"title":16694,"date":16612,"chapter":16730,"chapterSort":16731,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":16733,"stem":16734,"title":16735,"date":16612,"chapter":16736,"chapterSort":16737,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":16739,"stem":16740,"title":16694,"date":16612,"chapter":16741,"chapterSort":16742,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":16744,"stem":16745,"title":16746,"date":16612,"chapter":16747,"chapterSort":16748,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":16750,"stem":16751,"title":16752,"date":16612,"chapter":485,"chapterSort":16753,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication",13000000,{"path":16755,"stem":16756,"title":16757,"date":16612,"chapter":16758,"chapterSort":16759,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":16761,"stem":16762,"title":16763,"date":16612,"chapter":16764,"chapterSort":16765,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":16767,"stem":16768,"title":16769,"date":16612,"chapter":16770,"chapterSort":16771,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":16773,"stem":16774,"title":16775,"date":16612,"chapter":16776,"chapterSort":16777,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":16779,"stem":16780,"title":16781,"date":16612,"chapter":16782,"chapterSort":16783,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":16785,"stem":16786,"title":16787,"date":16612,"chapter":16788,"chapterSort":16789,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":16791,"stem":16792,"title":16793,"date":16612,"chapter":16794,"chapterSort":16795,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":16797,"stem":16798,"title":16799,"date":16612,"chapter":16800,"chapterSort":16801,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":16803,"stem":16804,"title":16805,"date":16612,"chapter":16806,"chapterSort":16807,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":16809,"stem":16810,"title":16811,"date":16612,"chapter":16812,"chapterSort":16813,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":16815,"stem":16816,"title":335,"date":16612,"chapter":16817,"chapterSort":16818,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","14.6.4",14060400,{"path":16820,"stem":16821,"title":16822,"date":16612,"chapter":16823,"chapterSort":16824,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":16826,"stem":16827,"title":16828,"date":16612,"chapter":16829,"chapterSort":16830,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":16832,"stem":16833,"title":16834,"date":16612,"chapter":16835,"chapterSort":16836,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":16838,"stem":16839,"title":16840,"date":16612,"chapter":16841,"chapterSort":16842,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":16844,"stem":16845,"title":16846,"date":16612,"chapter":16847,"chapterSort":16848,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":16850,"stem":16851,"title":16852,"date":16612,"chapter":16853,"chapterSort":16854,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":16856,"stem":16857,"title":16858,"date":16612,"chapter":16859,"chapterSort":16860,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":16862,"stem":16863,"title":16864,"date":16612,"chapter":16865,"chapterSort":16866,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":16868,"stem":16869,"title":16870,"date":16612,"chapter":16871,"chapterSort":16872,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":16874,"stem":16875,"title":16876,"date":16612,"chapter":16877,"chapterSort":16878,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":16880,"stem":16881,"title":16882,"date":16612,"chapter":16883,"chapterSort":16884,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":16886,"stem":16887,"title":16888,"date":16612,"chapter":499,"chapterSort":16889,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware",14000000,{"path":16891,"stem":16892,"title":16893,"date":16612,"chapter":513,"chapterSort":16894,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control",15000000,{"path":16896,"stem":16897,"title":16898,"date":16612,"chapter":527,"chapterSort":16899,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm",16000000,{"path":16901,"stem":16902,"title":16903,"date":16612,"chapter":541,"chapterSort":16904,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)",17000000,{"path":16906,"stem":16907,"title":16908,"date":16612,"chapter":555,"chapterSort":16909,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS",18000000,{"path":16911,"stem":16912,"title":16913,"date":16612,"chapter":568,"chapterSort":16914,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform",19000000,{"path":16916,"stem":16917,"title":16918,"date":16612,"chapter":332,"chapterSort":16919,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","Getting Started",2000000,{"path":16921,"stem":16922,"title":16923,"date":16612,"chapter":581,"chapterSort":16924,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV",20000000,{"path":16926,"stem":16927,"title":16928,"date":16612,"chapter":346,"chapterSort":16929,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages",3000000,{"path":16931,"stem":16932,"title":16933,"date":16612,"chapter":359,"chapterSort":16934,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","Four Major Communications",4000000,{"path":16936,"stem":16937,"title":16938,"date":16612,"chapter":373,"chapterSort":16939,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms",5000000,{"path":16941,"stem":16942,"title":16943,"date":16612,"chapter":387,"chapterSort":16944,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch",6000000,{"path":16946,"stem":16947,"title":16948,"date":16612,"chapter":401,"chapterSort":16949,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","Replaying rosbag2",7000000,{"path":16951,"stem":16952,"title":16953,"date":16612,"chapter":415,"chapterSort":16954,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF",8000000,{"path":16610,"stem":16626,"title":5,"date":16612,"chapter":429,"chapterSort":16611,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":16619},{"path":16615,"stem":16957,"title":16958,"date":16612,"chapter":16620,"chapterSort":16959,"docKey":16614,"docRoot":16615,"docTitle":16616,"isWikiDoc":807,"isWikiIndex":807},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":16961},[16962,16963,16966,16969,16972],{"path":16610,"localeSlug":16622,"i18nKey":16618},{"path":16964,"localeSlug":16965,"i18nKey":16618},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","zh-hant",{"path":16967,"localeSlug":16968,"i18nKey":16618},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","zh-hk",{"path":16970,"localeSlug":16971,"i18nKey":16618},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","zh-tw",{"path":16973,"localeSlug":16974,"i18nKey":16618},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","zh-cn",[16610,16625,16964,16625,16967,16625,16970,16625,16973,16625],1780671798980]