[{"data":1,"prerenderedAt":3699},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao":3,"wiki-doc-items-2023-12-30-ros2-tutorial":3279,"wiki:author-members":3687},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":3266,"chapterOrder":3267,"date":3268,"description":32,"docKey":3269,"docRoot":3270,"docTitle":3271,"extension":3272,"isWikiDoc":615,"isWikiIndex":3273,"meta":3274,"navigation":615,"path":3275,"seo":3276,"stem":3277,"wikiDepth":413,"__hash__":3278},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍.md","ROS2介绍",[7],"董佳辉",{"type":9,"value":10,"toc":3256},"minimark",[11,16,20,23,27,37,41,45,48,56,62,65,71,74,90,94,204,208,211,219,222,225,232,239,246,251,256,261,264,269,273,276,281,284,292,295,303,307,310,315,318,323,328,331,339,342,347,357,360,365,368,376,381,390,396,399,402,417,422,426,429,434,437,442,446,449,454,457,489,492,497,500,526,531,535,541,545,549,554,557,562,565,570,573,578,583,594,643,648,651,656,817,1255,1261,1266,1269,1278,1281,1286,1293,1311,1315,1319,1323,1328,1330,1335,1338,1343,1346,1351,1355,1442,1447,1452,1455,1458,1461,1467,1472,1475,1559,1564,1569,1574,1690,1695,1700,1703,1719,1724,1729,1734,1737,1742,1747,1752,1820,1825,1830,1833,1867,1872,1877,1880,1895,1898,1903,1906,1911,1915,1919,1924,1926,1934,1936,1941,1974,1978,1994,1998,2002,2006,2012,2016,2019,2022,2025,2031,2034,2037,2040,2043,2046,2049,2052,2055,2166,2206,2209,2215,2220,2224,2420,2424,2427,2431,2434,2439,2442,2447,2450,2455,2460,2463,2466,2471,2474,2479,2482,2487,2490,2544,2547,2552,2555,2558,2631,2634,2637,2640,2662,2667,2670,2675,2678,2706,2709,2714,2717,2757,2762,2764,2767,2801,2804,2809,2811,2814,2820,2825,2828,2831,2834,2837,2842,2845,2850,2857,2862,2865,2904,2909,2914,2920,2925,2958,2963,2966,2981,2984,3035,3040,3043,3047,3110,3113,3116,3119,3138,3141,3144,3147,3152,3155,3158,3163,3166,3169,3172,3202,3205,3208,3213,3216,3220,3223,3252],[12,13,15],"h3",{"id":14},"ros2简介","ROS2简介",[17,18,19],"p",{},"The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it's all open source.",[17,21,22],{},"机器人操作系统（ROS）是一组软件库和工具，可帮助您构建机器人应用程序。从驱动程序到最先进的算法，再加上强大的开发工具，ROS为您的下一个机器人项目提供了所需的东西。而且都是开源的。",[12,24,26],{"id":25},"ros2框架","ROS2框架",[17,28,29,34],{},[30,31],"img",{"alt":32,"src":33},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage3.webp",[30,35],{"alt":32,"src":36},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage4.webp",[12,38,40],{"id":39},"ros2参考资料","ROS2参考资料",[42,43,44],"h4",{"id":44},"官方资料",[17,46,47],{},"由于ROS2参考文档太少，所以很多教程还是需要看ROS2官网：",[17,49,50],{},[51,52,53],"a",{"href":53,"rel":54},"https:\u002F\u002Fwww.ros.org\u002F",[55],"nofollow",[42,57,59],{"id":58},"推荐的视频资料与配套文档",[60,61,58],"strong",{},[17,63,64],{},"非常推荐以下资料与视频",[17,66,67],{},[51,68,69],{"href":69,"rel":70},"https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1VB4y137ys",[55],[17,72,73],{},"赵虚左原版配套资料:",[75,76,77,84],"ul",{},[78,79,80],"li",{},[51,81,83],{"href":82},"\u002Fdocs\u002Fros2\u002Fcore\u002Findex.html","ROS2理论与实践核心篇",[78,85,86],{},[51,87,89],{"href":88},"\u002Fdocs\u002Fros2\u002Fapplication\u002Findex.html","ROS2理论与实践应用篇",[12,91,93],{"id":92},"学习ros2需要用到的知识储备","学习ROS2需要用到的知识储备",[95,96,97],"ol",{},[78,98,99,100,105,108,109,113,115,119,125,108,127,131,137,108,139,143,149,108,151,155,108,157,161,167,108,169,174,176,180,186,188,192,198,200],{},"需要用哪些知识？",[95,101,102],{},[78,103,104],{},"Linux基本操作与Shell脚本语言",[106,107],"br",{},"  ",[51,110,112],{"href":111},"\u002Fwiki\u002F2024-03-30-linux-jiao-cheng","Linux基本教程",[106,114],{},[51,116,117],{"href":117,"rel":118},"https:\u002F\u002Fwww.runoob.com\u002Flinux\u002Flinux-tutorial.html",[55],[95,120,122],{"start":121},4,[78,123,124],{},"Cmake基本使用",[106,126],{},[51,128,130],{"href":129},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","Linux C++编译环境配置",[95,132,134],{"start":133},6,[78,135,136],{},"Git基本操作",[106,138],{},[51,140,142],{"href":141},"\u002Fwiki\u002F2023-12-29-git-jiao-xue","Vinci机器人队Git入门教程",[95,144,146],{"start":145},8,[78,147,148],{},"C\u002FC++语言",[106,150],{},[51,152,154],{"href":153},"\u002Fwiki\u002F2023-09-29-ji-qi-ren-gong-cheng-shi-cheng-zhang-ji-hua","Vinci机器人队电控组入门指导",[106,156],{},[51,158,160],{"href":159},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Vinci机器人队C\u002FC++资料",[95,162,164],{"start":163},11,[78,165,166],{},"Python3语言",[106,168],{},[51,170,173],{"href":171,"rel":172},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FQZL8wLeewiTmvfkczMyccAdVn0c",[55],"Vinci机器人队Python3教程",[106,175],{},[51,177,178],{"href":178,"rel":179},"https:\u002F\u002Fwww.runoob.com\u002Fpython3\u002Fpython3-tutorial.html",[55],[95,181,183],{"start":182},14,[78,184,185],{},"XML语言",[106,187],{},[51,189,190],{"href":190,"rel":191},"https:\u002F\u002Fwww.runoob.com\u002Fxml\u002Fxml-tutorial.html",[55],[95,193,195],{"start":194},16,[78,196,197],{},"YAML语言",[106,199],{},[51,201,202],{"href":202,"rel":203},"http:\u002F\u002Fwww.noobyard.com\u002Farticle\u002Fp-saghdsms-mn.html",[55],[12,205,207],{"id":206},"安装ros2","安装ROS2",[17,209,210],{},"** 建议使用Kubuntu 24.04 LTS **\n** 建议学习 ROS2 Jazzy 版本，本教程将基于ROS2 Jazzy **",[42,212,214,215,218],{"id":213},"二进制包安装ros2以kubuntu-jammy-2204安装-ros-humble-为例","二进制包安装ROS2(以Kubuntu Jammy 22.04安装 ",[60,216,217],{},"ROS Humble"," 为例)",[17,220,221],{},"注意:",[17,223,224],{},"截至2024年12月，强烈建议如果要用ROS2的话，一定要用ROS Humble,别用ROS Jazzy，这玩意有些区别，特别是Gazebo,几乎没啥教程的。",[17,226,227,228],{},"Ubuntu Jammy 22.04(LTS)请安装ROS Humble(LTS)。安装向导网站:",[51,229,230],{"href":230,"rel":231},"https:\u002F\u002Fdocs.ros.org\u002Fen\u002Fhumble\u002FInstallation\u002FUbuntu-Install-Debians.html",[55],[17,233,234,235],{},"Ubuntu Noble 24.04(LTS)请安装ROS Jazzy(LTS)。安装向导网站:",[51,236,237],{"href":237,"rel":238},"https:\u002F\u002Fdocs.ros.org\u002Fen\u002Fjazzy\u002FInstallation\u002FUbuntu-Install-Debians.html",[55],[17,240,241,242],{},"各个ROS1、ROS2版本所支持的发行版：",[51,243,244],{"href":244,"rel":245},"https:\u002F\u002Fwww.ros.org\u002Freps\u002Frep-2000.html",[55],[247,248,250],"h5",{"id":249},"进入ros官网","进入ROS官网",[17,252,253],{},[30,254],{"alt":32,"src":255},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage5.webp",[17,257,258],{},[30,259],{"alt":32,"src":260},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage6.webp",[17,262,263],{},"一定要安装LTS版本的ROS2",[17,265,266],{},[30,267],{"alt":32,"src":268},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage7.webp",[247,270,272],{"id":271},"安装ros2前期准备工作","安装ROS2前期准备工作",[17,274,275],{},"装LTS版本的ROS2点击使用debian包管理工具安装ROS2二进制文件",[17,277,278],{},[30,279],{"alt":32,"src":280},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage8.webp",[17,282,283],{},"按照ROS2官网教程在终端里输入如下命令",[17,285,286,289],{},[30,287],{"alt":32,"src":288},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage9.webp",[30,290],{"alt":32,"src":291},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage10.webp",[17,293,294],{},"依旧输入以下命令启动Ubuntu Universe Repo",[17,296,297,300],{},[30,298],{"alt":32,"src":299},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage11.webp",[30,301],{"alt":32,"src":302},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage12.webp",[247,304,306],{"id":305},"换源国内源","换源(国内源)",[17,308,309],{},"这个是官网的源，是从国外服务器下载ROS2二进制文件的，对网络有要求，所以我们要给改为国内源。",[17,311,312],{},[30,313],{"alt":32,"src":314},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage13.webp",[17,316,317],{},"百度搜索北京外国语大学镜像源(亲测，北方最快的源)",[17,319,320],{},[30,321],{"alt":32,"src":322},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage14.webp",[17,324,325],{},[30,326],{"alt":32,"src":327},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage15.webp",[17,329,330],{},"找到ROS2，然后勾上sudo和https，选择正确的Linux发行版。在使用该命令前有可能会遇到权限不够的问题，可以先往下看，如何以root权限运行所有命令。",[17,332,333,336],{},[30,334],{"alt":32,"src":335},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage16.webp",[30,337],{"alt":32,"src":338},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage17.webp",[17,340,341],{},"先输入sudo passwd设置root密码（Ubuntu系发行版要干的事）（debian,Fedora等发行版在装机时就已经设置过了，无需运行）",[17,343,344],{},[30,345],{"alt":32,"src":346},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage18.webp",[348,349,354],"pre",{"className":350,"code":352,"language":353},[351],"language-text","sudo passwd\n\nsu -\n","text",[355,356,352],"code",{"__ignoreMap":32},[17,358,359],{},"然后进入管理员权限下",[17,361,362],{},[30,363],{"alt":32,"src":364},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage19.webp",[17,366,367],{},"挨行复制输入运行",[17,369,370,373],{},[30,371],{"alt":32,"src":372},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage20.webp",[30,374],{"alt":32,"src":375},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage21.webp",[17,377,378],{},[30,379],{"alt":32,"src":380},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage22.webp",[17,382,383,384,389],{},"上面下载key的时候如果卡住了，那就是github又抽风了，很正常的问题，可以选择科学*上网(",[51,385,388],{"href":386,"rel":387},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FHnjswlR8NiVjVgkbn6hcAlwzn2e",[55],"科学机场教程",")解决，如果还解决不了，可以通过下方教程修改hosts。",[17,391,392],{},[51,393,394],{"href":394,"rel":395},"https:\u002F\u002Fblog.csdn.net\u002Fqq_40584960\u002Farticle\u002Fdetails\u002F117963644?sharetype=blog&shareId=117963644&sharerefer=APP&sharesource=qq_33274985&sharefrom=link",[55],[17,397,398],{},"成功下载key之后，继续往下弄。",[17,400,401],{},"输入exit退出root模式",[348,403,407],{"className":404,"code":405,"language":406,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","exit\n","bash",[355,408,409],{"__ignoreMap":32},[410,411,414],"span",{"class":412,"line":413},"line",1,[410,415,405],{"class":416},"sj4cs",[17,418,419],{},[30,420],{"alt":32,"src":421},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage23.webp",[247,423,425],{"id":424},"通过apt安装ros2","通过apt安装ROS2",[17,427,428],{},"把以下红色框框的全部在终端里敲一遍",[17,430,431],{},[30,432],{"alt":32,"src":433},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage24.webp",[17,435,436],{},"国内的镜像下载还是非常快的。",[17,438,439],{},[30,440],{"alt":32,"src":441},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage25.webp",[247,443,445],{"id":444},"ros2基础环境变量配置","ROS2基础环境变量配置",[17,447,448],{},"复制该行",[17,450,451],{},[30,452],{"alt":32,"src":453},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage26.webp",[17,455,456],{},"输入以下命令",[348,458,460],{"className":404,"code":459,"language":406,"meta":32,"style":32},"sudo apt-get install vim\nsudo vim ~\u002F.bashrc\n",[355,461,462,478],{"__ignoreMap":32},[410,463,464,468,472,475],{"class":412,"line":413},[410,465,467],{"class":466},"sScJk","sudo",[410,469,471],{"class":470},"sZZnC"," apt-get",[410,473,474],{"class":470}," install",[410,476,477],{"class":470}," vim\n",[410,479,481,483,486],{"class":412,"line":480},2,[410,482,467],{"class":466},[410,484,485],{"class":470}," vim",[410,487,488],{"class":470}," ~\u002F.bashrc\n",[17,490,491],{},"在最底部把这行加上（vim不会使用的，请自行百度）",[17,493,494],{},[30,495],{"alt":32,"src":496},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage27.webp",[17,498,499],{},"刷新以下当前终端的环境变量",[348,501,503],{"className":404,"code":502,"language":406,"meta":32,"style":32},"echo 'export ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n",[355,504,505,519],{"__ignoreMap":32},[410,506,507,510,513,517],{"class":412,"line":413},[410,508,509],{"class":416},"echo",[410,511,512],{"class":470}," 'export ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml'",[410,514,516],{"class":515},"szBVR"," >>",[410,518,488],{"class":470},[410,520,521,524],{"class":412,"line":480},[410,522,523],{"class":416},"source",[410,525,488],{"class":470},[17,527,528],{},[30,529],{"alt":32,"src":530},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage28.webp",[247,532,534],{"id":533},"测试ros2","测试ROS2",[17,536,537,538,540],{},"请往下翻到**",[355,539,534],{},"**章节",[42,542,544],{"id":543},"从源码安装ros2难度较高ubuntu用上面那个简单方法即可","从源码安装ROS2(难度较高，Ubuntu用上面那个简单方法即可。)",[247,546,548],{"id":547},"fedora或者rocky","Fedora或者Rocky",[17,550,551],{},[51,552,53],{"href":53,"rel":553},[55],[17,555,556],{},"先进官网,选择对应的版本,比如我这里选择ROS Jazzy.",[17,558,559],{},[30,560],{"alt":32,"src":561},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage29.webp",[17,563,564],{},"然后选择用源码进行编译,找到对应的发行版,比如我这里是Feodra.",[17,566,567],{},[30,568],{"alt":32,"src":569},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage30.webp",[17,571,572],{},"然后根据官网教程来就行",[17,574,575],{},[30,576],{"alt":32,"src":577},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage31.webp",[95,579,580],{},[78,581,582],{},"设置区域",[17,584,585,586,589,590,593],{},"确保你的 locale 支持 ",[355,587,588],{},"UTF-8","。如果你在一个最小的环境（比如 docker 容器）中，locale 可能是 ",[355,591,592],{},"C"," 等最小的东西。我们使用以下设置进行测试。但是，如果您使用的是其他支持 UTF-8 的区域设置，应该没问题。",[348,595,599],{"className":596,"code":597,"language":598,"meta":32,"style":32},"language-cmake shiki shiki-themes github-light github-dark","locale  # check for UTF-8\n\nsudo dnf install langpacks-en glibc-langpack-en\nexport LANG=en_US.UTF-8\n\nlocale  # verify settings\n","cmake",[355,600,601,611,617,623,631,636],{"__ignoreMap":32},[410,602,603,607],{"class":412,"line":413},[410,604,606],{"class":605},"sVt8B","locale  ",[410,608,610],{"class":609},"sJ8bj","# check for UTF-8\n",[410,612,613],{"class":412,"line":480},[410,614,616],{"emptyLinePlaceholder":615},true,"\n",[410,618,620],{"class":412,"line":619},3,[410,621,622],{"class":605},"sudo dnf install langpacks-en glibc-langpack-en\n",[410,624,625,628],{"class":412,"line":121},[410,626,627],{"class":515},"export",[410,629,630],{"class":605}," LANG=en_US.UTF-8\n",[410,632,634],{"class":412,"line":633},5,[410,635,616],{"emptyLinePlaceholder":615},[410,637,638,640],{"class":412,"line":133},[410,639,606],{"class":605},[410,641,642],{"class":609},"# verify settings\n",[95,644,645],{"start":480},[78,646,647],{},"启用必须的仓库",[17,649,650],{},"Fedora无需额外启用仓库,RHEL需要.",[95,652,653],{"start":619},[78,654,655],{},"安装开发工具",[348,657,659],{"className":596,"code":658,"language":598,"meta":32,"style":32},"sudo dnf install -y \\\n  cmake \\\n  gcc-c++ \\\n  git \\\n  make \\\n  patch \\\n  python3-colcon-common-extensions \\\n  python3-mypy \\\n  python3-pip \\\n  python3-pydocstyle \\\n  python3-pytest \\\n  python3-pytest-cov \\\n  python3-pytest-mock \\\n  python3-pytest-repeat \\\n  python3-pytest-rerunfailures \\\n  python3-pytest-runner \\\n  python3-rosdep \\\n  python3-setuptools \\\n  python3-vcstool \\\n  wget\n\n# install some pip packages needed for testing and\n\n# not available as RPMs\npython3 -m pip install -U --user \\\n  flake8-blind-except==0.1.1 \\\n  flake8-class-newline \\\n  flake8-deprecated\n",[355,660,661,666,671,676,681,686,691,697,702,708,714,719,725,731,736,742,747,753,759,765,771,776,782,787,793,799,805,811],{"__ignoreMap":32},[410,662,663],{"class":412,"line":413},[410,664,665],{"class":605},"sudo dnf install -y \\\n",[410,667,668],{"class":412,"line":480},[410,669,670],{"class":605},"  cmake \\\n",[410,672,673],{"class":412,"line":619},[410,674,675],{"class":605},"  gcc-c++ \\\n",[410,677,678],{"class":412,"line":121},[410,679,680],{"class":605},"  git \\\n",[410,682,683],{"class":412,"line":633},[410,684,685],{"class":605},"  make \\\n",[410,687,688],{"class":412,"line":133},[410,689,690],{"class":605},"  patch \\\n",[410,692,694],{"class":412,"line":693},7,[410,695,696],{"class":605},"  python3-colcon-common-extensions \\\n",[410,698,699],{"class":412,"line":145},[410,700,701],{"class":605},"  python3-mypy \\\n",[410,703,705],{"class":412,"line":704},9,[410,706,707],{"class":605},"  python3-pip \\\n",[410,709,711],{"class":412,"line":710},10,[410,712,713],{"class":605},"  python3-pydocstyle \\\n",[410,715,716],{"class":412,"line":163},[410,717,718],{"class":605},"  python3-pytest \\\n",[410,720,722],{"class":412,"line":721},12,[410,723,724],{"class":605},"  python3-pytest-cov \\\n",[410,726,728],{"class":412,"line":727},13,[410,729,730],{"class":605},"  python3-pytest-mock \\\n",[410,732,733],{"class":412,"line":182},[410,734,735],{"class":605},"  python3-pytest-repeat \\\n",[410,737,739],{"class":412,"line":738},15,[410,740,741],{"class":605},"  python3-pytest-rerunfailures \\\n",[410,743,744],{"class":412,"line":194},[410,745,746],{"class":605},"  python3-pytest-runner \\\n",[410,748,750],{"class":412,"line":749},17,[410,751,752],{"class":605},"  python3-rosdep \\\n",[410,754,756],{"class":412,"line":755},18,[410,757,758],{"class":605},"  python3-setuptools \\\n",[410,760,762],{"class":412,"line":761},19,[410,763,764],{"class":605},"  python3-vcstool \\\n",[410,766,768],{"class":412,"line":767},20,[410,769,770],{"class":605},"  wget\n",[410,772,774],{"class":412,"line":773},21,[410,775,616],{"emptyLinePlaceholder":615},[410,777,779],{"class":412,"line":778},22,[410,780,781],{"class":609},"# install some pip packages needed for testing and\n",[410,783,785],{"class":412,"line":784},23,[410,786,616],{"emptyLinePlaceholder":615},[410,788,790],{"class":412,"line":789},24,[410,791,792],{"class":609},"# not available as RPMs\n",[410,794,796],{"class":412,"line":795},25,[410,797,798],{"class":605},"python3 -m pip install -U --user \\\n",[410,800,802],{"class":412,"line":801},26,[410,803,804],{"class":605},"  flake8-blind-except==0.1.1 \\\n",[410,806,808],{"class":412,"line":807},27,[410,809,810],{"class":605},"  flake8-class-newline \\\n",[410,812,814],{"class":412,"line":813},28,[410,815,816],{"class":605},"  flake8-deprecated\n",[95,818,819,1252],{"start":121},[78,820,821,822,827,829,830,850,852,855,860,862,863,872,877,879,883,885,888,890,893,975,977,980,982,985,990,1020,1022,1025,1027,1028,1037,1039,1040,1043,1044,1066,1068,1069,1071,1074,1079,1081,1082,1084,1085,1151,1219,1221,1224,1230,1239,1241,1244,1246,1247,1249],{},"构建ROS2",[95,823,824],{},[78,825,826],{},"获取ROS2源码",[106,828],{},"  找一个要存放ROS2的文件夹,建议在\u002Fhome分区找,然后在这个文件夹下打开终端.",[348,831,833],{"className":596,"code":832,"language":598,"meta":32,"style":32},"mkdir -p .\u002Fros2_jazzy\u002Fsrc\ncd .\u002Fros2_jazzy\nvcs import --input https:\u002F\u002Fraw.githubusercontent.com\u002Fros2\u002Fros2\u002Fjazzy\u002Fros2.repos src\n",[355,834,835,840,845],{"__ignoreMap":32},[410,836,837],{"class":412,"line":413},[410,838,839],{"class":605},"mkdir -p .\u002Fros2_jazzy\u002Fsrc\n",[410,841,842],{"class":412,"line":480},[410,843,844],{"class":605},"cd .\u002Fros2_jazzy\n",[410,846,847],{"class":412,"line":619},[410,848,849],{"class":605},"vcs import --input https:\u002F\u002Fraw.githubusercontent.com\u002Fros2\u002Fros2\u002Fjazzy\u002Fros2.repos src\n",[106,851],{},[30,853],{"alt":32,"src":854},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage32.webp",[95,856,857],{"start":633},[78,858,859],{},"更新系统",[106,861],{},"  ROS 2 软件包构建在经常更新的 红帽系 系统上。始终建议您在安装新软件包之前确保您的系统是最新的。",[348,864,866],{"className":596,"code":865,"language":598,"meta":32,"style":32},"sudo dnf upgrade\n",[355,867,868],{"__ignoreMap":32},[410,869,870],{"class":412,"line":413},[410,871,865],{"class":605},[95,873,874],{"start":145},[78,875,876],{},"初始化并更换rosdep源",[106,878],{},[51,880,881],{"href":881,"rel":882},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Frosdistro\u002F",[55],[106,884],{},[30,886],{"alt":32,"src":887},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage33.webp",[106,889],{},[30,891],{"alt":32,"src":892},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage34.webp",[348,894,896],{"className":596,"code":895,"language":598,"meta":32,"style":32},"\n# 手动模拟 rosdep init\nsudo mkdir -p \u002Fetc\u002Fros\u002Frosdep\u002Fsources.list.d\u002F\nsudo curl -o \u002Fetc\u002Fros\u002Frosdep\u002Fsources.list.d\u002F20-default.list -L https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fgithub-raw\u002Fros\u002Frosdistro\u002Fmaster\u002Frosdep\u002Fsources.list.d\u002F20-default.list\n\n# 加入环境\necho 'export ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml' >> ~\u002F.bashrc\n\n# 加载.bashrc\nsource ~\u002F.bashrc\n\n# 更新rosdep\nrosdep update\n",[355,897,898,902,907,918,933,937,942,947,951,956,961,965,970],{"__ignoreMap":32},[410,899,900],{"class":412,"line":413},[410,901,616],{"emptyLinePlaceholder":615},[410,903,904],{"class":412,"line":480},[410,905,906],{"class":609},"# 手动模拟 rosdep init\n",[410,908,909,912,915],{"class":412,"line":619},[410,910,911],{"class":605},"sudo mkdir -p \u002Fetc\u002Fros\u002Frosdep\u002F",[410,913,914],{"class":466},"sources",[410,916,917],{"class":605},".list.d\u002F\n",[410,919,920,923,925,928,930],{"class":412,"line":121},[410,921,922],{"class":605},"sudo curl -o \u002Fetc\u002Fros\u002Frosdep\u002F",[410,924,914],{"class":466},[410,926,927],{"class":605},".list.d\u002F20-default.list -L https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fgithub-raw\u002Fros\u002Frosdistro\u002Fmaster\u002Frosdep\u002F",[410,929,914],{"class":466},[410,931,932],{"class":605},".list.d\u002F20-default.list\n",[410,934,935],{"class":412,"line":633},[410,936,616],{"emptyLinePlaceholder":615},[410,938,939],{"class":412,"line":133},[410,940,941],{"class":609},"# 加入环境\n",[410,943,944],{"class":412,"line":693},[410,945,946],{"class":605},"echo 'export ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml' >> ~\u002F.bashrc\n",[410,948,949],{"class":412,"line":145},[410,950,616],{"emptyLinePlaceholder":615},[410,952,953],{"class":412,"line":704},[410,954,955],{"class":609},"# 加载.bashrc\n",[410,957,958],{"class":412,"line":710},[410,959,960],{"class":605},"source ~\u002F.bashrc\n",[410,962,963],{"class":412,"line":163},[410,964,616],{"emptyLinePlaceholder":615},[410,966,967],{"class":412,"line":721},[410,968,969],{"class":609},"# 更新rosdep\n",[410,971,972],{"class":412,"line":727},[410,973,974],{"class":605},"rosdep update\n",[106,976],{},[30,978],{"alt":32,"src":979},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage35.webp",[106,981],{},[30,983],{"alt":32,"src":984},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage36.webp",[95,986,987],{"start":738},[78,988,989],{},"通过rosdep安装依赖",[348,991,993],{"className":596,"code":992,"language":598,"meta":32,"style":32},"export ROS_PYTHON_VERSION=3\n\nrosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[355,994,995,1002,1006],{"__ignoreMap":32},[410,996,997,999],{"class":412,"line":413},[410,998,627],{"class":515},[410,1000,1001],{"class":605}," ROS_PYTHON_VERSION=3\n",[410,1003,1004],{"class":412,"line":480},[410,1005,616],{"emptyLinePlaceholder":615},[410,1007,1008,1011,1014,1017],{"class":412,"line":619},[410,1009,1010],{"class":605},"rosdep install --from-",[410,1012,1013],{"class":515},"paths",[410,1015,1016],{"class":605}," src --ignore-src -y --skip-keys ",[410,1018,1019],{"class":470},"\"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[106,1021],{},[30,1023],{"alt":32,"src":1024},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage37.webp",[106,1026],{},"  如果出现上面这种错误,使用pip3安装包.",[348,1029,1031],{"className":596,"code":1030,"language":598,"meta":32,"style":32},"sudo pip3 install flake8-docstrings\n",[355,1032,1033],{"__ignoreMap":32},[410,1034,1035],{"class":412,"line":413},[410,1036,1030],{"class":605},[106,1038],{},"  然后,使用下面命令忽略掉",[355,1041,1042],{},"flake8-docstrings",".",[348,1045,1047],{"className":596,"code":1046,"language":598,"meta":32,"style":32},"rosdep install --from-paths src --ignore-src -y \\\n--skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[355,1048,1049,1058],{"__ignoreMap":32},[410,1050,1051,1053,1055],{"class":412,"line":413},[410,1052,1010],{"class":605},[410,1054,1013],{"class":515},[410,1056,1057],{"class":605}," src --ignore-src -y \\\n",[410,1059,1060,1063],{"class":412,"line":480},[410,1061,1062],{"class":605},"--skip-keys ",[410,1064,1065],{"class":470},"\"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[106,1067],{},"  显示成功即可",[106,1070],{},[30,1072],{"alt":32,"src":1073},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage38.webp",[95,1075,1076],{"start":789},[78,1077,1078],{},"配置环境(不是红帽系的发行版不用弄)",[106,1080],{},"  如果你是红帽系系统需要下面配置",[106,1083],{},"  可以用下面这些命令暂时定义这些宏。",[348,1086,1088],{"className":404,"code":1087,"language":406,"meta":32,"style":32},"export RPM_PACKAGE_NAME=qt_gui_cpp   # 根据包名调整（如 ros_\u003Cpackage>）\nexport RPM_PACKAGE_VERSION=1.0.0\nexport RPM_PACKAGE_RELEASE=1\nexport RPM_ARCH=$(uname -m)\n",[355,1089,1090,1106,1118,1130],{"__ignoreMap":32},[410,1091,1092,1094,1097,1100,1103],{"class":412,"line":413},[410,1093,627],{"class":515},[410,1095,1096],{"class":605}," RPM_PACKAGE_NAME",[410,1098,1099],{"class":515},"=",[410,1101,1102],{"class":605},"qt_gui_cpp   ",[410,1104,1105],{"class":609},"# 根据包名调整（如 ros_\u003Cpackage>）\n",[410,1107,1108,1110,1113,1115],{"class":412,"line":480},[410,1109,627],{"class":515},[410,1111,1112],{"class":605}," RPM_PACKAGE_VERSION",[410,1114,1099],{"class":515},[410,1116,1117],{"class":416},"1.0.0\n",[410,1119,1120,1122,1125,1127],{"class":412,"line":619},[410,1121,627],{"class":515},[410,1123,1124],{"class":605}," RPM_PACKAGE_RELEASE",[410,1126,1099],{"class":515},[410,1128,1129],{"class":416},"1\n",[410,1131,1132,1134,1137,1139,1142,1145,1148],{"class":412,"line":121},[410,1133,627],{"class":515},[410,1135,1136],{"class":605}," RPM_ARCH",[410,1138,1099],{"class":515},[410,1140,1141],{"class":605},"$(",[410,1143,1144],{"class":466},"uname",[410,1146,1147],{"class":416}," -m",[410,1149,1150],{"class":605},")\n",[1152,1153,1154,1171],"table",{},[1155,1156,1157],"thead",{},[1158,1159,1160,1165,1168],"tr",{},[1161,1162,1164],"th",{"align":1163},"left","变量名",[1161,1166,1167],{"align":1163},"示例值",[1161,1169,1170],{"align":1163},"用途",[1172,1173,1174,1186,1197,1208],"tbody",{},[1158,1175,1176,1180,1183],{},[1177,1178,1179],"td",{"align":1163},"RPM_PACKAGE_NAME",[1177,1181,1182],{"align":1163},"qt_gui_cpp",[1177,1184,1185],{"align":1163},"定义 RPM 包名",[1158,1187,1188,1191,1194],{},[1177,1189,1190],{"align":1163},"RPM_PACKAGE_VERSION",[1177,1192,1193],{"align":1163},"1.0.0",[1177,1195,1196],{"align":1163},"定义 RPM 包版本",[1158,1198,1199,1202,1205],{},[1177,1200,1201],{"align":1163},"RPM_PACKAGE_RELEASE",[1177,1203,1204],{"align":1163},"1",[1177,1206,1207],{"align":1163},"定义 RPM 包发行号",[1158,1209,1210,1213,1216],{},[1177,1211,1212],{"align":1163},"RPM_ARCH",[1177,1214,1215],{"align":1163},"x86_64 或 arm64",[1177,1217,1218],{"align":1163},"定义目标系统架构",[106,1220],{},[30,1222],{"alt":32,"src":1223},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage39.webp",[95,1225,1227],{"start":1226},30,[78,1228,1229],{},"使用colcon构建源码",[348,1231,1233],{"className":596,"code":1232,"language":598,"meta":32,"style":32},"colcon build --symlink-install\n",[355,1234,1235],{"__ignoreMap":32},[410,1236,1237],{"class":412,"line":413},[410,1238,1232],{"class":605},[106,1240],{},[30,1242],{"alt":32,"src":1243},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage40.webp",[106,1245],{},"  等待构建完毕,下方就是构建完毕且没错误的样子",[106,1248],{},[30,1250],{"alt":32,"src":1251},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage41.webp",[78,1253,1254],{},"配置基础环境",[17,1256,1257,1258],{},"找到下方文件夹,并复制路径,比如我的是",[355,1259,1260],{},"~\u002FUserFloder\u002FApplications\u002Fros2_jazzy",[17,1262,1263],{},[30,1264],{"alt":32,"src":1265},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage42.webp",[17,1267,1268],{},"使用vim修改bash的环境",[348,1270,1272],{"className":596,"code":1271,"language":598,"meta":32,"style":32},"vim ~\u002F.bashrc\n",[355,1273,1274],{"__ignoreMap":32},[410,1275,1276],{"class":412,"line":413},[410,1277,1271],{"class":605},[17,1279,1280],{},"使用Insert按键进行输入",[17,1282,1283],{},[30,1284],{"alt":32,"src":1285},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage43.webp",[17,1287,1288,1289,1292],{},"添加完这两行后,按ESC,然后",[355,1290,1291],{},":wq","保存并退出.",[348,1294,1296],{"className":596,"code":1295,"language":598,"meta":32,"style":32},"\n# 刷新当前环境变量\nsource ~\u002F.bashrc\n",[355,1297,1298,1302,1307],{"__ignoreMap":32},[410,1299,1300],{"class":412,"line":413},[410,1301,616],{"emptyLinePlaceholder":615},[410,1303,1304],{"class":412,"line":480},[410,1305,1306],{"class":609},"# 刷新当前环境变量\n",[410,1308,1309],{"class":412,"line":619},[410,1310,960],{"class":605},[95,1312,1313],{"start":133},[78,1314,534],{},[17,1316,537,1317,540],{},[355,1318,534],{},[247,1320,1322],{"id":1321},"debian","Debian",[17,1324,1325],{},[51,1326,53],{"href":53,"rel":1327},[55],[17,1329,556],{},[17,1331,1332],{},[30,1333],{"alt":32,"src":1334},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage44.webp",[17,1336,1337],{},"然后选择用源码进行编译,找到对应的发行版,比如我这里是Debian.",[17,1339,1340],{},[30,1341],{"alt":32,"src":1342},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage45.webp",[17,1344,1345],{},"接下来，从下图这里开始，跟着官方教程一路敲，但是有几个需要注意的点，我这里都会写出来：",[17,1347,1348],{},[30,1349],{"alt":32,"src":1350},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage46.webp",[95,1352,1353],{},[78,1354,582],{},[348,1356,1358],{"className":404,"code":1357,"language":406,"meta":32,"style":32},"locale  # check for UTF-8\n\nsudo apt update && sudo apt install locales\nsudo locale-gen en_US en_US.UTF-8\nsudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8\nexport LANG=en_US.UTF-8\n\nlocale  # verify settings\n",[355,1359,1360,1368,1372,1394,1407,1419,1431,1435],{"__ignoreMap":32},[410,1361,1362,1365],{"class":412,"line":413},[410,1363,1364],{"class":466},"locale",[410,1366,1367],{"class":609},"  # check for UTF-8\n",[410,1369,1370],{"class":412,"line":480},[410,1371,616],{"emptyLinePlaceholder":615},[410,1373,1374,1376,1379,1382,1385,1387,1389,1391],{"class":412,"line":619},[410,1375,467],{"class":466},[410,1377,1378],{"class":470}," apt",[410,1380,1381],{"class":470}," update",[410,1383,1384],{"class":605}," && ",[410,1386,467],{"class":466},[410,1388,1378],{"class":470},[410,1390,474],{"class":470},[410,1392,1393],{"class":470}," locales\n",[410,1395,1396,1398,1401,1404],{"class":412,"line":121},[410,1397,467],{"class":466},[410,1399,1400],{"class":470}," locale-gen",[410,1402,1403],{"class":470}," en_US",[410,1405,1406],{"class":470}," en_US.UTF-8\n",[410,1408,1409,1411,1414,1417],{"class":412,"line":633},[410,1410,467],{"class":466},[410,1412,1413],{"class":470}," update-locale",[410,1415,1416],{"class":470}," LC_ALL=en_US.UTF-8",[410,1418,630],{"class":470},[410,1420,1421,1423,1426,1428],{"class":412,"line":133},[410,1422,627],{"class":515},[410,1424,1425],{"class":605}," LANG",[410,1427,1099],{"class":515},[410,1429,1430],{"class":605},"en_US.UTF-8\n",[410,1432,1433],{"class":412,"line":693},[410,1434,616],{"emptyLinePlaceholder":615},[410,1436,1437,1439],{"class":412,"line":145},[410,1438,1364],{"class":466},[410,1440,1441],{"class":609},"  # verify settings\n",[95,1443,1444],{"start":480},[78,1445,1446],{},"换源",[17,1448,1449],{},[30,1450],{"alt":32,"src":1451},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage47.webp",[17,1453,1454],{},"红色部分是Ubuntu要做的，我们是debian,不需要做。",[17,1456,1457],{},"蓝色部分我们不要用官方的，官方是国外源，我们替换成国内源。",[17,1459,1460],{},"先去镜像源换源：",[17,1462,1463],{},[51,1464,1465],{"href":1465,"rel":1466},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fros2\u002F",[55],[17,1468,1469],{},[30,1470],{"alt":32,"src":1471},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage48.webp",[17,1473,1474],{},"比如我是debian12：",[348,1476,1478],{"className":404,"code":1477,"language":406,"meta":32,"style":32},"sudo apt install curl gnupg2\nsudo curl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Fros\u002Frosdistro\u002Fmaster\u002Fros.key  -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fros-archive-keyring.gpg\n\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fros-archive-keyring.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fros2\u002Fubuntu bookworm main\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fros2.list > \u002Fdev\u002Fnull\nsudo apt update\n",[355,1479,1480,1494,1512,1516,1550],{"__ignoreMap":32},[410,1481,1482,1484,1486,1488,1491],{"class":412,"line":413},[410,1483,467],{"class":466},[410,1485,1378],{"class":470},[410,1487,474],{"class":470},[410,1489,1490],{"class":470}," curl",[410,1492,1493],{"class":470}," gnupg2\n",[410,1495,1496,1498,1500,1503,1506,1509],{"class":412,"line":480},[410,1497,467],{"class":466},[410,1499,1490],{"class":470},[410,1501,1502],{"class":416}," -sSL",[410,1504,1505],{"class":470}," https:\u002F\u002Fraw.githubusercontent.com\u002Fros\u002Frosdistro\u002Fmaster\u002Fros.key",[410,1507,1508],{"class":416},"  -o",[410,1510,1511],{"class":470}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fros-archive-keyring.gpg\n",[410,1513,1514],{"class":412,"line":619},[410,1515,616],{"emptyLinePlaceholder":615},[410,1517,1518,1520,1523,1526,1529,1532,1535,1538,1541,1544,1547],{"class":412,"line":121},[410,1519,509],{"class":416},[410,1521,1522],{"class":470}," \"deb [arch=$(",[410,1524,1525],{"class":466},"dpkg",[410,1527,1528],{"class":416}," --print-architecture",[410,1530,1531],{"class":470},") signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fros-archive-keyring.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fros2\u002Fubuntu bookworm main\"",[410,1533,1534],{"class":515}," |",[410,1536,1537],{"class":466}," sudo",[410,1539,1540],{"class":470}," tee",[410,1542,1543],{"class":470}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fros2.list",[410,1545,1546],{"class":515}," >",[410,1548,1549],{"class":470}," \u002Fdev\u002Fnull\n",[410,1551,1552,1554,1556],{"class":412,"line":633},[410,1553,467],{"class":466},[410,1555,1378],{"class":470},[410,1557,1558],{"class":470}," update\n",[17,1560,1561],{},[30,1562],{"alt":32,"src":1563},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage49.webp",[95,1565,1566],{"start":619},[78,1567,1568],{},"上图成功换源后，再安装ros的工具：",[17,1570,1571],{},[30,1572],{"alt":32,"src":1573},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage50.webp",[348,1575,1577],{"className":404,"code":1576,"language":406,"meta":32,"style":32},"sudo apt update && sudo apt install -y \\\n  python3-flake8-blind-except \\\n  python3-flake8-class-newline \\\n  python3-flake8-deprecated \\\n  python3-mypy \\\n  python3-pip \\\n  python3-pytest \\\n  python3-pytest-cov \\\n  python3-pytest-mock \\\n  python3-pytest-repeat \\\n  python3-pytest-rerunfailures \\\n  python3-pytest-runner \\\n  python3-pytest-timeout \\\n  ros-dev-tools\n",[355,1578,1579,1601,1608,1615,1622,1629,1636,1643,1650,1657,1664,1671,1678,1685],{"__ignoreMap":32},[410,1580,1581,1583,1585,1587,1589,1591,1593,1595,1598],{"class":412,"line":413},[410,1582,467],{"class":466},[410,1584,1378],{"class":470},[410,1586,1381],{"class":470},[410,1588,1384],{"class":605},[410,1590,467],{"class":466},[410,1592,1378],{"class":470},[410,1594,474],{"class":470},[410,1596,1597],{"class":416}," -y",[410,1599,1600],{"class":416}," \\\n",[410,1602,1603,1606],{"class":412,"line":480},[410,1604,1605],{"class":470},"  python3-flake8-blind-except",[410,1607,1600],{"class":416},[410,1609,1610,1613],{"class":412,"line":619},[410,1611,1612],{"class":470},"  python3-flake8-class-newline",[410,1614,1600],{"class":416},[410,1616,1617,1620],{"class":412,"line":121},[410,1618,1619],{"class":470},"  python3-flake8-deprecated",[410,1621,1600],{"class":416},[410,1623,1624,1627],{"class":412,"line":633},[410,1625,1626],{"class":470},"  python3-mypy",[410,1628,1600],{"class":416},[410,1630,1631,1634],{"class":412,"line":133},[410,1632,1633],{"class":470},"  python3-pip",[410,1635,1600],{"class":416},[410,1637,1638,1641],{"class":412,"line":693},[410,1639,1640],{"class":470},"  python3-pytest",[410,1642,1600],{"class":416},[410,1644,1645,1648],{"class":412,"line":145},[410,1646,1647],{"class":470},"  python3-pytest-cov",[410,1649,1600],{"class":416},[410,1651,1652,1655],{"class":412,"line":704},[410,1653,1654],{"class":470},"  python3-pytest-mock",[410,1656,1600],{"class":416},[410,1658,1659,1662],{"class":412,"line":710},[410,1660,1661],{"class":470},"  python3-pytest-repeat",[410,1663,1600],{"class":416},[410,1665,1666,1669],{"class":412,"line":163},[410,1667,1668],{"class":470},"  python3-pytest-rerunfailures",[410,1670,1600],{"class":416},[410,1672,1673,1676],{"class":412,"line":721},[410,1674,1675],{"class":470},"  python3-pytest-runner",[410,1677,1600],{"class":416},[410,1679,1680,1683],{"class":412,"line":727},[410,1681,1682],{"class":470},"  python3-pytest-timeout",[410,1684,1600],{"class":416},[410,1686,1687],{"class":412,"line":182},[410,1688,1689],{"class":470},"  ros-dev-tools\n",[95,1691,1692],{"start":121},[78,1693,1694],{},"下载ROS2源码",[17,1696,1697],{},[30,1698],{"alt":32,"src":1699},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage51.webp",[17,1701,1702],{},"找一个要存放ROS2的文件夹,建议在\u002Fhome分区找,然后在这个文件夹下打开终端.",[348,1704,1705],{"className":596,"code":832,"language":598,"meta":32,"style":32},[355,1706,1707,1711,1715],{"__ignoreMap":32},[410,1708,1709],{"class":412,"line":413},[410,1710,839],{"class":605},[410,1712,1713],{"class":412,"line":480},[410,1714,844],{"class":605},[410,1716,1717],{"class":412,"line":619},[410,1718,849],{"class":605},[17,1720,1721],{},[30,1722],{"alt":32,"src":1723},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage52.webp",[95,1725,1726],{"start":633},[78,1727,1728],{},"补依赖之前，我们需要先初始化rosdep并给rosdep换源：",[17,1730,1731],{},[30,1732],{"alt":32,"src":1733},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage53.webp",[17,1735,1736],{},"图中红色部分，不要跟着这个来，这个是官方源，会很慢很慢，建议用bfsu的仓库。",[17,1738,1739],{},[51,1740,881],{"href":881,"rel":1741},[55],[17,1743,1744],{},[30,1745],{"alt":32,"src":1746},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage54.webp",[17,1748,1749],{},[30,1750],{"alt":32,"src":1751},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage55.webp",[348,1753,1754],{"className":596,"code":895,"language":598,"meta":32,"style":32},[355,1755,1756,1760,1764,1772,1784,1788,1792,1796,1800,1804,1808,1812,1816],{"__ignoreMap":32},[410,1757,1758],{"class":412,"line":413},[410,1759,616],{"emptyLinePlaceholder":615},[410,1761,1762],{"class":412,"line":480},[410,1763,906],{"class":609},[410,1765,1766,1768,1770],{"class":412,"line":619},[410,1767,911],{"class":605},[410,1769,914],{"class":466},[410,1771,917],{"class":605},[410,1773,1774,1776,1778,1780,1782],{"class":412,"line":121},[410,1775,922],{"class":605},[410,1777,914],{"class":466},[410,1779,927],{"class":605},[410,1781,914],{"class":466},[410,1783,932],{"class":605},[410,1785,1786],{"class":412,"line":633},[410,1787,616],{"emptyLinePlaceholder":615},[410,1789,1790],{"class":412,"line":133},[410,1791,941],{"class":609},[410,1793,1794],{"class":412,"line":693},[410,1795,946],{"class":605},[410,1797,1798],{"class":412,"line":145},[410,1799,616],{"emptyLinePlaceholder":615},[410,1801,1802],{"class":412,"line":704},[410,1803,955],{"class":609},[410,1805,1806],{"class":412,"line":710},[410,1807,960],{"class":605},[410,1809,1810],{"class":412,"line":163},[410,1811,616],{"emptyLinePlaceholder":615},[410,1813,1814],{"class":412,"line":721},[410,1815,969],{"class":609},[410,1817,1818],{"class":412,"line":727},[410,1819,974],{"class":605},[17,1821,1822],{},[30,1823],{"alt":32,"src":1824},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage56.webp",[17,1826,1827],{},[30,1828],{"alt":32,"src":1829},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage57.webp",[17,1831,1832],{},"出现以上红框部分，就是成功换源了。如果你不换源，下面补依赖的过程可能会巨慢（我具体没试过，猜测），除非你科学了。",[348,1834,1836],{"className":596,"code":1835,"language":598,"meta":32,"style":32},"sudo apt upgrade\n\nexport ROS_PYTHON_VERSION=3\n\nrosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[355,1837,1838,1843,1847,1853,1857],{"__ignoreMap":32},[410,1839,1840],{"class":412,"line":413},[410,1841,1842],{"class":605},"sudo apt upgrade\n",[410,1844,1845],{"class":412,"line":480},[410,1846,616],{"emptyLinePlaceholder":615},[410,1848,1849,1851],{"class":412,"line":619},[410,1850,627],{"class":515},[410,1852,1001],{"class":605},[410,1854,1855],{"class":412,"line":121},[410,1856,616],{"emptyLinePlaceholder":615},[410,1858,1859,1861,1863,1865],{"class":412,"line":633},[410,1860,1010],{"class":605},[410,1862,1013],{"class":515},[410,1864,1016],{"class":605},[410,1866,1019],{"class":470},[17,1868,1869],{},[30,1870],{"alt":32,"src":1871},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage58.webp",[95,1873,1874],{"start":133},[78,1875,1876],{},"编译ROS2",[17,1878,1879],{},"在ros_jazzy目录下，打开终端，跑下面命令。",[348,1881,1882],{"className":404,"code":1232,"language":406,"meta":32,"style":32},[355,1883,1884],{"__ignoreMap":32},[410,1885,1886,1889,1892],{"class":412,"line":413},[410,1887,1888],{"class":466},"colcon",[410,1890,1891],{"class":470}," build",[410,1893,1894],{"class":416}," --symlink-install\n",[17,1896,1897],{},"colcon build还有以下命令，如--packages-skip和--packages-select用来跳过和单个功能包编译。",[17,1899,1900],{},[30,1901],{"alt":32,"src":1902},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage59.webp",[17,1904,1905],{},"等待构建完毕,下方就是构建完毕且没错误的样子",[17,1907,1908],{},[30,1909],{"alt":32,"src":1910},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage60.webp",[95,1912,1913],{"start":693},[78,1914,1254],{},[17,1916,1257,1917],{},[355,1918,1260],{},[17,1920,1921],{},[30,1922],{"alt":32,"src":1923},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage61.webp",[17,1925,1268],{},[348,1927,1928],{"className":596,"code":1271,"language":598,"meta":32,"style":32},[355,1929,1930],{"__ignoreMap":32},[410,1931,1932],{"class":412,"line":413},[410,1933,1271],{"class":605},[17,1935,1280],{},[17,1937,1938],{},[30,1939],{"alt":32,"src":1940},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage62.webp",[348,1942,1944],{"className":404,"code":1943,"language":406,"meta":32,"style":32},"\n# 配置ROS2环境\nexport ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml\nsource ~\u002FUserFloder\u002FApplcations\u002Fros2_jazzy\u002Finstall\u002Fsetup.bash\n",[355,1945,1946,1950,1955,1967],{"__ignoreMap":32},[410,1947,1948],{"class":412,"line":413},[410,1949,616],{"emptyLinePlaceholder":615},[410,1951,1952],{"class":412,"line":480},[410,1953,1954],{"class":609},"# 配置ROS2环境\n",[410,1956,1957,1959,1962,1964],{"class":412,"line":619},[410,1958,627],{"class":515},[410,1960,1961],{"class":605}," ROSDISTRO_INDEX_URL",[410,1963,1099],{"class":515},[410,1965,1966],{"class":605},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml\n",[410,1968,1969,1971],{"class":412,"line":121},[410,1970,523],{"class":416},[410,1972,1973],{"class":470}," ~\u002FUserFloder\u002FApplcations\u002Fros2_jazzy\u002Finstall\u002Fsetup.bash\n",[17,1975,1288,1976,1292],{},[355,1977,1291],{},[348,1979,1980],{"className":596,"code":1295,"language":598,"meta":32,"style":32},[355,1981,1982,1986,1990],{"__ignoreMap":32},[410,1983,1984],{"class":412,"line":413},[410,1985,616],{"emptyLinePlaceholder":615},[410,1987,1988],{"class":412,"line":480},[410,1989,1306],{"class":609},[410,1991,1992],{"class":412,"line":619},[410,1993,960],{"class":605},[95,1995,1996],{"start":145},[78,1997,534],{},[17,1999,537,2000,540],{},[355,2001,534],{},[42,2003,2005],{"id":2004},"docker安装ros2","Docker安装ROS2",[17,2007,2008],{},[51,2009,2011],{"href":2010},"\u002Fwiki\u002F2024-10-03-docker-jiao-cheng","Docker教程",[12,2013,2015],{"id":2014},"ros2安装进阶可选","ROS2安装进阶(可选)",[17,2017,2018],{},"上面只是安装了最基本的ROS2包和配置了最基本的ROS2环境。",[17,2020,2021],{},"你安装完上面的内容后，可以选择接着进行下面的进阶配置ROS2环境。",[17,2023,2024],{},"也可以不安装进阶得东西，学到啥再安装啥就可以，当然也有想一劳永逸的同学，所以下面也会列出来最常用的ros2包和环境配置供大家一次性安装。",[17,2026,2027],{},[51,2028,2029],{"href":2029,"rel":2030},"https:\u002F\u002Findex.ros.org\u002F?search_packages=true",[55],[42,2032,2033],{"id":2033},"安装进阶的包",[17,2035,2036],{},"以下是一些ROS2自带的导航算法和仿真环境等等的包，下方将列出这些包。",[17,2038,2039],{},"如果你是Ubuntu的话：",[17,2041,2042],{},"下面的包你全都可以用apt安装，不用手动编译！！！",[17,2044,2045],{},"如果你不是Ubuntu的话：",[17,2047,2048],{},"灰色的是上面基础教程安装过的包，",[17,2050,2051],{},"黄色是需要手动编译的包，",[17,2053,2054],{},"蓝色是不仅要手动编译，还要手动修改一些源码的包。",[1152,2056,2057,2064],{},[1155,2058,2059],{},[1158,2060,2061],{},[1161,2062,2063],{"align":1163},"ROS的包（非Ubuntu的发行版基本都需要手动编译）",[1172,2065,2066,2071,2076,2081,2086,2091,2096,2101,2106,2111,2116,2121,2126,2131,2136,2141,2146,2151,2156,2161],{},[1158,2067,2068],{},[1177,2069,2070],{"align":1163},"软件包\u002F库名称",[1158,2072,2073],{},[1177,2074,2075],{"align":1163},"ros-humble-desktop",[1158,2077,2078],{},[1177,2079,2080],{"align":1163},"ros-humble-xacro",[1158,2082,2083],{},[1177,2084,2085],{"align":1163},"ros-humble-joint-state-publisher",[1158,2087,2088],{},[1177,2089,2090],{"align":1163},"ros-humble-joint-state-publisher-gui",[1158,2092,2093],{},[1177,2094,2095],{"align":1163},"ros-humble-gazebo-ros",[1158,2097,2098],{},[1177,2099,2100],{"align":1163},"ros-humble-gazebo-ros-pkgs",[1158,2102,2103],{},[1177,2104,2105],{"align":1163},"ros-humble-ros-gz",[1158,2107,2108],{},[1177,2109,2110],{"align":1163},"ros-humble-diagnostic-updater",[1158,2112,2113],{},[1177,2114,2115],{"align":1163},"ros-humble-teleop-twist-keyboard",[1158,2117,2118],{},[1177,2119,2120],{"align":1163},"ros-humble-navigation2",[1158,2122,2123],{},[1177,2124,2125],{"align":1163},"ros-humble-nav2-bringup",[1158,2127,2128],{},[1177,2129,2130],{"align":1163},"ros-humble-slam-toolbox",[1158,2132,2133],{},[1177,2134,2135],{"align":1163},"ros-humble-cartographer",[1158,2137,2138],{},[1177,2139,2140],{"align":1163},"ros-humble-cartographer-ros",[1158,2142,2143],{},[1177,2144,2145],{"align":1163},"ros-humble-asio-cmake-module",[1158,2147,2148],{},[1177,2149,2150],{"align":1163},"ros-humble-serial-driver",[1158,2152,2153],{},[1177,2154,2155],{"align":1163},"ros-humble-pcl-ros",[1158,2157,2158],{},[1177,2159,2160],{"align":1163},"ros-humble-pointcloud-to-laserscan",[1158,2162,2163],{},[1177,2164,2165],{"align":1163},"ros-humble-vision-opencv",[1152,2167,2168,2175],{},[1155,2169,2170],{},[1158,2171,2172],{},[1161,2173,2174],{"align":1163},"非ROS包（基本都可以apt,dnf安装）",[1172,2176,2177,2181,2186,2191,2196,2201],{},[1158,2178,2179],{},[1177,2180,2070],{"align":1163},[1158,2182,2183],{},[1177,2184,2185],{"align":1163},"libpcl-dev",[1158,2187,2188],{},[1177,2189,2190],{"align":1163},"libeigen3-dev",[1158,2192,2193],{},[1177,2194,2195],{"align":1163},"libpcap-dev",[1158,2197,2198],{},[1177,2199,2200],{"align":1163},"libboost-dev",[1158,2202,2203],{},[1177,2204,2205],{"align":1163},"libogre-1.12-dev",[17,2207,2208],{},"但是上面这些包可以依赖于其他的包，下面这个仓库里有全部的包的仓库链接：（往后看就知道怎么用了）",[17,2210,2211],{},[51,2212,2213],{"href":2213,"rel":2214},"https:\u002F\u002Fgithub.com\u002Fros\u002Frosdistro\u002Ftree\u002Fmaster",[55],[17,2216,2217],{},[30,2218],{"alt":32,"src":2219},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage63.webp",[247,2221,2223],{"id":2222},"apt安装方式ubuntu强烈建议","apt安装方式（Ubuntu强烈建议）",[348,2225,2227],{"className":404,"code":2226,"language":406,"meta":32,"style":32},"sudo apt update && sudo apt install \\\n    ros-humble-desktop \\\n    ros-dev-tools \\\n    ros-humble-xacro \\\n    ros-humble-joint-state-publisher \\\n    ros-humble-joint-state-publisher-gui \\\n    ros-humble-ros-gz \\\n    ros-humble-gazebo-ros \\\n    ros-humble-gazebo-ros-pkgs \\\n    ros-humble-imu-tools \\\n    ros-humble-diagnostic-updater \\\n    ros-humble-teleop-twist-keyboard \\\n    ros-humble-navigation2 \\\n    ros-humble-nav2-bringup \\\n    ros-humble-slam-toolbox \\\n    ros-humble-cartographer \\\n    ros-humble-cartographer-ros \\\n    ros-humble-asio-cmake-module \\\n    ros-humble-serial-driver \\\n    ros-humble-pcl-ros \\\n    ros-humble-vision-opencv \\\n    ros-humble-pointcloud-to-laserscan \\\n    libpcl-dev \\\n    libeigen3-dev \\\n    libpcap-dev \\\n    python3-colcon-common-extensions\n",[355,2228,2229,2247,2254,2261,2268,2275,2282,2289,2296,2303,2310,2317,2324,2331,2338,2345,2352,2359,2366,2373,2380,2387,2394,2401,2408,2415],{"__ignoreMap":32},[410,2230,2231,2233,2235,2237,2239,2241,2243,2245],{"class":412,"line":413},[410,2232,467],{"class":466},[410,2234,1378],{"class":470},[410,2236,1381],{"class":470},[410,2238,1384],{"class":605},[410,2240,467],{"class":466},[410,2242,1378],{"class":470},[410,2244,474],{"class":470},[410,2246,1600],{"class":416},[410,2248,2249,2252],{"class":412,"line":480},[410,2250,2251],{"class":470},"    ros-humble-desktop",[410,2253,1600],{"class":416},[410,2255,2256,2259],{"class":412,"line":619},[410,2257,2258],{"class":470},"    ros-dev-tools",[410,2260,1600],{"class":416},[410,2262,2263,2266],{"class":412,"line":121},[410,2264,2265],{"class":470},"    ros-humble-xacro",[410,2267,1600],{"class":416},[410,2269,2270,2273],{"class":412,"line":633},[410,2271,2272],{"class":470},"    ros-humble-joint-state-publisher",[410,2274,1600],{"class":416},[410,2276,2277,2280],{"class":412,"line":133},[410,2278,2279],{"class":470},"    ros-humble-joint-state-publisher-gui",[410,2281,1600],{"class":416},[410,2283,2284,2287],{"class":412,"line":693},[410,2285,2286],{"class":470},"    ros-humble-ros-gz",[410,2288,1600],{"class":416},[410,2290,2291,2294],{"class":412,"line":145},[410,2292,2293],{"class":470},"    ros-humble-gazebo-ros",[410,2295,1600],{"class":416},[410,2297,2298,2301],{"class":412,"line":704},[410,2299,2300],{"class":470},"    ros-humble-gazebo-ros-pkgs",[410,2302,1600],{"class":416},[410,2304,2305,2308],{"class":412,"line":710},[410,2306,2307],{"class":470},"    ros-humble-imu-tools",[410,2309,1600],{"class":416},[410,2311,2312,2315],{"class":412,"line":163},[410,2313,2314],{"class":470},"    ros-humble-diagnostic-updater",[410,2316,1600],{"class":416},[410,2318,2319,2322],{"class":412,"line":721},[410,2320,2321],{"class":470},"    ros-humble-teleop-twist-keyboard",[410,2323,1600],{"class":416},[410,2325,2326,2329],{"class":412,"line":727},[410,2327,2328],{"class":470},"    ros-humble-navigation2",[410,2330,1600],{"class":416},[410,2332,2333,2336],{"class":412,"line":182},[410,2334,2335],{"class":470},"    ros-humble-nav2-bringup",[410,2337,1600],{"class":416},[410,2339,2340,2343],{"class":412,"line":738},[410,2341,2342],{"class":470},"    ros-humble-slam-toolbox",[410,2344,1600],{"class":416},[410,2346,2347,2350],{"class":412,"line":194},[410,2348,2349],{"class":470},"    ros-humble-cartographer",[410,2351,1600],{"class":416},[410,2353,2354,2357],{"class":412,"line":749},[410,2355,2356],{"class":470},"    ros-humble-cartographer-ros",[410,2358,1600],{"class":416},[410,2360,2361,2364],{"class":412,"line":755},[410,2362,2363],{"class":470},"    ros-humble-asio-cmake-module",[410,2365,1600],{"class":416},[410,2367,2368,2371],{"class":412,"line":761},[410,2369,2370],{"class":470},"    ros-humble-serial-driver",[410,2372,1600],{"class":416},[410,2374,2375,2378],{"class":412,"line":767},[410,2376,2377],{"class":470},"    ros-humble-pcl-ros",[410,2379,1600],{"class":416},[410,2381,2382,2385],{"class":412,"line":773},[410,2383,2384],{"class":470},"    ros-humble-vision-opencv",[410,2386,1600],{"class":416},[410,2388,2389,2392],{"class":412,"line":778},[410,2390,2391],{"class":470},"    ros-humble-pointcloud-to-laserscan",[410,2393,1600],{"class":416},[410,2395,2396,2399],{"class":412,"line":784},[410,2397,2398],{"class":470},"    libpcl-dev",[410,2400,1600],{"class":416},[410,2402,2403,2406],{"class":412,"line":789},[410,2404,2405],{"class":470},"    libeigen3-dev",[410,2407,1600],{"class":416},[410,2409,2410,2413],{"class":412,"line":795},[410,2411,2412],{"class":470},"    libpcap-dev",[410,2414,1600],{"class":416},[410,2416,2417],{"class":412,"line":801},[410,2418,2419],{"class":470},"    python3-colcon-common-extensions\n",[247,2421,2423],{"id":2422},"源码方式非ubuntu","源码方式（非Ubuntu）",[17,2425,2426],{},"以debian12为例。",[2428,2429,2430],"h6",{"id":2430},"黄色的包",[17,2432,2433],{},"以安装ros-jazzy-xacro，ros-jazzy-joint-state-publisher，ros-jazzy-joint-state-publisher-gui这三个包为例，其他的包一样操作。",[17,2435,2436],{},[51,2437,2029],{"href":2029,"rel":2438},[55],[17,2440,2441],{},"进入上面的网站，在下图中选择对应版本，比如我是JAZZY，然后在搜索框中搜索xacro，joint_state_publisher，joint_state_publisher_gui",[17,2443,2444],{},[30,2445],{"alt":32,"src":2446},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage64.webp",[17,2448,2449],{},"比如xacro",[17,2451,2452],{},[30,2453],{"alt":32,"src":2454},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage65.webp",[17,2456,2457],{},[30,2458],{"alt":32,"src":2459},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage66.webp",[17,2461,2462],{},"找到对应版本的xacro，然后仓库地址是checkout URI，分支是vcs version,你可以使用git clone一个一个克隆下来，但这是巨麻烦的一件事，所以我们选择ROS2提供给我们的vcs命令进行下载包的源码。",[17,2464,2465],{},"首先，进入自己的ros2_jazzy文件并打开一个终端",[17,2467,2468],{},[30,2469],{"alt":32,"src":2470},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage67.webp",[17,2472,2473],{},"并创建一个.repos文件，文件名随便起，比如我的叫my_ros2_jazzy_packages.repos",[17,2475,2476],{},[30,2477],{"alt":32,"src":2478},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage68.webp",[17,2480,2481],{},"然后用vscode编辑，因为.repos使用的是yaml语言，vscode可以识别语法正确性：",[17,2483,2484],{},[30,2485],{"alt":32,"src":2486},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage69.webp",[17,2488,2489],{},"将刚才查询的信息写上去：",[348,2491,2495],{"className":2492,"code":2493,"language":2494,"meta":32,"style":32},"language-yaml shiki shiki-themes github-light github-dark","repositories:\n  xacro:\n    type: git\n    url: https:\u002F\u002Fgithub.com\u002Fros\u002Fxacro.git\n    version: ros2\n","yaml",[355,2496,2497,2506,2513,2524,2534],{"__ignoreMap":32},[410,2498,2499,2503],{"class":412,"line":413},[410,2500,2502],{"class":2501},"s9eBZ","repositories",[410,2504,2505],{"class":605},":\n",[410,2507,2508,2511],{"class":412,"line":480},[410,2509,2510],{"class":2501},"  xacro",[410,2512,2505],{"class":605},[410,2514,2515,2518,2521],{"class":412,"line":619},[410,2516,2517],{"class":2501},"    type",[410,2519,2520],{"class":605},": ",[410,2522,2523],{"class":470},"git\n",[410,2525,2526,2529,2531],{"class":412,"line":121},[410,2527,2528],{"class":2501},"    url",[410,2530,2520],{"class":605},[410,2532,2533],{"class":470},"https:\u002F\u002Fgithub.com\u002Fros\u002Fxacro.git\n",[410,2535,2536,2539,2541],{"class":412,"line":633},[410,2537,2538],{"class":2501},"    version",[410,2540,2520],{"class":605},[410,2542,2543],{"class":470},"ros2\n",[17,2545,2546],{},"用同样的方式找到其他包：",[17,2548,2549],{},[30,2550],{"alt":32,"src":2551},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage70.webp",[17,2553,2554],{},"上图说明joint_state_publisher和joint_state_publisher_gui其实是一个仓库，所以我们只需要克隆一个仓库。",[17,2556,2557],{},"然后vcs version也就是git的分支是ros2。",[348,2559,2561],{"className":2492,"code":2560,"language":2494,"meta":32,"style":32},"repositories:\n  xacro:\n    type: git\n    url: https:\u002F\u002Fgithub.com\u002Fros\u002Fxacro.git\n    version: ros2\n  joint_state_publisher:\n    type: git\n    url: https:\u002F\u002Fgithub.com\u002Fros\u002Fjoint_state_publisher.git\n    version: ros2\n",[355,2562,2563,2569,2575,2583,2591,2599,2606,2614,2623],{"__ignoreMap":32},[410,2564,2565,2567],{"class":412,"line":413},[410,2566,2502],{"class":2501},[410,2568,2505],{"class":605},[410,2570,2571,2573],{"class":412,"line":480},[410,2572,2510],{"class":2501},[410,2574,2505],{"class":605},[410,2576,2577,2579,2581],{"class":412,"line":619},[410,2578,2517],{"class":2501},[410,2580,2520],{"class":605},[410,2582,2523],{"class":470},[410,2584,2585,2587,2589],{"class":412,"line":121},[410,2586,2528],{"class":2501},[410,2588,2520],{"class":605},[410,2590,2533],{"class":470},[410,2592,2593,2595,2597],{"class":412,"line":633},[410,2594,2538],{"class":2501},[410,2596,2520],{"class":605},[410,2598,2543],{"class":470},[410,2600,2601,2604],{"class":412,"line":133},[410,2602,2603],{"class":2501},"  joint_state_publisher",[410,2605,2505],{"class":605},[410,2607,2608,2610,2612],{"class":412,"line":693},[410,2609,2517],{"class":2501},[410,2611,2520],{"class":605},[410,2613,2523],{"class":470},[410,2615,2616,2618,2620],{"class":412,"line":145},[410,2617,2528],{"class":2501},[410,2619,2520],{"class":605},[410,2621,2622],{"class":470},"https:\u002F\u002Fgithub.com\u002Fros\u002Fjoint_state_publisher.git\n",[410,2624,2625,2627,2629],{"class":412,"line":704},[410,2626,2538],{"class":2501},[410,2628,2520],{"class":605},[410,2630,2543],{"class":470},[17,2632,2633],{},"其他的包如法炮制。",[17,2635,2636],{},"但我先以这俩包做个例子。",[17,2638,2639],{},"在ros2_jazzy目录下的终端：",[348,2641,2643],{"className":404,"code":2642,"language":406,"meta":32,"style":32},"vcs import src \u003C my_ros2_jazzy_packages.repos\n",[355,2644,2645],{"__ignoreMap":32},[410,2646,2647,2650,2653,2656,2659],{"class":412,"line":413},[410,2648,2649],{"class":466},"vcs",[410,2651,2652],{"class":470}," import",[410,2654,2655],{"class":470}," src",[410,2657,2658],{"class":515}," \u003C",[410,2660,2661],{"class":470}," my_ros2_jazzy_packages.repos\n",[17,2663,2664],{},[30,2665],{"alt":32,"src":2666},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage71.webp",[17,2668,2669],{},"可以看到下图，克隆成功了",[17,2671,2672],{},[30,2673],{"alt":32,"src":2674},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage72.webp",[17,2676,2677],{},"接下来进行补充依赖：",[348,2679,2681],{"className":404,"code":2680,"language":406,"meta":32,"style":32},"rosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[355,2682,2683],{"__ignoreMap":32},[410,2684,2685,2688,2690,2693,2695,2698,2700,2703],{"class":412,"line":413},[410,2686,2687],{"class":466},"rosdep",[410,2689,474],{"class":470},[410,2691,2692],{"class":416}," --from-paths",[410,2694,2655],{"class":470},[410,2696,2697],{"class":416}," --ignore-src",[410,2699,1597],{"class":416},[410,2701,2702],{"class":416}," --skip-keys",[410,2704,2705],{"class":470}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[17,2707,2708],{},"提示下图字样，即是成功",[17,2710,2711],{},[30,2712],{"alt":32,"src":2713},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage73.webp",[17,2715,2716],{},"再编译安装即可：",[348,2718,2720],{"className":404,"code":2719,"language":406,"meta":32,"style":32},"colcon build --symlink-install\n\n# 或仅编译特定包\ncolcon build --packages-select xacro joint_state_publisher joint_state_publisher_gui\n",[355,2721,2722,2730,2734,2739],{"__ignoreMap":32},[410,2723,2724,2726,2728],{"class":412,"line":413},[410,2725,1888],{"class":466},[410,2727,1891],{"class":470},[410,2729,1894],{"class":416},[410,2731,2732],{"class":412,"line":480},[410,2733,616],{"emptyLinePlaceholder":615},[410,2735,2736],{"class":412,"line":619},[410,2737,2738],{"class":609},"# 或仅编译特定包\n",[410,2740,2741,2743,2745,2748,2751,2754],{"class":412,"line":121},[410,2742,1888],{"class":466},[410,2744,1891],{"class":470},[410,2746,2747],{"class":416}," --packages-select",[410,2749,2750],{"class":470}," xacro",[410,2752,2753],{"class":470}," joint_state_publisher",[410,2755,2756],{"class":470}," joint_state_publisher_gui\n",[17,2758,2759],{},[30,2760],{"alt":32,"src":2761},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage74.webp",[17,2763,2633],{},[17,2765,2766],{},"测试：",[348,2768,2770],{"className":404,"code":2769,"language":406,"meta":32,"style":32},"\n# 重新加载环境\nsource ~\u002F.bashrc\n\n# 敲命令\nxacro\n",[355,2771,2772,2776,2781,2787,2791,2796],{"__ignoreMap":32},[410,2773,2774],{"class":412,"line":413},[410,2775,616],{"emptyLinePlaceholder":615},[410,2777,2778],{"class":412,"line":480},[410,2779,2780],{"class":609},"# 重新加载环境\n",[410,2782,2783,2785],{"class":412,"line":619},[410,2784,523],{"class":416},[410,2786,488],{"class":470},[410,2788,2789],{"class":412,"line":121},[410,2790,616],{"emptyLinePlaceholder":615},[410,2792,2793],{"class":412,"line":633},[410,2794,2795],{"class":609},"# 敲命令\n",[410,2797,2798],{"class":412,"line":133},[410,2799,2800],{"class":466},"xacro\n",[17,2802,2803],{},"如下图xacro提示error即是成功，这样就是安装成功了！",[17,2805,2806],{},[30,2807],{"alt":32,"src":2808},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage75.webp",[17,2810,2633],{},[17,2812,2813],{},"我也整了Humble和Jazzy的repos的文件，从官网和distribution.yaml一个个找的，你可以克隆下来直接用我整理的就可以。(但有可能部分仓库分支ROS2官方会做出修改)",[17,2815,2816],{},[51,2817,2818],{"href":2818,"rel":2819},"https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002Fros-docker\u002Ftree\u002Fmain\u002Frepos",[55],[17,2821,2822],{},[30,2823],{"alt":32,"src":2824},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage76.webp",[2428,2826,2827],{"id":2827},"蓝色的包",[17,2829,2830],{},"蓝色的包大体的方式是和黄色一样的，只不过蓝色的包在下载完源码后，还需要修改下源码里的文件，再进行编译。",[17,2832,2833],{},"如vision_opencv的cv_bridge:请看下方OpenCV章节的CV_Bridge。",[247,2835,2836],{"id":2836},"常见问题",[95,2838,2839],{},[78,2840,2841],{},"libogre-dev找不到",[17,2843,2844],{},"Gazebo的渲染引擎，在debian12中用libogre-dev搜不到，必须用libogre-1.12-dev才能搜到。",[95,2846,2847],{"start":480},[78,2848,2849],{},"nav2_mppi_controller里有个被当成空指针了，警告成错误了。",[17,2851,2852,2853,2856],{},"解决在nav2_mppi_controller的cmakelists里添加上",[355,2854,2855],{},"add_compile_options(-Wno-error=null-dereference)","即可。",[95,2858,2859],{"start":619},[78,2860,2861],{},"nav2_system_tests里有个内存重叠警告。",[17,2863,2864],{},"解决在nav2_system_tests的cmakelists里添加上下面的几行即可。",[348,2866,2868],{"className":404,"code":2867,"language":406,"meta":32,"style":32},"if (CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n    add_compile_options(-Wno-restrict)\nendif()\n",[355,2869,2870,2889,2896],{"__ignoreMap":32},[410,2871,2872,2875,2878,2881,2884,2887],{"class":412,"line":413},[410,2873,2874],{"class":515},"if",[410,2876,2877],{"class":605}," (",[410,2879,2880],{"class":466},"CMAKE_CXX_COMPILER_ID",[410,2882,2883],{"class":470}," MATCHES",[410,2885,2886],{"class":470}," \"GNU\"",[410,2888,1150],{"class":605},[410,2890,2891,2894],{"class":412,"line":480},[410,2892,2893],{"class":466},"    add_compile_options(-Wno-restrict",[410,2895,1150],{"class":605},[410,2897,2898,2901],{"class":412,"line":619},[410,2899,2900],{"class":466},"endif",[410,2902,2903],{"class":605},"()\n",[95,2905,2906],{"start":121},[78,2907,2908],{},"有的库在Fedora最新版没有，在旧版有。",[17,2910,2911],{},[30,2912],{"alt":32,"src":2913},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage77.webp",[17,2915,2916],{},[51,2917,2918],{"href":2918,"rel":2919},"https:\u002F\u002Fsrc.fedoraproject.org\u002Fprojects\u002Frpms\u002F%2A",[55],[17,2921,2922],{},[30,2923],{"alt":32,"src":2924},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage78.webp",[348,2926,2928],{"className":404,"code":2927,"language":406,"meta":32,"style":32},"sudo dnf install python3-pykdl --releasever=41\nsudo dnf install orocos-kdl-devel --releasever=41\n",[355,2929,2930,2945],{"__ignoreMap":32},[410,2931,2932,2934,2937,2939,2942],{"class":412,"line":413},[410,2933,467],{"class":466},[410,2935,2936],{"class":470}," dnf",[410,2938,474],{"class":470},[410,2940,2941],{"class":470}," python3-pykdl",[410,2943,2944],{"class":416}," --releasever=41\n",[410,2946,2947,2949,2951,2953,2956],{"class":412,"line":480},[410,2948,467],{"class":466},[410,2950,2936],{"class":470},[410,2952,474],{"class":470},[410,2954,2955],{"class":470}," orocos-kdl-devel",[410,2957,2944],{"class":416},[95,2959,2960],{"start":633},[78,2961,2962],{},"有些python库在最新版系统上下不了，因为python版本过高",[17,2964,2965],{},"可以使用pip3安装该库",[348,2967,2969],{"className":404,"code":2968,"language":406,"meta":32,"style":32},"pip3 install flake8-docstrings\n",[355,2970,2971],{"__ignoreMap":32},[410,2972,2973,2976,2978],{"class":412,"line":413},[410,2974,2975],{"class":466},"pip3",[410,2977,474],{"class":470},[410,2979,2980],{"class":470}," flake8-docstrings\n",[17,2982,2983],{},"但后续编译的话，需要把该库加入rosdep忽略的依赖。比如python3-flake8-docstrings的话就是下面这行：",[348,2985,2987],{"className":404,"code":2986,"language":406,"meta":32,"style":32},"rosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n\n# 改为\nrosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[355,2988,2989,3007,3011,3016],{"__ignoreMap":32},[410,2990,2991,2993,2995,2997,2999,3001,3003,3005],{"class":412,"line":413},[410,2992,2687],{"class":466},[410,2994,474],{"class":470},[410,2996,2692],{"class":416},[410,2998,2655],{"class":470},[410,3000,2697],{"class":416},[410,3002,1597],{"class":416},[410,3004,2702],{"class":416},[410,3006,2705],{"class":470},[410,3008,3009],{"class":412,"line":480},[410,3010,616],{"emptyLinePlaceholder":615},[410,3012,3013],{"class":412,"line":619},[410,3014,3015],{"class":609},"# 改为\n",[410,3017,3018,3020,3022,3024,3026,3028,3030,3032],{"class":412,"line":121},[410,3019,2687],{"class":466},[410,3021,474],{"class":470},[410,3023,2692],{"class":416},[410,3025,2655],{"class":470},[410,3027,2697],{"class":416},[410,3029,1597],{"class":416},[410,3031,2702],{"class":416},[410,3033,3034],{"class":470}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[17,3036,3037],{},[30,3038],{"alt":32,"src":3039},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage79.webp",[42,3041,3042],{"id":3042},"环境进阶",[247,3044,3046],{"id":3045},"apt方式","Apt方式",[348,3048,3052],{"className":3049,"code":3050,"language":3051,"meta":32,"style":32},"language-javascript shiki shiki-themes github-light github-dark","\n# rosdep换源\nexport ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml\n\n# 加载ROS2环境\nsource \u002Fopt\u002Fros\u002Fjazzy\u002Fsetup.bash\n\n# 配置ROS2的分布式\nexport ROS_DOMAIN_ID=6\n\n# 配置新版Gazebo的资源（这里先注释，等你学到gazebo再打开）\n#export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FMySource\u002FROS_WS\u002Fgazebo_models:\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FMySource\u002FROS_WS\u002Fign_models\n","javascript",[355,3053,3054,3058,3063,3068,3072,3077,3082,3086,3091,3096,3100,3105],{"__ignoreMap":32},[410,3055,3056],{"class":412,"line":413},[410,3057,616],{"emptyLinePlaceholder":615},[410,3059,3060],{"class":412,"line":480},[410,3061,3062],{},"# rosdep换源\n",[410,3064,3065],{"class":412,"line":619},[410,3066,3067],{},"export ROSDISTRO_INDEX_URL=https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Frosdistro\u002Findex-v4.yaml\n",[410,3069,3070],{"class":412,"line":121},[410,3071,616],{"emptyLinePlaceholder":615},[410,3073,3074],{"class":412,"line":633},[410,3075,3076],{},"# 加载ROS2环境\n",[410,3078,3079],{"class":412,"line":133},[410,3080,3081],{},"source \u002Fopt\u002Fros\u002Fjazzy\u002Fsetup.bash\n",[410,3083,3084],{"class":412,"line":693},[410,3085,616],{"emptyLinePlaceholder":615},[410,3087,3088],{"class":412,"line":145},[410,3089,3090],{},"# 配置ROS2的分布式\n",[410,3092,3093],{"class":412,"line":704},[410,3094,3095],{},"export ROS_DOMAIN_ID=6\n",[410,3097,3098],{"class":412,"line":710},[410,3099,616],{"emptyLinePlaceholder":615},[410,3101,3102],{"class":412,"line":163},[410,3103,3104],{},"# 配置新版Gazebo的资源（这里先注释，等你学到gazebo再打开）\n",[410,3106,3107],{"class":412,"line":721},[410,3108,3109],{},"#export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FMySource\u002FROS_WS\u002Fgazebo_models:\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FMySource\u002FROS_WS\u002Fign_models\n",[17,3111,3112],{},"注意，Gazebo资源包在不同ROS2版本可能宏的名称不同，如在ROS2Humble里是IGN_GAZEBO_RESOURCE_PATH，在ROS2Jazzy里是GZ_SIM_RESOURCE_PATH。（往后的ROS2版本估计都是GZ_SIM_RESOURCE_PATH）（详见下方Gazebo教程）",[247,3114,3115],{"id":3115},"源码方式",[17,3117,3118],{},"与apt方式相同，但是需要把加载ROS2环境的那个setup.bash路径设置为你的ros2安装路径。",[348,3120,3122],{"className":404,"code":3121,"language":406,"meta":32,"style":32},"\n# 加载ROS2环境\nsource ~\u002FUserFloder\u002FApplcations\u002Fros2_jazzy\u002Finstall\u002Fsetup.bash\n",[355,3123,3124,3128,3132],{"__ignoreMap":32},[410,3125,3126],{"class":412,"line":413},[410,3127,616],{"emptyLinePlaceholder":615},[410,3129,3130],{"class":412,"line":480},[410,3131,3076],{"class":609},[410,3133,3134,3136],{"class":412,"line":619},[410,3135,523],{"class":416},[410,3137,1973],{"class":470},[12,3139,534],{"id":3140},"测试ros2-1",[42,3142,3143],{"id":3143},"示例1",[17,3145,3146],{},"打开两个终端，并分别输入如下两个红框框里的命令",[17,3148,3149],{},[30,3150],{"alt":32,"src":3151},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage80.webp",[17,3153,3154],{},"弹出如下程序，则测试成功。",[17,3156,3157],{},"对着终端按Ctrl+C可以终止程序。",[17,3159,3160],{},[30,3161],{"alt":32,"src":3162},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage81.webp",[42,3164,3165],{"id":3165},"示例2",[17,3167,3168],{},"乌龟作为ROS老测试项目了，必须拉出来溜溜！",[17,3170,3171],{},"同样开两个终端，并分别输入以下命令。",[348,3173,3175],{"className":404,"code":3174,"language":406,"meta":32,"style":32},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[355,3176,3177,3191],{"__ignoreMap":32},[410,3178,3179,3182,3185,3188],{"class":412,"line":413},[410,3180,3181],{"class":466},"ros2",[410,3183,3184],{"class":470}," run",[410,3186,3187],{"class":470}," turtlesim",[410,3189,3190],{"class":470}," turtlesim_node\n",[410,3192,3193,3195,3197,3199],{"class":412,"line":480},[410,3194,3181],{"class":466},[410,3196,3184],{"class":470},[410,3198,3187],{"class":470},[410,3200,3201],{"class":470}," turtle_teleop_key\n",[17,3203,3204],{},"鼠标点以下红色部分，然后通过小键盘的方向键可以控制乌龟运行，如果没有小键盘，可以尝试GBVCDERT等按键操控小乌龟。",[17,3206,3207],{},"同样地，对着终端按Ctrl+C可以终止程序。",[17,3209,3210],{},[30,3211],{"alt":32,"src":3212},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage82.webp",[12,3214,2836],{"id":3215},"常见问题-1",[42,3217,3219],{"id":3218},"rviz2闪烁","Rviz2闪烁",[17,3221,3222],{},"如果2K+的电脑安装完rviz2有显示问题，可以在.bashrc里加上下面的内容，用来让qt不缩放。",[348,3224,3226],{"className":404,"code":3225,"language":406,"meta":32,"style":32},"export QT_AUTO_SCREEN_SCALE_FACTOR=0\nexport QT_SCREEN_SCALE_FACTORS=[1.0]\n",[355,3227,3228,3240],{"__ignoreMap":32},[410,3229,3230,3232,3235,3237],{"class":412,"line":413},[410,3231,627],{"class":515},[410,3233,3234],{"class":605}," QT_AUTO_SCREEN_SCALE_FACTOR",[410,3236,1099],{"class":515},[410,3238,3239],{"class":416},"0\n",[410,3241,3242,3244,3247,3249],{"class":412,"line":480},[410,3243,627],{"class":515},[410,3245,3246],{"class":605}," QT_SCREEN_SCALE_FACTORS",[410,3248,1099],{"class":515},[410,3250,3251],{"class":605},"[1.0]\n",[3253,3254,3255],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":32,"searchDepth":480,"depth":480,"links":3257},[3258,3259,3260,3261,3262,3263,3264,3265],{"id":14,"depth":619,"text":15},{"id":25,"depth":619,"text":26},{"id":39,"depth":619,"text":40},{"id":92,"depth":619,"text":93},{"id":206,"depth":619,"text":207},{"id":2014,"depth":619,"text":2015},{"id":3140,"depth":619,"text":534},{"id":3215,"depth":619,"text":2836},0,"0100","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao",{"title":5,"description":32},"wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","9Eh3iM1-vNObMfPIoPApm4EqTIkDziqF2gg8E9AuGoQ",[3280,3282,3288,3294,3300,3306,3312,3318,3324,3330,3336,3342,3348,3354,3360,3366,3372,3378,3384,3390,3396,3402,3408,3414,3420,3426,3432,3438,3444,3450,3456,3462,3468,3474,3480,3485,3491,3496,3502,3508,3514,3520,3526,3532,3538,3544,3550,3556,3562,3568,3574,3580,3586,3592,3598,3604,3610,3616,3622,3628,3634,3640,3646,3652,3658,3664,3670,3676,3682],{"path":3275,"stem":3277,"title":5,"authors":3281,"date":3268,"chapterOrder":3267,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},[7],{"path":3283,"stem":3284,"title":3285,"authors":3286,"date":3268,"chapterOrder":3287,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":3289,"stem":3290,"title":3291,"authors":3292,"date":3268,"chapterOrder":3293,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":3295,"stem":3296,"title":3297,"authors":3298,"date":3268,"chapterOrder":3299,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":3301,"stem":3302,"title":3303,"authors":3304,"date":3268,"chapterOrder":3305,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":3307,"stem":3308,"title":3309,"authors":3310,"date":3268,"chapterOrder":3311,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":3313,"stem":3314,"title":3315,"authors":3316,"date":3268,"chapterOrder":3317,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":3319,"stem":3320,"title":3321,"authors":3322,"date":3268,"chapterOrder":3323,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":3325,"stem":3326,"title":3327,"authors":3328,"date":3268,"chapterOrder":3329,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":3331,"stem":3332,"title":3333,"authors":3334,"date":3268,"chapterOrder":3335,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],"1000",{"path":3337,"stem":3338,"title":3339,"authors":3340,"date":3268,"chapterOrder":3341,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":3343,"stem":3344,"title":3345,"authors":3346,"date":3268,"chapterOrder":3347,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":3349,"stem":3350,"title":3351,"authors":3352,"date":3268,"chapterOrder":3353,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":3355,"stem":3356,"title":3357,"authors":3358,"date":3268,"chapterOrder":3359,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":3361,"stem":3362,"title":3363,"authors":3364,"date":3268,"chapterOrder":3365,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":3367,"stem":3368,"title":3369,"authors":3370,"date":3268,"chapterOrder":3371,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":3373,"stem":3374,"title":3375,"authors":3376,"date":3268,"chapterOrder":3377,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":3379,"stem":3380,"title":3381,"authors":3382,"date":3268,"chapterOrder":3383,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":3385,"stem":3386,"title":3387,"authors":3388,"date":3268,"chapterOrder":3389,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":3391,"stem":3392,"title":3393,"authors":3394,"date":3268,"chapterOrder":3395,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念","基本概念",[7],"1200-0400-0200-0100",{"path":3397,"stem":3398,"title":3399,"authors":3400,"date":3268,"chapterOrder":3401,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则","控制与装饰规则",[7],"1200-0400-0200-0200",{"path":3403,"stem":3404,"title":3405,"authors":3406,"date":3268,"chapterOrder":3407,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序","第一个完整程序",[7],"1200-0400-0200-0300",{"path":3409,"stem":3410,"title":3411,"authors":3412,"date":3268,"chapterOrder":3413,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据","节点之间传数据",[7],"1200-0400-0200-0400",{"path":3415,"stem":3416,"title":3417,"authors":3418,"date":3268,"chapterOrder":3419,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止","持续任务与中止",[7],"1200-0400-0200-0500",{"path":3421,"stem":3422,"title":3423,"authors":3424,"date":3268,"chapterOrder":3425,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务","组合实际任务",[7],"1200-0400-0200-0600",{"path":3427,"stem":3428,"title":3429,"authors":3430,"date":3268,"chapterOrder":3431,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":3433,"stem":3434,"title":3435,"authors":3436,"date":3268,"chapterOrder":3437,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":3439,"stem":3440,"title":3441,"authors":3442,"date":3268,"chapterOrder":3443,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":3445,"stem":3446,"title":3447,"authors":3448,"date":3268,"chapterOrder":3449,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":3451,"stem":3452,"title":3453,"authors":3454,"date":3268,"chapterOrder":3455,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":3457,"stem":3458,"title":3459,"authors":3460,"date":3268,"chapterOrder":3461,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":3463,"stem":3464,"title":3465,"authors":3466,"date":3268,"chapterOrder":3467,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":3469,"stem":3470,"title":3471,"authors":3472,"date":3268,"chapterOrder":3473,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":3475,"stem":3476,"title":3477,"authors":3478,"date":3268,"chapterOrder":3479,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":3481,"stem":3482,"title":3447,"authors":3483,"date":3268,"chapterOrder":3484,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":3486,"stem":3487,"title":3488,"authors":3489,"date":3268,"chapterOrder":3490,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":3492,"stem":3493,"title":3447,"authors":3494,"date":3268,"chapterOrder":3495,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":3497,"stem":3498,"title":3499,"authors":3500,"date":3268,"chapterOrder":3501,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":3503,"stem":3504,"title":3505,"authors":3506,"date":3268,"chapterOrder":3507,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":3509,"stem":3510,"title":3511,"authors":3512,"date":3268,"chapterOrder":3513,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":3515,"stem":3516,"title":3517,"authors":3518,"date":3268,"chapterOrder":3519,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":3521,"stem":3522,"title":3523,"authors":3524,"date":3268,"chapterOrder":3525,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":3527,"stem":3528,"title":3529,"authors":3530,"date":3268,"chapterOrder":3531,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":3533,"stem":3534,"title":3535,"authors":3536,"date":3268,"chapterOrder":3537,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":3539,"stem":3540,"title":3541,"authors":3542,"date":3268,"chapterOrder":3543,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":3545,"stem":3546,"title":3547,"authors":3548,"date":3268,"chapterOrder":3549,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":3551,"stem":3552,"title":3553,"authors":3554,"date":3268,"chapterOrder":3555,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":3557,"stem":3558,"title":3559,"authors":3560,"date":3268,"chapterOrder":3561,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU",[7],"1400-0600-0200",{"path":3563,"stem":3564,"title":3565,"authors":3566,"date":3268,"chapterOrder":3567,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":3569,"stem":3570,"title":3571,"authors":3572,"date":3268,"chapterOrder":3573,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":3575,"stem":3576,"title":3577,"authors":3578,"date":3268,"chapterOrder":3579,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":3581,"stem":3582,"title":3583,"authors":3584,"date":3268,"chapterOrder":3585,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":3587,"stem":3588,"title":3589,"authors":3590,"date":3268,"chapterOrder":3591,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":3593,"stem":3594,"title":3595,"authors":3596,"date":3268,"chapterOrder":3597,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":3599,"stem":3600,"title":3601,"authors":3602,"date":3268,"chapterOrder":3603,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":3605,"stem":3606,"title":3607,"authors":3608,"date":3268,"chapterOrder":3609,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":3611,"stem":3612,"title":3613,"authors":3614,"date":3268,"chapterOrder":3615,"chapterDepth":619,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":3617,"stem":3618,"title":3619,"authors":3620,"date":3268,"chapterOrder":3621,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":3623,"stem":3624,"title":3625,"authors":3626,"date":3268,"chapterOrder":3627,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":3629,"stem":3630,"title":3631,"authors":3632,"date":3268,"chapterOrder":3633,"chapterDepth":480,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":3635,"stem":3636,"title":3637,"authors":3638,"date":3268,"chapterOrder":3639,"chapterDepth":413,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":3641,"stem":3642,"title":3643,"authors":3644,"date":3268,"chapterOrder":3645,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":3647,"stem":3648,"title":3649,"authors":3650,"date":3268,"chapterOrder":3651,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":3653,"stem":3654,"title":3655,"authors":3656,"date":3268,"chapterOrder":3657,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":3659,"stem":3660,"title":3661,"authors":3662,"date":3268,"chapterOrder":3663,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":3665,"stem":3666,"title":3667,"authors":3668,"date":3268,"chapterOrder":3669,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":3671,"stem":3672,"title":3673,"authors":3674,"date":3268,"chapterOrder":3675,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":3677,"stem":3678,"title":3679,"authors":3680,"date":3268,"chapterOrder":3681,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":3273},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":3270,"stem":3683,"title":3684,"authors":3685,"date":3268,"chapterOrder":3686,"chapterDepth":3266,"docKey":3269,"docRoot":3270,"docTitle":3271,"isWikiDoc":615,"isWikiIndex":615},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[3688,3690,3693,3696],{"name":7,"image":3689},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3691,"image":3692},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3694,"image":3695},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3697,"image":3698},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431901040]