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