{"id":5299,"date":"2021-10-17T11:25:45","date_gmt":"2021-10-17T03:25:45","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=5299"},"modified":"2024-03-17T21:14:55","modified_gmt":"2024-03-17T13:14:55","slug":"%e6%9c%ba%e5%99%a8%e4%ba%ba%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9fros-%e6%a0%91%e8%8e%93%e6%b4%bepi4%e7%8e%af%e5%a2%83ubuntu18-04-ros-melodic","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=5299","title":{"rendered":"\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014\u6811\u8393\u6d3ePi4B+\u6fc0\u5149\u96f7\u8fbeSLAM\u5efa\u56fe\u73af\u5883\u642d\u5efa(Ubuntu20.04.3 + ROS Noetic)"},"content":{"rendered":"<p>\u4e4b\u524d\u5b66\u4e60ros\uff0cnvidia jetson nano\u677f\u5b50\u88c5\u7684ubuntu18.04\u7cfb\u7edf\u6bd4\u8f83\u6b63\u5e38\uff0c\u4f46\u662fpi4b\u7684\u677f\u5b50\u88c5\u7684raspberry\u7cfb\u7edf\u4f1a\u51fa\u73b0\u5404\u79cd\u4f9d\u8d56\u95ee\u9898\u3002\u6700\u8fd1\u60f3\u5145\u5206\u5229\u7528\u4e0b\u51e0\u5757Pi4B\u7684\u677f\u5b50\uff0c\u53cd\u590d\u8bd5\u4e86pi4\u5b89\u88c5\u5b98\u65b9\/\u975e\u5b98\u65b9\u7684ubuntu18.04.5+ROS Melodic\u7248\u672c\uff0c\u6700\u7ec8\u90fd\u4f1a\u5361\u5728map-server\u6216rviz\u7b49\u4f9d\u8d56\u4e0a\u3002\u6700\u7ec8\u7528Pi4B + Ubuntu20.04.3 + ROS Noetic + RpLidar\u5b89\u88c5\u6d4b\u8bd5\u6210\u529f\uff0c\u8bb0\u5f55\u4e00\u4e0b\u5b89\u88c5\u8fc7\u7a0b\u3002<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/PI4Brplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5383\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/PI4Brplidar.png\" alt=\"\" width=\"485\" height=\"295\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/PI4Brplidar.png 485w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/PI4Brplidar-300x182.png 300w\" sizes=\"(max-width: 485px) 100vw, 485px\" \/><\/a><\/p>\n<h2>\u4e00\u3001Ubuntu\u955c\u50cf\u70e7\u5236<\/h2>\n<p>\u51c6\u5907\u597dPI4B\u677f\u5b50\u3001SD\u5361\u3001USB\u8bfb\u5361\u5668\u3001\u663e\u793a\u5668\u3001\u65e0\u9650\u952e\u9f20\uff0c\u5916\u52a0\u4e00\u53f0\u70e7\u5236\u7528\u7684\u7535\u8111\uff0c\u8fd9\u91cc\u6211\u7528\u7684\u4e00\u4e2aubuntu\u7684\u5f00\u53d1\u672c\u3002<\/p>\n<h3>1.\u51c6\u5907\u70e7\u5236\u8f6f\u4ef6<\/h3>\n<h4>a.\u5b89\u88c5Raspberry Pi Imager<\/h4>\n<p>\u5b89\u88c5\u6811\u8393\u6d3e\u5b98\u65b9\u7684\u70e7\u5236\u8f6f\u4ef6Raspberry Pi Imager\uff0c\u6211\u7528\u7684\u672c\u8eab\u662flinux\uff0c\u53ef\u4ee5\u76f4\u63a5\u547d\u4ee4\u5b89\u88c5\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">sudo snap install rpi-imager<\/code><\/pre>\n<p>\u5176\u4ed6\u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u81ea\u884c\u4e0b\u8f7d\u5bf9\u5e94\u7248\u672c\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/downloads.raspberrypi.org\/imager\/imager_latest_amd64.deb\">Raspberry Pi Imager as a deb package<\/a><\/li>\n<li><a href=\"https:\/\/downloads.raspberrypi.org\/imager\/imager_latest.exe\">Raspberry Pi Imager for Windows<\/a><\/li>\n<li><a href=\"https:\/\/downloads.raspberrypi.org\/imager\/imager_latest.dmg\">Raspberry Pi Imager for macOS<\/a><\/li>\n<\/ul>\n<p>app\u5b89\u88c5\u5b8c\u662f\u6811\u8393\u6d3e\u7684icon\uff0c\u627e\u5230\u540e\u542f\u52a8\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5354\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager-1024x690.png\" alt=\"\" width=\"625\" height=\"421\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager-1024x690.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager-300x202.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager-768x517.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager-624x420.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/pi-imager.png 1348w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<h3>2.\u70e7\u5236\u955c\u50cf<\/h3>\n<h4>a.\u9009\u62e9\u955c\u50cf<\/h4>\n<p>\u70b9\u51fb\u201cCHOOSE OS\u201d\uff0c\u9009\u62e9\u201cOther general-purpose OS\u201d \u2014\u201cUbuntu\u201d\u2014\u201cUbuntu Server 20.04.3\u201d\uff0c\u9009\u4e2darm64\u7684\u7248\u672c\uff08\u4f1a\u81ea\u52a8\u4e0b\u8f7d\u5bf9\u5e94\u955c\u50cf\u6587\u4ef6\uff0c\u4e0d\u7528\u81ea\u5df1\u5355\u72ec\u4e0b\u8f7d\uff09\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5355\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64-1024x657.png\" alt=\"\" width=\"625\" height=\"401\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64-1024x657.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64-300x192.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64-768x493.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64-624x400.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-20-arm64.png 1160w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<h4>b.\u9009\u62e9SD\u5361<\/h4>\n<p>\u70b9\u51fb\u201cCHOOSE STOGAGE\u201d\uff0c\u9009\u62e9\u8981\u70e7\u5236\u7684SD\u5361\u540e\uff0c\u70b9\u51fb\u201cWRITE\u201d\u5373\u53ef\u3002<\/p>\n<p>*\u6ce8\u610f\uff1a\u8fd9\u91cc\u4e0b\u8f7d\u5e76\u70e7\u5236\u7684\u901f\u5ea6\u5f88\u6162\uff0c\u611f\u89c9\u81f3\u5c111-2\u4e2a\u5c0f\u65f6\u5de6\u53f3\uff0c\u5b9e\u5728\u71ac\u4e0d\u52a8\u4e86\u7761\u4e86\uff0c\u7b2c\u4e8c\u5929\u65e9\u4e0a\u8d77\u6765\u770b\u70e7\u5236\u5b8c\u6bd5\u4e86&#8230;<\/p>\n<h3>3.\u7cfb\u7edf\u521d\u59cb\u5316<\/h3>\n<h4>a.\u521d\u59cb\u5316\u5bc6\u7801<\/h4>\n<p>sd\u5361\u63d2\u5165pi4\uff0c\u63a5\u4e0a\u952e\u9f20\u3001\u663e\u793a\u5668\uff0c\u542f\u52a8\u7cfb\u7edf\uff0c\u521d\u59cb\u7528\u6237\u540d\u548c\u5bc6\u7801\u90fd\u662fubuntu\uff0c\u7b2c\u4e00\u6b21\u767b\u5f55\u4f1a\u5f3a\u5236\u4fee\u6539\u5bc6\u7801\u3002<\/p>\n<p>\u4f60\u4e5f\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u81ea\u5df1\u4e60\u60ef\u7684\u7528\u6237\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u6dfb\u52a0work\u7528\u6237\r\nsudo adduser -m work\r\n# \u6dfb\u52a0\u6743\u9650\r\nsudo vim \/etc\/sudoers\r\n  work ALL=(ALL) ALL\r\nsudo usermod -aG sudo,adm,dialout,cdrom,floppy,audio,dip,video,plugdev,lxd,netdev work\r\n# \u67e5\u770b\u6743\u9650\r\nid work\r\n# \u5207\u6362\u7528\u6237\r\nsu work<\/code><\/pre>\n<h4>b.\u5b89\u88c5\u684c\u9762<\/h4>\n<p>\u56e0\u4e3a\u5b89\u88c5\u7684\u662fserver\u7248\uff0c\u4e3a\u4e86\u65b9\u4fbf\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5b89\u88c5\u684c\u9762\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u66f4\u65b0\r\nsudo apt update\r\nsudo apt upgrade\r\n# \u5b89\u88c5\u684c\u9762\r\nsudo apt install -y ubuntu-desktop<\/code><\/pre>\n<h3>4.\u8fdc\u7a0b\u7ba1\u7406<\/h3>\n<h4>a.\u8fdc\u7a0b\u684c\u9762<\/h4>\n<p>\u8bbe\u7f6e\u91cc\u914d\u7f6ewiki\u4e4b\u540e\uff0c\u4ece<a href=\"https:\/\/www.nomachine.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u5b98\u7f51<\/a>\u4e0b\u8f7d\u5b89\u88c5<a href=\"https:\/\/www.nomachine.com\/download\/download&amp;id=115&amp;s=ARM\" target=\"_blank\" rel=\"noopener noreferrer\">nomachine arm64\u7248\u672c<\/a>\uff0c\u4e4b\u540e\u5c31\u53ef\u4ee5\u8131\u79bb\u663e\u793a\u5668\u548c\u952e\u9f20\uff0c\u901a\u8fc7\u8def\u7531\u5668\u67e5\u770bip\u540e\u76f4\u63a5ssh\u6216nomachine\u64cd\u4f5c\u5373\u53ef\u3002<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">sudo dpkg -i nomachine_7.6.2_3_arm64.deb <\/code><\/pre>\n<h4>b.\u5f02\u5730\u7ec4\u7f51<\/h4>\n<p>\u63a8\u8350\u4f7f\u7528teamviewer\u514d\u8d39\u7248\uff08\u975e\u5546\u4e1a\u7528\u9014\uff09\uff0c\u5f53\u7136\u4f60\u8fd8\u53ef\u4ee5\u5b89\u88c5<a href=\"https:\/\/www.zerotier.com\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZeroTier<\/a>\uff08\u81ea\u6d4b\u7a33\u5b9a\u6027\u6ca1\u6709teamviewer\u597d\uff09\uff0c\u767b\u5f55\u5e76\u521b\u5efa\u79c1\u6709\u7f51\u7edc\uff0c\u5728\u677f\u5b50\u91ccjoin\u540e\uff0c\u4f60\u5c31\u53ef\u4ee5\u5728\u975e\u5c40\u57df\u7f51\u76f4\u63a5\u94fe\u63a5\u5230\u677f\u5b50\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># linux\u4e0b\u4e00\u952e\u5b89\u88c5\r\ncurl -s https:\/\/install.zerotier.com | sudo bash\r\n# \u52a0\u5165\u81ea\u5df1\u521b\u5efa\u7684\u79c1\u6709\u7f51\u7edc\r\nzerotier-cli join a09acf02339e3f97 <\/code><\/pre>\n<h4>c.\u79d1\u5b66\u4e0a\u7f51<\/h4>\n<p>\u8bbe\u7f6e\u201cnetwork\u201d\u81ea\u52a8\u7f51\u7edc\u4ee3\u7406\uff0c\u914d\u7f6e.pac\u6587\u4ef6\u5730\u5740\uff0c\u4ee5\u907f\u514d\u540e\u8fb9\u67d0\u4e9b\u5305\u65e0\u6cd5\u4e0b\u8f7d\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u4e8c\u3001\u5b89\u88c5ROS Noetic<\/h2>\n<h3>1.\u5b89\u88c5ros noetic<\/h3>\n<p>\u56e0\u4e3amelodic\u4ec5\u652f\u630118.04\uff0cROS1\u91cc\u53ea\u6709noetic\u652f\u6301ubuntu20.04\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u5b89\u88c5noetic\u7248\u672c\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u914d\u7f6eros\u6e90(ustc\u7684\u6e90\u6700\u597d\u6700\u5feb)\r\n#sudo sh -c 'echo \"deb [arch=$(dpkg --print-architecture)] http:\/\/packages.ros.org\/ros\/ubuntu $(lsb_release -cs) main\" &gt; \/etc\/apt\/sources.list.d\/ros-latest.list'\r\nsudo sh -c '. \/etc\/lsb-release &amp;&amp; echo \"deb [arch=$(dpkg --print-architecture)] http:\/\/mirrors.ustc.edu.cn\/ros\/ubuntu\/ $DISTRIB_CODENAME main\" &gt; \/etc\/apt\/sources.list.d\/ros-latest.list'\r\n# \u6dfb\u52a0\u516c\u94a5\r\nsudo apt-key adv --keyserver 'hkp:\/\/keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654\r\n# \u6216  curl -s https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master\/ros.asc | sudo apt-key add -\r\n# \u5b89\u88c5ros\u684c\u9762\u7248\r\nsudo apt update\r\nsudo apt install ros-noetic-desktop   #\u684c\u9762\u5b8c\u6574\u7248-desktop-full\uff1b\u684c\u9762\u7248-desktop\uff1b\u57fa\u7840\u7248-ros-base\r\n# \u5b89\u88c5slam\u5305\r\nsudo apt install ros-noetic-slam-gmapping  ros-noetic-map-server\r\n\r\n\r\n# \u8bbe\u7f6e\u73af\u5883\r\necho \"source \/opt\/ros\/noetic\/setup.bash\" &gt;&gt; ~\/.bashrc\r\nsource ~\/.bashrc\r\n\r\n# \u5b89\u88c5\u7f16\u8bd1\u4f9d\u8d56\r\nsudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential \r\n# \u521d\u59cb\u5316 rosdep\r\nsudo apt install python3-rosdep\r\nsudo vim \/etc\/hosts\r\n    185.199.110.133  raw.githubusercontent.com\r\nsudo rosdep init\r\nrosdep update<\/code><\/pre>\n<h3>2.\u5b89\u88c5\u7f16\u8bd1\u73af\u5883\u5e76\u6d4b\u8bd5\u6fc0\u5149\u96f7\u8fbe<\/h3>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u51c6\u5907\u7f16\u8bd1\u76ee\u5f55\r\nmkdir -p ~\/catkin_ws\/src\r\ncd catkin_ws\/src\/\r\n# \u514b\u9686RPLIDAR ROS\u4ee3\u7801\u5e93\uff08\u8bb0\u5f97\u6dfb\u52a0\u677f\u5b50\u7684ssh key\u5230github\uff09\r\ngit clone git@github.com:robopeak\/rplidar_ros.git\r\n# \u7f16\u8bd1\r\ncd ~\/catkin_ws\r\ncatkin_make\r\n\r\n# source\r\necho \"source \/home\/work\/catkin_ws\/devel\/setup.bash\" &gt;&gt; ~\/.bashrc\r\nsource ~\/.bashrc\r\necho $ROS_PACKAGE_PATH\r\n\r\n# \u542f\u52a8\u6fc0\u5149\u96f7\u8fbe\u8282\u70b9\r\nroscore\r\nrosrun rplidar_ros rplidarNode\r\n\u6216\r\nroslaunch rplidar_ros view_rplidar.launch\r\n\r\n# \u67e5\u770b\u6fc0\u5149\u96f7\u8fbe\u6570\u636e\r\nrostopic list\r\nrostopic echo \/scan\r\n\r\n# PC\u53ef\u89c6\u5316\u70b9\u4e91\u6570\u636e\uff0c\u987b\u53bb\u6389rplidarNode\u7684\u542f\u52a8\r\nroscd rplidar_ros\/launch\/\r\ncp view_rplidar.launch view_rplidar_robot.launch # \u4fee\u6539robot\u6587\u4ef6\uff0c\u628arplidar.launch\u6ce8\u91ca\u6389\uff0c\u4ee5\u514dPC\u672c\u5730\u542f\u52a8rplidar\u8282\u8282\u70b9\r\nroslaunch rplidar_ros view_rplidar_robot.launch\r\n\r\n# \u67e5\u770btopic\r\nrostopic list\r\n# \u67e5\u770b\u8282\u70b9\u5173\u7cfb\r\nrqt_graph<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5380\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar-1024x553.png\" alt=\"\" width=\"625\" height=\"338\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar-1024x553.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar-300x162.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar-768x415.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar-624x337.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rplidar.png 1215w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u5f00\u542frviz\u540e\uff0c\u76f8\u6bd4\u4e8e\u5355\u72ec\u542f\u52a8rplidarNode\uff0c\u4f1a\u591a\u51fa\u51e0\u4e2atopic\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-view-rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5435\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-view-rplidar.png\" alt=\"\" width=\"525\" height=\"147\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-view-rplidar.png 525w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-view-rplidar-300x84.png 300w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<ul>\n<li>\/initialpose\uff1a\u521d\u59cb\u4f4d\u59ff<\/li>\n<li>\/move_base_simple\/goal\uff1a\u5168\u5c40\u8def\u5f84\u89c4\u5212\u76ee\u6807\u4f4d\u7f6e<\/li>\n<li>\/scan\uff1arplidar\u53d1\u5e03\u7684\u6fc0\u5149\u96f7\u8fbe\u626b\u63cf\u6570\u636e<\/li>\n<li>\/tf\u3001\/tf_static\uff1a\u7528\u4e8e\u6fc0\u5149\u96f7\u8fbe\u5750\u6807\u7cfb\u3001\u57fa\u5750\u6807\u7cfb\u3001\u91cc\u7a0b\u8ba1\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u76f8\u4e92\u53d8\u6362<\/li>\n<\/ul>\n<p>\u53ef\u4ee5\u770b\u5230rplidarNode\u53d1\u51fa\/scan\u96f7\u8fbe\u6570\u636etopic\uff1a<\/p>\n<h3><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5434\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar.png\" alt=\"\" width=\"993\" height=\"382\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar.png 993w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar-300x115.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar-768x295.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt_graph-view-rplidar-624x240.png 624w\" sizes=\"(max-width: 993px) 100vw, 993px\" \/><\/a><\/h3>\n<h3>3.\u6d4b\u8bd5slam\u5efa\u56fe<\/h3>\n<p>\u53c2\u8003\uff1a<a href=\"https:\/\/yanjingang.com\/blog\/?p=4303#SLAM\" target=\"_blank\" rel=\"noopener noreferrer\">\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014\u4f7f\u7528\u6fc0\u5149\u96f7\u8fbeRpLidar A1\u8fdb\u884cSLAM\u5b9a\u4f4d\u5efa\u56fe #\u56db\u3001\u4f7f\u7528\u6fc0\u5149\u96f7\u8fbe\u8fdb\u884cSLAM\u5b9a\u4f4d\u5efa\u56fe<\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5b9a\u4f4d\u4e0e\u5730\u56fe\u7ba1\u7406\u5de5\u5177\r\nsudo apt install ros-noetic-fake-localization ros-noetic-map-server \r\n# hector \u4e0d\u9700\u8981\u91cc\u7a0b\u8ba1\u6570\u636e\uff0c\u53ea\u6839\u636e\u6fc0\u5149\u4fe1\u606f\u5373\u53ef\u6784\u5efa\u5730\u56fe\r\nsudo apt install ros-noetic-hector-slam ros-noetic-hector-slam-launch \r\n# gmapping \u9700\u8981IMU+\u91cc\u7a0b\u8ba1+\u6fc0\u5149\u4fe1\u606f\u6784\u5efa\u5730\u56fe\r\nsudo apt install ros-noetic-gmapping ros-noetic-slam-gmapping\r\n# karto\r\nsudo apt install ros-noetic-open-karto ros-noetic-slam-karto\r\n\r\n# \u514b\u9686slam+\u5bfc\u822a\u4ee3\u7801\u5e93\r\ncd catkin_ws\/src\/\r\ngit clone git@github.com:yanjingang\/robot_navigation.git\r\n# \u7f16\u8bd1\r\ncd ~\/catkin_ws\r\ncatkin_make\r\n\r\n# SLAM\u5efa\u56fe\u6d4b\u8bd5\r\nroslaunch robot_navigation robot_slam_laser.launch\r\n# PC\u7aef\u53ef\u89c6\u5316\r\nroslaunch robot_navigation slam_rviz.launch\r\n\r\n# \u67e5\u770btopic\r\nrostopic list\r\n# \u67e5\u770b\u8282\u70b9\u5173\u7cfb\r\nrqt_graph\r\n\r\n# \u4fdd\u5b58\u5730\u56fe\r\nroscd robot_navigation\/maps\/\r\nrosrun map_server map_saver -f map<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5415\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar-1024x578.png\" alt=\"\" width=\"625\" height=\"353\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar-1024x578.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar-300x169.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar-768x434.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar-624x352.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam_rplidar.png 1859w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u5f00\u542fslam\u5efa\u56fe\u540e\uff0c\u76f8\u6bd4\u4e8eview_rplidar\uff0c\u4f1a\u591a\u51fa\u51e0\u4e2atopic\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-slam-rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5437\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-slam-rplidar.png\" alt=\"\" width=\"540\" height=\"272\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-slam-rplidar.png 540w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/topic-slam-rplidar-300x151.png 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><\/a><\/p>\n<ul>\n<li>\/initialpose\uff1a\u521d\u59cb\u4f4d\u59ff<\/li>\n<li><span style=\"color: #ff0000;\">\/map<span style=\"color: #000000;\">\u3001<\/span>\/map_metadata<\/span>\uff1ahector\u53d1\u5e03\u7684\u5730\u56fe\u6805\u683c\u6570\u636e\u3001\u5730\u56fe\u6570\u636eMeta<\/li>\n<li>\/move_base_simple\/goal\uff1a\u5168\u5c40\u8def\u5f84\u89c4\u5212\u76ee\u6807\u4f4d\u7f6e<\/li>\n<li><span style=\"color: #ff0000;\">\/poseupdate<span style=\"color: #000000;\">\u3001<\/span>\/slam_out_pose<\/span>\uff1ahector\u53d1\u5e03\u7684\u5f53\u524d\u673a\u5668\u4eba\u4f4d\u59ff\u4f30\u8ba1\uff08\u9ad8\u65af\u4f30\u8ba1\u3001\u65e0\u534f\u65b9\u5dee\u4e24\u79cd\uff09<\/li>\n<li>\/scan\uff1arplidar\u53d1\u5e03\u7684\u6fc0\u5149\u96f7\u8fbe\u626b\u63cf\u6570\u636e<\/li>\n<li><span style=\"color: #ff0000;\">\/syscommand<\/span>\uff1ahector\u8ba2\u9605\u7684\u7cfb\u7edf\u547d\u4ee4\uff08\u4f8b\u5982reset\u7b49\uff09<\/li>\n<li>\/tf\u3001\/tf_static\uff1a\u7528\u4e8e\u6fc0\u5149\u96f7\u8fbe\u5750\u6807\u7cfb\u3001\u57fa\u5750\u6807\u7cfb\u3001\u91cc\u7a0b\u8ba1\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u76f8\u4e92\u53d8\u6362<\/li>\n<\/ul>\n<p>\u53ef\u4ee5\u770b\u5230SLAM\u8282\u70b9hector_height_mapping\u76d1\u542c\u548c\u53d1\u5e03\u7684topic\u60c5\u51b5\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5440\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar.png\" alt=\"\" width=\"992\" height=\"387\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar.png 992w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar-300x117.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar-768x300.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-graph-slam-rplidar-624x243.png 624w\" sizes=\"(max-width: 992px) 100vw, 992px\" \/><\/a><\/p>\n<h3><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5438\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar.png\" alt=\"\" width=\"992\" height=\"387\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar.png 992w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar-300x117.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar-768x300.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/rqt-slam-rplidar-624x243.png 624w\" sizes=\"(max-width: 992px) 100vw, 992px\" \/><\/a><\/h3>\n<h2>\u4e09\u3001pi ros\u4e0earduino\u5e95\u76d8\u7684\u5bfc\u822a\u63a7\u5236<\/h2>\n<p>pi ros+arduino\u5e95\u76d8\u7684\u5bfc\u822a\u63a7\u5236\u539f\u7406\uff1a<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-5564\" title=\"ros-base-control\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ros-base-control-8.png\" sizes=\"(max-width: 535px) 100vw, 535px\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ros-base-control-8.png 535w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/ros-base-control-8-300x273.png 300w\" alt=\"\" width=\"535\" height=\"487\" \/><\/p>\n<h3>1.\u6d4b\u8bd5\u5bfc\u822a<\/h3>\n<p>\u9996\u5148\u6211\u4eec\u9700\u8981\u5148\u901a\u8fc7\u6d4b\u8bd5\u5bfc\u822a\u5305\u6765\u641e\u6e05\u695a\u201c\u5b9a\u4f4d-\u89c4\u5212-\u63a7\u5236\u201d\u76f8\u5173\u7684topic\u53ca\u53d1\u9001\u548c\u76d1\u542c\u5173\u7cfb\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5bfc\u822a\u529f\u80fd\u5305 \uff08\u5305\u542bmove_base\u5bfc\u822a+amcl\u5b9a\u4f4d+teb\u89c4\u5212+\u952e\u76d8\u63a7\u5236\u53d1\u9001vel_cmd\uff09\r\nsudo apt install ros-noetic-navigation  ros-noetic-teb-local-planner ros-noetic-teleop-twist-keyboard\r\n\r\n# pi\u4e0a\u542f\u52a8TEB planner\uff0c\u7528\u4e8e\u65e0\u5730\u56fe\u573a\u666f\u5bfc\u822a\u5e76\u5efa\u56fe\r\nroslaunch robot_navigation robot_slam_laser.launch planner:=teb\r\n# pc\u7aef\u542f\u52a8rviz\u67e5\u770b\u5efa\u56fe\u6570\u636e\u548c\u201c2D Nav Goal\u201d\u63a7\u5236\u673a\u5668\u4eba\u79fb\u52a8\r\nroslaunch robot_navigation slam_rviz.launch\r\n# pc\u952e\u76d8\u63a7\u5236\r\nrosrun teleop_twist_keyboard teleop_twist_keyboard.py\r\n\r\n# \u67e5\u770btopic\uff08hector\u2014slam\u8d1f\u8d23\u5efa\u56fe\uff0cmove_base\u8d1f\u8d23\u8def\u5f84\u89c4\u5212\uff0camcl\u8d1f\u8d23\u5b9a\u4f4d\uff09\r\nrostopic list\r\n    \/cmd_vel         # <span style=\"color: #ff0000;\">move_base\u53d1\u5e03\u7ed9\u5e95\u76d8\u7684\u79fb\u52a8\u901f\u5ea6\u547d\u4ee4<\/span>\r\n    \/initialpose     # <span style=\"color: #ff0000;\">amcl\u5b9a\u4f4d\u521d\u59cb\u4f4d\u59ff<\/span>\uff0c\u53ef\u901a\u8fc7rviz\u63a7\u5236\u680f\u7684\"2D Pose Estimate\"\u6309\u94ae\u6d4b\u8bd5\u4fee\u6b63\u6b64\u503c\r\n    \/map             # hector-slam\u53d1\u5e03\u7684\u5730\u56fe\u6805\u683c\u6570\u636e\uff0camcl\/move_base\u90fd\u4f1a\u8ba2\u9605\u7528\u4e8e\u5b9a\u4f4d\u548c\u8def\u5f84\u89c4\u5212\r\n    \/map_metadata    # hector-slam\u53d1\u5e03\u7684\u5730\u56fe\u6570\u636eMeta\r\n    \/move_base\/current_goal \r\n    \/move_base\/goal  # <span style=\"color: #ff0000;\">move_base\u76d1\u542c\u7684\u89c4\u5212\u76ee\u6807<\/span>\uff0c\u53ef\u901a\u8fc7rviz\u7684\u201c2D Nav Goal\u201d\u6309\u94ae\u6d4b\u8bd5\u53d1\u9001\r\n    \/move_base_simple\/goal   # \u540c\u4e0a\uff0c\u4f46\u662f\u975eaction\u63a5\u53e3\uff0c\u65e0\u6cd5\u8ffd\u8e2a\u76ee\u6807\u72b6\u6001\r\n    \/poseupdate      # hector-slam\u53d1\u5e03\u7684\u5f53\u524d\u673a\u5668\u4eba\u4f4d\u59ff\u4f30\u8ba1\uff08\u5177\u6709\u9ad8\u65af\u4f30\u8ba1\u7684\u4e0d\u786e\u5b9a\u6027\uff09\r\n    \/rosout\r\n    \/rosout_agg\r\n    \/scan            # rplidar\u53d1\u5e03\u7684\u6fc0\u5149\u96f7\u8fbe\u6570\u636e\r\n    \/slam_cloud\r\n    \/slam_out_pose   # hector-slam\u53d1\u5e03\u7684\u5f53\u524d\u673a\u5668\u4eba\u4f4d\u59ff\u4f30\u8ba1\uff08\u6ca1\u6709\u534f\u65b9\u5dee\uff09\r\n    \/syscommand      # hector-slam\u8ba2\u9605\u7684\u7cfb\u7edf\u547d\u4ee4\uff0c\u4f8b\u5982reset\r\n    \/tf              # \u7528\u4e8e\u6fc0\u5149\u96f7\u8fbe\u5750\u6807\u7cfb\u3001\u57fa\u5750\u6807\u7cfb\u3001\u91cc\u7a0b\u8ba1\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u76f8\u4e92\u53d8\u6362\r\n    \/tf_static      \r\n\r\n# \u67e5\u770b\u8282\u70b9\u5173\u7cfb\r\nrqt_graph\r\n\r\n# \u70b9\u51fbrviz\u63a7\u5236\u680f\u91cc\u7684\"2D Pose Estimate\"\u4fee\u6b63\u521d\u59cb\u4f4d\u59ff\u6309\u94ae\uff0c\u540c\u65f6\u76d1\u542c\u521d\u59cb\u4f4d\u59fftopic\uff0c\u53ef\u4ee5\u770b\u5230\u4fee\u6b63\u521d\u59cb\u4f4d\u59ff\u6570\u636e\r\nrostopic echo \/initialpose\r\n\u00a0   header: \r\n      seq: 0\r\n      stamp: \r\n        secs: 1637590180\r\n        nsecs: 619881730\r\n      frame_id: \"map\"\r\n    pose: \r\n      pose: \r\n        position: \r\n          x: 0.898611545563\r\n          y: -0.214766919613\r\n          z: 0.0\r\n        orientation: \r\n          x: 0.0\r\n          y: 0.0\r\n          z: 0.364361599826\r\n          w: 0.931257550075\r\n      covariance: [0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.06853892326654787]\r\n    ---\r\n\r\n# \u70b9\u51fbrviz\u63a7\u5236\u680f\u91cc\u7684\"2D Nav Goal\"\u8bbe\u5b9a\u5bfc\u822a\u76ee\u6807\u6309\u94ae\uff0c\u540c\u65f6\u76d1\u542c\u5bf9\u5e94topic\uff0c\u53ef\u4ee5\u770b\u5230\u4fee\u6b63\u521d\u59cb\u4f4d\u59ff\u6570\u636e\r\nrostopic echo \/move_base\/goal\r\n    header: \r\n      seq: 2\r\n      stamp: \r\n        secs: 1637592510\r\n        nsecs: 186612710\r\n      frame_id: ''\r\n    goal_id: \r\n      stamp: \r\n        secs: 0\r\n        nsecs:         0\r\n      id: ''\r\n    goal: \r\n      target_pose: \r\n        header: \r\n          seq: 2\r\n          stamp: \r\n            secs: 1637592510\r\n            nsecs: 182121126\r\n          frame_id: \"map\"\r\n        pose: \r\n          position: \r\n            x: 0.610744893551\r\n            y: 0.824579000473\r\n            z: 0.0\r\n          orientation: \r\n            x: 0.0\r\n            y: 0.0\r\n            z: 0.564671369508\r\n            w: 0.825315845272\r\n    ---\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5446\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph-1024x339.png\" alt=\"\" width=\"625\" height=\"207\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph-1024x339.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph-300x99.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph-768x254.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph-624x207.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/slam-planner-rosgraph.png 1248w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u622a\u6b62\u5230\u8fd9\u91cc\uff0c\u6211\u4eec\u57fa\u672c\u5f04\u660e\u767d\u4e86\u201cslam-\u5b9a\u4f4d-\u89c4\u5212-\u63a7\u5236-\u5e95\u76d8\u201d\u4e4b\u95f4\u7684topic\u5173\u7cfb\uff0c\u4e5f\u8fdb\u884c\u4e86\u6a21\u62df\u7684\u5bfc\u822a\u6d4b\u8bd5\uff0c\u4f46\u662f\u76ee\u524d\u6211\u4eec\u7684ros\u8ddf\u5e95\u76d8\u4e4b\u95f4\u8fd8\u5e76\u6ca1\u6709\u5efa\u7acb\u8fde\u63a5\u548c\u8054\u52a8\uff08ros\u672a\u62ff\u5230\u5e95\u76d8\u7684\u91cc\u7a0b\u8ba1\u6570\u636e\uff0c\u4e5f\u6ca1\u6709\u628amove\u6307\u4ee4\u53d1\u9001\u7ed9\u5e95\u76d8\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u4e0b\u4e00\u6b65\u9700\u8981\u6253\u901api ros\u4e0earduino \u5e95\u76d8\u7684\u8fde\u63a5\uff0c\u5e76\u4f7fmove_base\u4e0earduino\u8054\u52a8\u8d77\u6765\u3002<\/p>\n<h3>2.\u63a7\u5236\u673a\u6784<\/h3>\n<h4>a.\u6253\u901api ros\u4e0earduino\u7684\u57fa\u672c\u901a\u8baf\u80fd\u529b<\/h4>\n<blockquote class=\"wp-embedded-content\" data-secret=\"jTbHhEbedF\"><p><a href=\"https:\/\/yanjingang.com\/blog\/?p=4065\">\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014Arduino\u6267\u884c\u673a\u6784<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u300a\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014Arduino\u6267\u884c\u673a\u6784\u300b\u2014\u95eb\u91d1\u94a2\u7684Blog\" src=\"https:\/\/yanjingang.com\/blog\/?p=4065&#038;embed=true#?secret=ZrWOsZ4D2p#?secret=jTbHhEbedF\" data-secret=\"jTbHhEbedF\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h4>b.base_control\u5e95\u76d8\u7684cmd_vel\u901a\u4fe1<\/h4>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u6dfb\u52a0base_control\r\nvim launch\/robot_lidar.launch\r\n  &lt;!-- base control --&gt;\r\n  &lt;include file=\"$(find robot_navigation)\/launch\/base_control.launch\" \/&gt;\r\n\r\n# \u7ed1\u5b9a\u5e95\u76d8\u7aef\u53e3\r\n vim launch\/base_control.launch\r\n&lt;launch&gt;\r\n    ...\r\n    &lt;!-- serial param --&gt;\r\n    &lt;arg name=\"port\" default=\"<span style=\"color: #ff0000;\">\/dev\/ttyACM0<\/span>\" \/&gt;\r\n    &lt;arg name=\"baudrate\" default=\"<span style=\"color: #ff0000;\">57600<\/span>\" \/&gt;\r\n    ...\r\n&lt;\/launch&gt;\r\n\r\n# \u7f16\u5199\u53cc\u5411\u901a\u4fe1\u6d4b\u8bd5\u4ee3\u7801\r\nvim script\/base_control.py\r\n#\u4ee3\u7801\u8be6\u89c1 https:\/\/github.com\/yanjingang\/robot_navigation\r\n\r\n# \u5355\u72ec\u9a8c\u8bc1sub\/pub\r\nrosrun rosserial_python serial_node.py _port:=\/dev\/ttyACM0\r\npython script\/base_control.py\r\n\r\n# \u5408\u5e76\u9a8c\u8bc1\u5efa\u56fe\r\nroslaunch robot_navigation base_control.launch\r\nroslaunch robot_navigation robot_slam_laser.launch planner:=teb\r\nroslaunch robot_navigation slam_rviz.launch   #pc\r\n\r\n# \u4f7f\u7528\u5730\u56fe\u5bfc\u822a\u6d4b\u8bd5\r\nroslaunch robot_navigation robot_navigation.launch\r\nroslaunch robot_navigation navigation_rviz.launch  #pc\r\n\r\n# \u67e5\u770b\u8282\u70b9\u548ctopic\u5173\u7cfb\r\nrqt_graph\r\n# \u67e5\u770btopic\r\nrostopic list\r\n    \/initialpose     # <span style=\"color: #ff0000;\">amcl\u5b9a\u4f4d\u521d\u59cb\u4f4d\u59ff<\/span>\uff0c\u53ef\u901a\u8fc7rviz\u63a7\u5236\u680f\u7684\"2D Pose Estimate\"\u6309\u94ae\u6d4b\u8bd5\u4fee\u6b63\u6b64\u503c\r\n\u00a0   \/amcl\/parameter_descriptions\r\n    \/amcl\/parameter_updates\r\n    \/amcl_pose      # <span style=\"color: #ff0000;\">amcl\u53d1\u5e03\u7684\u673a\u5668\u4eba\u5728\u5730\u56fe\u4e2d\u7684\u4f4d\u59ff\u4f30\u8ba1<\/span>\uff0c\u5e26\u6709\u534f\u65b9\u5dee\u4fe1\u606f\r\n    \/clicked_point\r\n    \/cmd_vel         # <span style=\"color: #ff0000;\">move_base\u53d1\u5e03\u7ed9\u5e95\u76d8\u7684\u79fb\u52a8\u901f\u5ea6\u547d\u4ee4<\/span>\r\n    \/debug\r\n    \/diagnostics\r\n    \/map             # amcl\u8ba2\u9605\u7684\u5730\u56fe\u6805\u683c\u6570\u636e\uff0c\u7528\u4e8e\u5b9a\u4f4d\u548c\u8def\u5f84\u89c4\u5212\r\n    \/map_metadata    # \u5730\u56fe\u6570\u636eMeta\r\n    \/map_updates\r\n    \/move_base\/DWAPlannerROS\/cost_cloud\r\n    \/move_base\/DWAPlannerROS\/global_plan\r\n    \/move_base\/DWAPlannerROS\/local_plan\r\n    \/move_base\/DWAPlannerROS\/trajectory_cloud\r\n    \/move_base\/GlobalPlanner\/parameter_descriptions\r\n    \/move_base\/GlobalPlanner\/parameter_updates\r\n    \/move_base\/GlobalPlanner\/plan\r\n    \/move_base\/GlobalPlanner\/potential\r\n    \/move_base\/GlobalPlanner\/potential_updates\r\n    \/move_base\/TebLocalPlannerROS\/global_plan\r\n    \/move_base\/TebLocalPlannerROS\/local_plan\r\n    \/move_base\/TebLocalPlannerROS\/obstacles\r\n    \/move_base\/TebLocalPlannerROS\/parameter_descriptions\r\n    \/move_base\/TebLocalPlannerROS\/parameter_updates\r\n    \/move_base\/TebLocalPlannerROS\/teb_feedback\r\n    \/move_base\/TebLocalPlannerROS\/teb_markers\r\n    \/move_base\/TebLocalPlannerROS\/teb_poses\r\n    \/move_base\/TebLocalPlannerROS\/via_points\r\n    \/move_base\/cancel\r\n    \/move_base\/current_goal\r\n    \/move_base\/feedback\r\n    \/move_base\/global_costmap\/costmap\r\n    \/move_base\/global_costmap\/costmap_updates\r\n    \/move_base\/global_costmap\/footprint\r\n    \/move_base\/global_costmap\/inflation_layer\/parameter_descriptions\r\n    \/move_base\/global_costmap\/inflation_layer\/parameter_updates\r\n    \/move_base\/global_costmap\/obstacle_layer\/clearing_endpoints\r\n    \/move_base\/global_costmap\/obstacle_layer\/parameter_descriptions\r\n    \/move_base\/global_costmap\/obstacle_layer\/parameter_updates\r\n    \/move_base\/global_costmap\/parameter_descriptions\r\n    \/move_base\/global_costmap\/parameter_updates\r\n    \/move_base\/global_costmap\/static_layer\/parameter_descriptions\r\n    \/move_base\/global_costmap\/static_layer\/parameter_updates\r\n    \/move_base\/goal  # <span style=\"color: #ff0000;\">move_base\u76d1\u542c\u7684\u89c4\u5212\u76ee\u6807<\/span>\uff0c\u53ef\u901a\u8fc7rviz\u7684\u201c2D Nav Goal\u201d\u6309\u94ae\u6d4b\u8bd5\u53d1\u9001\r\n    \/move_base\/local_costmap\/costmap\r\n    \/move_base\/local_costmap\/costmap_updates\r\n    \/move_base\/local_costmap\/footprint\r\n    \/move_base\/local_costmap\/obstacle_layer\/parameter_descriptions\r\n    \/move_base\/local_costmap\/obstacle_layer\/parameter_updates\r\n    \/move_base\/local_costmap\/parameter_descriptions\r\n    \/move_base\/local_costmap\/parameter_updates\r\n    \/move_base\/local_costmap\/static_layer\/parameter_descriptions\r\n    \/move_base\/local_costmap\/static_layer\/parameter_updates\r\n    \/move_base\/parameter_descriptions\r\n    \/move_base\/parameter_updates\r\n    \/move_base\/result\r\n    \/move_base\/status\r\n    \/move_base_simple\/goal   # \u540c\u4e0a\uff0c\u4f46\u662f\u975eaction\u63a5\u53e3\uff0c\u65e0\u6cd5\u8ffd\u8e2a\u76ee\u6807\u72b6\u6001\r\n    \/odom\r\n    \/particlecloud   # <span style=\"color: #ff0000;\">amcl\u53d1\u5e03\u7684 \u7c92\u5b50\u6ee4\u6ce2\u5668\u7ef4\u62a4\u7684\u4f4d\u59ff\u4f30\u8ba1\u96c6\u5408<\/span>\r\n    \/path_point\r\n    \/rosout\r\n    \/rosout_agg\r\n    \/scan            # rplidar\u53d1\u5e03\u7684\u6fc0\u5149\u96f7\u8fbe\u6570\u636e\r\n    \/tf              # \u7528\u4e8e\u6fc0\u5149\u96f7\u8fbe\u5750\u6807\u7cfb\u3001\u57fa\u5750\u6807\u7cfb\u3001\u91cc\u7a0b\u8ba1\u5750\u6807\u7cfb\u4e4b\u95f4\u7684\u76f8\u4e92\u53d8\u6362\r\n    \/tf_static\r\n# \u67e5\u770bbase_control\u53d1\u9001\u7684\u8f6e\u901f\u6570\u636e\r\nrostopic echo \/odom\r\n\r\n# \u6d4b\u8bd5\"2D Nav Goal\"\uff0c\u67e5\u770bbase_control\u6536\u5230\u7684\u6307\u4ee4\u6570\u636e\r\nrostopic echo \/cmd_vel\r\n    linear: \r\n      x: 0.0\r\n      y: 0.0\r\n      z: 0.0\r\n    angular: \r\n      x: 0.0\r\n      y: 0.0\r\n      z: 0.0\r\n    ---\r\nrobot_navigation.launch\u4e0b\u80fd\u770b\u5230base_control.py\u91cc\u6536\u5230\u7684\/cmd_vel\r\n    [INFO] [1638249681.414300]: get cmd data:linear: \r\n      x: 0.10077160733559222\r\n      y: 0.0\r\n      z: 0.0\r\n    angular: \r\n      x: 0.0\r\n      y: 0.0\r\n      z: -0.19502660300177715<\/code><\/pre>\n<p>\u5404\u8282\u70b9\u7684\u5173\u7cfb\u5982\u4e0b\u56fe\uff1a<\/p>\n<ul>\n<li>rplidar\u8282\u70b9\u53d1\u5e03\/scan\uff0cmapserver\u8282\u70b9\u53d1\u5e03\/map\uff1b<\/li>\n<li>amcl\u5b9a\u4f4d\u8282\u70b9\u8ba2\u9605\u4e86\u4e0a\u8ff0topic\u4ee5\u53ca\u521d\u59cb\u4f4d\u59ff\/initialpose\uff0c\u5e76\u53d1\u5e03\u673a\u5668\u4eba\u4f4d\u59ff\u4f30\u8ba1\/amcl_pose\uff1b<\/li>\n<li>movebase\u5bfc\u822a\u8282\u70b9\u8ba2\u9605\u4e86\/scan\u548c\/map\u4ee5\u53ca\u89c4\u5212\u76ee\u6807\u540e\uff0c\u53d1\u5e03\/cmd_vel\u8fd0\u52a8\u6307\u4ee4\uff1b<\/li>\n<li>serial\u5e95\u76d8\u8282\u70b9\u76d1\u542c\/cmd_vel\u6307\u4ee4\u5e76\u6267\u884c\u8fd0\u52a8\uff0c\u540c\u65f6\u53d1\u5e03debug\u4fe1\u606f\u7ed9base_control\uff1b<\/li>\n<li>base_control\u76d1\u542c\u5e95\u76d8\u7684\/debug\uff0c\u5e76\u53d1\u5e03\u5e95\u76d8\/odom\u91cc\u7a0b\u8ba1\u4fe1\u606f\u7ed9movebase\u8282\u70b9\u4ee5\u5e2e\u52a9\u5b9a\u4f4d\uff1b<\/li>\n<\/ul>\n<h4><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5545\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph-1024x590.png\" alt=\"\" width=\"625\" height=\"360\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph-1024x590.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph-300x173.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph-768x443.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/navigation-rosgraph-624x360.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/h4>\n<h4>c.\u5b8c\u5584arduino\u5e95\u76d8\u6307\u4ee4\u6267\u884c\u903b\u8f91<\/h4>\n<p><strong>\u65b9\u68481\uff1a<\/strong>Arduino\u76f4\u63a5\u76d1\u542cROS\u7684\/cmd_vel\uff0c\u5e76\u53d1\u9001\u901f\u5ea6\u4fe1\u606f\uff0cROS\u7aef\u7ec4\u7ec7\/odom<\/p>\n<p>\u8fd9\u91cc\u6211\u4eec\u7528arduino\u5e95\u76d8\u901a\u8fc7rosserial\u76f4\u63a5\u76d1\u542c\/cmd_vel\u5e76\u901a\u8fc7pid\u6a21\u62df\u4fe1\u53f7\u63a7\u5236\u7535\u673a\u8f6c\u52a8\u7684\u65b9\u5f0f\u5b9e\u73b0\uff0c\u5176\u4e2d\u7684\u6838\u5fc3\u5de5\u4f5c\u662f\u89e3\u6790Twist\u683c\u5f0f\u63a7\u5236\u6307\u4ee4\u4e2d\u7684\u7ebf\u901f\u5ea6\u548c\u89d2\u901f\u5ea6\uff0c\u63a7\u5236\u5e95\u76d8\u5b8c\u6210\u76f8\u5e94\u8fd0\u52a8\u3002<\/p>\n<p>stydy\/iot\/arduino\/pid\/pid.ino<\/p>\n<p>arduino\u677f\u5b50\u7b97\u529b\u6709\u9650\uff08\u5b58\u50a830k\uff0c\u5185\u5b582k\uff09\uff0c\u76d1\u542ccmd_vel\u540e\u5982\u679c\u8bd5\u56fe\u76f4\u63a5\u53d1\u9001\/odom\u4f1a\u63d0\u793a\u5185\u5b58\u4e0d\u8db3\uff0c\u6240\u4ee5\u6b64\u65b9\u6848\u7684\/odom\u9700\u8981\u653e\u5230ROS\u7aef\uff0c\u901a\u8fc7base_control.py\u76d1\u542c\u5e95\u76d8\u7684\/debug topic\u76d1\u63a7\u5e95\u76d8\u72b6\u6001\u5e76\u7ec4\u7ec7odom\u3002<\/p>\n<p><strong>\u65b9\u68482\uff1a<\/strong>\u6240\u6709topic\u903b\u8f91\u653e\u5728ROS \u8bbe\u5907\u4e0a\uff0c\u964d\u4f4eArduino\u7b97\u529b\u4e0d\u8db3\u7684\u538b\u529b<\/p>\n<p>\u4e0e\u65b9\u68481\u7684rosserial\u4e0d\u540c\u7684\u662f\uff0cros_arduino_bridge\u7684firmware\u5bf9PWM\u8ba1\u7b97\u3001\u7535\u673a\u7f16\u7801\u4fe1\u53f7\u8ba1\u6570\u3001\u4e0e\u4e0a\u4f4d\u673a\u7684\u6d88\u606f\u6536\u53d1\u8fdb\u884c\u4e86\u8f83\u597d\u7684\u5c01\u88c5\uff0c\u51e0\u4e4e\u901a\u8fc7\u914d\u7f6e\u5373\u53ef\u5b9e\u73b0arduino\u7aef\u903b\u8f91\uff1b\u4e0a\u4f4d\u673a\u7684base_control.py\u4e5f\u5c01\u88c5\u4e86\/cmd_vel\u76d1\u542c\u548c\/odom\u53d1\u9001\u903b\u8f91\uff0c\u5e76\u4e0efirmware\u901a\u8fc7\u88f8serial\u901a\u4fe1\u3002\u8fd9\u79cd\u65b9\u5f0f\u5bf9\u5e95\u76d8\u677f\u5b50\u7684\u7b97\u529b\u8981\u6c42\u8f83\u4f4e\u3002<\/p>\n<p>\u5177\u4f53\u65b9\u6cd5\u53c2\u8003\u4e0b\u6587\u7684\u201c\u4e09\u3001\u7f16\u7801\u7535\u673a\u7684\u63a7\u5236\u4e0e\u7f16\u7801\u5668\u6570\u636e\u8bfb\u53d6\u201d\u90e8\u5206<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"gKklb65dKo\"><p><a href=\"https:\/\/yanjingang.com\/blog\/?p=1302\">\u5c0f\u732a\u5b66arduino\u2014\u4f7f\u7528L298\u9a71\u52a8\u7248\u63a7\u5236\u4e24\u4e2a\u76f4\u6d41\u7535\u673a<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"\u300a\u5c0f\u732a\u5b66arduino\u2014\u4f7f\u7528L298\u9a71\u52a8\u7248\u63a7\u5236\u4e24\u4e2a\u76f4\u6d41\u7535\u673a\u300b\u2014\u95eb\u91d1\u94a2\u7684Blog\" src=\"https:\/\/yanjingang.com\/blog\/?p=1302&#038;embed=true#?secret=MeNQtPxuXc#?secret=gKklb65dKo\" data-secret=\"gKklb65dKo\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h4>d.\u5b8c\u5584base_control\u7684\u91cc\u7a0b\u8ba1\/odom\u8ba1\u7b97\u548c\u4e0a\u62a5\u903b\u8f91<\/h4>\n<p>arduino\u677f\u5b50\u7b97\u529b\u6709\u9650\uff08\u5b58\u50a830k\uff0c\u5185\u5b582k\uff09\uff0c\u76d1\u542ccmd_vel\u540e\u5185\u5b58\u4e0d\u8db3&#8230;odom\u91cc\u7a0b\u8ba1\u7684\u8ba1\u7b97\u53d1\u5e03\u5fc5\u987b\u653e\u5728\u4e0a\u4f4d\u673a\u4e0a\u3002<\/p>\n<p>odom\u4e3b\u8981\u5305\u542bpose\u5750\u6807\u548ctwist\u8fd0\u52a8\u901f\u5ea6\u4e24\u90e8\u5206\u4fe1\u606f\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom.jpg\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5569\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom-1024x576.jpg\" alt=\"\" width=\"625\" height=\"352\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom-1024x576.jpg 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom-300x169.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom-768x432.jpg 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom-624x351.jpg 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2021\/10\/odom.jpg 1520w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u540c\u4e0a\uff0c\u5efa\u8bae\u4f7f\u7528ros_arduino_bridge\uff0c\u5177\u4f53<span id=\"11\">\u8fde\u63a5\u65b9\u6cd5\uff1a<\/span><\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5586\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link.png\" sizes=\"(max-width: 782px) 100vw, 782px\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link.png 782w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link-300x258.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link-768x660.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2017\/08\/ga25-370-l298-arduino-link-624x536.png 624w\" alt=\"\" width=\"782\" height=\"672\" \/><\/a><\/p>\n<ul>\n<li>\u7535\u673a\u7535\u6e90+\u6b63-\u8d1f\u6781\uff08\u7ea2\/\u767d\u7ebf\uff09\uff1a\u63a5L298 output 1\/2\u62163\/4\u53e3\uff08\u4f9b\u7535+\u9a71\u52a8\u677f\u63a7\u5236\uff09<\/li>\n<li>L298 input\uff08\u63a7\u5236\u53e3\uff09\uff1a\u63a5arduino D7\/D8\u53e3\uff08\u7528\u4e8e\u7535\u673a\u8fd0\u52a8\u63a7\u5236\uff09<\/li>\n<li>\u7535\u673a\u7f16\u7801\u5668\u7535\u6e90+\u6b63-\u8d1f\u6781\uff08\u9ed1\/\u84dd\u7ebf\uff09\uff1a\u63a5arduino VIN+GND\u53e3\uff08\u4f9b\u7535\uff09<\/li>\n<li>\u7535\u673a\u7f16\u7801\u5668\u4fe1\u53f7\uff08\u9ec4\/\u7eff\u7ebf\uff09\uff1a\u63a5arduino D3\/D4\u53e3\uff08\u7528\u4e8e\u7535\u673a\u7f16\u7801\u5668\u4fe1\u606f\u8bfb\u53d6\uff09<\/li>\n<\/ul>\n<p>\u8bf4\u660e\u6587\u6863\u548c\u4ee3\u7801\u653e\u5230<a href=\"https:\/\/github.com\/yanjingang\/ros_arduino_bridge\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/yanjingang\/ros_arduino_bridge<\/a>\u4e86\uff0c\u5177\u4f53\u4f7f\u7528\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"hljs bash\"><span class=\"hljs-comment\"># pc\/pi\u5b89\u88c5 ros_arduino_bridge \u5e93<\/span>\r\n<span class=\"hljs-built_in\">cd<\/span> ~\/catkin_ws\/src\r\ngit <span class=\"hljs-built_in\">clone<\/span> git@github.com:yanjingang\/ros_arduino_bridge.git\r\n<span class=\"hljs-built_in\">cd<\/span> ~\/catkin_ws\r\ncatkin_make\r\n<span class=\"hljs-built_in\">source<\/span> ~\/catkin_ws\/devel\/setup.bash\r\n\r\n<span class=\"hljs-comment\">#arduino <\/span>\r\n<span class=\"hljs-comment\">#\u70e7\u5236OSArduinoBridge.ino\u5230\u677f\u5b50\u4e0a<\/span>\r\n\r\n<span class=\"hljs-comment\"># pc\/pi\u542f\u52a8\u6d4b\u8bd5<\/span>\r\nroslaunch ros_arduino_python arduino.launch\r\n\r\n<span class=\"hljs-comment\"># \u5c1d\u8bd5\u53d1\u5e03 Twist \u547d\u4ee4\uff1a<\/span>\r\nrostopic pub \/cmd_vel geometry_msgs\/Twist -r 1 -- <span class=\"hljs-string\">'[2.0, 0.0, 0.0]'<\/span> <span class=\"hljs-string\">'[0.0, 0.0, 1.8]'<\/span>\r\nrostopic pub -1 \/cmd_vel geometry_msgs\/Twist <span class=\"hljs-string\">'{ angular: {z: 1} }'<\/span>\r\n\r\n<span class=\"hljs-comment\"># \u67e5\u770b\u91cc\u7a0b\u8ba1\u6570\u636e\uff1a<\/span>\r\nrostopic <span class=\"hljs-built_in\">echo<\/span> \/odom\r\n\r\n<span class=\"hljs-comment\"># \u5982\u679c\u53d1\u5e03Twist\u540e\u91cc\u7a0b\u8ba1\u6570\u4e3a0\u6216\/odom\u5750\u6807\u4e0d\u53d8\uff0c\u68c0\u67e5\u4e0b\u7f16\u7801\u5668\u7684\u7535\u6e90\u548c\u4fe1\u53f7\u63a5\u7ebf\u662f\u5426\u6b63\u786e<\/span>\r\nget_encoder_counts: [0, 0]\r\n\r\n\r\n<code class=\"\"># \u4fee\u6539base_control\u914d\u7f6e\uff0c\u4f7f\u7528ros_arduino_python\u91cc\u7684base_control\r\nvim ~\/catkin_ws\/src\/robot_navigation\/launch\/robot_lidar.launch\r\n<\/code> &lt;!--include file=\"$(find robot_navigation)\/launch\/base_control.launch\"&gt;&lt;arg name=\"pub_imu\" value=\"$(arg pub_imu)\"\/&gt; &lt;\/include--&gt; &lt;node name=\"arduino\" pkg=\"ros_arduino_python\" type=\"arduino_node.py\" output=\"screen\"&gt; &lt;rosparam file=\"$(find ros_arduino_python)\/config\/my_arduino_params.yaml\" command=\"load\" \/&gt; &lt;\/node&gt; <code class=\"\"># \u4f7f\u7528\u5730\u56fe\u5bfc\u822a\u6d4b\u8bd5\r\nroslaunch robot_navigation robot_navigation.launch\r\nroslaunch robot_navigation navigation_rviz.launch  #pc\r\n\r\n<span class=\"hljs-comment\"># \u67e5\u770b\u6307\u4ee4\u548c\u91cc\u7a0b\u8ba1\u6570\u636e\u662f\u5426\u6b63\u5e38\uff1a\r\nrostopic <span class=\"hljs-built_in\">echo<\/span> \/cmd_vel<\/span>\r\nrostopic <span class=\"hljs-built_in\">echo<\/span> \/odom\r\n<\/code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>\u56db\u3001\u603b\u7ed3<\/h2>\n<p>\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u5168\u7a0b\u8fde\u63a5\u624b\u673a4G\u70ed\u70b9\uff0c\u9664\u4e86<code class=\"\">raw.githubusercontent.com<\/code>\u5b89\u88c5\u76f8\u5bf9\u987a\u7545\uff0c\u6240\u4ee5\u5982\u679c\u5927\u5bb6\u56e0\u4e3a\u5404\u79cd\u7f51\u7edc\u95ee\u9898\uff0c\u6ce8\u610f\u4e09\u79cd\u89e3\u51b3\u65b9\u6cd5\uff1a<\/p>\n<p>1.\u79d1\u5b66\u4e0a\u7f51\u907f\u514d\u6709\u4e9b\u57df\u540d\u4e0d\u80fd\u8bbf\u95ee<\/p>\n<p>2.\u624b\u673a4\/5G\u70ed\u70b9\u7f51\u901f\u66f4\u5feb\uff08\u5168\u90e8\u4e0b\u67652-3G\u7684\u6d41\u91cf\uff09<\/p>\n<p>3.\u57df\u540d\u5982\u679c\u600e\u4e48\u641e\u90fd\u4e0d\u884c\uff0c\u5c31\u5728\u5176\u4ed6\u673a\u5668ping\u51faIP\u5730\u5740\uff0c\u76f4\u63a5\u628aIP\u914d\u7f6e\u5230\/etc\/hosts\u4e2d\uff0c\u8df3\u8fc7DNS\u8fc7\u7a0b<\/p>\n<p>&nbsp;<\/p>\n<p>yan 21.10.17<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\uff1a<\/p>\n<p><a href=\"https:\/\/ubuntu.com\/tutorials\/how-to-install-ubuntu-desktop-on-raspberry-pi-4#2-prepare-the-sd-card\" target=\"_blank\" rel=\"noopener noreferrer\">How to install Ubuntu Desktop on Raspberry Pi 4<\/a><\/p>\n<p><a href=\"https:\/\/my.oschina.net\/houor\/blog\/4254292\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu Server LTS 20.04 \u5b89\u88c5\u684c\u9762<\/a><\/p>\n<p><a href=\"http:\/\/wiki.ros.org\/noetic\/Installation\" target=\"_blank\" rel=\"noopener noreferrer\">ROS Noetic installation instructions<\/a><\/p>\n<p><a href=\"https:\/\/mirror.tuna.tsinghua.edu.cn\/help\/ubuntu-ports\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u6e05\u534e\u5927\u5b66\u5f00\u6e90\u8f6f\u4ef6\u955c\u50cf\u7ad9-ubuntu arm<\/a><\/p>\n<p><span style=\"color: #999999;\"><a style=\"color: #999999;\" href=\"https:\/\/www.instructables.com\/Getting-Started-With-ROS-Melodic-on-Raspberry-Pi-4\/\" target=\"_blank\" rel=\"noopener noreferrer\">Getting Started With ROS Melodic on Raspberry Pi 4 Model B<\/a><\/span><\/p>\n<p><span style=\"color: #999999;\"><a style=\"color: #999999;\" href=\"http:\/\/old-releases.ubuntu.com\/releases\/bionic\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu 18.04 LTS (Bionic Beaver)<\/a><\/span><\/p>\n<p><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/220780137\" target=\"_blank\" rel=\"noopener noreferrer\">ROS\u5c0f\u8f66\u542f\u52a8\u529f\u80fd\u5305\u7f16\u5199<\/a><\/p>\n<p><a href=\"https:\/\/www.cnblogs.com\/shhu1993\/p\/6323699.html\" target=\"_blank\" rel=\"noopener noreferrer\">move_base\u4ee3\u7801\u5b66\u4e60\u4e00<\/a><\/p>\n<p><a href=\"https:\/\/www.bbird.club\/blog\/post\/2464\" target=\"_blank\" rel=\"noopener noreferrer\">ROS\u673a\u5668\u4ebaDiego 1#\u5236\u4f5c\uff08\u4e8c\uff09Base Controller&#8212;Rosserial_arduino<\/a><\/p>\n<p><a href=\"http:\/\/www.autolabor.com.cn\/book\/ROSTutorials\/di-5-zhang-ji-qi-ren-dao-hang\/51-tfzuo-biao-bian-huan.html\" target=\"_blank\" rel=\"noopener noreferrer\">TF\u5750\u6807\u53d8\u6362<\/a><\/p>\n<p><a href=\"https:\/\/blog.csdn.net\/u013794793\/article\/details\/79925371\" target=\"_blank\" rel=\"noopener noreferrer\">\u8bd1\uff1a\u5728ROS\u4e0a\u53d1\u5e03Odometry\u4fe1\u606f<\/a><\/p>\n<p><a href=\"https:\/\/www.i4k.xyz\/article\/weixin_44827364\/104156116\" target=\"_blank\" rel=\"noopener noreferrer\">ROS\u4e0eArduino\uff1a\u7528Twist\u6d88\u606f+\u7528\u952e\u76d8+\u7528Xbox one\u624b\u67c4 \u63a7\u5236\u5c0f\u8f66<\/a><\/p>\n<p><a href=\"http:\/\/www.autolabor.com.cn\/book\/ROSTutorials\/di-8-zhang-gou-jian-lun-shi-cha-fen-ji-qi-ren\/84-shu-mei-pai\/854-cheng-xu-she-ji-ce-lve-a-zi-shi-xian-02-dian-ji-zhuan-xiang-kong-zhi.html\" target=\"_blank\" rel=\"noopener noreferrer\">\u57fa\u4e8erosserial_arduino\u7684\u5e95\u76d8\u5b9e\u73b0_02\u7535\u673a\u8f6c\u5411\u63a7\u5236<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e4b\u524d\u5b66\u4e60ros\uff0cnvidia jetson nano\u677f\u5b50\u88c5\u7684ubuntu18.04\u7cfb\u7edf\u6bd4\u8f83\u6b63\u5e38\uff0c\u4f46\u662fpi4b\u7684 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[31,505,1005],"tags":[507,968,1001],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5299"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5299"}],"version-history":[{"count":3,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5299\/revisions"}],"predecessor-version":[{"id":8389,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5299\/revisions\/8389"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}