{"id":3989,"date":"2020-06-19T18:11:56","date_gmt":"2020-06-19T10:11:56","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=3989"},"modified":"2024-06-15T15:06:40","modified_gmt":"2024-06-15T07:06:40","slug":"%e6%9c%ba%e5%99%a8%e4%ba%ba%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9fros-ros2%e6%8e%a2%e7%b4%a2","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=3989","title":{"rendered":"\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014ROS2\u63a2\u7d22"},"content":{"rendered":"<p><span style=\"color: #010101;\">\u7b80\u5355\u70b9\u8bf4\uff0cROS2\u4e0eROS\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff1a<\/span><\/p>\r\n<ul>\r\n<li>\u53bb\u6389\u4e86master\u6539\u4e3a\u8282\u70b9\u81ea\u52a8\u53d1\u73b0\uff08\u652f\u6301\u591a\u673a\u5668\u4eba\u63a7\u5236\uff09\uff1b<\/li>\r\n<li>\u6570\u636e\u5206\u53d1\u4eceTCPROS\/UDPROS\u6539\u4e3aDDS\uff08\u652f\u6301QoS\uff09\uff1b<\/li>\r\n<li>\u589e\u52a0\u4e86windows\u3001Mac\u3001RTOS\u652f\u6301\uff1b<\/li>\r\n<li>\u6027\u80fd\uff08ROS2\u5c1a\u672a\u7a33\u5b9a\uff0c\u603b\u4f53\u6027\u80fd\u76ee\u524d\u6682\u65e0\u660e\u663e\u4f18\u52bf\uff09\uff1b<\/li>\r\n<\/ul>\r\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3991\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1.png\" alt=\"\" width=\"875\" height=\"534\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1.png 875w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1-300x183.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1-768x469.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/ros2-1-624x381.png 624w\" sizes=\"(max-width: 875px) 100vw, 875px\" \/><\/a><\/p>\r\n<p style=\"text-align: center;\">ROS1\/ROS2\u67b6\u6784\u56fe\u5bf9\u6bd4<\/p>\r\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image.jpg\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3992\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image.jpg\" alt=\"\" width=\"763\" height=\"491\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image.jpg 763w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image-300x193.jpg 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image-624x402.jpg 624w\" sizes=\"(max-width: 763px) 100vw, 763px\" \/><\/a> <a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image2-1.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-3993\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image2-1.png\" alt=\"\" width=\"625\" height=\"576\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image2-1.png 678w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image2-1-300x277.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Image2-1-624x575.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\r\n<p style=\"text-align: center;\">ROS1\/ROS2\u8ba2\u9605\/\u53d1\u5e03\u6a21\u578b\u5bf9\u6bd4<\/p>\r\n<h1>\u5b89\u88c5ROS2<\/h1>\r\n<p>ROS2\u53ef\u4ee5\u548cROS1\u5171\u5b58\u5728\u540c\u4e00\u53f0\u7535\u8111\u4e0a\uff08\u901a\u8fc7.bashrc\u63a7\u5236\u7528\u54ea\u4e2a\uff09\uff0c\u5b89\u88c5\u65b9\u6cd5\u548cROS1\u7c7b\u4f3c\uff1a<\/p>\r\n<p>\u53c2\u8003\uff1a<a href=\"https:\/\/docs.ros.org\/en\/galactic\/Installation\/Ubuntu-Install-Debians.html\" target=\"_blank\" rel=\"noopener\">Ubuntu (Debian) \u2014 ROS 2 Doc: Galactic<\/a>\uff08Galactic\u9700\u8981Ubuntu20\u7248\u672c\uff09<\/p>\r\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u8bbe\u7f6elocal\r\nlocale # check for UTF-8<br \/>sudo apt update &amp;&amp; sudo apt install locales<br \/>sudo locale-gen en_US en_US.UTF-8<br \/>sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8<br \/>export LANG=en_US.UTF-8<br \/>locale # verify settings\r\n\r\n# \u786e\u4fddUbuntu Universe\u5b58\u50a8\u5e93\u5df2\u542f\u7528<br \/>sudo apt install software-properties-common<br \/>sudo add-apt-repository universe<br \/># \u6dfb\u52a0ROS2 GPG\u5bc6\u94a5<br \/>sudo apt update &amp;&amp; sudo apt install curl -y<br \/>sudo curl -sSL https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master\/ros.key -o \/usr\/share\/keyrings\/ros-archive-keyring.gpg<br \/># \u6dfb\u52a0sources.list<br \/>echo \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/ros-archive-keyring.gpg] http:\/\/packages.ros.org\/ros2\/ubuntu $(. \/etc\/os-release &amp;&amp; echo $UBUNTU_CODENAME) main\" | sudo tee \/etc\/apt\/sources.list.d\/ros2.list &gt; \/dev\/null<br \/><br \/># \u5347\u7ea7cmake<br \/>pip config set global.index-url https:\/\/pypi.tuna.tsinghua.edu.cn\/simple<br \/>pip install pip -U<br \/>pip install cmake\r\n<span class=\"hljs-keyword\">export PATH=${PATH}:\/home\/work\/.local\/bin  # \u4f7f\u7528pip\u5b89\u88c5\u7684\u6700\u65b0\u7248cmake<\/span><br \/>\r\n# \u5b89\u88c5ros2 galactic\r\nsudo apt update    # \u66f4\u65b0apt\u5b58\u50a8\u5e93\u7f13\u5b58<br \/>sudo apt upgrade   # \u66f4\u65b0Ubuntu\u7cfb\u7edf\r\nsudo apt install ros-galactic-desktop python3-argcomplete python3-colcon-common-extensions<br \/><br \/># \u914d\u7f6e\u73af\u5883\r\necho \"source \/opt\/ros\/galactic\/setup.bash\" &gt;&gt; ~\/.bashrc<br \/>echo \"export ROS_DOMAIN_ID=110\" &gt;&gt; ~\/.bashrc<br \/># echo \"export ROS_LOCALHOST_ONLY=1\" &gt;&gt; ~\/.bashrc    # \u4e0d\u4e0e\u5c40\u57df\u7f51\u7684\u5176\u4ed6\u8bbe\u5907\u901a\u4fe1<span class=\"hljs-keyword\"><br \/>source<\/span> ~\/.bashrc<br \/># \u68c0\u67e5\u73af\u5883<br \/>printenv | grep -i ROS\r\n\r\n\r\n# \u6d4b\u8bd5demo\r\nmkdir -p ~\/ros2_ws\/src\r\ncd ~\/ros2_ws\/src\r\ngit <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/ros2\/demos.git\r\n<span class=\"hljs-built_in\">cd<\/span> ~\/ros2_ws\r\ncolcon build   # ros2\u4e0d\u7528catkin_make\u6539\u7528colcon\u4e86<br \/>colcon test    \r\n<span class=\"hljs-built_in\">source<\/span> install\/setup.bash<br \/>\r\nros2 run demo_nodes_cpp talker    #\u6e90\u7801\u53c2\u8003~\/ros2_ws\/src\/demos\/demo_nodes_cpp\r\n\u00a0 [INFO] [talker]: Publishing: 'Hello World: 1'\r\n\u00a0 [INFO] [talker]: Publishing: 'Hello World: 2'\r\n  [INFO] [talker]: Publishing: 'Hello World: 3'\r\nros2 run demo_nodes_py listener   #\u6e90\u7801\u53c2\u8003~\/ros2_ws\/src\/demos\/demo_nodes_py\r\n  [INFO] [listener]: I heard: [Hello World: 1]\r\n  [INFO] [listener]: I heard: [Hello World: 2]\r\n  [INFO] [listener]: I heard: [Hello World: 3]\r\n\r\n<\/span># \u521b\u5efa\u529f\u80fd\u5305\r\n#ros2 pkg <span class=\"hljs-built_in\">create<\/span> learning_ros2\r\n<\/code><\/pre>\r\n<h1>SLAM\u5efa\u56fe\u4e0e\u5bfc\u822a\u4eff\u771f\u6d4b\u8bd5<\/h1>\r\n<p>\u5b89\u88c5gazebo\u3001turtlebot3\u4eff\u771f\uff1a<\/p>\r\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5b89\u88c5gazebo<br \/>curl <span class=\"hljs-_\">-s<\/span>SL http:<span class=\"hljs-comment\">\/\/get.gazebosim.org | sh<\/span><br \/><br \/># \u4e0b\u8f7dturtlebot3\u6e90\u7801(\u540e\u8fb9\u5b66\u4e60\u548cgazebo models\u7528)\r\ncd ~\/project\r\ngit clone https:\/\/github.com\/ROBOTIS-GIT\/turtlebot3 -b galactic-devel    #-b\u9009\u62e9galactic-devel\u7684\u5206\u652f\r\ngit clone https:\/\/github.com\/ROBOTIS-GIT\/turtlebot3_msgs -b galactic-devel\r\ngit clone https:\/\/github.com\/ROBOTIS-GIT\/turtlebot3_simulations -b galactic-devel\r\n\r\n# \u5b89\u88c5turtlebot3\u53ca\u4f9d\u8d56  (\u6e90\u7801https:\/\/github.com\/ROBOTIS-GIT\/turtlebot3*)\r\nsudo apt install ros-galactic-turtlebot3* ros-galactic-gazebo-* ros-galactic-cartographer* ros-galactic-navigation2 ros-galactic-nav2-* python3-vcstool ros-galactic-lifecycle* ros-galactic-composition* ros-galactic-libg2o\r\n\r\n# \u914d\u7f6e\r\n<span class=\"hljs-built_in\"><span class=\"bash\">echo<\/span><\/span> <span class=\"hljs-string\"><span class=\"bash\">\"export TURTLEBOT3_MODEL=burger\"<\/span><\/span><span class=\"bash\"> &gt;&gt; ~\/.bashrc<\/span>\r\nsource <span class=\"bash\">~\/.bashrc<br \/><\/span>\r\n# \u590d\u5236turtlebot3\u6a21\u578b\u5230gazebo\u76ee\u5f55\r\nmkdir ~\/.gazebo\/models\r\ncp -r ~\/ros2_ws\/src\/turtlebot3_gazebo\/models\/* ~\/.gazebo\/models\/<\/code><\/pre>\r\n<p>\u5efa\u56fe&amp;\u5bfc\u822a\u4eff\u771f\u6d4b\u8bd5\uff1a<\/p>\r\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u6253\u5f00\u7b2c\u4e00\u4e2a\u7ec8\u7aef\uff0c\u8fd0\u884cgazebo\u73af\u5883\r\nros2 launch turtlebot3_gazebo turtlebot3_world.launch.py<br \/><br \/># \u6253\u5f00\u7b2c\u4e8c\u4e2a\u7ec8\u7aef\uff0c\u4f7f\u7528Cartographer\u8fdb\u884c\u5efa\u56fe<br \/>ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=<span class=\"hljs-keyword\">True<br \/><br \/># \u6253\u5f00\u7b2c\u4e09\u4e2a\u7ec8\u7aef\u8fd0\u884c\u952e\u76d8\u63a7\u5236\u8282\u70b9(w\/a\/s\/d)<br \/>ros2 run turtlebot3_teleop teleop_keyboard<br \/><br \/># \u7136\u540e\u4f60\u5c31\u80fd\u6109\u5feb\u7684\u63a7\u5236\u4eff\u771fturtlebot3\u5728\u4eff\u771f\u73af\u5883\u91cc\u5efa\u56fe\u4e86<\/span><\/code><\/pre>\r\n<p><img loading=\"lazy\" width=\"1024\" height=\"573\" class=\"wp-image-4018\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo-1024x573.png\" alt=\"\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo-1024x573.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo-300x168.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo-768x430.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo-624x349.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam-gazebo.png 1858w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\r\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam.gif\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-4022\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/slam.gif\" alt=\"\" width=\"800\" height=\"450\" \/><\/a><\/p>\r\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u4fdd\u5b58\u5730\u56fe\r\nmkdir ~\/ros2_ws\/map\r\nros2 run nav2_map_server map_saver -f ~\/ros2_ws\/map\/test\r\nll ~\/ros2_ws\/map\/\r\n    -rw-r--r-- 1 work work 41220 Jun 19 18:51 test.pgm\r\n    -rw-r--r-- 1 work work   145 Jun 19 18:51 test.yaml\r\n\r\n# \u5173\u95edcartographer\u548c\u952e\u76d8\u7a0b\u5e8f\uff0c\u6253\u5f00navigation2\u5bfc\u822a\u7a0b\u5e8f\r\nros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True  map:=\/home\/work\/ros2_ws\/map\/test.yaml\r\n\r\n#\u4e4b\u540e\u548cROS1\u4e2d\u7684\u64cd\u4f5c\u4e00\u81f4\uff0c\u5148\u4f7f\u75282D Pose Estimate\u5bf9\u673a\u5668\u4eba\u7684\u4f4d\u7f6e\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u4e4b\u540e\u5c31\u53ef\u4ee5\u75282D New Goal\u6307\u5b9a\u76ee\u6807\u8fdb\u884c\u5bfc\u822a\u4e86\u3002<\/code><\/pre>\r\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/nav.gif\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-4024\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/nav.gif\" alt=\"\" width=\"800\" height=\"450\" \/><\/a><\/p>\r\n<p>\u53c2\u8003\uff1a<\/p>\r\n<p><a href=\"https:\/\/www.guyuehome.com\/5522\" target=\"_blank\" rel=\"noopener noreferrer\">ROS2\u521d\u4f53\u9a8c\u4e4bSLAM\u4e0e\u5bfc\u822a\u4eff\u771f<\/a><\/p>\r\n<p><a href=\"https:\/\/www.jianshu.com\/p\/0e0f5ce6b4ce\" target=\"_blank\" rel=\"noopener noreferrer\">[\u8bd1] Fast RTPS\u4e0eCyclone DDS\u4e0eOpenSplice DDS\u5bf9\u6bd4\u6d4b\u8bd5<\/a><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u5355\u70b9\u8bf4\uff0cROS2\u4e0eROS\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff1a \u53bb\u6389\u4e86master\u6539\u4e3a\u8282\u70b9\u81ea\u52a8\u53d1\u73b0\uff08\u652f\u6301\u591a\u673a\u5668\u4eba\u63a7\u5236\uff09\uff1b \u6570\u636e\u5206\u53d1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1005],"tags":[968,1013],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3989"}],"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=3989"}],"version-history":[{"count":4,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3989\/revisions"}],"predecessor-version":[{"id":8565,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3989\/revisions\/8565"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}