[{"data":1,"prerenderedAt":3430},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":3286},{"id":4,"title":5,"body":6,"chapter":1209,"chapterSort":3273,"date":3274,"description":30,"docKey":3275,"docRoot":3276,"docTitle":3277,"extension":3278,"isWikiDoc":620,"isWikiIndex":3279,"layout":3280,"meta":3281,"navigation":620,"path":3282,"seo":3283,"stem":3284,"wikiDepth":418,"__hash__":3285},"content/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍.md","ROS2介绍",{"type":7,"value":8,"toc":3263},"minimark",[9,14,18,21,25,35,39,43,46,54,60,63,69,77,80,84,200,204,212,215,223,226,229,236,243,250,255,260,265,268,273,277,280,285,288,296,299,307,311,314,319,322,327,332,335,343,346,351,361,364,369,372,380,385,394,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,2018,2022,2025,2028,2031,2038,2041,2044,2047,2050,2053,2056,2059,2062,2173,2213,2216,2222,2227,2231,2427,2431,2434,2438,2441,2446,2449,2454,2457,2462,2467,2470,2473,2478,2481,2486,2489,2494,2497,2551,2554,2559,2562,2565,2638,2641,2644,2647,2669,2674,2677,2682,2685,2713,2716,2721,2724,2764,2769,2771,2774,2808,2811,2816,2818,2821,2827,2832,2835,2838,2841,2844,2849,2852,2857,2864,2869,2872,2911,2916,2921,2927,2932,2965,2970,2973,2988,2991,3042,3047,3050,3054,3117,3120,3123,3126,3145,3148,3151,3154,3159,3162,3165,3170,3173,3176,3179,3209,3212,3215,3220,3223,3227,3230,3259],[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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image3.webp",[28,33],{"alt":30,"src":34},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image4.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://www.ros.org/",[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://www.bilibili.com/video/BV1VB4y137ys",[53],[15,70,71,72],{},"赵虚左原版配套资料:",[49,73,76],{"href":74,"rel":75},"https://sdutvincirobot.feishu.cn/file/GQgvbWU4UoKhbxx8DjHc9nQ1nWf",[53],"ROS2理论与实践-赵虚左\u003C密码:qinghuamengshi>.pdf",[15,78,79],{},"暂时无法在飞书文档外展示此内容",[10,81,83],{"id":82},"学习ros2需要用到的知识储备","学习ROS2需要用到的知识储备",[85,86,87],"ol",{},[88,89,90,91,96,99,100,105,107,111,117,99,119,124,130,99,132,137,143,99,145,150,99,152,157,163,99,165,170,172,176,182,184,188,194,196],"li",{},"需要用哪些知识？",[85,92,93],{},[88,94,95],{},"Linux基本操作与Shell脚本语言",[97,98],"br",{},"  ",[49,101,104],{"href":102,"rel":103},"https://sdutvincirobot.feishu.cn/docx/ZD0bd33RRovEoIxeBzncdmQEnSg",[53],"Linux基本教程",[97,106],{},[49,108,109],{"href":109,"rel":110},"https://www.runoob.com/linux/linux-tutorial.html",[53],[85,112,114],{"start":113},4,[88,115,116],{},"Cmake基本使用",[97,118],{},[49,120,123],{"href":121,"rel":122},"https://sdutvincirobot.feishu.cn/docx/ANgFdRtvKoCcKDxZ2ehc5Rocnwh",[53],"Linux C++编译环境配置",[85,125,127],{"start":126},6,[88,128,129],{},"Git基本操作",[97,131],{},[49,133,136],{"href":134,"rel":135},"https://sdutvincirobot.feishu.cn/docx/B7arde6u0ob5tsxk5QOcFLG7nYd",[53],"Vinci机器人队Git入门教程",[85,138,140],{"start":139},8,[88,141,142],{},"C/C++语言",[97,144],{},[49,146,149],{"href":147,"rel":148},"https://sdutvincirobot.feishu.cn/docx/XfSud40MgoxZkQxup0acTf6Znwb",[53],"Vinci机器人队电控组入门指导",[97,151],{},[49,153,156],{"href":154,"rel":155},"https://sdutvincirobot.feishu.cn/docx/N0GAdx6IDoqnRnx1q0TcX1Wfnvc",[53],"Vinci机器人队C/C++资料",[85,158,160],{"start":159},11,[88,161,162],{},"Python3语言",[97,164],{},[49,166,169],{"href":167,"rel":168},"https://sdutvincirobot.feishu.cn/wiki/QZL8wLeewiTmvfkczMyccAdVn0c",[53],"Vinci机器人队Python3教程",[97,171],{},[49,173,174],{"href":174,"rel":175},"https://www.runoob.com/python3/python3-tutorial.html",[53],[85,177,179],{"start":178},14,[88,180,181],{},"XML语言",[97,183],{},[49,185,186],{"href":186,"rel":187},"https://www.runoob.com/xml/xml-tutorial.html",[53],[85,189,191],{"start":190},16,[88,192,193],{},"YAML语言",[97,195],{},[49,197,198],{"href":198,"rel":199},"http://www.noobyard.com/article/p-saghdsms-mn.html",[53],[10,201,203],{"id":202},"安装ros2","安装ROS2",[15,205,206,207],{},"ROS1安装请看",[49,208,211],{"href":209,"rel":210},"https://sdutvincirobot.feishu.cn/wiki/W976wTlonibALVkmfIhcdUKYnUV",[53],"ROS机器人操作系统教程",[15,213,214],{},"** 建议使用Kubuntu 24.04 LTS **\n** 建议学习 ROS2 Jazzy 版本，本教程将基于ROS2 Jazzy **",[40,216,218,219,222],{"id":217},"二进制包安装ros2以kubuntu-jammy-2204安装-ros-humble-为例","二进制包安装ROS2(以Kubuntu Jammy 22.04安装 ",[58,220,221],{},"ROS Humble"," 为例)",[15,224,225],{},"注意:",[15,227,228],{},"截至2024年12月，强烈建议如果要用ROS2的话，一定要用ROS Humble,别用ROS Jazzy，这玩意有些区别，特别是Gazebo,几乎没啥教程的。",[15,230,231,232],{},"Ubuntu Jammy 22.04(LTS)请安装ROS Humble(LTS)。安装向导网站:",[49,233,234],{"href":234,"rel":235},"https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html",[53],[15,237,238,239],{},"Ubuntu Noble 24.04(LTS)请安装ROS Jazzy(LTS)。安装向导网站:",[49,240,241],{"href":241,"rel":242},"https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html",[53],[15,244,245,246],{},"各个ROS1、ROS2版本所支持的发行版：",[49,247,248],{"href":248,"rel":249},"https://www.ros.org/reps/rep-2000.html",[53],[251,252,254],"h5",{"id":253},"进入ros官网","进入ROS官网",[15,256,257],{},[28,258],{"alt":30,"src":259},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image5.webp",[15,261,262],{},[28,263],{"alt":30,"src":264},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image6.webp",[15,266,267],{},"一定要安装LTS版本的ROS2",[15,269,270],{},[28,271],{"alt":30,"src":272},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image7.webp",[251,274,276],{"id":275},"安装ros2前期准备工作","安装ROS2前期准备工作",[15,278,279],{},"装LTS版本的ROS2点击使用debian包管理工具安装ROS2二进制文件",[15,281,282],{},[28,283],{"alt":30,"src":284},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image8.webp",[15,286,287],{},"按照ROS2官网教程在终端里输入如下命令",[15,289,290,293],{},[28,291],{"alt":30,"src":292},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image9.webp",[28,294],{"alt":30,"src":295},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image10.webp",[15,297,298],{},"依旧输入以下命令启动Ubuntu Universe Repo",[15,300,301,304],{},[28,302],{"alt":30,"src":303},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image11.webp",[28,305],{"alt":30,"src":306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image12.webp",[251,308,310],{"id":309},"换源国内源","换源(国内源)",[15,312,313],{},"这个是官网的源，是从国外服务器下载ROS2二进制文件的，对网络有要求，所以我们要给改为国内源。",[15,315,316],{},[28,317],{"alt":30,"src":318},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image13.webp",[15,320,321],{},"百度搜索北京外国语大学镜像源(亲测，北方最快的源)",[15,323,324],{},[28,325],{"alt":30,"src":326},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image14.webp",[15,328,329],{},[28,330],{"alt":30,"src":331},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image15.webp",[15,333,334],{},"找到ROS2，然后勾上sudo和https，选择正确的Linux发行版。在使用该命令前有可能会遇到权限不够的问题，可以先往下看，如何以root权限运行所有命令。",[15,336,337,340],{},[28,338],{"alt":30,"src":339},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image16.webp",[28,341],{"alt":30,"src":342},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image17.webp",[15,344,345],{},"先输入sudo passwd设置root密码（Ubuntu系发行版要干的事）（debian,Fedora等发行版在装机时就已经设置过了，无需运行）",[15,347,348],{},[28,349],{"alt":30,"src":350},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image18.webp",[352,353,358],"pre",{"className":354,"code":356,"language":357},[355],"language-text","sudo passwd\n\nsu -\n","text",[359,360,356],"code",{"__ignoreMap":30},[15,362,363],{},"然后进入管理员权限下",[15,365,366],{},[28,367],{"alt":30,"src":368},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image19.webp",[15,370,371],{},"挨行复制输入运行",[15,373,374,377],{},[28,375],{"alt":30,"src":376},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image20.webp",[28,378],{"alt":30,"src":379},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image21.webp",[15,381,382],{},[28,383],{"alt":30,"src":384},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image22.webp",[15,386,387,388,393],{},"上面下载key的时候如果卡住了，那就是github又抽风了，很正常的问题，可以选择科学*上网(",[49,389,392],{"href":390,"rel":391},"https://sdutvincirobot.feishu.cn/wiki/HnjswlR8NiVjVgkbn6hcAlwzn2e",[53],"科学机场教程",")解决，如果还解决不了，可以通过下方教程修改hosts。",[15,395,396],{},[49,397,400],{"href":398,"rel":399},"https://blog.csdn.net/qq%5C_40584960/article/details/117963644?sharetype=blog&shareId=117963644&sharerefer=APP&sharesource=qq%5C_33274985&sharefrom=link",[53],"https://blog.csdn.net/qq\\_40584960/article/details/117963644?sharetype=blog&shareId=117963644&sharerefer=APP&sharesource=qq\\_33274985&sharefrom=link",[15,402,403],{},"成功下载key之后，继续往下弄。",[15,405,406],{},"输入exit退出root模式",[352,408,412],{"className":409,"code":410,"language":411,"meta":30,"style":30},"language-bash shiki shiki-themes github-light github-dark","exit\n","bash",[359,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image23.webp",[251,428,430],{"id":429},"通过apt安装ros2","通过apt安装ROS2",[15,432,433],{},"把以下红色框框的全部在终端里敲一遍",[15,435,436],{},[28,437],{"alt":30,"src":438},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image24.webp",[15,440,441],{},"国内的镜像下载还是非常快的。",[15,443,444],{},[28,445],{"alt":30,"src":446},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image25.webp",[251,448,450],{"id":449},"ros2基础环境变量配置","ROS2基础环境变量配置",[15,452,453],{},"复制该行",[15,455,456],{},[28,457],{"alt":30,"src":458},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image26.webp",[15,460,461],{},"输入以下命令",[352,463,465],{"className":409,"code":464,"language":411,"meta":30,"style":30},"sudo apt-get install vim\nsudo vim ~/.bashrc\n",[359,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}," ~/.bashrc\n",[15,495,496],{},"在最底部把这行加上（vim不会使用的，请自行百度）",[15,498,499],{},[28,500],{"alt":30,"src":501},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image27.webp",[15,503,504],{},"刷新以下当前终端的环境变量",[352,506,508],{"className":409,"code":507,"language":411,"meta":30,"style":30},"echo 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc\nsource ~/.bashrc\n",[359,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://mirrors.bfsu.edu.cn/rosdistro/index-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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image28.webp",[251,537,539],{"id":538},"测试ros2","测试ROS2",[15,541,542,543,545],{},"请往下翻到**",[359,544,539],{},"**章节",[40,547,549],{"id":548},"从源码安装ros2难度较高ubuntu用上面那个简单方法即可","从源码安装ROS2(难度较高，Ubuntu用上面那个简单方法即可。)",[251,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image29.webp",[15,568,569],{},"然后选择用源码进行编译,找到对应的发行版,比如我这里是Feodra.",[15,571,572],{},[28,573],{"alt":30,"src":574},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image30.webp",[15,576,577],{},"然后根据官网教程来就行",[15,579,580],{},[28,581],{"alt":30,"src":582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image31.webp",[85,584,585],{},[88,586,587],{},"设置区域",[15,589,590,591,594,595,598],{},"确保你的 locale 支持 ",[359,592,593],{},"UTF-8","。如果你在一个最小的环境（比如 docker 容器）中，locale 可能是 ",[359,596,597],{},"C"," 等最小的东西。我们使用以下设置进行测试。但是，如果您使用的是其他支持 UTF-8 的区域设置，应该没问题。",[352,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",[359,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":113},[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":126},[415,644,611],{"class":610},[415,646,647],{"class":614},"# verify settings\n",[85,649,650],{"start":485},[88,651,652],{},"启用必须的仓库",[15,654,655],{},"Fedora无需额外启用仓库,RHEL需要.",[85,657,658],{"start":624},[88,659,660],{},"安装开发工具",[352,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",[359,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":113},[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":126},[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":139},[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":159},[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":178},[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":190},[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",[85,823,824,1257],{"start":113},[88,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",[85,828,829],{},[88,830,831],{},"获取ROS2源码",[97,833],{},"  找一个要存放ROS2的文件夹,建议在/home分区找,然后在这个文件夹下打开终端.",[352,836,838],{"className":601,"code":837,"language":603,"meta":30,"style":30},"mkdir -p ./ros2_jazzy/src\ncd ./ros2_jazzy\nvcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src\n",[359,839,840,845,850],{"__ignoreMap":30},[415,841,842],{"class":417,"line":418},[415,843,844],{"class":610},"mkdir -p ./ros2_jazzy/src\n",[415,846,847],{"class":417,"line":485},[415,848,849],{"class":610},"cd ./ros2_jazzy\n",[415,851,852],{"class":417,"line":624},[415,853,854],{"class":610},"vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src\n",[97,856],{},[28,858],{"alt":30,"src":859},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image32.webp",[85,861,862],{"start":638},[88,863,864],{},"更新系统",[97,866],{},"  ROS 2 软件包构建在经常更新的 红帽系 系统上。始终建议您在安装新软件包之前确保您的系统是最新的。",[352,869,871],{"className":601,"code":870,"language":603,"meta":30,"style":30},"sudo dnf upgrade\n",[359,872,873],{"__ignoreMap":30},[415,874,875],{"class":417,"line":418},[415,876,870],{"class":610},[85,878,879],{"start":139},[88,880,881],{},"初始化并更换rosdep源",[97,883],{},[49,885,886],{"href":886,"rel":887},"https://mirrors.bfsu.edu.cn/help/rosdistro/",[53],[97,889],{},[28,891],{"alt":30,"src":892},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image33.webp",[97,894],{},[28,896],{"alt":30,"src":897},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image34.webp",[352,899,901],{"className":601,"code":900,"language":603,"meta":30,"style":30},"\n# 手动模拟 rosdep init\nsudo mkdir -p /etc/ros/rosdep/sources.list.d/\nsudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list -L https://mirrors.bfsu.edu.cn/github-raw/ros/rosdistro/master/rosdep/sources.list.d/20-default.list\n\n# 加入环境\necho 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc\n\n# 加载.bashrc\nsource ~/.bashrc\n\n# 更新rosdep\nrosdep update\n",[359,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 /etc/ros/rosdep/",[415,918,919],{"class":471},"sources",[415,921,922],{"class":610},".list.d/\n",[415,924,925,928,930,933,935],{"class":417,"line":113},[415,926,927],{"class":610},"sudo curl -o /etc/ros/rosdep/",[415,929,919],{"class":471},[415,931,932],{"class":610},".list.d/20-default.list -L https://mirrors.bfsu.edu.cn/github-raw/ros/rosdistro/master/rosdep/",[415,934,919],{"class":471},[415,936,937],{"class":610},".list.d/20-default.list\n",[415,939,940],{"class":417,"line":638},[415,941,621],{"emptyLinePlaceholder":620},[415,943,944],{"class":417,"line":126},[415,945,946],{"class":614},"# 加入环境\n",[415,948,949],{"class":417,"line":698},[415,950,951],{"class":610},"echo 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc\n",[415,953,954],{"class":417,"line":139},[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 ~/.bashrc\n",[415,967,968],{"class":417,"line":159},[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",[97,981],{},[28,983],{"alt":30,"src":984},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image35.webp",[97,986],{},[28,988],{"alt":30,"src":989},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image36.webp",[85,991,992],{"start":743},[88,993,994],{},"通过rosdep安装依赖",[352,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",[359,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",[97,1026],{},[28,1028],{"alt":30,"src":1029},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image37.webp",[97,1031],{},"  如果出现上面这种错误,使用pip3安装包.",[352,1034,1036],{"className":601,"code":1035,"language":603,"meta":30,"style":30},"sudo pip3 install flake8-docstrings\n",[359,1037,1038],{"__ignoreMap":30},[415,1039,1040],{"class":417,"line":418},[415,1041,1035],{"class":610},[97,1043],{},"  然后,使用下面命令忽略掉",[359,1046,1047],{},"flake8-docstrings",".",[352,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",[359,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",[97,1072],{},"  显示成功即可",[97,1075],{},[28,1077],{"alt":30,"src":1078},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image38.webp",[85,1080,1081],{"start":794},[88,1082,1083],{},"配置环境(不是红帽系的发行版不用弄)",[97,1085],{},"  如果你是红帽系系统需要下面配置",[97,1088],{},"  可以用下面这些命令暂时定义这些宏。",[352,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",[359,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":113},[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},"定义目标系统架构",[97,1225],{},[28,1227],{"alt":30,"src":1228},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image39.webp",[85,1230,1232],{"start":1231},30,[88,1233,1234],{},"使用colcon构建源码",[352,1236,1238],{"className":601,"code":1237,"language":603,"meta":30,"style":30},"colcon build --symlink-install\n",[359,1239,1240],{"__ignoreMap":30},[415,1241,1242],{"class":417,"line":418},[415,1243,1237],{"class":610},[97,1245],{},[28,1247],{"alt":30,"src":1248},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image40.webp",[97,1250],{},"  等待构建完毕,下方就是构建完毕且没错误的样子",[97,1253],{},[28,1255],{"alt":30,"src":1256},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image41.webp",[88,1258,1259],{},"配置基础环境",[15,1261,1262,1263],{},"找到下方文件夹,并复制路径,比如我的是",[359,1264,1265],{},"~/UserFloder/Applications/ros2_jazzy",[15,1267,1268],{},[28,1269],{"alt":30,"src":1270},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image42.webp",[15,1272,1273],{},"使用vim修改bash的环境",[352,1275,1277],{"className":601,"code":1276,"language":603,"meta":30,"style":30},"vim ~/.bashrc\n",[359,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image43.webp",[15,1292,1293,1294,1297],{},"添加完这两行后,按ESC,然后",[359,1295,1296],{},":wq","保存并退出.",[352,1299,1301],{"className":601,"code":1300,"language":603,"meta":30,"style":30},"\n# 刷新当前环境变量\nsource ~/.bashrc\n",[359,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},[85,1317,1318],{"start":126},[88,1319,539],{},[15,1321,542,1322,545],{},[359,1323,539],{},[251,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image44.webp",[15,1341,1342],{},"然后选择用源码进行编译,找到对应的发行版,比如我这里是Debian.",[15,1344,1345],{},[28,1346],{"alt":30,"src":1347},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image45.webp",[15,1349,1350],{},"接下来，从下图这里开始，跟着官方教程一路敲，但是有几个需要注意的点，我这里都会写出来：",[15,1352,1353],{},[28,1354],{"alt":30,"src":1355},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image46.webp",[85,1357,1358],{},[88,1359,587],{},[352,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",[359,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":113},[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":126},[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":139},[415,1443,1369],{"class":471},[415,1445,1446],{"class":614},"  # verify settings\n",[85,1448,1449],{"start":485},[88,1450,1451],{},"换源",[15,1453,1454],{},[28,1455],{"alt":30,"src":1456},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image47.webp",[15,1458,1459],{},"红色部分是Ubuntu要做的，我们是debian,不需要做。",[15,1461,1462],{},"蓝色部分我们不要用官方的，官方是国外源，我们替换成国内源。",[15,1464,1465],{},"先去镜像源换源：",[15,1467,1468],{},[49,1469,1470],{"href":1470,"rel":1471},"https://mirrors.bfsu.edu.cn/help/ros2/",[53],[15,1473,1474],{},[28,1475],{"alt":30,"src":1476},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image48.webp",[15,1478,1479],{},"比如我是debian12：",[352,1481,1483],{"className":409,"code":1482,"language":411,"meta":30,"style":30},"sudo apt install curl gnupg2\nsudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg\n\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.bfsu.edu.cn/ros2/ubuntu bookworm main\" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null\nsudo apt update\n",[359,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://raw.githubusercontent.com/ros/rosdistro/master/ros.key",[415,1512,1513],{"class":421},"  -o",[415,1515,1516],{"class":475}," /usr/share/keyrings/ros-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":113},[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=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.bfsu.edu.cn/ros2/ubuntu bookworm main\"",[415,1538,1539],{"class":520}," |",[415,1541,1542],{"class":471}," sudo",[415,1544,1545],{"class":475}," tee",[415,1547,1548],{"class":475}," /etc/apt/sources.list.d/ros2.list",[415,1550,1551],{"class":520}," >",[415,1553,1554],{"class":475}," /dev/null\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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image49.webp",[85,1570,1571],{"start":624},[88,1572,1573],{},"上图成功换源后，再安装ros的工具：",[15,1575,1576],{},[28,1577],{"alt":30,"src":1578},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image50.webp",[352,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",[359,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":113},[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":126},[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":139},[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":159},[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":178},[415,1693,1694],{"class":475},"  ros-dev-tools\n",[85,1696,1697],{"start":113},[88,1698,1699],{},"下载ROS2源码",[15,1701,1702],{},[28,1703],{"alt":30,"src":1704},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image51.webp",[15,1706,1707],{},"找一个要存放ROS2的文件夹,建议在/home分区找,然后在这个文件夹下打开终端.",[352,1709,1710],{"className":601,"code":837,"language":603,"meta":30,"style":30},[359,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image52.webp",[85,1730,1731],{"start":638},[88,1732,1733],{},"补依赖之前，我们需要先初始化rosdep并给rosdep换源：",[15,1735,1736],{},[28,1737],{"alt":30,"src":1738},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image53.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image54.webp",[15,1753,1754],{},[28,1755],{"alt":30,"src":1756},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image55.webp",[352,1758,1759],{"className":601,"code":900,"language":603,"meta":30,"style":30},[359,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":113},[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":126},[415,1796,946],{"class":614},[415,1798,1799],{"class":417,"line":698},[415,1800,951],{"class":610},[415,1802,1803],{"class":417,"line":139},[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":159},[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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image56.webp",[15,1831,1832],{},[28,1833],{"alt":30,"src":1834},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image57.webp",[15,1836,1837],{},"出现以上红框部分，就是成功换源了。如果你不换源，下面补依赖的过程可能会巨慢（我具体没试过，猜测），除非你科学了。",[352,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",[359,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":113},[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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image58.webp",[85,1878,1879],{"start":126},[88,1880,1881],{},"编译ROS2",[15,1883,1884],{},"在ros_jazzy目录下，打开终端，跑下面命令。",[352,1886,1887],{"className":409,"code":1237,"language":411,"meta":30,"style":30},[359,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image59.webp",[15,1909,1910],{},"等待构建完毕,下方就是构建完毕且没错误的样子",[15,1912,1913],{},[28,1914],{"alt":30,"src":1915},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image60.webp",[85,1917,1918],{"start":698},[88,1919,1259],{},[15,1921,1262,1922],{},[359,1923,1265],{},[15,1925,1926],{},[28,1927],{"alt":30,"src":1928},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image61.webp",[15,1930,1273],{},[352,1932,1933],{"className":601,"code":1276,"language":603,"meta":30,"style":30},[359,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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image62.webp",[352,1947,1949],{"className":409,"code":1948,"language":411,"meta":30,"style":30},"\n# 配置ROS2环境\nexport ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\nsource ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[359,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://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\n",[415,1973,1974,1976],{"class":417,"line":113},[415,1975,528],{"class":421},[415,1977,1978],{"class":475}," ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[15,1980,1293,1981,1297],{},[359,1982,1296],{},[352,1984,1985],{"className":601,"code":1300,"language":603,"meta":30,"style":30},[359,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},[85,2000,2001],{"start":139},[88,2002,539],{},[15,2004,542,2005,545],{},[359,2006,539],{},[40,2008,2010],{"id":2009},"docker安装ros2","Docker安装ROS2",[15,2012,2013],{},[49,2014,2017],{"href":2015,"rel":2016},"https://sdutvincirobot.feishu.cn/wiki/KRSMwKmTvivWRskSRszc2vfNnoc",[53],"Docker教程",[10,2019,2021],{"id":2020},"ros2安装进阶可选","ROS2安装进阶(可选)",[15,2023,2024],{},"上面只是安装了最基本的ROS2包和配置了最基本的ROS2环境。",[15,2026,2027],{},"你安装完上面的内容后，可以选择接着进行下面的进阶配置ROS2环境。",[15,2029,2030],{},"也可以不安装进阶得东西，学到啥再安装啥就可以，当然也有想一劳永逸的同学，所以下面也会列出来最常用的ros2包和环境配置供大家一次性安装。",[15,2032,2033],{},[49,2034,2037],{"href":2035,"rel":2036},"https://index.ros.org/?search%5C_packages=true",[53],"https://index.ros.org/?search\\_packages=true",[40,2039,2040],{"id":2040},"安装进阶的包",[15,2042,2043],{},"以下是一些ROS2自带的导航算法和仿真环境等等的包，下方将列出这些包。",[15,2045,2046],{},"如果你是Ubuntu的话：",[15,2048,2049],{},"下面的包你全都可以用apt安装，不用手动编译！！！",[15,2051,2052],{},"如果你不是Ubuntu的话：",[15,2054,2055],{},"灰色的是上面基础教程安装过的包，",[15,2057,2058],{},"黄色是需要手动编译的包，",[15,2060,2061],{},"蓝色是不仅要手动编译，还要手动修改一些源码的包。",[1157,2063,2064,2071],{},[1160,2065,2066],{},[1163,2067,2068],{},[1166,2069,2070],{"align":1168},"ROS的包（非Ubuntu的发行版基本都需要手动编译）",[1177,2072,2073,2078,2083,2088,2093,2098,2103,2108,2113,2118,2123,2128,2133,2138,2143,2148,2153,2158,2163,2168],{},[1163,2074,2075],{},[1182,2076,2077],{"align":1168},"软件包/库名称",[1163,2079,2080],{},[1182,2081,2082],{"align":1168},"ros-humble-desktop",[1163,2084,2085],{},[1182,2086,2087],{"align":1168},"ros-humble-xacro",[1163,2089,2090],{},[1182,2091,2092],{"align":1168},"ros-humble-joint-state-publisher",[1163,2094,2095],{},[1182,2096,2097],{"align":1168},"ros-humble-joint-state-publisher-gui",[1163,2099,2100],{},[1182,2101,2102],{"align":1168},"ros-humble-gazebo-ros",[1163,2104,2105],{},[1182,2106,2107],{"align":1168},"ros-humble-gazebo-ros-pkgs",[1163,2109,2110],{},[1182,2111,2112],{"align":1168},"ros-humble-ros-gz",[1163,2114,2115],{},[1182,2116,2117],{"align":1168},"ros-humble-diagnostic-updater",[1163,2119,2120],{},[1182,2121,2122],{"align":1168},"ros-humble-teleop-twist-keyboard",[1163,2124,2125],{},[1182,2126,2127],{"align":1168},"ros-humble-navigation2",[1163,2129,2130],{},[1182,2131,2132],{"align":1168},"ros-humble-nav2-bringup",[1163,2134,2135],{},[1182,2136,2137],{"align":1168},"ros-humble-slam-toolbox",[1163,2139,2140],{},[1182,2141,2142],{"align":1168},"ros-humble-cartographer",[1163,2144,2145],{},[1182,2146,2147],{"align":1168},"ros-humble-cartographer-ros",[1163,2149,2150],{},[1182,2151,2152],{"align":1168},"ros-humble-asio-cmake-module",[1163,2154,2155],{},[1182,2156,2157],{"align":1168},"ros-humble-serial-driver",[1163,2159,2160],{},[1182,2161,2162],{"align":1168},"ros-humble-pcl-ros",[1163,2164,2165],{},[1182,2166,2167],{"align":1168},"ros-humble-pointcloud-to-laserscan",[1163,2169,2170],{},[1182,2171,2172],{"align":1168},"ros-humble-vision-opencv",[1157,2174,2175,2182],{},[1160,2176,2177],{},[1163,2178,2179],{},[1166,2180,2181],{"align":1168},"非ROS包（基本都可以apt,dnf安装）",[1177,2183,2184,2188,2193,2198,2203,2208],{},[1163,2185,2186],{},[1182,2187,2077],{"align":1168},[1163,2189,2190],{},[1182,2191,2192],{"align":1168},"libpcl-dev",[1163,2194,2195],{},[1182,2196,2197],{"align":1168},"libeigen3-dev",[1163,2199,2200],{},[1182,2201,2202],{"align":1168},"libpcap-dev",[1163,2204,2205],{},[1182,2206,2207],{"align":1168},"libboost-dev",[1163,2209,2210],{},[1182,2211,2212],{"align":1168},"libogre-1.12-dev",[15,2214,2215],{},"但是上面这些包可以依赖于其他的包，下面这个仓库里有全部的包的仓库链接：（往后看就知道怎么用了）",[15,2217,2218],{},[49,2219,2220],{"href":2220,"rel":2221},"https://github.com/ros/rosdistro/tree/master",[53],[15,2223,2224],{},[28,2225],{"alt":30,"src":2226},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image63.webp",[251,2228,2230],{"id":2229},"apt安装方式ubuntu强烈建议","apt安装方式（Ubuntu强烈建议）",[352,2232,2234],{"className":409,"code":2233,"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",[359,2235,2236,2254,2261,2268,2275,2282,2289,2296,2303,2310,2317,2324,2331,2338,2345,2352,2359,2366,2373,2380,2387,2394,2401,2408,2415,2422],{"__ignoreMap":30},[415,2237,2238,2240,2242,2244,2246,2248,2250,2252],{"class":417,"line":418},[415,2239,472],{"class":471},[415,2241,1383],{"class":475},[415,2243,1386],{"class":475},[415,2245,1389],{"class":610},[415,2247,472],{"class":471},[415,2249,1383],{"class":475},[415,2251,479],{"class":475},[415,2253,1605],{"class":421},[415,2255,2256,2259],{"class":417,"line":485},[415,2257,2258],{"class":475},"    ros-humble-desktop",[415,2260,1605],{"class":421},[415,2262,2263,2266],{"class":417,"line":624},[415,2264,2265],{"class":475},"    ros-dev-tools",[415,2267,1605],{"class":421},[415,2269,2270,2273],{"class":417,"line":113},[415,2271,2272],{"class":475},"    ros-humble-xacro",[415,2274,1605],{"class":421},[415,2276,2277,2280],{"class":417,"line":638},[415,2278,2279],{"class":475},"    ros-humble-joint-state-publisher",[415,2281,1605],{"class":421},[415,2283,2284,2287],{"class":417,"line":126},[415,2285,2286],{"class":475},"    ros-humble-joint-state-publisher-gui",[415,2288,1605],{"class":421},[415,2290,2291,2294],{"class":417,"line":698},[415,2292,2293],{"class":475},"    ros-humble-ros-gz",[415,2295,1605],{"class":421},[415,2297,2298,2301],{"class":417,"line":139},[415,2299,2300],{"class":475},"    ros-humble-gazebo-ros",[415,2302,1605],{"class":421},[415,2304,2305,2308],{"class":417,"line":709},[415,2306,2307],{"class":475},"    ros-humble-gazebo-ros-pkgs",[415,2309,1605],{"class":421},[415,2311,2312,2315],{"class":417,"line":715},[415,2313,2314],{"class":475},"    ros-humble-imu-tools",[415,2316,1605],{"class":421},[415,2318,2319,2322],{"class":417,"line":159},[415,2320,2321],{"class":475},"    ros-humble-diagnostic-updater",[415,2323,1605],{"class":421},[415,2325,2326,2329],{"class":417,"line":726},[415,2327,2328],{"class":475},"    ros-humble-teleop-twist-keyboard",[415,2330,1605],{"class":421},[415,2332,2333,2336],{"class":417,"line":732},[415,2334,2335],{"class":475},"    ros-humble-navigation2",[415,2337,1605],{"class":421},[415,2339,2340,2343],{"class":417,"line":178},[415,2341,2342],{"class":475},"    ros-humble-nav2-bringup",[415,2344,1605],{"class":421},[415,2346,2347,2350],{"class":417,"line":743},[415,2348,2349],{"class":475},"    ros-humble-slam-toolbox",[415,2351,1605],{"class":421},[415,2353,2354,2357],{"class":417,"line":190},[415,2355,2356],{"class":475},"    ros-humble-cartographer",[415,2358,1605],{"class":421},[415,2360,2361,2364],{"class":417,"line":754},[415,2362,2363],{"class":475},"    ros-humble-cartographer-ros",[415,2365,1605],{"class":421},[415,2367,2368,2371],{"class":417,"line":760},[415,2369,2370],{"class":475},"    ros-humble-asio-cmake-module",[415,2372,1605],{"class":421},[415,2374,2375,2378],{"class":417,"line":766},[415,2376,2377],{"class":475},"    ros-humble-serial-driver",[415,2379,1605],{"class":421},[415,2381,2382,2385],{"class":417,"line":772},[415,2383,2384],{"class":475},"    ros-humble-pcl-ros",[415,2386,1605],{"class":421},[415,2388,2389,2392],{"class":417,"line":778},[415,2390,2391],{"class":475},"    ros-humble-vision-opencv",[415,2393,1605],{"class":421},[415,2395,2396,2399],{"class":417,"line":783},[415,2397,2398],{"class":475},"    ros-humble-pointcloud-to-laserscan",[415,2400,1605],{"class":421},[415,2402,2403,2406],{"class":417,"line":789},[415,2404,2405],{"class":475},"    libpcl-dev",[415,2407,1605],{"class":421},[415,2409,2410,2413],{"class":417,"line":794},[415,2411,2412],{"class":475},"    libeigen3-dev",[415,2414,1605],{"class":421},[415,2416,2417,2420],{"class":417,"line":800},[415,2418,2419],{"class":475},"    libpcap-dev",[415,2421,1605],{"class":421},[415,2423,2424],{"class":417,"line":806},[415,2425,2426],{"class":475},"    python3-colcon-common-extensions\n",[251,2428,2430],{"id":2429},"源码方式非ubuntu","源码方式（非Ubuntu）",[15,2432,2433],{},"以debian12为例。",[2435,2436,2437],"h6",{"id":2437},"黄色的包",[15,2439,2440],{},"以安装ros-jazzy-xacro，ros-jazzy-joint-state-publisher，ros-jazzy-joint-state-publisher-gui这三个包为例，其他的包一样操作。",[15,2442,2443],{},[49,2444,2037],{"href":2035,"rel":2445},[53],[15,2447,2448],{},"进入上面的网站，在下图中选择对应版本，比如我是JAZZY，然后在搜索框中搜索xacro，joint_state_publisher，joint_state_publisher_gui",[15,2450,2451],{},[28,2452],{"alt":30,"src":2453},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image64.webp",[15,2455,2456],{},"比如xacro",[15,2458,2459],{},[28,2460],{"alt":30,"src":2461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image65.webp",[15,2463,2464],{},[28,2465],{"alt":30,"src":2466},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image66.webp",[15,2468,2469],{},"找到对应版本的xacro，然后仓库地址是checkout URI，分支是vcs version,你可以使用git clone一个一个克隆下来，但这是巨麻烦的一件事，所以我们选择ROS2提供给我们的vcs命令进行下载包的源码。",[15,2471,2472],{},"首先，进入自己的ros2_jazzy文件并打开一个终端",[15,2474,2475],{},[28,2476],{"alt":30,"src":2477},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image67.webp",[15,2479,2480],{},"并创建一个.repos文件，文件名随便起，比如我的叫my_ros2_jazzy_packages.repos",[15,2482,2483],{},[28,2484],{"alt":30,"src":2485},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image68.webp",[15,2487,2488],{},"然后用vscode编辑，因为.repos使用的是yaml语言，vscode可以识别语法正确性：",[15,2490,2491],{},[28,2492],{"alt":30,"src":2493},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image69.webp",[15,2495,2496],{},"将刚才查询的信息写上去：",[352,2498,2502],{"className":2499,"code":2500,"language":2501,"meta":30,"style":30},"language-yaml shiki shiki-themes github-light github-dark","repositories:\n  xacro:\n    type: git\n    url: https://github.com/ros/xacro.git\n    version: ros2\n","yaml",[359,2503,2504,2513,2520,2531,2541],{"__ignoreMap":30},[415,2505,2506,2510],{"class":417,"line":418},[415,2507,2509],{"class":2508},"s9eBZ","repositories",[415,2511,2512],{"class":610},":\n",[415,2514,2515,2518],{"class":417,"line":485},[415,2516,2517],{"class":2508},"  xacro",[415,2519,2512],{"class":610},[415,2521,2522,2525,2528],{"class":417,"line":624},[415,2523,2524],{"class":2508},"    type",[415,2526,2527],{"class":610},": ",[415,2529,2530],{"class":475},"git\n",[415,2532,2533,2536,2538],{"class":417,"line":113},[415,2534,2535],{"class":2508},"    url",[415,2537,2527],{"class":610},[415,2539,2540],{"class":475},"https://github.com/ros/xacro.git\n",[415,2542,2543,2546,2548],{"class":417,"line":638},[415,2544,2545],{"class":2508},"    version",[415,2547,2527],{"class":610},[415,2549,2550],{"class":475},"ros2\n",[15,2552,2553],{},"用同样的方式找到其他包：",[15,2555,2556],{},[28,2557],{"alt":30,"src":2558},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image70.webp",[15,2560,2561],{},"上图说明joint_state_publisher和joint_state_publisher_gui其实是一个仓库，所以我们只需要克隆一个仓库。",[15,2563,2564],{},"然后vcs version也就是git的分支是ros2。",[352,2566,2568],{"className":2499,"code":2567,"language":2501,"meta":30,"style":30},"repositories:\n  xacro:\n    type: git\n    url: https://github.com/ros/xacro.git\n    version: ros2\n  joint_state_publisher:\n    type: git\n    url: https://github.com/ros/joint_state_publisher.git\n    version: ros2\n",[359,2569,2570,2576,2582,2590,2598,2606,2613,2621,2630],{"__ignoreMap":30},[415,2571,2572,2574],{"class":417,"line":418},[415,2573,2509],{"class":2508},[415,2575,2512],{"class":610},[415,2577,2578,2580],{"class":417,"line":485},[415,2579,2517],{"class":2508},[415,2581,2512],{"class":610},[415,2583,2584,2586,2588],{"class":417,"line":624},[415,2585,2524],{"class":2508},[415,2587,2527],{"class":610},[415,2589,2530],{"class":475},[415,2591,2592,2594,2596],{"class":417,"line":113},[415,2593,2535],{"class":2508},[415,2595,2527],{"class":610},[415,2597,2540],{"class":475},[415,2599,2600,2602,2604],{"class":417,"line":638},[415,2601,2545],{"class":2508},[415,2603,2527],{"class":610},[415,2605,2550],{"class":475},[415,2607,2608,2611],{"class":417,"line":126},[415,2609,2610],{"class":2508},"  joint_state_publisher",[415,2612,2512],{"class":610},[415,2614,2615,2617,2619],{"class":417,"line":698},[415,2616,2524],{"class":2508},[415,2618,2527],{"class":610},[415,2620,2530],{"class":475},[415,2622,2623,2625,2627],{"class":417,"line":139},[415,2624,2535],{"class":2508},[415,2626,2527],{"class":610},[415,2628,2629],{"class":475},"https://github.com/ros/joint_state_publisher.git\n",[415,2631,2632,2634,2636],{"class":417,"line":709},[415,2633,2545],{"class":2508},[415,2635,2527],{"class":610},[415,2637,2550],{"class":475},[15,2639,2640],{},"其他的包如法炮制。",[15,2642,2643],{},"但我先以这俩包做个例子。",[15,2645,2646],{},"在ros2_jazzy目录下的终端：",[352,2648,2650],{"className":409,"code":2649,"language":411,"meta":30,"style":30},"vcs import src \u003C my_ros2_jazzy_packages.repos\n",[359,2651,2652],{"__ignoreMap":30},[415,2653,2654,2657,2660,2663,2666],{"class":417,"line":418},[415,2655,2656],{"class":471},"vcs",[415,2658,2659],{"class":475}," import",[415,2661,2662],{"class":475}," src",[415,2664,2665],{"class":520}," \u003C",[415,2667,2668],{"class":475}," my_ros2_jazzy_packages.repos\n",[15,2670,2671],{},[28,2672],{"alt":30,"src":2673},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image71.webp",[15,2675,2676],{},"可以看到下图，克隆成功了",[15,2678,2679],{},[28,2680],{"alt":30,"src":2681},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image72.webp",[15,2683,2684],{},"接下来进行补充依赖：",[352,2686,2688],{"className":409,"code":2687,"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",[359,2689,2690],{"__ignoreMap":30},[415,2691,2692,2695,2697,2700,2702,2705,2707,2710],{"class":417,"line":418},[415,2693,2694],{"class":471},"rosdep",[415,2696,479],{"class":475},[415,2698,2699],{"class":421}," --from-paths",[415,2701,2662],{"class":475},[415,2703,2704],{"class":421}," --ignore-src",[415,2706,1602],{"class":421},[415,2708,2709],{"class":421}," --skip-keys",[415,2711,2712],{"class":475}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[15,2714,2715],{},"提示下图字样，即是成功",[15,2717,2718],{},[28,2719],{"alt":30,"src":2720},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image73.webp",[15,2722,2723],{},"再编译安装即可：",[352,2725,2727],{"className":409,"code":2726,"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",[359,2728,2729,2737,2741,2746],{"__ignoreMap":30},[415,2730,2731,2733,2735],{"class":417,"line":418},[415,2732,1893],{"class":471},[415,2734,1896],{"class":475},[415,2736,1899],{"class":421},[415,2738,2739],{"class":417,"line":485},[415,2740,621],{"emptyLinePlaceholder":620},[415,2742,2743],{"class":417,"line":624},[415,2744,2745],{"class":614},"# 或仅编译特定包\n",[415,2747,2748,2750,2752,2755,2758,2761],{"class":417,"line":113},[415,2749,1893],{"class":471},[415,2751,1896],{"class":475},[415,2753,2754],{"class":421}," --packages-select",[415,2756,2757],{"class":475}," xacro",[415,2759,2760],{"class":475}," joint_state_publisher",[415,2762,2763],{"class":475}," joint_state_publisher_gui\n",[15,2765,2766],{},[28,2767],{"alt":30,"src":2768},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image74.webp",[15,2770,2640],{},[15,2772,2773],{},"测试：",[352,2775,2777],{"className":409,"code":2776,"language":411,"meta":30,"style":30},"\n# 重新加载环境\nsource ~/.bashrc\n\n# 敲命令\nxacro\n",[359,2778,2779,2783,2788,2794,2798,2803],{"__ignoreMap":30},[415,2780,2781],{"class":417,"line":418},[415,2782,621],{"emptyLinePlaceholder":620},[415,2784,2785],{"class":417,"line":485},[415,2786,2787],{"class":614},"# 重新加载环境\n",[415,2789,2790,2792],{"class":417,"line":624},[415,2791,528],{"class":421},[415,2793,493],{"class":475},[415,2795,2796],{"class":417,"line":113},[415,2797,621],{"emptyLinePlaceholder":620},[415,2799,2800],{"class":417,"line":638},[415,2801,2802],{"class":614},"# 敲命令\n",[415,2804,2805],{"class":417,"line":126},[415,2806,2807],{"class":471},"xacro\n",[15,2809,2810],{},"如下图xacro提示error即是成功，这样就是安装成功了！",[15,2812,2813],{},[28,2814],{"alt":30,"src":2815},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image75.webp",[15,2817,2640],{},[15,2819,2820],{},"我也整了Humble和Jazzy的repos的文件，从官网和distribution.yaml一个个找的，你可以克隆下来直接用我整理的就可以。(但有可能部分仓库分支ROS2官方会做出修改)",[15,2822,2823],{},[49,2824,2825],{"href":2825,"rel":2826},"https://github.com/tungchiahui/ros-docker/tree/main/repos",[53],[15,2828,2829],{},[28,2830],{"alt":30,"src":2831},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image76.webp",[2435,2833,2834],{"id":2834},"蓝色的包",[15,2836,2837],{},"蓝色的包大体的方式是和黄色一样的，只不过蓝色的包在下载完源码后，还需要修改下源码里的文件，再进行编译。",[15,2839,2840],{},"如vision_opencv的cv_bridge:请看下方OpenCV章节的CV_Bridge。",[251,2842,2843],{"id":2843},"常见问题",[85,2845,2846],{},[88,2847,2848],{},"libogre-dev找不到",[15,2850,2851],{},"Gazebo的渲染引擎，在debian12中用libogre-dev搜不到，必须用libogre-1.12-dev才能搜到。",[85,2853,2854],{"start":485},[88,2855,2856],{},"nav2_mppi_controller里有个被当成空指针了，警告成错误了。",[15,2858,2859,2860,2863],{},"解决在nav2_mppi_controller的cmakelists里添加上",[359,2861,2862],{},"add_compile_options(-Wno-error=null-dereference)","即可。",[85,2865,2866],{"start":624},[88,2867,2868],{},"nav2_system_tests里有个内存重叠警告。",[15,2870,2871],{},"解决在nav2_system_tests的cmakelists里添加上下面的几行即可。",[352,2873,2875],{"className":409,"code":2874,"language":411,"meta":30,"style":30},"if (CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n    add_compile_options(-Wno-restrict)\nendif()\n",[359,2876,2877,2896,2903],{"__ignoreMap":30},[415,2878,2879,2882,2885,2888,2891,2894],{"class":417,"line":418},[415,2880,2881],{"class":520},"if",[415,2883,2884],{"class":610}," (",[415,2886,2887],{"class":471},"CMAKE_CXX_COMPILER_ID",[415,2889,2890],{"class":475}," MATCHES",[415,2892,2893],{"class":475}," \"GNU\"",[415,2895,1155],{"class":610},[415,2897,2898,2901],{"class":417,"line":485},[415,2899,2900],{"class":471},"    add_compile_options(-Wno-restrict",[415,2902,1155],{"class":610},[415,2904,2905,2908],{"class":417,"line":624},[415,2906,2907],{"class":471},"endif",[415,2909,2910],{"class":610},"()\n",[85,2912,2913],{"start":113},[88,2914,2915],{},"有的库在Fedora最新版没有，在旧版有。",[15,2917,2918],{},[28,2919],{"alt":30,"src":2920},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image77.webp",[15,2922,2923],{},[49,2924,2925],{"href":2925,"rel":2926},"https://src.fedoraproject.org/projects/rpms/%2A",[53],[15,2928,2929],{},[28,2930],{"alt":30,"src":2931},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image78.webp",[352,2933,2935],{"className":409,"code":2934,"language":411,"meta":30,"style":30},"sudo dnf install python3-pykdl --releasever=41\nsudo dnf install orocos-kdl-devel --releasever=41\n",[359,2936,2937,2952],{"__ignoreMap":30},[415,2938,2939,2941,2944,2946,2949],{"class":417,"line":418},[415,2940,472],{"class":471},[415,2942,2943],{"class":475}," dnf",[415,2945,479],{"class":475},[415,2947,2948],{"class":475}," python3-pykdl",[415,2950,2951],{"class":421}," --releasever=41\n",[415,2953,2954,2956,2958,2960,2963],{"class":417,"line":485},[415,2955,472],{"class":471},[415,2957,2943],{"class":475},[415,2959,479],{"class":475},[415,2961,2962],{"class":475}," orocos-kdl-devel",[415,2964,2951],{"class":421},[85,2966,2967],{"start":638},[88,2968,2969],{},"有些python库在最新版系统上下不了，因为python版本过高",[15,2971,2972],{},"可以使用pip3安装该库",[352,2974,2976],{"className":409,"code":2975,"language":411,"meta":30,"style":30},"pip3 install flake8-docstrings\n",[359,2977,2978],{"__ignoreMap":30},[415,2979,2980,2983,2985],{"class":417,"line":418},[415,2981,2982],{"class":471},"pip3",[415,2984,479],{"class":475},[415,2986,2987],{"class":475}," flake8-docstrings\n",[15,2989,2990],{},"但后续编译的话，需要把该库加入rosdep忽略的依赖。比如python3-flake8-docstrings的话就是下面这行：",[352,2992,2994],{"className":409,"code":2993,"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",[359,2995,2996,3014,3018,3023],{"__ignoreMap":30},[415,2997,2998,3000,3002,3004,3006,3008,3010,3012],{"class":417,"line":418},[415,2999,2694],{"class":471},[415,3001,479],{"class":475},[415,3003,2699],{"class":421},[415,3005,2662],{"class":475},[415,3007,2704],{"class":421},[415,3009,1602],{"class":421},[415,3011,2709],{"class":421},[415,3013,2712],{"class":475},[415,3015,3016],{"class":417,"line":485},[415,3017,621],{"emptyLinePlaceholder":620},[415,3019,3020],{"class":417,"line":624},[415,3021,3022],{"class":614},"# 改为\n",[415,3024,3025,3027,3029,3031,3033,3035,3037,3039],{"class":417,"line":113},[415,3026,2694],{"class":471},[415,3028,479],{"class":475},[415,3030,2699],{"class":421},[415,3032,2662],{"class":475},[415,3034,2704],{"class":421},[415,3036,1602],{"class":421},[415,3038,2709],{"class":421},[415,3040,3041],{"class":475}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[15,3043,3044],{},[28,3045],{"alt":30,"src":3046},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image79.webp",[40,3048,3049],{"id":3049},"环境进阶",[251,3051,3053],{"id":3052},"apt方式","Apt方式",[352,3055,3059],{"className":3056,"code":3057,"language":3058,"meta":30,"style":30},"language-javascript shiki shiki-themes github-light github-dark","\n# rosdep换源\nexport ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\n\n# 加载ROS2环境\nsource /opt/ros/jazzy/setup.bash\n\n# 配置ROS2的分布式\nexport ROS_DOMAIN_ID=6\n\n# 配置新版Gazebo的资源（这里先注释，等你学到gazebo再打开）\n#export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:/home/tungchiahui/UserFloder/MySource/ROS_WS/gazebo_models:/home/tungchiahui/UserFloder/MySource/ROS_WS/ign_models\n","javascript",[359,3060,3061,3065,3070,3075,3079,3084,3089,3093,3098,3103,3107,3112],{"__ignoreMap":30},[415,3062,3063],{"class":417,"line":418},[415,3064,621],{"emptyLinePlaceholder":620},[415,3066,3067],{"class":417,"line":485},[415,3068,3069],{},"# rosdep换源\n",[415,3071,3072],{"class":417,"line":624},[415,3073,3074],{},"export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\n",[415,3076,3077],{"class":417,"line":113},[415,3078,621],{"emptyLinePlaceholder":620},[415,3080,3081],{"class":417,"line":638},[415,3082,3083],{},"# 加载ROS2环境\n",[415,3085,3086],{"class":417,"line":126},[415,3087,3088],{},"source /opt/ros/jazzy/setup.bash\n",[415,3090,3091],{"class":417,"line":698},[415,3092,621],{"emptyLinePlaceholder":620},[415,3094,3095],{"class":417,"line":139},[415,3096,3097],{},"# 配置ROS2的分布式\n",[415,3099,3100],{"class":417,"line":709},[415,3101,3102],{},"export ROS_DOMAIN_ID=6\n",[415,3104,3105],{"class":417,"line":715},[415,3106,621],{"emptyLinePlaceholder":620},[415,3108,3109],{"class":417,"line":159},[415,3110,3111],{},"# 配置新版Gazebo的资源（这里先注释，等你学到gazebo再打开）\n",[415,3113,3114],{"class":417,"line":726},[415,3115,3116],{},"#export GZ_SIM_RESOURCE_PATH=$GZ_SIM_RESOURCE_PATH:/home/tungchiahui/UserFloder/MySource/ROS_WS/gazebo_models:/home/tungchiahui/UserFloder/MySource/ROS_WS/ign_models\n",[15,3118,3119],{},"注意，Gazebo资源包在不同ROS2版本可能宏的名称不同，如在ROS2Humble里是IGN_GAZEBO_RESOURCE_PATH，在ROS2Jazzy里是GZ_SIM_RESOURCE_PATH。（往后的ROS2版本估计都是GZ_SIM_RESOURCE_PATH）（详见下方Gazebo教程）",[251,3121,3122],{"id":3122},"源码方式",[15,3124,3125],{},"与apt方式相同，但是需要把加载ROS2环境的那个setup.bash路径设置为你的ros2安装路径。",[352,3127,3129],{"className":409,"code":3128,"language":411,"meta":30,"style":30},"\n# 加载ROS2环境\nsource ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[359,3130,3131,3135,3139],{"__ignoreMap":30},[415,3132,3133],{"class":417,"line":418},[415,3134,621],{"emptyLinePlaceholder":620},[415,3136,3137],{"class":417,"line":485},[415,3138,3083],{"class":614},[415,3140,3141,3143],{"class":417,"line":624},[415,3142,528],{"class":421},[415,3144,1978],{"class":475},[10,3146,539],{"id":3147},"测试ros2-1",[40,3149,3150],{"id":3150},"示例1",[15,3152,3153],{},"打开两个终端，并分别输入如下两个红框框里的命令",[15,3155,3156],{},[28,3157],{"alt":30,"src":3158},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image80.webp",[15,3160,3161],{},"弹出如下程序，则测试成功。",[15,3163,3164],{},"对着终端按Ctrl+C可以终止程序。",[15,3166,3167],{},[28,3168],{"alt":30,"src":3169},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image81.webp",[40,3171,3172],{"id":3172},"示例2",[15,3174,3175],{},"乌龟作为ROS老测试项目了，必须拉出来溜溜！",[15,3177,3178],{},"同样开两个终端，并分别输入以下命令。",[352,3180,3182],{"className":409,"code":3181,"language":411,"meta":30,"style":30},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[359,3183,3184,3198],{"__ignoreMap":30},[415,3185,3186,3189,3192,3195],{"class":417,"line":418},[415,3187,3188],{"class":471},"ros2",[415,3190,3191],{"class":475}," run",[415,3193,3194],{"class":475}," turtlesim",[415,3196,3197],{"class":475}," turtlesim_node\n",[415,3199,3200,3202,3204,3206],{"class":417,"line":485},[415,3201,3188],{"class":471},[415,3203,3191],{"class":475},[415,3205,3194],{"class":475},[415,3207,3208],{"class":475}," turtle_teleop_key\n",[15,3210,3211],{},"鼠标点以下红色部分，然后通过小键盘的方向键可以控制乌龟运行，如果没有小键盘，可以尝试GBVCDERT等按键操控小乌龟。",[15,3213,3214],{},"同样地，对着终端按Ctrl+C可以终止程序。",[15,3216,3217],{},[28,3218],{"alt":30,"src":3219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image82.webp",[10,3221,2843],{"id":3222},"常见问题-1",[40,3224,3226],{"id":3225},"rviz2闪烁","Rviz2闪烁",[15,3228,3229],{},"如果2K+的电脑安装完rviz2有显示问题，可以在.bashrc里加上下面的内容，用来让qt不缩放。",[352,3231,3233],{"className":409,"code":3232,"language":411,"meta":30,"style":30},"export QT_AUTO_SCREEN_SCALE_FACTOR=0\nexport QT_SCREEN_SCALE_FACTORS=[1.0]\n",[359,3234,3235,3247],{"__ignoreMap":30},[415,3236,3237,3239,3242,3244],{"class":417,"line":418},[415,3238,632],{"class":520},[415,3240,3241],{"class":610}," QT_AUTO_SCREEN_SCALE_FACTOR",[415,3243,1104],{"class":520},[415,3245,3246],{"class":421},"0\n",[415,3248,3249,3251,3254,3256],{"class":417,"line":485},[415,3250,632],{"class":520},[415,3252,3253],{"class":610}," QT_SCREEN_SCALE_FACTORS",[415,3255,1104],{"class":520},[415,3257,3258],{"class":610},"[1.0]\n",[3260,3261,3262],"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":3264},[3265,3266,3267,3268,3269,3270,3271,3272],{"id":12,"depth":624,"text":13},{"id":23,"depth":624,"text":24},{"id":37,"depth":624,"text":38},{"id":82,"depth":624,"text":83},{"id":202,"depth":624,"text":203},{"id":2020,"depth":624,"text":2021},{"id":3147,"depth":624,"text":539},{"id":3222,"depth":624,"text":2843},1000000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao",{"title":5,"description":30},"wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","RBdr4UUHVHI_e5n-NQM2lfiXpXNPXf8Q7b3RXERx-ag",[3287,3288,3294,3300,3306,3312,3318,3324,3330,3336,3342,3348,3354,3360,3366,3372,3378,3384,3390,3396,3402,3408,3414,3420,3426],{"path":3282,"stem":3284,"title":5,"date":3274,"chapter":1209,"chapterSort":3273,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},{"path":3289,"stem":3290,"title":3291,"date":3274,"chapter":3292,"chapterSort":3293,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台","10",10000000,{"path":3295,"stem":3296,"title":3297,"date":3274,"chapter":3298,"chapterSort":3299,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":3301,"stem":3302,"title":3303,"date":3274,"chapter":3304,"chapterSort":3305,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":3307,"stem":3308,"title":3309,"date":3274,"chapter":3310,"chapterSort":3311,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":3313,"stem":3314,"title":3315,"date":3274,"chapter":3316,"chapterSort":3317,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":3319,"stem":3320,"title":3321,"date":3274,"chapter":3322,"chapterSort":3323,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":3325,"stem":3326,"title":3327,"date":3274,"chapter":3328,"chapterSort":3329,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":3331,"stem":3332,"title":3333,"date":3274,"chapter":3334,"chapterSort":3335,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":3337,"stem":3338,"title":3339,"date":3274,"chapter":3340,"chapterSort":3341,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":3343,"stem":3344,"title":3345,"date":3274,"chapter":3346,"chapterSort":3347,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":3349,"stem":3350,"title":3351,"date":3274,"chapter":3352,"chapterSort":3353,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":3355,"stem":3356,"title":3357,"date":3274,"chapter":3358,"chapterSort":3359,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":3361,"stem":3362,"title":3363,"date":3274,"chapter":3364,"chapterSort":3365,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":3367,"stem":3368,"title":3369,"date":3274,"chapter":3370,"chapterSort":3371,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":3373,"stem":3374,"title":3375,"date":3274,"chapter":3376,"chapterSort":3377,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作","2",2000000,{"path":3379,"stem":3380,"title":3381,"date":3274,"chapter":3382,"chapterSort":3383,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":3385,"stem":3386,"title":3387,"date":3274,"chapter":3388,"chapterSort":3389,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":3391,"stem":3392,"title":3393,"date":3274,"chapter":3394,"chapterSort":3395,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":3397,"stem":3398,"title":3399,"date":3274,"chapter":3400,"chapterSort":3401,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":3403,"stem":3404,"title":3405,"date":3274,"chapter":3406,"chapterSort":3407,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":3409,"stem":3410,"title":3411,"date":3274,"chapter":3412,"chapterSort":3413,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":3415,"stem":3416,"title":3417,"date":3274,"chapter":3418,"chapterSort":3419,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":3421,"stem":3422,"title":3423,"date":3274,"chapter":3424,"chapterSort":3425,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":3279},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":3276,"stem":3427,"title":3428,"date":3274,"chapter":3280,"chapterSort":3429,"docKey":3275,"docRoot":3276,"docTitle":3277,"isWikiDoc":620,"isWikiIndex":620},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560328678]