[{"data":1,"prerenderedAt":4036},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":3668,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":4020,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao":4035},{"id":4,"title":5,"body":6,"canonicalPath":3649,"chapter":3650,"chapterSort":3651,"date":3652,"description":29,"docI18nKey":3653,"docKey":3654,"docRoot":3655,"docTitle":3656,"extension":3657,"i18nKey":3658,"isBlogPost":3659,"isWikiDoc":597,"isWikiIndex":3659,"layout":3660,"legacyPath":3660,"locale":3661,"localeSlug":3662,"meta":3663,"navigation":597,"path":3649,"seo":3664,"sourcePath":3665,"sourceStem":3658,"stem":3666,"wikiDepth":392,"__hash__":3667},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍.md","Introduction to ROS2",{"type":7,"value":8,"toc":3639},"minimark",[9,13,17,20,24,34,38,43,46,54,61,64,70,78,81,85,97,104,114,121,127,134,140,147,154,160,167,173,177,186,189,197,200,203,210,217,224,229,234,239,242,247,251,254,259,262,270,273,281,285,288,293,296,301,306,309,317,324,329,335,338,343,346,354,359,368,375,378,381,396,401,405,408,413,416,421,425,428,433,436,468,471,476,479,505,510,514,523,527,531,536,539,544,547,552,555,560,565,576,627,632,635,640,805,815,818,1579,1582,1587,1594,1612,1616,1622,1626,1631,1633,1638,1641,1646,1649,1654,1658,1746,1751,1756,1759,1762,1765,1771,1776,1779,1863,1868,1873,1878,1994,1999,2004,2006,2023,2028,2033,2038,2041,2047,2052,2057,2126,2131,2136,2139,2173,2178,2183,2190,2205,2208,2213,2216,2221,2226,2232,2237,2240,2248,2250,2255,2288,2292,2308,2312,2318,2322,2329,2333,2336,2339,2342,2349,2353,2356,2359,2362,2365,2368,2371,2374,2492,2532,2535,2541,2546,2550,2746,2750,2753,2758,2773,2778,2781,2786,2789,2794,2799,2810,2817,2822,2825,2830,2837,2842,2845,2899,2902,2907,2910,2913,2986,2989,2992,2995,3016,3021,3024,3029,3032,3060,3063,3068,3071,3111,3116,3118,3121,3155,3158,3163,3165,3168,3174,3179,3183,3186,3189,3193,3198,3208,3213,3220,3225,3228,3268,3273,3278,3284,3289,3322,3327,3330,3345,3348,3399,3404,3408,3412,3475,3489,3493,3496,3515,3518,3522,3525,3530,3533,3536,3541,3545,3548,3551,3581,3584,3587,3592,3595,3599,3606,3635],[10,11,5],"h3",{"id":12},"introduction-to-ros2",[14,15,16],"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.",[14,18,19],{},"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, along with powerful development tools, ROS provides everything you need for your next robotics project. And it's all open source.",[10,21,23],{"id":22},"ros2-framework","ROS2 framework",[14,25,26,31],{},[27,28],"img",{"alt":29,"src":30},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image3.webp",[27,32],{"alt":29,"src":33},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image4.webp",[10,35,37],{"id":36},"ros2-references","ROS2 References",[39,40,42],"h4",{"id":41},"official-references","Official references",[14,44,45],{},"Since there are too few ROS2 reference documents, many tutorials still need to be viewed on the official ROS2 website:",[14,47,48],{},[49,50,51],"a",{"href":51,"rel":52},"https://www.ros.org/",[53],"nofollow",[39,55,57],{"id":56},"recommended-video-resources-and-supporting-documentation",[58,59,60],"strong",{},"Recommended Video Resources and Supporting Documentation",[14,62,63],{},"I highly recommend the following resources and videos.",[14,65,66],{},[49,67,68],{"href":68,"rel":69},"https://www.bilibili.com/video/BV1VB4y137ys",[53],[14,71,72,73],{},"Zhao Xuzuo's original supporting materials: ",[49,74,77],{"href":75,"rel":76},"https://sdutvincirobot.feishu.cn/file/GQgvbWU4UoKhbxx8DjHc9nQ1nWf",[53],"ROS2 Theory and Practice - Zhao Xuzuo \u003CPassword: qinghuamengshi>.pdf",[14,79,80],{},"Unable to display this content outside of Feishu documents for now.",[10,82,84],{"id":83},"knowledge-reserves-needed-to-learn-ros2","Knowledge reserves needed to learn ROS2",[86,87,88],"ol",{},[89,90,91,92],"li",{},"What knowledge is needed?",[86,93,94],{},[89,95,96],{},"Linux Basic Operations and Shell Scripting Language",[14,98,99],{},[49,100,103],{"href":101,"rel":102},"https://sdutvincirobot.feishu.cn/docx/ZD0bd33RRovEoIxeBzncdmQEnSg",[53],"Basic Linux Tutorial",[105,106,111],"pre",{"className":107,"code":109,"language":110},[108],"language-text","https://www.runoob.com/linux/linux-tutorial.html\n\n4.  Basic usage of CMake\n","text",[112,113,109],"code",{"__ignoreMap":29},[14,115,116],{},[49,117,120],{"href":118,"rel":119},"https://sdutvincirobot.feishu.cn/docx/ANgFdRtvKoCcKDxZ2ehc5Rocnwh",[53],"Linux C++ Compilation Environment Setup",[105,122,125],{"className":123,"code":124,"language":110},[108],"6.  Git basic operations\n",[112,126,124],{"__ignoreMap":29},[14,128,129],{},[49,130,133],{"href":131,"rel":132},"https://sdutvincirobot.feishu.cn/docx/B7arde6u0ob5tsxk5QOcFLG7nYd",[53],"Vinci Robotics Team Git Getting Started Tutorial",[105,135,138],{"className":136,"code":137,"language":110},[108],"8.  C/C++ language\n",[112,139,137],{"__ignoreMap":29},[14,141,142],{},[49,143,146],{"href":144,"rel":145},"https://sdutvincirobot.feishu.cn/docx/XfSud40MgoxZkQxup0acTf6Znwb",[53],"Vinci Robot Team Electrical Control Group Beginner's Guide",[14,148,149],{},[49,150,153],{"href":151,"rel":152},"https://sdutvincirobot.feishu.cn/docx/N0GAdx6IDoqnRnx1q0TcX1Wfnvc",[53],"Vinci Robotics Team C/C++ Resources",[105,155,158],{"className":156,"code":157,"language":110},[108],"11.  Python 3 language\n",[112,159,157],{"__ignoreMap":29},[14,161,162],{},[49,163,166],{"href":164,"rel":165},"https://sdutvincirobot.feishu.cn/wiki/QZL8wLeewiTmvfkczMyccAdVn0c",[53],"Vinci Robotics Team Python3 Tutorial",[105,168,171],{"className":169,"code":170,"language":110},[108],"https://www.runoob.com/python3/python3-tutorial.html\n\n14.  XML language\n\nhttps://www.runoob.com/xml/xml-tutorial.html\n\n16.  YAML language\n\nhttp://www.noobyard.com/article/p-saghdsms-mn.html\n",[112,172,170],{"__ignoreMap":29},[10,174,176],{"id":175},"install-ros2","Install ROS2",[14,178,179,180,185],{},"For ROS1 installation, please refer to the ",[49,181,184],{"href":182,"rel":183},"https://sdutvincirobot.feishu.cn/wiki/W976wTlonibALVkmfIhcdUKYnUV",[53],"Robot Operating System Tutorial",".",[14,187,188],{},"** It is recommended to use Kubuntu 24.04 LTS **\n** It is recommended to learn the ROS2 Jazzy version. This tutorial will be based on ROS2 Jazzy **",[39,190,192,193,196],{"id":191},"installing-ros2-from-binary-packages-using-kubuntu-jammy-2204-with-ros-humble-as-an-example","Installing ROS2 from Binary Packages (Using Kubuntu Jammy 22.04 with ",[58,194,195],{},"ROS Humble"," as an Example)",[14,198,199],{},"Note:",[14,201,202],{},"As of December 2024, it is strongly recommended that if you are using ROS2, you must use ROS Humble and avoid ROS Jazzy. There are some differences, especially with Gazebo, which has almost no tutorials available.",[14,204,205,206],{},"For Ubuntu Jammy 22.04 (LTS), please install ROS Humble (LTS). Installation guide website: ",[49,207,208],{"href":208,"rel":209},"https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html",[53],[14,211,212,213],{},"For Ubuntu Noble 24.04 (LTS), please install ROS Jazzy (LTS). Installation guide website: ",[49,214,215],{"href":215,"rel":216},"https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html",[53],[14,218,219,220],{},"ROS1 and ROS2 versions and their supported distributions: ",[49,221,222],{"href":222,"rel":223},"https://www.ros.org/reps/rep-2000.html",[53],[225,226,228],"h5",{"id":227},"go-to-the-ros-official-website","Go to the ROS official website",[14,230,231],{},[27,232],{"alt":29,"src":233},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image5.webp",[14,235,236],{},[27,237],{"alt":29,"src":238},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image6.webp",[14,240,241],{},"Be sure to install the LTS version of ROS2.",[14,243,244],{},[27,245],{"alt":29,"src":246},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image7.webp",[225,248,250],{"id":249},"preparations-before-installing-ros2","Preparations before installing ROS2",[14,252,253],{},"Install the LTS version of ROS2 by clicking to use the Debian package manager to install the ROS2 binary files.",[14,255,256],{},[27,257],{"alt":29,"src":258},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image8.webp",[14,260,261],{},"Enter the following command in the terminal according to the ROS2 official website tutorial:",[14,263,264,267],{},[27,265],{"alt":29,"src":266},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image9.webp",[27,268],{"alt":29,"src":269},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image10.webp",[14,271,272],{},"Still enter the following command to start the Ubuntu Universe Repo.",[14,274,275,278],{},[27,276],{"alt":29,"src":277},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image11.webp",[27,279],{"alt":29,"src":280},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image12.webp",[225,282,284],{"id":283},"switch-source-domestic-mirror","Switch source (domestic mirror)",[14,286,287],{},"This is the official source, which downloads ROS2 binary files from a foreign server. It has network requirements, so we need to change it to a domestic source.",[14,289,290],{},[27,291],{"alt":29,"src":292},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image13.webp",[14,294,295],{},"Search Baidu for the Beijing Foreign Studies University mirror source (personally tested, the fastest source in the north).",[14,297,298],{},[27,299],{"alt":29,"src":300},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image14.webp",[14,302,303],{},[27,304],{"alt":29,"src":305},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image15.webp",[14,307,308],{},"Find ROS2, then check the boxes for sudo and https, and select the correct Linux distribution. Before running this command, you might encounter permission issues; you can look ahead to see how to run all commands with root privileges.",[14,310,311,314],{},[27,312],{"alt":29,"src":313},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image16.webp",[27,315],{"alt":29,"src":316},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image17.webp",[14,318,319,320,323],{},"First, enter ",[112,321,322],{},"sudo passwd"," to set the root password (this is necessary for Ubuntu-based distributions) (for Debian, Fedora, and other distributions, the root password was already set during installation, so this step is not needed).",[14,325,326],{},[27,327],{"alt":29,"src":328},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image18.webp",[105,330,333],{"className":331,"code":332,"language":110},[108],"sudo passwd\n\nsu -\n",[112,334,332],{"__ignoreMap":29},[14,336,337],{},"Then, under administrator privileges",[14,339,340],{},[27,341],{"alt":29,"src":342},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image19.webp",[14,344,345],{},"Copy, paste, and run each line.",[14,347,348,351],{},[27,349],{"alt":29,"src":350},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image20.webp",[27,352],{"alt":29,"src":353},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image21.webp",[14,355,356],{},[27,357],{"alt":29,"src":358},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image22.webp",[14,360,361,362,367],{},"If the key download above gets stuck, it's likely due to GitHub being unreliable again — a very common issue. You can try using a proxy or VPN (",[49,363,366],{"href":364,"rel":365},"https://sdutvincirobot.feishu.cn/wiki/HnjswlR8NiVjVgkbn6hcAlwzn2e",[53],"proxy tutorial",") to resolve it. If that still doesn't work, you can modify the hosts file by following the tutorial below.",[14,369,370],{},[49,371,374],{"href":372,"rel":373},"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",[14,376,377],{},"After successfully downloading the key, proceed with the next steps.",[14,379,380],{},"Enter exit to exit root mode.",[105,382,386],{"className":383,"code":384,"language":385,"meta":29,"style":29},"language-bash shiki shiki-themes github-light github-dark","exit\n","bash",[112,387,388],{"__ignoreMap":29},[389,390,393],"span",{"class":391,"line":392},"line",1,[389,394,384],{"class":395},"sj4cs",[14,397,398],{},[27,399],{"alt":29,"src":400},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image23.webp",[225,402,404],{"id":403},"install-ros2-via-apt","Install ROS2 via apt",[14,406,407],{},"Run all of the following commands in the terminal, which are inside the red box.",[14,409,410],{},[27,411],{"alt":29,"src":412},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image24.webp",[14,414,415],{},"The domestic mirror download is still very fast.",[14,417,418],{},[27,419],{"alt":29,"src":420},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image25.webp",[225,422,424],{"id":423},"ros2-basic-environment-variable-configuration","ROS2 basic environment variable configuration",[14,426,427],{},"Copy this line",[14,429,430],{},[27,431],{"alt":29,"src":432},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image26.webp",[14,434,435],{},"Enter the following command",[105,437,439],{"className":383,"code":438,"language":385,"meta":29,"style":29},"sudo apt-get install vim\nsudo vim ~/.bashrc\n",[112,440,441,457],{"__ignoreMap":29},[389,442,443,447,451,454],{"class":391,"line":392},[389,444,446],{"class":445},"sScJk","sudo",[389,448,450],{"class":449},"sZZnC"," apt-get",[389,452,453],{"class":449}," install",[389,455,456],{"class":449}," vim\n",[389,458,460,462,465],{"class":391,"line":459},2,[389,461,446],{"class":445},[389,463,464],{"class":449}," vim",[389,466,467],{"class":449}," ~/.bashrc\n",[14,469,470],{},"At the very bottom, add this line (if you don't know how to use vim, please look it up on Baidu).",[14,472,473],{},[27,474],{"alt":29,"src":475},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image27.webp",[14,477,478],{},"Refresh the environment variables of the current terminal.",[105,480,482],{"className":383,"code":481,"language":385,"meta":29,"style":29},"echo 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc\nsource ~/.bashrc\n",[112,483,484,498],{"__ignoreMap":29},[389,485,486,489,492,496],{"class":391,"line":392},[389,487,488],{"class":395},"echo",[389,490,491],{"class":449}," 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml'",[389,493,495],{"class":494},"szBVR"," >>",[389,497,467],{"class":449},[389,499,500,503],{"class":391,"line":459},[389,501,502],{"class":395},"source",[389,504,467],{"class":449},[14,506,507],{},[27,508],{"alt":29,"src":509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image28.webp",[225,511,513],{"id":512},"test-ros2","Test ROS2",[14,515,516,517,522],{},"Please scroll down to the ",[58,518,519],{},[112,520,521],{},"测试ROS2"," section.",[39,524,526],{"id":525},"installing-ros2-from-source-more-difficult-for-ubuntu-just-use-the-simple-method-above","Installing ROS2 from source (more difficult; for Ubuntu, just use the simple method above.)",[225,528,530],{"id":529},"fedora-or-rocky","Fedora or Rocky",[14,532,533],{},[49,534,51],{"href":51,"rel":535},[53],[14,537,538],{},"Visit the official website and select the corresponding version, for example, I will choose ROS Jazzy here.",[14,540,541],{},[27,542],{"alt":29,"src":543},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image29.webp",[14,545,546],{},"Then choose to compile from source, find the corresponding distribution, for example, I'm using Fedora here.",[14,548,549],{},[27,550],{"alt":29,"src":551},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image30.webp",[14,553,554],{},"Then just follow the official tutorial.",[14,556,557],{},[27,558],{"alt":29,"src":559},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image31.webp",[86,561,562],{},[89,563,564],{},"Set the area",[14,566,567,568,571,572,575],{},"Make sure your locale supports ",[112,569,570],{},"UTF-8",". If you're in a minimal environment (like a Docker container), the locale might be something minimal like ",[112,573,574],{},"C",". We tested with the following settings. However, if you're using another locale that supports UTF-8, it should be fine.",[105,577,581],{"className":578,"code":579,"language":580,"meta":29,"style":29},"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",[112,582,583,593,599,605,614,619],{"__ignoreMap":29},[389,584,585,589],{"class":391,"line":392},[389,586,588],{"class":587},"sVt8B","locale  ",[389,590,592],{"class":591},"sJ8bj","# check for UTF-8\n",[389,594,595],{"class":391,"line":459},[389,596,598],{"emptyLinePlaceholder":597},true,"\n",[389,600,602],{"class":391,"line":601},3,[389,603,604],{"class":587},"sudo dnf install langpacks-en glibc-langpack-en\n",[389,606,608,611],{"class":391,"line":607},4,[389,609,610],{"class":494},"export",[389,612,613],{"class":587}," LANG=en_US.UTF-8\n",[389,615,617],{"class":391,"line":616},5,[389,618,598],{"emptyLinePlaceholder":597},[389,620,622,624],{"class":391,"line":621},6,[389,623,588],{"class":587},[389,625,626],{"class":591},"# verify settings\n",[86,628,629],{"start":459},[89,630,631],{},"Enable the required repositories",[14,633,634],{},"Fedora does not require enabling additional repositories, while RHEL does.",[86,636,637],{"start":601},[89,638,639],{},"Install development tools",[105,641,643],{"className":578,"code":642,"language":580,"meta":29,"style":29},"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",[112,644,645,650,655,660,665,670,675,681,687,693,699,705,711,717,723,729,735,741,747,753,759,764,770,775,781,787,793,799],{"__ignoreMap":29},[389,646,647],{"class":391,"line":392},[389,648,649],{"class":587},"sudo dnf install -y \\\n",[389,651,652],{"class":391,"line":459},[389,653,654],{"class":587},"  cmake \\\n",[389,656,657],{"class":391,"line":601},[389,658,659],{"class":587},"  gcc-c++ \\\n",[389,661,662],{"class":391,"line":607},[389,663,664],{"class":587},"  git \\\n",[389,666,667],{"class":391,"line":616},[389,668,669],{"class":587},"  make \\\n",[389,671,672],{"class":391,"line":621},[389,673,674],{"class":587},"  patch \\\n",[389,676,678],{"class":391,"line":677},7,[389,679,680],{"class":587},"  python3-colcon-common-extensions \\\n",[389,682,684],{"class":391,"line":683},8,[389,685,686],{"class":587},"  python3-mypy \\\n",[389,688,690],{"class":391,"line":689},9,[389,691,692],{"class":587},"  python3-pip \\\n",[389,694,696],{"class":391,"line":695},10,[389,697,698],{"class":587},"  python3-pydocstyle \\\n",[389,700,702],{"class":391,"line":701},11,[389,703,704],{"class":587},"  python3-pytest \\\n",[389,706,708],{"class":391,"line":707},12,[389,709,710],{"class":587},"  python3-pytest-cov \\\n",[389,712,714],{"class":391,"line":713},13,[389,715,716],{"class":587},"  python3-pytest-mock \\\n",[389,718,720],{"class":391,"line":719},14,[389,721,722],{"class":587},"  python3-pytest-repeat \\\n",[389,724,726],{"class":391,"line":725},15,[389,727,728],{"class":587},"  python3-pytest-rerunfailures \\\n",[389,730,732],{"class":391,"line":731},16,[389,733,734],{"class":587},"  python3-pytest-runner \\\n",[389,736,738],{"class":391,"line":737},17,[389,739,740],{"class":587},"  python3-rosdep \\\n",[389,742,744],{"class":391,"line":743},18,[389,745,746],{"class":587},"  python3-setuptools \\\n",[389,748,750],{"class":391,"line":749},19,[389,751,752],{"class":587},"  python3-vcstool \\\n",[389,754,756],{"class":391,"line":755},20,[389,757,758],{"class":587},"  wget\n",[389,760,762],{"class":391,"line":761},21,[389,763,598],{"emptyLinePlaceholder":597},[389,765,767],{"class":391,"line":766},22,[389,768,769],{"class":591},"# install some pip packages needed for testing and\n",[389,771,773],{"class":391,"line":772},23,[389,774,598],{"emptyLinePlaceholder":597},[389,776,778],{"class":391,"line":777},24,[389,779,780],{"class":591},"# not available as RPMs\n",[389,782,784],{"class":391,"line":783},25,[389,785,786],{"class":587},"python3 -m pip install -U --user \\\n",[389,788,790],{"class":391,"line":789},26,[389,791,792],{"class":587},"  flake8-blind-except==0.1.1 \\\n",[389,794,796],{"class":391,"line":795},27,[389,797,798],{"class":587},"  flake8-class-newline \\\n",[389,800,802],{"class":391,"line":801},28,[389,803,804],{"class":587},"  flake8-deprecated\n",[86,806,807],{"start":607},[89,808,809,810],{},"Build ROS2",[86,811,812],{},[89,813,814],{},"Get the ROS2 source code",[14,816,817],{},"Find a folder to store ROS2. It is recommended to look in the /home partition, then open a terminal in this folder.",[105,819,821],{"className":578,"code":820,"language":580,"meta":29,"style":29},"mkdir -p ./ros2_jazzy/src\ncd ./ros2_jazzy\nvcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src\n```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image32.webp)\n\n5.  Update the system\n\nROS 2 software packages are built on frequently updated Red Hat-based systems. It is always recommended to ensure your system is up to date before installing new software packages.\n\n```cmake\nsudo dnf upgrade\n```\n8.  Initialize and change the rosdep source.\n\nhttps://mirrors.bfsu.edu.cn/help/rosdistro/\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image33.webp)\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image34.webp)\n\n```cmake\n\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```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image35.webp)\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image36.webp)\n\n15.  Install dependencies via rosdep\n\n```cmake\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```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image37.webp)\n\nIf you encounter the error above, install the package using pip3.\n\n```cmake\nsudo pip3 install flake8-docstrings\n```\n\nThen, use the following command to ignore `flake8-docstrings`.\n\n```cmake\nrosdep install --from-paths src --ignore-src -y \\\n--skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n```\n\nOnce it shows success, that's all.\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image38.webp)\n\n24.  Environment setup (not needed for non-Red Hat distributions)\n\nIf you are using a Red Hat-based system, you need the following configuration.\n\nYou can temporarily define these macros using the following commands.\n\n```bash\nexport 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```\n\n|Variable name|Sample value|Usage|\n|:---|:---|:---|\n|RPM_PACKAGE_NAME|qt_gui_cpp|Define the RPM package name|\n|RPM_PACKAGE_VERSION|1.0.0|Define the RPM package version|\n|RPM_PACKAGE_RELEASE|1|Define the RPM package release number|\n|RPM_ARCH|x86_64 or arm64|Define the target system architecture|\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image39.webp)\n\n30.  Build the source code using colcon.\n\n```cmake\ncolcon build --symlink-install\n```\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image40.webp)\n\nOnce the build is complete, the image below shows what it looks like when it finishes without errors.\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image41.webp)\n\n5.  Configure the basic environment\n\nFind the folder below and copy its path. For example, mine is `~/UserFloder/Applications/ros2_jazzy`.\n\n![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image42.webp)\n\nUse vim to modify the bash environment\n\n```cmake\nvim ~/.bashrc\n",[112,822,823,828,833,838,843,847,852,856,864,868,885,889,894,899,903,914,918,923,927,932,936,941,945,949,953,958,969,984,988,994,1000,1005,1011,1017,1022,1028,1034,1039,1044,1050,1055,1061,1066,1072,1077,1082,1090,1095,1110,1115,1120,1126,1131,1140,1145,1150,1156,1161,1166,1178,1183,1188,1198,1207,1212,1217,1223,1228,1234,1239,1257,1262,1275,1280,1292,1297,1303,1314,1322,1330,1338,1343,1348,1366,1372,1383,1394,1400,1421,1426,1432,1437,1443,1448,1453,1459,1464,1469,1475,1480,1486,1491,1497,1502,1511,1516,1539,1544,1550,1555,1563,1568,1573],{"__ignoreMap":29},[389,824,825],{"class":391,"line":392},[389,826,827],{"class":587},"mkdir -p ./ros2_jazzy/src\n",[389,829,830],{"class":391,"line":459},[389,831,832],{"class":587},"cd ./ros2_jazzy\n",[389,834,835],{"class":391,"line":601},[389,836,837],{"class":587},"vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src\n",[389,839,840],{"class":391,"line":607},[389,841,842],{"class":587},"```\n",[389,844,845],{"class":391,"line":616},[389,846,598],{"emptyLinePlaceholder":597},[389,848,849],{"class":391,"line":621},[389,850,851],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image32.webp)\n",[389,853,854],{"class":391,"line":677},[389,855,598],{"emptyLinePlaceholder":597},[389,857,858,861],{"class":391,"line":683},[389,859,860],{"class":587},"5.  Update the ",[389,862,863],{"class":395},"system\n",[389,865,866],{"class":391,"line":689},[389,867,598],{"emptyLinePlaceholder":597},[389,869,870,873,876,879,882],{"class":391,"line":695},[389,871,872],{"class":587},"ROS 2 software packages are built ",[389,874,875],{"class":494},"on",[389,877,878],{"class":587}," frequently updated Red Hat-based systems. It is always recommended to ensure your ",[389,880,881],{"class":395},"system",[389,883,884],{"class":587}," is up to date before installing new software packages.\n",[389,886,887],{"class":391,"line":701},[389,888,598],{"emptyLinePlaceholder":597},[389,890,891],{"class":391,"line":707},[389,892,893],{"class":587},"```cmake\n",[389,895,896],{"class":391,"line":713},[389,897,898],{"class":587},"sudo dnf upgrade\n",[389,900,901],{"class":391,"line":719},[389,902,842],{"class":587},[389,904,905,908,911],{"class":391,"line":725},[389,906,907],{"class":587},"8.  Initialize ",[389,909,910],{"class":494},"and",[389,912,913],{"class":587}," change the rosdep source.\n",[389,915,916],{"class":391,"line":731},[389,917,598],{"emptyLinePlaceholder":597},[389,919,920],{"class":391,"line":737},[389,921,922],{"class":587},"https://mirrors.bfsu.edu.cn/help/rosdistro/\n",[389,924,925],{"class":391,"line":743},[389,926,598],{"emptyLinePlaceholder":597},[389,928,929],{"class":391,"line":749},[389,930,931],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image33.webp)\n",[389,933,934],{"class":391,"line":755},[389,935,598],{"emptyLinePlaceholder":597},[389,937,938],{"class":391,"line":761},[389,939,940],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image34.webp)\n",[389,942,943],{"class":391,"line":766},[389,944,598],{"emptyLinePlaceholder":597},[389,946,947],{"class":391,"line":772},[389,948,893],{"class":587},[389,950,951],{"class":391,"line":777},[389,952,598],{"emptyLinePlaceholder":597},[389,954,955],{"class":391,"line":783},[389,956,957],{"class":591},"# 手动模拟 rosdep init\n",[389,959,960,963,966],{"class":391,"line":789},[389,961,962],{"class":587},"sudo mkdir -p /etc/ros/rosdep/",[389,964,965],{"class":445},"sources",[389,967,968],{"class":587},".list.d/\n",[389,970,971,974,976,979,981],{"class":391,"line":795},[389,972,973],{"class":587},"sudo curl -o /etc/ros/rosdep/",[389,975,965],{"class":445},[389,977,978],{"class":587},".list.d/20-default.list -L https://mirrors.bfsu.edu.cn/github-raw/ros/rosdistro/master/rosdep/",[389,980,965],{"class":445},[389,982,983],{"class":587},".list.d/20-default.list\n",[389,985,986],{"class":391,"line":801},[389,987,598],{"emptyLinePlaceholder":597},[389,989,991],{"class":391,"line":990},29,[389,992,993],{"class":591},"# 加入环境\n",[389,995,997],{"class":391,"line":996},30,[389,998,999],{"class":587},"echo 'export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc\n",[389,1001,1003],{"class":391,"line":1002},31,[389,1004,598],{"emptyLinePlaceholder":597},[389,1006,1008],{"class":391,"line":1007},32,[389,1009,1010],{"class":591},"# 加载.bashrc\n",[389,1012,1014],{"class":391,"line":1013},33,[389,1015,1016],{"class":587},"source ~/.bashrc\n",[389,1018,1020],{"class":391,"line":1019},34,[389,1021,598],{"emptyLinePlaceholder":597},[389,1023,1025],{"class":391,"line":1024},35,[389,1026,1027],{"class":591},"# 更新rosdep\n",[389,1029,1031],{"class":391,"line":1030},36,[389,1032,1033],{"class":587},"rosdep update\n",[389,1035,1037],{"class":391,"line":1036},37,[389,1038,842],{"class":587},[389,1040,1042],{"class":391,"line":1041},38,[389,1043,598],{"emptyLinePlaceholder":597},[389,1045,1047],{"class":391,"line":1046},39,[389,1048,1049],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image35.webp)\n",[389,1051,1053],{"class":391,"line":1052},40,[389,1054,598],{"emptyLinePlaceholder":597},[389,1056,1058],{"class":391,"line":1057},41,[389,1059,1060],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image36.webp)\n",[389,1062,1064],{"class":391,"line":1063},42,[389,1065,598],{"emptyLinePlaceholder":597},[389,1067,1069],{"class":391,"line":1068},43,[389,1070,1071],{"class":587},"15.  Install dependencies via rosdep\n",[389,1073,1075],{"class":391,"line":1074},44,[389,1076,598],{"emptyLinePlaceholder":597},[389,1078,1080],{"class":391,"line":1079},45,[389,1081,893],{"class":587},[389,1083,1085,1087],{"class":391,"line":1084},46,[389,1086,610],{"class":494},[389,1088,1089],{"class":587}," ROS_PYTHON_VERSION=3\n",[389,1091,1093],{"class":391,"line":1092},47,[389,1094,598],{"emptyLinePlaceholder":597},[389,1096,1098,1101,1104,1107],{"class":391,"line":1097},48,[389,1099,1100],{"class":587},"rosdep install --from-",[389,1102,1103],{"class":494},"paths",[389,1105,1106],{"class":587}," src --ignore-src -y --skip-keys ",[389,1108,1109],{"class":449},"\"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[389,1111,1113],{"class":391,"line":1112},49,[389,1114,842],{"class":587},[389,1116,1118],{"class":391,"line":1117},50,[389,1119,598],{"emptyLinePlaceholder":597},[389,1121,1123],{"class":391,"line":1122},51,[389,1124,1125],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image37.webp)\n",[389,1127,1129],{"class":391,"line":1128},52,[389,1130,598],{"emptyLinePlaceholder":597},[389,1132,1134,1137],{"class":391,"line":1133},53,[389,1135,1136],{"class":494},"If",[389,1138,1139],{"class":587}," you encounter the error above, install the package using pip3.\n",[389,1141,1143],{"class":391,"line":1142},54,[389,1144,598],{"emptyLinePlaceholder":597},[389,1146,1148],{"class":391,"line":1147},55,[389,1149,893],{"class":587},[389,1151,1153],{"class":391,"line":1152},56,[389,1154,1155],{"class":587},"sudo pip3 install flake8-docstrings\n",[389,1157,1159],{"class":391,"line":1158},57,[389,1160,842],{"class":587},[389,1162,1164],{"class":391,"line":1163},58,[389,1165,598],{"emptyLinePlaceholder":597},[389,1167,1169,1172,1175],{"class":391,"line":1168},59,[389,1170,1171],{"class":587},"Then, use the following ",[389,1173,1174],{"class":494},"command",[389,1176,1177],{"class":587}," to ignore `flake8-docstrings`.\n",[389,1179,1181],{"class":391,"line":1180},60,[389,1182,598],{"emptyLinePlaceholder":597},[389,1184,1186],{"class":391,"line":1185},61,[389,1187,893],{"class":587},[389,1189,1191,1193,1195],{"class":391,"line":1190},62,[389,1192,1100],{"class":587},[389,1194,1103],{"class":494},[389,1196,1197],{"class":587}," src --ignore-src -y \\\n",[389,1199,1201,1204],{"class":391,"line":1200},63,[389,1202,1203],{"class":587},"--skip-keys ",[389,1205,1206],{"class":449},"\"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[389,1208,1210],{"class":391,"line":1209},64,[389,1211,842],{"class":587},[389,1213,1215],{"class":391,"line":1214},65,[389,1216,598],{"emptyLinePlaceholder":597},[389,1218,1220],{"class":391,"line":1219},66,[389,1221,1222],{"class":587},"Once it shows success, that's all.\n",[389,1224,1226],{"class":391,"line":1225},67,[389,1227,598],{"emptyLinePlaceholder":597},[389,1229,1231],{"class":391,"line":1230},68,[389,1232,1233],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image38.webp)\n",[389,1235,1237],{"class":391,"line":1236},69,[389,1238,598],{"emptyLinePlaceholder":597},[389,1240,1242,1245,1248,1251,1254],{"class":391,"line":1241},70,[389,1243,1244],{"class":587},"24.  ",[389,1246,1247],{"class":445},"Environment",[389,1249,1250],{"class":587}," setup (",[389,1252,1253],{"class":494},"not",[389,1255,1256],{"class":587}," needed for non-Red Hat distributions)\n",[389,1258,1260],{"class":391,"line":1259},71,[389,1261,598],{"emptyLinePlaceholder":597},[389,1263,1265,1267,1270,1272],{"class":391,"line":1264},72,[389,1266,1136],{"class":494},[389,1268,1269],{"class":587}," you are using a Red Hat-based ",[389,1271,881],{"class":395},[389,1273,1274],{"class":587},", you need the following configuration.\n",[389,1276,1278],{"class":391,"line":1277},73,[389,1279,598],{"emptyLinePlaceholder":597},[389,1281,1283,1286,1289],{"class":391,"line":1282},74,[389,1284,1285],{"class":587},"You can temporarily define these ",[389,1287,1288],{"class":445},"macros",[389,1290,1291],{"class":587}," using the following commands.\n",[389,1293,1295],{"class":391,"line":1294},75,[389,1296,598],{"emptyLinePlaceholder":597},[389,1298,1300],{"class":391,"line":1299},76,[389,1301,1302],{"class":587},"```bash\n",[389,1304,1306,1308,1311],{"class":391,"line":1305},77,[389,1307,610],{"class":494},[389,1309,1310],{"class":587}," RPM_PACKAGE_NAME=qt_gui_cpp   ",[389,1312,1313],{"class":591},"# 根据包名调整（如 ros_\u003Cpackage>）\n",[389,1315,1317,1319],{"class":391,"line":1316},78,[389,1318,610],{"class":494},[389,1320,1321],{"class":587}," RPM_PACKAGE_VERSION=1.0.0\n",[389,1323,1325,1327],{"class":391,"line":1324},79,[389,1326,610],{"class":494},[389,1328,1329],{"class":587}," RPM_PACKAGE_RELEASE=1\n",[389,1331,1333,1335],{"class":391,"line":1332},80,[389,1334,610],{"class":494},[389,1336,1337],{"class":587}," RPM_ARCH=$(uname -m)\n",[389,1339,1341],{"class":391,"line":1340},81,[389,1342,842],{"class":587},[389,1344,1346],{"class":391,"line":1345},82,[389,1347,598],{"emptyLinePlaceholder":597},[389,1349,1351,1354,1357,1360,1363],{"class":391,"line":1350},83,[389,1352,1353],{"class":587},"|Variable ",[389,1355,1356],{"class":494},"name",[389,1358,1359],{"class":587},"|Sample ",[389,1361,1362],{"class":445},"value",[389,1364,1365],{"class":587},"|Usage|\n",[389,1367,1369],{"class":391,"line":1368},84,[389,1370,1371],{"class":587},"|:---|:---|:---|\n",[389,1373,1375,1378,1380],{"class":391,"line":1374},85,[389,1376,1377],{"class":587},"|RPM_PACKAGE_NAME|qt_gui_cpp|Define the RPM package ",[389,1379,1356],{"class":494},[389,1381,1382],{"class":587},"|\n",[389,1384,1386,1389,1392],{"class":391,"line":1385},86,[389,1387,1388],{"class":587},"|RPM_PACKAGE_VERSION|1.0.0|Define the RPM package ",[389,1390,1391],{"class":445},"version",[389,1393,1382],{"class":587},[389,1395,1397],{"class":391,"line":1396},87,[389,1398,1399],{"class":587},"|RPM_PACKAGE_RELEASE|1|Define the RPM package release number|\n",[389,1401,1403,1406,1409,1412,1415,1418],{"class":391,"line":1402},88,[389,1404,1405],{"class":587},"|RPM_ARCH|x86_64 ",[389,1407,1408],{"class":494},"or",[389,1410,1411],{"class":587}," arm64|Define the ",[389,1413,1414],{"class":494},"target",[389,1416,1417],{"class":395}," system",[389,1419,1420],{"class":587}," architecture|\n",[389,1422,1424],{"class":391,"line":1423},89,[389,1425,598],{"emptyLinePlaceholder":597},[389,1427,1429],{"class":391,"line":1428},90,[389,1430,1431],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image39.webp)\n",[389,1433,1435],{"class":391,"line":1434},91,[389,1436,598],{"emptyLinePlaceholder":597},[389,1438,1440],{"class":391,"line":1439},92,[389,1441,1442],{"class":587},"30.  Build the source code using colcon.\n",[389,1444,1446],{"class":391,"line":1445},93,[389,1447,598],{"emptyLinePlaceholder":597},[389,1449,1451],{"class":391,"line":1450},94,[389,1452,893],{"class":587},[389,1454,1456],{"class":391,"line":1455},95,[389,1457,1458],{"class":587},"colcon build --symlink-install\n",[389,1460,1462],{"class":391,"line":1461},96,[389,1463,842],{"class":587},[389,1465,1467],{"class":391,"line":1466},97,[389,1468,598],{"emptyLinePlaceholder":597},[389,1470,1472],{"class":391,"line":1471},98,[389,1473,1474],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image40.webp)\n",[389,1476,1478],{"class":391,"line":1477},99,[389,1479,598],{"emptyLinePlaceholder":597},[389,1481,1483],{"class":391,"line":1482},100,[389,1484,1485],{"class":587},"Once the build is complete, the image below shows what it looks like when it finishes without errors.\n",[389,1487,1489],{"class":391,"line":1488},101,[389,1490,598],{"emptyLinePlaceholder":597},[389,1492,1494],{"class":391,"line":1493},102,[389,1495,1496],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image41.webp)\n",[389,1498,1500],{"class":391,"line":1499},103,[389,1501,598],{"emptyLinePlaceholder":597},[389,1503,1505,1508],{"class":391,"line":1504},104,[389,1506,1507],{"class":587},"5.  Configure the basic ",[389,1509,1510],{"class":445},"environment\n",[389,1512,1514],{"class":391,"line":1513},105,[389,1515,598],{"emptyLinePlaceholder":597},[389,1517,1519,1522,1525,1528,1530,1533,1536],{"class":391,"line":1518},106,[389,1520,1521],{"class":587},"Find the ",[389,1523,1524],{"class":445},"folder",[389,1526,1527],{"class":587}," below ",[389,1529,910],{"class":494},[389,1531,1532],{"class":587}," copy its ",[389,1534,1535],{"class":494},"path",[389,1537,1538],{"class":587},". For example, mine is `~/UserFloder/Applications/ros2_jazzy`.\n",[389,1540,1542],{"class":391,"line":1541},107,[389,1543,598],{"emptyLinePlaceholder":597},[389,1545,1547],{"class":391,"line":1546},108,[389,1548,1549],{"class":587},"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image42.webp)\n",[389,1551,1553],{"class":391,"line":1552},109,[389,1554,598],{"emptyLinePlaceholder":597},[389,1556,1558,1561],{"class":391,"line":1557},110,[389,1559,1560],{"class":587},"Use vim to modify the bash ",[389,1562,1510],{"class":445},[389,1564,1566],{"class":391,"line":1565},111,[389,1567,598],{"emptyLinePlaceholder":597},[389,1569,1571],{"class":391,"line":1570},112,[389,1572,893],{"class":587},[389,1574,1576],{"class":391,"line":1575},113,[389,1577,1578],{"class":587},"vim ~/.bashrc\n",[14,1580,1581],{},"Use the Insert key for input.",[14,1583,1584],{},[27,1585],{"alt":29,"src":1586},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image43.webp",[14,1588,1589,1590,1593],{},"After adding these two lines, press ESC, then ",[112,1591,1592],{},":wq"," to save and exit.",[105,1595,1597],{"className":578,"code":1596,"language":580,"meta":29,"style":29},"\n# 刷新当前环境变量\nsource ~/.bashrc\n",[112,1598,1599,1603,1608],{"__ignoreMap":29},[389,1600,1601],{"class":391,"line":392},[389,1602,598],{"emptyLinePlaceholder":597},[389,1604,1605],{"class":391,"line":459},[389,1606,1607],{"class":591},"# 刷新当前环境变量\n",[389,1609,1610],{"class":391,"line":601},[389,1611,1016],{"class":587},[86,1613,1614],{"start":621},[89,1615,513],{},[14,1617,516,1618,522],{},[58,1619,1620],{},[112,1621,521],{},[225,1623,1625],{"id":1624},"debian","Debian",[14,1627,1628],{},[49,1629,51],{"href":51,"rel":1630},[53],[14,1632,538],{},[14,1634,1635],{},[27,1636],{"alt":29,"src":1637},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image44.webp",[14,1639,1640],{},"Then choose to compile from source, and find the corresponding distribution, for example, I'm using Debian here.",[14,1642,1643],{},[27,1644],{"alt":29,"src":1645},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image45.webp",[14,1647,1648],{},"Next, starting from the diagram below, follow the official tutorial step by step. However, there are a few points to note, which I will list here:",[14,1650,1651],{},[27,1652],{"alt":29,"src":1653},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image46.webp",[86,1655,1656],{},[89,1657,564],{},[105,1659,1661],{"className":383,"code":1660,"language":385,"meta":29,"style":29},"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",[112,1662,1663,1671,1675,1697,1710,1722,1735,1739],{"__ignoreMap":29},[389,1664,1665,1668],{"class":391,"line":392},[389,1666,1667],{"class":445},"locale",[389,1669,1670],{"class":591},"  # check for UTF-8\n",[389,1672,1673],{"class":391,"line":459},[389,1674,598],{"emptyLinePlaceholder":597},[389,1676,1677,1679,1682,1685,1688,1690,1692,1694],{"class":391,"line":601},[389,1678,446],{"class":445},[389,1680,1681],{"class":449}," apt",[389,1683,1684],{"class":449}," update",[389,1686,1687],{"class":587}," && ",[389,1689,446],{"class":445},[389,1691,1681],{"class":449},[389,1693,453],{"class":449},[389,1695,1696],{"class":449}," locales\n",[389,1698,1699,1701,1704,1707],{"class":391,"line":607},[389,1700,446],{"class":445},[389,1702,1703],{"class":449}," locale-gen",[389,1705,1706],{"class":449}," en_US",[389,1708,1709],{"class":449}," en_US.UTF-8\n",[389,1711,1712,1714,1717,1720],{"class":391,"line":616},[389,1713,446],{"class":445},[389,1715,1716],{"class":449}," update-locale",[389,1718,1719],{"class":449}," LC_ALL=en_US.UTF-8",[389,1721,613],{"class":449},[389,1723,1724,1726,1729,1732],{"class":391,"line":621},[389,1725,610],{"class":494},[389,1727,1728],{"class":587}," LANG",[389,1730,1731],{"class":494},"=",[389,1733,1734],{"class":587},"en_US.UTF-8\n",[389,1736,1737],{"class":391,"line":677},[389,1738,598],{"emptyLinePlaceholder":597},[389,1740,1741,1743],{"class":391,"line":683},[389,1742,1667],{"class":445},[389,1744,1745],{"class":591},"  # verify settings\n",[86,1747,1748],{"start":459},[89,1749,1750],{},"Change source",[14,1752,1753],{},[27,1754],{"alt":29,"src":1755},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image47.webp",[14,1757,1758],{},"The red part is what needs to be done on Ubuntu; we are using Debian, so it's not necessary.",[14,1760,1761],{},"For the blue section, we should not use the official source, as it is an overseas source. Let's replace it with a domestic source.",[14,1763,1764],{},"First, switch to the mirror source:",[14,1766,1767],{},[49,1768,1769],{"href":1769,"rel":1770},"https://mirrors.bfsu.edu.cn/help/ros2/",[53],[14,1772,1773],{},[27,1774],{"alt":29,"src":1775},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image48.webp",[14,1777,1778],{},"For example, I am using Debian 12:",[105,1780,1782],{"className":383,"code":1781,"language":385,"meta":29,"style":29},"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",[112,1783,1784,1798,1816,1820,1854],{"__ignoreMap":29},[389,1785,1786,1788,1790,1792,1795],{"class":391,"line":392},[389,1787,446],{"class":445},[389,1789,1681],{"class":449},[389,1791,453],{"class":449},[389,1793,1794],{"class":449}," curl",[389,1796,1797],{"class":449}," gnupg2\n",[389,1799,1800,1802,1804,1807,1810,1813],{"class":391,"line":459},[389,1801,446],{"class":445},[389,1803,1794],{"class":449},[389,1805,1806],{"class":395}," -sSL",[389,1808,1809],{"class":449}," https://raw.githubusercontent.com/ros/rosdistro/master/ros.key",[389,1811,1812],{"class":395},"  -o",[389,1814,1815],{"class":449}," /usr/share/keyrings/ros-archive-keyring.gpg\n",[389,1817,1818],{"class":391,"line":601},[389,1819,598],{"emptyLinePlaceholder":597},[389,1821,1822,1824,1827,1830,1833,1836,1839,1842,1845,1848,1851],{"class":391,"line":607},[389,1823,488],{"class":395},[389,1825,1826],{"class":449}," \"deb [arch=$(",[389,1828,1829],{"class":445},"dpkg",[389,1831,1832],{"class":395}," --print-architecture",[389,1834,1835],{"class":449},") signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.bfsu.edu.cn/ros2/ubuntu bookworm main\"",[389,1837,1838],{"class":494}," |",[389,1840,1841],{"class":445}," sudo",[389,1843,1844],{"class":449}," tee",[389,1846,1847],{"class":449}," /etc/apt/sources.list.d/ros2.list",[389,1849,1850],{"class":494}," >",[389,1852,1853],{"class":449}," /dev/null\n",[389,1855,1856,1858,1860],{"class":391,"line":616},[389,1857,446],{"class":445},[389,1859,1681],{"class":449},[389,1861,1862],{"class":449}," update\n",[14,1864,1865],{},[27,1866],{"alt":29,"src":1867},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image49.webp",[86,1869,1870],{"start":601},[89,1871,1872],{},"After successfully changing the source in the image above, install the ROS tools:",[14,1874,1875],{},[27,1876],{"alt":29,"src":1877},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image50.webp",[105,1879,1881],{"className":383,"code":1880,"language":385,"meta":29,"style":29},"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",[112,1882,1883,1905,1912,1919,1926,1933,1940,1947,1954,1961,1968,1975,1982,1989],{"__ignoreMap":29},[389,1884,1885,1887,1889,1891,1893,1895,1897,1899,1902],{"class":391,"line":392},[389,1886,446],{"class":445},[389,1888,1681],{"class":449},[389,1890,1684],{"class":449},[389,1892,1687],{"class":587},[389,1894,446],{"class":445},[389,1896,1681],{"class":449},[389,1898,453],{"class":449},[389,1900,1901],{"class":395}," -y",[389,1903,1904],{"class":395}," \\\n",[389,1906,1907,1910],{"class":391,"line":459},[389,1908,1909],{"class":449},"  python3-flake8-blind-except",[389,1911,1904],{"class":395},[389,1913,1914,1917],{"class":391,"line":601},[389,1915,1916],{"class":449},"  python3-flake8-class-newline",[389,1918,1904],{"class":395},[389,1920,1921,1924],{"class":391,"line":607},[389,1922,1923],{"class":449},"  python3-flake8-deprecated",[389,1925,1904],{"class":395},[389,1927,1928,1931],{"class":391,"line":616},[389,1929,1930],{"class":449},"  python3-mypy",[389,1932,1904],{"class":395},[389,1934,1935,1938],{"class":391,"line":621},[389,1936,1937],{"class":449},"  python3-pip",[389,1939,1904],{"class":395},[389,1941,1942,1945],{"class":391,"line":677},[389,1943,1944],{"class":449},"  python3-pytest",[389,1946,1904],{"class":395},[389,1948,1949,1952],{"class":391,"line":683},[389,1950,1951],{"class":449},"  python3-pytest-cov",[389,1953,1904],{"class":395},[389,1955,1956,1959],{"class":391,"line":689},[389,1957,1958],{"class":449},"  python3-pytest-mock",[389,1960,1904],{"class":395},[389,1962,1963,1966],{"class":391,"line":695},[389,1964,1965],{"class":449},"  python3-pytest-repeat",[389,1967,1904],{"class":395},[389,1969,1970,1973],{"class":391,"line":701},[389,1971,1972],{"class":449},"  python3-pytest-rerunfailures",[389,1974,1904],{"class":395},[389,1976,1977,1980],{"class":391,"line":707},[389,1978,1979],{"class":449},"  python3-pytest-runner",[389,1981,1904],{"class":395},[389,1983,1984,1987],{"class":391,"line":713},[389,1985,1986],{"class":449},"  python3-pytest-timeout",[389,1988,1904],{"class":395},[389,1990,1991],{"class":391,"line":719},[389,1992,1993],{"class":449},"  ros-dev-tools\n",[86,1995,1996],{"start":607},[89,1997,1998],{},"Download the ROS2 source code",[14,2000,2001],{},[27,2002],{"alt":29,"src":2003},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image51.webp",[14,2005,817],{},[105,2007,2009],{"className":578,"code":2008,"language":580,"meta":29,"style":29},"mkdir -p ./ros2_jazzy/src\ncd ./ros2_jazzy\nvcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src\n",[112,2010,2011,2015,2019],{"__ignoreMap":29},[389,2012,2013],{"class":391,"line":392},[389,2014,827],{"class":587},[389,2016,2017],{"class":391,"line":459},[389,2018,832],{"class":587},[389,2020,2021],{"class":391,"line":601},[389,2022,837],{"class":587},[14,2024,2025],{},[27,2026],{"alt":29,"src":2027},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image52.webp",[86,2029,2030],{"start":616},[89,2031,2032],{},"Before adding dependencies, we need to initialize rosdep and change its source:",[14,2034,2035],{},[27,2036],{"alt":29,"src":2037},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image53.webp",[14,2039,2040],{},"The red part in the image, don't follow that — it's the official source and will be very, very slow. It's recommended to use the BFSU repository instead.",[14,2042,2043],{},[49,2044,2045],{"href":2045,"rel":2046},"https://mirrors.bfsu.edu.cn/help/rosdistro/",[53],[14,2048,2049],{},[27,2050],{"alt":29,"src":2051},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image54.webp",[14,2053,2054],{},[27,2055],{"alt":29,"src":2056},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image55.webp",[105,2058,2060],{"className":578,"code":2059,"language":580,"meta":29,"style":29},"\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",[112,2061,2062,2066,2070,2078,2090,2094,2098,2102,2106,2110,2114,2118,2122],{"__ignoreMap":29},[389,2063,2064],{"class":391,"line":392},[389,2065,598],{"emptyLinePlaceholder":597},[389,2067,2068],{"class":391,"line":459},[389,2069,957],{"class":591},[389,2071,2072,2074,2076],{"class":391,"line":601},[389,2073,962],{"class":587},[389,2075,965],{"class":445},[389,2077,968],{"class":587},[389,2079,2080,2082,2084,2086,2088],{"class":391,"line":607},[389,2081,973],{"class":587},[389,2083,965],{"class":445},[389,2085,978],{"class":587},[389,2087,965],{"class":445},[389,2089,983],{"class":587},[389,2091,2092],{"class":391,"line":616},[389,2093,598],{"emptyLinePlaceholder":597},[389,2095,2096],{"class":391,"line":621},[389,2097,993],{"class":591},[389,2099,2100],{"class":391,"line":677},[389,2101,999],{"class":587},[389,2103,2104],{"class":391,"line":683},[389,2105,598],{"emptyLinePlaceholder":597},[389,2107,2108],{"class":391,"line":689},[389,2109,1010],{"class":591},[389,2111,2112],{"class":391,"line":695},[389,2113,1016],{"class":587},[389,2115,2116],{"class":391,"line":701},[389,2117,598],{"emptyLinePlaceholder":597},[389,2119,2120],{"class":391,"line":707},[389,2121,1027],{"class":591},[389,2123,2124],{"class":391,"line":713},[389,2125,1033],{"class":587},[14,2127,2128],{},[27,2129],{"alt":29,"src":2130},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image56.webp",[14,2132,2133],{},[27,2134],{"alt":29,"src":2135},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image57.webp",[14,2137,2138],{},"If you see the red boxed section above, it means the source has been successfully changed. If you don't change the source, the process of installing dependencies below might be extremely slow (I haven't tried it myself, but that's my guess), unless you have a VPN or proxy.",[105,2140,2142],{"className":578,"code":2141,"language":580,"meta":29,"style":29},"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",[112,2143,2144,2149,2153,2159,2163],{"__ignoreMap":29},[389,2145,2146],{"class":391,"line":392},[389,2147,2148],{"class":587},"sudo apt upgrade\n",[389,2150,2151],{"class":391,"line":459},[389,2152,598],{"emptyLinePlaceholder":597},[389,2154,2155,2157],{"class":391,"line":601},[389,2156,610],{"class":494},[389,2158,1089],{"class":587},[389,2160,2161],{"class":391,"line":607},[389,2162,598],{"emptyLinePlaceholder":597},[389,2164,2165,2167,2169,2171],{"class":391,"line":616},[389,2166,1100],{"class":587},[389,2168,1103],{"class":494},[389,2170,1106],{"class":587},[389,2172,1109],{"class":449},[14,2174,2175],{},[27,2176],{"alt":29,"src":2177},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image58.webp",[86,2179,2180],{"start":621},[89,2181,2182],{},"Compile ROS2",[14,2184,2185,2186,2189],{},"In the ",[112,2187,2188],{},"ros_jazzy"," directory, open a terminal and run the following command.",[105,2191,2192],{"className":383,"code":1458,"language":385,"meta":29,"style":29},[112,2193,2194],{"__ignoreMap":29},[389,2195,2196,2199,2202],{"class":391,"line":392},[389,2197,2198],{"class":445},"colcon",[389,2200,2201],{"class":449}," build",[389,2203,2204],{"class":395}," --symlink-install\n",[14,2206,2207],{},"colcon build also has the following commands, such as --packages-skip and --packages-select, used to skip or compile individual packages.",[14,2209,2210],{},[27,2211],{"alt":29,"src":2212},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image59.webp",[14,2214,2215],{},"Once the build is complete, the image below shows what it looks like when it finishes without errors.",[14,2217,2218],{},[27,2219],{"alt":29,"src":2220},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image60.webp",[86,2222,2223],{"start":677},[89,2224,2225],{},"Configure the basic environment",[14,2227,2228,2229,185],{},"Find the folder below and copy its path. For example, mine is ",[112,2230,2231],{},"~/UserFloder/Applications/ros2_jazzy",[14,2233,2234],{},[27,2235],{"alt":29,"src":2236},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image61.webp",[14,2238,2239],{},"Use vim to modify the bash environment",[105,2241,2242],{"className":578,"code":1578,"language":580,"meta":29,"style":29},[112,2243,2244],{"__ignoreMap":29},[389,2245,2246],{"class":391,"line":392},[389,2247,1578],{"class":587},[14,2249,1581],{},[14,2251,2252],{},[27,2253],{"alt":29,"src":2254},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image62.webp",[105,2256,2258],{"className":383,"code":2257,"language":385,"meta":29,"style":29},"\n# 配置ROS2环境\nexport ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\nsource ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[112,2259,2260,2264,2269,2281],{"__ignoreMap":29},[389,2261,2262],{"class":391,"line":392},[389,2263,598],{"emptyLinePlaceholder":597},[389,2265,2266],{"class":391,"line":459},[389,2267,2268],{"class":591},"# 配置ROS2环境\n",[389,2270,2271,2273,2276,2278],{"class":391,"line":601},[389,2272,610],{"class":494},[389,2274,2275],{"class":587}," ROSDISTRO_INDEX_URL",[389,2277,1731],{"class":494},[389,2279,2280],{"class":587},"https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\n",[389,2282,2283,2285],{"class":391,"line":607},[389,2284,502],{"class":395},[389,2286,2287],{"class":449}," ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[14,2289,1589,2290,1593],{},[112,2291,1592],{},[105,2293,2294],{"className":578,"code":1596,"language":580,"meta":29,"style":29},[112,2295,2296,2300,2304],{"__ignoreMap":29},[389,2297,2298],{"class":391,"line":392},[389,2299,598],{"emptyLinePlaceholder":597},[389,2301,2302],{"class":391,"line":459},[389,2303,1607],{"class":591},[389,2305,2306],{"class":391,"line":601},[389,2307,1016],{"class":587},[86,2309,2310],{"start":683},[89,2311,513],{},[14,2313,516,2314,522],{},[58,2315,2316],{},[112,2317,521],{},[39,2319,2321],{"id":2320},"installing-ros2-with-docker","Installing ROS2 with Docker",[14,2323,2324],{},[49,2325,2328],{"href":2326,"rel":2327},"https://sdutvincirobot.feishu.cn/wiki/KRSMwKmTvivWRskSRszc2vfNnoc",[53],"Docker tutorial",[10,2330,2332],{"id":2331},"advanced-ros2-installation-optional","Advanced ROS2 Installation (Optional)",[14,2334,2335],{},"The above only installed the most basic ROS2 packages and configured the most basic ROS2 environment.",[14,2337,2338],{},"After installing the above content, you can optionally proceed with the following advanced configuration of the ROS2 environment.",[14,2340,2341],{},"You can also skip installing advanced components and just install what you need as you learn. Of course, there are also those who prefer to get everything done at once, so below I'll list the most commonly used ROS 2 packages and environment configurations for a one-time installation.",[14,2343,2344],{},[49,2345,2348],{"href":2346,"rel":2347},"https://index.ros.org/?search%5C_packages=true",[53],"https://index.ros.org/?search\\_packages=true",[39,2350,2352],{"id":2351},"install-advanced-packages","Install advanced packages",[14,2354,2355],{},"Below are some of the navigation algorithms, simulation environments, and other packages that come with ROS2. These packages are listed below.",[14,2357,2358],{},"If you are using Ubuntu:",[14,2360,2361],{},"All of the packages below can be installed using apt, no need to compile manually!!!",[14,2363,2364],{},"If you are not using Ubuntu:",[14,2366,2367],{},"The gray ones are the packages installed in the basic tutorial above.",[14,2369,2370],{},"Yellow indicates packages that need to be manually compiled.",[14,2372,2373],{},"Blue indicates packages that require not only manual compilation but also manual modification of some source code.",[2375,2376,2377,2388],"table",{},[2378,2379,2380],"thead",{},[2381,2382,2383],"tr",{},[2384,2385,2387],"th",{"align":2386},"left","ROS packages (non-Ubuntu distributions generally require manual compilation)",[2389,2390,2391,2397,2402,2407,2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2477,2482,2487],"tbody",{},[2381,2392,2393],{},[2394,2395,2396],"td",{"align":2386},"Software package/library name",[2381,2398,2399],{},[2394,2400,2401],{"align":2386},"ros-humble-desktop",[2381,2403,2404],{},[2394,2405,2406],{"align":2386},"ros-humble-xacro",[2381,2408,2409],{},[2394,2410,2411],{"align":2386},"ros-humble-joint-state-publisher",[2381,2413,2414],{},[2394,2415,2416],{"align":2386},"ros-humble-joint-state-publisher-gui",[2381,2418,2419],{},[2394,2420,2421],{"align":2386},"ros-humble-gazebo-ros",[2381,2423,2424],{},[2394,2425,2426],{"align":2386},"ros-humble-gazebo-ros-pkgs",[2381,2428,2429],{},[2394,2430,2431],{"align":2386},"ros-humble-ros-gz",[2381,2433,2434],{},[2394,2435,2436],{"align":2386},"ros-humble-diagnostic-updater",[2381,2438,2439],{},[2394,2440,2441],{"align":2386},"ros-humble-teleop-twist-keyboard",[2381,2443,2444],{},[2394,2445,2446],{"align":2386},"ros-humble-navigation2",[2381,2448,2449],{},[2394,2450,2451],{"align":2386},"ros-humble-nav2-bringup",[2381,2453,2454],{},[2394,2455,2456],{"align":2386},"ros-humble-slam-toolbox",[2381,2458,2459],{},[2394,2460,2461],{"align":2386},"ros-humble-cartographer",[2381,2463,2464],{},[2394,2465,2466],{"align":2386},"ros-humble-cartographer-ros",[2381,2468,2469],{},[2394,2470,2471],{"align":2386},"ros-humble-asio-cmake-module",[2381,2473,2474],{},[2394,2475,2476],{"align":2386},"ros-humble-serial-driver",[2381,2478,2479],{},[2394,2480,2481],{"align":2386},"ros-humble-pcl-ros",[2381,2483,2484],{},[2394,2485,2486],{"align":2386},"ros-humble-pointcloud-to-laserscan",[2381,2488,2489],{},[2394,2490,2491],{"align":2386},"ros-humble-vision-opencv",[2375,2493,2494,2501],{},[2378,2495,2496],{},[2381,2497,2498],{},[2384,2499,2500],{"align":2386},"Non-ROS packages (most can be installed via apt, dnf)",[2389,2502,2503,2507,2512,2517,2522,2527],{},[2381,2504,2505],{},[2394,2506,2396],{"align":2386},[2381,2508,2509],{},[2394,2510,2511],{"align":2386},"libpcl-dev",[2381,2513,2514],{},[2394,2515,2516],{"align":2386},"libeigen3-dev",[2381,2518,2519],{},[2394,2520,2521],{"align":2386},"libpcap-dev",[2381,2523,2524],{},[2394,2525,2526],{"align":2386},"libboost-dev",[2381,2528,2529],{},[2394,2530,2531],{"align":2386},"libogre-1.12-dev",[14,2533,2534],{},"However, the packages mentioned above may depend on other packages. The repository below contains links to all the packages' repositories (read on to see how to use them):",[14,2536,2537],{},[49,2538,2539],{"href":2539,"rel":2540},"https://github.com/ros/rosdistro/tree/master",[53],[14,2542,2543],{},[27,2544],{"alt":29,"src":2545},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image63.webp",[225,2547,2549],{"id":2548},"apt-installation-method-strongly-recommended-for-ubuntu","APT installation method (strongly recommended for Ubuntu)",[105,2551,2553],{"className":383,"code":2552,"language":385,"meta":29,"style":29},"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",[112,2554,2555,2573,2580,2587,2594,2601,2608,2615,2622,2629,2636,2643,2650,2657,2664,2671,2678,2685,2692,2699,2706,2713,2720,2727,2734,2741],{"__ignoreMap":29},[389,2556,2557,2559,2561,2563,2565,2567,2569,2571],{"class":391,"line":392},[389,2558,446],{"class":445},[389,2560,1681],{"class":449},[389,2562,1684],{"class":449},[389,2564,1687],{"class":587},[389,2566,446],{"class":445},[389,2568,1681],{"class":449},[389,2570,453],{"class":449},[389,2572,1904],{"class":395},[389,2574,2575,2578],{"class":391,"line":459},[389,2576,2577],{"class":449},"    ros-humble-desktop",[389,2579,1904],{"class":395},[389,2581,2582,2585],{"class":391,"line":601},[389,2583,2584],{"class":449},"    ros-dev-tools",[389,2586,1904],{"class":395},[389,2588,2589,2592],{"class":391,"line":607},[389,2590,2591],{"class":449},"    ros-humble-xacro",[389,2593,1904],{"class":395},[389,2595,2596,2599],{"class":391,"line":616},[389,2597,2598],{"class":449},"    ros-humble-joint-state-publisher",[389,2600,1904],{"class":395},[389,2602,2603,2606],{"class":391,"line":621},[389,2604,2605],{"class":449},"    ros-humble-joint-state-publisher-gui",[389,2607,1904],{"class":395},[389,2609,2610,2613],{"class":391,"line":677},[389,2611,2612],{"class":449},"    ros-humble-ros-gz",[389,2614,1904],{"class":395},[389,2616,2617,2620],{"class":391,"line":683},[389,2618,2619],{"class":449},"    ros-humble-gazebo-ros",[389,2621,1904],{"class":395},[389,2623,2624,2627],{"class":391,"line":689},[389,2625,2626],{"class":449},"    ros-humble-gazebo-ros-pkgs",[389,2628,1904],{"class":395},[389,2630,2631,2634],{"class":391,"line":695},[389,2632,2633],{"class":449},"    ros-humble-imu-tools",[389,2635,1904],{"class":395},[389,2637,2638,2641],{"class":391,"line":701},[389,2639,2640],{"class":449},"    ros-humble-diagnostic-updater",[389,2642,1904],{"class":395},[389,2644,2645,2648],{"class":391,"line":707},[389,2646,2647],{"class":449},"    ros-humble-teleop-twist-keyboard",[389,2649,1904],{"class":395},[389,2651,2652,2655],{"class":391,"line":713},[389,2653,2654],{"class":449},"    ros-humble-navigation2",[389,2656,1904],{"class":395},[389,2658,2659,2662],{"class":391,"line":719},[389,2660,2661],{"class":449},"    ros-humble-nav2-bringup",[389,2663,1904],{"class":395},[389,2665,2666,2669],{"class":391,"line":725},[389,2667,2668],{"class":449},"    ros-humble-slam-toolbox",[389,2670,1904],{"class":395},[389,2672,2673,2676],{"class":391,"line":731},[389,2674,2675],{"class":449},"    ros-humble-cartographer",[389,2677,1904],{"class":395},[389,2679,2680,2683],{"class":391,"line":737},[389,2681,2682],{"class":449},"    ros-humble-cartographer-ros",[389,2684,1904],{"class":395},[389,2686,2687,2690],{"class":391,"line":743},[389,2688,2689],{"class":449},"    ros-humble-asio-cmake-module",[389,2691,1904],{"class":395},[389,2693,2694,2697],{"class":391,"line":749},[389,2695,2696],{"class":449},"    ros-humble-serial-driver",[389,2698,1904],{"class":395},[389,2700,2701,2704],{"class":391,"line":755},[389,2702,2703],{"class":449},"    ros-humble-pcl-ros",[389,2705,1904],{"class":395},[389,2707,2708,2711],{"class":391,"line":761},[389,2709,2710],{"class":449},"    ros-humble-vision-opencv",[389,2712,1904],{"class":395},[389,2714,2715,2718],{"class":391,"line":766},[389,2716,2717],{"class":449},"    ros-humble-pointcloud-to-laserscan",[389,2719,1904],{"class":395},[389,2721,2722,2725],{"class":391,"line":772},[389,2723,2724],{"class":449},"    libpcl-dev",[389,2726,1904],{"class":395},[389,2728,2729,2732],{"class":391,"line":777},[389,2730,2731],{"class":449},"    libeigen3-dev",[389,2733,1904],{"class":395},[389,2735,2736,2739],{"class":391,"line":783},[389,2737,2738],{"class":449},"    libpcap-dev",[389,2740,1904],{"class":395},[389,2742,2743],{"class":391,"line":789},[389,2744,2745],{"class":449},"    python3-colcon-common-extensions\n",[225,2747,2749],{"id":2748},"source-code-method-non-ubuntu","Source code method (non-Ubuntu)",[14,2751,2752],{},"Using Debian 12 as an example.",[2754,2755,2757],"h6",{"id":2756},"yellow-bag","Yellow bag",[14,2759,2760,2761,2764,2765,2768,2769,2772],{},"Using the installation of the three packages ",[112,2762,2763],{},"ros-jazzy-xacro",", ",[112,2766,2767],{},"ros-jazzy-joint-state-publisher",", and ",[112,2770,2771],{},"ros-jazzy-joint-state-publisher-gui"," as an example, the same procedure applies to other packages.",[14,2774,2775],{},[49,2776,2348],{"href":2346,"rel":2777},[53],[14,2779,2780],{},"Go to the website above, select the corresponding version in the image below — for example, I'm using JAZZY — then search for xacro, joint_state_publisher, and joint_state_publisher_gui in the search box.",[14,2782,2783],{},[27,2784],{"alt":29,"src":2785},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image64.webp",[14,2787,2788],{},"For example, xacro",[14,2790,2791],{},[27,2792],{"alt":29,"src":2793},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image65.webp",[14,2795,2796],{},[27,2797],{"alt":29,"src":2798},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image66.webp",[14,2800,2801,2802,2805,2806,2809],{},"Find the corresponding version of xacro, where the repository address is the checkout URI and the branch is the vcs version. You could use ",[112,2803,2804],{},"git clone"," to clone them one by one, but that would be extremely tedious. So we choose the ",[112,2807,2808],{},"vcs"," command provided by ROS2 to download the source code of the packages.",[14,2811,2812,2813,2816],{},"First, navigate to your ",[112,2814,2815],{},"ros2_jazzy"," directory and open a terminal.",[14,2818,2819],{},[27,2820],{"alt":29,"src":2821},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image67.webp",[14,2823,2824],{},"and create a .repos file, name it whatever you like, for example I'll call mine my_ros2_jazzy_packages.repos",[14,2826,2827],{},[27,2828],{"alt":29,"src":2829},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image68.webp",[14,2831,2832,2833,2836],{},"Then edit it using VSCode, because ",[112,2834,2835],{},".repos"," uses the YAML language, and VSCode can verify syntax correctness:",[14,2838,2839],{},[27,2840],{"alt":29,"src":2841},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image69.webp",[14,2843,2844],{},"Write the information you just queried onto it.",[105,2846,2850],{"className":2847,"code":2848,"language":2849,"meta":29,"style":29},"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",[112,2851,2852,2861,2868,2879,2889],{"__ignoreMap":29},[389,2853,2854,2858],{"class":391,"line":392},[389,2855,2857],{"class":2856},"s9eBZ","repositories",[389,2859,2860],{"class":587},":\n",[389,2862,2863,2866],{"class":391,"line":459},[389,2864,2865],{"class":2856},"  xacro",[389,2867,2860],{"class":587},[389,2869,2870,2873,2876],{"class":391,"line":601},[389,2871,2872],{"class":2856},"    type",[389,2874,2875],{"class":587},": ",[389,2877,2878],{"class":449},"git\n",[389,2880,2881,2884,2886],{"class":391,"line":607},[389,2882,2883],{"class":2856},"    url",[389,2885,2875],{"class":587},[389,2887,2888],{"class":449},"https://github.com/ros/xacro.git\n",[389,2890,2891,2894,2896],{"class":391,"line":616},[389,2892,2893],{"class":2856},"    version",[389,2895,2875],{"class":587},[389,2897,2898],{"class":449},"ros2\n",[14,2900,2901],{},"Use the same method to find other packages:",[14,2903,2904],{},[27,2905],{"alt":29,"src":2906},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image70.webp",[14,2908,2909],{},"The image above explains that joint_state_publisher and joint_state_publisher_gui are actually from the same repository, so we only need to clone one repository.",[14,2911,2912],{},"Then the VCS version, which is the Git branch, is ros2.",[105,2914,2916],{"className":2847,"code":2915,"language":2849,"meta":29,"style":29},"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",[112,2917,2918,2924,2930,2938,2946,2954,2961,2969,2978],{"__ignoreMap":29},[389,2919,2920,2922],{"class":391,"line":392},[389,2921,2857],{"class":2856},[389,2923,2860],{"class":587},[389,2925,2926,2928],{"class":391,"line":459},[389,2927,2865],{"class":2856},[389,2929,2860],{"class":587},[389,2931,2932,2934,2936],{"class":391,"line":601},[389,2933,2872],{"class":2856},[389,2935,2875],{"class":587},[389,2937,2878],{"class":449},[389,2939,2940,2942,2944],{"class":391,"line":607},[389,2941,2883],{"class":2856},[389,2943,2875],{"class":587},[389,2945,2888],{"class":449},[389,2947,2948,2950,2952],{"class":391,"line":616},[389,2949,2893],{"class":2856},[389,2951,2875],{"class":587},[389,2953,2898],{"class":449},[389,2955,2956,2959],{"class":391,"line":621},[389,2957,2958],{"class":2856},"  joint_state_publisher",[389,2960,2860],{"class":587},[389,2962,2963,2965,2967],{"class":391,"line":677},[389,2964,2872],{"class":2856},[389,2966,2875],{"class":587},[389,2968,2878],{"class":449},[389,2970,2971,2973,2975],{"class":391,"line":683},[389,2972,2883],{"class":2856},[389,2974,2875],{"class":587},[389,2976,2977],{"class":449},"https://github.com/ros/joint_state_publisher.git\n",[389,2979,2980,2982,2984],{"class":391,"line":689},[389,2981,2893],{"class":2856},[389,2983,2875],{"class":587},[389,2985,2898],{"class":449},[14,2987,2988],{},"Apply the same method to other packages.",[14,2990,2991],{},"But let me first use these two packages as an example.",[14,2993,2994],{},"In the terminal under the ros2_jazzy directory:",[105,2996,2998],{"className":383,"code":2997,"language":385,"meta":29,"style":29},"vcs import src \u003C my_ros2_jazzy_packages.repos\n",[112,2999,3000],{"__ignoreMap":29},[389,3001,3002,3004,3007,3010,3013],{"class":391,"line":392},[389,3003,2808],{"class":445},[389,3005,3006],{"class":449}," import",[389,3008,3009],{"class":449}," src",[389,3011,3012],{"class":494}," \u003C",[389,3014,3015],{"class":449}," my_ros2_jazzy_packages.repos\n",[14,3017,3018],{},[27,3019],{"alt":29,"src":3020},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image71.webp",[14,3022,3023],{},"You can see in the image below that the clone was successful.",[14,3025,3026],{},[27,3027],{"alt":29,"src":3028},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image72.webp",[14,3030,3031],{},"Next, supplement the dependencies:",[105,3033,3035],{"className":383,"code":3034,"language":385,"meta":29,"style":29},"rosdep install --from-paths src --ignore-src -y --skip-keys \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[112,3036,3037],{"__ignoreMap":29},[389,3038,3039,3042,3044,3047,3049,3052,3054,3057],{"class":391,"line":392},[389,3040,3041],{"class":445},"rosdep",[389,3043,453],{"class":449},[389,3045,3046],{"class":395}," --from-paths",[389,3048,3009],{"class":449},[389,3050,3051],{"class":395}," --ignore-src",[389,3053,1901],{"class":395},[389,3055,3056],{"class":395}," --skip-keys",[389,3058,3059],{"class":449}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers\"\n",[14,3061,3062],{},"If the text shown in the image below appears, it means success.",[14,3064,3065],{},[27,3066],{"alt":29,"src":3067},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image73.webp",[14,3069,3070],{},"Just compile and install it.",[105,3072,3074],{"className":383,"code":3073,"language":385,"meta":29,"style":29},"colcon build --symlink-install\n\n# 或仅编译特定包\ncolcon build --packages-select xacro joint_state_publisher joint_state_publisher_gui\n",[112,3075,3076,3084,3088,3093],{"__ignoreMap":29},[389,3077,3078,3080,3082],{"class":391,"line":392},[389,3079,2198],{"class":445},[389,3081,2201],{"class":449},[389,3083,2204],{"class":395},[389,3085,3086],{"class":391,"line":459},[389,3087,598],{"emptyLinePlaceholder":597},[389,3089,3090],{"class":391,"line":601},[389,3091,3092],{"class":591},"# 或仅编译特定包\n",[389,3094,3095,3097,3099,3102,3105,3108],{"class":391,"line":607},[389,3096,2198],{"class":445},[389,3098,2201],{"class":449},[389,3100,3101],{"class":395}," --packages-select",[389,3103,3104],{"class":449}," xacro",[389,3106,3107],{"class":449}," joint_state_publisher",[389,3109,3110],{"class":449}," joint_state_publisher_gui\n",[14,3112,3113],{},[27,3114],{"alt":29,"src":3115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image74.webp",[14,3117,2988],{},[14,3119,3120],{},"Test:",[105,3122,3124],{"className":383,"code":3123,"language":385,"meta":29,"style":29},"\n# 重新加载环境\nsource ~/.bashrc\n\n# 敲命令\nxacro\n",[112,3125,3126,3130,3135,3141,3145,3150],{"__ignoreMap":29},[389,3127,3128],{"class":391,"line":392},[389,3129,598],{"emptyLinePlaceholder":597},[389,3131,3132],{"class":391,"line":459},[389,3133,3134],{"class":591},"# 重新加载环境\n",[389,3136,3137,3139],{"class":391,"line":601},[389,3138,502],{"class":395},[389,3140,467],{"class":449},[389,3142,3143],{"class":391,"line":607},[389,3144,598],{"emptyLinePlaceholder":597},[389,3146,3147],{"class":391,"line":616},[389,3148,3149],{"class":591},"# 敲命令\n",[389,3151,3152],{"class":391,"line":621},[389,3153,3154],{"class":445},"xacro\n",[14,3156,3157],{},"As shown in the figure below, if xacro prompts an error, that means it's successful. This indicates the installation was successful!",[14,3159,3160],{},[27,3161],{"alt":29,"src":3162},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image75.webp",[14,3164,2988],{},[14,3166,3167],{},"I also put together the repos files for Humble and Jazzy, pulling them one by one from the official website and distribution.yaml. You can just clone and use what I've organized. (Though the ROS2 official team might make changes to some repository branches.)",[14,3169,3170],{},[49,3171,3172],{"href":3172,"rel":3173},"https://github.com/tungchiahui/ros-docker/tree/main/repos",[53],[14,3175,3176],{},[27,3177],{"alt":29,"src":3178},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image76.webp",[2754,3180,3182],{"id":3181},"blue-bag","Blue bag",[14,3184,3185],{},"The blue package is generally handled in the same way as the yellow one, except that after downloading the source code for the blue package, you also need to modify some files in the source code before compiling.",[14,3187,3188],{},"For vision_opencv's cv_bridge: see the CV_Bridge section in the OpenCV chapter below.",[225,3190,3192],{"id":3191},"frequently-asked-questions","Frequently Asked Questions",[86,3194,3195],{},[89,3196,3197],{},"libogre-dev not found",[14,3199,3200,3201,3204,3205,3207],{},"Gazebo's rendering engine cannot be found using ",[112,3202,3203],{},"libogre-dev"," on Debian 12; you must use ",[112,3206,2531],{}," instead.",[86,3209,3210],{"start":459},[89,3211,3212],{},"In nav2_mppi_controller, a null pointer was being treated as an error, causing a warning to be escalated into an error.",[14,3214,3215,3216,3219],{},"Simply add ",[112,3217,3218],{},"add_compile_options(-Wno-error=null-dereference)"," to the CMakeLists.txt of nav2_mppi_controller to resolve the issue.",[86,3221,3222],{"start":601},[89,3223,3224],{},"There is a memory overlap warning in nav2_system_tests.",[14,3226,3227],{},"To resolve this, simply add the following lines to the CMakeLists.txt file in nav2_system_tests.",[105,3229,3231],{"className":383,"code":3230,"language":385,"meta":29,"style":29},"if (CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n    add_compile_options(-Wno-restrict)\nendif()\n",[112,3232,3233,3253,3260],{"__ignoreMap":29},[389,3234,3235,3238,3241,3244,3247,3250],{"class":391,"line":392},[389,3236,3237],{"class":494},"if",[389,3239,3240],{"class":587}," (",[389,3242,3243],{"class":445},"CMAKE_CXX_COMPILER_ID",[389,3245,3246],{"class":449}," MATCHES",[389,3248,3249],{"class":449}," \"GNU\"",[389,3251,3252],{"class":587},")\n",[389,3254,3255,3258],{"class":391,"line":459},[389,3256,3257],{"class":445},"    add_compile_options(-Wno-restrict",[389,3259,3252],{"class":587},[389,3261,3262,3265],{"class":391,"line":601},[389,3263,3264],{"class":445},"endif",[389,3266,3267],{"class":587},"()\n",[86,3269,3270],{"start":607},[89,3271,3272],{},"Some libraries are not available in the latest version of Fedora, but are present in older versions.",[14,3274,3275],{},[27,3276],{"alt":29,"src":3277},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image77.webp",[14,3279,3280],{},[49,3281,3282],{"href":3282,"rel":3283},"https://src.fedoraproject.org/projects/rpms/%2A",[53],[14,3285,3286],{},[27,3287],{"alt":29,"src":3288},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image78.webp",[105,3290,3292],{"className":383,"code":3291,"language":385,"meta":29,"style":29},"sudo dnf install python3-pykdl --releasever=41\nsudo dnf install orocos-kdl-devel --releasever=41\n",[112,3293,3294,3309],{"__ignoreMap":29},[389,3295,3296,3298,3301,3303,3306],{"class":391,"line":392},[389,3297,446],{"class":445},[389,3299,3300],{"class":449}," dnf",[389,3302,453],{"class":449},[389,3304,3305],{"class":449}," python3-pykdl",[389,3307,3308],{"class":395}," --releasever=41\n",[389,3310,3311,3313,3315,3317,3320],{"class":391,"line":459},[389,3312,446],{"class":445},[389,3314,3300],{"class":449},[389,3316,453],{"class":449},[389,3318,3319],{"class":449}," orocos-kdl-devel",[389,3321,3308],{"class":395},[86,3323,3324],{"start":616},[89,3325,3326],{},"Some Python libraries cannot be installed on the latest version of the system because the Python version is too high.",[14,3328,3329],{},"You can install this library using pip3.",[105,3331,3333],{"className":383,"code":3332,"language":385,"meta":29,"style":29},"pip3 install flake8-docstrings\n",[112,3334,3335],{"__ignoreMap":29},[389,3336,3337,3340,3342],{"class":391,"line":392},[389,3338,3339],{"class":445},"pip3",[389,3341,453],{"class":449},[389,3343,3344],{"class":449}," flake8-docstrings\n",[14,3346,3347],{},"However, for subsequent compilation, this library needs to be added to the dependencies ignored by rosdep. For example, for python3-flake8-docstrings, the line would be:",[105,3349,3351],{"className":383,"code":3350,"language":385,"meta":29,"style":29},"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",[112,3352,3353,3371,3375,3380],{"__ignoreMap":29},[389,3354,3355,3357,3359,3361,3363,3365,3367,3369],{"class":391,"line":392},[389,3356,3041],{"class":445},[389,3358,453],{"class":449},[389,3360,3046],{"class":395},[389,3362,3009],{"class":449},[389,3364,3051],{"class":395},[389,3366,1901],{"class":395},[389,3368,3056],{"class":395},[389,3370,3059],{"class":449},[389,3372,3373],{"class":391,"line":459},[389,3374,598],{"emptyLinePlaceholder":597},[389,3376,3377],{"class":391,"line":601},[389,3378,3379],{"class":591},"# 改为\n",[389,3381,3382,3384,3386,3388,3390,3392,3394,3396],{"class":391,"line":607},[389,3383,3041],{"class":445},[389,3385,453],{"class":449},[389,3387,3046],{"class":395},[389,3389,3009],{"class":449},[389,3391,3051],{"class":395},[389,3393,1901],{"class":395},[389,3395,3056],{"class":395},[389,3397,3398],{"class":449}," \"fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-flake8-docstrings\"\n",[14,3400,3401],{},[27,3402],{"alt":29,"src":3403},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image79.webp",[39,3405,3407],{"id":3406},"advanced-environment","Advanced Environment",[225,3409,3411],{"id":3410},"apt-method","Apt method",[105,3413,3417],{"className":3414,"code":3415,"language":3416,"meta":29,"style":29},"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",[112,3418,3419,3423,3428,3433,3437,3442,3447,3451,3456,3461,3465,3470],{"__ignoreMap":29},[389,3420,3421],{"class":391,"line":392},[389,3422,598],{"emptyLinePlaceholder":597},[389,3424,3425],{"class":391,"line":459},[389,3426,3427],{},"# rosdep换源\n",[389,3429,3430],{"class":391,"line":601},[389,3431,3432],{},"export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml\n",[389,3434,3435],{"class":391,"line":607},[389,3436,598],{"emptyLinePlaceholder":597},[389,3438,3439],{"class":391,"line":616},[389,3440,3441],{},"# 加载ROS2环境\n",[389,3443,3444],{"class":391,"line":621},[389,3445,3446],{},"source /opt/ros/jazzy/setup.bash\n",[389,3448,3449],{"class":391,"line":677},[389,3450,598],{"emptyLinePlaceholder":597},[389,3452,3453],{"class":391,"line":683},[389,3454,3455],{},"# 配置ROS2的分布式\n",[389,3457,3458],{"class":391,"line":689},[389,3459,3460],{},"export ROS_DOMAIN_ID=6\n",[389,3462,3463],{"class":391,"line":695},[389,3464,598],{"emptyLinePlaceholder":597},[389,3466,3467],{"class":391,"line":701},[389,3468,3469],{},"# 配置新版Gazebo的资源（这里先注释，等你学到gazebo再打开）\n",[389,3471,3472],{"class":391,"line":707},[389,3473,3474],{},"#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",[14,3476,3477,3478,3481,3482,3485,3486,3488],{},"Note that the macro name for Gazebo resource packages may differ across ROS2 versions. For example, in ROS2 Humble it is ",[112,3479,3480],{},"IGN_GAZEBO_RESOURCE_PATH",", while in ROS2 Jazzy it is ",[112,3483,3484],{},"GZ_SIM_RESOURCE_PATH",". (Future ROS2 versions will likely all use ",[112,3487,3484],{},".) (See the Gazebo tutorial below for details.)",[225,3490,3492],{"id":3491},"source-code-method","Source code method",[14,3494,3495],{},"The method is the same as with apt, but you need to set the path to the setup.bash that loads the ROS2 environment to your ROS2 installation path.",[105,3497,3499],{"className":383,"code":3498,"language":385,"meta":29,"style":29},"\n# 加载ROS2环境\nsource ~/UserFloder/Applcations/ros2_jazzy/install/setup.bash\n",[112,3500,3501,3505,3509],{"__ignoreMap":29},[389,3502,3503],{"class":391,"line":392},[389,3504,598],{"emptyLinePlaceholder":597},[389,3506,3507],{"class":391,"line":459},[389,3508,3441],{"class":591},[389,3510,3511,3513],{"class":391,"line":601},[389,3512,502],{"class":395},[389,3514,2287],{"class":449},[10,3516,513],{"id":3517},"test-ros2-1",[39,3519,3521],{"id":3520},"example-1","Example 1",[14,3523,3524],{},"Open two terminals, and enter the commands shown in the two red boxes respectively.",[14,3526,3527],{},[27,3528],{"alt":29,"src":3529},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image80.webp",[14,3531,3532],{},"If the following program appears, the test is successful.",[14,3534,3535],{},"Press Ctrl+C in the terminal to terminate the program.",[14,3537,3538],{},[27,3539],{"alt":29,"src":3540},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image81.webp",[39,3542,3544],{"id":3543},"example-2","Example 2",[14,3546,3547],{},"Turtle is a classic ROS test project, so it's a must to take it for a spin!",[14,3549,3550],{},"Open two terminals as well, and enter the following commands in each respectively.",[105,3552,3554],{"className":383,"code":3553,"language":385,"meta":29,"style":29},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[112,3555,3556,3570],{"__ignoreMap":29},[389,3557,3558,3561,3564,3567],{"class":391,"line":392},[389,3559,3560],{"class":445},"ros2",[389,3562,3563],{"class":449}," run",[389,3565,3566],{"class":449}," turtlesim",[389,3568,3569],{"class":449}," turtlesim_node\n",[389,3571,3572,3574,3576,3578],{"class":391,"line":459},[389,3573,3560],{"class":445},[389,3575,3563],{"class":449},[389,3577,3566],{"class":449},[389,3579,3580],{"class":449}," turtle_teleop_key\n",[14,3582,3583],{},"Click the red section below with the mouse, then use the arrow keys on the numeric keypad to control the turtle's movement. If you don't have a numeric keypad, you can try using keys like G, B, V, C, D, E, R, T to control the turtle.",[14,3585,3586],{},"Similarly, pressing Ctrl+C in the terminal will terminate the program.",[14,3588,3589],{},[27,3590],{"alt":29,"src":3591},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image82.webp",[10,3593,3192],{"id":3594},"frequently-asked-questions-1",[39,3596,3598],{"id":3597},"rviz2-flickering","Rviz2 flickering",[14,3600,3601,3602,3605],{},"If a 2K+ computer has display issues after installing rviz2, you can add the following content to ",[112,3603,3604],{},".bashrc"," to prevent Qt from scaling.",[105,3607,3609],{"className":383,"code":3608,"language":385,"meta":29,"style":29},"export QT_AUTO_SCREEN_SCALE_FACTOR=0\nexport QT_SCREEN_SCALE_FACTORS=[1.0]\n",[112,3610,3611,3623],{"__ignoreMap":29},[389,3612,3613,3615,3618,3620],{"class":391,"line":392},[389,3614,610],{"class":494},[389,3616,3617],{"class":587}," QT_AUTO_SCREEN_SCALE_FACTOR",[389,3619,1731],{"class":494},[389,3621,3622],{"class":395},"0\n",[389,3624,3625,3627,3630,3632],{"class":391,"line":459},[389,3626,610],{"class":494},[389,3628,3629],{"class":587}," QT_SCREEN_SCALE_FACTORS",[389,3631,1731],{"class":494},[389,3633,3634],{"class":587},"[1.0]\n",[3636,3637,3638],"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":29,"searchDepth":459,"depth":459,"links":3640},[3641,3642,3643,3644,3645,3646,3647,3648],{"id":12,"depth":601,"text":5},{"id":22,"depth":601,"text":23},{"id":36,"depth":601,"text":37},{"id":83,"depth":601,"text":84},{"id":175,"depth":601,"text":176},{"id":2331,"depth":601,"text":2332},{"id":3517,"depth":601,"text":513},{"id":3594,"depth":601,"text":3192},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","1",1000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍",false,null,"en-US","en-us",{},{"title":5,"description":29},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","z5ez1QJmx8dqNF7sD2NJRhS12lrT0vYVB574Jx92n-g",[3669,3670,3676,3682,3688,3694,3700,3706,3712,3718,3724,3730,3736,3742,3748,3754,3760,3766,3771,3777,3782,3788,3794,3800,3806,3812,3818,3824,3830,3836,3842,3848,3854,3860,3866,3872,3878,3884,3890,3896,3902,3908,3914,3920,3926,3932,3938,3944,3950,3956,3962,3968,3974,3980,3986,3992,3998,4004,4010,4016],{"path":3649,"stem":3666,"title":5,"date":3652,"chapter":3650,"chapterSort":3651,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},{"path":3671,"stem":3672,"title":3673,"date":3652,"chapter":3674,"chapterSort":3675,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform","10",10000000,{"path":3677,"stem":3678,"title":3679,"date":3652,"chapter":3680,"chapterSort":3681,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":3683,"stem":3684,"title":3685,"date":3652,"chapter":3686,"chapterSort":3687,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":3689,"stem":3690,"title":3691,"date":3652,"chapter":3692,"chapterSort":3693,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":3695,"stem":3696,"title":3697,"date":3652,"chapter":3698,"chapterSort":3699,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":3701,"stem":3702,"title":3703,"date":3652,"chapter":3704,"chapterSort":3705,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform","11",11000000,{"path":3707,"stem":3708,"title":3709,"date":3652,"chapter":3710,"chapterSort":3711,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":3713,"stem":3714,"title":3715,"date":3652,"chapter":3716,"chapterSort":3717,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":3719,"stem":3720,"title":3721,"date":3652,"chapter":3722,"chapterSort":3723,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":3725,"stem":3726,"title":3727,"date":3652,"chapter":3728,"chapterSort":3729,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","12",12000000,{"path":3731,"stem":3732,"title":3733,"date":3652,"chapter":3734,"chapterSort":3735,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":3737,"stem":3738,"title":3739,"date":3652,"chapter":3740,"chapterSort":3741,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":3743,"stem":3744,"title":3745,"date":3652,"chapter":3746,"chapterSort":3747,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":3749,"stem":3750,"title":3751,"date":3652,"chapter":3752,"chapterSort":3753,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":3755,"stem":3756,"title":3757,"date":3652,"chapter":3758,"chapterSort":3759,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":3761,"stem":3762,"title":3763,"date":3652,"chapter":3764,"chapterSort":3765,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":3767,"stem":3768,"title":3733,"date":3652,"chapter":3769,"chapterSort":3770,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":3772,"stem":3773,"title":3774,"date":3652,"chapter":3775,"chapterSort":3776,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":3778,"stem":3779,"title":3733,"date":3652,"chapter":3780,"chapterSort":3781,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":3783,"stem":3784,"title":3785,"date":3652,"chapter":3786,"chapterSort":3787,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":3789,"stem":3790,"title":3791,"date":3652,"chapter":3792,"chapterSort":3793,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication","13",13000000,{"path":3795,"stem":3796,"title":3797,"date":3652,"chapter":3798,"chapterSort":3799,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":3801,"stem":3802,"title":3803,"date":3652,"chapter":3804,"chapterSort":3805,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":3807,"stem":3808,"title":3809,"date":3652,"chapter":3810,"chapterSort":3811,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":3813,"stem":3814,"title":3815,"date":3652,"chapter":3816,"chapterSort":3817,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":3819,"stem":3820,"title":3821,"date":3652,"chapter":3822,"chapterSort":3823,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":3825,"stem":3826,"title":3827,"date":3652,"chapter":3828,"chapterSort":3829,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":3831,"stem":3832,"title":3833,"date":3652,"chapter":3834,"chapterSort":3835,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":3837,"stem":3838,"title":3839,"date":3652,"chapter":3840,"chapterSort":3841,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":3843,"stem":3844,"title":3845,"date":3652,"chapter":3846,"chapterSort":3847,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":3849,"stem":3850,"title":3851,"date":3652,"chapter":3852,"chapterSort":3853,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":3855,"stem":3856,"title":3857,"date":3652,"chapter":3858,"chapterSort":3859,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","Camera","14.6.4",14060400,{"path":3861,"stem":3862,"title":3863,"date":3652,"chapter":3864,"chapterSort":3865,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":3867,"stem":3868,"title":3869,"date":3652,"chapter":3870,"chapterSort":3871,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":3873,"stem":3874,"title":3875,"date":3652,"chapter":3876,"chapterSort":3877,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":3879,"stem":3880,"title":3881,"date":3652,"chapter":3882,"chapterSort":3883,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":3885,"stem":3886,"title":3887,"date":3652,"chapter":3888,"chapterSort":3889,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":3891,"stem":3892,"title":3893,"date":3652,"chapter":3894,"chapterSort":3895,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":3897,"stem":3898,"title":3899,"date":3652,"chapter":3900,"chapterSort":3901,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":3903,"stem":3904,"title":3905,"date":3652,"chapter":3906,"chapterSort":3907,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":3909,"stem":3910,"title":3911,"date":3652,"chapter":3912,"chapterSort":3913,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":3915,"stem":3916,"title":3917,"date":3652,"chapter":3918,"chapterSort":3919,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":3921,"stem":3922,"title":3923,"date":3652,"chapter":3924,"chapterSort":3925,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":3927,"stem":3928,"title":3929,"date":3652,"chapter":3930,"chapterSort":3931,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware","14",14000000,{"path":3933,"stem":3934,"title":3935,"date":3652,"chapter":3936,"chapterSort":3937,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":3939,"stem":3940,"title":3941,"date":3652,"chapter":3942,"chapterSort":3943,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","16",16000000,{"path":3945,"stem":3946,"title":3947,"date":3652,"chapter":3948,"chapterSort":3949,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","17",17000000,{"path":3951,"stem":3952,"title":3953,"date":3652,"chapter":3954,"chapterSort":3955,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":3957,"stem":3958,"title":3959,"date":3652,"chapter":3960,"chapterSort":3961,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform","19",19000000,{"path":3963,"stem":3964,"title":3965,"date":3652,"chapter":3966,"chapterSort":3967,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","Getting Started","2",2000000,{"path":3969,"stem":3970,"title":3971,"date":3652,"chapter":3972,"chapterSort":3973,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":3975,"stem":3976,"title":3977,"date":3652,"chapter":3978,"chapterSort":3979,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages","3",3000000,{"path":3981,"stem":3982,"title":3983,"date":3652,"chapter":3984,"chapterSort":3985,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","Four Major Communications","4",4000000,{"path":3987,"stem":3988,"title":3989,"date":3652,"chapter":3990,"chapterSort":3991,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms","5",5000000,{"path":3993,"stem":3994,"title":3995,"date":3652,"chapter":3996,"chapterSort":3997,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":3999,"stem":4000,"title":4001,"date":3652,"chapter":4002,"chapterSort":4003,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","Replaying rosbag2","7",7000000,{"path":4005,"stem":4006,"title":4007,"date":3652,"chapter":4008,"chapterSort":4009,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF","8",8000000,{"path":4011,"stem":4012,"title":4013,"date":3652,"chapter":4014,"chapterSort":4015,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":3659},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","9",9000000,{"path":3655,"stem":4017,"title":4018,"date":3652,"chapter":3660,"chapterSort":4019,"docKey":3654,"docRoot":3655,"docTitle":3656,"isWikiDoc":597,"isWikiIndex":597},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":4021},[4022,4023,4026,4029,4032],{"path":3649,"localeSlug":3662,"i18nKey":3658},{"path":4024,"localeSlug":4025,"i18nKey":3658},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","zh-hant",{"path":4027,"localeSlug":4028,"i18nKey":3658},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","zh-hk",{"path":4030,"localeSlug":4031,"i18nKey":3658},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","zh-tw",{"path":4033,"localeSlug":4034,"i18nKey":3658},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","zh-cn",[3649,3665,4024,3665,4027,3665,4030,3665,4033,3665],1780671797883]