[{"data":1,"prerenderedAt":851},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv":483,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv":835,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv":850},{"id":4,"title":5,"body":6,"canonicalPath":464,"chapter":465,"chapterSort":466,"date":467,"description":56,"docI18nKey":468,"docKey":469,"docRoot":470,"docTitle":471,"extension":472,"i18nKey":473,"isBlogPost":474,"isWikiDoc":101,"isWikiIndex":474,"layout":475,"legacyPath":475,"locale":476,"localeSlug":477,"meta":478,"navigation":101,"path":464,"seo":479,"sourcePath":480,"sourceStem":473,"stem":481,"wikiDepth":98,"__hash__":482},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV.md","OpenCV",{"type":7,"value":8,"toc":460},"minimark",[9,13,23,27,30,36,42,45,51,61,66,75,82,85,151,156,159,180,185,188,236,239,254,257,262,273,276,281,325,389,392,411,414,419,422,431,438,447,453,456],[10,11,5],"h3",{"id":12},"opencv",[14,15,16],"p",{},[17,18,22],"a",{"href":19,"rel":20},"https://sdutvincirobot.feishu.cn/wiki/D50twQJ2UiVvaDky8Sic3aPOnEh",[21],"nofollow","Basic Vision Algorithm - OpenCV Implementation",[10,24,26],{"id":25},"cv_bridge","CV_Bridge",[14,28,29],{},"cv_bridge Wikipedia Introduction:",[14,31,32],{},[17,33,34],{"href":34,"rel":35},"https://wiki.ros.org/cv_bridge",[21],[14,37,38],{},[17,39,40],{"href":40,"rel":41},"https://index.ros.org/p/cv_bridge/",[21],[14,43,44],{},"ROS2 Humble's cv_bridge repository link (be sure to select the corresponding version branch):",[14,46,47],{},[17,48,49],{"href":49,"rel":50},"https://github.com/ros-perception/vision_opencv/tree/humble",[21],[14,52,53,58],{},[54,55],"img",{"alt":56,"src":57},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1953.webp",[54,59],{"alt":56,"src":60},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1954.webp",[62,63,65],"h4",{"id":64},"install","Install",[14,67,68,69,74],{},"Pre-compile OpenCV4 with CUDA in advance. See ",[17,70,73],{"href":71,"rel":72},"https://sdutvincirobot.feishu.cn/wiki/FQszwXIR5iQgCfk7pRwc9rYpnqg",[21],"Electrical Control Team Environment Setup Guide"," for details.",[76,77,78],"ol",{},[79,80,81],"li",{},"apt installation (not recommended)",[14,83,84],{},"Since ROS's built-in cv_bridge automatically links to ROS's own OpenCV version, we generally do not use the cv_bridge that comes with ROS2. Instead, we typically need to manually compile a custom cv_bridge.",[86,87,91],"pre",{"className":88,"code":89,"language":90,"meta":56,"style":56},"language-cmake shiki shiki-themes github-light github-dark","\n# 通用命令\nsudo apt install ros-\u003Cros2-distro>-vision-opencv\n\n# ROS2 Humble\nsudo apt install ros-humble-vision-opencv\n\n# ROS2 Jazzy\nsudo apt install ros-jazzy-vision-opencv\n","cmake",[92,93,94,103,110,117,122,128,134,139,145],"code",{"__ignoreMap":56},[95,96,99],"span",{"class":97,"line":98},"line",1,[95,100,102],{"emptyLinePlaceholder":101},true,"\n",[95,104,106],{"class":97,"line":105},2,[95,107,109],{"class":108},"sJ8bj","# 通用命令\n",[95,111,113],{"class":97,"line":112},3,[95,114,116],{"class":115},"sVt8B","sudo apt install ros-\u003Cros2-distro>-vision-opencv\n",[95,118,120],{"class":97,"line":119},4,[95,121,102],{"emptyLinePlaceholder":101},[95,123,125],{"class":97,"line":124},5,[95,126,127],{"class":108},"# ROS2 Humble\n",[95,129,131],{"class":97,"line":130},6,[95,132,133],{"class":115},"sudo apt install ros-humble-vision-opencv\n",[95,135,137],{"class":97,"line":136},7,[95,138,102],{"emptyLinePlaceholder":101},[95,140,142],{"class":97,"line":141},8,[95,143,144],{"class":108},"# ROS2 Jazzy\n",[95,146,148],{"class":97,"line":147},9,[95,149,150],{"class":115},"sudo apt install ros-jazzy-vision-opencv\n",[76,152,153],{"start":105},[79,154,155],{},"Source code compilation and installation (recommended)",[14,157,158],{},"This tutorial uses Jazzy as an example.",[14,160,161,162,165,166,169,170,173,174,176,177,179],{},"First, clone the repository. You can clone the ",[92,163,164],{},"jazzy",", ",[92,167,168],{},"humble",", or ",[92,171,172],{},"rolling"," branches — any ROS2 version should work without major changes. However, since the official ",[92,175,164],{}," branch hasn't been released yet, I'll just clone the default ",[92,178,172],{}," branch.",[14,181,182],{},[54,183],{"alt":56,"src":184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1955.webp",[14,186,187],{},"Create a new folder.",[86,189,191],{"className":88,"code":190,"language":90,"meta":56,"style":56},"mkdir ~/ros2_ws/src\ncd ~/ros2_ws/src\n\n# 克隆源码\ngit clone https://github.com/ros-perception/vision_opencv.git\ncd vision_opencv\n\n# 如果是humble建议:\ngit checkout humble\n",[92,192,193,198,203,207,212,217,222,226,231],{"__ignoreMap":56},[95,194,195],{"class":97,"line":98},[95,196,197],{"class":115},"mkdir ~/ros2_ws/src\n",[95,199,200],{"class":97,"line":105},[95,201,202],{"class":115},"cd ~/ros2_ws/src\n",[95,204,205],{"class":97,"line":112},[95,206,102],{"emptyLinePlaceholder":101},[95,208,209],{"class":97,"line":119},[95,210,211],{"class":108},"# 克隆源码\n",[95,213,214],{"class":97,"line":124},[95,215,216],{"class":115},"git clone https://github.com/ros-perception/vision_opencv.git\n",[95,218,219],{"class":97,"line":130},[95,220,221],{"class":115},"cd vision_opencv\n",[95,223,224],{"class":97,"line":136},[95,225,102],{"emptyLinePlaceholder":101},[95,227,228],{"class":97,"line":141},[95,229,230],{"class":108},"# 如果是humble建议:\n",[95,232,233],{"class":97,"line":147},[95,234,235],{"class":115},"git checkout humble\n",[14,237,238],{},"Install dependencies",[86,240,242],{"className":88,"code":241,"language":90,"meta":56,"style":56},"sudo apt install python3-numpy\nsudo apt install libboost-python-dev\n",[92,243,244,249],{"__ignoreMap":56},[95,245,246],{"class":97,"line":98},[95,247,248],{"class":115},"sudo apt install python3-numpy\n",[95,250,251],{"class":97,"line":105},[95,252,253],{"class":115},"sudo apt install libboost-python-dev\n",[14,255,256],{},"Modify the CMakeLists of cv_bridge",[14,258,259],{},[54,260],{"alt":56,"src":261},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1956.webp",[14,263,264,265,268,269,272],{},"Change the original ",[92,266,267],{},"find_package(OpenCV 4 QUIET)"," to an exact match version, and add the ",[92,270,271],{},"EXACT"," parameter:",[14,274,275],{},"EXACT means that if an exact version is not found, CMake will report an error and abort the build.",[14,277,278],{},[54,279],{"alt":56,"src":280},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1957.webp",[86,282,284],{"className":88,"code":283,"language":90,"meta":56,"style":56},"find_package(OpenCV 4.11 EXACT QUIET\n  COMPONENTS\n    opencv_core\n    opencv_imgproc\n    opencv_imgcodecs\n  CONFIG\n)\n",[92,285,286,295,300,305,310,315,320],{"__ignoreMap":56},[95,287,288,292],{"class":97,"line":98},[95,289,291],{"class":290},"szBVR","find_package",[95,293,294],{"class":115},"(OpenCV 4.11 EXACT QUIET\n",[95,296,297],{"class":97,"line":105},[95,298,299],{"class":115},"  COMPONENTS\n",[95,301,302],{"class":97,"line":112},[95,303,304],{"class":115},"    opencv_core\n",[95,306,307],{"class":97,"line":119},[95,308,309],{"class":115},"    opencv_imgproc\n",[95,311,312],{"class":97,"line":124},[95,313,314],{"class":115},"    opencv_imgcodecs\n",[95,316,317],{"class":97,"line":130},[95,318,319],{"class":115},"  CONFIG\n",[95,321,322],{"class":97,"line":136},[95,323,324],{"class":115},")\n",[86,326,328],{"className":88,"code":327,"language":90,"meta":56,"style":56},"cd ~/ros2_ws\n\n# 下面这三个根据情况三选一,一般是第一个colcon build --symlink-install\n\n# 如果你曾经没编译过\ncolcon build --symlink-install\n\n# 如果你只想编译cv_bridge\ncolcon build --symlink-install --packages-select cv_bridge\n\n# 如果你曾经编译过一遍,则需要下列命令\ncolcon build --symlink-install --packages-select cv_bridge --allow-overriding cv_bridge\n",[92,329,330,335,339,344,348,353,358,362,367,372,377,383],{"__ignoreMap":56},[95,331,332],{"class":97,"line":98},[95,333,334],{"class":115},"cd ~/ros2_ws\n",[95,336,337],{"class":97,"line":105},[95,338,102],{"emptyLinePlaceholder":101},[95,340,341],{"class":97,"line":112},[95,342,343],{"class":108},"# 下面这三个根据情况三选一,一般是第一个colcon build --symlink-install\n",[95,345,346],{"class":97,"line":119},[95,347,102],{"emptyLinePlaceholder":101},[95,349,350],{"class":97,"line":124},[95,351,352],{"class":108},"# 如果你曾经没编译过\n",[95,354,355],{"class":97,"line":130},[95,356,357],{"class":115},"colcon build --symlink-install\n",[95,359,360],{"class":97,"line":136},[95,361,102],{"emptyLinePlaceholder":101},[95,363,364],{"class":97,"line":141},[95,365,366],{"class":108},"# 如果你只想编译cv_bridge\n",[95,368,369],{"class":97,"line":147},[95,370,371],{"class":115},"colcon build --symlink-install --packages-select cv_bridge\n",[95,373,375],{"class":97,"line":374},10,[95,376,102],{"emptyLinePlaceholder":101},[95,378,380],{"class":97,"line":379},11,[95,381,382],{"class":108},"# 如果你曾经编译过一遍,则需要下列命令\n",[95,384,386],{"class":97,"line":385},12,[95,387,388],{"class":115},"colcon build --symlink-install --packages-select cv_bridge --allow-overriding cv_bridge\n",[14,390,391],{},"Verification:",[86,393,395],{"className":88,"code":394,"language":90,"meta":56,"style":56},"\n# 列出cv_bridge链接的opencv版本\nldd ./install/cv_bridge/lib/libcv_bridge.so | grep opencv \n",[92,396,397,401,406],{"__ignoreMap":56},[95,398,399],{"class":97,"line":98},[95,400,102],{"emptyLinePlaceholder":101},[95,402,403],{"class":97,"line":105},[95,404,405],{"class":108},"# 列出cv_bridge链接的opencv版本\n",[95,407,408],{"class":97,"line":112},[95,409,410],{"class":115},"ldd ./install/cv_bridge/lib/libcv_bridge.so | grep opencv\n",[14,412,413],{},"As shown in the image below, I have successfully linked to version 411, which is OpenCV 4.11.",[14,415,416],{},[54,417],{"alt":56,"src":418},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1958.webp",[14,420,421],{},"Next, configure the environment:",[86,423,425],{"className":88,"code":424,"language":90,"meta":56,"style":56},"vim ~/.bashrc\n",[92,426,427],{"__ignoreMap":56},[95,428,429],{"class":97,"line":98},[95,430,424],{"class":115},[14,432,433,434,437],{},"Add the following sentence to the line below ",[92,435,436],{},"source /opt/ros/jazzy/setup.bash",":",[86,439,441],{"className":88,"code":440,"language":90,"meta":56,"style":56},"source ~/ros2_ws/install/setup.bash\n",[92,442,443],{"__ignoreMap":56},[95,444,445],{"class":97,"line":98},[95,446,440],{"class":115},[14,448,449,452],{},[92,450,451],{},":wq"," saved",[14,454,455],{},"Installation and environment setup complete.",[457,458,459],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":56,"searchDepth":105,"depth":105,"links":461},[462,463],{"id":12,"depth":112,"text":5},{"id":25,"depth":112,"text":26},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","20",20000000,"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/ch20-OpenCV",false,null,"en-US","en-us",{},{"title":5,"description":56},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","fhNKmEzHTSISgeljNEAzPCg4r7_MdznGll8tRO9Go7A",[484,490,496,502,508,514,520,526,532,538,544,550,556,562,568,574,580,586,591,597,602,608,614,620,626,632,638,644,650,656,662,668,674,680,686,692,698,704,710,716,722,728,734,740,746,752,758,764,770,776,782,788,789,795,801,807,813,819,825,831],{"path":485,"stem":486,"title":487,"date":467,"chapter":488,"chapterSort":489,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2","1",1000000,{"path":491,"stem":492,"title":493,"date":467,"chapter":494,"chapterSort":495,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":497,"stem":498,"title":499,"date":467,"chapter":500,"chapterSort":501,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":503,"stem":504,"title":505,"date":467,"chapter":506,"chapterSort":507,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":509,"stem":510,"title":511,"date":467,"chapter":512,"chapterSort":513,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":515,"stem":516,"title":517,"date":467,"chapter":518,"chapterSort":519,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":521,"stem":522,"title":523,"date":467,"chapter":524,"chapterSort":525,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":527,"stem":528,"title":529,"date":467,"chapter":530,"chapterSort":531,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":533,"stem":534,"title":535,"date":467,"chapter":536,"chapterSort":537,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":539,"stem":540,"title":541,"date":467,"chapter":542,"chapterSort":543,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":545,"stem":546,"title":547,"date":467,"chapter":548,"chapterSort":549,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":551,"stem":552,"title":553,"date":467,"chapter":554,"chapterSort":555,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":557,"stem":558,"title":559,"date":467,"chapter":560,"chapterSort":561,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":563,"stem":564,"title":565,"date":467,"chapter":566,"chapterSort":567,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":569,"stem":570,"title":571,"date":467,"chapter":572,"chapterSort":573,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":575,"stem":576,"title":577,"date":467,"chapter":578,"chapterSort":579,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":581,"stem":582,"title":583,"date":467,"chapter":584,"chapterSort":585,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":587,"stem":588,"title":553,"date":467,"chapter":589,"chapterSort":590,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":592,"stem":593,"title":594,"date":467,"chapter":595,"chapterSort":596,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":598,"stem":599,"title":553,"date":467,"chapter":600,"chapterSort":601,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":603,"stem":604,"title":605,"date":467,"chapter":606,"chapterSort":607,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":609,"stem":610,"title":611,"date":467,"chapter":612,"chapterSort":613,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":615,"stem":616,"title":617,"date":467,"chapter":618,"chapterSort":619,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":621,"stem":622,"title":623,"date":467,"chapter":624,"chapterSort":625,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":627,"stem":628,"title":629,"date":467,"chapter":630,"chapterSort":631,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":633,"stem":634,"title":635,"date":467,"chapter":636,"chapterSort":637,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":639,"stem":640,"title":641,"date":467,"chapter":642,"chapterSort":643,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":645,"stem":646,"title":647,"date":467,"chapter":648,"chapterSort":649,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":651,"stem":652,"title":653,"date":467,"chapter":654,"chapterSort":655,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":657,"stem":658,"title":659,"date":467,"chapter":660,"chapterSort":661,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":663,"stem":664,"title":665,"date":467,"chapter":666,"chapterSort":667,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":669,"stem":670,"title":671,"date":467,"chapter":672,"chapterSort":673,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":675,"stem":676,"title":677,"date":467,"chapter":678,"chapterSort":679,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":681,"stem":682,"title":683,"date":467,"chapter":684,"chapterSort":685,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":687,"stem":688,"title":689,"date":467,"chapter":690,"chapterSort":691,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":693,"stem":694,"title":695,"date":467,"chapter":696,"chapterSort":697,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":699,"stem":700,"title":701,"date":467,"chapter":702,"chapterSort":703,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":705,"stem":706,"title":707,"date":467,"chapter":708,"chapterSort":709,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":711,"stem":712,"title":713,"date":467,"chapter":714,"chapterSort":715,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":717,"stem":718,"title":719,"date":467,"chapter":720,"chapterSort":721,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":723,"stem":724,"title":725,"date":467,"chapter":726,"chapterSort":727,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":729,"stem":730,"title":731,"date":467,"chapter":732,"chapterSort":733,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":735,"stem":736,"title":737,"date":467,"chapter":738,"chapterSort":739,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":741,"stem":742,"title":743,"date":467,"chapter":744,"chapterSort":745,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":747,"stem":748,"title":749,"date":467,"chapter":750,"chapterSort":751,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":753,"stem":754,"title":755,"date":467,"chapter":756,"chapterSort":757,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":759,"stem":760,"title":761,"date":467,"chapter":762,"chapterSort":763,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":765,"stem":766,"title":767,"date":467,"chapter":768,"chapterSort":769,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":771,"stem":772,"title":773,"date":467,"chapter":774,"chapterSort":775,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":777,"stem":778,"title":779,"date":467,"chapter":780,"chapterSort":781,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":783,"stem":784,"title":785,"date":467,"chapter":786,"chapterSort":787,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":464,"stem":481,"title":5,"date":467,"chapter":465,"chapterSort":466,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},{"path":790,"stem":791,"title":792,"date":467,"chapter":793,"chapterSort":794,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":796,"stem":797,"title":798,"date":467,"chapter":799,"chapterSort":800,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":802,"stem":803,"title":804,"date":467,"chapter":805,"chapterSort":806,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":808,"stem":809,"title":810,"date":467,"chapter":811,"chapterSort":812,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":814,"stem":815,"title":816,"date":467,"chapter":817,"chapterSort":818,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":820,"stem":821,"title":822,"date":467,"chapter":823,"chapterSort":824,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":826,"stem":827,"title":828,"date":467,"chapter":829,"chapterSort":830,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":474},"/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":470,"stem":832,"title":833,"date":467,"chapter":475,"chapterSort":834,"docKey":469,"docRoot":470,"docTitle":471,"isWikiDoc":101,"isWikiIndex":101},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":836},[837,838,841,844,847],{"path":464,"localeSlug":477,"i18nKey":473},{"path":839,"localeSlug":840,"i18nKey":473},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch20-opencv","zh-hant",{"path":842,"localeSlug":843,"i18nKey":473},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch20-opencv","zh-hk",{"path":845,"localeSlug":846,"i18nKey":473},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch20-opencv","zh-tw",{"path":848,"localeSlug":849,"i18nKey":473},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch20-opencv","zh-cn",[464,480,839,480,842,480,845,480,848,480],1780671807656]