{"id":147,"date":"2021-11-21T12:42:00","date_gmt":"2021-11-21T12:42:00","guid":{"rendered":"http:\/\/47.103.123.166\/?p=147"},"modified":"2021-11-21T13:14:43","modified_gmt":"2021-11-21T13:14:43","slug":"ros2_foxy%e5%ad%a6%e4%b9%a03-%e6%a0%b8%e5%bf%83%e6%a6%82%e5%bf%b5","status":"publish","type":"post","link":"http:\/\/47.103.123.166\/?p=147","title":{"rendered":"ROS2_Foxy\u5b66\u4e603\u2014\u2014\u6838\u5fc3\u6982\u5ff5"},"content":{"rendered":"<p>&emsp;&emsp;<strong>A series of core ROS 2 concepts that make up what is referred to as the \u201cROS (2) graph\u201d.<\/strong><\/p>\n<p>&emsp;&emsp;\u8fd9\u90e8\u5206\u5c06\u4ecb\u7ecd\u7ec4\u6210ROS2\u56fe\u7684\u5404\u4e2a\u6838\u5fc3\u6982\u5ff5\uff0c\u5305\u62ec\u8282\u70b9\u3001\u8bdd\u9898\u3001\u670d\u52a1\u3001\u53c2\u6570\u3001\u52a8\u4f5c\u3002Graph\u5c55\u793a\u4e86\u673a\u5668\u4eba\u7cfb\u7edf\u5185\u90e8\u5404\u90e8\u5206\u914d\u5408\u8fd0\u884c\u7684\u8fc7\u7a0b\u3002<\/p>\n<h1>1 node \u8282\u70b9<\/h1>\n<p>&emsp;&emsp;\u4e00\u4e2a\u5b8c\u6574\u7684\u673a\u5668\u4eba\u7cfb\u7edf\uff0c\u6216\u8005\u56fe\uff0c\u7531\u8bb8\u591a\u7684\u8282\u70b9\u7ec4\u6210\u3002\u6bcf\u4e2a\u8282\u70b9\u90fd\u8d1f\u8d23\u4e00\u4e2a\u6a21\u5757\u7684\u529f\u80fd\u3002\u8282\u70b9\u4e4b\u95f4\u4e92\u76f8\u914d\u5408\u4f7f\u5f97\u7cfb\u7edf\u5b9e\u73b0\u67d0\u4e9b\u66f4\u4e3a\u9ad8\u7ea7\u7684\u529f\u80fd\u3002<br \/>\n&emsp;&emsp;\u4f8b\u5982\uff0c\u4e00\u4e2a\u57fa\u4e8eROS\u7684\u8f6e\u5f0f\u79fb\u52a8\u673a\u5668\u4eba\uff0c\u8282\u70b9 <strong>\/sensor<\/strong> \u8d1f\u8d23\u91c7\u96c6\u5468\u56f4\u73af\u5883\u4fe1\u606f\uff0c\u8282\u70b9 <strong>\/controler<\/strong> \u8d1f\u8d23\u5224\u65ad\u969c\u788d\u7269\u4fe1\u606f\uff0c\u8282\u70b9 <strong>\/motion<\/strong> \u8d1f\u8d23\u6539\u53d8\u8f66\u8f6e\u7684\u8f6c\u901f\u548c\u8f6c\u5411\uff0c\u4e09\u8005\u914d\u5408\u5b9e\u73b0\u907f\u969c\u7684\u529f\u80fd\uff0c\u5176\u4e2d\u4e09\u8005\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\u53ef\u4ee5\u901a\u8fc7topic\u3001service\u7b49\u5b9e\u73b0\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u8282\u70b9\u542f\u52a8\n    $ ros2 run &lt;package_name&gt; &lt;executable_name&gt;\n    $ ros2 run turtlesim turtlesim_node\n# \u5217\u51fa\u6240\u6709\u8282\u70b9\n    $ ros2 node list\n# \u8282\u70b9\u4fe1\u606f\uff1a\u67e5\u770b\u5305\u62ec\u8ba2\u9605\u548c\u53d1\u5e03\u7684\u8bdd\u9898\u3001\u670d\u52a1\u3001\u52a8\u4f5c\u7b49\n    $ ros2 node info &lt;node_name&gt;<\/code><\/pre>\n<h1>2 parameter \u53c2\u6570<\/h1>\n<p>&emsp;&emsp;\u6bcf\u4e2a\u8282\u70b9\u6709\u81ea\u5df1\u7684\u53c2\u6570\/\u914d\u7f6e\uff0c\u53c2\u6570\u53ef\u4ee5\u52a8\u6001\u8c03\u6574\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u5217\u51fa\u6bcf\u4e2a\u8282\u70b9\u7684\u53c2\u6570\n    $ ros2 param list\n\n# \u83b7\u53d6\u67d0\u4e2a\u53c2\u6570\u7684\u7c7b\u578b\u548c\u503c\n    $ ros2 param get &lt;node_name&gt; &lt;parameter_name&gt;\n    # \u4f8b\u5982\n        $ ros2 param get \/turtlesim background_g\n    # return\n        Integer value is: 86\n\n# \u8bbe\u7f6e\u67d0\u4e2a\u53c2\u6570\u7684\u503c\n    $ ros2 param set &lt;node_name&gt; &lt;parameter_name&gt; &lt;value&gt;\n    # \u4f8b\u5982\n        $ ros2 param set \/turtlesim background_r 150\n    # return\n        Set parameter successful\n\n# \u4fdd\u5b58\u53c2\u6570\u5230yaml\u6587\u4ef6\n    $ ros2 param dump &lt;node_name&gt;\n    # \u4f8b\u5982\n        $ ros2 param dump \/turtlesim\n    # return\n        Saving to:  .\/turtlesim.yaml\n\n# \u52a0\u8f7d\u4fdd\u5b58\u7684yaml\u6587\u4ef6\n    $ ros2 run &lt;package_name&gt; &lt;executable_name&gt; --ros-args --params-file &lt;file_name&gt;\n    # \u4f8b\u5982\n        $ ros2 run turtlesim turtlesim_node --ros-args --params-file .\/turtlesim.yaml<\/code><\/pre>\n<h1>3 topic \u8bdd\u9898<\/h1>\n<p><img src=\"http:\/\/47.103.123.166\/wp-content\/uploads\/2021\/11\/post-147-619a3e990d235.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>3.1 topic \u8bdd\u9898<\/h2>\n<p>&emsp;&emsp;topic\u662f\u8282\u70b9\u4e4b\u95f4\u6570\u636e\u4ea4\u4e92\u7684\u4e00\u79cd\u65b9\u5f0f\uff0c\u53d1\u9001\u6570\u636e\u7684\u8282\u70b9\u91c7\u7528publish\u7684\u65b9\u5f0f\u5c06\u6570\u636e\u53d1\u5e03\u5230topic\uff0c\u800c\u63a5\u6536\u6570\u636e\u7684\u8282\u70b9\u91c7\u7528subscribe\u7684\u65b9\u5f0f\u4ecetopic\u8ba2\u9605\u6570\u636e\uff0c\u53ef\u4ee5\u770b\u4e0b\u8fd9\u4e2a<a href=\"https:\/\/github.com\/ros2\/ros2_documentation\/blob\/master\/source\/Tutorials\/Topics\/Understanding-ROS2-Topics.rst\">\u5b98\u65b9\u7684gif<\/a>\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u5217\u51fa\u6240\u6709\u8bdd\u9898\n    $ ros2 topic list\n    $ ros2 topic list -t    # \u5e26topic\u7c7b\u578b\n\n# \u67e5\u770b\u8bdd\u9898\u6570\u636e\n    $ ros2 topic echo &lt;topic_name&gt;\n\n# \u67e5\u770b\u8bdd\u9898\u7684\u7c7b\u578b\u3001\u53d1\u5e03\u8005\u548c\u8ba2\u9605\u8005\u6570\u91cf\n    $ ros2 topic info &lt;topic_name&gt;\n    # \u4f8b\u5982\n        $ ros2 topic info \/turtle1\/cmd_vel\n    # return\n        Type: geometry_msgs\/msg\/Twist\n        Publisher count: 1\n        Subscription count: 1\n\n# \u67e5\u770b\u6570\u636e\u53d1\u5e03\u9891\u7387\n    $ ros2 topic hz \/turtle1\/pose<\/code><\/pre>\n<p>&emsp;&emsp;These attributes, particularly the type, are how nodes know they\u2019re talking about the same information as it moves over topics.<\/p>\n<p>&emsp;&emsp;roscli\u76f8\u5173\u7684\u8282\u70b9\u662f\u547d\u4ee4\u884c\u7a0b\u5e8f\u521b\u5efa\u7684\u3002<\/p>\n<h2>3.2 topic \u6d88\u606f\u7c7b\u578b msg<\/h2>\n<p>&emsp;&emsp;Nodes send data over topics using messages. Publishers and subscribers must send and receive the same type of message to communicate.<\/p>\n<pre><code class=\"language-powershell\"># \u67e5\u770btopic\u7c7b\u578b\n    $ ros2 interface show &lt;type&gt;.msg\n    # \u4f8b\u5982\n        $ ros2 interface show geometry_msgs\/msg\/Twist\n    # return\n        # This expresses velocity in free space broken into its linear and angular parts.\n\n        Vector3  linear\n        Vector3  angular<\/code><\/pre>\n<h2>3.3 \u7ec8\u7aef\u53d1\u5e03\u6570\u636e\u5230\u8bdd\u9898 pub<\/h2>\n<pre><code class=\"language-powershell\">$ ros2 topic pub &lt;topic_name&gt; &lt;msg_type&gt; '&lt;args&gt;'\n    # \u4f8b\u5982\n    $ ros2 topic pub --once \/turtle1\/cmd_vel geometry_msgs\/msg\/Twist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n    # --once \u4ee3\u8868 \u53ea\u53d1\u9001\u4e00\u6b21\u6570\u636e\u5373\u9000\u51fa\n    # --rate 1 \u4ee3\u8868 \u4ee51Hz\u7684\u9891\u7387\u53d1\u9001\u6570\u636e<\/code><\/pre>\n<h1>4 service \u670d\u52a1<\/h1>\n<p><img src=\"http:\/\/47.103.123.166\/wp-content\/uploads\/2021\/11\/post-147-619a3e995e174.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>4.1 service \u670d\u52a1<\/h2>\n<p>&emsp;&emsp;\u8282\u70b9\u4e4b\u95f4\u6570\u636e\u4ea4\u4e92\u7684\u53e6\u4e00\u79cd\u65b9\u5f0f\u662fservice\u3002\u8bdd\u9898\u901a\u8fc7\u53d1\u5e03\u4e0e\u8ba2\u9605\u8fdb\u884c\uff08publisher-subscriber model\uff09\uff0c\u670d\u52a1\u901a\u8fc7\u8bf7\u6c42\u4e0e\u5e94\u7b54\u8fdb\u884c\uff08call-and-response model\uff09\uff0c\u53ea\u6709\u8bf7\u6c42\u624d\u4f1a\u5e94\u7b54\u3002<br \/>\n&emsp;&emsp;service\u5305\u62ec\u5ba2\u6237\u7aef\uff08service client\uff09\u548c\u670d\u52a1\u5668\uff08service server\uff09\uff0c\u5bf9\u4e8e\u540c\u4e00\u4e2aservice\u53ef\u4ee5\u6709\u591a\u4e2aclient\uff0c\u4f46\u53ea\u80fd\u6709\u4e00\u4e2aserver\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u5217\u51fa\u6240\u6709\u670d\u52a1\n    $ ros2 service list\n    $ ros2 service list -t  # \u5e26service\u7c7b\u578b<\/code><\/pre>\n<h2>4.2 service \u6d88\u606f\u7c7b\u578b srv<\/h2>\n<p>&emsp;&emsp;service\u7684\u6d88\u606f\u4e0d\u540c\u4e8etopic\u7684\u6d88\u606f\uff0c\u524d\u8005\u7684\u6d88\u606f\u5305\u62ec\u4e24\u90e8\u5206\u8bf7\u6c42\u6d88\u606f\u548c\u5e94\u7b54\u6d88\u606f\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u67e5\u770bservice\u6d88\u606f\u7c7b\u578b\n    $ ros2 service type &lt;service_name&gt;\n    # \u4f8b\u5982\n        $ ros2 service type \/clear\n    # return,Empty \u8868\u793a \u8bf7\u6c42\u548c\u5e94\u7b54\u90fd\u6ca1\u6709\u6570\u636e\n        std_srvs\/srv\/Empty\n\n# \u67e5\u770bservice\u6d88\u606f\u7c7b\u578b\u7ed3\u6784\n    $ ros2 interface show &lt;type_name&gt;.srv\n    # \u4f8b\u5982\n        $ ros2 interface show turtlesim\/srv\/Spawn.srv\n    # return\uff0c--- \u5c06\u8bf7\u6c42\u6570\u636e\u548c\u5e94\u7b54\u6570\u636e\u5206\u5f00\n        float32 x\n        float32 y\n        float32 theta\n        string name # Optional.  A unique name will be created and returned if this is empty\n        ---\n        string name\n\n# \u6839\u636eservice\u6d88\u606f\u7c7b\u578b\u627e\u670d\u52a1\n    $ ros2 service find &lt;type_name&gt;<\/code><\/pre>\n<h2>4.3 \u7ec8\u7aef\u8bf7\u6c42\u670d\u52a1 call<\/h2>\n<pre><code class=\"language-powershell\">$ ros2 service call &lt;service_name&gt; &lt;service_type&gt; &lt;arguments&gt;\n    # \u4f8b\u5982\n        $ ros2 service call \/clear std_srvs\/srv\/Empty\n    # return\n        waiting for service to become available...\n        requester: making request: std_srvs.srv.Empty_Request()\n\n        response:\n        std_srvs.srv.Empty_Response()\n\n    # \u4f8b\u5982\n        $ ros2 service call \/spawn turtlesim\/srv\/Spawn \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n    # return\n        waiting for service to become available...\n        requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name='')\n\n        response:\n        turtlesim.srv.Spawn_Response(name='turtle2')<\/code><\/pre>\n<h1>5 action \u52a8\u4f5c<\/h1>\n<p><img src=\"http:\/\/47.103.123.166\/wp-content\/uploads\/2021\/11\/post-147-619a3e99e8a65.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>5.1 action \u52a8\u4f5c<\/h2>\n<p>&emsp;&emsp;action\u662f\u8282\u70b9\u95f4\u957f\u65f6\u95f4\u901a\u4fe1\u7684\u7684\u4e00\u79cd\u65b9\u5f0f\uff0c\u57fa\u4e8etopic\u548cservice\uff0c\u7ec4\u6210\u5982\u4e0a\u56fe<br \/>\n&emsp;&emsp;\u9996\u5148\uff0caction client\u53d1\u51fa\u76ee\u6807\u670d\u52a1\u8bf7\u6c42\uff0caction server\u544a\u77e5action client\u6536\u5230\u76ee\u6807\u8bf7\u6c42\uff1b\u7136\u540e\uff0caction client\u53d1\u51fa\u7ed3\u679c\u670d\u52a1\u8bf7\u6c42\uff0caction server\u8fd4\u56de\u53cd\u9988\u6d41\u548c\u7ed3\u679c\u3002<br \/>\n&emsp;&emsp;action\u662f\u53ef\u62a2\u5360\u7684\uff0c\u4e5f\u5c31\u662f\u53ef\u4ee5\u4e2d\u9014\u505c\u6b62\uff0c\u6216\u66f4\u6362\u76ee\u6807\u3002<\/p>\n<pre><code class=\"language-powershell\"># \u5217\u51fa\u6240\u6709\u7684action\n    $ ros2 action list\n    $ ros2 action list -t # \u5e26action\u7c7b\u578b\n\n# \u67e5\u770baction\u4fe1\u606f\n    $ ros2 action info &lt;action_name&gt;\n    # \u4f8b\u5982\n        $ ros2 action info \/turtle1\/rotate_absolute\n    # return\n        Action: \/turtle1\/rotate_absolute\n        Action clients: 1\n            \/teleop_turtle\n        Action servers: 1\n            \/turtlesim<\/code><\/pre>\n<h2>5.2 action \u6d88\u606f\u7c7b\u578b action<\/h2>\n<pre><code class=\"language-powershell\"># \u67e5\u770baction\u7c7b\u578b\n    $ ros2 interface show &lt;type_name&gt;.action\n    # \u4f8b\u5982\n        $ ros2 interface show turtlesim\/action\/RotateAbsolute.action\n    # return\n        # \u8bf7\u6c42\n        float32 theta\n        ---\n        # \u7ed3\u679c\n        float32 delta\n        ---\n        # \u53cd\u9988\n        float32 remaining<\/code><\/pre>\n<h2>5.3 \u7ec8\u7aef\u53d1\u9001\u52a8\u4f5c\u8bf7\u6c42 send_goal<\/h2>\n<pre><code class=\"language-powershell\">    $ ros2 action send_goal &lt;action_name&gt; &lt;action_type&gt; &lt;values&gt;\n    # \u4f8b\u5982\n        $ ros2 action send_goal \/turtle1\/rotate_absolute turtlesim\/action\/RotateAbsolute \"{theta: 1.57}\"\n    # return\n        Waiting for an action server to become available...\n        Sending goal:\n           theta: 1.57\n\n        Goal accepted with ID: f8db8f44410849eaa93d3feb747dd444\n\n        Result:\n          delta: -1.568000316619873\n\n        Goal finished with status: SUCCEEDED\n\n    # \u5e26\u53cd\u9988 --feedback\n    $ ros2 action send_goal \/turtle1\/rotate_absolute turtlesim\/action\/RotateAbsolute \"{theta: -1.57}\" --feedback<\/code><\/pre>\n<p>&emsp;&emsp;\u6bcf\u4e2a\u52a8\u4f5c\u76ee\u6807\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94ID\u3002<\/p>\n<h1>6 rqt_graph<\/h1>\n<p>&emsp;&emsp;\u8fd0\u884crqt_graph\uff0c\u4e5f\u53ef\u4ee5\u4ecerqt\u6253\u5f00\u3002<br \/>\n<img src=\"http:\/\/47.103.123.166\/wp-content\/uploads\/2021\/11\/post-147-619a3e9a7a9d9.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h1>7 \u5c0f\u7ed3<\/h1>\n<p>&emsp;&emsp;\u8282\u70b9\u662f\u4e00\u4e2a\u5b8c\u6574\u673a\u5668\u4eba\u7cfb\u7edf\u7684\u57fa\u7840\u7ec4\u6210\u90e8\u5206\uff0c\u6bcf\u4e2a\u8282\u70b9\u6709\u81ea\u5df1\u7684\u53c2\u6570\uff0c\u8fd9\u4e9b\u53c2\u6570\u53ef\u4ee5\u52a8\u6001\u914d\u7f6e\u3002\u8282\u70b9\u95f4\u7684\u901a\u4fe1\u65b9\u5f0f\u5305\u62ectopic\uff08publisher-subscriber model\uff09\u3001service\uff08call-and-response model\uff09\u548caction\uff08topic-service model\uff09\uff0ctopic\u9002\u5408\u4e8e\u63cf\u8ff0\u5b9e\u65f6\u72b6\u6001\u7684\u6570\u636e\u4ea4\u6d41\uff0cservice\u9002\u5408\u4e8e\u56fa\u5b9a\u6570\u636e\u8bf7\u6c42\u6216\u6307\u4ee4\u7684\u53d1\u5e03\uff0caction\u9002\u5408\u4e8e\u53d1\u5e03\u6307\u4ee4\uff08\u9700\u8981\u82b1\u8d39\u4e00\u6bb5\u65f6\u95f4\u624d\u80fd\u5b8c\u6210\u7684\u6307\u4ee4\uff0cfor long running tasks\uff09\u3001\u83b7\u53d6\u53cd\u9988\u7b49\u60c5\u5f62\u3002<br \/>\n&emsp;&emsp;rqt_graph\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u89c6\u5316\u754c\u9762\uff0c\u80fd\u591f\u6e05\u6670\u5730\u63cf\u8ff0\u7cfb\u7edf\u5de5\u4f5c\u8fc7\u7a0b\u4e2d\u5404\u90e8\u5206\u7684\u4f9d\u8d56\u5173\u7cfb\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&emsp;&emsp;A series of core ROS 2 concepts that make up what is referred to as the \u201cROS (2) graph\u201d. &emsp;&emsp;\u8fd9\u90e8\u5206\u5c06\u4ecb\u7ecd\u7ec4\u6210ROS2\u56fe\u7684\u5404\u4e2a\u6838\u5fc3\u6982\u5ff5\uff0c\u5305\u62ec\u8282\u70b9\u3001\u8bdd\u9898\u3001\u670d\u52a1\u3001\u53c2\u6570\u3001\u52a8\u4f5c\u3002Graph\u5c55\u793a\u4e86\u673a\u5668\u4eba\u7cfb\u7edf\u5185\u90e8\u5404\u90e8\u5206\u914d\u5408\u8fd0\u884c\u7684\u8fc7\u7a0b\u3002 1 node \u8282\u70b9 &emsp;&emsp;\u4e00\u4e2a\u5b8c\u6574\u7684\u673a\u5668\u4eba\u7cfb\u7edf\uff0c\u6216\u8005\u56fe\uff0c\u7531\u8bb8\u591a\u7684\u8282\u70b9\u7ec4\u6210\u3002\u6bcf\u4e2a\u8282\u70b9\u90fd\u8d1f\u8d23\u4e00\u4e2a\u6a21\u5757\u7684\u529f\u80fd\u3002\u8282\u70b9\u4e4b\u95f4\u4e92\u76f8\u914d\u5408\u4f7f\u5f97\u7cfb\u7edf\u5b9e\u73b0\u67d0\u4e9b\u66f4\u4e3a\u9ad8\u7ea7\u7684\u529f\u80fd\u3002 &emsp;&emsp;\u4f8b\u5982\uff0c\u4e00\u4e2a\u57fa\u4e8eROS\u7684\u8f6e\u5f0f\u79fb\u52a8\u673a\u5668\u4eba\uff0c\u8282\u70b9 \/sensor \u8d1f\u8d23\u91c7\u96c6\u5468\u56f4\u73af\u5883\u4fe1\u606f\uff0c\u8282\u70b9 \/controler \u8d1f\u8d23\u5224\u65ad\u969c\u788d\u7269\u4fe1\u606f\uff0c\u8282\u70b9 \/motion \u8d1f\u8d23\u6539\u53d8\u8f66\u8f6e\u7684\u8f6c\u901f\u548c\u8f6c\u5411\uff0c\u4e09\u8005\u914d\u5408\u5b9e\u73b0\u907f\u969c\u7684\u529f\u80fd\uff0c\u5176\u4e2d\u4e09\u8005\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\u53ef\u4ee5\u901a\u8fc7topic\u3001service\u7b49\u5b9e\u73b0\u3002 # \u8282\u70b9\u542f\u52a8 $ ros2 run &lt;package_name&gt; &lt;executable_name&gt; $ ros2 run turtlesim turtlesim_node # \u5217\u51fa\u6240\u6709\u8282\u70b9 $ ros2 node list # \u8282\u70b9\u4fe1\u606f\uff1a\u67e5\u770b\u5305\u62ec\u8ba2\u9605\u548c\u53d1\u5e03\u7684\u8bdd\u9898\u3001\u670d\u52a1\u3001\u52a8\u4f5c\u7b49 $ ros2 node info [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/147"}],"collection":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=147"}],"version-history":[{"count":2,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/147\/revisions"}],"predecessor-version":[{"id":197,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/147\/revisions\/197"}],"wp:attachment":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=147"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}