{"id":3907,"date":"2020-06-15T19:56:25","date_gmt":"2020-06-15T11:56:25","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=3907"},"modified":"2025-09-05T15:11:50","modified_gmt":"2025-09-05T07:11:50","slug":"%e6%9c%ba%e5%99%a8%e4%ba%ba%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9fros-%e5%88%9d%e6%8e%a2","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=3907","title":{"rendered":"\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edfROS\u2014\u521d\u63a2"},"content":{"rendered":"<p>\u4e00\u76f4\u542c\u5230ROS\u8fd9\u4e2a\u540d\u5b57\uff0c\u5f88\u597d\u5947\u5b83\u4e3a\u4ec0\u4e48\u5728\u673a\u5668\u4eba\u9886\u57df\u8fd9\u4e48\u51fa\u540d\uff0c\u6240\u4ee5\u4ece\u4eca\u5929\u8d77\u6211\u5c06\u4ece\u96f6\u5f00\u59cb\u5b66\u4e60\u4e00\u4e0b\uff0c\u770b\u770b\u5b83\u5230\u5e95\u6709\u54ea\u4e9b\u795e\u5947\u4e4b\u5904\u3002\u672c\u6587\u4f5c\u4e3a\u521d\u63a2\u7bc7\u4f1a\u5148\u5e26\u5927\u5bb6\u4e86\u89e3ROS\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u901a\u8fc7\u5b89\u88c5\u548c\u521b\u5efa\/\u8fd0\u884c\u7a0b\u5e8f\u5305\u4e86\u89e3Nodes\u8282\u70b9\u3001Topics\/Msg\u3001Service\u670d\u52a1\/\u53c2\u6570\u670d\u52a1\u5668\u3001\u51e0\u4e2a\u5e38\u89c1\u7684\u5de5\u5177\u3002<\/p>\n<p>ROS (Robot Operating System, \u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edf) \u63d0\u4f9b\u4e00\u7cfb\u5217\u7a0b\u5e8f\u5e93\u548c\u5de5\u5177\u4ee5\u5e2e\u52a9\u8f6f\u4ef6\u5f00\u53d1\u8005\u521b\u5efa\u673a\u5668\u4eba\u5e94\u7528\u8f6f\u4ef6\u3002\u5b83\u63d0\u4f9b\u4e86\u786c\u4ef6\u62bd\u8c61\u3001\u8bbe\u5907\u9a71\u52a8\u3001\u5e93\u51fd\u6570\u3001\u53ef\u89c6\u5316\u3001\u6d88\u606f\u4f20\u9012\u548c\u8f6f\u4ef6\u5305\u7ba1\u7406\u7b49\u8bf8\u591a\u529f\u80fd\u3002ROS\u9075\u5b88BSD\u5f00\u6e90\u8bb8\u53ef\u534f\u8bae\u3002<\/p>\n<p>ROS\u7684\u5b98\u7f51\uff1a<a href=\"https:\/\/ros.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/ros.org\/<\/a><\/p>\n<p>ROS \u56fe\uff08graph\uff09\u6982\u5ff5\uff1a<\/p>\n<ul>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/Nodes\">Nodes<\/a>:\u8282\u70b9,\u4e00\u4e2a\u8282\u70b9\u5373\u4e3a\u4e00\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5b83\u53ef\u4ee5\u901a\u8fc7ROS\u4e0e\u5176\u5b83\u8282\u70b9\u8fdb\u884c\u901a\u4fe1\u3002<span id=\"line-33\" class=\"anchor\"><\/span><\/p>\n<\/li>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/Messages\">Messages<\/a>:\u6d88\u606f\uff0c\u6d88\u606f\u662f\u4e00\u79cdROS\u6570\u636e\u7c7b\u578b\uff0c\u7528\u4e8e\u8ba2\u9605\u6216\u53d1\u5e03\u5230\u4e00\u4e2a\u8bdd\u9898\u3002<span id=\"line-34\" class=\"anchor\"><\/span><\/p>\n<\/li>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/Topics\">Topics<\/a>:\u8bdd\u9898,\u8282\u70b9\u53ef\u4ee5\u53d1\u5e03\u6d88\u606f\u5230\u8bdd\u9898\uff0c\u4e5f\u53ef\u4ee5\u8ba2\u9605\u8bdd\u9898\u4ee5\u63a5\u6536\u6d88\u606f\u3002<span id=\"line-35\" class=\"anchor\"><\/span><\/p>\n<\/li>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/Master\">Master<\/a>:\u8282\u70b9\u7ba1\u7406\u5668\uff0cROS\u540d\u79f0\u670d\u52a1 (\u6bd4\u5982\u5e2e\u52a9\u8282\u70b9\u627e\u5230\u5f7c\u6b64)\u3002<span id=\"line-36\" class=\"anchor\"><\/span><\/p>\n<\/li>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/rosout\">rosout<\/a>: ROS\u4e2d\u76f8\u5f53\u4e8estdout\/stderr\u3002<span id=\"line-37\" class=\"anchor\"><\/span><\/p>\n<\/li>\n<li>\n<p class=\"line891\"><a href=\"http:\/\/wiki.ros.org\/roscore\">roscore<\/a>: \u4e3b\u673a+ rosout + \u53c2\u6570\u670d\u52a1\u5668 (\u53c2\u6570\u670d\u52a1\u5668\u4f1a\u5728\u540e\u9762\u4ecb\u7ecd)\u3002<\/p>\n<\/li>\n<\/ul>\n<h1>\u4e00\u3001\u5b89\u88c5<\/h1>\n<p>\u4eca\u5929\u521a\u6512\u4e86\u4e00\u53f0Ubuntu20.04\u673a\u5668\uff0c\u5c31\u7528\u8fd9\u53f0\u673a\u5668\u6765\u5b89\u88c5ROS\u5427\u3002\u76ee\u524d\u652f\u6301Ubuntu20.04\u7684\u6700\u65b0ROS\u53d1\u884c\u7248\u662fNoetic\u3002<\/p>\n<pre class=\"pure-highlightjs\" style=\"padding-left: 40px;\"><code class=\"\"># \u914d\u7f6e Ubuntu\u8f6f\u4ef6\u66f4\u65b0 \u5141\u8bb8 \"restricted\"\u3001\"universe\" \u548c \"multiverse\"\u8fd9\u4e09\u79cd\u5b89\u88c5\u6a21\u5f0f\r\n\r\n# LANG\r\nsudo locale-gen en_US en_US.UTF-8\r\nsudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8\r\nexport LANG=en_US.UTF-8\r\n\r\n# \u6dfb\u52a0 sources.list\r\n#sudo sh -<span class=\"hljs-keyword\">c<\/span> <span class=\"hljs-string\">'echo \"deb [arch=<\/span><span class=\"hljs-string\">$(dpkg --print-architecture)<\/span><span class=\"hljs-string\">] http:\/\/packages.ros.org\/ros\/ubuntu <\/span><span class=\"hljs-string\">$(lsb_release -cs)<\/span><span class=\"hljs-string\"> main\" &gt; \/etc\/apt\/sources.list.d\/ros-latest.list'<\/span>\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\r\n# \u6dfb\u52a0\u516c\u94a5\r\nsudo apt-key adv --keyserver 'hkp:\/\/keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654\r\n# or  curl -s https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master\/ros.asc | sudo apt-key add -\r\n# \u5b89\u88c5\r\nsudo apt update\r\nsudo apt install ros-noetic-desktop-full   #\u684c\u9762\u5b8c\u6574\u7248desktop-full\uff1b\u684c\u9762\u7248desktop\uff1b\u57fa\u7840\u7248base\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\u5de5\u5177\r\nsudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential\r\n# \u6216 pip install --user catkin_pkg rosdep rosinstall-generator wstool six vcstools pydot\r\n\r\nsudo apt install python3-rosdep python3-colcon-common-extensions\r\n\r\n# \u521d\u59cb\u5316 rosdep\r\nsudo vim \/etc\/hosts\r\n    <span style=\"color: #ff0000;\">185.199.109.133  raw.githubusercontent.com<\/span>\r\nsudo rosdep init\r\nrosdep update    # timeout\u95ee\u9898\u89e3\u51b3\u65b9\u6cd5\uff1ahttps:\/\/www.guyuehome.com\/33258\r\n\r\nprintenv | grep ROS\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h1>\u4e8c\u3001\u521b\u5efa\/\u7f16\u8bd1\u7a0b\u5e8f\u5305<\/h1>\n<p>\u53c2\u8003\uff1a<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/InstallingandConfiguringROSEnvironment\" target=\"_blank\" rel=\"noopener noreferrer\">Installing and Configuring Your ROS Environment<\/a>\u3001<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/NavigatingTheFilesystem\" target=\"_blank\" rel=\"noopener noreferrer\">Navigating the ROS Filesystem<\/a>\u3001<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/CreatingPackage\" target=\"_blank\" rel=\"noopener noreferrer\">Creating a ROS Package<\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\r\nmkdir -p ~\/catkin_ws\/src\r\ncd ~\/catkin_ws\/\r\n<span style=\"color: #ff0000;\">catkin_make -DPYTHON_EXECUTABLE=\/usr\/bin\/python3\r\nor\r\ncolcon build\r\n<\/span>\r\n\r\n\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\r\n# \u6587\u4ef6\u7cfb\u7edf\u5de5\u5177\r\nsudo apt-get install ros-noetic-ros-tutorials  libfwup1 python3-rosdistro-modules python3-rospkg-modules\r\n  rospack find roscpp\r\n  roscd roscpp\r\n  echo $ROS_PACKAGE_PATH\r\n\r\n  roscd roscpp\/cmake\r\n  roscd log\r\n  rosls roscpp_tutorials\r\n  roscd roscpp_tutorials\/\r\n\r\n# \u521b\u5efaROS\u7a0b\u5e8f\u5305\r\ncd ~\/catkin_ws\/src\r\n# catkin_create_pkg &lt;package_name&gt; [depend1] [depend2] [depend3]\r\ncatkin_create_pkg beginner_tutorials std_msgs rospy roscpp\r\ncd ~\/catkin_ws\r\ncatkin_make\r\n\r\n  # \u67e5\u770b\u7a0b\u5e8f\u5305\u7684\u4e00\u7ea7\u4f9d\u8d56\r\n  rospack depends1 beginner_tutorials \r\n  roscd beginner_tutorials\r\n  cat package.xml\r\n\r\n  # \u67e5\u770b\u95f4\u63a5\u4f9d\u8d56\r\n  rospack depends1 rospy\r\n  rospack depends beginner_tutorials\r\n\r\n\r\n# \u81ea\u5b9a\u4e49ROS\u7a0b\u5e8f\u5305\r\nvim ~\/catkin_ws\/src\/beginner_tutorials\/package.xml\r\n  &lt;description&gt;Mars test package: beginner_tutorials&lt;\/description&gt;\r\n  &lt;maintainer email=\"yanjingang@mail.com\"&gt;yanjingang&lt;\/maintainer&gt;\r\n  &lt;license&gt;BSD&lt;\/license&gt;\r\ncd ~\/catkin_ws\r\ncatkin_make\r\n<\/code><\/pre>\n<h1>\u4e09\u3001\u7406\u89e3ROS Nodes\u8282\u70b9<\/h1>\n<p>\u53c2\u8003\uff1a<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/UnderstandingNodes\" target=\"_blank\" rel=\"noopener noreferrer\">Understanding ROS Nodes<\/a><\/p>\n<p class=\"line891\">\u4e00\u4e2a\u8282\u70b9\u5176\u5b9e\u53ea\u4e0d\u8fc7\u662fROS\u7a0b\u5e8f\u5305\u4e2d\u7684\u4e00\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\u3002ROS\u8282\u70b9\u53ef\u4ee5\u4f7f\u7528ROS\u5ba2\u6237\u5e93\u4e0e\u5176\u4ed6\u8282\u70b9\u901a\u4fe1\u3002\u8282\u70b9\u53ef\u4ee5\u53d1\u5e03\u6216\u63a5\u6536\u4e00\u4e2a\u8bdd\u9898\uff0c\u4e5f\u53ef\u4ee5\u63d0\u4f9b\u6216\u4f7f\u7528\u67d0\u79cd\u670d\u52a1\u3002<\/p>\n<p class=\"line874\">ROS\u5ba2\u6237\u7aef\u5e93\u5141\u8bb8\u4f7f\u7528\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u7f16\u5199\u7684\u8282\u70b9\u4e4b\u95f4\u4e92\u76f8\u901a\u4fe1:<span id=\"line-49\" class=\"anchor\"><\/span><\/p>\n<ul>\n<li>rospy = python \u5ba2\u6237\u7aef\u5e93<span id=\"line-50\" class=\"anchor\"><\/span><\/li>\n<li>roscpp = c++ \u5ba2\u6237\u7aef\u5e93<\/li>\n<\/ul>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u542f\u52a8roscore server\r\nroscore     # ros+core : master (provides name service for ROS) + rosout (stdout\/stderr) + parameter server (parameter server will be introduced later)\r\n\r\n\r\n# \u663e\u793a\u5f53\u524d\u8fd0\u884c\u7684ROS\u8282\u70b9\u4fe1\u606f\r\nrosnode list   #ros+node : ROS tool to get information about a node.\r\n    \/rosout    #\u770b\u5230\u8fd9\u4e2a\u8868\u793a\u5f53\u524d\u53ea\u6709\u4e00\u4e2a\u8282\u70b9\u5728\u8fd0\u884c: rosout\u3002\u56e0\u4e3a\u8fd9\u4e2aroscore\u5185\u7f6e\u8282\u70b9\u7528\u4e8e\u6536\u96c6\u548c\u8bb0\u5f55\u8282\u70b9\u8c03\u8bd5\u8f93\u51fa\u4fe1\u606f\uff0c\u6240\u4ee5\u5b83\u603b\u662f\u5728\u8fd0\u884c\u7684\r\n\r\n# \u67e5\u770b\u6307\u5b9a\u8282\u70b9\u4fe1\u606f\r\nrosnode info \/rosout\r\n\r\n\r\n# \u8fd0\u884c\u6307\u5b9a\u8282\u70b9\r\n# rosrun [package_name] [node_name]    #ros+run : runs a node from a given package.\r\nrosrun turtlesim turtlesim_node     #\u8fd9\u91cc\u6253\u5f00\u4e00\u4e2a\u5185\u7f6e\u7684\u5c0f\u9f9f\u6a21\u62df\u5668\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-16-29-58.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3916\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-16-29-58.png\" alt=\"\" width=\"500\" height=\"530\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-16-29-58.png 500w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-16-29-58-283x300.png 283w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u6b64\u65f6\u53ef\u4ee5\u770b\u5230\u591a\u4e86\u4e00\u4e2aturtlesim\u8282\u70b9\r\nrosnode list\r\n     \/rosout\r\n     \/turtlesim\r\n\r\n# \u4f7f\u7528__name\u81ea\u5b9a\u4e49\u8282\u70b9\u540d\r\nrosrun turtlesim turtlesim_node  __name:=mars_turtlesim\r\n\r\n# ping\u8282\u70b9\u6d4b\u8bd5\r\nrosnode ping \/mars_turtlesim\r\n    rosnode: node is [\/mars_turtlesim]\r\n    pinging \/mars_turtlesim with a timeout of 3.0s\r\n    xmlrpc reply from http:\/\/mars:36119\/\ttime=0.364065ms\r\n    xmlrpc reply from http:\/\/mars:36119\/\ttime=1.200914ms<\/code><\/pre>\n<h1>\u4e09\u3001\u7406\u89e3ROS Topics\u8bdd\u9898<\/h1>\n<p>\u53c2\u8003\uff1a<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/UnderstandingTopics\" target=\"_blank\" rel=\"noopener noreferrer\">Understanding ROS Topics<\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5206\u522b\u542f\u52a8roscore\u3001turtlesim\r\nroscore\r\nrosrun turtlesim turtlesim_node\r\n\r\n# \u542f\u52a8turtlesim\u952e\u76d8\u8fdc\u7a0b\u63a7\u5236\u8282\u70b9 \r\nrosrun turtlesim turtle_teleop_key       #\u6ce8\uff1a\u5fc5\u987b\u5728\u5f53\u524d\u547d\u4ee4\u7a97\u53e3\u6309\u952e\u624d\u4f1a\u88ab\u7a0b\u5e8f\u76d1\u542c\u5230\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-3920\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey-1024x464.png\" alt=\"\" width=\"625\" height=\"283\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey-1024x464.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey-300x136.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey-768x348.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey-624x283.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/turtlekey.png 1164w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>turtlesim_node\u8282\u70b9\u548cturtle_teleop_key\u8282\u70b9\u4e4b\u95f4\u662f\u901a\u8fc7\u4e00\u4e2aROS\u8bdd\u9898\u6765\u4e92\u76f8\u901a\u4fe1\u7684\u3002turtle_teleop_key\u5728\u4e00\u4e2a\u8bdd\u9898\u4e0a\u53d1\u5e03\u6309\u952e\u8f93\u5165\u6d88\u606f\uff0c\u800cturtlesim\u5219\u8ba2\u9605\u8be5\u8bdd\u9898\u4ee5\u63a5\u6536\u8be5\u6d88\u606f\u3002\u4e0b\u9762\u8ba9\u6211\u4eec\u4f7f\u7528rqt_graph\u6765\u663e\u793a\u5f53\u524d\u8fd0\u884c\u7684\u8282\u70b9\u548c\u8bdd\u9898\u3002<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5b89\u88c5rqt_graph\uff08rqt\u80fd\u591f\u521b\u5efa\u4e00\u4e2a\u663e\u793a\u5f53\u524d\u7cfb\u7edf\u8fd0\u884c\u60c5\u51b5\u7684\u52a8\u6001\u5173\u7cfb\u56fe\uff09\r\nsudo apt install ros-noetic-rqt  ros-noetic-rqt-common-plugins\r\n# \u542f\u52a8rqt_graph\u8282\u70b9\r\nrosrun rqt_graph rqt_graph   #\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\u5f53\u524dturtle_teleop_key\u63a7\u5236turtlesim\u7684topic\u540d\u79f0\u53eb\/turtle1\/cmd_vel\r\n\r\n# \u76d1\u542ctopic\u4f20\u8f93\u7684\u6570\u636e\r\nrostopic echo \/turtle1\/cmd_vel     #\u5237\u65b0rqt_graph\u754c\u9762\u53ef\u4ee5\u770b\u5230\u65b0\u7684topic\u76d1\u542c\u94fe\u8def\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-3921\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-1024x303.png\" alt=\"\" width=\"625\" height=\"185\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-1024x303.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-300x89.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-768x227.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-624x184.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic.png 1777w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u4ece\u4e0a\u56fe\u53ef\u4ee5\u770b\u5230\uff0c<code class=\"\">turtle_teleop_key\u5411\u540d\u53eb\/turtle1\/cmd_vel\u7684topic\u53d1\u9001\u6d88\u606f\uff0c\u5de6\u4fa7\u7684turtlesim\u6a21\u62df\u5668\u548c\u53f3\u4fa7\u7684rostopic echo\u6307\u4ee4\u76d1\u542c\u4e86\u8fd9\u4e2atopic\u5e76\u6267\u884c\u5bf9\u5e94\u7684\u52a8\u753b\u6216\u6570\u636e\u6253\u5370\u64cd\u4f5c\u3002<\/code><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u67e5\u770b\u5f53\u524d\u8fd0\u884c\u4e2d\u7684topic\u60c5\u51b5\r\nrostopic list -v\r\n    Published topics:\r\n     * \/turtle1\/color_sensor [turtlesim\/Color] 1 publisher\r\n     * \/turtle1\/cmd_vel [geometry_msgs\/Twist] 1 publisher\r\n     * \/rosout [rosgraph_msgs\/Log] 4 publishers\r\n     * \/rosout_agg [rosgraph_msgs\/Log] 1 publisher\r\n     * \/turtle1\/pose [turtlesim\/Pose] 1 publisher\r\n\r\n    Subscribed topics:\r\n     * \/turtle1\/cmd_vel [geometry_msgs\/Twist] 2 subscribers\r\n     * \/rosout [rosgraph_msgs\/Log] 1 subscriber\r\n     * \/statistics [rosgraph_msgs\/TopicStatistics] 1 subscriber\r\n\r\n\r\n# \u67e5\u770btopic\u7684MessageType\r\nrostopic type \/turtle1\/cmd_vel\r\n    geometry_msgs\/Twist\r\n\r\n# \u67e5\u770bMessageType\u7ed3\u6784\u5b9a\u4e49\r\nrosmsg show geometry_msgs\/Twist\r\n    geometry_msgs\/Vector3 linear\r\n       float64 x\r\n       float64 y\r\n       float64 z\r\n    geometry_msgs\/Vector3 angular\r\n       float64 x\r\n       float64 y\r\n       float64 z\r\n\r\n# \u6a21\u62df\u5411topic\u53d1\u9001message\r\n# rostopic pub [topic] [msg_type] [args]\r\nrostopic pub -1 \/turtle1\/cmd_vel geometry_msgs\/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'   #\u4ee52.0\u5927\u5c0f\u7684\u7ebf\u901f\u5ea6\u548c1.8\u5927\u5c0f\u7684\u89d2\u901f\u5ea6\u5f00\u59cb\u79fb\u52a8\uff08-1\u8868\u793a\u53d1\u5e03\u4e00\u6761\u6d88\u606f\u540e\u9a6c\u4e0a\u9000\u51fa\uff1b--\u8868\u793a\u540e\u8fb9\u7684\u90fd\u662f\u6570\u636e\uff09\r\n\r\nrostopic pub \/turtle1\/cmd_vel geometry_msgs\/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'   #-r 1\u53c2\u6570\uff1a\u4ee51Hz\u7684\u9891\u7387\u53d1\u5e03\u547d\u4ee4\u5230topic\r\n\r\nrostopic hz \/turtle1\/cmd_vel  #\u67e5\u770btopic\u6d88\u606fpub\u9891\u7387\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-3923\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub-1024x308.png\" alt=\"\" width=\"625\" height=\"188\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub-1024x308.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub-300x90.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub-768x231.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub-624x187.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rostopic-pub.png 1784w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u53ef\u4ee5\u770b\u5230\u5de6\u4fa7\u7684\u5c0f\u9f9f\u4e00\u76f4\u8f6c\u5708\uff0c\u4e2d\u95f4<code class=\"\">rqt_graph\u4e0a\u591a\u4e86\u4e00\u4e2apub\u8282\u70b9\u5411turtlesim\u548crostopic echo\u76d1\u542cpub\u6570\u636e\u3002<\/code><\/p>\n<h1>\u56db\u3001\u7406\u89e3ROS Service\u670d\u52a1\/\u53c2\u6570\u670d\u52a1\u5668<\/h1>\n<p>\u53c2\u8003\uff1a<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/UnderstandingServicesParams\" target=\"_blank\" rel=\"noopener noreferrer\">Understanding ROS Services and Parameters<\/a><\/p>\n<p>\u670d\u52a1\uff08services\uff09\u662f\u8282\u70b9\u4e4b\u95f4\u901a\u8baf\u7684\u53e6\u4e00\u79cd\u65b9\u5f0f\u3002\u670d\u52a1\u5141\u8bb8\u8282\u70b9\u53d1\u9001<strong>\u8bf7\u6c42\uff08request\uff09<\/strong>\u00a0\u5e76\u83b7\u5f97\u4e00\u4e2a<strong>\u54cd\u5e94\uff08response\uff09\u3002<\/strong><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5e38\u7528\u547d\u4ee4\r\nrosservice list \u8f93\u51fa\u53ef\u7528\u670d\u52a1\u7684\u4fe1\u606f\r\nrosservice call \u8c03\u7528\u5e26\u53c2\u6570\u7684\u670d\u52a1\r\nrosservice type \u8f93\u51fa\u670d\u52a1\u7c7b\u578b\r\nrosservice find \u4f9d\u636e\u7c7b\u578b\u5bfb\u627e\u670d\u52a1find services by service type \r\nrosservice uri \u8f93\u51fa\u670d\u52a1\u7684ROSRPC uri\r\n\r\n# \u67e5\u770b\u53ef\u7528\u670d\u52a1\r\nrosservice list\r\n    \/clear       #\u6e05\u9664\r\n    \/kill           #\u7ec8\u6b62\r\n    \/reset      #\u91cd\u7f6e\r\n    \/spawn    #\u518d\u751f\r\n    \/rosout\/get_loggers\r\n    \/rosout\/set_logger_level\r\n    \/rostopic_15460_1592213188678\/get_loggers\r\n    \/rostopic_15460_1592213188678\/set_logger_level\r\n    \/rqt_gui_py_node_15282\/get_loggers\r\n    \/rqt_gui_py_node_15282\/set_logger_level\r\n    \/teleop_turtle\/get_loggers\r\n    \/teleop_turtle\/set_logger_level\r\n    \/turtle1\/set_pen\r\n    \/turtle1\/teleport_absolute\r\n    \/turtle1\/teleport_relative\r\n    \/turtlesim\/get_loggers\r\n    \/turtlesim\/set_logger_level\r\n\r\n# \u67e5\u770bclear\u670d\u52a1\u7c7b\u578b\uff08\u53c2\u6570\/\u8fd4\u56de\u503c\uff09\r\nrosservice type clear\r\n      std_srvs\/Empty       #Empty:\u8bf7\u6c42\u4e0d\u9700\u8981\u53d1\u9001\u6570\u636e\uff0c\u54cd\u5e94\u4e5f\u6ca1\u6709\u6570\u636e\r\n\r\n# \u4f7f\u7528clear\u6e05\u7a7a\u6a21\u62df\u5668\u753b\u9762\r\nrosservice call clear    #\u6b64\u65f6turtlesim\u4e0a\u7684\u8f68\u8ff9\u4f1a\u6e05\u9664\uff0c\u53ea\u5269\u4e0b\u5c0f\u9f9f\r\n\r\n\r\n# \u67e5\u770bspawn\u670d\u52a1\u7c7b\u578b\uff08\u53c2\u6570\/\u8fd4\u56de\u503c\uff09\r\nrosservice type spawn| rossrv show\r\n    float32 x\r\n    float32 y\r\n    float32 theta\r\n    string name\r\n    ---\r\n    string name\r\n\r\n# \u4f7f\u7528spawn\u5728\u7ed9\u5b9a\u7684\u4f4d\u7f6e\u548c\u89d2\u5ea6\u751f\u6210\u4e00\u53ea\u65b0\u7684\u4e4c\u9f9f\r\nrosservice call spawn 2 2 0.2 \"\"\r\n    name: \"turtle2\"\r\nrosservice call spawn 2 8 0.1 \"\"\r\n    name: \"turtle3\"\r\nrosservice call spawn 7 6 0.3 \"\"\r\n    name: \"turtle4\"\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-20-52-38.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3937\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-20-52-38.png\" alt=\"\" width=\"500\" height=\"530\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-20-52-38.png 500w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/Screenshot-from-2020-06-15-20-52-38-283x300.png 283w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p class=\"line867\"><tt class=\"backtick\">ROS\u00a0\u53c2\u6570\u670d\u52a1\u5668\uff08Parameter Server\uff09\u4e0a\u7684\u6570\u636e\u53ef\u4ee5\u901a\u8fc7rosparam\u64cd\u4f5c<\/tt>\u5b58\u50a8\u3002\u53c2\u6570\u670d\u52a1\u5668\u80fd\u591f\u5b58\u50a8\u6574\u578b\u3001\u6d6e\u70b9\u3001\u5e03\u5c14\u3001\u5b57\u7b26\u4e32\u3001\u5b57\u5178\u548c\u5217\u8868\u7b49\u6570\u636e\u7c7b\u578b\u3002rosparam\u4f7f\u7528YAML\u6807\u8bb0\u8bed\u8a00\u7684\u8bed\u6cd5\u3002\u4e00\u822c\u800c\u8a00\uff0cYAML\u7684\u8868\u8ff0\u5f88\u81ea\u7136\uff1a<tt class=\"backtick\">1<\/tt>\u00a0\u662f\u6574\u578b,\u00a0<tt class=\"backtick\">1.0<\/tt>\u00a0\u662f\u6d6e\u70b9\u578b,\u00a0<tt class=\"backtick\">one<\/tt>\u662f\u5b57\u7b26\u4e32,\u00a0<tt class=\"backtick\">true<\/tt>\u662f\u5e03\u5c14,\u00a0<tt class=\"backtick\">[1,\u00a02,\u00a03]<\/tt>\u662f\u6574\u578b\u5217\u8868,\u00a0<tt class=\"backtick\">{a:\u00a0b,\u00a0c:\u00a0d}<\/tt>\u662f\u5b57\u5178.\u00a0<tt class=\"backtick\">rosparam<\/tt>\u6709\u5f88\u591a\u6307\u4ee4\u53ef\u4ee5\u7528\u6765\u64cd\u4f5c\u53c2\u6570\uff0c\u5982\u4e0b\u6240\u793a:<span id=\"line-120\" class=\"anchor\"><\/span><span id=\"line-121\" class=\"anchor\"><\/span><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u5e38\u7528\u547d\u4ee4\r\nrosparam set \u8bbe\u7f6e\u53c2\u6570 \r\nrosparam get \u83b7\u53d6\u53c2\u6570 \r\nrosparam load \u4ece\u6587\u4ef6\u8bfb\u53d6\u53c2\u6570 \r\nrosparam dump \u5411\u6587\u4ef6\u4e2d\u5199\u5165\u53c2\u6570 \r\nrosparam delete \u5220\u9664\u53c2\u6570 \r\nrosparam list \u5217\u51fa\u53c2\u6570\u540d\r\n\r\n# \u67e5\u770b\u5f53\u524d\u53c2\u6570\u670d\u52a1\u5668\u4e0a\u6709\u54ea\u4e9b\u53c2\u6570\r\nrosparam list\r\n    \/mars_turtlesim\/background_b\r\n    \/mars_turtlesim\/background_g\r\n    \/mars_turtlesim\/background_r\r\n    \/rosdistro\r\n    \/roslaunch\/uris\/host_localhost__36533\r\n    \/rosversion\r\n    \/run_id\r\n    \/turtlesim\/background_b\r\n    \/turtlesim\/background_g\r\n    \/turtlesim\/background_r\r\n\r\n# \u83b7\u53d6\u53c2\u6570\r\nrosparam get \/turtlesim\/background_r      #\u83b7\u53d6\u6307\u5b9a\u53c2\u6570\r\n    70\r\nrosparam get \/     #\u83b7\u53d6\u6240\u6709\u53c2\u6570\r\n    background_r: 150\r\n    roslaunch:\r\n        uris: {host_localhost__36533: 'http:\/\/localhost:36533\/'}\r\n    rosversion: '1.14.6\r\n    ......\r\n\r\n# \u4fee\u6539\u53c2\u6570\r\nrosparam set \/turtlesim\/background_r 150\r\nrosservice call clear\r\n\r\n# \u5bfc\u51fa\u6240\u6709\u53c2\u6570\u5230\u6587\u4ef6\r\nrosparam dump params.yaml\r\n\r\n# \u52a0\u8f7d\u5bfc\u51fa\u7684\u53c2\u6570\u914d\u7f6e\r\nrosparam load params.yaml\r\n\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rosparam-set.png\"><img loading=\"lazy\" class=\"alignnone wp-image-3927 size-full\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rosparam-set.png\" alt=\"\" width=\"500\" height=\"530\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rosparam-set.png 500w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/rosparam-set-283x300.png 283w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<h1>\u4e94\u3001\u5de5\u5177<\/h1>\n<p>\u53c2\u8003\uff1a<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/UsingRqtconsoleRoslaunch\" target=\"_blank\" rel=\"noopener noreferrer\">Using rqt_console and roslaunch<\/a>\u3001<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/UsingRosEd\" target=\"_blank\" rel=\"noopener noreferrer\">Using rosed to edit files in ROS<\/a>\u3001<a href=\"http:\/\/wiki.ros.org\/ROS\/Tutorials\/Getting%20started%20with%20roswtf\" target=\"_blank\" rel=\"noopener noreferrer\">Getting started with roswtf<\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># launch\u542f\u52a8\u5668   \uff08\u53ef\u4ee5\u7528\u6765\u542f\u52a8\u5b9a\u4e49\u5728launch\u6587\u4ef6\u4e2d\u7684\u591a\u4e2a\u8282\u70b9\uff09\r\nroscd beginner_tutorials\r\nmkdir launch\r\ncd launch\r\nvim turtlemimic.launch         (group\uff1a\u8282\u70b9\u5206\u7ec4\uff1bns\uff1a\u547d\u540d\u7a7a\u95f4namespace\uff1bmimic\uff1a\u6a21\u4eff\u8282\u70b9\uff0c\u8ba9turtlesim2\u6a21\u4effturtlesim1)\r\n    &lt;launch&gt;\r\n          &lt;group ns=\"turtlesim1\"&gt;\r\n                &lt;node pkg=\"turtlesim\" name=\"sim\" type=\"turtlesim_node\"\/&gt;\r\n          &lt;\/group&gt;\r\n          &lt;group ns=\"turtlesim2\"&gt;\r\n                &lt;node pkg=\"turtlesim\" name=\"sim\" type=\"turtlesim_node\"\/&gt;\r\n          &lt;\/group&gt;\r\n          &lt;node pkg=\"turtlesim\" name=\"mimic\" type=\"mimic\"&gt;\r\n                &lt;remap from=\"input\" to=\"turtlesim1\/turtle1\"\/&gt;\r\n                &lt;remap from=\"output\" to=\"turtlesim2\/turtle1\"\/&gt;\r\n          &lt;\/node&gt;\r\n    &lt;\/launch&gt;\r\n\r\n# \u542f\u52a8\r\nroslaunch beginner_tutorials turtlemimic.launch    #\u53ef\u4ee5\u770b\u5230\u540c\u65f6\u8d77\u4e86\u4e24\u4e2a\u5c0f\u9f9f\u6a21\u62df\u5668\r\n\r\n# \u67e5\u770b\u5c0f\u9f9f\u6a21\u62df\u5668\u7684topic\r\nrostopic list |grep turtlesim1\r\n    \/turtlesim1\/turtle1\/cmd_vel\r\n    \/turtlesim1\/turtle1\/color_sensor\r\n    \/turtlesim1\/turtle1\/pose\r\n\r\n# \u5411topic\u53d1\u9001\u6307\u4ee4   \uff08\u53ef\u4ee5\u770b\u5230turtlesim2\u5728\u6a21\u4effturtlesim1\u4e00\u8d77\u8f6c\u5708\uff09\r\nrostopic pub \/turtlesim1\/turtle1\/cmd_vel geometry_msgs\/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'   #-r 1\u53c2\u6570\uff1a\u4ee51Hz\u7684\u9891\u7387\u53d1\u5e03\u547d\u4ee4\u5230topic\r\n\r\n# \u662f\u4f7f\u7528rqt\u53ef\u4ee5\u770b\u5230\u4ed6\u4eec\u4e4b\u95f4\u7684\u6570\u636e\u6d41\u5173\u7cfb\r\nrosrun rqt_graph rqt_graph<\/code><\/pre>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-3930\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim.png\" alt=\"\" width=\"995\" height=\"522\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim.png 995w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim-300x157.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim-768x403.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/launch-sim-624x327.png 624w\" sizes=\"(max-width: 995px) 100vw, 995px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-3929\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic-1024x491.png\" alt=\"\" width=\"625\" height=\"300\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic-1024x491.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic-300x144.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic-768x368.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic-624x299.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2020\/06\/mimic.png 1095w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># log\u67e5\u770b\u5668\r\nrosrun rqt_logger_level rqt_logger_level     #\u5982\u679c\u65e5\u5fd7\u7b49\u7ea7\u90fd\u6539\u6210DEBUG\u540e\u5361\u6b7b\u4e86\uff0c\u53ef\u4ee5\u91cd\u542fros\u8282\u70b9\u65e5\u5fd7\u7b49\u7ea7\u4f1a\u81ea\u52a8\u91cd\u7f6e\r\nrosrun rqt_console rqt_console\r\n\r\n# rosed\u5feb\u6377\u7f16\u8f91\r\n# rosed [package_name] [filename]     #\u76f4\u63a5\u901a\u8fc7package\u540dvim\u7f16\u8f91\u6587\u4ef6\u800c\u65e0\u9700\u6307\u5b9a\u6587\u4ef6\u8def\u5f84\r\nrosed beginner_tutorials package.xml    \r\n\r\n# roswtf\u9519\u8bef\u6392\u67e5\r\nps -ef | grep -i rosmaster   #\u786e\u8ba4roscore\u8fd0\u884c\r\nroscd rosmaster\r\nroswtf    #\u68c0\u67e5\u7cfb\u7edf\u9519\u8bef\r\n\u00a0   Loaded plugin tf.tfwtf\r\n    Package: rosmaster\r\n    ================================================================================\r\n    Static checks summary:\r\n    No errors or warnings\r\n    ================================================================================\r\n    Beginning tests of your ROS graph. These may take a while...\r\n    analyzing graph...\r\n    ... done analyzing graph\r\n    running graph rules...\r\n    ... done running graph rules\r\n    Online checks summary:\r\n    Found 1 warning(s).\r\n    Warnings are things that may be just fine, but are sometimes at fault\r\n    WARNING The following node subscriptions are unconnected:\r\n     * \/turtlesim:\r\n       * \/turtle1\/cmd_vel\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>\u4eca\u5929\u6211\u4eec\u5b66\u4e60\u4e86ROS\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u5b89\u88c5\u5e76\u901a\u8fc7\u521b\u5efa\u548c\u8fd0\u884c\u7a0b\u5e8f\u5305\u4e86\u89e3\u4e86Nodes\u8282\u70b9\u3001Topics\/Msg\u3001Service\u670d\u52a1\/\u53c2\u6570\u670d\u52a1\u5668\u4ee5\u53ca\u51e0\u4e2a\u5e38\u89c1\u7684\u5de5\u5177\uff0c\u4e0b\u4e00\u7bc7\u5c06\u8bb2\u89e3\u5982\u4f55\u81ea\u5df1\u521b\u5efaMessage\u6d88\u606f\u3001ROS\u670d\u52a1\u53caClient\u3001\u4eff\u771f\u56de\u653e\uff0c\u4ee5\u53ca\u5728\u673a\u5668\u4eba\u9879\u76ee\u4e2d\u7684\u5e94\u7528\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>yan 20.6.14 23:50<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\uff1a<\/p>\n<p><a href=\"http:\/\/wiki.ros.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">en &#8211; ROS Wiki<\/a><\/p>\n<p><a href=\"http:\/\/wiki.ros.org\/cn\/\" target=\"_blank\" rel=\"noopener noreferrer\">cn &#8211; ROS Wiki\uff08\u6709\u5751\uff0c\u4e0d\u5982\u82f1\u6587\u7684\u51c6\u786e\uff09<\/a><\/p>\n<p><a href=\"https:\/\/blog.csdn.net\/gatieme\/article\/details\/51873716\" target=\"_blank\" rel=\"noopener noreferrer\">Ubuntu install GIMP and plugns<\/a><\/p>\n<p><a href=\"https:\/\/mirror.tuna.tsinghua.edu.cn\/help\/ubuntu\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u6e05\u534e\u5927\u5b66\u5f00\u6e90\u8f6f\u4ef6\u955c\u50cf\u7ad9-ubuntu x86\/64<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u76f4\u542c\u5230ROS\u8fd9\u4e2a\u540d\u5b57\uff0c\u5f88\u597d\u5947\u5b83\u4e3a\u4ec0\u4e48\u5728\u673a\u5668\u4eba\u9886\u57df\u8fd9\u4e48\u51fa\u540d\uff0c\u6240\u4ee5\u4ece\u4eca\u5929\u8d77\u6211\u5c06\u4ece\u96f6\u5f00\u59cb\u5b66\u4e60\u4e00\u4e0b\uff0c\u770b\u770b\u5b83\u5230\u5e95\u6709\u54ea\u4e9b [&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":[1006,968,1001,855],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3907"}],"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=3907"}],"version-history":[{"count":2,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3907\/revisions"}],"predecessor-version":[{"id":10604,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3907\/revisions\/10604"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}