[{"data":1,"prerenderedAt":15543},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch4-si-da-tong-xin":3,"wiki-doc-items-2023-12-30-ros2-tutorial":15402},{"id":4,"title":5,"body":6,"chapter":15389,"chapterSort":15390,"date":15391,"description":19,"docKey":15392,"docRoot":15393,"docTitle":15394,"extension":15395,"isWikiDoc":48,"isWikiIndex":15396,"meta":15397,"navigation":48,"path":15398,"seo":15399,"stem":15400,"wikiDepth":34,"__hash__":15401},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch4-四大通信.md","四大通信",{"type":7,"value":8,"toc":15372},"minimark",[9,13,21,279,284,289,297,302,307,312,549,554,559,562,567,572,577,580,585,590,593,598,603,608,611,616,621,624,627,630,638,643,648,653,658,663,668,673,676,679,681,686,689,694,697,702,705,710,715,720,725,728,733,738,741,746,751,756,760,765,770,775,780,785,790,812,815,818,823,825,830,835,837,840,845,848,853,856,861,864,867,869,874,879,884,889,894,899,1079,1082,1085,1088,1093,1096,1099,1102,1105,1108,1113,1118,1123,1128,1131,1134,1137,1140,1143,1148,1151,1154,1159,1164,1167,1172,1177,1182,1185,1190,1193,1198,1203,1208,1211,1216,1219,1224,1229,1234,1237,1712,1717,1720,1723,1744,1749,1752,1754,1759,1764,1769,1774,1779,1784,1789,1794,1799,1804,1989,1994,1997,2002,2005,2010,2013,2018,2023,2028,2033,2038,2041,2044,2047,2050,2053,2058,2063,2066,2071,2076,2081,2086,2428,2431,2436,2441,2446,2451,2454,2457,2460,2465,2468,2471,2476,2481,2486,2489,2494,2499,2504,2507,2512,2515,2518,2545,2550,2555,2558,2563,2568,2573,2578,2581,2586,2591,2594,2597,2600,2605,2610,2629,2634,2639,2642,2647,2650,2655,2658,2663,2666,2669,2674,2678,2683,2688,2693,2696,2701,2706,2711,2716,2719,2724,2727,2732,2911,2914,2919,2922,2927,3106,3111,3295,3300,3305,3310,3315,3317,3322,3327,3332,3337,3340,3345,3813,3818,3823,3828,3831,3836,3839,3841,3846,3851,4194,4199,4204,4207,4212,4217,4222,4227,4229,4234,4237,4242,4247,4252,4257,4262,4265,4270,4275,4280,4283,4288,4292,4297,4302,4305,4310,4315,4320,4325,4361,4363,4368,4373,4378,4381,4386,4391,4396,4401,4406,4409,4414,4419,4424,4429,4434,4439,4444,4449,4454,4459,4464,4467,4469,4474,4479,4659,4664,4669,4672,4677,4680,4685,4688,4693,4880,4883,4888,4891,4896,4901,4906,4911,4916,4918,4923,4928,4933,4938,4943,4946,4949,4952,4955,4960,4965,4970,4975,4980,4985,4990,4995,5406,5411,5416,5419,5424,5448,5451,5461,5465,5470,5475,5480,5485,5488,5491,5496,5501,5506,5511,5516,5521,5526,5531,5534,5539,5542,5547,5552,5557,5562,5567,5572,5748,5753,5756,5761,5764,5767,5772,5775,6007,6012,6017,6022,6025,6030,6035,6038,6043,6267,6269,6274,6277,6280,6283,6286,6291,6296,6301,6306,6311,6316,6321,6326,6331,6336,6341,6344,6349,6354,6357,6362,6367,6370,6375,6378,6381,6386,6389,6394,6399,6402,6405,6408,6411,6414,6417,6420,6423,6426,6429,6434,6437,7005,7010,7012,7017,7022,7027,7030,7033,7038,7043,7048,7051,7056,7059,7064,7067,7070,7073,7078,7081,7084,7087,7092,7097,7102,7107,7112,7913,7916,7921,7924,7929,7932,7935,7940,7943,7946,7949,7952,7955,7958,7963,7965,7970,7975,7980,7985,7990,7993,7995,8000,8005,8008,8011,8014,8019,8024,8029,8034,8037,8042,8047,8052,8057,8062,8067,8072,8077,8080,8084,8089,8269,8274,8453,8458,8463,8468,8473,8475,8480,8485,8490,8493,8496,8499,8502,8505,8508,8511,8514,8519,8524,8529,8534,8539,8544,8547,8550,8553,8556,8559,8562,8565,8570,8575,8580,8585,8590,8593,8598,8603,9221,9226,9231,9236,9241,9268,9271,9274,9279,9282,9285,9288,9291,9293,9298,9301,9306,9311,9316,9321,9326,9328,9331,9336,9341,9343,9346,9351,9356,9361,9366,9371,9374,9379,9382,9387,9392,9395,9400,9403,9408,9411,9416,9419,9424,9427,9432,9437,9442,9447,9452,9457,9462,9467,9472,9477,9479,9482,9487,9490,9493,9498,9501,9506,9509,9514,9519,9524,9527,9532,9537,9542,10754,10758,10763,10766,10771,10999,11004,11009,11014,11019,11022,11025,11028,11031,11036,11041,11046,11051,11054,11059,11062,11067,11069,11074,11077,11082,11085,11088,11091,11096,11101,11106,11111,11114,11119,11124,11129,11132,11135,11140,11145,11150,11155,11160,11163,11166,11169,11174,11179,11184,11189,11194,11196,11201,11204,11207,11210,11215,11220,11225,11230,11232,11235,11240,11243,11248,11253,11258,11261,11264,11267,11272,11277,11280,11282,11285,11288,11291,11296,11299,11302,11305,11308,11313,11318,11323,12458,12463,12468,12471,12473,12476,12479,12602,12606,12611,12616,12619,12621,12626,12631,12634,12639,12644,12649,12652,12657,12662,12667,12670,12675,12680,12685,12690,12695,12700,12705,12708,12711,12715,12720,12725,12728,12733,12738,12743,12748,12753,12756,12761,12766,12771,12776,13155,13160,13165,13170,13175,13177,13182,13187,13192,13195,13198,13203,13208,13620,13622,13627,13632,13637,13640,13643,13648,13651,13653,13658,13661,13666,13669,13674,13677,13682,13687,13692,13697,13702,13707,13709,13714,13717,13722,13725,13730,13735,13738,13743,13748,13753,13755,13760,13765,13768,13773,13778,14670,14674,14679,14684,14689,14694,14699,14704,14709,14714,14719,14724,14727,14730,14735,14738,14743,14748,15267,15269,15274,15279,15284,15287,15289,15294,15299,15304,15309,15312,15317,15322,15327,15332,15337,15342,15345,15350,15355,15358,15363,15368],[10,11,12],"h3",{"id":12},"通信机制简介与代码模板",[14,15,16],"p",{},[17,18],"img",{"alt":19,"src":20},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage332.webp",[22,23,27],"pre",{"className":24,"code":25,"language":26,"meta":19,"style":19},"language-cpp shiki shiki-themes github-light github-dark","#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass MyNode: public rclcpp::Node\n{\n  public:\n    MyNode():Node(\"mynode_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"Hello World!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CMyNode>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n","cpp",[28,29,30,43,50,76,82,88,109,115,142,148,154,159,190,195,209,214,243,248,261,273],"code",{"__ignoreMap":19},[31,32,35,39],"span",{"class":33,"line":34},"line",1,[31,36,38],{"class":37},"szBVR","#include",[31,40,42],{"class":41},"sZZnC"," \"rclcpp\u002Frclcpp.hpp\"\n",[31,44,46],{"class":33,"line":45},2,[31,47,49],{"emptyLinePlaceholder":48},true,"\n",[31,51,53,56,60,64,67,70,73],{"class":33,"line":52},3,[31,54,55],{"class":37},"class",[31,57,59],{"class":58},"sScJk"," MyNode",[31,61,63],{"class":62},"sVt8B",": ",[31,65,66],{"class":37},"public",[31,68,69],{"class":58}," rclcpp",[31,71,72],{"class":62},"::",[31,74,75],{"class":58},"Node\n",[31,77,79],{"class":33,"line":78},4,[31,80,81],{"class":62},"{\n",[31,83,85],{"class":33,"line":84},5,[31,86,87],{"class":37},"  public:\n",[31,89,91,94,97,100,103,106],{"class":33,"line":90},6,[31,92,93],{"class":58},"    MyNode",[31,95,96],{"class":62},"():",[31,98,99],{"class":58},"Node",[31,101,102],{"class":62},"(",[31,104,105],{"class":41},"\"mynode_node_cpp\"",[31,107,108],{"class":62},")\n",[31,110,112],{"class":33,"line":111},7,[31,113,114],{"class":62},"    {\n",[31,116,118,121,123,127,130,133,136,139],{"class":33,"line":117},8,[31,119,120],{"class":58},"      RCLCPP_INFO",[31,122,102],{"class":62},[31,124,126],{"class":125},"sj4cs","this",[31,128,129],{"class":62},"->",[31,131,132],{"class":58},"get_logger",[31,134,135],{"class":62},"(),",[31,137,138],{"class":41},"\"Hello World!\"",[31,140,141],{"class":62},");\n",[31,143,145],{"class":33,"line":144},9,[31,146,147],{"class":62},"    }\n",[31,149,151],{"class":33,"line":150},10,[31,152,153],{"class":62},"};\n",[31,155,157],{"class":33,"line":156},11,[31,158,49],{"emptyLinePlaceholder":48},[31,160,162,165,168,170,172,176,179,182,185,188],{"class":33,"line":161},12,[31,163,164],{"class":37},"int",[31,166,167],{"class":58}," main",[31,169,102],{"class":62},[31,171,164],{"class":37},[31,173,175],{"class":174},"s4XuR"," argc",[31,177,178],{"class":62},", ",[31,180,181],{"class":37},"char",[31,183,184],{"class":37}," **",[31,186,187],{"class":174}," argv",[31,189,108],{"class":62},[31,191,193],{"class":33,"line":192},13,[31,194,81],{"class":62},[31,196,198,201,203,206],{"class":33,"line":197},14,[31,199,200],{"class":58},"  rclcpp",[31,202,72],{"class":62},[31,204,205],{"class":58},"init",[31,207,208],{"class":62},"(argc,argv);\n",[31,210,212],{"class":33,"line":211},15,[31,213,49],{"emptyLinePlaceholder":48},[31,215,217,219,221,224,226,229,231,234,237,240],{"class":33,"line":216},16,[31,218,200],{"class":58},[31,220,72],{"class":62},[31,222,223],{"class":58},"spin",[31,225,102],{"class":62},[31,227,228],{"class":58},"std",[31,230,72],{"class":62},[31,232,233],{"class":58},"make_shared",[31,235,236],{"class":62},"\u003C",[31,238,239],{"class":58},"MyNode",[31,241,242],{"class":62},">());\n",[31,244,246],{"class":33,"line":245},17,[31,247,49],{"emptyLinePlaceholder":48},[31,249,251,253,255,258],{"class":33,"line":250},18,[31,252,200],{"class":58},[31,254,72],{"class":62},[31,256,257],{"class":58},"shutdown",[31,259,260],{"class":62},"();\n",[31,262,264,267,270],{"class":33,"line":263},19,[31,265,266],{"class":37},"  return",[31,268,269],{"class":125}," 0",[31,271,272],{"class":62},";\n",[31,274,276],{"class":33,"line":275},20,[31,277,278],{"class":62},"}\n",[14,280,281],{},[17,282],{"alt":19,"src":283},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage333.webp",[14,285,286],{},[17,287],{"alt":19,"src":288},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage334.webp",[14,290,291],{},[292,293,294],"a",{"href":294,"rel":295},"https:\u002F\u002Fsnippet-generator.app\u002F",[296],"nofollow",[14,298,299],{},[17,300],{"alt":19,"src":301},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage335.webp",[14,303,304],{},[17,305],{"alt":19,"src":306},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage336.webp",[14,308,309],{},[17,310],{"alt":19,"src":311},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage337.webp",[22,313,317],{"className":314,"code":315,"language":316,"meta":19,"style":19},"language-JSON shiki shiki-themes github-light github-dark","{\n\"ROS2节点模板(C++)\": {\n    \"prefix\": \"ros2_node_cpp\",\n    \"body\": [\n      \"#include \\\"rclcpp\u002Frclcpp.hpp\\\"\",\n      \"\",\n      \"class MyNode: public rclcpp::Node\",\n      \"{\",\n      \"  public:\",\n      \"    MyNode():Node(\\\"mynode_node_cpp\\\")\",\n      \"    {\",\n      \"      RCLCPP_INFO(this->get_logger(),\\\"Hello World!\\\");\",\n      \"    }\",\n      \"};\",\n      \"\",\n      \"int main(int argc, char ** argv)\",\n      \"{\",\n      \"  rclcpp::init(argc,argv);\",\n      \"\",\n      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\",\n      \"\",\n      \"  rclcpp::shutdown();\",\n      \"  return 0;\",\n      \"}\"\n    ],\n    \"description\": \"ROS2节点模板(C++)\"\n  }\n}\n","JSON",[28,318,319,323,331,344,352,370,377,384,391,398,415,422,439,446,453,459,466,472,479,485,492,499,507,515,521,527,538,544],{"__ignoreMap":19},[31,320,321],{"class":33,"line":34},[31,322,81],{"class":62},[31,324,325,328],{"class":33,"line":45},[31,326,327],{"class":125},"\"ROS2节点模板(C++)\"",[31,329,330],{"class":62},": {\n",[31,332,333,336,338,341],{"class":33,"line":52},[31,334,335],{"class":125},"    \"prefix\"",[31,337,63],{"class":62},[31,339,340],{"class":41},"\"ros2_node_cpp\"",[31,342,343],{"class":62},",\n",[31,345,346,349],{"class":33,"line":78},[31,347,348],{"class":125},"    \"body\"",[31,350,351],{"class":62},": [\n",[31,353,354,357,360,363,365,368],{"class":33,"line":84},[31,355,356],{"class":41},"      \"#include ",[31,358,359],{"class":125},"\\\"",[31,361,362],{"class":41},"rclcpp\u002Frclcpp.hpp",[31,364,359],{"class":125},[31,366,367],{"class":41},"\"",[31,369,343],{"class":62},[31,371,372,375],{"class":33,"line":90},[31,373,374],{"class":41},"      \"\"",[31,376,343],{"class":62},[31,378,379,382],{"class":33,"line":111},[31,380,381],{"class":41},"      \"class MyNode: public rclcpp::Node\"",[31,383,343],{"class":62},[31,385,386,389],{"class":33,"line":117},[31,387,388],{"class":41},"      \"{\"",[31,390,343],{"class":62},[31,392,393,396],{"class":33,"line":144},[31,394,395],{"class":41},"      \"  public:\"",[31,397,343],{"class":62},[31,399,400,403,405,408,410,413],{"class":33,"line":150},[31,401,402],{"class":41},"      \"    MyNode():Node(",[31,404,359],{"class":125},[31,406,407],{"class":41},"mynode_node_cpp",[31,409,359],{"class":125},[31,411,412],{"class":41},")\"",[31,414,343],{"class":62},[31,416,417,420],{"class":33,"line":156},[31,418,419],{"class":41},"      \"    {\"",[31,421,343],{"class":62},[31,423,424,427,429,432,434,437],{"class":33,"line":161},[31,425,426],{"class":41},"      \"      RCLCPP_INFO(this->get_logger(),",[31,428,359],{"class":125},[31,430,431],{"class":41},"Hello World!",[31,433,359],{"class":125},[31,435,436],{"class":41},");\"",[31,438,343],{"class":62},[31,440,441,444],{"class":33,"line":192},[31,442,443],{"class":41},"      \"    }\"",[31,445,343],{"class":62},[31,447,448,451],{"class":33,"line":197},[31,449,450],{"class":41},"      \"};\"",[31,452,343],{"class":62},[31,454,455,457],{"class":33,"line":211},[31,456,374],{"class":41},[31,458,343],{"class":62},[31,460,461,464],{"class":33,"line":216},[31,462,463],{"class":41},"      \"int main(int argc, char ** argv)\"",[31,465,343],{"class":62},[31,467,468,470],{"class":33,"line":245},[31,469,388],{"class":41},[31,471,343],{"class":62},[31,473,474,477],{"class":33,"line":250},[31,475,476],{"class":41},"      \"  rclcpp::init(argc,argv);\"",[31,478,343],{"class":62},[31,480,481,483],{"class":33,"line":263},[31,482,374],{"class":41},[31,484,343],{"class":62},[31,486,487,490],{"class":33,"line":275},[31,488,489],{"class":41},"      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\"",[31,491,343],{"class":62},[31,493,495,497],{"class":33,"line":494},21,[31,496,374],{"class":41},[31,498,343],{"class":62},[31,500,502,505],{"class":33,"line":501},22,[31,503,504],{"class":41},"      \"  rclcpp::shutdown();\"",[31,506,343],{"class":62},[31,508,510,513],{"class":33,"line":509},23,[31,511,512],{"class":41},"      \"  return 0;\"",[31,514,343],{"class":62},[31,516,518],{"class":33,"line":517},24,[31,519,520],{"class":41},"      \"}\"\n",[31,522,524],{"class":33,"line":523},25,[31,525,526],{"class":62},"    ],\n",[31,528,530,533,535],{"class":33,"line":529},26,[31,531,532],{"class":125},"    \"description\"",[31,534,63],{"class":62},[31,536,537],{"class":41},"\"ROS2节点模板(C++)\"\n",[31,539,541],{"class":33,"line":540},27,[31,542,543],{"class":62},"  }\n",[31,545,547],{"class":33,"line":546},28,[31,548,278],{"class":62},[14,550,551],{},[17,552],{"alt":19,"src":553},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage338.webp",[14,555,556],{},[17,557],{"alt":19,"src":558},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage339.webp",[560,561],"hr",{},[14,563,564],{},[17,565],{"alt":19,"src":566},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage340.webp",[14,568,569],{},[17,570],{"alt":19,"src":571},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage341.webp",[14,573,574],{},[17,575],{"alt":19,"src":576},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage342.webp",[14,578,579],{},"第一个窗口是服务端，第二个窗口是客户端。",[14,581,582],{},[17,583],{"alt":19,"src":584},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage343.webp",[14,586,587],{},[17,588],{"alt":19,"src":589},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage344.webp",[14,591,592],{},"通信至少要涉及两方，只是一个人算不上通信。",[14,594,595],{},[17,596],{"alt":19,"src":597},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage345.webp",[14,599,600],{},[17,601],{"alt":19,"src":602},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage346.webp",[14,604,605],{},[17,606],{"alt":19,"src":607},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage347.webp",[14,609,610],{},"面向接口，话题是一致的，数据载体也是一致的，就可以无缝对接",[14,612,613],{},[17,614],{"alt":19,"src":615},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage348.webp",[14,617,618],{},[17,619],{"alt":19,"src":620},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage349.webp",[14,622,623],{},"话题通信：只能单向传输数据",[14,625,626],{},"服务通信：双向通信，可以互为客户端和服务端，客户端给服务端发数据，服务端给客户端响应",[14,628,629],{},"动作通信：和服务通信很像，有服务端给客户端发的最终响应，但是中间也会连续发送反馈给客户端。",[14,631,632,633,637],{},"参数服务：参数服务是基于",[634,635,636],"strong",{},"服务通信","的，参数客户先发送一个请求，然后从参数服务的数据池里拿走数据。也可以更改数据池里的东西，但是不能删除。",[14,639,640],{},[17,641],{"alt":19,"src":642},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage350.webp",[14,644,645],{},[17,646],{"alt":19,"src":647},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage351.webp",[14,649,650],{},[17,651],{"alt":19,"src":652},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage352.webp",[14,654,655],{},[17,656],{"alt":19,"src":657},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage353.webp",[14,659,660],{},[17,661],{"alt":19,"src":662},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage354.webp",[14,664,665],{},[17,666],{"alt":19,"src":667},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage355.webp",[14,669,670],{},[17,671],{"alt":19,"src":672},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage356.webp",[14,674,675],{},"参数通信不用自己定义接口文件，系统会自己弄接口文件，但是开发者是看不到该文件的，该文件被封装了。",[14,677,678],{},"我们操作的数据被封装成参数对象了。",[560,680],{},[14,682,683],{},[17,684],{"alt":19,"src":685},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage357.webp",[14,687,688],{},"ros2 pkg create + 功能包名（可以写在前面或者） + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[14,690,691],{},[17,692],{"alt":19,"src":693},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage358.webp",[14,695,696],{},"在src里创建功能包",[14,698,699],{},[17,700],{"alt":19,"src":701},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage359.webp",[10,703,704],{"id":704},"话题通信_理论",[14,706,707],{},[17,708],{"alt":19,"src":709},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage360.webp",[14,711,712],{},[17,713],{"alt":19,"src":714},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage361.webp",[14,716,717],{},[17,718],{"alt":19,"src":719},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage362.webp",[14,721,722],{},[17,723],{"alt":19,"src":724},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage363.webp",[14,726,727],{},"在ROS1里，node和node之间通信需要经过master，每个传输数据的node都需要在master里注册相关数据，master再将信息进行匹配。",[14,729,730],{},[17,731],{"alt":19,"src":732},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage364.webp",[14,734,735],{},[17,736],{"alt":19,"src":737},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage365.webp",[14,739,740],{},"一个publisher发布数据，两个subscriber都会接收到数据。",[14,742,743],{},[17,744],{"alt":19,"src":745},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage366.webp",[14,747,748],{},[17,749],{"alt":19,"src":750},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage367.webp",[14,752,753],{},[17,754],{"alt":19,"src":755},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage368.webp",[10,757,759],{"id":758},"话题通信_实验1c","话题通信_实验1(C++)",[14,761,762],{},[17,763],{"alt":19,"src":764},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage369.webp",[14,766,767],{},[17,768],{"alt":19,"src":769},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage370.webp",[14,771,772],{},[17,773],{"alt":19,"src":774},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage371.webp",[14,776,777],{},[17,778],{"alt":19,"src":779},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage372.webp",[14,781,782],{},[17,783],{"alt":19,"src":784},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage373.webp",[14,786,787],{},[17,788],{"alt":19,"src":789},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage374.webp",[22,791,793],{"className":314,"code":792,"language":316,"meta":19,"style":19},"ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[28,794,795],{"__ignoreMap":19},[31,796,797,800,803,806,809],{"class":33,"line":34},[31,798,799],{"class":62},"ros",[31,801,802],{"class":125},"2",[31,804,805],{"class":62}," pkg create cpp",[31,807,808],{"class":125},"01",[31,810,811],{"class":62},"_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[14,813,814],{},"依赖还需要std_msgs，base_interfaces_demo（这里面存放了我们自己定义的所需的接口）",[14,816,817],{},"ros2 pkg create + 功能包名（可以写在前面或者最后面） + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[14,819,820],{},[17,821],{"alt":19,"src":822},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage375.webp",[560,824],{},[14,826,827],{},[17,828],{"alt":19,"src":829},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage376.webp",[14,831,832],{},[17,833],{"alt":19,"src":834},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage377.webp",[560,836],{},[14,838,839],{},"发布方",[14,841,842],{},[17,843],{"alt":19,"src":844},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage378.webp",[14,846,847],{},"定时器是用来控制发送频率的，定时器里还会执行一个回调函数timer_callback。",[14,849,850],{},[17,851],{"alt":19,"src":852},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage379.webp",[14,854,855],{},"count_是计数器，每执行一次这个回调函数，count_就++；",[14,857,858],{},[17,859],{"alt":19,"src":860},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage380.webp",[14,862,863],{},"spin函数是，程序一旦执行到这里，就返回到上面，返回到上面是为了调用回调函数，如果没有这个spin函数，那么我们这个回调函数是不会被执行的。",[14,865,866],{},"以后只要我们创建完节点类对象指针，就要把该指针传入spin()函数里。",[560,868],{},[14,870,871],{},[17,872],{"alt":19,"src":873},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage381.webp",[14,875,876],{},[17,877],{"alt":19,"src":878},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage382.webp",[14,880,881],{},[17,882],{"alt":19,"src":883},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage383.webp",[14,885,886],{},[17,887],{"alt":19,"src":888},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage384.webp",[14,890,891],{},[17,892],{"alt":19,"src":893},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage385.webp",[14,895,896],{},[17,897],{"alt":19,"src":898},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage386.webp",[22,900,902],{"className":24,"code":901,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass Talker: public rclcpp::Node\n{\n  public:\n    Talker():Node(\"talker_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalker>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,903,904,910,914,931,935,939,955,959,978,982,986,990,1012,1016,1026,1030,1053,1057,1067,1075],{"__ignoreMap":19},[31,905,906,908],{"class":33,"line":34},[31,907,38],{"class":37},[31,909,42],{"class":41},[31,911,912],{"class":33,"line":45},[31,913,49],{"emptyLinePlaceholder":48},[31,915,916,918,921,923,925,927,929],{"class":33,"line":52},[31,917,55],{"class":37},[31,919,920],{"class":58}," Talker",[31,922,63],{"class":62},[31,924,66],{"class":37},[31,926,69],{"class":58},[31,928,72],{"class":62},[31,930,75],{"class":58},[31,932,933],{"class":33,"line":78},[31,934,81],{"class":62},[31,936,937],{"class":33,"line":84},[31,938,87],{"class":37},[31,940,941,944,946,948,950,953],{"class":33,"line":90},[31,942,943],{"class":58},"    Talker",[31,945,96],{"class":62},[31,947,99],{"class":58},[31,949,102],{"class":62},[31,951,952],{"class":41},"\"talker_node_cpp\"",[31,954,108],{"class":62},[31,956,957],{"class":33,"line":111},[31,958,114],{"class":62},[31,960,961,963,965,967,969,971,973,976],{"class":33,"line":117},[31,962,120],{"class":58},[31,964,102],{"class":62},[31,966,126],{"class":125},[31,968,129],{"class":62},[31,970,132],{"class":58},[31,972,135],{"class":62},[31,974,975],{"class":41},"\"发布节点创建！\"",[31,977,141],{"class":62},[31,979,980],{"class":33,"line":144},[31,981,147],{"class":62},[31,983,984],{"class":33,"line":150},[31,985,153],{"class":62},[31,987,988],{"class":33,"line":156},[31,989,49],{"emptyLinePlaceholder":48},[31,991,992,994,996,998,1000,1002,1004,1006,1008,1010],{"class":33,"line":161},[31,993,164],{"class":37},[31,995,167],{"class":58},[31,997,102],{"class":62},[31,999,164],{"class":37},[31,1001,175],{"class":174},[31,1003,178],{"class":62},[31,1005,181],{"class":37},[31,1007,184],{"class":37},[31,1009,187],{"class":174},[31,1011,108],{"class":62},[31,1013,1014],{"class":33,"line":192},[31,1015,81],{"class":62},[31,1017,1018,1020,1022,1024],{"class":33,"line":197},[31,1019,200],{"class":58},[31,1021,72],{"class":62},[31,1023,205],{"class":58},[31,1025,208],{"class":62},[31,1027,1028],{"class":33,"line":211},[31,1029,49],{"emptyLinePlaceholder":48},[31,1031,1032,1034,1036,1038,1040,1042,1044,1046,1048,1051],{"class":33,"line":216},[31,1033,200],{"class":58},[31,1035,72],{"class":62},[31,1037,223],{"class":58},[31,1039,102],{"class":62},[31,1041,228],{"class":58},[31,1043,72],{"class":62},[31,1045,233],{"class":58},[31,1047,236],{"class":62},[31,1049,1050],{"class":58},"Talker",[31,1052,242],{"class":62},[31,1054,1055],{"class":33,"line":245},[31,1056,49],{"emptyLinePlaceholder":48},[31,1058,1059,1061,1063,1065],{"class":33,"line":250},[31,1060,200],{"class":58},[31,1062,72],{"class":62},[31,1064,257],{"class":58},[31,1066,260],{"class":62},[31,1068,1069,1071,1073],{"class":33,"line":263},[31,1070,266],{"class":37},[31,1072,269],{"class":125},[31,1074,272],{"class":62},[31,1076,1077],{"class":33,"line":275},[31,1078,278],{"class":62},[14,1080,1081],{},"此时程序处于挂起状态，会一直运行，因为spin函数。",[14,1083,1084],{},"想结束得按Ctrl+C。",[14,1086,1087],{},"我们想要的类型在std_msgs里，所以要加头文件。",[14,1089,1090],{},[17,1091],{"alt":19,"src":1092},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage387.webp",[14,1094,1095],{},"create_publisher()第一个入口参数是话题名称，是一个字符串",[14,1097,1098],{},"create_publisher()第二个入口参数是QOS服务质量有关的，是队列深度是一串数字，暂时可以先填10或者20等。",[14,1100,1101],{},"也就是当网络质量不好的时候，消息发不出去了，我们可以将数据先存到队列里，假设填10，最多就可以存10个数，当网络恢复了，我们就从队列里取数据，将其发出。",[14,1103,1104],{},"其他入口参数有默认值，可以暂时先不管。",[14,1106,1107],{},"返回值是一个publisher的指针。",[14,1109,1110],{},[17,1111],{"alt":19,"src":1112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage388.webp",[14,1114,1115],{},[17,1116],{"alt":19,"src":1117},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage389.webp",[14,1119,1120],{},[17,1121],{"alt":19,"src":1122},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage390.webp",[14,1124,1125],{},[17,1126],{"alt":19,"src":1127},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage391.webp",[14,1129,1130],{},"创建定时器，这个函数有模板，但是模板有默认值可以不设置，",[14,1132,1133],{},"然后三个入口参数，",[14,1135,1136],{},"第一个入口参数是持续时间，也就是周期；",[14,1138,1139],{},"第二个入口参数是回调函数；",[14,1141,1142],{},"第三个入口参数有默认值，先不管。",[14,1144,1145],{},[17,1146],{"alt":19,"src":1147},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage392.webp",[14,1149,1150],{},"使用该命名空间的优势是，在第一个入口参数，可以直接填时间+单位。",[14,1152,1153],{},"如果是1s就写1s，是100ms就填100ms。",[14,1155,1156],{},[17,1157],{"alt":19,"src":1158},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage393.webp",[14,1160,1161],{},[17,1162],{"alt":19,"src":1163},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage394.webp",[14,1165,1166],{},"该函数还有个返回值，返回值是定时器相关的一个指针。",[14,1168,1169],{},[17,1170],{"alt":19,"src":1171},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage395.webp",[14,1173,1174],{},[17,1175],{"alt":19,"src":1176},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage396.webp",[14,1178,1179],{},[17,1180],{"alt":19,"src":1181},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage397.webp",[14,1183,1184],{},"该函数有多个重载，选择适合自己的一个函数。",[14,1186,1187],{},[17,1188],{"alt":19,"src":1189},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage398.webp",[14,1191,1192],{},"发布对象得先创建对象。",[14,1194,1195],{},[17,1196],{"alt":19,"src":1197},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage399.webp",[14,1199,1200],{},[17,1201],{"alt":19,"src":1202},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage400.webp",[14,1204,1205],{},[17,1206],{"alt":19,"src":1207},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage401.webp",[14,1209,1210],{},"把count转化成字符串并发送。",[14,1212,1213],{},[17,1214],{"alt":19,"src":1215},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage402.webp",[14,1217,1218],{},"因为它是一个std::string类型的，我们要转化成c风格的字符串。",[14,1220,1221],{},[17,1222],{"alt":19,"src":1223},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage403.webp",[14,1225,1226],{},[17,1227],{"alt":19,"src":1228},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage404.webp",[14,1230,1231],{},[17,1232],{"alt":19,"src":1233},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage405.webp",[14,1235,1236],{},"尽量在构造函数的时候，给count赋初值0.",[22,1238,1240],{"className":24,"code":1239,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass Talker: public rclcpp::Node\n{\n  public:\n    Talker():Node(\"talker_node_cpp\")，count(0)\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n      publisher_ = this->create_publisher\u003Cstd_msgs::msg::String>(\"chatter\",10);\n      timer_ = this->create_wall_timer(1s,std::bind(&Talker::on_timer,this));\n    }\n  private:\n    void on_timer()\n    {\n      auto message = std_msgs::msg::String();\n      message.data = \"hello world!\" + std::to_string(count++);\n      RCLCPP_INFO(this->get_logger(),\"发布方发布的消息：%s\",message.data.c_str());\n      publisher_->publish(message);\n    }\n    rclcpp::Publisher\u003Cstd_msgs::msg::String>::SharedPtr publisher_;\n    rclcpp::TimerBase::SharedPtr timer_;\n    size_t count;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalker>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,1241,1242,1248,1255,1259,1277,1281,1297,1301,1305,1330,1334,1352,1395,1441,1445,1450,1461,1465,1489,1517,1548,1559,1563,1588,1600,1608,1612,1616,1638,1643,1654,1659,1682,1687,1698,1707],{"__ignoreMap":19},[31,1243,1244,1246],{"class":33,"line":34},[31,1245,38],{"class":37},[31,1247,42],{"class":41},[31,1249,1250,1252],{"class":33,"line":45},[31,1251,38],{"class":37},[31,1253,1254],{"class":41}," \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n",[31,1256,1257],{"class":33,"line":52},[31,1258,49],{"emptyLinePlaceholder":48},[31,1260,1261,1264,1267,1270,1272,1275],{"class":33,"line":78},[31,1262,1263],{"class":37},"using",[31,1265,1266],{"class":37}," namespace",[31,1268,1269],{"class":58}," std",[31,1271,72],{"class":62},[31,1273,1274],{"class":58},"chrono_literals",[31,1276,272],{"class":62},[31,1278,1279],{"class":33,"line":84},[31,1280,49],{"emptyLinePlaceholder":48},[31,1282,1283,1285,1287,1289,1291,1293,1295],{"class":33,"line":90},[31,1284,55],{"class":37},[31,1286,920],{"class":58},[31,1288,63],{"class":62},[31,1290,66],{"class":37},[31,1292,69],{"class":58},[31,1294,72],{"class":62},[31,1296,75],{"class":58},[31,1298,1299],{"class":33,"line":111},[31,1300,81],{"class":62},[31,1302,1303],{"class":33,"line":117},[31,1304,87],{"class":37},[31,1306,1307,1309,1311,1313,1315,1317,1320,1323,1325,1328],{"class":33,"line":144},[31,1308,943],{"class":58},[31,1310,96],{"class":62},[31,1312,99],{"class":58},[31,1314,102],{"class":62},[31,1316,952],{"class":41},[31,1318,1319],{"class":62},")，",[31,1321,1322],{"class":58},"count",[31,1324,102],{"class":62},[31,1326,1327],{"class":125},"0",[31,1329,108],{"class":62},[31,1331,1332],{"class":33,"line":150},[31,1333,114],{"class":62},[31,1335,1336,1338,1340,1342,1344,1346,1348,1350],{"class":33,"line":156},[31,1337,120],{"class":58},[31,1339,102],{"class":62},[31,1341,126],{"class":125},[31,1343,129],{"class":62},[31,1345,132],{"class":58},[31,1347,135],{"class":62},[31,1349,975],{"class":41},[31,1351,141],{"class":62},[31,1353,1354,1357,1360,1363,1366,1368,1371,1373,1376,1379,1382,1384,1387,1390,1393],{"class":33,"line":161},[31,1355,1356],{"class":62},"      publisher_ ",[31,1358,1359],{"class":37},"=",[31,1361,1362],{"class":125}," this",[31,1364,1365],{"class":62},"->create_publisher",[31,1367,236],{"class":37},[31,1369,1370],{"class":58},"std_msgs",[31,1372,72],{"class":62},[31,1374,1375],{"class":58},"msg",[31,1377,1378],{"class":62},"::String",[31,1380,1381],{"class":37},">",[31,1383,102],{"class":62},[31,1385,1386],{"class":41},"\"chatter\"",[31,1388,1389],{"class":62},",",[31,1391,1392],{"class":125},"10",[31,1394,141],{"class":62},[31,1396,1397,1400,1402,1404,1406,1409,1411,1414,1417,1419,1421,1423,1426,1428,1431,1433,1436,1438],{"class":33,"line":192},[31,1398,1399],{"class":62},"      timer_ ",[31,1401,1359],{"class":37},[31,1403,1362],{"class":125},[31,1405,129],{"class":62},[31,1407,1408],{"class":58},"create_wall_timer",[31,1410,102],{"class":62},[31,1412,1413],{"class":125},"1",[31,1415,1416],{"class":37},"s",[31,1418,1389],{"class":62},[31,1420,228],{"class":58},[31,1422,72],{"class":62},[31,1424,1425],{"class":58},"bind",[31,1427,102],{"class":62},[31,1429,1430],{"class":37},"&",[31,1432,1050],{"class":58},[31,1434,1435],{"class":62},"::on_timer,",[31,1437,126],{"class":125},[31,1439,1440],{"class":62},"));\n",[31,1442,1443],{"class":33,"line":197},[31,1444,147],{"class":62},[31,1446,1447],{"class":33,"line":211},[31,1448,1449],{"class":37},"  private:\n",[31,1451,1452,1455,1458],{"class":33,"line":216},[31,1453,1454],{"class":37},"    void",[31,1456,1457],{"class":58}," on_timer",[31,1459,1460],{"class":62},"()\n",[31,1462,1463],{"class":33,"line":245},[31,1464,114],{"class":62},[31,1466,1467,1470,1473,1475,1478,1480,1482,1484,1487],{"class":33,"line":250},[31,1468,1469],{"class":37},"      auto",[31,1471,1472],{"class":62}," message ",[31,1474,1359],{"class":37},[31,1476,1477],{"class":58}," std_msgs",[31,1479,72],{"class":62},[31,1481,1375],{"class":58},[31,1483,72],{"class":62},[31,1485,1486],{"class":58},"String",[31,1488,260],{"class":62},[31,1490,1491,1494,1496,1499,1502,1504,1506,1509,1512,1515],{"class":33,"line":263},[31,1492,1493],{"class":62},"      message.data ",[31,1495,1359],{"class":37},[31,1497,1498],{"class":41}," \"hello world!\"",[31,1500,1501],{"class":37}," +",[31,1503,1269],{"class":58},[31,1505,72],{"class":62},[31,1507,1508],{"class":58},"to_string",[31,1510,1511],{"class":62},"(count",[31,1513,1514],{"class":37},"++",[31,1516,141],{"class":62},[31,1518,1519,1521,1523,1525,1527,1529,1531,1534,1537,1539,1542,1545],{"class":33,"line":275},[31,1520,120],{"class":58},[31,1522,102],{"class":62},[31,1524,126],{"class":125},[31,1526,129],{"class":62},[31,1528,132],{"class":58},[31,1530,135],{"class":62},[31,1532,1533],{"class":41},"\"发布方发布的消息：",[31,1535,1536],{"class":125},"%s",[31,1538,367],{"class":41},[31,1540,1541],{"class":62},",message.data.",[31,1543,1544],{"class":58},"c_str",[31,1546,1547],{"class":62},"());\n",[31,1549,1550,1553,1556],{"class":33,"line":494},[31,1551,1552],{"class":62},"      publisher_->",[31,1554,1555],{"class":58},"publish",[31,1557,1558],{"class":62},"(message);\n",[31,1560,1561],{"class":33,"line":501},[31,1562,147],{"class":62},[31,1564,1565,1568,1570,1573,1575,1577,1579,1581,1583,1585],{"class":33,"line":509},[31,1566,1567],{"class":58},"    rclcpp",[31,1569,72],{"class":62},[31,1571,1572],{"class":58},"Publisher",[31,1574,236],{"class":62},[31,1576,1370],{"class":58},[31,1578,72],{"class":62},[31,1580,1375],{"class":58},[31,1582,72],{"class":62},[31,1584,1486],{"class":58},[31,1586,1587],{"class":62},">::SharedPtr publisher_;\n",[31,1589,1590,1592,1594,1597],{"class":33,"line":517},[31,1591,1567],{"class":58},[31,1593,72],{"class":62},[31,1595,1596],{"class":58},"TimerBase",[31,1598,1599],{"class":62},"::SharedPtr timer_;\n",[31,1601,1602,1605],{"class":33,"line":523},[31,1603,1604],{"class":37},"    size_t",[31,1606,1607],{"class":62}," count;\n",[31,1609,1610],{"class":33,"line":529},[31,1611,153],{"class":62},[31,1613,1614],{"class":33,"line":540},[31,1615,49],{"emptyLinePlaceholder":48},[31,1617,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636],{"class":33,"line":546},[31,1619,164],{"class":37},[31,1621,167],{"class":58},[31,1623,102],{"class":62},[31,1625,164],{"class":37},[31,1627,175],{"class":174},[31,1629,178],{"class":62},[31,1631,181],{"class":37},[31,1633,184],{"class":37},[31,1635,187],{"class":174},[31,1637,108],{"class":62},[31,1639,1641],{"class":33,"line":1640},29,[31,1642,81],{"class":62},[31,1644,1646,1648,1650,1652],{"class":33,"line":1645},30,[31,1647,200],{"class":58},[31,1649,72],{"class":62},[31,1651,205],{"class":58},[31,1653,208],{"class":62},[31,1655,1657],{"class":33,"line":1656},31,[31,1658,49],{"emptyLinePlaceholder":48},[31,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680],{"class":33,"line":1661},32,[31,1663,200],{"class":58},[31,1665,72],{"class":62},[31,1667,223],{"class":58},[31,1669,102],{"class":62},[31,1671,228],{"class":58},[31,1673,72],{"class":62},[31,1675,233],{"class":58},[31,1677,236],{"class":62},[31,1679,1050],{"class":58},[31,1681,242],{"class":62},[31,1683,1685],{"class":33,"line":1684},33,[31,1686,49],{"emptyLinePlaceholder":48},[31,1688,1690,1692,1694,1696],{"class":33,"line":1689},34,[31,1691,200],{"class":58},[31,1693,72],{"class":62},[31,1695,257],{"class":58},[31,1697,260],{"class":62},[31,1699,1701,1703,1705],{"class":33,"line":1700},35,[31,1702,266],{"class":37},[31,1704,269],{"class":125},[31,1706,272],{"class":62},[31,1708,1710],{"class":33,"line":1709},36,[31,1711,278],{"class":62},[14,1713,1714],{},[17,1715],{"alt":19,"src":1716},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage406.webp",[14,1718,1719],{},"但是不一定消息真的发布出去了。",[14,1721,1722],{},"验证方法：",[22,1724,1728],{"className":1725,"code":1726,"language":1727,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","ros2 topic echo \u002Fxxx\n","bash",[28,1729,1730],{"__ignoreMap":19},[31,1731,1732,1735,1738,1741],{"class":33,"line":34},[31,1733,1734],{"class":58},"ros2",[31,1736,1737],{"class":41}," topic",[31,1739,1740],{"class":41}," echo",[31,1742,1743],{"class":41}," \u002Fxxx\n",[14,1745,1746],{},[17,1747],{"alt":19,"src":1748},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage407.webp",[14,1750,1751],{},"这样才能确定消息被发到chatter话题上了。",[560,1753],{},[14,1755,1756],{},[17,1757],{"alt":19,"src":1758},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage408.webp",[14,1760,1761],{},[17,1762],{"alt":19,"src":1763},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage409.webp",[14,1765,1766],{},[17,1767],{"alt":19,"src":1768},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage410.webp",[14,1770,1771],{},[17,1772],{"alt":19,"src":1773},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage411.webp",[14,1775,1776],{},[17,1777],{"alt":19,"src":1778},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage412.webp",[14,1780,1781],{},[17,1782],{"alt":19,"src":1783},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage413.webp",[14,1785,1786],{},[17,1787],{"alt":19,"src":1788},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage414.webp",[14,1790,1791],{},[17,1792],{"alt":19,"src":1793},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage415.webp",[14,1795,1796],{},[17,1797],{"alt":19,"src":1798},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage416.webp",[14,1800,1801],{},[17,1802],{"alt":19,"src":1803},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage417.webp",[22,1805,1807],{"className":24,"code":1806,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass Listener: public rclcpp::Node\n{\npublic:\n    Listener():Node(\"listener_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n    }\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListener>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[28,1808,1809,1815,1819,1836,1840,1845,1861,1865,1885,1889,1893,1897,1921,1925,1935,1939,1962,1966,1976,1985],{"__ignoreMap":19},[31,1810,1811,1813],{"class":33,"line":34},[31,1812,38],{"class":37},[31,1814,42],{"class":41},[31,1816,1817],{"class":33,"line":45},[31,1818,49],{"emptyLinePlaceholder":48},[31,1820,1821,1823,1826,1828,1830,1832,1834],{"class":33,"line":52},[31,1822,55],{"class":37},[31,1824,1825],{"class":58}," Listener",[31,1827,63],{"class":62},[31,1829,66],{"class":37},[31,1831,69],{"class":58},[31,1833,72],{"class":62},[31,1835,75],{"class":58},[31,1837,1838],{"class":33,"line":78},[31,1839,81],{"class":62},[31,1841,1842],{"class":33,"line":84},[31,1843,1844],{"class":37},"public:\n",[31,1846,1847,1850,1852,1854,1856,1859],{"class":33,"line":90},[31,1848,1849],{"class":58},"    Listener",[31,1851,96],{"class":62},[31,1853,99],{"class":58},[31,1855,102],{"class":62},[31,1857,1858],{"class":41},"\"listener_node_cpp\"",[31,1860,108],{"class":62},[31,1862,1863],{"class":33,"line":111},[31,1864,114],{"class":62},[31,1866,1867,1870,1872,1874,1876,1878,1880,1883],{"class":33,"line":117},[31,1868,1869],{"class":58},"        RCLCPP_INFO",[31,1871,102],{"class":62},[31,1873,126],{"class":125},[31,1875,129],{"class":62},[31,1877,132],{"class":58},[31,1879,135],{"class":62},[31,1881,1882],{"class":41},"\"订阅方创建!\"",[31,1884,141],{"class":62},[31,1886,1887],{"class":33,"line":144},[31,1888,147],{"class":62},[31,1890,1891],{"class":33,"line":150},[31,1892,153],{"class":62},[31,1894,1895],{"class":33,"line":156},[31,1896,49],{"emptyLinePlaceholder":48},[31,1898,1899,1901,1903,1905,1907,1909,1911,1913,1916,1918],{"class":33,"line":161},[31,1900,164],{"class":37},[31,1902,167],{"class":58},[31,1904,102],{"class":62},[31,1906,164],{"class":37},[31,1908,175],{"class":174},[31,1910,178],{"class":62},[31,1912,181],{"class":37},[31,1914,1915],{"class":37}," *",[31,1917,187],{"class":174},[31,1919,1920],{"class":62},"[])\n",[31,1922,1923],{"class":33,"line":192},[31,1924,81],{"class":62},[31,1926,1927,1929,1931,1933],{"class":33,"line":197},[31,1928,1567],{"class":58},[31,1930,72],{"class":62},[31,1932,205],{"class":58},[31,1934,208],{"class":62},[31,1936,1937],{"class":33,"line":211},[31,1938,49],{"emptyLinePlaceholder":48},[31,1940,1941,1943,1945,1947,1949,1951,1953,1955,1957,1960],{"class":33,"line":216},[31,1942,1567],{"class":58},[31,1944,72],{"class":62},[31,1946,223],{"class":58},[31,1948,102],{"class":62},[31,1950,228],{"class":58},[31,1952,72],{"class":62},[31,1954,233],{"class":58},[31,1956,236],{"class":62},[31,1958,1959],{"class":58},"Listener",[31,1961,242],{"class":62},[31,1963,1964],{"class":33,"line":245},[31,1965,49],{"emptyLinePlaceholder":48},[31,1967,1968,1970,1972,1974],{"class":33,"line":250},[31,1969,1567],{"class":58},[31,1971,72],{"class":62},[31,1973,257],{"class":58},[31,1975,260],{"class":62},[31,1977,1978,1981,1983],{"class":33,"line":263},[31,1979,1980],{"class":37},"    return",[31,1982,269],{"class":125},[31,1984,272],{"class":62},[31,1986,1987],{"class":33,"line":275},[31,1988,278],{"class":62},[14,1990,1991],{},[17,1992],{"alt":19,"src":1993},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage418.webp",[14,1995,1996],{},"编译之前别忘了编辑配置文件",[14,1998,1999],{},[17,2000],{"alt":19,"src":2001},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage419.webp",[14,2003,2004],{},"依赖包已经自动生成了，不用管。",[14,2006,2007],{},[17,2008],{"alt":19,"src":2009},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage420.webp",[14,2011,2012],{},"主要改这三大部分",[14,2014,2015],{},[17,2016],{"alt":19,"src":2017},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage421.webp",[14,2019,2020],{},[17,2021],{"alt":19,"src":2022},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage422.webp",[14,2024,2025],{},[17,2026],{"alt":19,"src":2027},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage423.webp",[14,2029,2030],{},[17,2031],{"alt":19,"src":2032},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage424.webp",[14,2034,2035],{},[17,2036],{"alt":19,"src":2037},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage425.webp",[14,2039,2040],{},"一共有5个入口参数，后面两个入口参数有默认值。",[14,2042,2043],{},"第一个入口参数是话题名称，要保证和发布方一致；",[14,2045,2046],{},"第二个入口参数是QoS，就是服务质量管理，队列深度，10或者20暂时随便设置，可以看看发布方那边的QoS的解释;",[14,2048,2049],{},"第三个入口参数是回调函数，一旦接收到数据，就触发该回调函数。",[14,2051,2052],{},"返回值是一个订阅对象的指针。",[14,2054,2055],{},[17,2056],{"alt":19,"src":2057},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage426.webp",[14,2059,2060],{},[17,2061],{"alt":19,"src":2062},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage427.webp",[14,2064,2065],{},"std::placeholders::_1这个是占位符，_1是指一个。这个地方本应该填入消息。",[14,2067,2068],{},[17,2069],{"alt":19,"src":2070},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage428.webp",[14,2072,2073],{},[17,2074],{"alt":19,"src":2075},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage429.webp",[14,2077,2078],{},[17,2079],{"alt":19,"src":2080},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage430.webp",[14,2082,2083],{},[17,2084],{"alt":19,"src":2085},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage431.webp",[22,2087,2089],{"className":24,"code":2088,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n\nclass Listener: public rclcpp::Node\n{\npublic:\n    Listener():Node(\"listener_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n        subscription_ = this->create_subscription\u003Cstd_msgs::msg::String>(\"chatter\",10,std::bind(&Listener::do_callback,this,std::placeholders::_1));\n\n    }\nprivate:\n    void do_callback(const std_msgs::msg::String &msg)\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅到的消息是:%s\",msg.data.c_str());\n    }\n    rclcpp::Subscription\u003Cstd_msgs::msg::String>::SharedPtr subscription_;\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListener>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[28,2090,2091,2097,2103,2107,2123,2127,2131,2145,2149,2167,2230,2234,2238,2243,2272,2276,2304,2308,2332,2336,2340,2362,2366,2376,2380,2402,2406,2416,2424],{"__ignoreMap":19},[31,2092,2093,2095],{"class":33,"line":34},[31,2094,38],{"class":37},[31,2096,42],{"class":41},[31,2098,2099,2101],{"class":33,"line":45},[31,2100,38],{"class":37},[31,2102,1254],{"class":41},[31,2104,2105],{"class":33,"line":52},[31,2106,49],{"emptyLinePlaceholder":48},[31,2108,2109,2111,2113,2115,2117,2119,2121],{"class":33,"line":78},[31,2110,55],{"class":37},[31,2112,1825],{"class":58},[31,2114,63],{"class":62},[31,2116,66],{"class":37},[31,2118,69],{"class":58},[31,2120,72],{"class":62},[31,2122,75],{"class":58},[31,2124,2125],{"class":33,"line":84},[31,2126,81],{"class":62},[31,2128,2129],{"class":33,"line":90},[31,2130,1844],{"class":37},[31,2132,2133,2135,2137,2139,2141,2143],{"class":33,"line":111},[31,2134,1849],{"class":58},[31,2136,96],{"class":62},[31,2138,99],{"class":58},[31,2140,102],{"class":62},[31,2142,1858],{"class":41},[31,2144,108],{"class":62},[31,2146,2147],{"class":33,"line":117},[31,2148,114],{"class":62},[31,2150,2151,2153,2155,2157,2159,2161,2163,2165],{"class":33,"line":144},[31,2152,1869],{"class":58},[31,2154,102],{"class":62},[31,2156,126],{"class":125},[31,2158,129],{"class":62},[31,2160,132],{"class":58},[31,2162,135],{"class":62},[31,2164,1882],{"class":41},[31,2166,141],{"class":62},[31,2168,2169,2172,2174,2176,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2216,2218,2220,2222,2224,2227],{"class":33,"line":150},[31,2170,2171],{"class":62},"        subscription_ ",[31,2173,1359],{"class":37},[31,2175,1362],{"class":125},[31,2177,2178],{"class":62},"->create_subscription",[31,2180,236],{"class":37},[31,2182,1370],{"class":58},[31,2184,72],{"class":62},[31,2186,1375],{"class":58},[31,2188,1378],{"class":62},[31,2190,1381],{"class":37},[31,2192,102],{"class":62},[31,2194,1386],{"class":41},[31,2196,1389],{"class":62},[31,2198,1392],{"class":125},[31,2200,1389],{"class":62},[31,2202,228],{"class":58},[31,2204,72],{"class":62},[31,2206,1425],{"class":58},[31,2208,102],{"class":62},[31,2210,1430],{"class":37},[31,2212,1959],{"class":58},[31,2214,2215],{"class":62},"::do_callback,",[31,2217,126],{"class":125},[31,2219,1389],{"class":62},[31,2221,228],{"class":58},[31,2223,72],{"class":62},[31,2225,2226],{"class":58},"placeholders",[31,2228,2229],{"class":62},"::_1));\n",[31,2231,2232],{"class":33,"line":156},[31,2233,49],{"emptyLinePlaceholder":48},[31,2235,2236],{"class":33,"line":161},[31,2237,147],{"class":62},[31,2239,2240],{"class":33,"line":192},[31,2241,2242],{"class":37},"private:\n",[31,2244,2245,2247,2250,2252,2255,2257,2259,2261,2263,2265,2268,2270],{"class":33,"line":197},[31,2246,1454],{"class":37},[31,2248,2249],{"class":58}," do_callback",[31,2251,102],{"class":62},[31,2253,2254],{"class":37},"const",[31,2256,1477],{"class":58},[31,2258,72],{"class":62},[31,2260,1375],{"class":58},[31,2262,72],{"class":62},[31,2264,1486],{"class":58},[31,2266,2267],{"class":37}," &",[31,2269,1375],{"class":174},[31,2271,108],{"class":62},[31,2273,2274],{"class":33,"line":211},[31,2275,114],{"class":62},[31,2277,2278,2280,2282,2284,2286,2288,2290,2293,2295,2297,2300,2302],{"class":33,"line":216},[31,2279,1869],{"class":58},[31,2281,102],{"class":62},[31,2283,126],{"class":125},[31,2285,129],{"class":62},[31,2287,132],{"class":58},[31,2289,135],{"class":62},[31,2291,2292],{"class":41},"\"订阅到的消息是:",[31,2294,1536],{"class":125},[31,2296,367],{"class":41},[31,2298,2299],{"class":62},",msg.data.",[31,2301,1544],{"class":58},[31,2303,1547],{"class":62},[31,2305,2306],{"class":33,"line":245},[31,2307,147],{"class":62},[31,2309,2310,2312,2314,2317,2319,2321,2323,2325,2327,2329],{"class":33,"line":250},[31,2311,1567],{"class":58},[31,2313,72],{"class":62},[31,2315,2316],{"class":58},"Subscription",[31,2318,236],{"class":62},[31,2320,1370],{"class":58},[31,2322,72],{"class":62},[31,2324,1375],{"class":58},[31,2326,72],{"class":62},[31,2328,1486],{"class":58},[31,2330,2331],{"class":62},">::SharedPtr subscription_;\n",[31,2333,2334],{"class":33,"line":263},[31,2335,153],{"class":62},[31,2337,2338],{"class":33,"line":275},[31,2339,49],{"emptyLinePlaceholder":48},[31,2341,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360],{"class":33,"line":494},[31,2343,164],{"class":37},[31,2345,167],{"class":58},[31,2347,102],{"class":62},[31,2349,164],{"class":37},[31,2351,175],{"class":174},[31,2353,178],{"class":62},[31,2355,181],{"class":37},[31,2357,1915],{"class":37},[31,2359,187],{"class":174},[31,2361,1920],{"class":62},[31,2363,2364],{"class":33,"line":501},[31,2365,81],{"class":62},[31,2367,2368,2370,2372,2374],{"class":33,"line":509},[31,2369,1567],{"class":58},[31,2371,72],{"class":62},[31,2373,205],{"class":58},[31,2375,208],{"class":62},[31,2377,2378],{"class":33,"line":517},[31,2379,49],{"emptyLinePlaceholder":48},[31,2381,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400],{"class":33,"line":523},[31,2383,1567],{"class":58},[31,2385,72],{"class":62},[31,2387,223],{"class":58},[31,2389,102],{"class":62},[31,2391,228],{"class":58},[31,2393,72],{"class":62},[31,2395,233],{"class":58},[31,2397,236],{"class":62},[31,2399,1959],{"class":58},[31,2401,242],{"class":62},[31,2403,2404],{"class":33,"line":529},[31,2405,49],{"emptyLinePlaceholder":48},[31,2407,2408,2410,2412,2414],{"class":33,"line":540},[31,2409,1567],{"class":58},[31,2411,72],{"class":62},[31,2413,257],{"class":58},[31,2415,260],{"class":62},[31,2417,2418,2420,2422],{"class":33,"line":546},[31,2419,1980],{"class":37},[31,2421,269],{"class":125},[31,2423,272],{"class":62},[31,2425,2426],{"class":33,"line":1640},[31,2427,278],{"class":62},[10,2429,2430],{"id":2430},"话题通信_自定义接口信息",[14,2432,2433],{},[17,2434],{"alt":19,"src":2435},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage432.webp",[14,2437,2438],{},[17,2439],{"alt":19,"src":2440},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage433.webp",[14,2442,2443],{},[17,2444],{"alt":19,"src":2445},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage434.webp",[14,2447,2448],{},[17,2449],{"alt":19,"src":2450},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage435.webp",[14,2452,2453],{},"构建依赖",[14,2455,2456],{},"执行依赖",[14,2458,2459],{},"当前功能包所属的功能包组",[14,2461,2462],{},[17,2463],{"alt":19,"src":2464},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage436.webp",[14,2466,2467],{},"find_package是要把构建依赖传递过来",[14,2469,2470],{},"然后还要指定当前被构建的接口文件的路径（通过这个设置，就可以把.msg转化成对应的C++和Python代码了）",[14,2472,2473],{},[17,2474],{"alt":19,"src":2475},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage437.webp",[14,2477,2478],{},[17,2479],{"alt":19,"src":2480},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage438.webp",[14,2482,2483],{},[17,2484],{"alt":19,"src":2485},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage439.webp",[14,2487,2488],{},"文件名可以自定义，但是首字母必须大写",[14,2490,2491],{},[17,2492],{"alt":19,"src":2493},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage440.webp",[14,2495,2496],{},[17,2497],{"alt":19,"src":2498},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage441.webp",[14,2500,2501],{},[17,2502],{"alt":19,"src":2503},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage442.webp",[14,2505,2506],{},"写完之后test_depend报错了",[14,2508,2509],{},[17,2510],{"alt":19,"src":2511},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage443.webp",[14,2513,2514],{},"删掉即可",[14,2516,2517],{},"编译依赖是rosidl开头的，我们通过grep查询一下",[22,2519,2521],{"className":1725,"code":2520,"language":1727,"meta":19,"style":19},"ros2 pkg list | grep -i rosidl\n",[28,2522,2523],{"__ignoreMap":19},[31,2524,2525,2527,2530,2533,2536,2539,2542],{"class":33,"line":34},[31,2526,1734],{"class":58},[31,2528,2529],{"class":41}," pkg",[31,2531,2532],{"class":41}," list",[31,2534,2535],{"class":37}," |",[31,2537,2538],{"class":58}," grep",[31,2540,2541],{"class":125}," -i",[31,2543,2544],{"class":41}," rosidl\n",[14,2546,2547],{},[17,2548],{"alt":19,"src":2549},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage444.webp",[14,2551,2552],{},[17,2553],{"alt":19,"src":2554},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage445.webp",[14,2556,2557],{},"我们用的是这一个，直接复制过来",[14,2559,2560],{},[17,2561],{"alt":19,"src":2562},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage446.webp",[14,2564,2565],{},[17,2566],{"alt":19,"src":2567},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage447.webp",[14,2569,2570],{},[17,2571],{"alt":19,"src":2572},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage448.webp",[14,2574,2575],{},[17,2576],{"alt":19,"src":2577},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage449.webp",[14,2579,2580],{},"在list里这个所属的功能包组就没有了，需要自己写rosidl_interface_packages",[14,2582,2583],{},[17,2584],{"alt":19,"src":2585},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage450.webp",[14,2587,2588],{},[17,2589],{"alt":19,"src":2590},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage451.webp",[14,2592,2593],{},"这个依赖要和构建依赖一样",[14,2595,2596],{},"然后我们要为接口文件生成源码",[14,2598,2599],{},"需要使用rosidl_generate_interfaces函数",[14,2601,2602],{},[17,2603],{"alt":19,"src":2604},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage452.webp",[14,2606,2607],{},[17,2608],{"alt":19,"src":2609},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage453.webp",[22,2611,2613],{"className":1725,"code":2612,"language":1727,"meta":19,"style":19},"colcon build --packages-select base_interfaces_demo\n",[28,2614,2615],{"__ignoreMap":19},[31,2616,2617,2620,2623,2626],{"class":33,"line":34},[31,2618,2619],{"class":58},"colcon",[31,2621,2622],{"class":41}," build",[31,2624,2625],{"class":125}," --packages-select",[31,2627,2628],{"class":41}," base_interfaces_demo\n",[14,2630,2631],{},[17,2632],{"alt":19,"src":2633},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage454.webp",[14,2635,2636],{},[17,2637],{"alt":19,"src":2638},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage455.webp",[14,2640,2641],{},"会在install空间下生成student.hpp代码",[14,2643,2644],{},[17,2645],{"alt":19,"src":2646},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage456.webp",[14,2648,2649],{},"以上.msg生成C++的",[14,2651,2652],{},[17,2653],{"alt":19,"src":2654},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage457.webp",[14,2656,2657],{},"然后这个是.msg生成的Python的源码",[14,2659,2660],{},[17,2661],{"alt":19,"src":2662},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage458.webp",[14,2664,2665],{},"也可以通过这个方式来检测是否编译正常",[14,2667,2668],{},"interface是接口",[14,2670,2671],{},[17,2672],{"alt":19,"src":2673},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage459.webp",[10,2675,2677],{"id":2676},"话题通信_实验2c","话题通信_实验2(C++)",[14,2679,2680],{},[17,2681],{"alt":19,"src":2682},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage460.webp",[14,2684,2685],{},[17,2686],{"alt":19,"src":2687},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage461.webp",[14,2689,2690],{},[17,2691],{"alt":19,"src":2692},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage462.webp",[14,2694,2695],{},"新建完源文件之后，要配置CMakeLists",[14,2697,2698],{},[17,2699],{"alt":19,"src":2700},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage463.webp",[14,2702,2703],{},[17,2704],{"alt":19,"src":2705},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage464.webp",[14,2707,2708],{},[17,2709],{"alt":19,"src":2710},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage465.webp",[14,2712,2713],{},[17,2714],{"alt":19,"src":2715},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage466.webp",[14,2717,2718],{},"将最基本的框架直接复制过来",[14,2720,2721],{},[17,2722],{"alt":19,"src":2723},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage467.webp",[14,2725,2726],{},"然后替换类的名称",[14,2728,2729],{},[17,2730],{"alt":19,"src":2731},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage468.webp",[22,2733,2735],{"className":24,"code":2734,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass TalkerStu: public rclcpp::Node\n{\n  public:\n    TalkerStu():Node(\"talkerstu_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalkerStu>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,2736,2737,2743,2747,2764,2768,2772,2788,2792,2810,2814,2818,2822,2844,2848,2858,2862,2885,2889,2899,2907],{"__ignoreMap":19},[31,2738,2739,2741],{"class":33,"line":34},[31,2740,38],{"class":37},[31,2742,42],{"class":41},[31,2744,2745],{"class":33,"line":45},[31,2746,49],{"emptyLinePlaceholder":48},[31,2748,2749,2751,2754,2756,2758,2760,2762],{"class":33,"line":52},[31,2750,55],{"class":37},[31,2752,2753],{"class":58}," TalkerStu",[31,2755,63],{"class":62},[31,2757,66],{"class":37},[31,2759,69],{"class":58},[31,2761,72],{"class":62},[31,2763,75],{"class":58},[31,2765,2766],{"class":33,"line":78},[31,2767,81],{"class":62},[31,2769,2770],{"class":33,"line":84},[31,2771,87],{"class":37},[31,2773,2774,2777,2779,2781,2783,2786],{"class":33,"line":90},[31,2775,2776],{"class":58},"    TalkerStu",[31,2778,96],{"class":62},[31,2780,99],{"class":58},[31,2782,102],{"class":62},[31,2784,2785],{"class":41},"\"talkerstu_node_cpp\"",[31,2787,108],{"class":62},[31,2789,2790],{"class":33,"line":111},[31,2791,114],{"class":62},[31,2793,2794,2796,2798,2800,2802,2804,2806,2808],{"class":33,"line":117},[31,2795,120],{"class":58},[31,2797,102],{"class":62},[31,2799,126],{"class":125},[31,2801,129],{"class":62},[31,2803,132],{"class":58},[31,2805,135],{"class":62},[31,2807,975],{"class":41},[31,2809,141],{"class":62},[31,2811,2812],{"class":33,"line":144},[31,2813,147],{"class":62},[31,2815,2816],{"class":33,"line":150},[31,2817,153],{"class":62},[31,2819,2820],{"class":33,"line":156},[31,2821,49],{"emptyLinePlaceholder":48},[31,2823,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842],{"class":33,"line":161},[31,2825,164],{"class":37},[31,2827,167],{"class":58},[31,2829,102],{"class":62},[31,2831,164],{"class":37},[31,2833,175],{"class":174},[31,2835,178],{"class":62},[31,2837,181],{"class":37},[31,2839,184],{"class":37},[31,2841,187],{"class":174},[31,2843,108],{"class":62},[31,2845,2846],{"class":33,"line":192},[31,2847,81],{"class":62},[31,2849,2850,2852,2854,2856],{"class":33,"line":197},[31,2851,200],{"class":58},[31,2853,72],{"class":62},[31,2855,205],{"class":58},[31,2857,208],{"class":62},[31,2859,2860],{"class":33,"line":211},[31,2861,49],{"emptyLinePlaceholder":48},[31,2863,2864,2866,2868,2870,2872,2874,2876,2878,2880,2883],{"class":33,"line":216},[31,2865,200],{"class":58},[31,2867,72],{"class":62},[31,2869,223],{"class":58},[31,2871,102],{"class":62},[31,2873,228],{"class":58},[31,2875,72],{"class":62},[31,2877,233],{"class":58},[31,2879,236],{"class":62},[31,2881,2882],{"class":58},"TalkerStu",[31,2884,242],{"class":62},[31,2886,2887],{"class":33,"line":245},[31,2888,49],{"emptyLinePlaceholder":48},[31,2890,2891,2893,2895,2897],{"class":33,"line":250},[31,2892,200],{"class":58},[31,2894,72],{"class":62},[31,2896,257],{"class":58},[31,2898,260],{"class":62},[31,2900,2901,2903,2905],{"class":33,"line":263},[31,2902,266],{"class":37},[31,2904,269],{"class":125},[31,2906,272],{"class":62},[31,2908,2909],{"class":33,"line":275},[31,2910,278],{"class":62},[14,2912,2913],{},"为了编码规范，把talkerstu_node_cpp改成小写",[14,2915,2916],{},[17,2917],{"alt":19,"src":2918},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage469.webp",[14,2920,2921],{},"同样的，订阅方也是需要这样操作",[14,2923,2924],{},[17,2925],{"alt":19,"src":2926},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage470.webp",[22,2928,2930],{"className":24,"code":2929,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ListenerStu: public rclcpp::Node\n{\npublic:\n    ListenerStu():Node(\"listenerstu_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n    }\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListenerStu>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[28,2931,2932,2938,2942,2959,2963,2967,2983,2987,3005,3009,3013,3017,3039,3043,3053,3057,3080,3084,3094,3102],{"__ignoreMap":19},[31,2933,2934,2936],{"class":33,"line":34},[31,2935,38],{"class":37},[31,2937,42],{"class":41},[31,2939,2940],{"class":33,"line":45},[31,2941,49],{"emptyLinePlaceholder":48},[31,2943,2944,2946,2949,2951,2953,2955,2957],{"class":33,"line":52},[31,2945,55],{"class":37},[31,2947,2948],{"class":58}," ListenerStu",[31,2950,63],{"class":62},[31,2952,66],{"class":37},[31,2954,69],{"class":58},[31,2956,72],{"class":62},[31,2958,75],{"class":58},[31,2960,2961],{"class":33,"line":78},[31,2962,81],{"class":62},[31,2964,2965],{"class":33,"line":84},[31,2966,1844],{"class":37},[31,2968,2969,2972,2974,2976,2978,2981],{"class":33,"line":90},[31,2970,2971],{"class":58},"    ListenerStu",[31,2973,96],{"class":62},[31,2975,99],{"class":58},[31,2977,102],{"class":62},[31,2979,2980],{"class":41},"\"listenerstu_node_cpp\"",[31,2982,108],{"class":62},[31,2984,2985],{"class":33,"line":111},[31,2986,114],{"class":62},[31,2988,2989,2991,2993,2995,2997,2999,3001,3003],{"class":33,"line":117},[31,2990,1869],{"class":58},[31,2992,102],{"class":62},[31,2994,126],{"class":125},[31,2996,129],{"class":62},[31,2998,132],{"class":58},[31,3000,135],{"class":62},[31,3002,1882],{"class":41},[31,3004,141],{"class":62},[31,3006,3007],{"class":33,"line":144},[31,3008,147],{"class":62},[31,3010,3011],{"class":33,"line":150},[31,3012,153],{"class":62},[31,3014,3015],{"class":33,"line":156},[31,3016,49],{"emptyLinePlaceholder":48},[31,3018,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037],{"class":33,"line":161},[31,3020,164],{"class":37},[31,3022,167],{"class":58},[31,3024,102],{"class":62},[31,3026,164],{"class":37},[31,3028,175],{"class":174},[31,3030,178],{"class":62},[31,3032,181],{"class":37},[31,3034,1915],{"class":37},[31,3036,187],{"class":174},[31,3038,1920],{"class":62},[31,3040,3041],{"class":33,"line":192},[31,3042,81],{"class":62},[31,3044,3045,3047,3049,3051],{"class":33,"line":197},[31,3046,1567],{"class":58},[31,3048,72],{"class":62},[31,3050,205],{"class":58},[31,3052,208],{"class":62},[31,3054,3055],{"class":33,"line":211},[31,3056,49],{"emptyLinePlaceholder":48},[31,3058,3059,3061,3063,3065,3067,3069,3071,3073,3075,3078],{"class":33,"line":216},[31,3060,1567],{"class":58},[31,3062,72],{"class":62},[31,3064,223],{"class":58},[31,3066,102],{"class":62},[31,3068,228],{"class":58},[31,3070,72],{"class":62},[31,3072,233],{"class":58},[31,3074,236],{"class":62},[31,3076,3077],{"class":58},"ListenerStu",[31,3079,242],{"class":62},[31,3081,3082],{"class":33,"line":245},[31,3083,49],{"emptyLinePlaceholder":48},[31,3085,3086,3088,3090,3092],{"class":33,"line":250},[31,3087,1567],{"class":58},[31,3089,72],{"class":62},[31,3091,257],{"class":58},[31,3093,260],{"class":62},[31,3095,3096,3098,3100],{"class":33,"line":263},[31,3097,1980],{"class":37},[31,3099,269],{"class":125},[31,3101,272],{"class":62},[31,3103,3104],{"class":33,"line":275},[31,3105,278],{"class":62},[14,3107,3108],{},[17,3109],{"alt":19,"src":3110},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage471.webp",[22,3112,3114],{"className":314,"code":3113,"language":316,"meta":19,"style":19},"{\n  \"configurations\": [\n    {\n      \"browse\": {\n        \"databaseFilename\": \"${default}\",\n        \"limitSymbolsToIncludedHeaders\": false\n      },\n      \"includePath\": [\n        \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\",\n        \"\u002Fhome\u002Ftungchiahui\u002Fmysource\u002Fros2src\u002F3.ws01_plumbing\u002Fsrc\u002Fbase_interfaces_demo\u002Finclude\u002F**\",\n        \"\u002Fusr\u002Finclude\u002F**\",\n        \"${workspaceFolder}\u002F\",\n**        \"${workspaceFolder}\u002Finstall\u002Fbase_interfaces_demo\u002Finclude\u002F**\"\n      ],\n      \"name\": \"ROS\",\n      \"intelliSenseMode\": \"gcc-x64\",\n      \"compilerPath\": \"\u002Fusr\u002Fbin\u002Fgcc\",\n      \"cStandard\": \"gnu11\",\n      \"cppStandard\": \"c++14\"\n    }\n  ],\n  \"version\": 4\n}\n",[28,3115,3116,3120,3127,3131,3138,3150,3160,3165,3172,3179,3186,3193,3200,3209,3214,3226,3238,3250,3262,3272,3276,3281,3291],{"__ignoreMap":19},[31,3117,3118],{"class":33,"line":34},[31,3119,81],{"class":62},[31,3121,3122,3125],{"class":33,"line":45},[31,3123,3124],{"class":125},"  \"configurations\"",[31,3126,351],{"class":62},[31,3128,3129],{"class":33,"line":52},[31,3130,114],{"class":62},[31,3132,3133,3136],{"class":33,"line":78},[31,3134,3135],{"class":125},"      \"browse\"",[31,3137,330],{"class":62},[31,3139,3140,3143,3145,3148],{"class":33,"line":84},[31,3141,3142],{"class":125},"        \"databaseFilename\"",[31,3144,63],{"class":62},[31,3146,3147],{"class":41},"\"${default}\"",[31,3149,343],{"class":62},[31,3151,3152,3155,3157],{"class":33,"line":90},[31,3153,3154],{"class":125},"        \"limitSymbolsToIncludedHeaders\"",[31,3156,63],{"class":62},[31,3158,3159],{"class":125},"false\n",[31,3161,3162],{"class":33,"line":111},[31,3163,3164],{"class":62},"      },\n",[31,3166,3167,3170],{"class":33,"line":117},[31,3168,3169],{"class":125},"      \"includePath\"",[31,3171,351],{"class":62},[31,3173,3174,3177],{"class":33,"line":144},[31,3175,3176],{"class":41},"        \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"",[31,3178,343],{"class":62},[31,3180,3181,3184],{"class":33,"line":150},[31,3182,3183],{"class":41},"        \"\u002Fhome\u002Ftungchiahui\u002Fmysource\u002Fros2src\u002F3.ws01_plumbing\u002Fsrc\u002Fbase_interfaces_demo\u002Finclude\u002F**\"",[31,3185,343],{"class":62},[31,3187,3188,3191],{"class":33,"line":156},[31,3189,3190],{"class":41},"        \"\u002Fusr\u002Finclude\u002F**\"",[31,3192,343],{"class":62},[31,3194,3195,3198],{"class":33,"line":161},[31,3196,3197],{"class":41},"        \"${workspaceFolder}\u002F\"",[31,3199,343],{"class":62},[31,3201,3202,3206],{"class":33,"line":192},[31,3203,3205],{"class":3204},"s7hpK","**",[31,3207,3208],{"class":41},"        \"${workspaceFolder}\u002Finstall\u002Fbase_interfaces_demo\u002Finclude\u002F**\"\n",[31,3210,3211],{"class":33,"line":197},[31,3212,3213],{"class":62},"      ],\n",[31,3215,3216,3219,3221,3224],{"class":33,"line":211},[31,3217,3218],{"class":125},"      \"name\"",[31,3220,63],{"class":62},[31,3222,3223],{"class":41},"\"ROS\"",[31,3225,343],{"class":62},[31,3227,3228,3231,3233,3236],{"class":33,"line":216},[31,3229,3230],{"class":125},"      \"intelliSenseMode\"",[31,3232,63],{"class":62},[31,3234,3235],{"class":41},"\"gcc-x64\"",[31,3237,343],{"class":62},[31,3239,3240,3243,3245,3248],{"class":33,"line":245},[31,3241,3242],{"class":125},"      \"compilerPath\"",[31,3244,63],{"class":62},[31,3246,3247],{"class":41},"\"\u002Fusr\u002Fbin\u002Fgcc\"",[31,3249,343],{"class":62},[31,3251,3252,3255,3257,3260],{"class":33,"line":250},[31,3253,3254],{"class":125},"      \"cStandard\"",[31,3256,63],{"class":62},[31,3258,3259],{"class":41},"\"gnu11\"",[31,3261,343],{"class":62},[31,3263,3264,3267,3269],{"class":33,"line":263},[31,3265,3266],{"class":125},"      \"cppStandard\"",[31,3268,63],{"class":62},[31,3270,3271],{"class":41},"\"c++14\"\n",[31,3273,3274],{"class":33,"line":275},[31,3275,147],{"class":62},[31,3277,3278],{"class":33,"line":494},[31,3279,3280],{"class":62},"  ],\n",[31,3282,3283,3286,3288],{"class":33,"line":501},[31,3284,3285],{"class":125},"  \"version\"",[31,3287,63],{"class":62},[31,3289,3290],{"class":125},"4\n",[31,3292,3293],{"class":33,"line":509},[31,3294,278],{"class":62},[14,3296,3297],{},[17,3298],{"alt":19,"src":3299},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage472.webp",[14,3301,3302],{},[17,3303],{"alt":19,"src":3304},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage473.webp",[14,3306,3307],{},[17,3308],{"alt":19,"src":3309},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage474.webp",[14,3311,3312],{},[17,3313],{"alt":19,"src":3314},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage475.webp",[560,3316],{},[14,3318,3319],{},[17,3320],{"alt":19,"src":3321},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage476.webp",[14,3323,3324],{},[17,3325],{"alt":19,"src":3326},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage477.webp",[14,3328,3329],{},[17,3330],{"alt":19,"src":3331},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage478.webp",[14,3333,3334],{},[17,3335],{"alt":19,"src":3336},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage479.webp",[14,3338,3339],{},"不要忘记字符串转成C风格的。",[14,3341,3342],{},[17,3343],{"alt":19,"src":3344},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage480.webp",[22,3346,3348],{"className":24,"code":3347,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass TalkerStu: public rclcpp::Node\n{\npublic:\n    TalkerStu():Node(\"talkerstu_node_cpp\"),age(0)\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n      publisher_ = this->create_publisher\u003Cbase_interfaces_demo::msg::Student>(\"chatter_stu\",10);\n      timer_ = this->create_wall_timer(500ms,std::bind(&TalkerStu::on_timer_callback,this));\n    }\nprivate:\n    void on_timer_callback()\n    {\n        auto stu = base_interfaces_demo::msg::Student();\n        stu.name = \"葫芦娃\";\n        stu.age = age;\n        stu.height = 2.20f;\n        age++;\n        publisher_->publish(stu);\n        RCLCPP_INFO(this->get_logger(),\"发布的消息:(%s,%d,%.2f)\",stu.name.c_str(),stu.age,stu.height);\n    }\n    rclcpp::Publisher\u003Cbase_interfaces_demo::msg::Student>::SharedPtr publisher_;\n    rclcpp::TimerBase::SharedPtr timer_;\n    int32_t age;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalkerStu>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,3349,3350,3356,3363,3367,3381,3385,3401,3405,3409,3433,3437,3455,3490,3531,3535,3539,3548,3552,3576,3588,3598,3613,3622,3632,3671,3675,3697,3707,3714,3718,3722,3744,3748,3758,3762,3784,3788,3799,3808],{"__ignoreMap":19},[31,3351,3352,3354],{"class":33,"line":34},[31,3353,38],{"class":37},[31,3355,42],{"class":41},[31,3357,3358,3360],{"class":33,"line":45},[31,3359,38],{"class":37},[31,3361,3362],{"class":41}," \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n",[31,3364,3365],{"class":33,"line":52},[31,3366,49],{"emptyLinePlaceholder":48},[31,3368,3369,3371,3373,3375,3377,3379],{"class":33,"line":78},[31,3370,1263],{"class":37},[31,3372,1266],{"class":37},[31,3374,1269],{"class":58},[31,3376,72],{"class":62},[31,3378,1274],{"class":58},[31,3380,272],{"class":62},[31,3382,3383],{"class":33,"line":84},[31,3384,49],{"emptyLinePlaceholder":48},[31,3386,3387,3389,3391,3393,3395,3397,3399],{"class":33,"line":90},[31,3388,55],{"class":37},[31,3390,2753],{"class":58},[31,3392,63],{"class":62},[31,3394,66],{"class":37},[31,3396,69],{"class":58},[31,3398,72],{"class":62},[31,3400,75],{"class":58},[31,3402,3403],{"class":33,"line":111},[31,3404,81],{"class":62},[31,3406,3407],{"class":33,"line":117},[31,3408,1844],{"class":37},[31,3410,3411,3413,3415,3417,3419,3421,3424,3427,3429,3431],{"class":33,"line":144},[31,3412,2776],{"class":58},[31,3414,96],{"class":62},[31,3416,99],{"class":58},[31,3418,102],{"class":62},[31,3420,2785],{"class":41},[31,3422,3423],{"class":62},"),",[31,3425,3426],{"class":58},"age",[31,3428,102],{"class":62},[31,3430,1327],{"class":125},[31,3432,108],{"class":62},[31,3434,3435],{"class":33,"line":150},[31,3436,114],{"class":62},[31,3438,3439,3441,3443,3445,3447,3449,3451,3453],{"class":33,"line":156},[31,3440,120],{"class":58},[31,3442,102],{"class":62},[31,3444,126],{"class":125},[31,3446,129],{"class":62},[31,3448,132],{"class":58},[31,3450,135],{"class":62},[31,3452,975],{"class":41},[31,3454,141],{"class":62},[31,3456,3457,3459,3461,3463,3465,3467,3470,3472,3474,3477,3479,3481,3484,3486,3488],{"class":33,"line":161},[31,3458,1356],{"class":62},[31,3460,1359],{"class":37},[31,3462,1362],{"class":125},[31,3464,1365],{"class":62},[31,3466,236],{"class":37},[31,3468,3469],{"class":58},"base_interfaces_demo",[31,3471,72],{"class":62},[31,3473,1375],{"class":58},[31,3475,3476],{"class":62},"::Student",[31,3478,1381],{"class":37},[31,3480,102],{"class":62},[31,3482,3483],{"class":41},"\"chatter_stu\"",[31,3485,1389],{"class":62},[31,3487,1392],{"class":125},[31,3489,141],{"class":62},[31,3491,3492,3494,3496,3498,3500,3502,3504,3507,3510,3512,3514,3516,3518,3520,3522,3524,3527,3529],{"class":33,"line":192},[31,3493,1399],{"class":62},[31,3495,1359],{"class":37},[31,3497,1362],{"class":125},[31,3499,129],{"class":62},[31,3501,1408],{"class":58},[31,3503,102],{"class":62},[31,3505,3506],{"class":125},"500",[31,3508,3509],{"class":37},"ms",[31,3511,1389],{"class":62},[31,3513,228],{"class":58},[31,3515,72],{"class":62},[31,3517,1425],{"class":58},[31,3519,102],{"class":62},[31,3521,1430],{"class":37},[31,3523,2882],{"class":58},[31,3525,3526],{"class":62},"::on_timer_callback,",[31,3528,126],{"class":125},[31,3530,1440],{"class":62},[31,3532,3533],{"class":33,"line":197},[31,3534,147],{"class":62},[31,3536,3537],{"class":33,"line":211},[31,3538,2242],{"class":37},[31,3540,3541,3543,3546],{"class":33,"line":216},[31,3542,1454],{"class":37},[31,3544,3545],{"class":58}," on_timer_callback",[31,3547,1460],{"class":62},[31,3549,3550],{"class":33,"line":245},[31,3551,114],{"class":62},[31,3553,3554,3557,3560,3562,3565,3567,3569,3571,3574],{"class":33,"line":250},[31,3555,3556],{"class":37},"        auto",[31,3558,3559],{"class":62}," stu ",[31,3561,1359],{"class":37},[31,3563,3564],{"class":58}," base_interfaces_demo",[31,3566,72],{"class":62},[31,3568,1375],{"class":58},[31,3570,72],{"class":62},[31,3572,3573],{"class":58},"Student",[31,3575,260],{"class":62},[31,3577,3578,3581,3583,3586],{"class":33,"line":263},[31,3579,3580],{"class":62},"        stu.name ",[31,3582,1359],{"class":37},[31,3584,3585],{"class":41}," \"葫芦娃\"",[31,3587,272],{"class":62},[31,3589,3590,3593,3595],{"class":33,"line":275},[31,3591,3592],{"class":62},"        stu.age ",[31,3594,1359],{"class":37},[31,3596,3597],{"class":62}," age;\n",[31,3599,3600,3603,3605,3608,3611],{"class":33,"line":494},[31,3601,3602],{"class":62},"        stu.height ",[31,3604,1359],{"class":37},[31,3606,3607],{"class":125}," 2.20",[31,3609,3610],{"class":37},"f",[31,3612,272],{"class":62},[31,3614,3615,3618,3620],{"class":33,"line":501},[31,3616,3617],{"class":62},"        age",[31,3619,1514],{"class":37},[31,3621,272],{"class":62},[31,3623,3624,3627,3629],{"class":33,"line":509},[31,3625,3626],{"class":62},"        publisher_->",[31,3628,1555],{"class":58},[31,3630,3631],{"class":62},"(stu);\n",[31,3633,3634,3636,3638,3640,3642,3644,3646,3649,3651,3653,3656,3658,3661,3663,3666,3668],{"class":33,"line":517},[31,3635,1869],{"class":58},[31,3637,102],{"class":62},[31,3639,126],{"class":125},[31,3641,129],{"class":62},[31,3643,132],{"class":58},[31,3645,135],{"class":62},[31,3647,3648],{"class":41},"\"发布的消息:(",[31,3650,1536],{"class":125},[31,3652,1389],{"class":41},[31,3654,3655],{"class":125},"%d",[31,3657,1389],{"class":41},[31,3659,3660],{"class":125},"%.2f",[31,3662,412],{"class":41},[31,3664,3665],{"class":62},",stu.name.",[31,3667,1544],{"class":58},[31,3669,3670],{"class":62},"(),stu.age,stu.height);\n",[31,3672,3673],{"class":33,"line":523},[31,3674,147],{"class":62},[31,3676,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695],{"class":33,"line":529},[31,3678,1567],{"class":58},[31,3680,72],{"class":62},[31,3682,1572],{"class":58},[31,3684,236],{"class":62},[31,3686,3469],{"class":58},[31,3688,72],{"class":62},[31,3690,1375],{"class":58},[31,3692,72],{"class":62},[31,3694,3573],{"class":58},[31,3696,1587],{"class":62},[31,3698,3699,3701,3703,3705],{"class":33,"line":540},[31,3700,1567],{"class":58},[31,3702,72],{"class":62},[31,3704,1596],{"class":58},[31,3706,1599],{"class":62},[31,3708,3709,3712],{"class":33,"line":546},[31,3710,3711],{"class":37},"    int32_t",[31,3713,3597],{"class":62},[31,3715,3716],{"class":33,"line":1640},[31,3717,153],{"class":62},[31,3719,3720],{"class":33,"line":1645},[31,3721,49],{"emptyLinePlaceholder":48},[31,3723,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742],{"class":33,"line":1656},[31,3725,164],{"class":37},[31,3727,167],{"class":58},[31,3729,102],{"class":62},[31,3731,164],{"class":37},[31,3733,175],{"class":174},[31,3735,178],{"class":62},[31,3737,181],{"class":37},[31,3739,184],{"class":37},[31,3741,187],{"class":174},[31,3743,108],{"class":62},[31,3745,3746],{"class":33,"line":1661},[31,3747,81],{"class":62},[31,3749,3750,3752,3754,3756],{"class":33,"line":1684},[31,3751,200],{"class":58},[31,3753,72],{"class":62},[31,3755,205],{"class":58},[31,3757,208],{"class":62},[31,3759,3760],{"class":33,"line":1689},[31,3761,49],{"emptyLinePlaceholder":48},[31,3763,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782],{"class":33,"line":1700},[31,3765,200],{"class":58},[31,3767,72],{"class":62},[31,3769,223],{"class":58},[31,3771,102],{"class":62},[31,3773,228],{"class":58},[31,3775,72],{"class":62},[31,3777,233],{"class":58},[31,3779,236],{"class":62},[31,3781,2882],{"class":58},[31,3783,242],{"class":62},[31,3785,3786],{"class":33,"line":1709},[31,3787,49],{"emptyLinePlaceholder":48},[31,3789,3791,3793,3795,3797],{"class":33,"line":3790},37,[31,3792,200],{"class":58},[31,3794,72],{"class":62},[31,3796,257],{"class":58},[31,3798,260],{"class":62},[31,3800,3802,3804,3806],{"class":33,"line":3801},38,[31,3803,266],{"class":37},[31,3805,269],{"class":125},[31,3807,272],{"class":62},[31,3809,3811],{"class":33,"line":3810},39,[31,3812,278],{"class":62},[14,3814,3815],{},[17,3816],{"alt":19,"src":3817},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage481.webp",[14,3819,3820],{},[17,3821],{"alt":19,"src":3822},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage482.webp",[14,3824,3825],{},[17,3826],{"alt":19,"src":3827},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage483.webp",[14,3829,3830],{},"虽然发布方可以打印日志，但是不代表信息被正常发出去了。",[14,3832,3833],{},[17,3834],{"alt":19,"src":3835},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage484.webp",[14,3837,3838],{},"这样检验才是真能确定数据被发送出去了。",[560,3840],{},[14,3842,3843],{},[17,3844],{"alt":19,"src":3845},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage485.webp",[14,3847,3848],{},[17,3849],{"alt":19,"src":3850},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage486.webp",[22,3852,3854],{"className":24,"code":3853,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n\nusing base_interfaces_demo::msg::Student;\n\nclass ListenerStu: public rclcpp::Node\n{\npublic:\n    ListenerStu():Node(\"listenerstu_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n        Subscription_ = this->create_subscription\u003CStudent>(\"chatter_stu\",10,std::bind(&ListenerStu::do_callback,this,std::placeholders::1));\n    }\nprivate:\n    void do_callback(const Student &stu)\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅的学生信息:name=%s,age=%d,height=%.2f\",stu.name.c_str(),stu.age,stu.height);\n    }\n_    rclcpp::Subscription\u003CStudent>::SharedPtr Subscription_;\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListenerStu>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[28,3855,3856,3862,3868,3872,3885,3889,3905,3909,3913,3927,3931,3949,4006,4010,4014,4034,4038,4075,4079,4098,4102,4106,4128,4132,4142,4146,4168,4172,4182,4190],{"__ignoreMap":19},[31,3857,3858,3860],{"class":33,"line":34},[31,3859,38],{"class":37},[31,3861,42],{"class":41},[31,3863,3864,3866],{"class":33,"line":45},[31,3865,38],{"class":37},[31,3867,3362],{"class":41},[31,3869,3870],{"class":33,"line":52},[31,3871,49],{"emptyLinePlaceholder":48},[31,3873,3874,3876,3878,3880,3882],{"class":33,"line":78},[31,3875,1263],{"class":37},[31,3877,3564],{"class":58},[31,3879,72],{"class":62},[31,3881,1375],{"class":58},[31,3883,3884],{"class":62},"::Student;\n",[31,3886,3887],{"class":33,"line":84},[31,3888,49],{"emptyLinePlaceholder":48},[31,3890,3891,3893,3895,3897,3899,3901,3903],{"class":33,"line":90},[31,3892,55],{"class":37},[31,3894,2948],{"class":58},[31,3896,63],{"class":62},[31,3898,66],{"class":37},[31,3900,69],{"class":58},[31,3902,72],{"class":62},[31,3904,75],{"class":58},[31,3906,3907],{"class":33,"line":111},[31,3908,81],{"class":62},[31,3910,3911],{"class":33,"line":117},[31,3912,1844],{"class":37},[31,3914,3915,3917,3919,3921,3923,3925],{"class":33,"line":144},[31,3916,2971],{"class":58},[31,3918,96],{"class":62},[31,3920,99],{"class":58},[31,3922,102],{"class":62},[31,3924,2980],{"class":41},[31,3926,108],{"class":62},[31,3928,3929],{"class":33,"line":150},[31,3930,114],{"class":62},[31,3932,3933,3935,3937,3939,3941,3943,3945,3947],{"class":33,"line":156},[31,3934,1869],{"class":58},[31,3936,102],{"class":62},[31,3938,126],{"class":125},[31,3940,129],{"class":62},[31,3942,132],{"class":58},[31,3944,135],{"class":62},[31,3946,1882],{"class":41},[31,3948,141],{"class":62},[31,3950,3951,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004],{"class":33,"line":161},[31,3952,3953],{"class":62},"        Subscription_ ",[31,3955,1359],{"class":37},[31,3957,1362],{"class":125},[31,3959,2178],{"class":62},[31,3961,236],{"class":37},[31,3963,3573],{"class":62},[31,3965,1381],{"class":37},[31,3967,102],{"class":62},[31,3969,3483],{"class":41},[31,3971,1389],{"class":62},[31,3973,1392],{"class":125},[31,3975,1389],{"class":62},[31,3977,228],{"class":58},[31,3979,72],{"class":62},[31,3981,1425],{"class":58},[31,3983,102],{"class":62},[31,3985,1430],{"class":37},[31,3987,3077],{"class":58},[31,3989,2215],{"class":62},[31,3991,126],{"class":125},[31,3993,1389],{"class":62},[31,3995,228],{"class":58},[31,3997,72],{"class":62},[31,3999,2226],{"class":58},[31,4001,72],{"class":62},[31,4003,1413],{"class":125},[31,4005,1440],{"class":62},[31,4007,4008],{"class":33,"line":192},[31,4009,147],{"class":62},[31,4011,4012],{"class":33,"line":197},[31,4013,2242],{"class":37},[31,4015,4016,4018,4020,4022,4024,4027,4029,4032],{"class":33,"line":211},[31,4017,1454],{"class":37},[31,4019,2249],{"class":58},[31,4021,102],{"class":62},[31,4023,2254],{"class":37},[31,4025,4026],{"class":58}," Student",[31,4028,2267],{"class":37},[31,4030,4031],{"class":174},"stu",[31,4033,108],{"class":62},[31,4035,4036],{"class":33,"line":216},[31,4037,114],{"class":62},[31,4039,4040,4042,4044,4046,4048,4050,4052,4055,4057,4060,4062,4065,4067,4069,4071,4073],{"class":33,"line":245},[31,4041,1869],{"class":58},[31,4043,102],{"class":62},[31,4045,126],{"class":125},[31,4047,129],{"class":62},[31,4049,132],{"class":58},[31,4051,135],{"class":62},[31,4053,4054],{"class":41},"\"订阅的学生信息:name=",[31,4056,1536],{"class":125},[31,4058,4059],{"class":41},",age=",[31,4061,3655],{"class":125},[31,4063,4064],{"class":41},",height=",[31,4066,3660],{"class":125},[31,4068,367],{"class":41},[31,4070,3665],{"class":62},[31,4072,1544],{"class":58},[31,4074,3670],{"class":62},[31,4076,4077],{"class":33,"line":250},[31,4078,147],{"class":62},[31,4080,4081,4084,4087,4089,4091,4093,4095],{"class":33,"line":263},[31,4082,4083],{"class":62},"_    ",[31,4085,4086],{"class":58},"rclcpp",[31,4088,72],{"class":62},[31,4090,2316],{"class":58},[31,4092,236],{"class":62},[31,4094,3573],{"class":58},[31,4096,4097],{"class":62},">::SharedPtr Subscription_;\n",[31,4099,4100],{"class":33,"line":275},[31,4101,153],{"class":62},[31,4103,4104],{"class":33,"line":494},[31,4105,49],{"emptyLinePlaceholder":48},[31,4107,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126],{"class":33,"line":501},[31,4109,164],{"class":37},[31,4111,167],{"class":58},[31,4113,102],{"class":62},[31,4115,164],{"class":37},[31,4117,175],{"class":174},[31,4119,178],{"class":62},[31,4121,181],{"class":37},[31,4123,1915],{"class":37},[31,4125,187],{"class":174},[31,4127,1920],{"class":62},[31,4129,4130],{"class":33,"line":509},[31,4131,81],{"class":62},[31,4133,4134,4136,4138,4140],{"class":33,"line":517},[31,4135,1567],{"class":58},[31,4137,72],{"class":62},[31,4139,205],{"class":58},[31,4141,208],{"class":62},[31,4143,4144],{"class":33,"line":523},[31,4145,49],{"emptyLinePlaceholder":48},[31,4147,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166],{"class":33,"line":529},[31,4149,1567],{"class":58},[31,4151,72],{"class":62},[31,4153,223],{"class":58},[31,4155,102],{"class":62},[31,4157,228],{"class":58},[31,4159,72],{"class":62},[31,4161,233],{"class":58},[31,4163,236],{"class":62},[31,4165,3077],{"class":58},[31,4167,242],{"class":62},[31,4169,4170],{"class":33,"line":540},[31,4171,49],{"emptyLinePlaceholder":48},[31,4173,4174,4176,4178,4180],{"class":33,"line":546},[31,4175,1567],{"class":58},[31,4177,72],{"class":62},[31,4179,257],{"class":58},[31,4181,260],{"class":62},[31,4183,4184,4186,4188],{"class":33,"line":1640},[31,4185,1980],{"class":37},[31,4187,269],{"class":125},[31,4189,272],{"class":62},[31,4191,4192],{"class":33,"line":1645},[31,4193,278],{"class":62},[14,4195,4196],{},[17,4197],{"alt":19,"src":4198},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage487.webp",[14,4200,4201],{},[17,4202],{"alt":19,"src":4203},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage488.webp",[10,4205,4206],{"id":4206},"话题通信_rqt查看计算图",[14,4208,4209],{},[17,4210],{"alt":19,"src":4211},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage489.webp",[14,4213,4214],{},[17,4215],{"alt":19,"src":4216},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage490.webp",[14,4218,4219],{},[17,4220],{"alt":19,"src":4221},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage491.webp",[14,4223,4224],{},[17,4225],{"alt":19,"src":4226},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage492.webp",[560,4228],{},[14,4230,4231],{},[17,4232],{"alt":19,"src":4233},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage493.webp",[14,4235,4236],{},"图形化工具RQT",[14,4238,4239],{},[17,4240],{"alt":19,"src":4241},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage494.webp",[14,4243,4244],{},[17,4245],{"alt":19,"src":4246},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage495.webp",[14,4248,4249],{},[17,4250],{"alt":19,"src":4251},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage496.webp",[14,4253,4254],{},[17,4255],{"alt":19,"src":4256},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage497.webp",[14,4258,4259],{},[17,4260],{"alt":19,"src":4261},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage498.webp",[10,4263,4264],{"id":4264},"服务通信_理论",[14,4266,4267],{},[17,4268],{"alt":19,"src":4269},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage499.webp",[14,4271,4272],{},[17,4273],{"alt":19,"src":4274},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage500.webp",[14,4276,4277],{},[17,4278],{"alt":19,"src":4279},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage501.webp",[14,4281,4282],{},"只能有一个服务端，可以有多个客户端，每个客户端都可以向服务端发送请求。（当然可以有多个服务端，但是会出很多逻辑问题，这是极其不合理的，禁止使用）",[14,4284,4285],{},[17,4286],{"alt":19,"src":4287},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage502.webp",[10,4289,4291],{"id":4290},"服务通信_实验1_服务端实现c","服务通信_实验1_服务端实现(C++)",[14,4293,4294],{},[17,4295],{"alt":19,"src":4296},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage503.webp",[14,4298,4299],{},[17,4300],{"alt":19,"src":4301},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage504.webp",[14,4303,4304],{},"先开服务端，然后从客户端提交两个整数，到服务端之后，服务端会解析数据，然后求和，并返回给客户端。",[14,4306,4307],{},[17,4308],{"alt":19,"src":4309},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage505.webp",[14,4311,4312],{},[17,4313],{"alt":19,"src":4314},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage506.webp",[14,4316,4317],{},[17,4318],{"alt":19,"src":4319},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage507.webp",[14,4321,4322],{},[17,4323],{"alt":19,"src":4324},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage508.webp",[22,4326,4328],{"className":1725,"code":4327,"language":1727,"meta":19,"style":19},"ros2 pkg create cpp02_service --build-type ament_cmake --dependencies rclcpp base_interfaces_demo --node-name demo01_server\n",[28,4329,4330],{"__ignoreMap":19},[31,4331,4332,4334,4336,4339,4342,4345,4348,4351,4353,4355,4358],{"class":33,"line":34},[31,4333,1734],{"class":58},[31,4335,2529],{"class":41},[31,4337,4338],{"class":41}," create",[31,4340,4341],{"class":41}," cpp02_service",[31,4343,4344],{"class":125}," --build-type",[31,4346,4347],{"class":41}," ament_cmake",[31,4349,4350],{"class":125}," --dependencies",[31,4352,69],{"class":41},[31,4354,3564],{"class":41},[31,4356,4357],{"class":125}," --node-name",[31,4359,4360],{"class":41}," demo01_server\n",[560,4362],{},[14,4364,4365],{},[17,4366],{"alt":19,"src":4367},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage509.webp",[14,4369,4370],{},[17,4371],{"alt":19,"src":4372},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage510.webp",[14,4374,4375],{},[17,4376],{"alt":19,"src":4377},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage511.webp",[14,4379,4380],{},"如果之前用过demo_interfaces_demo，那么一般是不用再配置package.xml了。",[14,4382,4383],{},[17,4384],{"alt":19,"src":4385},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage512.webp",[14,4387,4388],{},[17,4389],{"alt":19,"src":4390},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage513.webp",[14,4392,4393],{},[17,4394],{"alt":19,"src":4395},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage514.webp",[14,4397,4398],{},[17,4399],{"alt":19,"src":4400},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage515.webp",[14,4402,4403],{},[17,4404],{"alt":19,"src":4405},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage516.webp",[14,4407,4408],{},"记得文件名首字母要大写！",[14,4410,4411],{},[17,4412],{"alt":19,"src":4413},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage517.webp",[14,4415,4416],{},[17,4417],{"alt":19,"src":4418},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage518.webp",[14,4420,4421],{},[17,4422],{"alt":19,"src":4423},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage519.webp",[14,4425,4426],{},[17,4427],{"alt":19,"src":4428},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage520.webp",[14,4430,4431],{},[17,4432],{"alt":19,"src":4433},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage521.webp",[14,4435,4436],{},[17,4437],{"alt":19,"src":4438},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage522.webp",[14,4440,4441],{},[17,4442],{"alt":19,"src":4443},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage523.webp",[14,4445,4446],{},[17,4447],{"alt":19,"src":4448},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage524.webp",[14,4450,4451],{},[17,4452],{"alt":19,"src":4453},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage525.webp",[14,4455,4456],{},[17,4457],{"alt":19,"src":4458},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage526.webp",[14,4460,4461],{},[17,4462],{"alt":19,"src":4463},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage527.webp",[14,4465,4466],{},"这是另一个验证方式",[560,4468],{},[14,4470,4471],{},[17,4472],{"alt":19,"src":4473},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage528.webp",[14,4475,4476],{},[17,4477],{"alt":19,"src":4478},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage529.webp",[22,4480,4482],{"className":24,"code":4481,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsServer: public rclcpp::Node\n{\n  public:\n    AddIntsServer():Node(\"add_ints_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"服务端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CAddIntsServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,4483,4484,4490,4494,4511,4515,4519,4535,4539,4558,4562,4566,4570,4592,4596,4606,4610,4633,4637,4647,4655],{"__ignoreMap":19},[31,4485,4486,4488],{"class":33,"line":34},[31,4487,38],{"class":37},[31,4489,42],{"class":41},[31,4491,4492],{"class":33,"line":45},[31,4493,49],{"emptyLinePlaceholder":48},[31,4495,4496,4498,4501,4503,4505,4507,4509],{"class":33,"line":52},[31,4497,55],{"class":37},[31,4499,4500],{"class":58}," AddIntsServer",[31,4502,63],{"class":62},[31,4504,66],{"class":37},[31,4506,69],{"class":58},[31,4508,72],{"class":62},[31,4510,75],{"class":58},[31,4512,4513],{"class":33,"line":78},[31,4514,81],{"class":62},[31,4516,4517],{"class":33,"line":84},[31,4518,87],{"class":37},[31,4520,4521,4524,4526,4528,4530,4533],{"class":33,"line":90},[31,4522,4523],{"class":58},"    AddIntsServer",[31,4525,96],{"class":62},[31,4527,99],{"class":58},[31,4529,102],{"class":62},[31,4531,4532],{"class":41},"\"add_ints_server_node_cpp\"",[31,4534,108],{"class":62},[31,4536,4537],{"class":33,"line":111},[31,4538,114],{"class":62},[31,4540,4541,4543,4545,4547,4549,4551,4553,4556],{"class":33,"line":117},[31,4542,120],{"class":58},[31,4544,102],{"class":62},[31,4546,126],{"class":125},[31,4548,129],{"class":62},[31,4550,132],{"class":58},[31,4552,135],{"class":62},[31,4554,4555],{"class":41},"\"服务端节点创建！\"",[31,4557,141],{"class":62},[31,4559,4560],{"class":33,"line":144},[31,4561,147],{"class":62},[31,4563,4564],{"class":33,"line":150},[31,4565,153],{"class":62},[31,4567,4568],{"class":33,"line":156},[31,4569,49],{"emptyLinePlaceholder":48},[31,4571,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590],{"class":33,"line":161},[31,4573,164],{"class":37},[31,4575,167],{"class":58},[31,4577,102],{"class":62},[31,4579,164],{"class":37},[31,4581,175],{"class":174},[31,4583,178],{"class":62},[31,4585,181],{"class":37},[31,4587,184],{"class":37},[31,4589,187],{"class":174},[31,4591,108],{"class":62},[31,4593,4594],{"class":33,"line":192},[31,4595,81],{"class":62},[31,4597,4598,4600,4602,4604],{"class":33,"line":197},[31,4599,200],{"class":58},[31,4601,72],{"class":62},[31,4603,205],{"class":58},[31,4605,208],{"class":62},[31,4607,4608],{"class":33,"line":211},[31,4609,49],{"emptyLinePlaceholder":48},[31,4611,4612,4614,4616,4618,4620,4622,4624,4626,4628,4631],{"class":33,"line":216},[31,4613,200],{"class":58},[31,4615,72],{"class":62},[31,4617,223],{"class":58},[31,4619,102],{"class":62},[31,4621,228],{"class":58},[31,4623,72],{"class":62},[31,4625,233],{"class":58},[31,4627,236],{"class":62},[31,4629,4630],{"class":58},"AddIntsServer",[31,4632,242],{"class":62},[31,4634,4635],{"class":33,"line":245},[31,4636,49],{"emptyLinePlaceholder":48},[31,4638,4639,4641,4643,4645],{"class":33,"line":250},[31,4640,200],{"class":58},[31,4642,72],{"class":62},[31,4644,257],{"class":58},[31,4646,260],{"class":62},[31,4648,4649,4651,4653],{"class":33,"line":263},[31,4650,266],{"class":37},[31,4652,269],{"class":125},[31,4654,272],{"class":62},[31,4656,4657],{"class":33,"line":275},[31,4658,278],{"class":62},[14,4660,4661],{},[17,4662],{"alt":19,"src":4663},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage530.webp",[14,4665,4666],{},[17,4667],{"alt":19,"src":4668},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage531.webp",[14,4670,4671],{},"服务端是一直要挂起的",[14,4673,4674],{},[17,4675],{"alt":19,"src":4676},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage532.webp",[14,4678,4679],{},"客户端是执行完毕就结束返回到终端的",[14,4681,4682],{},[17,4683],{"alt":19,"src":4684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage533.webp",[14,4686,4687],{},"所以客户端不用调用spin函数，直接创建对象即可。",[14,4689,4690],{},[17,4691],{"alt":19,"src":4692},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage534.webp",[22,4694,4696],{"className":24,"code":4695,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n\u002F\u002F   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,4697,4698,4704,4708,4725,4729,4733,4749,4753,4772,4776,4780,4784,4806,4810,4820,4824,4830,4854,4858,4868,4876],{"__ignoreMap":19},[31,4699,4700,4702],{"class":33,"line":34},[31,4701,38],{"class":37},[31,4703,42],{"class":41},[31,4705,4706],{"class":33,"line":45},[31,4707,49],{"emptyLinePlaceholder":48},[31,4709,4710,4712,4715,4717,4719,4721,4723],{"class":33,"line":52},[31,4711,55],{"class":37},[31,4713,4714],{"class":58}," AddIntsClient",[31,4716,63],{"class":62},[31,4718,66],{"class":37},[31,4720,69],{"class":58},[31,4722,72],{"class":62},[31,4724,75],{"class":58},[31,4726,4727],{"class":33,"line":78},[31,4728,81],{"class":62},[31,4730,4731],{"class":33,"line":84},[31,4732,87],{"class":37},[31,4734,4735,4738,4740,4742,4744,4747],{"class":33,"line":90},[31,4736,4737],{"class":58},"    AddIntsClient",[31,4739,96],{"class":62},[31,4741,99],{"class":58},[31,4743,102],{"class":62},[31,4745,4746],{"class":41},"\"add_ints_client_node_cpp\"",[31,4748,108],{"class":62},[31,4750,4751],{"class":33,"line":111},[31,4752,114],{"class":62},[31,4754,4755,4757,4759,4761,4763,4765,4767,4770],{"class":33,"line":117},[31,4756,120],{"class":58},[31,4758,102],{"class":62},[31,4760,126],{"class":125},[31,4762,129],{"class":62},[31,4764,132],{"class":58},[31,4766,135],{"class":62},[31,4768,4769],{"class":41},"\"客户端节点创建！\"",[31,4771,141],{"class":62},[31,4773,4774],{"class":33,"line":144},[31,4775,147],{"class":62},[31,4777,4778],{"class":33,"line":150},[31,4779,153],{"class":62},[31,4781,4782],{"class":33,"line":156},[31,4783,49],{"emptyLinePlaceholder":48},[31,4785,4786,4788,4790,4792,4794,4796,4798,4800,4802,4804],{"class":33,"line":161},[31,4787,164],{"class":37},[31,4789,167],{"class":58},[31,4791,102],{"class":62},[31,4793,164],{"class":37},[31,4795,175],{"class":174},[31,4797,178],{"class":62},[31,4799,181],{"class":37},[31,4801,184],{"class":37},[31,4803,187],{"class":174},[31,4805,108],{"class":62},[31,4807,4808],{"class":33,"line":192},[31,4809,81],{"class":62},[31,4811,4812,4814,4816,4818],{"class":33,"line":197},[31,4813,200],{"class":58},[31,4815,72],{"class":62},[31,4817,205],{"class":58},[31,4819,208],{"class":62},[31,4821,4822],{"class":33,"line":211},[31,4823,49],{"emptyLinePlaceholder":48},[31,4825,4826],{"class":33,"line":216},[31,4827,4829],{"class":4828},"sJ8bj","\u002F\u002F   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n",[31,4831,4832,4835,4838,4840,4842,4844,4846,4848,4851],{"class":33,"line":245},[31,4833,4834],{"class":37},"  auto",[31,4836,4837],{"class":62}," client ",[31,4839,1359],{"class":37},[31,4841,1269],{"class":58},[31,4843,72],{"class":62},[31,4845,233],{"class":58},[31,4847,236],{"class":62},[31,4849,4850],{"class":58},"AddIntsClient",[31,4852,4853],{"class":62},">();\n",[31,4855,4856],{"class":33,"line":250},[31,4857,49],{"emptyLinePlaceholder":48},[31,4859,4860,4862,4864,4866],{"class":33,"line":263},[31,4861,200],{"class":58},[31,4863,72],{"class":62},[31,4865,257],{"class":58},[31,4867,260],{"class":62},[31,4869,4870,4872,4874],{"class":33,"line":275},[31,4871,266],{"class":37},[31,4873,269],{"class":125},[31,4875,272],{"class":62},[31,4877,4878],{"class":33,"line":494},[31,4879,278],{"class":62},[14,4881,4882],{},"然后还要编辑配置文件",[14,4884,4885],{},[17,4886],{"alt":19,"src":4887},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage535.webp",[14,4889,4890],{},"package.xml现在不用修改",[14,4892,4893],{},[17,4894],{"alt":19,"src":4895},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage536.webp",[14,4897,4898],{},[17,4899],{"alt":19,"src":4900},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage537.webp",[14,4902,4903],{},[17,4904],{"alt":19,"src":4905},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage538.webp",[14,4907,4908],{},[17,4909],{"alt":19,"src":4910},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage539.webp",[14,4912,4913],{},[17,4914],{"alt":19,"src":4915},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage540.webp",[560,4917],{},[14,4919,4920],{},[17,4921],{"alt":19,"src":4922},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage541.webp",[14,4924,4925],{},[17,4926],{"alt":19,"src":4927},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage542.webp",[14,4929,4930],{},[17,4931],{"alt":19,"src":4932},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage543.webp",[14,4934,4935],{},[17,4936],{"alt":19,"src":4937},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage544.webp",[14,4939,4940],{},[17,4941],{"alt":19,"src":4942},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage545.webp",[14,4944,4945],{},"有4个入口参数，但是后两个有默认值，所以我们只用管前2个。",[14,4947,4948],{},"第一个入口参数就是一个话题名称，字符串",[14,4950,4951],{},"第二个入口参数是回调函数",[14,4953,4954],{},"返回值是一个service类型的智能指针",[14,4956,4957],{},[17,4958],{"alt":19,"src":4959},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage546.webp",[14,4961,4962],{},[17,4963],{"alt":19,"src":4964},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage547.webp",[14,4966,4967],{},[17,4968],{"alt":19,"src":4969},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage548.webp",[14,4971,4972],{},[17,4973],{"alt":19,"src":4974},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage549.webp",[14,4976,4977],{},[17,4978],{"alt":19,"src":4979},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage550.webp",[14,4981,4982],{},[17,4983],{"alt":19,"src":4984},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage551.webp",[14,4986,4987],{},[17,4988],{"alt":19,"src":4989},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage552.webp",[14,4991,4992],{},[17,4993],{"alt":19,"src":4994},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage553.webp",[22,4996,4998],{"className":24,"code":4997,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\n\nclass AddIntsServer: public rclcpp::Node\n{\n  public:\n    AddIntsServer():Node(\"add_ints_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"服务端节点创建！\");\n      server_ = this->create_service\u003Cbase_interfaces_demo::srv::AddInts>(\"add_ints\",std::bind(&AddIntsServer::add_callback,this,std::placeholders::_1,std::placeholders::2));\n    }\n  private:\n    void add_callback(const AddInts::Request::SharedPtr req,AddInts::Response::SharedPtr res)\n    {\n      res->sum = req->num1 + (*req).num2;\n      RCLCPP_INFO(this->get_logger(),\"%d + %d = %d\",req->num1,req->num2,res->sum);\n    }\n_    rclcpp::Service\u003Cbase_interfaces_demo::srv::AddInts>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CAddIntsServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,4999,5000,5006,5013,5017,5031,5035,5051,5055,5059,5073,5077,5095,5167,5171,5175,5221,5225,5247,5280,5284,5310,5314,5318,5340,5344,5354,5358,5380,5384,5394,5402],{"__ignoreMap":19},[31,5001,5002,5004],{"class":33,"line":34},[31,5003,38],{"class":37},[31,5005,42],{"class":41},[31,5007,5008,5010],{"class":33,"line":45},[31,5009,38],{"class":37},[31,5011,5012],{"class":41}," \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n",[31,5014,5015],{"class":33,"line":52},[31,5016,49],{"emptyLinePlaceholder":48},[31,5018,5019,5021,5023,5025,5028],{"class":33,"line":78},[31,5020,1263],{"class":37},[31,5022,3564],{"class":58},[31,5024,72],{"class":62},[31,5026,5027],{"class":58},"srv",[31,5029,5030],{"class":62},"::AddInts;\n",[31,5032,5033],{"class":33,"line":84},[31,5034,49],{"emptyLinePlaceholder":48},[31,5036,5037,5039,5041,5043,5045,5047,5049],{"class":33,"line":90},[31,5038,55],{"class":37},[31,5040,4500],{"class":58},[31,5042,63],{"class":62},[31,5044,66],{"class":37},[31,5046,69],{"class":58},[31,5048,72],{"class":62},[31,5050,75],{"class":58},[31,5052,5053],{"class":33,"line":111},[31,5054,81],{"class":62},[31,5056,5057],{"class":33,"line":117},[31,5058,87],{"class":37},[31,5060,5061,5063,5065,5067,5069,5071],{"class":33,"line":144},[31,5062,4523],{"class":58},[31,5064,96],{"class":62},[31,5066,99],{"class":58},[31,5068,102],{"class":62},[31,5070,4532],{"class":41},[31,5072,108],{"class":62},[31,5074,5075],{"class":33,"line":150},[31,5076,114],{"class":62},[31,5078,5079,5081,5083,5085,5087,5089,5091,5093],{"class":33,"line":156},[31,5080,120],{"class":58},[31,5082,102],{"class":62},[31,5084,126],{"class":125},[31,5086,129],{"class":62},[31,5088,132],{"class":58},[31,5090,135],{"class":62},[31,5092,4555],{"class":41},[31,5094,141],{"class":62},[31,5096,5097,5100,5102,5104,5107,5109,5111,5113,5115,5118,5120,5122,5125,5127,5129,5131,5133,5135,5137,5139,5142,5144,5146,5148,5150,5152,5155,5157,5159,5161,5163,5165],{"class":33,"line":161},[31,5098,5099],{"class":62},"      server_ ",[31,5101,1359],{"class":37},[31,5103,1362],{"class":125},[31,5105,5106],{"class":62},"->create_service",[31,5108,236],{"class":37},[31,5110,3469],{"class":58},[31,5112,72],{"class":62},[31,5114,5027],{"class":58},[31,5116,5117],{"class":62},"::AddInts",[31,5119,1381],{"class":37},[31,5121,102],{"class":62},[31,5123,5124],{"class":41},"\"add_ints\"",[31,5126,1389],{"class":62},[31,5128,228],{"class":58},[31,5130,72],{"class":62},[31,5132,1425],{"class":58},[31,5134,102],{"class":62},[31,5136,1430],{"class":37},[31,5138,4630],{"class":58},[31,5140,5141],{"class":62},"::add_callback,",[31,5143,126],{"class":125},[31,5145,1389],{"class":62},[31,5147,228],{"class":58},[31,5149,72],{"class":62},[31,5151,2226],{"class":58},[31,5153,5154],{"class":62},"::_1,",[31,5156,228],{"class":58},[31,5158,72],{"class":62},[31,5160,2226],{"class":58},[31,5162,72],{"class":62},[31,5164,802],{"class":125},[31,5166,1440],{"class":62},[31,5168,5169],{"class":33,"line":192},[31,5170,147],{"class":62},[31,5172,5173],{"class":33,"line":197},[31,5174,1449],{"class":37},[31,5176,5177,5179,5182,5184,5186,5189,5191,5194,5196,5199,5202,5204,5207,5209,5212,5214,5216,5219],{"class":33,"line":211},[31,5178,1454],{"class":37},[31,5180,5181],{"class":58}," add_callback",[31,5183,102],{"class":62},[31,5185,2254],{"class":37},[31,5187,5188],{"class":58}," AddInts",[31,5190,72],{"class":62},[31,5192,5193],{"class":58},"Request",[31,5195,72],{"class":62},[31,5197,5198],{"class":58},"SharedPtr",[31,5200,5201],{"class":174}," req",[31,5203,1389],{"class":62},[31,5205,5206],{"class":58},"AddInts",[31,5208,72],{"class":62},[31,5210,5211],{"class":58},"Response",[31,5213,72],{"class":62},[31,5215,5198],{"class":58},[31,5217,5218],{"class":174}," res",[31,5220,108],{"class":62},[31,5222,5223],{"class":33,"line":216},[31,5224,114],{"class":62},[31,5226,5227,5230,5232,5235,5238,5241,5244],{"class":33,"line":245},[31,5228,5229],{"class":62},"      res->sum ",[31,5231,1359],{"class":37},[31,5233,5234],{"class":62}," req->num1 ",[31,5236,5237],{"class":37},"+",[31,5239,5240],{"class":62}," (",[31,5242,5243],{"class":37},"*",[31,5245,5246],{"class":62},"req).num2;\n",[31,5248,5249,5251,5253,5255,5257,5259,5261,5263,5265,5268,5270,5273,5275,5277],{"class":33,"line":250},[31,5250,120],{"class":58},[31,5252,102],{"class":62},[31,5254,126],{"class":125},[31,5256,129],{"class":62},[31,5258,132],{"class":58},[31,5260,135],{"class":62},[31,5262,367],{"class":41},[31,5264,3655],{"class":125},[31,5266,5267],{"class":41}," + ",[31,5269,3655],{"class":125},[31,5271,5272],{"class":41}," = ",[31,5274,3655],{"class":125},[31,5276,367],{"class":41},[31,5278,5279],{"class":62},",req->num1,req->num2,res->sum);\n",[31,5281,5282],{"class":33,"line":263},[31,5283,147],{"class":62},[31,5285,5286,5288,5290,5292,5295,5297,5299,5301,5303,5305,5307],{"class":33,"line":275},[31,5287,4083],{"class":62},[31,5289,4086],{"class":58},[31,5291,72],{"class":62},[31,5293,5294],{"class":58},"Service",[31,5296,236],{"class":62},[31,5298,3469],{"class":58},[31,5300,72],{"class":62},[31,5302,5027],{"class":58},[31,5304,72],{"class":62},[31,5306,5206],{"class":58},[31,5308,5309],{"class":62},">::SharedPtr server_;\n",[31,5311,5312],{"class":33,"line":494},[31,5313,153],{"class":62},[31,5315,5316],{"class":33,"line":501},[31,5317,49],{"emptyLinePlaceholder":48},[31,5319,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338],{"class":33,"line":509},[31,5321,164],{"class":37},[31,5323,167],{"class":58},[31,5325,102],{"class":62},[31,5327,164],{"class":37},[31,5329,175],{"class":174},[31,5331,178],{"class":62},[31,5333,181],{"class":37},[31,5335,184],{"class":37},[31,5337,187],{"class":174},[31,5339,108],{"class":62},[31,5341,5342],{"class":33,"line":517},[31,5343,81],{"class":62},[31,5345,5346,5348,5350,5352],{"class":33,"line":523},[31,5347,200],{"class":58},[31,5349,72],{"class":62},[31,5351,205],{"class":58},[31,5353,208],{"class":62},[31,5355,5356],{"class":33,"line":529},[31,5357,49],{"emptyLinePlaceholder":48},[31,5359,5360,5362,5364,5366,5368,5370,5372,5374,5376,5378],{"class":33,"line":540},[31,5361,200],{"class":58},[31,5363,72],{"class":62},[31,5365,223],{"class":58},[31,5367,102],{"class":62},[31,5369,228],{"class":58},[31,5371,72],{"class":62},[31,5373,233],{"class":58},[31,5375,236],{"class":62},[31,5377,4630],{"class":58},[31,5379,242],{"class":62},[31,5381,5382],{"class":33,"line":546},[31,5383,49],{"emptyLinePlaceholder":48},[31,5385,5386,5388,5390,5392],{"class":33,"line":1640},[31,5387,200],{"class":58},[31,5389,72],{"class":62},[31,5391,257],{"class":58},[31,5393,260],{"class":62},[31,5395,5396,5398,5400],{"class":33,"line":1645},[31,5397,266],{"class":37},[31,5399,269],{"class":125},[31,5401,272],{"class":62},[31,5403,5404],{"class":33,"line":1656},[31,5405,278],{"class":62},[14,5407,5408],{},[17,5409],{"alt":19,"src":5410},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage554.webp",[14,5412,5413],{},[17,5414],{"alt":19,"src":5415},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage555.webp",[14,5417,5418],{},"因为我们的客户端还没写，所以先暂时用ros2 service call这个小工具来查看服务端的情况",[14,5420,5421],{},[17,5422],{"alt":19,"src":5423},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage556.webp",[22,5425,5427],{"className":1725,"code":5426,"language":1727,"meta":19,"style":19},"ros2 service call \u002Fadd_ints base_interfaces_demo\u002Fsrv\u002FAddInts \"{'num1': 10,'num2': 30}\"\n",[28,5428,5429],{"__ignoreMap":19},[31,5430,5431,5433,5436,5439,5442,5445],{"class":33,"line":34},[31,5432,1734],{"class":58},[31,5434,5435],{"class":41}," service",[31,5437,5438],{"class":41}," call",[31,5440,5441],{"class":41}," \u002Fadd_ints",[31,5443,5444],{"class":41}," base_interfaces_demo\u002Fsrv\u002FAddInts",[31,5446,5447],{"class":41}," \"{'num1': 10,'num2': 30}\"\n",[14,5449,5450],{},"ros2 service call + 话题名 + 接口数据类型 + json代码(也可以理解成yaml格式的)",[14,5452,5453,5454,5457,5458,5460],{},"此json代码(yaml格式)格式: \"{'第一个数的名': ",[634,5455,5456],{},"空格"," +对应数值,'第二个数的名': ",[634,5459,5456],{}," +对应数的数值}\"",[10,5462,5464],{"id":5463},"服务通信_实验1_客户端实现c","服务通信_实验1_客户端实现(C++)",[14,5466,5467],{},[17,5468],{"alt":19,"src":5469},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage557.webp",[14,5471,5472],{},[17,5473],{"alt":19,"src":5474},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage558.webp",[14,5476,5477],{},[17,5478],{"alt":19,"src":5479},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage559.webp",[14,5481,5482],{},[17,5483],{"alt":19,"src":5484},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage560.webp",[14,5486,5487],{},"运行的时候后面跟了两个整形数据，",[14,5489,5490],{},"所以这个argc应该是等于3的。",[14,5492,5493],{},[17,5494],{"alt":19,"src":5495},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage561.webp",[14,5497,5498],{},[17,5499],{"alt":19,"src":5500},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage562.webp",[14,5502,5503],{},[17,5504],{"alt":19,"src":5505},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage563.webp",[14,5507,5508],{},[634,5509,5510],{},"argv[]:接收编译时的返回的argc的参数",[14,5512,5513],{},[634,5514,5515],{},"argc是命令行总的参数个数",[14,5517,5518],{},[634,5519,5520],{},"argv[]是argc个参数，其中第0个参数是程序的全名，以后的参数",[14,5522,5523],{},[17,5524],{"alt":19,"src":5525},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage564.webp",[14,5527,5528],{},[17,5529],{"alt":19,"src":5530},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage565.webp",[14,5532,5533],{},"必须得保证服务器开着，并且客户端能够连接服务器，如果服务器没开，那么发送的数据会丢失，但是一般使用服务通信的都是比较重要的信息，一定不要丢失了。",[14,5535,5536],{},[17,5537],{"alt":19,"src":5538},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage566.webp",[14,5540,5541],{},"客户端发送完数据后，会产生一个响应，这里直接当函数的返回值给返回了。",[14,5543,5544],{},[17,5545],{"alt":19,"src":5546},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage567.webp",[14,5548,5549],{},[17,5550],{"alt":19,"src":5551},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage568.webp",[14,5553,5554],{},[17,5555],{"alt":19,"src":5556},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage569.webp",[14,5558,5559],{},[17,5560],{"alt":19,"src":5561},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage570.webp",[14,5563,5564],{},[17,5565],{"alt":19,"src":5566},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage571.webp",[14,5568,5569],{},[17,5570],{"alt":19,"src":5571},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage572.webp",[22,5573,5574],{"className":24,"code":4695,"language":26,"meta":19,"style":19},[28,5575,5576,5582,5586,5602,5606,5610,5624,5628,5646,5650,5654,5658,5680,5684,5694,5698,5702,5722,5726,5736,5744],{"__ignoreMap":19},[31,5577,5578,5580],{"class":33,"line":34},[31,5579,38],{"class":37},[31,5581,42],{"class":41},[31,5583,5584],{"class":33,"line":45},[31,5585,49],{"emptyLinePlaceholder":48},[31,5587,5588,5590,5592,5594,5596,5598,5600],{"class":33,"line":52},[31,5589,55],{"class":37},[31,5591,4714],{"class":58},[31,5593,63],{"class":62},[31,5595,66],{"class":37},[31,5597,69],{"class":58},[31,5599,72],{"class":62},[31,5601,75],{"class":58},[31,5603,5604],{"class":33,"line":78},[31,5605,81],{"class":62},[31,5607,5608],{"class":33,"line":84},[31,5609,87],{"class":37},[31,5611,5612,5614,5616,5618,5620,5622],{"class":33,"line":90},[31,5613,4737],{"class":58},[31,5615,96],{"class":62},[31,5617,99],{"class":58},[31,5619,102],{"class":62},[31,5621,4746],{"class":41},[31,5623,108],{"class":62},[31,5625,5626],{"class":33,"line":111},[31,5627,114],{"class":62},[31,5629,5630,5632,5634,5636,5638,5640,5642,5644],{"class":33,"line":117},[31,5631,120],{"class":58},[31,5633,102],{"class":62},[31,5635,126],{"class":125},[31,5637,129],{"class":62},[31,5639,132],{"class":58},[31,5641,135],{"class":62},[31,5643,4769],{"class":41},[31,5645,141],{"class":62},[31,5647,5648],{"class":33,"line":144},[31,5649,147],{"class":62},[31,5651,5652],{"class":33,"line":150},[31,5653,153],{"class":62},[31,5655,5656],{"class":33,"line":156},[31,5657,49],{"emptyLinePlaceholder":48},[31,5659,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678],{"class":33,"line":161},[31,5661,164],{"class":37},[31,5663,167],{"class":58},[31,5665,102],{"class":62},[31,5667,164],{"class":37},[31,5669,175],{"class":174},[31,5671,178],{"class":62},[31,5673,181],{"class":37},[31,5675,184],{"class":37},[31,5677,187],{"class":174},[31,5679,108],{"class":62},[31,5681,5682],{"class":33,"line":192},[31,5683,81],{"class":62},[31,5685,5686,5688,5690,5692],{"class":33,"line":197},[31,5687,200],{"class":58},[31,5689,72],{"class":62},[31,5691,205],{"class":58},[31,5693,208],{"class":62},[31,5695,5696],{"class":33,"line":211},[31,5697,49],{"emptyLinePlaceholder":48},[31,5699,5700],{"class":33,"line":216},[31,5701,4829],{"class":4828},[31,5703,5704,5706,5708,5710,5712,5714,5716,5718,5720],{"class":33,"line":245},[31,5705,4834],{"class":37},[31,5707,4837],{"class":62},[31,5709,1359],{"class":37},[31,5711,1269],{"class":58},[31,5713,72],{"class":62},[31,5715,233],{"class":58},[31,5717,236],{"class":62},[31,5719,4850],{"class":58},[31,5721,4853],{"class":62},[31,5723,5724],{"class":33,"line":250},[31,5725,49],{"emptyLinePlaceholder":48},[31,5727,5728,5730,5732,5734],{"class":33,"line":263},[31,5729,200],{"class":58},[31,5731,72],{"class":62},[31,5733,257],{"class":58},[31,5735,260],{"class":62},[31,5737,5738,5740,5742],{"class":33,"line":275},[31,5739,266],{"class":37},[31,5741,269],{"class":125},[31,5743,272],{"class":62},[31,5745,5746],{"class":33,"line":494},[31,5747,278],{"class":62},[14,5749,5750],{},[17,5751],{"alt":19,"src":5752},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage573.webp",[14,5754,5755],{},"这一段就应该放在节点初始化前面，防止多作一些耗资源的操作再进行判断。",[14,5757,5758],{},[17,5759],{"alt":19,"src":5760},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage574.webp",[14,5762,5763],{},"因为RCLCPP_INFO在节点创建的前面，无法使用类和实例化方式进行get_logger，也就是无法使用this指针和节点智能指针来获取。",[14,5765,5766],{},"所以我们采用以下方式：",[14,5768,5769],{},[17,5770],{"alt":19,"src":5771},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage575.webp",[14,5773,5774],{},"这种方式通过rclcpp里的get_logger，但是需要给日志起个名字，放到入口参数里，我们就叫rclcpp吧。",[22,5776,5778],{"className":24,"code":5777,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,5779,5780,5786,5790,5806,5810,5814,5828,5832,5850,5854,5858,5862,5884,5888,5904,5909,5934,5943,5947,5957,5961,5981,5985,5995,6003],{"__ignoreMap":19},[31,5781,5782,5784],{"class":33,"line":34},[31,5783,38],{"class":37},[31,5785,42],{"class":41},[31,5787,5788],{"class":33,"line":45},[31,5789,49],{"emptyLinePlaceholder":48},[31,5791,5792,5794,5796,5798,5800,5802,5804],{"class":33,"line":52},[31,5793,55],{"class":37},[31,5795,4714],{"class":58},[31,5797,63],{"class":62},[31,5799,66],{"class":37},[31,5801,69],{"class":58},[31,5803,72],{"class":62},[31,5805,75],{"class":58},[31,5807,5808],{"class":33,"line":78},[31,5809,81],{"class":62},[31,5811,5812],{"class":33,"line":84},[31,5813,87],{"class":37},[31,5815,5816,5818,5820,5822,5824,5826],{"class":33,"line":90},[31,5817,4737],{"class":58},[31,5819,96],{"class":62},[31,5821,99],{"class":58},[31,5823,102],{"class":62},[31,5825,4746],{"class":41},[31,5827,108],{"class":62},[31,5829,5830],{"class":33,"line":111},[31,5831,114],{"class":62},[31,5833,5834,5836,5838,5840,5842,5844,5846,5848],{"class":33,"line":117},[31,5835,120],{"class":58},[31,5837,102],{"class":62},[31,5839,126],{"class":125},[31,5841,129],{"class":62},[31,5843,132],{"class":58},[31,5845,135],{"class":62},[31,5847,4769],{"class":41},[31,5849,141],{"class":62},[31,5851,5852],{"class":33,"line":144},[31,5853,147],{"class":62},[31,5855,5856],{"class":33,"line":150},[31,5857,153],{"class":62},[31,5859,5860],{"class":33,"line":156},[31,5861,49],{"emptyLinePlaceholder":48},[31,5863,5864,5866,5868,5870,5872,5874,5876,5878,5880,5882],{"class":33,"line":161},[31,5865,164],{"class":37},[31,5867,167],{"class":58},[31,5869,102],{"class":62},[31,5871,164],{"class":37},[31,5873,175],{"class":174},[31,5875,178],{"class":62},[31,5877,181],{"class":37},[31,5879,184],{"class":37},[31,5881,187],{"class":174},[31,5883,108],{"class":62},[31,5885,5886],{"class":33,"line":192},[31,5887,81],{"class":62},[31,5889,5890,5893,5896,5899,5902],{"class":33,"line":197},[31,5891,5892],{"class":37},"  if",[31,5894,5895],{"class":62},"(argc ",[31,5897,5898],{"class":37},"!=",[31,5900,5901],{"class":125}," 3",[31,5903,108],{"class":62},[31,5905,5906],{"class":33,"line":211},[31,5907,5908],{"class":62},"  {\n",[31,5910,5911,5914,5916,5918,5920,5922,5924,5927,5929,5932],{"class":33,"line":216},[31,5912,5913],{"class":58},"    RCLCPP_INFO",[31,5915,102],{"class":62},[31,5917,4086],{"class":58},[31,5919,72],{"class":62},[31,5921,132],{"class":58},[31,5923,102],{"class":62},[31,5925,5926],{"class":41},"\"rclcpp\"",[31,5928,3423],{"class":62},[31,5930,5931],{"class":41},"\"请提交两个整形数字!\"",[31,5933,141],{"class":62},[31,5935,5936,5938,5941],{"class":33,"line":245},[31,5937,1980],{"class":37},[31,5939,5940],{"class":125}," 1",[31,5942,272],{"class":62},[31,5944,5945],{"class":33,"line":250},[31,5946,543],{"class":62},[31,5948,5949,5951,5953,5955],{"class":33,"line":263},[31,5950,200],{"class":58},[31,5952,72],{"class":62},[31,5954,205],{"class":58},[31,5956,208],{"class":62},[31,5958,5959],{"class":33,"line":275},[31,5960,49],{"emptyLinePlaceholder":48},[31,5962,5963,5965,5967,5969,5971,5973,5975,5977,5979],{"class":33,"line":494},[31,5964,4834],{"class":37},[31,5966,4837],{"class":62},[31,5968,1359],{"class":37},[31,5970,1269],{"class":58},[31,5972,72],{"class":62},[31,5974,233],{"class":58},[31,5976,236],{"class":62},[31,5978,4850],{"class":58},[31,5980,4853],{"class":62},[31,5982,5983],{"class":33,"line":501},[31,5984,49],{"emptyLinePlaceholder":48},[31,5986,5987,5989,5991,5993],{"class":33,"line":509},[31,5988,200],{"class":58},[31,5990,72],{"class":62},[31,5992,257],{"class":58},[31,5994,260],{"class":62},[31,5996,5997,5999,6001],{"class":33,"line":517},[31,5998,266],{"class":37},[31,6000,269],{"class":125},[31,6002,272],{"class":62},[31,6004,6005],{"class":33,"line":523},[31,6006,278],{"class":62},[14,6008,6009],{},[17,6010],{"alt":19,"src":6011},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage576.webp",[14,6013,6014],{},[17,6015],{"alt":19,"src":6016},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage577.webp",[14,6018,6019],{},[17,6020],{"alt":19,"src":6021},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage578.webp",[14,6023,6024],{},"如果我不提交参数，直接回车，然后这是一个异常，主函数返回值不是0",[14,6026,6027],{},[17,6028],{"alt":19,"src":6029},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage579.webp",[14,6031,6032],{},[17,6033],{"alt":19,"src":6034},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage580.webp",[14,6036,6037],{},"也可以把INFO改成ERROR",[14,6039,6040],{},[17,6041],{"alt":19,"src":6042},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage581.webp",[22,6044,6046],{"className":24,"code":6045,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,6047,6048,6054,6058,6074,6078,6082,6096,6100,6118,6122,6126,6130,6152,6156,6168,6172,6195,6203,6207,6217,6221,6241,6245,6255,6263],{"__ignoreMap":19},[31,6049,6050,6052],{"class":33,"line":34},[31,6051,38],{"class":37},[31,6053,42],{"class":41},[31,6055,6056],{"class":33,"line":45},[31,6057,49],{"emptyLinePlaceholder":48},[31,6059,6060,6062,6064,6066,6068,6070,6072],{"class":33,"line":52},[31,6061,55],{"class":37},[31,6063,4714],{"class":58},[31,6065,63],{"class":62},[31,6067,66],{"class":37},[31,6069,69],{"class":58},[31,6071,72],{"class":62},[31,6073,75],{"class":58},[31,6075,6076],{"class":33,"line":78},[31,6077,81],{"class":62},[31,6079,6080],{"class":33,"line":84},[31,6081,87],{"class":37},[31,6083,6084,6086,6088,6090,6092,6094],{"class":33,"line":90},[31,6085,4737],{"class":58},[31,6087,96],{"class":62},[31,6089,99],{"class":58},[31,6091,102],{"class":62},[31,6093,4746],{"class":41},[31,6095,108],{"class":62},[31,6097,6098],{"class":33,"line":111},[31,6099,114],{"class":62},[31,6101,6102,6104,6106,6108,6110,6112,6114,6116],{"class":33,"line":117},[31,6103,120],{"class":58},[31,6105,102],{"class":62},[31,6107,126],{"class":125},[31,6109,129],{"class":62},[31,6111,132],{"class":58},[31,6113,135],{"class":62},[31,6115,4769],{"class":41},[31,6117,141],{"class":62},[31,6119,6120],{"class":33,"line":144},[31,6121,147],{"class":62},[31,6123,6124],{"class":33,"line":150},[31,6125,153],{"class":62},[31,6127,6128],{"class":33,"line":156},[31,6129,49],{"emptyLinePlaceholder":48},[31,6131,6132,6134,6136,6138,6140,6142,6144,6146,6148,6150],{"class":33,"line":161},[31,6133,164],{"class":37},[31,6135,167],{"class":58},[31,6137,102],{"class":62},[31,6139,164],{"class":37},[31,6141,175],{"class":174},[31,6143,178],{"class":62},[31,6145,181],{"class":37},[31,6147,184],{"class":37},[31,6149,187],{"class":174},[31,6151,108],{"class":62},[31,6153,6154],{"class":33,"line":192},[31,6155,81],{"class":62},[31,6157,6158,6160,6162,6164,6166],{"class":33,"line":197},[31,6159,5892],{"class":37},[31,6161,5895],{"class":62},[31,6163,5898],{"class":37},[31,6165,5901],{"class":125},[31,6167,108],{"class":62},[31,6169,6170],{"class":33,"line":211},[31,6171,5908],{"class":62},[31,6173,6174,6177,6179,6181,6183,6185,6187,6189,6191,6193],{"class":33,"line":216},[31,6175,6176],{"class":58},"    RCLCPP_ERROR",[31,6178,102],{"class":62},[31,6180,4086],{"class":58},[31,6182,72],{"class":62},[31,6184,132],{"class":58},[31,6186,102],{"class":62},[31,6188,5926],{"class":41},[31,6190,3423],{"class":62},[31,6192,5931],{"class":41},[31,6194,141],{"class":62},[31,6196,6197,6199,6201],{"class":33,"line":245},[31,6198,1980],{"class":37},[31,6200,5940],{"class":125},[31,6202,272],{"class":62},[31,6204,6205],{"class":33,"line":250},[31,6206,543],{"class":62},[31,6208,6209,6211,6213,6215],{"class":33,"line":263},[31,6210,200],{"class":58},[31,6212,72],{"class":62},[31,6214,205],{"class":58},[31,6216,208],{"class":62},[31,6218,6219],{"class":33,"line":275},[31,6220,49],{"emptyLinePlaceholder":48},[31,6222,6223,6225,6227,6229,6231,6233,6235,6237,6239],{"class":33,"line":494},[31,6224,4834],{"class":37},[31,6226,4837],{"class":62},[31,6228,1359],{"class":37},[31,6230,1269],{"class":58},[31,6232,72],{"class":62},[31,6234,233],{"class":58},[31,6236,236],{"class":62},[31,6238,4850],{"class":58},[31,6240,4853],{"class":62},[31,6242,6243],{"class":33,"line":501},[31,6244,49],{"emptyLinePlaceholder":48},[31,6246,6247,6249,6251,6253],{"class":33,"line":509},[31,6248,200],{"class":58},[31,6250,72],{"class":62},[31,6252,257],{"class":58},[31,6254,260],{"class":62},[31,6256,6257,6259,6261],{"class":33,"line":517},[31,6258,266],{"class":37},[31,6260,269],{"class":125},[31,6262,272],{"class":62},[31,6264,6265],{"class":33,"line":523},[31,6266,278],{"class":62},[560,6268],{},[14,6270,6271],{},[17,6272],{"alt":19,"src":6273},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage582.webp",[14,6275,6276],{},"一共3个入口参数，",[14,6278,6279],{},"第一个入口参数是话题名称，是字符串;",[14,6281,6282],{},"第二个入口参数和第三个入口参数有默认值，先不用管;",[14,6284,6285],{},"返回值是客户端的智能指针。",[14,6287,6288],{},[17,6289],{"alt":19,"src":6290},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage583.webp",[14,6292,6293],{},[17,6294],{"alt":19,"src":6295},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage584.webp",[14,6297,6298],{},[17,6299],{"alt":19,"src":6300},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage585.webp",[14,6302,6303],{},[17,6304],{"alt":19,"src":6305},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage586.webp",[14,6307,6308],{},[17,6309],{"alt":19,"src":6310},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage587.webp",[14,6312,6313],{},[17,6314],{"alt":19,"src":6315},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage588.webp",[14,6317,6318],{},[17,6319],{"alt":19,"src":6320},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage589.webp",[14,6322,6323],{},[17,6324],{"alt":19,"src":6325},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage590.webp",[14,6327,6328],{},[17,6329],{"alt":19,"src":6330},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage591.webp",[14,6332,6333],{},[17,6334],{"alt":19,"src":6335},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage592.webp",[14,6337,6338],{},[17,6339],{"alt":19,"src":6340},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage593.webp",[14,6342,6343],{},"一旦Ctrl+C关闭，则会疯狂爆INFO，且程序无法停止。",[14,6345,6346],{},[17,6347],{"alt":19,"src":6348},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage594.webp",[14,6350,6351],{},[17,6352],{"alt":19,"src":6353},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage595.webp",[14,6355,6356],{},"再按Ctrl+Z可以停止程序进行。",[14,6358,6359],{},[17,6360],{"alt":19,"src":6361},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage596.webp",[14,6363,6364],{},[17,6365],{"alt":19,"src":6366},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage597.webp",[14,6368,6369],{},"解决上面Ctrl+C的bug：",[14,6371,6372],{},[17,6373],{"alt":19,"src":6374},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage598.webp",[14,6376,6377],{},"rclcpp::ok()这个是判断当前程序是否正常运行，如果正常运行，则返回true，如果不正常运行则返回false，比如按下Ctrl+C就是不正常运行。",[14,6379,6380],{},"当rclcpp::ok() != true的时候，就是ctrl+c按下了。",[14,6382,6383],{},[17,6384],{"alt":19,"src":6385},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage599.webp",[14,6387,6388],{},"这样直接可以让函数结束。",[14,6390,6391],{},[17,6392],{"alt":19,"src":6393},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage600.webp",[14,6395,6396],{},[17,6397],{"alt":19,"src":6398},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage601.webp",[14,6400,6401],{},"这时按下ctrl+c会爆很多错误",[14,6403,6404],{},"这是因为",[14,6406,6407],{},"this->get_logger()",[14,6409,6410],{},"client->get_logger()",[14,6412,6413],{},"rclcpp::get_logger()",[14,6415,6416],{},"的不同",[14,6418,6419],{},"这个异常和context有关，初始化的时候会创建context对象，相当于是一个容器，可以往容器里放数据，也可以在容器里取数据。",[14,6421,6422],{},"当前，如果我们连接失败的话，打印日志。",[14,6424,6425],{},"按下ctrl+c会结束我们的ROS2程序，要释放资源，比如要关闭context，这时已经关掉了context，这样，我们再从client和this来获取日志，就不行了，所以建议用rclcpp::get_logger()。",[14,6427,6428],{},"因为rclcpp::get_logger()的调用和context没有关系。",[14,6430,6431],{},[17,6432],{"alt":19,"src":6433},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage602.webp",[14,6435,6436],{},"这样程序就正常了！",[22,6438,6440],{"className":24,"code":6439,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\nusing namespace std::chrono_literals;\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"客户端节点创建！\");\n      client_ = this->create_client\u003CAddInts>(\"add_ints\");\n    }\n\n    bool connect_server()\n    {\n      while(client_->wait_for_service(1s) != true)\n      {\n        RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务连接中!\");\n\n        if (rclcpp::ok() != true)\n        {\n          RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"强行终止客户端!\");\n          return false;\n        }\n      }\n      return true;\n    }\n\n  private:\n    rclcpp::Client\u003CAddInts>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  bool flag = client->connect_server();\n\n  if (flag != true)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务器连接失败，程序退出!\");\n    return 0;\n  }\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,6441,6442,6448,6454,6458,6470,6484,6488,6504,6508,6512,6526,6530,6552,6576,6580,6584,6594,6598,6625,6630,6653,6657,6680,6685,6709,6719,6724,6729,6738,6742,6746,6750,6766,6770,6774,6796,6800,6812,6816,6838,6847,6852,6863,6868,6889,6894,6913,6918,6932,6937,6961,6970,6975,6980,6991,7000],{"__ignoreMap":19},[31,6443,6444,6446],{"class":33,"line":34},[31,6445,38],{"class":37},[31,6447,42],{"class":41},[31,6449,6450,6452],{"class":33,"line":45},[31,6451,38],{"class":37},[31,6453,5012],{"class":41},[31,6455,6456],{"class":33,"line":52},[31,6457,49],{"emptyLinePlaceholder":48},[31,6459,6460,6462,6464,6466,6468],{"class":33,"line":78},[31,6461,1263],{"class":37},[31,6463,3564],{"class":58},[31,6465,72],{"class":62},[31,6467,5027],{"class":58},[31,6469,5030],{"class":62},[31,6471,6472,6474,6476,6478,6480,6482],{"class":33,"line":84},[31,6473,1263],{"class":37},[31,6475,1266],{"class":37},[31,6477,1269],{"class":58},[31,6479,72],{"class":62},[31,6481,1274],{"class":58},[31,6483,272],{"class":62},[31,6485,6486],{"class":33,"line":90},[31,6487,49],{"emptyLinePlaceholder":48},[31,6489,6490,6492,6494,6496,6498,6500,6502],{"class":33,"line":111},[31,6491,55],{"class":37},[31,6493,4714],{"class":58},[31,6495,63],{"class":62},[31,6497,66],{"class":37},[31,6499,69],{"class":58},[31,6501,72],{"class":62},[31,6503,75],{"class":58},[31,6505,6506],{"class":33,"line":117},[31,6507,81],{"class":62},[31,6509,6510],{"class":33,"line":144},[31,6511,87],{"class":37},[31,6513,6514,6516,6518,6520,6522,6524],{"class":33,"line":150},[31,6515,4737],{"class":58},[31,6517,96],{"class":62},[31,6519,99],{"class":58},[31,6521,102],{"class":62},[31,6523,4746],{"class":41},[31,6525,108],{"class":62},[31,6527,6528],{"class":33,"line":156},[31,6529,114],{"class":62},[31,6531,6532,6534,6536,6538,6540,6542,6544,6546,6548,6550],{"class":33,"line":161},[31,6533,120],{"class":58},[31,6535,102],{"class":62},[31,6537,4086],{"class":58},[31,6539,72],{"class":62},[31,6541,132],{"class":58},[31,6543,102],{"class":62},[31,6545,5926],{"class":41},[31,6547,3423],{"class":62},[31,6549,4769],{"class":41},[31,6551,141],{"class":62},[31,6553,6554,6557,6559,6561,6564,6566,6568,6570,6572,6574],{"class":33,"line":192},[31,6555,6556],{"class":62},"      client_ ",[31,6558,1359],{"class":37},[31,6560,1362],{"class":125},[31,6562,6563],{"class":62},"->create_client",[31,6565,236],{"class":37},[31,6567,5206],{"class":62},[31,6569,1381],{"class":37},[31,6571,102],{"class":62},[31,6573,5124],{"class":41},[31,6575,141],{"class":62},[31,6577,6578],{"class":33,"line":197},[31,6579,147],{"class":62},[31,6581,6582],{"class":33,"line":211},[31,6583,49],{"emptyLinePlaceholder":48},[31,6585,6586,6589,6592],{"class":33,"line":216},[31,6587,6588],{"class":37},"    bool",[31,6590,6591],{"class":58}," connect_server",[31,6593,1460],{"class":62},[31,6595,6596],{"class":33,"line":245},[31,6597,114],{"class":62},[31,6599,6600,6603,6606,6609,6611,6613,6615,6618,6620,6623],{"class":33,"line":250},[31,6601,6602],{"class":37},"      while",[31,6604,6605],{"class":62},"(client_->",[31,6607,6608],{"class":58},"wait_for_service",[31,6610,102],{"class":62},[31,6612,1413],{"class":125},[31,6614,1416],{"class":37},[31,6616,6617],{"class":62},") ",[31,6619,5898],{"class":37},[31,6621,6622],{"class":125}," true",[31,6624,108],{"class":62},[31,6626,6627],{"class":33,"line":263},[31,6628,6629],{"class":62},"      {\n",[31,6631,6632,6634,6636,6638,6640,6642,6644,6646,6648,6651],{"class":33,"line":275},[31,6633,1869],{"class":58},[31,6635,102],{"class":62},[31,6637,4086],{"class":58},[31,6639,72],{"class":62},[31,6641,132],{"class":58},[31,6643,102],{"class":62},[31,6645,5926],{"class":41},[31,6647,3423],{"class":62},[31,6649,6650],{"class":41},"\"服务连接中!\"",[31,6652,141],{"class":62},[31,6654,6655],{"class":33,"line":494},[31,6656,49],{"emptyLinePlaceholder":48},[31,6658,6659,6662,6664,6666,6668,6671,6674,6676,6678],{"class":33,"line":501},[31,6660,6661],{"class":37},"        if",[31,6663,5240],{"class":62},[31,6665,4086],{"class":58},[31,6667,72],{"class":62},[31,6669,6670],{"class":58},"ok",[31,6672,6673],{"class":62},"() ",[31,6675,5898],{"class":37},[31,6677,6622],{"class":125},[31,6679,108],{"class":62},[31,6681,6682],{"class":33,"line":509},[31,6683,6684],{"class":62},"        {\n",[31,6686,6687,6690,6692,6694,6696,6698,6700,6702,6704,6707],{"class":33,"line":517},[31,6688,6689],{"class":58},"          RCLCPP_INFO",[31,6691,102],{"class":62},[31,6693,4086],{"class":58},[31,6695,72],{"class":62},[31,6697,132],{"class":58},[31,6699,102],{"class":62},[31,6701,5926],{"class":41},[31,6703,3423],{"class":62},[31,6705,6706],{"class":41},"\"强行终止客户端!\"",[31,6708,141],{"class":62},[31,6710,6711,6714,6717],{"class":33,"line":523},[31,6712,6713],{"class":37},"          return",[31,6715,6716],{"class":125}," false",[31,6718,272],{"class":62},[31,6720,6721],{"class":33,"line":529},[31,6722,6723],{"class":62},"        }\n",[31,6725,6726],{"class":33,"line":540},[31,6727,6728],{"class":62},"      }\n",[31,6730,6731,6734,6736],{"class":33,"line":546},[31,6732,6733],{"class":37},"      return",[31,6735,6622],{"class":125},[31,6737,272],{"class":62},[31,6739,6740],{"class":33,"line":1640},[31,6741,147],{"class":62},[31,6743,6744],{"class":33,"line":1645},[31,6745,49],{"emptyLinePlaceholder":48},[31,6747,6748],{"class":33,"line":1656},[31,6749,1449],{"class":37},[31,6751,6752,6754,6756,6759,6761,6763],{"class":33,"line":1661},[31,6753,1567],{"class":58},[31,6755,72],{"class":62},[31,6757,6758],{"class":58},"Client",[31,6760,236],{"class":62},[31,6762,5206],{"class":58},[31,6764,6765],{"class":62},">::SharedPtr client_;\n",[31,6767,6768],{"class":33,"line":1684},[31,6769,153],{"class":62},[31,6771,6772],{"class":33,"line":1689},[31,6773,49],{"emptyLinePlaceholder":48},[31,6775,6776,6778,6780,6782,6784,6786,6788,6790,6792,6794],{"class":33,"line":1700},[31,6777,164],{"class":37},[31,6779,167],{"class":58},[31,6781,102],{"class":62},[31,6783,164],{"class":37},[31,6785,175],{"class":174},[31,6787,178],{"class":62},[31,6789,181],{"class":37},[31,6791,184],{"class":37},[31,6793,187],{"class":174},[31,6795,108],{"class":62},[31,6797,6798],{"class":33,"line":1709},[31,6799,81],{"class":62},[31,6801,6802,6804,6806,6808,6810],{"class":33,"line":3790},[31,6803,5892],{"class":37},[31,6805,5895],{"class":62},[31,6807,5898],{"class":37},[31,6809,5901],{"class":125},[31,6811,108],{"class":62},[31,6813,6814],{"class":33,"line":3801},[31,6815,5908],{"class":62},[31,6817,6818,6820,6822,6824,6826,6828,6830,6832,6834,6836],{"class":33,"line":3810},[31,6819,6176],{"class":58},[31,6821,102],{"class":62},[31,6823,4086],{"class":58},[31,6825,72],{"class":62},[31,6827,132],{"class":58},[31,6829,102],{"class":62},[31,6831,5926],{"class":41},[31,6833,3423],{"class":62},[31,6835,5931],{"class":41},[31,6837,141],{"class":62},[31,6839,6841,6843,6845],{"class":33,"line":6840},40,[31,6842,1980],{"class":37},[31,6844,5940],{"class":125},[31,6846,272],{"class":62},[31,6848,6850],{"class":33,"line":6849},41,[31,6851,543],{"class":62},[31,6853,6855,6857,6859,6861],{"class":33,"line":6854},42,[31,6856,200],{"class":58},[31,6858,72],{"class":62},[31,6860,205],{"class":58},[31,6862,208],{"class":62},[31,6864,6866],{"class":33,"line":6865},43,[31,6867,49],{"emptyLinePlaceholder":48},[31,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887],{"class":33,"line":6870},44,[31,6872,4834],{"class":37},[31,6874,4837],{"class":62},[31,6876,1359],{"class":37},[31,6878,1269],{"class":58},[31,6880,72],{"class":62},[31,6882,233],{"class":58},[31,6884,236],{"class":62},[31,6886,4850],{"class":58},[31,6888,4853],{"class":62},[31,6890,6892],{"class":33,"line":6891},45,[31,6893,49],{"emptyLinePlaceholder":48},[31,6895,6897,6900,6903,6905,6908,6911],{"class":33,"line":6896},46,[31,6898,6899],{"class":37},"  bool",[31,6901,6902],{"class":62}," flag ",[31,6904,1359],{"class":37},[31,6906,6907],{"class":62}," client->",[31,6909,6910],{"class":58},"connect_server",[31,6912,260],{"class":62},[31,6914,6916],{"class":33,"line":6915},47,[31,6917,49],{"emptyLinePlaceholder":48},[31,6919,6921,6923,6926,6928,6930],{"class":33,"line":6920},48,[31,6922,5892],{"class":37},[31,6924,6925],{"class":62}," (flag ",[31,6927,5898],{"class":37},[31,6929,6622],{"class":125},[31,6931,108],{"class":62},[31,6933,6935],{"class":33,"line":6934},49,[31,6936,5908],{"class":62},[31,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6959],{"class":33,"line":6939},50,[31,6941,5913],{"class":58},[31,6943,102],{"class":62},[31,6945,4086],{"class":58},[31,6947,72],{"class":62},[31,6949,132],{"class":58},[31,6951,102],{"class":62},[31,6953,5926],{"class":41},[31,6955,3423],{"class":62},[31,6957,6958],{"class":41},"\"服务器连接失败，程序退出!\"",[31,6960,141],{"class":62},[31,6962,6964,6966,6968],{"class":33,"line":6963},51,[31,6965,1980],{"class":37},[31,6967,269],{"class":125},[31,6969,272],{"class":62},[31,6971,6973],{"class":33,"line":6972},52,[31,6974,543],{"class":62},[31,6976,6978],{"class":33,"line":6977},53,[31,6979,49],{"emptyLinePlaceholder":48},[31,6981,6983,6985,6987,6989],{"class":33,"line":6982},54,[31,6984,200],{"class":58},[31,6986,72],{"class":62},[31,6988,257],{"class":58},[31,6990,260],{"class":62},[31,6992,6994,6996,6998],{"class":33,"line":6993},55,[31,6995,266],{"class":37},[31,6997,269],{"class":125},[31,6999,272],{"class":62},[31,7001,7003],{"class":33,"line":7002},56,[31,7004,278],{"class":62},[14,7006,7007],{},[17,7008],{"alt":19,"src":7009},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage603.webp",[560,7011],{},[14,7013,7014],{},[17,7015],{"alt":19,"src":7016},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage604.webp",[14,7018,7019],{},[17,7020],{"alt":19,"src":7021},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage605.webp",[14,7023,7024],{},[17,7025],{"alt":19,"src":7026},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage606.webp",[14,7028,7029],{},"返回值类型有了，我们就粘贴过去，",[14,7031,7032],{},"因为using base_interfaces_demo::srv::AddInts所以可以省略成AddInts",[14,7034,7035],{},[17,7036],{"alt":19,"src":7037},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage607.webp",[14,7039,7040],{},[17,7041],{"alt":19,"src":7042},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage608.webp",[14,7044,7045],{},[17,7046],{"alt":19,"src":7047},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage609.webp",[14,7049,7050],{},"在主函数里要调用函数。",[14,7052,7053],{},[17,7054],{"alt":19,"src":7055},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage610.webp",[14,7057,7058],{},"atoi()是把数据转化成整形",[14,7060,7061],{},[17,7062],{"alt":19,"src":7063},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage611.webp",[14,7065,7066],{},"我们还要处理响应，响应有3个",[14,7068,7069],{},"第一个是中断，第二个是成功，第三个是超时;",[14,7071,7072],{},"我们一般只判断成功，其他两种情况都认为是失败。",[14,7074,7075],{},[17,7076],{"alt":19,"src":7077},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage612.webp",[14,7079,7080],{},"第一个入口参数是 节点的智能指针",[14,7082,7083],{},"第二个入口参数是future",[14,7085,7086],{},"第三个入口参数有默认值，先不用管",[14,7088,7089],{},[17,7090],{"alt":19,"src":7091},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage613.webp",[14,7093,7094],{},[17,7095],{"alt":19,"src":7096},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage614.webp",[14,7098,7099],{},[17,7100],{"alt":19,"src":7101},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage615.webp",[14,7103,7104],{},[17,7105],{"alt":19,"src":7106},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage616.webp",[14,7108,7109],{},[17,7110],{"alt":19,"src":7111},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage617.webp",[22,7113,7115],{"className":24,"code":7114,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\nusing namespace std::chrono_literals;\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"客户端节点创建！\");\n      client_ = this->create_client\u003CAddInts>(\"add_ints\");\n    }\n\n    bool connect_server()\n    {\n      while(client_->wait_for_service(1s) != true)\n      {\n        RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务连接中!\");\n\n        if (rclcpp::ok() != true)\n        {\n          RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"强行终止客户端!\");\n          return false;\n        }\n      }\n      return true;\n    }\n\n    rclcpp::Client\u003CAddInts>::FutureAndRequestId send_request(int32_t num1,int32_t num2)\n    {\n      \u002F*\n        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  \u002F\u002F其实就相当于AddInts::Request类型\n      *\u002F\n      auto request = std::make_sharedautolinkAddInts::Requestautolink();\n      request->num1 = num1;\n      request->num2 = num2;\n      return client_->async_send_request(request);\n    }\n\n  private:\n    rclcpp::Client\u003CAddInts>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  bool flag = client->connect_server();\n\n  if (flag != true)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务器连接失败，程序退出!\");\n    return 0;\n  }\n  auto future = client->send_request(atoi(argv[1]),atoi(argv[2]));\n\n  if (rclcpp::spin_until_future_complete(client,future) == rclcpp::FutureReturnCode::SUCCESS)\n  {\n    RCLCPP_INFO(client->get_logger(),\"响应成功! sum = %d\",future.get()->sum);\n  }\n  else\n  {\n    RCLCPP_INFO(client->get_logger(),\"响应失败!\");\n  }\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,7116,7117,7123,7129,7133,7145,7159,7163,7179,7183,7187,7201,7205,7227,7249,7253,7257,7265,7269,7291,7295,7317,7321,7341,7345,7367,7375,7379,7383,7391,7395,7399,7437,7441,7446,7451,7456,7461,7484,7494,7504,7517,7521,7525,7529,7543,7547,7551,7573,7577,7589,7593,7615,7623,7627,7637,7641,7661,7666,7681,7686,7699,7704,7727,7736,7741,7778,7783,7813,7818,7846,7851,7857,7862,7878,7883,7888,7899,7908],{"__ignoreMap":19},[31,7118,7119,7121],{"class":33,"line":34},[31,7120,38],{"class":37},[31,7122,42],{"class":41},[31,7124,7125,7127],{"class":33,"line":45},[31,7126,38],{"class":37},[31,7128,5012],{"class":41},[31,7130,7131],{"class":33,"line":52},[31,7132,49],{"emptyLinePlaceholder":48},[31,7134,7135,7137,7139,7141,7143],{"class":33,"line":78},[31,7136,1263],{"class":37},[31,7138,3564],{"class":58},[31,7140,72],{"class":62},[31,7142,5027],{"class":58},[31,7144,5030],{"class":62},[31,7146,7147,7149,7151,7153,7155,7157],{"class":33,"line":84},[31,7148,1263],{"class":37},[31,7150,1266],{"class":37},[31,7152,1269],{"class":58},[31,7154,72],{"class":62},[31,7156,1274],{"class":58},[31,7158,272],{"class":62},[31,7160,7161],{"class":33,"line":90},[31,7162,49],{"emptyLinePlaceholder":48},[31,7164,7165,7167,7169,7171,7173,7175,7177],{"class":33,"line":111},[31,7166,55],{"class":37},[31,7168,4714],{"class":58},[31,7170,63],{"class":62},[31,7172,66],{"class":37},[31,7174,69],{"class":58},[31,7176,72],{"class":62},[31,7178,75],{"class":58},[31,7180,7181],{"class":33,"line":117},[31,7182,81],{"class":62},[31,7184,7185],{"class":33,"line":144},[31,7186,87],{"class":37},[31,7188,7189,7191,7193,7195,7197,7199],{"class":33,"line":150},[31,7190,4737],{"class":58},[31,7192,96],{"class":62},[31,7194,99],{"class":58},[31,7196,102],{"class":62},[31,7198,4746],{"class":41},[31,7200,108],{"class":62},[31,7202,7203],{"class":33,"line":156},[31,7204,114],{"class":62},[31,7206,7207,7209,7211,7213,7215,7217,7219,7221,7223,7225],{"class":33,"line":161},[31,7208,120],{"class":58},[31,7210,102],{"class":62},[31,7212,4086],{"class":58},[31,7214,72],{"class":62},[31,7216,132],{"class":58},[31,7218,102],{"class":62},[31,7220,5926],{"class":41},[31,7222,3423],{"class":62},[31,7224,4769],{"class":41},[31,7226,141],{"class":62},[31,7228,7229,7231,7233,7235,7237,7239,7241,7243,7245,7247],{"class":33,"line":192},[31,7230,6556],{"class":62},[31,7232,1359],{"class":37},[31,7234,1362],{"class":125},[31,7236,6563],{"class":62},[31,7238,236],{"class":37},[31,7240,5206],{"class":62},[31,7242,1381],{"class":37},[31,7244,102],{"class":62},[31,7246,5124],{"class":41},[31,7248,141],{"class":62},[31,7250,7251],{"class":33,"line":197},[31,7252,147],{"class":62},[31,7254,7255],{"class":33,"line":211},[31,7256,49],{"emptyLinePlaceholder":48},[31,7258,7259,7261,7263],{"class":33,"line":216},[31,7260,6588],{"class":37},[31,7262,6591],{"class":58},[31,7264,1460],{"class":62},[31,7266,7267],{"class":33,"line":245},[31,7268,114],{"class":62},[31,7270,7271,7273,7275,7277,7279,7281,7283,7285,7287,7289],{"class":33,"line":250},[31,7272,6602],{"class":37},[31,7274,6605],{"class":62},[31,7276,6608],{"class":58},[31,7278,102],{"class":62},[31,7280,1413],{"class":125},[31,7282,1416],{"class":37},[31,7284,6617],{"class":62},[31,7286,5898],{"class":37},[31,7288,6622],{"class":125},[31,7290,108],{"class":62},[31,7292,7293],{"class":33,"line":263},[31,7294,6629],{"class":62},[31,7296,7297,7299,7301,7303,7305,7307,7309,7311,7313,7315],{"class":33,"line":275},[31,7298,1869],{"class":58},[31,7300,102],{"class":62},[31,7302,4086],{"class":58},[31,7304,72],{"class":62},[31,7306,132],{"class":58},[31,7308,102],{"class":62},[31,7310,5926],{"class":41},[31,7312,3423],{"class":62},[31,7314,6650],{"class":41},[31,7316,141],{"class":62},[31,7318,7319],{"class":33,"line":494},[31,7320,49],{"emptyLinePlaceholder":48},[31,7322,7323,7325,7327,7329,7331,7333,7335,7337,7339],{"class":33,"line":501},[31,7324,6661],{"class":37},[31,7326,5240],{"class":62},[31,7328,4086],{"class":58},[31,7330,72],{"class":62},[31,7332,6670],{"class":58},[31,7334,6673],{"class":62},[31,7336,5898],{"class":37},[31,7338,6622],{"class":125},[31,7340,108],{"class":62},[31,7342,7343],{"class":33,"line":509},[31,7344,6684],{"class":62},[31,7346,7347,7349,7351,7353,7355,7357,7359,7361,7363,7365],{"class":33,"line":517},[31,7348,6689],{"class":58},[31,7350,102],{"class":62},[31,7352,4086],{"class":58},[31,7354,72],{"class":62},[31,7356,132],{"class":58},[31,7358,102],{"class":62},[31,7360,5926],{"class":41},[31,7362,3423],{"class":62},[31,7364,6706],{"class":41},[31,7366,141],{"class":62},[31,7368,7369,7371,7373],{"class":33,"line":523},[31,7370,6713],{"class":37},[31,7372,6716],{"class":125},[31,7374,272],{"class":62},[31,7376,7377],{"class":33,"line":529},[31,7378,6723],{"class":62},[31,7380,7381],{"class":33,"line":540},[31,7382,6728],{"class":62},[31,7384,7385,7387,7389],{"class":33,"line":546},[31,7386,6733],{"class":37},[31,7388,6622],{"class":125},[31,7390,272],{"class":62},[31,7392,7393],{"class":33,"line":1640},[31,7394,147],{"class":62},[31,7396,7397],{"class":33,"line":1645},[31,7398,49],{"emptyLinePlaceholder":48},[31,7400,7401,7403,7405,7407,7409,7411,7414,7417,7420,7422,7425,7428,7430,7432,7435],{"class":33,"line":1656},[31,7402,1567],{"class":58},[31,7404,72],{"class":62},[31,7406,6758],{"class":58},[31,7408,236],{"class":62},[31,7410,5206],{"class":58},[31,7412,7413],{"class":62},">::",[31,7415,7416],{"class":58},"FutureAndRequestId",[31,7418,7419],{"class":58}," send_request",[31,7421,102],{"class":62},[31,7423,7424],{"class":37},"int32_t",[31,7426,7427],{"class":174}," num1",[31,7429,1389],{"class":62},[31,7431,7424],{"class":37},[31,7433,7434],{"class":174}," num2",[31,7436,108],{"class":62},[31,7438,7439],{"class":33,"line":1661},[31,7440,114],{"class":62},[31,7442,7443],{"class":33,"line":1684},[31,7444,7445],{"class":4828},"      \u002F*\n",[31,7447,7448],{"class":33,"line":1689},[31,7449,7450],{"class":4828},"        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n",[31,7452,7453],{"class":33,"line":1700},[31,7454,7455],{"class":4828},"        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  \u002F\u002F其实就相当于AddInts::Request类型\n",[31,7457,7458],{"class":33,"line":1709},[31,7459,7460],{"class":4828},"      *\u002F\n",[31,7462,7463,7465,7468,7470,7472,7474,7477,7479,7482],{"class":33,"line":3790},[31,7464,1469],{"class":37},[31,7466,7467],{"class":62}," request ",[31,7469,1359],{"class":37},[31,7471,1269],{"class":58},[31,7473,72],{"class":62},[31,7475,7476],{"class":58},"make_sharedautolinkAddInts",[31,7478,72],{"class":62},[31,7480,7481],{"class":58},"Requestautolink",[31,7483,260],{"class":62},[31,7485,7486,7489,7491],{"class":33,"line":3801},[31,7487,7488],{"class":62},"      request->num1 ",[31,7490,1359],{"class":37},[31,7492,7493],{"class":62}," num1;\n",[31,7495,7496,7499,7501],{"class":33,"line":3810},[31,7497,7498],{"class":62},"      request->num2 ",[31,7500,1359],{"class":37},[31,7502,7503],{"class":62}," num2;\n",[31,7505,7506,7508,7511,7514],{"class":33,"line":6840},[31,7507,6733],{"class":37},[31,7509,7510],{"class":62}," client_->",[31,7512,7513],{"class":58},"async_send_request",[31,7515,7516],{"class":62},"(request);\n",[31,7518,7519],{"class":33,"line":6849},[31,7520,147],{"class":62},[31,7522,7523],{"class":33,"line":6854},[31,7524,49],{"emptyLinePlaceholder":48},[31,7526,7527],{"class":33,"line":6865},[31,7528,1449],{"class":37},[31,7530,7531,7533,7535,7537,7539,7541],{"class":33,"line":6870},[31,7532,1567],{"class":58},[31,7534,72],{"class":62},[31,7536,6758],{"class":58},[31,7538,236],{"class":62},[31,7540,5206],{"class":58},[31,7542,6765],{"class":62},[31,7544,7545],{"class":33,"line":6891},[31,7546,153],{"class":62},[31,7548,7549],{"class":33,"line":6896},[31,7550,49],{"emptyLinePlaceholder":48},[31,7552,7553,7555,7557,7559,7561,7563,7565,7567,7569,7571],{"class":33,"line":6915},[31,7554,164],{"class":37},[31,7556,167],{"class":58},[31,7558,102],{"class":62},[31,7560,164],{"class":37},[31,7562,175],{"class":174},[31,7564,178],{"class":62},[31,7566,181],{"class":37},[31,7568,184],{"class":37},[31,7570,187],{"class":174},[31,7572,108],{"class":62},[31,7574,7575],{"class":33,"line":6920},[31,7576,81],{"class":62},[31,7578,7579,7581,7583,7585,7587],{"class":33,"line":6934},[31,7580,5892],{"class":37},[31,7582,5895],{"class":62},[31,7584,5898],{"class":37},[31,7586,5901],{"class":125},[31,7588,108],{"class":62},[31,7590,7591],{"class":33,"line":6939},[31,7592,5908],{"class":62},[31,7594,7595,7597,7599,7601,7603,7605,7607,7609,7611,7613],{"class":33,"line":6963},[31,7596,6176],{"class":58},[31,7598,102],{"class":62},[31,7600,4086],{"class":58},[31,7602,72],{"class":62},[31,7604,132],{"class":58},[31,7606,102],{"class":62},[31,7608,5926],{"class":41},[31,7610,3423],{"class":62},[31,7612,5931],{"class":41},[31,7614,141],{"class":62},[31,7616,7617,7619,7621],{"class":33,"line":6972},[31,7618,1980],{"class":37},[31,7620,5940],{"class":125},[31,7622,272],{"class":62},[31,7624,7625],{"class":33,"line":6977},[31,7626,543],{"class":62},[31,7628,7629,7631,7633,7635],{"class":33,"line":6982},[31,7630,200],{"class":58},[31,7632,72],{"class":62},[31,7634,205],{"class":58},[31,7636,208],{"class":62},[31,7638,7639],{"class":33,"line":6993},[31,7640,49],{"emptyLinePlaceholder":48},[31,7642,7643,7645,7647,7649,7651,7653,7655,7657,7659],{"class":33,"line":7002},[31,7644,4834],{"class":37},[31,7646,4837],{"class":62},[31,7648,1359],{"class":37},[31,7650,1269],{"class":58},[31,7652,72],{"class":62},[31,7654,233],{"class":58},[31,7656,236],{"class":62},[31,7658,4850],{"class":58},[31,7660,4853],{"class":62},[31,7662,7664],{"class":33,"line":7663},57,[31,7665,49],{"emptyLinePlaceholder":48},[31,7667,7669,7671,7673,7675,7677,7679],{"class":33,"line":7668},58,[31,7670,6899],{"class":37},[31,7672,6902],{"class":62},[31,7674,1359],{"class":37},[31,7676,6907],{"class":62},[31,7678,6910],{"class":58},[31,7680,260],{"class":62},[31,7682,7684],{"class":33,"line":7683},59,[31,7685,49],{"emptyLinePlaceholder":48},[31,7687,7689,7691,7693,7695,7697],{"class":33,"line":7688},60,[31,7690,5892],{"class":37},[31,7692,6925],{"class":62},[31,7694,5898],{"class":37},[31,7696,6622],{"class":125},[31,7698,108],{"class":62},[31,7700,7702],{"class":33,"line":7701},61,[31,7703,5908],{"class":62},[31,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725],{"class":33,"line":7706},62,[31,7708,5913],{"class":58},[31,7710,102],{"class":62},[31,7712,4086],{"class":58},[31,7714,72],{"class":62},[31,7716,132],{"class":58},[31,7718,102],{"class":62},[31,7720,5926],{"class":41},[31,7722,3423],{"class":62},[31,7724,6958],{"class":41},[31,7726,141],{"class":62},[31,7728,7730,7732,7734],{"class":33,"line":7729},63,[31,7731,1980],{"class":37},[31,7733,269],{"class":125},[31,7735,272],{"class":62},[31,7737,7739],{"class":33,"line":7738},64,[31,7740,543],{"class":62},[31,7742,7744,7746,7749,7751,7753,7756,7758,7761,7764,7766,7769,7771,7773,7775],{"class":33,"line":7743},65,[31,7745,4834],{"class":37},[31,7747,7748],{"class":62}," future ",[31,7750,1359],{"class":37},[31,7752,6907],{"class":62},[31,7754,7755],{"class":58},"send_request",[31,7757,102],{"class":62},[31,7759,7760],{"class":58},"atoi",[31,7762,7763],{"class":62},"(argv[",[31,7765,1413],{"class":125},[31,7767,7768],{"class":62},"]),",[31,7770,7760],{"class":58},[31,7772,7763],{"class":62},[31,7774,802],{"class":125},[31,7776,7777],{"class":62},"]));\n",[31,7779,7781],{"class":33,"line":7780},66,[31,7782,49],{"emptyLinePlaceholder":48},[31,7784,7786,7788,7790,7792,7794,7797,7800,7803,7805,7807,7810],{"class":33,"line":7785},67,[31,7787,5892],{"class":37},[31,7789,5240],{"class":62},[31,7791,4086],{"class":58},[31,7793,72],{"class":62},[31,7795,7796],{"class":58},"spin_until_future_complete",[31,7798,7799],{"class":62},"(client,future) ",[31,7801,7802],{"class":37},"==",[31,7804,69],{"class":58},[31,7806,72],{"class":62},[31,7808,7809],{"class":58},"FutureReturnCode",[31,7811,7812],{"class":62},"::SUCCESS)\n",[31,7814,7816],{"class":33,"line":7815},68,[31,7817,5908],{"class":62},[31,7819,7821,7823,7826,7828,7830,7833,7835,7837,7840,7843],{"class":33,"line":7820},69,[31,7822,5913],{"class":58},[31,7824,7825],{"class":62},"(client->",[31,7827,132],{"class":58},[31,7829,135],{"class":62},[31,7831,7832],{"class":41},"\"响应成功! sum = ",[31,7834,3655],{"class":125},[31,7836,367],{"class":41},[31,7838,7839],{"class":62},",future.",[31,7841,7842],{"class":58},"get",[31,7844,7845],{"class":62},"()->sum);\n",[31,7847,7849],{"class":33,"line":7848},70,[31,7850,543],{"class":62},[31,7852,7854],{"class":33,"line":7853},71,[31,7855,7856],{"class":37},"  else\n",[31,7858,7860],{"class":33,"line":7859},72,[31,7861,5908],{"class":62},[31,7863,7865,7867,7869,7871,7873,7876],{"class":33,"line":7864},73,[31,7866,5913],{"class":58},[31,7868,7825],{"class":62},[31,7870,132],{"class":58},[31,7872,135],{"class":62},[31,7874,7875],{"class":41},"\"响应失败!\"",[31,7877,141],{"class":62},[31,7879,7881],{"class":33,"line":7880},74,[31,7882,543],{"class":62},[31,7884,7886],{"class":33,"line":7885},75,[31,7887,49],{"emptyLinePlaceholder":48},[31,7889,7891,7893,7895,7897],{"class":33,"line":7890},76,[31,7892,200],{"class":58},[31,7894,72],{"class":62},[31,7896,257],{"class":58},[31,7898,260],{"class":62},[31,7900,7902,7904,7906],{"class":33,"line":7901},77,[31,7903,266],{"class":37},[31,7905,269],{"class":125},[31,7907,272],{"class":62},[31,7909,7911],{"class":33,"line":7910},78,[31,7912,278],{"class":62},[10,7914,7915],{"id":7915},"动作通信_理论",[14,7917,7918],{},[17,7919],{"alt":19,"src":7920},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage618.webp",[14,7922,7923],{},"让B一直给A返回当前机器人的状态信息，这样的行为通信更符合我们操控机器人的导航需求。",[14,7925,7926],{},[17,7927],{"alt":19,"src":7928},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage619.webp",[14,7930,7931],{},"输入10，会累加1-10的所有数，并且会遍历1-10所有的数，并进行累加，累加是需要耗时的，假设每累加一次，耗时一秒，",[14,7933,7934],{},"然后为了好看出来程序运行情况，在每累加的时候，都发一个INFO，代表当前进度。",[14,7936,7937],{},[17,7938],{"alt":19,"src":7939},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage620.webp",[14,7941,7942],{},"可以在进行任务时，把任务取消掉。",[14,7944,7945],{},"第一步，客户端给服务端发目标数据",[14,7947,7948],{},"第二步，服务端评估目标数据，并反馈给客户端这个评估结果(是否能够达到目标)",[14,7950,7951],{},"第三步，客户端再给服务端发最终确定的目标数据",[14,7953,7954],{},"第四步，服务端一直反馈给客户端执行的过程数据",[14,7956,7957],{},"第五步，结束之后，服务端反馈给客户端最终的结果",[14,7959,7960],{},[17,7961],{"alt":19,"src":7962},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage621.webp",[560,7964],{},[14,7966,7967],{},[17,7968],{"alt":19,"src":7969},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage622.webp",[14,7971,7972],{},[17,7973],{"alt":19,"src":7974},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage623.webp",[14,7976,7977],{},[17,7978],{"alt":19,"src":7979},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage624.webp",[14,7981,7982],{},[17,7983],{"alt":19,"src":7984},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage625.webp",[14,7986,7987],{},[17,7988],{"alt":19,"src":7989},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage626.webp",[14,7991,7992],{},"ros2 pkg create cpp03_action --build-type ament_cmake --dependencies rclcpp rclcpp_action base_interfaces_demo --node-name demo01_action_server",[560,7994],{},[14,7996,7997],{},[17,7998],{"alt":19,"src":7999},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage627.webp",[14,8001,8002],{},[17,8003],{"alt":19,"src":8004},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage628.webp",[14,8006,8007],{},"最顶上是请求数据，",[14,8009,8010],{},"中间是最终响应结果的数据，",[14,8012,8013],{},"最底下是连续反馈的数据。",[14,8015,8016],{},[17,8017],{"alt":19,"src":8018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage629.webp",[14,8020,8021],{},[17,8022],{"alt":19,"src":8023},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage630.webp",[14,8025,8026],{},[17,8027],{"alt":19,"src":8028},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage631.webp",[14,8030,8031],{},[17,8032],{"alt":19,"src":8033},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage632.webp",[14,8035,8036],{},"depend是build depend,exe depend,export depend三者的集成。",[14,8038,8039],{},[17,8040],{"alt":19,"src":8041},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage633.webp",[14,8043,8044],{},[17,8045],{"alt":19,"src":8046},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage634.webp",[14,8048,8049],{},[17,8050],{"alt":19,"src":8051},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage635.webp",[14,8053,8054],{},[17,8055],{"alt":19,"src":8056},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage636.webp",[14,8058,8059],{},[17,8060],{"alt":19,"src":8061},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage637.webp",[14,8063,8064],{},[17,8065],{"alt":19,"src":8066},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage638.webp",[14,8068,8069],{},[17,8070],{"alt":19,"src":8071},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage639.webp",[14,8073,8074],{},[17,8075],{"alt":19,"src":8076},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage640.webp",[14,8078,8079],{},"ros2 interface show base_interfaces_demo\u002Faction\u002FProgress",[10,8081,8083],{"id":8082},"动作通信_实验1_服务端实现c","动作通信_实验1_服务端实现(C++)",[14,8085,8086],{},[17,8087],{"alt":19,"src":8088},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage641.webp",[22,8090,8092],{"className":24,"code":8091,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,8093,8094,8100,8104,8121,8125,8129,8145,8149,8168,8172,8176,8180,8202,8206,8216,8220,8243,8247,8257,8265],{"__ignoreMap":19},[31,8095,8096,8098],{"class":33,"line":34},[31,8097,38],{"class":37},[31,8099,42],{"class":41},[31,8101,8102],{"class":33,"line":45},[31,8103,49],{"emptyLinePlaceholder":48},[31,8105,8106,8108,8111,8113,8115,8117,8119],{"class":33,"line":52},[31,8107,55],{"class":37},[31,8109,8110],{"class":58}," ProgressActionServer",[31,8112,63],{"class":62},[31,8114,66],{"class":37},[31,8116,69],{"class":58},[31,8118,72],{"class":62},[31,8120,75],{"class":58},[31,8122,8123],{"class":33,"line":78},[31,8124,81],{"class":62},[31,8126,8127],{"class":33,"line":84},[31,8128,87],{"class":37},[31,8130,8131,8134,8136,8138,8140,8143],{"class":33,"line":90},[31,8132,8133],{"class":58},"    ProgressActionServer",[31,8135,96],{"class":62},[31,8137,99],{"class":58},[31,8139,102],{"class":62},[31,8141,8142],{"class":41},"\"progress_action_server_node_cpp\"",[31,8144,108],{"class":62},[31,8146,8147],{"class":33,"line":111},[31,8148,114],{"class":62},[31,8150,8151,8153,8155,8157,8159,8161,8163,8166],{"class":33,"line":117},[31,8152,120],{"class":58},[31,8154,102],{"class":62},[31,8156,126],{"class":125},[31,8158,129],{"class":62},[31,8160,132],{"class":58},[31,8162,135],{"class":62},[31,8164,8165],{"class":41},"\"action服务端创建!\"",[31,8167,141],{"class":62},[31,8169,8170],{"class":33,"line":144},[31,8171,147],{"class":62},[31,8173,8174],{"class":33,"line":150},[31,8175,153],{"class":62},[31,8177,8178],{"class":33,"line":156},[31,8179,49],{"emptyLinePlaceholder":48},[31,8181,8182,8184,8186,8188,8190,8192,8194,8196,8198,8200],{"class":33,"line":161},[31,8183,164],{"class":37},[31,8185,167],{"class":58},[31,8187,102],{"class":62},[31,8189,164],{"class":37},[31,8191,175],{"class":174},[31,8193,178],{"class":62},[31,8195,181],{"class":37},[31,8197,184],{"class":37},[31,8199,187],{"class":174},[31,8201,108],{"class":62},[31,8203,8204],{"class":33,"line":192},[31,8205,81],{"class":62},[31,8207,8208,8210,8212,8214],{"class":33,"line":197},[31,8209,200],{"class":58},[31,8211,72],{"class":62},[31,8213,205],{"class":58},[31,8215,208],{"class":62},[31,8217,8218],{"class":33,"line":211},[31,8219,49],{"emptyLinePlaceholder":48},[31,8221,8222,8224,8226,8228,8230,8232,8234,8236,8238,8241],{"class":33,"line":216},[31,8223,200],{"class":58},[31,8225,72],{"class":62},[31,8227,223],{"class":58},[31,8229,102],{"class":62},[31,8231,228],{"class":58},[31,8233,72],{"class":62},[31,8235,233],{"class":58},[31,8237,236],{"class":62},[31,8239,8240],{"class":58},"ProgressActionServer",[31,8242,242],{"class":62},[31,8244,8245],{"class":33,"line":245},[31,8246,49],{"emptyLinePlaceholder":48},[31,8248,8249,8251,8253,8255],{"class":33,"line":250},[31,8250,200],{"class":58},[31,8252,72],{"class":62},[31,8254,257],{"class":58},[31,8256,260],{"class":62},[31,8258,8259,8261,8263],{"class":33,"line":263},[31,8260,266],{"class":37},[31,8262,269],{"class":125},[31,8264,272],{"class":62},[31,8266,8267],{"class":33,"line":275},[31,8268,278],{"class":62},[14,8270,8271],{},[17,8272],{"alt":19,"src":8273},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage642.webp",[22,8275,8277],{"className":24,"code":8276,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionClient>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,8278,8279,8285,8289,8306,8310,8314,8329,8333,8352,8356,8360,8364,8386,8390,8400,8404,8427,8431,8441,8449],{"__ignoreMap":19},[31,8280,8281,8283],{"class":33,"line":34},[31,8282,38],{"class":37},[31,8284,42],{"class":41},[31,8286,8287],{"class":33,"line":45},[31,8288,49],{"emptyLinePlaceholder":48},[31,8290,8291,8293,8296,8298,8300,8302,8304],{"class":33,"line":52},[31,8292,55],{"class":37},[31,8294,8295],{"class":58}," ProgressActionClient",[31,8297,63],{"class":62},[31,8299,66],{"class":37},[31,8301,69],{"class":58},[31,8303,72],{"class":62},[31,8305,75],{"class":58},[31,8307,8308],{"class":33,"line":78},[31,8309,81],{"class":62},[31,8311,8312],{"class":33,"line":84},[31,8313,87],{"class":37},[31,8315,8316,8319,8321,8323,8325,8327],{"class":33,"line":90},[31,8317,8318],{"class":58},"    ProgressActionClient",[31,8320,96],{"class":62},[31,8322,99],{"class":58},[31,8324,102],{"class":62},[31,8326,8142],{"class":41},[31,8328,108],{"class":62},[31,8330,8331],{"class":33,"line":111},[31,8332,114],{"class":62},[31,8334,8335,8337,8339,8341,8343,8345,8347,8350],{"class":33,"line":117},[31,8336,120],{"class":58},[31,8338,102],{"class":62},[31,8340,126],{"class":125},[31,8342,129],{"class":62},[31,8344,132],{"class":58},[31,8346,135],{"class":62},[31,8348,8349],{"class":41},"\"action客户端创建!\"",[31,8351,141],{"class":62},[31,8353,8354],{"class":33,"line":144},[31,8355,147],{"class":62},[31,8357,8358],{"class":33,"line":150},[31,8359,153],{"class":62},[31,8361,8362],{"class":33,"line":156},[31,8363,49],{"emptyLinePlaceholder":48},[31,8365,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384],{"class":33,"line":161},[31,8367,164],{"class":37},[31,8369,167],{"class":58},[31,8371,102],{"class":62},[31,8373,164],{"class":37},[31,8375,175],{"class":174},[31,8377,178],{"class":62},[31,8379,181],{"class":37},[31,8381,184],{"class":37},[31,8383,187],{"class":174},[31,8385,108],{"class":62},[31,8387,8388],{"class":33,"line":192},[31,8389,81],{"class":62},[31,8391,8392,8394,8396,8398],{"class":33,"line":197},[31,8393,200],{"class":58},[31,8395,72],{"class":62},[31,8397,205],{"class":58},[31,8399,208],{"class":62},[31,8401,8402],{"class":33,"line":211},[31,8403,49],{"emptyLinePlaceholder":48},[31,8405,8406,8408,8410,8412,8414,8416,8418,8420,8422,8425],{"class":33,"line":216},[31,8407,200],{"class":58},[31,8409,72],{"class":62},[31,8411,223],{"class":58},[31,8413,102],{"class":62},[31,8415,228],{"class":58},[31,8417,72],{"class":62},[31,8419,233],{"class":58},[31,8421,236],{"class":62},[31,8423,8424],{"class":58},"ProgressActionClient",[31,8426,242],{"class":62},[31,8428,8429],{"class":33,"line":245},[31,8430,49],{"emptyLinePlaceholder":48},[31,8432,8433,8435,8437,8439],{"class":33,"line":250},[31,8434,200],{"class":58},[31,8436,72],{"class":62},[31,8438,257],{"class":58},[31,8440,260],{"class":62},[31,8442,8443,8445,8447],{"class":33,"line":263},[31,8444,266],{"class":37},[31,8446,269],{"class":125},[31,8448,272],{"class":62},[31,8450,8451],{"class":33,"line":275},[31,8452,278],{"class":62},[14,8454,8455],{},[17,8456],{"alt":19,"src":8457},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage643.webp",[14,8459,8460],{},[17,8461],{"alt":19,"src":8462},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage644.webp",[14,8464,8465],{},[17,8466],{"alt":19,"src":8467},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage645.webp",[14,8469,8470],{},[17,8471],{"alt":19,"src":8472},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage646.webp",[560,8474],{},[14,8476,8477],{},[17,8478],{"alt":19,"src":8479},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage647.webp",[14,8481,8482],{},[17,8483],{"alt":19,"src":8484},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage648.webp",[14,8486,8487],{},[17,8488],{"alt":19,"src":8489},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage649.webp",[14,8491,8492],{},"有俩模板，我们只需要设置action就行了，就是我们的动作接口类型。",[14,8494,8495],{},"第一个参数是node，在class里就用this指针，",[14,8497,8498],{},"第二个参数是话题，字符串，",[14,8500,8501],{},"第三个参数是回调函数用来处理目标值的，",[14,8503,8504],{},"第四个参数是回调函数用来处理取消请求的，",[14,8506,8507],{},"第五个参数是接收目标值之后，该回调函数生成连续反馈，",[14,8509,8510],{},"第六、第七个参数有默认值，先不管，",[14,8512,8513],{},"返回值是action智能指针。",[14,8515,8516],{},[17,8517],{"alt":19,"src":8518},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage650.webp",[14,8520,8521],{},[17,8522],{"alt":19,"src":8523},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage651.webp",[14,8525,8526],{},[17,8527],{"alt":19,"src":8528},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage652.webp",[14,8530,8531],{},[17,8532],{"alt":19,"src":8533},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage653.webp",[14,8535,8536],{},[17,8537],{"alt":19,"src":8538},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage654.webp",[14,8540,8541],{},[17,8542],{"alt":19,"src":8543},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage655.webp",[14,8545,8546],{},"Goal_callback解析：",[14,8548,8549],{},"第一个参数是GoalUUID，",[14,8551,8552],{},"第二个参数是我们动作接口下的Goal，",[14,8554,8555],{},"返回值是goalresponse，用的命名空间是rclcpp_action，底下封装了3个常量，",[14,8557,8558],{},"第一个是接收并马上执行，",[14,8560,8561],{},"第二个是接收并推迟执行，",[14,8563,8564],{},"第三个是拒绝。",[14,8566,8567],{},[17,8568],{"alt":19,"src":8569},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage656.webp",[14,8571,8572],{},[17,8573],{"alt":19,"src":8574},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage657.webp",[14,8576,8577],{},[17,8578],{"alt":19,"src":8579},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage658.webp",[14,8581,8582],{},[17,8583],{"alt":19,"src":8584},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage659.webp",[14,8586,8587],{},[17,8588],{"alt":19,"src":8589},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage660.webp",[14,8591,8592],{},"报错原因是没加占位符",[14,8594,8595],{},[17,8596],{"alt":19,"src":8597},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage661.webp",[14,8599,8600],{},[17,8601],{"alt":19,"src":8602},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage662.webp",[22,8604,8606],{"className":24,"code":8605,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n      \u002F*\n      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n      NodeT>(NodeT node,\n      const std::string &name,\n      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n      *\u002F\n      server_ = rclcpp_action::create_server\u003CProgress>(\n        this,\n        \"get_sum_topic\",\n        std::bind(&ProgressActionServer::handle_goal_callback,this,_1,_2),\n        std::bind(&ProgressActionServer::handle_cancel_callback,this,_1),\n        std::bind(&ProgressActionServer::handle_accepted_callback,this,_1)\n        );\n    }\n    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n    rclcpp_action::GoalResponse handle_goal_callback(const rclcpp_action::GoalUUID &, std::shared_ptr\u003Cconst Progress::Goal>)\n    {\n\n      return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE;\n    }\n\n    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    rclcpp_action::CancelResponse handle_cancel_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n\n      return rclcpp_action::CancelResponse::ACCEPT;\n    }\n\n    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    void handle_accepted_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n    }\n\n  private:\n    rclcpp_action::Server\u003CProgress>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,8607,8608,8614,8621,8628,8632,8646,8659,8672,8676,8692,8696,8700,8714,8718,8736,8740,8745,8750,8755,8760,8765,8770,8775,8780,8784,8806,8813,8820,8843,8865,8887,8892,8896,8901,8951,8955,8959,8972,8976,8980,8985,9027,9031,9035,9048,9052,9056,9061,9094,9098,9102,9106,9110,9125,9129,9133,9155,9159,9169,9173,9195,9199,9209,9217],{"__ignoreMap":19},[31,8609,8610,8612],{"class":33,"line":34},[31,8611,38],{"class":37},[31,8613,42],{"class":41},[31,8615,8616,8618],{"class":33,"line":45},[31,8617,38],{"class":37},[31,8619,8620],{"class":41}," \"rclcpp_action\u002Frclcpp_action.hpp\"\n",[31,8622,8623,8625],{"class":33,"line":52},[31,8624,38],{"class":37},[31,8626,8627],{"class":41}," \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n",[31,8629,8630],{"class":33,"line":78},[31,8631,49],{"emptyLinePlaceholder":48},[31,8633,8634,8636,8638,8640,8643],{"class":33,"line":84},[31,8635,1263],{"class":37},[31,8637,3564],{"class":58},[31,8639,72],{"class":62},[31,8641,8642],{"class":58},"action",[31,8644,8645],{"class":62},"::Progress;\n",[31,8647,8648,8650,8652,8654,8656],{"class":33,"line":90},[31,8649,1263],{"class":37},[31,8651,1269],{"class":58},[31,8653,72],{"class":62},[31,8655,2226],{"class":58},[31,8657,8658],{"class":62},"::_1;\n",[31,8660,8661,8663,8665,8667,8669],{"class":33,"line":111},[31,8662,1263],{"class":37},[31,8664,1269],{"class":58},[31,8666,72],{"class":62},[31,8668,2226],{"class":58},[31,8670,8671],{"class":62},"::_2;\n",[31,8673,8674],{"class":33,"line":117},[31,8675,49],{"emptyLinePlaceholder":48},[31,8677,8678,8680,8682,8684,8686,8688,8690],{"class":33,"line":144},[31,8679,55],{"class":37},[31,8681,8110],{"class":58},[31,8683,63],{"class":62},[31,8685,66],{"class":37},[31,8687,69],{"class":58},[31,8689,72],{"class":62},[31,8691,75],{"class":58},[31,8693,8694],{"class":33,"line":150},[31,8695,81],{"class":62},[31,8697,8698],{"class":33,"line":156},[31,8699,87],{"class":37},[31,8701,8702,8704,8706,8708,8710,8712],{"class":33,"line":161},[31,8703,8133],{"class":58},[31,8705,96],{"class":62},[31,8707,99],{"class":58},[31,8709,102],{"class":62},[31,8711,8142],{"class":41},[31,8713,108],{"class":62},[31,8715,8716],{"class":33,"line":192},[31,8717,114],{"class":62},[31,8719,8720,8722,8724,8726,8728,8730,8732,8734],{"class":33,"line":197},[31,8721,120],{"class":58},[31,8723,102],{"class":62},[31,8725,126],{"class":125},[31,8727,129],{"class":62},[31,8729,132],{"class":58},[31,8731,135],{"class":62},[31,8733,8165],{"class":41},[31,8735,141],{"class":62},[31,8737,8738],{"class":33,"line":211},[31,8739,7445],{"class":4828},[31,8741,8742],{"class":33,"line":216},[31,8743,8744],{"class":4828},"      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n",[31,8746,8747],{"class":33,"line":245},[31,8748,8749],{"class":4828},"      NodeT>(NodeT node,\n",[31,8751,8752],{"class":33,"line":250},[31,8753,8754],{"class":4828},"      const std::string &name,\n",[31,8756,8757],{"class":33,"line":263},[31,8758,8759],{"class":4828},"      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n",[31,8761,8762],{"class":33,"line":275},[31,8763,8764],{"class":4828},"      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n",[31,8766,8767],{"class":33,"line":494},[31,8768,8769],{"class":4828},"      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n",[31,8771,8772],{"class":33,"line":501},[31,8773,8774],{"class":4828},"      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n",[31,8776,8777],{"class":33,"line":509},[31,8778,8779],{"class":4828},"      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n",[31,8781,8782],{"class":33,"line":517},[31,8783,7460],{"class":4828},[31,8785,8786,8788,8790,8793,8795,8798,8800,8803],{"class":33,"line":523},[31,8787,5099],{"class":62},[31,8789,1359],{"class":37},[31,8791,8792],{"class":58}," rclcpp_action",[31,8794,72],{"class":62},[31,8796,8797],{"class":58},"create_server",[31,8799,236],{"class":62},[31,8801,8802],{"class":58},"Progress",[31,8804,8805],{"class":62},">(\n",[31,8807,8808,8811],{"class":33,"line":529},[31,8809,8810],{"class":125},"        this",[31,8812,343],{"class":62},[31,8814,8815,8818],{"class":33,"line":540},[31,8816,8817],{"class":41},"        \"get_sum_topic\"",[31,8819,343],{"class":62},[31,8821,8822,8825,8827,8829,8831,8833,8835,8838,8840],{"class":33,"line":546},[31,8823,8824],{"class":58},"        std",[31,8826,72],{"class":62},[31,8828,1425],{"class":58},[31,8830,102],{"class":62},[31,8832,1430],{"class":37},[31,8834,8240],{"class":58},[31,8836,8837],{"class":62},"::handle_goal_callback,",[31,8839,126],{"class":125},[31,8841,8842],{"class":62},",_1,_2),\n",[31,8844,8845,8847,8849,8851,8853,8855,8857,8860,8862],{"class":33,"line":1640},[31,8846,8824],{"class":58},[31,8848,72],{"class":62},[31,8850,1425],{"class":58},[31,8852,102],{"class":62},[31,8854,1430],{"class":37},[31,8856,8240],{"class":58},[31,8858,8859],{"class":62},"::handle_cancel_callback,",[31,8861,126],{"class":125},[31,8863,8864],{"class":62},",_1),\n",[31,8866,8867,8869,8871,8873,8875,8877,8879,8882,8884],{"class":33,"line":1645},[31,8868,8824],{"class":58},[31,8870,72],{"class":62},[31,8872,1425],{"class":58},[31,8874,102],{"class":62},[31,8876,1430],{"class":37},[31,8878,8240],{"class":58},[31,8880,8881],{"class":62},"::handle_accepted_callback,",[31,8883,126],{"class":125},[31,8885,8886],{"class":62},",_1)\n",[31,8888,8889],{"class":33,"line":1656},[31,8890,8891],{"class":62},"        );\n",[31,8893,8894],{"class":33,"line":1661},[31,8895,147],{"class":62},[31,8897,8898],{"class":33,"line":1684},[31,8899,8900],{"class":4828},"    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n",[31,8902,8903,8906,8908,8911,8914,8916,8918,8920,8922,8925,8927,8929,8931,8933,8936,8938,8940,8943,8945,8948],{"class":33,"line":1689},[31,8904,8905],{"class":58},"    rclcpp_action",[31,8907,72],{"class":62},[31,8909,8910],{"class":58},"GoalResponse",[31,8912,8913],{"class":58}," handle_goal_callback",[31,8915,102],{"class":62},[31,8917,2254],{"class":37},[31,8919,8792],{"class":58},[31,8921,72],{"class":62},[31,8923,8924],{"class":58},"GoalUUID",[31,8926,2267],{"class":37},[31,8928,178],{"class":62},[31,8930,228],{"class":58},[31,8932,72],{"class":62},[31,8934,8935],{"class":58},"shared_ptr",[31,8937,236],{"class":62},[31,8939,2254],{"class":37},[31,8941,8942],{"class":58}," Progress",[31,8944,72],{"class":62},[31,8946,8947],{"class":58},"Goal",[31,8949,8950],{"class":62},">)\n",[31,8952,8953],{"class":33,"line":1700},[31,8954,114],{"class":62},[31,8956,8957],{"class":33,"line":1709},[31,8958,49],{"emptyLinePlaceholder":48},[31,8960,8961,8963,8965,8967,8969],{"class":33,"line":3790},[31,8962,6733],{"class":37},[31,8964,8792],{"class":58},[31,8966,72],{"class":62},[31,8968,8910],{"class":58},[31,8970,8971],{"class":62},"::ACCEPT_AND_EXECUTE;\n",[31,8973,8974],{"class":33,"line":3801},[31,8975,147],{"class":62},[31,8977,8978],{"class":33,"line":3810},[31,8979,49],{"emptyLinePlaceholder":48},[31,8981,8982],{"class":33,"line":6840},[31,8983,8984],{"class":4828},"    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[31,8986,8987,8989,8991,8994,8997,8999,9001,9003,9005,9007,9010,9012,9015,9017,9019,9022,9025],{"class":33,"line":6849},[31,8988,8905],{"class":58},[31,8990,72],{"class":62},[31,8992,8993],{"class":58},"CancelResponse",[31,8995,8996],{"class":58}," handle_cancel_callback",[31,8998,102],{"class":62},[31,9000,228],{"class":58},[31,9002,72],{"class":62},[31,9004,8935],{"class":58},[31,9006,236],{"class":62},[31,9008,9009],{"class":58},"rclcpp_action",[31,9011,72],{"class":62},[31,9013,9014],{"class":58},"ServerGoalHandle",[31,9016,236],{"class":62},[31,9018,8802],{"class":58},[31,9020,9021],{"class":62},">> ",[31,9023,9024],{"class":174},"goal_handle",[31,9026,108],{"class":62},[31,9028,9029],{"class":33,"line":6854},[31,9030,114],{"class":62},[31,9032,9033],{"class":33,"line":6865},[31,9034,49],{"emptyLinePlaceholder":48},[31,9036,9037,9039,9041,9043,9045],{"class":33,"line":6870},[31,9038,6733],{"class":37},[31,9040,8792],{"class":58},[31,9042,72],{"class":62},[31,9044,8993],{"class":58},[31,9046,9047],{"class":62},"::ACCEPT;\n",[31,9049,9050],{"class":33,"line":6891},[31,9051,147],{"class":62},[31,9053,9054],{"class":33,"line":6896},[31,9055,49],{"emptyLinePlaceholder":48},[31,9057,9058],{"class":33,"line":6915},[31,9059,9060],{"class":4828},"    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[31,9062,9063,9065,9068,9070,9072,9074,9076,9078,9080,9082,9084,9086,9088,9090,9092],{"class":33,"line":6920},[31,9064,1454],{"class":37},[31,9066,9067],{"class":58}," handle_accepted_callback",[31,9069,102],{"class":62},[31,9071,228],{"class":58},[31,9073,72],{"class":62},[31,9075,8935],{"class":58},[31,9077,236],{"class":62},[31,9079,9009],{"class":58},[31,9081,72],{"class":62},[31,9083,9014],{"class":58},[31,9085,236],{"class":62},[31,9087,8802],{"class":58},[31,9089,9021],{"class":62},[31,9091,9024],{"class":174},[31,9093,108],{"class":62},[31,9095,9096],{"class":33,"line":6934},[31,9097,114],{"class":62},[31,9099,9100],{"class":33,"line":6939},[31,9101,147],{"class":62},[31,9103,9104],{"class":33,"line":6963},[31,9105,49],{"emptyLinePlaceholder":48},[31,9107,9108],{"class":33,"line":6972},[31,9109,1449],{"class":37},[31,9111,9112,9114,9116,9119,9121,9123],{"class":33,"line":6977},[31,9113,8905],{"class":58},[31,9115,72],{"class":62},[31,9117,9118],{"class":58},"Server",[31,9120,236],{"class":62},[31,9122,8802],{"class":58},[31,9124,5309],{"class":62},[31,9126,9127],{"class":33,"line":6982},[31,9128,153],{"class":62},[31,9130,9131],{"class":33,"line":6993},[31,9132,49],{"emptyLinePlaceholder":48},[31,9134,9135,9137,9139,9141,9143,9145,9147,9149,9151,9153],{"class":33,"line":7002},[31,9136,164],{"class":37},[31,9138,167],{"class":58},[31,9140,102],{"class":62},[31,9142,164],{"class":37},[31,9144,175],{"class":174},[31,9146,178],{"class":62},[31,9148,181],{"class":37},[31,9150,184],{"class":37},[31,9152,187],{"class":174},[31,9154,108],{"class":62},[31,9156,9157],{"class":33,"line":7663},[31,9158,81],{"class":62},[31,9160,9161,9163,9165,9167],{"class":33,"line":7668},[31,9162,200],{"class":58},[31,9164,72],{"class":62},[31,9166,205],{"class":58},[31,9168,208],{"class":62},[31,9170,9171],{"class":33,"line":7683},[31,9172,49],{"emptyLinePlaceholder":48},[31,9174,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193],{"class":33,"line":7688},[31,9176,200],{"class":58},[31,9178,72],{"class":62},[31,9180,223],{"class":58},[31,9182,102],{"class":62},[31,9184,228],{"class":58},[31,9186,72],{"class":62},[31,9188,233],{"class":58},[31,9190,236],{"class":62},[31,9192,8240],{"class":58},[31,9194,242],{"class":62},[31,9196,9197],{"class":33,"line":7701},[31,9198,49],{"emptyLinePlaceholder":48},[31,9200,9201,9203,9205,9207],{"class":33,"line":7706},[31,9202,200],{"class":58},[31,9204,72],{"class":62},[31,9206,257],{"class":58},[31,9208,260],{"class":62},[31,9210,9211,9213,9215],{"class":33,"line":7729},[31,9212,266],{"class":37},[31,9214,269],{"class":125},[31,9216,272],{"class":62},[31,9218,9219],{"class":33,"line":7738},[31,9220,278],{"class":62},[14,9222,9223],{},[17,9224],{"alt":19,"src":9225},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage663.webp",[14,9227,9228],{},[17,9229],{"alt":19,"src":9230},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage664.webp",[14,9232,9233],{},[17,9234],{"alt":19,"src":9235},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage665.webp",[14,9237,9238],{},[17,9239],{"alt":19,"src":9240},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage666.webp",[22,9242,9244],{"className":1725,"code":9243,"language":1727,"meta":19,"style":19},"ros2 action send_goal \u002Fget_sum_topic base_interfaces_demo\u002Faction\u002FProgress -f \"{'num': 10}\"\n",[28,9245,9246],{"__ignoreMap":19},[31,9247,9248,9250,9253,9256,9259,9262,9265],{"class":33,"line":34},[31,9249,1734],{"class":58},[31,9251,9252],{"class":41}," action",[31,9254,9255],{"class":41}," send_goal",[31,9257,9258],{"class":41}," \u002Fget_sum_topic",[31,9260,9261],{"class":41}," base_interfaces_demo\u002Faction\u002FProgress",[31,9263,9264],{"class":125}," -f",[31,9266,9267],{"class":41}," \"{'num': 10}\"\n",[14,9269,9270],{},"ros2 action send_goal \u002F话题名称 + 接口类型 + -f + 参数",[14,9272,9273],{},"-f是连续反馈，就是可以获取连续反馈。",[14,9275,9276],{},[17,9277],{"alt":19,"src":9278},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage667.webp",[14,9280,9281],{},"发送目标值为10",[14,9283,9284],{},"然后为我们客户端设置了一个ID，因为可能有多个客户端都访问这个服务端，所以我们要给每个客户端都设置一个唯一的ID",[14,9286,9287],{},"然后结果是0",[14,9289,9290],{},"因为我们程序暂时啥都还没写。",[560,9292],{},[14,9294,9295],{},[17,9296],{"alt":19,"src":9297},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage668.webp",[14,9299,9300],{},"uuid就是客户端ID，在此时没有使用，那就用(void)uuid，因为如果不用，编译器可能报警告。",[14,9302,9303],{},[17,9304],{"alt":19,"src":9305},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage669.webp",[14,9307,9308],{},[17,9309],{"alt":19,"src":9310},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage670.webp",[14,9312,9313],{},[17,9314],{"alt":19,"src":9315},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage671.webp",[14,9317,9318],{},[17,9319],{"alt":19,"src":9320},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage672.webp",[14,9322,9323],{},[17,9324],{"alt":19,"src":9325},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage673.webp",[560,9327],{},[14,9329,9330],{},"我们的这个任务是可以正常被取消的，所以直接return accept就可以，根据不同任务需求来在函数里做不同的事。",[14,9332,9333],{},[17,9334],{"alt":19,"src":9335},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage674.webp",[14,9337,9338],{},[17,9339],{"alt":19,"src":9340},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage675.webp",[560,9342],{},[14,9344,9345],{},"因为我们的连续反馈和最终响应的生成是耗时操作，为了避免主逻辑出现阻塞，建议单独再开一个线程。",[14,9347,9348],{},[17,9349],{"alt":19,"src":9350},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage676.webp",[14,9352,9353],{},[17,9354],{"alt":19,"src":9355},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage677.webp",[14,9357,9358],{},[17,9359],{"alt":19,"src":9360},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage678.webp",[14,9362,9363],{},[17,9364],{"alt":19,"src":9365},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage679.webp",[14,9367,9368],{},[17,9369],{"alt":19,"src":9370},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage680.webp",[14,9372,9373],{},"生成连续反馈的API，需要传参，传入的参数就是Progress里的Feedback对象。",[14,9375,9376],{},[17,9377],{"alt":19,"src":9378},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage681.webp",[14,9380,9381],{},"get_goal()可以获取目标值",[14,9383,9384],{},[17,9385],{"alt":19,"src":9386},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage682.webp",[14,9388,9389],{},[17,9390],{"alt":19,"src":9391},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage683.webp",[14,9393,9394],{},"因为这是个耗时操作，为了看出效果来，所以咱们每次循环的时候都给设置一下休眠。",[14,9396,9397],{},[17,9398],{"alt":19,"src":9399},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage684.webp",[14,9401,9402],{},"1.0是指1Hz，也就是每隔1秒执行一次。",[14,9404,9405],{},[17,9406],{"alt":19,"src":9407},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage685.webp",[14,9409,9410],{},"因为1Hz，所以我们这个rate.sleep()每次都会休眠1秒钟;",[14,9412,9413],{},[17,9414],{"alt":19,"src":9415},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage686.webp",[14,9417,9418],{},"生成最终结果的API，需要传参，传入的参数就是Progress里的Result对象。",[14,9420,9421],{},[17,9422],{"alt":19,"src":9423},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage687.webp",[14,9425,9426],{},"ok()函数的返回值：如果正常运行，则返回true，如果不正常运行则返回false",[14,9428,9429],{},[17,9430],{"alt":19,"src":9431},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage688.webp",[14,9433,9434],{},[17,9435],{"alt":19,"src":9436},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage689.webp",[14,9438,9439],{},[17,9440],{"alt":19,"src":9441},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage690.webp",[14,9443,9444],{},[17,9445],{"alt":19,"src":9446},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage691.webp",[14,9448,9449],{},[17,9450],{"alt":19,"src":9451},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage692.webp",[14,9453,9454],{},[17,9455],{"alt":19,"src":9456},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage693.webp",[14,9458,9459],{},[17,9460],{"alt":19,"src":9461},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage694.webp",[14,9463,9464],{},[17,9465],{"alt":19,"src":9466},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage695.webp",[14,9468,9469],{},[17,9470],{"alt":19,"src":9471},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage696.webp",[14,9473,9474],{},[17,9475],{"alt":19,"src":9476},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage697.webp",[560,9478],{},[14,9480,9481],{},"bug：当我们终止客户端之后，服务端没有停止运行。服务端要一直执行到程序结束。",[14,9483,9484],{},[17,9485],{"alt":19,"src":9486},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage698.webp",[14,9488,9489],{},"bug解决思路：",[14,9491,9492],{},"接收到取消请求后，就是中断我的主逻辑，也就是execute_callback被关闭，",[14,9494,9495],{},[17,9496],{"alt":19,"src":9497},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage699.webp",[14,9499,9500],{},"这个函数返回值是布尔值，如果接收到了取消请求就返回true，否则返回false，",[14,9502,9503],{},[17,9504],{"alt":19,"src":9505},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage700.webp",[14,9507,9508],{},"我们取消之后，其实仍然可以向客户端反应最终的结果，用canceled函数，",[14,9510,9511],{},[17,9512],{"alt":19,"src":9513},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage701.webp",[14,9515,9516],{},[17,9517],{"alt":19,"src":9518},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage702.webp",[14,9520,9521],{},[17,9522],{"alt":19,"src":9523},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage703.webp",[14,9525,9526],{},"要把定义result放在前面。",[14,9528,9529],{},[17,9530],{"alt":19,"src":9531},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage704.webp",[14,9533,9534],{},[17,9535],{"alt":19,"src":9536},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage705.webp",[14,9538,9539],{},[17,9540],{"alt":19,"src":9541},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage706.webp",[22,9543,9545],{"className":24,"code":9544,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n      \u002F*\n      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n      NodeT>(NodeT node,\n      const std::string &name,\n      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n      *\u002F\n      server_ = rclcpp_action::create_server\u003CProgress>(\n        this,\n        \"get_sum_topic\",\n        std::bind(&ProgressActionServer::handle_goal_callback,this,_1,_2),\n        std::bind(&ProgressActionServer::handle_cancel_callback,this,_1),\n        std::bind(&ProgressActionServer::handle_accepted_callback,this,_1)\n        );\n    }\n\n    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n    rclcpp_action::GoalResponse handle_goal_callback(const rclcpp_action::GoalUUID &uuid, std::shared_ptr\u003Cconst Progress::Goal> goal)\n    {\n      (void)uuid;\n      if(goal->num \u003C= 1)\n      {\n        RCLCPP_INFO(this->get_logger(),\"提交的目标值必须大于1!\");\n        return rclcpp_action::GoalResponse::REJECT;\n      }\n      RCLCPP_INFO(this->get_logger(),\"提交的目标值合法!\");\n      return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE;\n    }\n\n    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    rclcpp_action::CancelResponse handle_cancel_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      (void)goal_handle;\n      RCLCPP_INFO(this->get_logger(),\"接收到任务取消请求!\");\n      return rclcpp_action::CancelResponse::ACCEPT;\n    }\n\n    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    void execute_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      \u002F\u002Fvoid publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n      \u002F\u002Fgoal_handle->publish_feedback();\n      int num = goal_handle->get_goal()->num;\n      int sum = 0;\n      auto feedback = std::make_sharedautolinkProgress::Feedbackautolink();\n      auto result = std::make_sharedautolinkProgress::Resultautolink();\n      rclcpp::Rate rate(1.0);\n      for (int32_t i = 1; i \u003C= num; i++)\n      {\n        sum += i;\n        double progress = i \u002F (double)num;\n        feedback->progress = progress;\n\n        goal_handle->publish_feedback(feedback);\n        RCLCPP_INFO(this->get_logger(),\"连续反馈中，当前进度为:%.2f\",progress);\n\n        if(goal_handle->is_canceling() == true)\n        {\n          result->sum = sum;\n          goal_handle->canceled(result);\n          RCLCPP_INFO(this->get_logger(),\"任务被取消了!\");\n          return;\n        }\n\n        rate.sleep();\n      }\n\n      \u002F\u002Fvoid succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n      \u002F\u002Fgoal_handle->succeed();\n\n      if(rclcpp::ok() == true)\n      {\n        result->sum = sum;\n        goal_handle->succeed(result);\n        RCLCPP_INFO(this->get_logger(),\"最终响应结果为:%d\",sum);\n      }\n\n    }\n\n    void handle_accepted_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      std::thread(std::bind(&ProgressActionServer::execute_callback,this,goal_handle)).detach();\n    }\n\n  private:\n    rclcpp_action::Server\u003CProgress>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,9546,9547,9553,9559,9565,9569,9581,9593,9605,9609,9625,9629,9633,9647,9651,9669,9673,9677,9681,9685,9689,9693,9697,9701,9705,9709,9727,9733,9739,9759,9779,9799,9803,9807,9811,9815,9866,9870,9881,9896,9900,9919,9933,9937,9956,9968,9972,9976,9980,10016,10020,10029,10048,10060,10064,10068,10072,10105,10109,10114,10119,10138,10151,10174,10196,10214,10242,10246,10257,10280,10290,10294,10305,10329,10333,10351,10355,10365,10376,10395,10402,10407,10412,10423,10428,10433,10439,10445,10450,10471,10476,10486,10496,10521,10526,10531,10536,10541,10574,10579,10617,10622,10627,10632,10647,10652,10657,10680,10685,10696,10701,10724,10729,10740,10749],{"__ignoreMap":19},[31,9548,9549,9551],{"class":33,"line":34},[31,9550,38],{"class":37},[31,9552,42],{"class":41},[31,9554,9555,9557],{"class":33,"line":45},[31,9556,38],{"class":37},[31,9558,8620],{"class":41},[31,9560,9561,9563],{"class":33,"line":52},[31,9562,38],{"class":37},[31,9564,8627],{"class":41},[31,9566,9567],{"class":33,"line":78},[31,9568,49],{"emptyLinePlaceholder":48},[31,9570,9571,9573,9575,9577,9579],{"class":33,"line":84},[31,9572,1263],{"class":37},[31,9574,3564],{"class":58},[31,9576,72],{"class":62},[31,9578,8642],{"class":58},[31,9580,8645],{"class":62},[31,9582,9583,9585,9587,9589,9591],{"class":33,"line":90},[31,9584,1263],{"class":37},[31,9586,1269],{"class":58},[31,9588,72],{"class":62},[31,9590,2226],{"class":58},[31,9592,8658],{"class":62},[31,9594,9595,9597,9599,9601,9603],{"class":33,"line":111},[31,9596,1263],{"class":37},[31,9598,1269],{"class":58},[31,9600,72],{"class":62},[31,9602,2226],{"class":58},[31,9604,8671],{"class":62},[31,9606,9607],{"class":33,"line":117},[31,9608,49],{"emptyLinePlaceholder":48},[31,9610,9611,9613,9615,9617,9619,9621,9623],{"class":33,"line":144},[31,9612,55],{"class":37},[31,9614,8110],{"class":58},[31,9616,63],{"class":62},[31,9618,66],{"class":37},[31,9620,69],{"class":58},[31,9622,72],{"class":62},[31,9624,75],{"class":58},[31,9626,9627],{"class":33,"line":150},[31,9628,81],{"class":62},[31,9630,9631],{"class":33,"line":156},[31,9632,87],{"class":37},[31,9634,9635,9637,9639,9641,9643,9645],{"class":33,"line":161},[31,9636,8133],{"class":58},[31,9638,96],{"class":62},[31,9640,99],{"class":58},[31,9642,102],{"class":62},[31,9644,8142],{"class":41},[31,9646,108],{"class":62},[31,9648,9649],{"class":33,"line":192},[31,9650,114],{"class":62},[31,9652,9653,9655,9657,9659,9661,9663,9665,9667],{"class":33,"line":197},[31,9654,120],{"class":58},[31,9656,102],{"class":62},[31,9658,126],{"class":125},[31,9660,129],{"class":62},[31,9662,132],{"class":58},[31,9664,135],{"class":62},[31,9666,8165],{"class":41},[31,9668,141],{"class":62},[31,9670,9671],{"class":33,"line":211},[31,9672,7445],{"class":4828},[31,9674,9675],{"class":33,"line":216},[31,9676,8744],{"class":4828},[31,9678,9679],{"class":33,"line":245},[31,9680,8749],{"class":4828},[31,9682,9683],{"class":33,"line":250},[31,9684,8754],{"class":4828},[31,9686,9687],{"class":33,"line":263},[31,9688,8759],{"class":4828},[31,9690,9691],{"class":33,"line":275},[31,9692,8764],{"class":4828},[31,9694,9695],{"class":33,"line":494},[31,9696,8769],{"class":4828},[31,9698,9699],{"class":33,"line":501},[31,9700,8774],{"class":4828},[31,9702,9703],{"class":33,"line":509},[31,9704,8779],{"class":4828},[31,9706,9707],{"class":33,"line":517},[31,9708,7460],{"class":4828},[31,9710,9711,9713,9715,9717,9719,9721,9723,9725],{"class":33,"line":523},[31,9712,5099],{"class":62},[31,9714,1359],{"class":37},[31,9716,8792],{"class":58},[31,9718,72],{"class":62},[31,9720,8797],{"class":58},[31,9722,236],{"class":62},[31,9724,8802],{"class":58},[31,9726,8805],{"class":62},[31,9728,9729,9731],{"class":33,"line":529},[31,9730,8810],{"class":125},[31,9732,343],{"class":62},[31,9734,9735,9737],{"class":33,"line":540},[31,9736,8817],{"class":41},[31,9738,343],{"class":62},[31,9740,9741,9743,9745,9747,9749,9751,9753,9755,9757],{"class":33,"line":546},[31,9742,8824],{"class":58},[31,9744,72],{"class":62},[31,9746,1425],{"class":58},[31,9748,102],{"class":62},[31,9750,1430],{"class":37},[31,9752,8240],{"class":58},[31,9754,8837],{"class":62},[31,9756,126],{"class":125},[31,9758,8842],{"class":62},[31,9760,9761,9763,9765,9767,9769,9771,9773,9775,9777],{"class":33,"line":1640},[31,9762,8824],{"class":58},[31,9764,72],{"class":62},[31,9766,1425],{"class":58},[31,9768,102],{"class":62},[31,9770,1430],{"class":37},[31,9772,8240],{"class":58},[31,9774,8859],{"class":62},[31,9776,126],{"class":125},[31,9778,8864],{"class":62},[31,9780,9781,9783,9785,9787,9789,9791,9793,9795,9797],{"class":33,"line":1645},[31,9782,8824],{"class":58},[31,9784,72],{"class":62},[31,9786,1425],{"class":58},[31,9788,102],{"class":62},[31,9790,1430],{"class":37},[31,9792,8240],{"class":58},[31,9794,8881],{"class":62},[31,9796,126],{"class":125},[31,9798,8886],{"class":62},[31,9800,9801],{"class":33,"line":1656},[31,9802,8891],{"class":62},[31,9804,9805],{"class":33,"line":1661},[31,9806,147],{"class":62},[31,9808,9809],{"class":33,"line":1684},[31,9810,49],{"emptyLinePlaceholder":48},[31,9812,9813],{"class":33,"line":1689},[31,9814,8900],{"class":4828},[31,9816,9817,9819,9821,9823,9825,9827,9829,9831,9833,9835,9837,9840,9842,9844,9846,9848,9850,9852,9854,9856,9858,9861,9864],{"class":33,"line":1700},[31,9818,8905],{"class":58},[31,9820,72],{"class":62},[31,9822,8910],{"class":58},[31,9824,8913],{"class":58},[31,9826,102],{"class":62},[31,9828,2254],{"class":37},[31,9830,8792],{"class":58},[31,9832,72],{"class":62},[31,9834,8924],{"class":58},[31,9836,2267],{"class":37},[31,9838,9839],{"class":174},"uuid",[31,9841,178],{"class":62},[31,9843,228],{"class":58},[31,9845,72],{"class":62},[31,9847,8935],{"class":58},[31,9849,236],{"class":62},[31,9851,2254],{"class":37},[31,9853,8942],{"class":58},[31,9855,72],{"class":62},[31,9857,8947],{"class":58},[31,9859,9860],{"class":62},"> ",[31,9862,9863],{"class":174},"goal",[31,9865,108],{"class":62},[31,9867,9868],{"class":33,"line":1709},[31,9869,114],{"class":62},[31,9871,9872,9875,9878],{"class":33,"line":3790},[31,9873,9874],{"class":62},"      (",[31,9876,9877],{"class":37},"void",[31,9879,9880],{"class":62},")uuid;\n",[31,9882,9883,9886,9889,9892,9894],{"class":33,"line":3801},[31,9884,9885],{"class":37},"      if",[31,9887,9888],{"class":62},"(goal->num ",[31,9890,9891],{"class":37},"\u003C=",[31,9893,5940],{"class":125},[31,9895,108],{"class":62},[31,9897,9898],{"class":33,"line":3810},[31,9899,6629],{"class":62},[31,9901,9902,9904,9906,9908,9910,9912,9914,9917],{"class":33,"line":6840},[31,9903,1869],{"class":58},[31,9905,102],{"class":62},[31,9907,126],{"class":125},[31,9909,129],{"class":62},[31,9911,132],{"class":58},[31,9913,135],{"class":62},[31,9915,9916],{"class":41},"\"提交的目标值必须大于1!\"",[31,9918,141],{"class":62},[31,9920,9921,9924,9926,9928,9930],{"class":33,"line":6849},[31,9922,9923],{"class":37},"        return",[31,9925,8792],{"class":58},[31,9927,72],{"class":62},[31,9929,8910],{"class":58},[31,9931,9932],{"class":62},"::REJECT;\n",[31,9934,9935],{"class":33,"line":6854},[31,9936,6728],{"class":62},[31,9938,9939,9941,9943,9945,9947,9949,9951,9954],{"class":33,"line":6865},[31,9940,120],{"class":58},[31,9942,102],{"class":62},[31,9944,126],{"class":125},[31,9946,129],{"class":62},[31,9948,132],{"class":58},[31,9950,135],{"class":62},[31,9952,9953],{"class":41},"\"提交的目标值合法!\"",[31,9955,141],{"class":62},[31,9957,9958,9960,9962,9964,9966],{"class":33,"line":6870},[31,9959,6733],{"class":37},[31,9961,8792],{"class":58},[31,9963,72],{"class":62},[31,9965,8910],{"class":58},[31,9967,8971],{"class":62},[31,9969,9970],{"class":33,"line":6891},[31,9971,147],{"class":62},[31,9973,9974],{"class":33,"line":6896},[31,9975,49],{"emptyLinePlaceholder":48},[31,9977,9978],{"class":33,"line":6915},[31,9979,8984],{"class":4828},[31,9981,9982,9984,9986,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008,10010,10012,10014],{"class":33,"line":6920},[31,9983,8905],{"class":58},[31,9985,72],{"class":62},[31,9987,8993],{"class":58},[31,9989,8996],{"class":58},[31,9991,102],{"class":62},[31,9993,228],{"class":58},[31,9995,72],{"class":62},[31,9997,8935],{"class":58},[31,9999,236],{"class":62},[31,10001,9009],{"class":58},[31,10003,72],{"class":62},[31,10005,9014],{"class":58},[31,10007,236],{"class":62},[31,10009,8802],{"class":58},[31,10011,9021],{"class":62},[31,10013,9024],{"class":174},[31,10015,108],{"class":62},[31,10017,10018],{"class":33,"line":6934},[31,10019,114],{"class":62},[31,10021,10022,10024,10026],{"class":33,"line":6939},[31,10023,9874],{"class":62},[31,10025,9877],{"class":37},[31,10027,10028],{"class":62},")goal_handle;\n",[31,10030,10031,10033,10035,10037,10039,10041,10043,10046],{"class":33,"line":6963},[31,10032,120],{"class":58},[31,10034,102],{"class":62},[31,10036,126],{"class":125},[31,10038,129],{"class":62},[31,10040,132],{"class":58},[31,10042,135],{"class":62},[31,10044,10045],{"class":41},"\"接收到任务取消请求!\"",[31,10047,141],{"class":62},[31,10049,10050,10052,10054,10056,10058],{"class":33,"line":6972},[31,10051,6733],{"class":37},[31,10053,8792],{"class":58},[31,10055,72],{"class":62},[31,10057,8993],{"class":58},[31,10059,9047],{"class":62},[31,10061,10062],{"class":33,"line":6977},[31,10063,147],{"class":62},[31,10065,10066],{"class":33,"line":6982},[31,10067,49],{"emptyLinePlaceholder":48},[31,10069,10070],{"class":33,"line":6993},[31,10071,9060],{"class":4828},[31,10073,10074,10076,10079,10081,10083,10085,10087,10089,10091,10093,10095,10097,10099,10101,10103],{"class":33,"line":7002},[31,10075,1454],{"class":37},[31,10077,10078],{"class":58}," execute_callback",[31,10080,102],{"class":62},[31,10082,228],{"class":58},[31,10084,72],{"class":62},[31,10086,8935],{"class":58},[31,10088,236],{"class":62},[31,10090,9009],{"class":58},[31,10092,72],{"class":62},[31,10094,9014],{"class":58},[31,10096,236],{"class":62},[31,10098,8802],{"class":58},[31,10100,9021],{"class":62},[31,10102,9024],{"class":174},[31,10104,108],{"class":62},[31,10106,10107],{"class":33,"line":7663},[31,10108,114],{"class":62},[31,10110,10111],{"class":33,"line":7668},[31,10112,10113],{"class":4828},"      \u002F\u002Fvoid publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n",[31,10115,10116],{"class":33,"line":7683},[31,10117,10118],{"class":4828},"      \u002F\u002Fgoal_handle->publish_feedback();\n",[31,10120,10121,10124,10127,10129,10132,10135],{"class":33,"line":7688},[31,10122,10123],{"class":37},"      int",[31,10125,10126],{"class":62}," num ",[31,10128,1359],{"class":37},[31,10130,10131],{"class":62}," goal_handle->",[31,10133,10134],{"class":58},"get_goal",[31,10136,10137],{"class":62},"()->num;\n",[31,10139,10140,10142,10145,10147,10149],{"class":33,"line":7701},[31,10141,10123],{"class":37},[31,10143,10144],{"class":62}," sum ",[31,10146,1359],{"class":37},[31,10148,269],{"class":125},[31,10150,272],{"class":62},[31,10152,10153,10155,10158,10160,10162,10164,10167,10169,10172],{"class":33,"line":7706},[31,10154,1469],{"class":37},[31,10156,10157],{"class":62}," feedback ",[31,10159,1359],{"class":37},[31,10161,1269],{"class":58},[31,10163,72],{"class":62},[31,10165,10166],{"class":58},"make_sharedautolinkProgress",[31,10168,72],{"class":62},[31,10170,10171],{"class":58},"Feedbackautolink",[31,10173,260],{"class":62},[31,10175,10176,10178,10181,10183,10185,10187,10189,10191,10194],{"class":33,"line":7729},[31,10177,1469],{"class":37},[31,10179,10180],{"class":62}," result ",[31,10182,1359],{"class":37},[31,10184,1269],{"class":58},[31,10186,72],{"class":62},[31,10188,10166],{"class":58},[31,10190,72],{"class":62},[31,10192,10193],{"class":58},"Resultautolink",[31,10195,260],{"class":62},[31,10197,10198,10201,10204,10207,10209,10212],{"class":33,"line":7738},[31,10199,10200],{"class":58},"      rclcpp",[31,10202,10203],{"class":62},"::Rate ",[31,10205,10206],{"class":58},"rate",[31,10208,102],{"class":62},[31,10210,10211],{"class":125},"1.0",[31,10213,141],{"class":62},[31,10215,10216,10219,10221,10223,10226,10228,10230,10233,10235,10238,10240],{"class":33,"line":7743},[31,10217,10218],{"class":37},"      for",[31,10220,5240],{"class":62},[31,10222,7424],{"class":37},[31,10224,10225],{"class":62}," i ",[31,10227,1359],{"class":37},[31,10229,5940],{"class":125},[31,10231,10232],{"class":62},"; i ",[31,10234,9891],{"class":37},[31,10236,10237],{"class":62}," num; i",[31,10239,1514],{"class":37},[31,10241,108],{"class":62},[31,10243,10244],{"class":33,"line":7780},[31,10245,6629],{"class":62},[31,10247,10248,10251,10254],{"class":33,"line":7785},[31,10249,10250],{"class":62},"        sum ",[31,10252,10253],{"class":37},"+=",[31,10255,10256],{"class":62}," i;\n",[31,10258,10259,10262,10265,10267,10269,10272,10274,10277],{"class":33,"line":7815},[31,10260,10261],{"class":37},"        double",[31,10263,10264],{"class":62}," progress ",[31,10266,1359],{"class":37},[31,10268,10225],{"class":62},[31,10270,10271],{"class":37},"\u002F",[31,10273,5240],{"class":62},[31,10275,10276],{"class":37},"double",[31,10278,10279],{"class":62},")num;\n",[31,10281,10282,10285,10287],{"class":33,"line":7820},[31,10283,10284],{"class":62},"        feedback->progress ",[31,10286,1359],{"class":37},[31,10288,10289],{"class":62}," progress;\n",[31,10291,10292],{"class":33,"line":7848},[31,10293,49],{"emptyLinePlaceholder":48},[31,10295,10296,10299,10302],{"class":33,"line":7853},[31,10297,10298],{"class":62},"        goal_handle->",[31,10300,10301],{"class":58},"publish_feedback",[31,10303,10304],{"class":62},"(feedback);\n",[31,10306,10307,10309,10311,10313,10315,10317,10319,10322,10324,10326],{"class":33,"line":7859},[31,10308,1869],{"class":58},[31,10310,102],{"class":62},[31,10312,126],{"class":125},[31,10314,129],{"class":62},[31,10316,132],{"class":58},[31,10318,135],{"class":62},[31,10320,10321],{"class":41},"\"连续反馈中，当前进度为:",[31,10323,3660],{"class":125},[31,10325,367],{"class":41},[31,10327,10328],{"class":62},",progress);\n",[31,10330,10331],{"class":33,"line":7864},[31,10332,49],{"emptyLinePlaceholder":48},[31,10334,10335,10337,10340,10343,10345,10347,10349],{"class":33,"line":7880},[31,10336,6661],{"class":37},[31,10338,10339],{"class":62},"(goal_handle->",[31,10341,10342],{"class":58},"is_canceling",[31,10344,6673],{"class":62},[31,10346,7802],{"class":37},[31,10348,6622],{"class":125},[31,10350,108],{"class":62},[31,10352,10353],{"class":33,"line":7885},[31,10354,6684],{"class":62},[31,10356,10357,10360,10362],{"class":33,"line":7890},[31,10358,10359],{"class":62},"          result->sum ",[31,10361,1359],{"class":37},[31,10363,10364],{"class":62}," sum;\n",[31,10366,10367,10370,10373],{"class":33,"line":7901},[31,10368,10369],{"class":62},"          goal_handle->",[31,10371,10372],{"class":58},"canceled",[31,10374,10375],{"class":62},"(result);\n",[31,10377,10378,10380,10382,10384,10386,10388,10390,10393],{"class":33,"line":7910},[31,10379,6689],{"class":58},[31,10381,102],{"class":62},[31,10383,126],{"class":125},[31,10385,129],{"class":62},[31,10387,132],{"class":58},[31,10389,135],{"class":62},[31,10391,10392],{"class":41},"\"任务被取消了!\"",[31,10394,141],{"class":62},[31,10396,10398,10400],{"class":33,"line":10397},79,[31,10399,6713],{"class":37},[31,10401,272],{"class":62},[31,10403,10405],{"class":33,"line":10404},80,[31,10406,6723],{"class":62},[31,10408,10410],{"class":33,"line":10409},81,[31,10411,49],{"emptyLinePlaceholder":48},[31,10413,10415,10418,10421],{"class":33,"line":10414},82,[31,10416,10417],{"class":62},"        rate.",[31,10419,10420],{"class":58},"sleep",[31,10422,260],{"class":62},[31,10424,10426],{"class":33,"line":10425},83,[31,10427,6728],{"class":62},[31,10429,10431],{"class":33,"line":10430},84,[31,10432,49],{"emptyLinePlaceholder":48},[31,10434,10436],{"class":33,"line":10435},85,[31,10437,10438],{"class":4828},"      \u002F\u002Fvoid succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n",[31,10440,10442],{"class":33,"line":10441},86,[31,10443,10444],{"class":4828},"      \u002F\u002Fgoal_handle->succeed();\n",[31,10446,10448],{"class":33,"line":10447},87,[31,10449,49],{"emptyLinePlaceholder":48},[31,10451,10453,10455,10457,10459,10461,10463,10465,10467,10469],{"class":33,"line":10452},88,[31,10454,9885],{"class":37},[31,10456,102],{"class":62},[31,10458,4086],{"class":58},[31,10460,72],{"class":62},[31,10462,6670],{"class":58},[31,10464,6673],{"class":62},[31,10466,7802],{"class":37},[31,10468,6622],{"class":125},[31,10470,108],{"class":62},[31,10472,10474],{"class":33,"line":10473},89,[31,10475,6629],{"class":62},[31,10477,10479,10482,10484],{"class":33,"line":10478},90,[31,10480,10481],{"class":62},"        result->sum ",[31,10483,1359],{"class":37},[31,10485,10364],{"class":62},[31,10487,10489,10491,10494],{"class":33,"line":10488},91,[31,10490,10298],{"class":62},[31,10492,10493],{"class":58},"succeed",[31,10495,10375],{"class":62},[31,10497,10499,10501,10503,10505,10507,10509,10511,10514,10516,10518],{"class":33,"line":10498},92,[31,10500,1869],{"class":58},[31,10502,102],{"class":62},[31,10504,126],{"class":125},[31,10506,129],{"class":62},[31,10508,132],{"class":58},[31,10510,135],{"class":62},[31,10512,10513],{"class":41},"\"最终响应结果为:",[31,10515,3655],{"class":125},[31,10517,367],{"class":41},[31,10519,10520],{"class":62},",sum);\n",[31,10522,10524],{"class":33,"line":10523},93,[31,10525,6728],{"class":62},[31,10527,10529],{"class":33,"line":10528},94,[31,10530,49],{"emptyLinePlaceholder":48},[31,10532,10534],{"class":33,"line":10533},95,[31,10535,147],{"class":62},[31,10537,10539],{"class":33,"line":10538},96,[31,10540,49],{"emptyLinePlaceholder":48},[31,10542,10544,10546,10548,10550,10552,10554,10556,10558,10560,10562,10564,10566,10568,10570,10572],{"class":33,"line":10543},97,[31,10545,1454],{"class":37},[31,10547,9067],{"class":58},[31,10549,102],{"class":62},[31,10551,228],{"class":58},[31,10553,72],{"class":62},[31,10555,8935],{"class":58},[31,10557,236],{"class":62},[31,10559,9009],{"class":58},[31,10561,72],{"class":62},[31,10563,9014],{"class":58},[31,10565,236],{"class":62},[31,10567,8802],{"class":58},[31,10569,9021],{"class":62},[31,10571,9024],{"class":174},[31,10573,108],{"class":62},[31,10575,10577],{"class":33,"line":10576},98,[31,10578,114],{"class":62},[31,10580,10582,10585,10587,10590,10592,10594,10596,10598,10600,10602,10604,10607,10609,10612,10615],{"class":33,"line":10581},99,[31,10583,10584],{"class":58},"      std",[31,10586,72],{"class":62},[31,10588,10589],{"class":58},"thread",[31,10591,102],{"class":62},[31,10593,228],{"class":58},[31,10595,72],{"class":62},[31,10597,1425],{"class":58},[31,10599,102],{"class":62},[31,10601,1430],{"class":37},[31,10603,8240],{"class":58},[31,10605,10606],{"class":62},"::execute_callback,",[31,10608,126],{"class":125},[31,10610,10611],{"class":62},",goal_handle)).",[31,10613,10614],{"class":58},"detach",[31,10616,260],{"class":62},[31,10618,10620],{"class":33,"line":10619},100,[31,10621,147],{"class":62},[31,10623,10625],{"class":33,"line":10624},101,[31,10626,49],{"emptyLinePlaceholder":48},[31,10628,10630],{"class":33,"line":10629},102,[31,10631,1449],{"class":37},[31,10633,10635,10637,10639,10641,10643,10645],{"class":33,"line":10634},103,[31,10636,8905],{"class":58},[31,10638,72],{"class":62},[31,10640,9118],{"class":58},[31,10642,236],{"class":62},[31,10644,8802],{"class":58},[31,10646,5309],{"class":62},[31,10648,10650],{"class":33,"line":10649},104,[31,10651,153],{"class":62},[31,10653,10655],{"class":33,"line":10654},105,[31,10656,49],{"emptyLinePlaceholder":48},[31,10658,10660,10662,10664,10666,10668,10670,10672,10674,10676,10678],{"class":33,"line":10659},106,[31,10661,164],{"class":37},[31,10663,167],{"class":58},[31,10665,102],{"class":62},[31,10667,164],{"class":37},[31,10669,175],{"class":174},[31,10671,178],{"class":62},[31,10673,181],{"class":37},[31,10675,184],{"class":37},[31,10677,187],{"class":174},[31,10679,108],{"class":62},[31,10681,10683],{"class":33,"line":10682},107,[31,10684,81],{"class":62},[31,10686,10688,10690,10692,10694],{"class":33,"line":10687},108,[31,10689,200],{"class":58},[31,10691,72],{"class":62},[31,10693,205],{"class":58},[31,10695,208],{"class":62},[31,10697,10699],{"class":33,"line":10698},109,[31,10700,49],{"emptyLinePlaceholder":48},[31,10702,10704,10706,10708,10710,10712,10714,10716,10718,10720,10722],{"class":33,"line":10703},110,[31,10705,200],{"class":58},[31,10707,72],{"class":62},[31,10709,223],{"class":58},[31,10711,102],{"class":62},[31,10713,228],{"class":58},[31,10715,72],{"class":62},[31,10717,233],{"class":58},[31,10719,236],{"class":62},[31,10721,8240],{"class":58},[31,10723,242],{"class":62},[31,10725,10727],{"class":33,"line":10726},111,[31,10728,49],{"emptyLinePlaceholder":48},[31,10730,10732,10734,10736,10738],{"class":33,"line":10731},112,[31,10733,200],{"class":58},[31,10735,72],{"class":62},[31,10737,257],{"class":58},[31,10739,260],{"class":62},[31,10741,10743,10745,10747],{"class":33,"line":10742},113,[31,10744,266],{"class":37},[31,10746,269],{"class":125},[31,10748,272],{"class":62},[31,10750,10752],{"class":33,"line":10751},114,[31,10753,278],{"class":62},[10,10755,10757],{"id":10756},"动作通信_实验1_客户端实现c","动作通信_实验1_客户端实现(C++)",[14,10759,10760],{},[17,10761],{"alt":19,"src":10762},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage707.webp",[14,10764,10765],{},"这条红色的线是在action_client帮我们封装好的，所以可以不用管。",[14,10767,10768],{},[17,10769],{"alt":19,"src":10770},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage708.webp",[22,10772,10774],{"className":24,"code":10773,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 2)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcppp\"),\"请输入一个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionClient>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,10775,10776,10782,10786,10802,10806,10810,10824,10828,10846,10850,10854,10858,10880,10884,10897,10901,10925,10933,10937,10947,10951,10973,10977,10987,10995],{"__ignoreMap":19},[31,10777,10778,10780],{"class":33,"line":34},[31,10779,38],{"class":37},[31,10781,42],{"class":41},[31,10783,10784],{"class":33,"line":45},[31,10785,49],{"emptyLinePlaceholder":48},[31,10787,10788,10790,10792,10794,10796,10798,10800],{"class":33,"line":52},[31,10789,55],{"class":37},[31,10791,8295],{"class":58},[31,10793,63],{"class":62},[31,10795,66],{"class":37},[31,10797,69],{"class":58},[31,10799,72],{"class":62},[31,10801,75],{"class":58},[31,10803,10804],{"class":33,"line":78},[31,10805,81],{"class":62},[31,10807,10808],{"class":33,"line":84},[31,10809,87],{"class":37},[31,10811,10812,10814,10816,10818,10820,10822],{"class":33,"line":90},[31,10813,8318],{"class":58},[31,10815,96],{"class":62},[31,10817,99],{"class":58},[31,10819,102],{"class":62},[31,10821,8142],{"class":41},[31,10823,108],{"class":62},[31,10825,10826],{"class":33,"line":111},[31,10827,114],{"class":62},[31,10829,10830,10832,10834,10836,10838,10840,10842,10844],{"class":33,"line":117},[31,10831,120],{"class":58},[31,10833,102],{"class":62},[31,10835,126],{"class":125},[31,10837,129],{"class":62},[31,10839,132],{"class":58},[31,10841,135],{"class":62},[31,10843,8349],{"class":41},[31,10845,141],{"class":62},[31,10847,10848],{"class":33,"line":144},[31,10849,147],{"class":62},[31,10851,10852],{"class":33,"line":150},[31,10853,153],{"class":62},[31,10855,10856],{"class":33,"line":156},[31,10857,49],{"emptyLinePlaceholder":48},[31,10859,10860,10862,10864,10866,10868,10870,10872,10874,10876,10878],{"class":33,"line":161},[31,10861,164],{"class":37},[31,10863,167],{"class":58},[31,10865,102],{"class":62},[31,10867,164],{"class":37},[31,10869,175],{"class":174},[31,10871,178],{"class":62},[31,10873,181],{"class":37},[31,10875,184],{"class":37},[31,10877,187],{"class":174},[31,10879,108],{"class":62},[31,10881,10882],{"class":33,"line":192},[31,10883,81],{"class":62},[31,10885,10886,10888,10890,10892,10895],{"class":33,"line":197},[31,10887,5892],{"class":37},[31,10889,5895],{"class":62},[31,10891,5898],{"class":37},[31,10893,10894],{"class":125}," 2",[31,10896,108],{"class":62},[31,10898,10899],{"class":33,"line":211},[31,10900,5908],{"class":62},[31,10902,10903,10905,10907,10909,10911,10913,10915,10918,10920,10923],{"class":33,"line":216},[31,10904,5913],{"class":58},[31,10906,102],{"class":62},[31,10908,4086],{"class":58},[31,10910,72],{"class":62},[31,10912,132],{"class":58},[31,10914,102],{"class":62},[31,10916,10917],{"class":41},"\"rclcppp\"",[31,10919,3423],{"class":62},[31,10921,10922],{"class":41},"\"请输入一个整形数字!\"",[31,10924,141],{"class":62},[31,10926,10927,10929,10931],{"class":33,"line":245},[31,10928,1980],{"class":37},[31,10930,5940],{"class":125},[31,10932,272],{"class":62},[31,10934,10935],{"class":33,"line":250},[31,10936,543],{"class":62},[31,10938,10939,10941,10943,10945],{"class":33,"line":263},[31,10940,200],{"class":58},[31,10942,72],{"class":62},[31,10944,205],{"class":58},[31,10946,208],{"class":62},[31,10948,10949],{"class":33,"line":275},[31,10950,49],{"emptyLinePlaceholder":48},[31,10952,10953,10955,10957,10959,10961,10963,10965,10967,10969,10971],{"class":33,"line":494},[31,10954,200],{"class":58},[31,10956,72],{"class":62},[31,10958,223],{"class":58},[31,10960,102],{"class":62},[31,10962,228],{"class":58},[31,10964,72],{"class":62},[31,10966,233],{"class":58},[31,10968,236],{"class":62},[31,10970,8424],{"class":58},[31,10972,242],{"class":62},[31,10974,10975],{"class":33,"line":501},[31,10976,49],{"emptyLinePlaceholder":48},[31,10978,10979,10981,10983,10985],{"class":33,"line":509},[31,10980,200],{"class":58},[31,10982,72],{"class":62},[31,10984,257],{"class":58},[31,10986,260],{"class":62},[31,10988,10989,10991,10993],{"class":33,"line":517},[31,10990,266],{"class":37},[31,10992,269],{"class":125},[31,10994,272],{"class":62},[31,10996,10997],{"class":33,"line":523},[31,10998,278],{"class":62},[14,11000,11001],{},[17,11002],{"alt":19,"src":11003},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage709.webp",[14,11005,11006],{},[17,11007],{"alt":19,"src":11008},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage710.webp",[14,11010,11011],{},[17,11012],{"alt":19,"src":11013},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage711.webp",[14,11015,11016],{},[17,11017],{"alt":19,"src":11018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage712.webp",[14,11020,11021],{},"第一个入口参数是node",[14,11023,11024],{},"第二个入口参数是话题名称，字符串",[14,11026,11027],{},"第三个入口参数和第四个入口参数都有默认值",[14,11029,11030],{},"返回值是客户端智能指针。",[14,11032,11033],{},[17,11034],{"alt":19,"src":11035},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage713.webp",[14,11037,11038],{},[17,11039],{"alt":19,"src":11040},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage714.webp",[14,11042,11043],{},[17,11044],{"alt":19,"src":11045},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage715.webp",[14,11047,11048],{},[17,11049],{"alt":19,"src":11050},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage716.webp",[14,11052,11053],{},"需要把一步分成两步。",[14,11055,11056],{},[17,11057],{"alt":19,"src":11058},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage717.webp",[14,11060,11061],{},"再把send_goal函数调用一下。",[14,11063,11064],{},[17,11065],{"alt":19,"src":11066},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage718.webp",[560,11068],{},[14,11070,11071],{},[17,11072],{"alt":19,"src":11073},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage719.webp",[14,11075,11076],{},"async_send_goal是异步发送目标值",[14,11078,11079],{},[17,11080],{"alt":19,"src":11081},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage720.webp",[14,11083,11084],{},"第一个入口参数是我们接口文件里的目标值",[14,11086,11087],{},"第二个入口参数是发送目标选项对象，我们可以设置这个目标发送过去之后，我们需要处理的一些回调函数",[14,11089,11090],{},"返回值是",[14,11092,11093],{},[17,11094],{"alt":19,"src":11095},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage721.webp",[14,11097,11098],{},[17,11099],{"alt":19,"src":11100},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage722.webp",[14,11102,11103],{},[17,11104],{"alt":19,"src":11105},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage723.webp",[14,11107,11108],{},[17,11109],{"alt":19,"src":11110},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage724.webp",[14,11112,11113],{},"先不管其他的，先把函数随便定义上，什么返回值，入口参数都是void，先不让程序报错。",[14,11115,11116],{},[17,11117],{"alt":19,"src":11118},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage725.webp",[14,11120,11121],{},[17,11122],{"alt":19,"src":11123},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage726.webp",[14,11125,11126],{},[17,11127],{"alt":19,"src":11128},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage727.webp",[14,11130,11131],{},"得知，",[14,11133,11134],{},"GoalResponseCallback返回值是void，入口参数是goalhandle，goalhandle在本图的上面，是clientgoalhandle，然后这个clientgoalhandle属于rclcpp_action工作空间",[14,11136,11137],{},[17,11138],{"alt":19,"src":11139},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage728.webp",[14,11141,11142],{},[17,11143],{"alt":19,"src":11144},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage729.webp",[14,11146,11147],{},[17,11148],{"alt":19,"src":11149},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage730.webp",[14,11151,11152],{},[17,11153],{"alt":19,"src":11154},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage731.webp",[14,11156,11157],{},[17,11158],{"alt":19,"src":11159},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage732.webp",[14,11161,11162],{},"返回值是void",[14,11164,11165],{},"第一个入口参数是clientgoalhandle",[14,11167,11168],{},"第二个入口参数是feedback",[14,11170,11171],{},[17,11172],{"alt":19,"src":11173},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage733.webp",[14,11175,11176],{},[17,11177],{"alt":19,"src":11178},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage734.webp",[14,11180,11181],{},[17,11182],{"alt":19,"src":11183},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage735.webp",[14,11185,11186],{},[17,11187],{"alt":19,"src":11188},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage736.webp",[14,11190,11191],{},[17,11192],{"alt":19,"src":11193},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage737.webp",[560,11195],{},[14,11197,11198],{},[17,11199],{"alt":19,"src":11200},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage738.webp",[14,11202,11203],{},"发送一个数值给服务端，服务端要先拿到目标值进行判断，判断该目标值是否可以被接收，或者被拒绝，再把处理结果响应给客户端。",[14,11205,11206],{},"如果说这个目标值可处理，那么goal_handle里是有内容的;",[14,11208,11209],{},"如果不可以被处理，那么goal_handle是一个nullptr空指针。",[14,11211,11212],{},[17,11213],{"alt":19,"src":11214},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage739.webp",[14,11216,11217],{},[17,11218],{"alt":19,"src":11219},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage740.webp",[14,11221,11222],{},[17,11223],{"alt":19,"src":11224},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage741.webp",[14,11226,11227],{},[17,11228],{"alt":19,"src":11229},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage742.webp",[560,11231],{},[14,11233,11234],{},"接下来处理反馈数据：",[14,11236,11237],{},[17,11238],{"alt":19,"src":11239},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage743.webp",[14,11241,11242],{},"如果我们只是解析反馈的数据，那么goal_handle是用不上的。",[14,11244,11245],{},[17,11246],{"alt":19,"src":11247},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage744.webp",[14,11249,11250],{},[17,11251],{"alt":19,"src":11252},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage745.webp",[14,11254,11255],{},[17,11256],{"alt":19,"src":11257},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage746.webp",[14,11259,11260],{},"需要用俩%来转译%，如上图是打印百分比数据的案例。",[14,11262,11263],{},"假设progress_int是50，则会输出50%。",[14,11265,11266],{},"如果只想打印一个%，那就需要%%来转译。",[14,11268,11269],{},[17,11270],{"alt":19,"src":11271},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage747.webp",[14,11273,11274],{},[17,11275],{"alt":19,"src":11276},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage748.webp",[14,11278,11279],{},"回调函数是可能会数据丢失的。这是正常现象。",[560,11281],{},[14,11283,11284],{},"最终响应：",[14,11286,11287],{},"这个result最终结果的状态是不一定的，有可能任务被取消了，或被终止了，也有可能任务正常运行了。",[14,11289,11290],{},"所以我们要通过状态码来判断状态。",[14,11292,11293],{},[17,11294],{"alt":19,"src":11295},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage749.webp",[14,11297,11298],{},"第一个是被强行终止",[14,11300,11301],{},"第二个是取消",[14,11303,11304],{},"第三个是成功",[14,11306,11307],{},"第四个是未知",[14,11309,11310],{},[17,11311],{"alt":19,"src":11312},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage750.webp",[14,11314,11315],{},[17,11316],{"alt":19,"src":11317},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage751.webp",[14,11319,11320],{},[17,11321],{"alt":19,"src":11322},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage752.webp",[22,11324,11326],{"className":24,"code":11325,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing namespace std::chrono_literals;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n      \u002F*\n      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n      NodeT>(NodeT node, const std::string &name,\n      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n      *\u002F\n      client_ = rclcpp_action::create_client\u003CProgress>(this,\"get_sum_topic\");\n    }\n\n    void send_goal(int32_t num)\n    {\n      if(client_->wait_for_action_server(1s) != true)\n      {\n        RCLCPP_ERROR(this->get_logger(),\"服务连接失败!\");\n        return;\n      }\n\n      \u002F*\n      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n      *\u002F\n      auto goal = Progress::Goal();\n      goal.num = num;\n\n      rclcpp_action::Client\u003CProgress>::SendGoalOptions options;\n      options.goal_response_callback = std::bind(&ProgressActionClient::goal_response_callback,this,_1);\n      options.feedback_callback = std::bind(&ProgressActionClient::feedback_callback,this,_1,_2);\n      options.result_callback = std::bind(&ProgressActionClient::result_callback,this,_1);\n\n      auto future = client_->async_send_goal(goal,options);\n    }\n\n  void goal_response_callback(rclcpp_action::ClientGoalHandle\u003CProgress>::SharedPtr goal_handle)\n  {\n    if(goal_handle == nullptr)\n    {\n      RCLCPP_INFO(this->get_logger(),\"目标请求被服务端拒绝!\");\n    }\n    else\n    {\n      RCLCPP_INFO(this->get_logger(),\"目标处理中!\");\n    }\n  }\n\n  void feedback_callback(rclcpp_action::ClientGoalHandle\u003CProgress>::SharedPtr goal_handle,std::shared_ptr\u003Cconst Progress::Feedback> feedback)\n  {\n    (void)goal_handle;\n    double progress = feedback->progress;\n    int progress_int = (int) (progress * 100);\n    RCLCPP_INFO(this->get_logger(),\"当前进度为:%d%%\",progress_int);\n  }\n\n  void result_callback(const rclcpp_action::ClientGoalHandle\u003CProgress>::WrappedResult & result)\n  {\n    if (result.code == rclcpp_action::ResultCode::SUCCEEDED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"最终结果为:%d\",result.result->sum);\n    }\n    else if(result.code == rclcpp_action::ResultCode::ABORTED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"过程被中断!\");\n    }\n    else if(result.code == rclcpp_action::ResultCode::CANCELED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"任务被取消!\");\n    }\n    else\n    {\n      RCLCPP_INFO(this->get_logger(),\"未知异常!\");\n    }\n  }\n\n  private:\n    rclcpp_action::Client\u003CProgress>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 2)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcppp\"),\"请输入一个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CProgressActionClient>();\n\n  node->send_goal(atoi(argv[1]));\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,11327,11328,11334,11340,11346,11350,11362,11376,11388,11400,11404,11420,11424,11428,11442,11446,11464,11468,11473,11478,11483,11488,11492,11521,11525,11529,11544,11548,11571,11575,11595,11601,11605,11609,11613,11618,11623,11628,11632,11649,11659,11663,11679,11706,11733,11759,11763,11779,11783,11787,11817,11821,11836,11840,11859,11863,11868,11872,11891,11895,11899,11903,11954,11958,11967,11979,12003,12028,12032,12036,12069,12073,12092,12096,12120,12124,12146,12150,12169,12173,12192,12196,12215,12219,12223,12227,12246,12250,12254,12258,12262,12276,12280,12284,12306,12310,12322,12326,12348,12356,12360,12370,12374,12395,12399,12417,12421,12432,12436,12446,12454],{"__ignoreMap":19},[31,11329,11330,11332],{"class":33,"line":34},[31,11331,38],{"class":37},[31,11333,42],{"class":41},[31,11335,11336,11338],{"class":33,"line":45},[31,11337,38],{"class":37},[31,11339,8620],{"class":41},[31,11341,11342,11344],{"class":33,"line":52},[31,11343,38],{"class":37},[31,11345,8627],{"class":41},[31,11347,11348],{"class":33,"line":78},[31,11349,49],{"emptyLinePlaceholder":48},[31,11351,11352,11354,11356,11358,11360],{"class":33,"line":84},[31,11353,1263],{"class":37},[31,11355,3564],{"class":58},[31,11357,72],{"class":62},[31,11359,8642],{"class":58},[31,11361,8645],{"class":62},[31,11363,11364,11366,11368,11370,11372,11374],{"class":33,"line":90},[31,11365,1263],{"class":37},[31,11367,1266],{"class":37},[31,11369,1269],{"class":58},[31,11371,72],{"class":62},[31,11373,1274],{"class":58},[31,11375,272],{"class":62},[31,11377,11378,11380,11382,11384,11386],{"class":33,"line":111},[31,11379,1263],{"class":37},[31,11381,1269],{"class":58},[31,11383,72],{"class":62},[31,11385,2226],{"class":58},[31,11387,8658],{"class":62},[31,11389,11390,11392,11394,11396,11398],{"class":33,"line":117},[31,11391,1263],{"class":37},[31,11393,1269],{"class":58},[31,11395,72],{"class":62},[31,11397,2226],{"class":58},[31,11399,8671],{"class":62},[31,11401,11402],{"class":33,"line":144},[31,11403,49],{"emptyLinePlaceholder":48},[31,11405,11406,11408,11410,11412,11414,11416,11418],{"class":33,"line":150},[31,11407,55],{"class":37},[31,11409,8295],{"class":58},[31,11411,63],{"class":62},[31,11413,66],{"class":37},[31,11415,69],{"class":58},[31,11417,72],{"class":62},[31,11419,75],{"class":58},[31,11421,11422],{"class":33,"line":156},[31,11423,81],{"class":62},[31,11425,11426],{"class":33,"line":161},[31,11427,87],{"class":37},[31,11429,11430,11432,11434,11436,11438,11440],{"class":33,"line":192},[31,11431,8318],{"class":58},[31,11433,96],{"class":62},[31,11435,99],{"class":58},[31,11437,102],{"class":62},[31,11439,8142],{"class":41},[31,11441,108],{"class":62},[31,11443,11444],{"class":33,"line":197},[31,11445,114],{"class":62},[31,11447,11448,11450,11452,11454,11456,11458,11460,11462],{"class":33,"line":211},[31,11449,120],{"class":58},[31,11451,102],{"class":62},[31,11453,126],{"class":125},[31,11455,129],{"class":62},[31,11457,132],{"class":58},[31,11459,135],{"class":62},[31,11461,8349],{"class":41},[31,11463,141],{"class":62},[31,11465,11466],{"class":33,"line":216},[31,11467,7445],{"class":4828},[31,11469,11470],{"class":33,"line":245},[31,11471,11472],{"class":4828},"      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n",[31,11474,11475],{"class":33,"line":250},[31,11476,11477],{"class":4828},"      NodeT>(NodeT node, const std::string &name,\n",[31,11479,11480],{"class":33,"line":263},[31,11481,11482],{"class":4828},"      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n",[31,11484,11485],{"class":33,"line":275},[31,11486,11487],{"class":4828},"      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n",[31,11489,11490],{"class":33,"line":494},[31,11491,7460],{"class":4828},[31,11493,11494,11496,11498,11500,11502,11505,11507,11509,11512,11514,11516,11519],{"class":33,"line":501},[31,11495,6556],{"class":62},[31,11497,1359],{"class":37},[31,11499,8792],{"class":58},[31,11501,72],{"class":62},[31,11503,11504],{"class":58},"create_client",[31,11506,236],{"class":62},[31,11508,8802],{"class":58},[31,11510,11511],{"class":62},">(",[31,11513,126],{"class":125},[31,11515,1389],{"class":62},[31,11517,11518],{"class":41},"\"get_sum_topic\"",[31,11520,141],{"class":62},[31,11522,11523],{"class":33,"line":509},[31,11524,147],{"class":62},[31,11526,11527],{"class":33,"line":517},[31,11528,49],{"emptyLinePlaceholder":48},[31,11530,11531,11533,11535,11537,11539,11542],{"class":33,"line":523},[31,11532,1454],{"class":37},[31,11534,9255],{"class":58},[31,11536,102],{"class":62},[31,11538,7424],{"class":37},[31,11540,11541],{"class":174}," num",[31,11543,108],{"class":62},[31,11545,11546],{"class":33,"line":529},[31,11547,114],{"class":62},[31,11549,11550,11552,11554,11557,11559,11561,11563,11565,11567,11569],{"class":33,"line":540},[31,11551,9885],{"class":37},[31,11553,6605],{"class":62},[31,11555,11556],{"class":58},"wait_for_action_server",[31,11558,102],{"class":62},[31,11560,1413],{"class":125},[31,11562,1416],{"class":37},[31,11564,6617],{"class":62},[31,11566,5898],{"class":37},[31,11568,6622],{"class":125},[31,11570,108],{"class":62},[31,11572,11573],{"class":33,"line":546},[31,11574,6629],{"class":62},[31,11576,11577,11580,11582,11584,11586,11588,11590,11593],{"class":33,"line":1640},[31,11578,11579],{"class":58},"        RCLCPP_ERROR",[31,11581,102],{"class":62},[31,11583,126],{"class":125},[31,11585,129],{"class":62},[31,11587,132],{"class":58},[31,11589,135],{"class":62},[31,11591,11592],{"class":41},"\"服务连接失败!\"",[31,11594,141],{"class":62},[31,11596,11597,11599],{"class":33,"line":1645},[31,11598,9923],{"class":37},[31,11600,272],{"class":62},[31,11602,11603],{"class":33,"line":1656},[31,11604,6728],{"class":62},[31,11606,11607],{"class":33,"line":1661},[31,11608,49],{"emptyLinePlaceholder":48},[31,11610,11611],{"class":33,"line":1684},[31,11612,7445],{"class":4828},[31,11614,11615],{"class":33,"line":1689},[31,11616,11617],{"class":4828},"      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n",[31,11619,11620],{"class":33,"line":1700},[31,11621,11622],{"class":4828},"      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n",[31,11624,11625],{"class":33,"line":1709},[31,11626,11627],{"class":4828},"      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n",[31,11629,11630],{"class":33,"line":3790},[31,11631,7460],{"class":4828},[31,11633,11634,11636,11639,11641,11643,11645,11647],{"class":33,"line":3801},[31,11635,1469],{"class":37},[31,11637,11638],{"class":62}," goal ",[31,11640,1359],{"class":37},[31,11642,8942],{"class":58},[31,11644,72],{"class":62},[31,11646,8947],{"class":58},[31,11648,260],{"class":62},[31,11650,11651,11654,11656],{"class":33,"line":3810},[31,11652,11653],{"class":62},"      goal.num ",[31,11655,1359],{"class":37},[31,11657,11658],{"class":62}," num;\n",[31,11660,11661],{"class":33,"line":6840},[31,11662,49],{"emptyLinePlaceholder":48},[31,11664,11665,11668,11670,11672,11674,11676],{"class":33,"line":6849},[31,11666,11667],{"class":58},"      rclcpp_action",[31,11669,72],{"class":62},[31,11671,6758],{"class":58},[31,11673,236],{"class":62},[31,11675,8802],{"class":58},[31,11677,11678],{"class":62},">::SendGoalOptions options;\n",[31,11680,11681,11684,11686,11688,11690,11692,11694,11696,11698,11701,11703],{"class":33,"line":6854},[31,11682,11683],{"class":62},"      options.goal_response_callback ",[31,11685,1359],{"class":37},[31,11687,1269],{"class":58},[31,11689,72],{"class":62},[31,11691,1425],{"class":58},[31,11693,102],{"class":62},[31,11695,1430],{"class":37},[31,11697,8424],{"class":58},[31,11699,11700],{"class":62},"::goal_response_callback,",[31,11702,126],{"class":125},[31,11704,11705],{"class":62},",_1);\n",[31,11707,11708,11711,11713,11715,11717,11719,11721,11723,11725,11728,11730],{"class":33,"line":6865},[31,11709,11710],{"class":62},"      options.feedback_callback ",[31,11712,1359],{"class":37},[31,11714,1269],{"class":58},[31,11716,72],{"class":62},[31,11718,1425],{"class":58},[31,11720,102],{"class":62},[31,11722,1430],{"class":37},[31,11724,8424],{"class":58},[31,11726,11727],{"class":62},"::feedback_callback,",[31,11729,126],{"class":125},[31,11731,11732],{"class":62},",_1,_2);\n",[31,11734,11735,11738,11740,11742,11744,11746,11748,11750,11752,11755,11757],{"class":33,"line":6870},[31,11736,11737],{"class":62},"      options.result_callback ",[31,11739,1359],{"class":37},[31,11741,1269],{"class":58},[31,11743,72],{"class":62},[31,11745,1425],{"class":58},[31,11747,102],{"class":62},[31,11749,1430],{"class":37},[31,11751,8424],{"class":58},[31,11753,11754],{"class":62},"::result_callback,",[31,11756,126],{"class":125},[31,11758,11705],{"class":62},[31,11760,11761],{"class":33,"line":6891},[31,11762,49],{"emptyLinePlaceholder":48},[31,11764,11765,11767,11769,11771,11773,11776],{"class":33,"line":6896},[31,11766,1469],{"class":37},[31,11768,7748],{"class":62},[31,11770,1359],{"class":37},[31,11772,7510],{"class":62},[31,11774,11775],{"class":58},"async_send_goal",[31,11777,11778],{"class":62},"(goal,options);\n",[31,11780,11781],{"class":33,"line":6915},[31,11782,147],{"class":62},[31,11784,11785],{"class":33,"line":6920},[31,11786,49],{"emptyLinePlaceholder":48},[31,11788,11789,11792,11795,11797,11799,11801,11804,11806,11808,11810,11812,11815],{"class":33,"line":6934},[31,11790,11791],{"class":37},"  void",[31,11793,11794],{"class":58}," goal_response_callback",[31,11796,102],{"class":62},[31,11798,9009],{"class":58},[31,11800,72],{"class":62},[31,11802,11803],{"class":58},"ClientGoalHandle",[31,11805,236],{"class":62},[31,11807,8802],{"class":58},[31,11809,7413],{"class":62},[31,11811,5198],{"class":58},[31,11813,11814],{"class":174}," goal_handle",[31,11816,108],{"class":62},[31,11818,11819],{"class":33,"line":6939},[31,11820,5908],{"class":62},[31,11822,11823,11826,11829,11831,11834],{"class":33,"line":6963},[31,11824,11825],{"class":37},"    if",[31,11827,11828],{"class":62},"(goal_handle ",[31,11830,7802],{"class":37},[31,11832,11833],{"class":125}," nullptr",[31,11835,108],{"class":62},[31,11837,11838],{"class":33,"line":6972},[31,11839,114],{"class":62},[31,11841,11842,11844,11846,11848,11850,11852,11854,11857],{"class":33,"line":6977},[31,11843,120],{"class":58},[31,11845,102],{"class":62},[31,11847,126],{"class":125},[31,11849,129],{"class":62},[31,11851,132],{"class":58},[31,11853,135],{"class":62},[31,11855,11856],{"class":41},"\"目标请求被服务端拒绝!\"",[31,11858,141],{"class":62},[31,11860,11861],{"class":33,"line":6982},[31,11862,147],{"class":62},[31,11864,11865],{"class":33,"line":6993},[31,11866,11867],{"class":37},"    else\n",[31,11869,11870],{"class":33,"line":7002},[31,11871,114],{"class":62},[31,11873,11874,11876,11878,11880,11882,11884,11886,11889],{"class":33,"line":7663},[31,11875,120],{"class":58},[31,11877,102],{"class":62},[31,11879,126],{"class":125},[31,11881,129],{"class":62},[31,11883,132],{"class":58},[31,11885,135],{"class":62},[31,11887,11888],{"class":41},"\"目标处理中!\"",[31,11890,141],{"class":62},[31,11892,11893],{"class":33,"line":7668},[31,11894,147],{"class":62},[31,11896,11897],{"class":33,"line":7683},[31,11898,543],{"class":62},[31,11900,11901],{"class":33,"line":7688},[31,11902,49],{"emptyLinePlaceholder":48},[31,11904,11905,11907,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940,11942,11944,11947,11949,11952],{"class":33,"line":7701},[31,11906,11791],{"class":37},[31,11908,11909],{"class":58}," feedback_callback",[31,11911,102],{"class":62},[31,11913,9009],{"class":58},[31,11915,72],{"class":62},[31,11917,11803],{"class":58},[31,11919,236],{"class":62},[31,11921,8802],{"class":58},[31,11923,7413],{"class":62},[31,11925,5198],{"class":58},[31,11927,11814],{"class":174},[31,11929,1389],{"class":62},[31,11931,228],{"class":58},[31,11933,72],{"class":62},[31,11935,8935],{"class":58},[31,11937,236],{"class":62},[31,11939,2254],{"class":37},[31,11941,8942],{"class":58},[31,11943,72],{"class":62},[31,11945,11946],{"class":58},"Feedback",[31,11948,9860],{"class":62},[31,11950,11951],{"class":174},"feedback",[31,11953,108],{"class":62},[31,11955,11956],{"class":33,"line":7706},[31,11957,5908],{"class":62},[31,11959,11960,11963,11965],{"class":33,"line":7729},[31,11961,11962],{"class":62},"    (",[31,11964,9877],{"class":37},[31,11966,10028],{"class":62},[31,11968,11969,11972,11974,11976],{"class":33,"line":7738},[31,11970,11971],{"class":37},"    double",[31,11973,10264],{"class":62},[31,11975,1359],{"class":37},[31,11977,11978],{"class":62}," feedback->progress;\n",[31,11980,11981,11984,11987,11989,11991,11993,11996,11998,12001],{"class":33,"line":7743},[31,11982,11983],{"class":37},"    int",[31,11985,11986],{"class":62}," progress_int ",[31,11988,1359],{"class":37},[31,11990,5240],{"class":62},[31,11992,164],{"class":37},[31,11994,11995],{"class":62},") (progress ",[31,11997,5243],{"class":37},[31,11999,12000],{"class":125}," 100",[31,12002,141],{"class":62},[31,12004,12005,12007,12009,12011,12013,12015,12017,12020,12023,12025],{"class":33,"line":7780},[31,12006,5913],{"class":58},[31,12008,102],{"class":62},[31,12010,126],{"class":125},[31,12012,129],{"class":62},[31,12014,132],{"class":58},[31,12016,135],{"class":62},[31,12018,12019],{"class":41},"\"当前进度为:",[31,12021,12022],{"class":125},"%d%%",[31,12024,367],{"class":41},[31,12026,12027],{"class":62},",progress_int);\n",[31,12029,12030],{"class":33,"line":7785},[31,12031,543],{"class":62},[31,12033,12034],{"class":33,"line":7815},[31,12035,49],{"emptyLinePlaceholder":48},[31,12037,12038,12040,12043,12045,12047,12049,12051,12053,12055,12057,12059,12062,12064,12067],{"class":33,"line":7820},[31,12039,11791],{"class":37},[31,12041,12042],{"class":58}," result_callback",[31,12044,102],{"class":62},[31,12046,2254],{"class":37},[31,12048,8792],{"class":58},[31,12050,72],{"class":62},[31,12052,11803],{"class":58},[31,12054,236],{"class":62},[31,12056,8802],{"class":58},[31,12058,7413],{"class":62},[31,12060,12061],{"class":58},"WrappedResult",[31,12063,2267],{"class":37},[31,12065,12066],{"class":174}," result",[31,12068,108],{"class":62},[31,12070,12071],{"class":33,"line":7848},[31,12072,5908],{"class":62},[31,12074,12075,12077,12080,12082,12084,12086,12089],{"class":33,"line":7853},[31,12076,11825],{"class":37},[31,12078,12079],{"class":62}," (result.code ",[31,12081,7802],{"class":37},[31,12083,8792],{"class":58},[31,12085,72],{"class":62},[31,12087,12088],{"class":58},"ResultCode",[31,12090,12091],{"class":62},"::SUCCEEDED)\n",[31,12093,12094],{"class":33,"line":7859},[31,12095,114],{"class":62},[31,12097,12098,12100,12102,12104,12106,12108,12110,12113,12115,12117],{"class":33,"line":7864},[31,12099,120],{"class":58},[31,12101,102],{"class":62},[31,12103,126],{"class":125},[31,12105,129],{"class":62},[31,12107,132],{"class":58},[31,12109,135],{"class":62},[31,12111,12112],{"class":41},"\"最终结果为:",[31,12114,3655],{"class":125},[31,12116,367],{"class":41},[31,12118,12119],{"class":62},",result.result->sum);\n",[31,12121,12122],{"class":33,"line":7880},[31,12123,147],{"class":62},[31,12125,12126,12129,12132,12135,12137,12139,12141,12143],{"class":33,"line":7885},[31,12127,12128],{"class":37},"    else",[31,12130,12131],{"class":37}," if",[31,12133,12134],{"class":62},"(result.code ",[31,12136,7802],{"class":37},[31,12138,8792],{"class":58},[31,12140,72],{"class":62},[31,12142,12088],{"class":58},[31,12144,12145],{"class":62},"::ABORTED)\n",[31,12147,12148],{"class":33,"line":7890},[31,12149,114],{"class":62},[31,12151,12152,12154,12156,12158,12160,12162,12164,12167],{"class":33,"line":7901},[31,12153,120],{"class":58},[31,12155,102],{"class":62},[31,12157,126],{"class":125},[31,12159,129],{"class":62},[31,12161,132],{"class":58},[31,12163,135],{"class":62},[31,12165,12166],{"class":41},"\"过程被中断!\"",[31,12168,141],{"class":62},[31,12170,12171],{"class":33,"line":7910},[31,12172,147],{"class":62},[31,12174,12175,12177,12179,12181,12183,12185,12187,12189],{"class":33,"line":10397},[31,12176,12128],{"class":37},[31,12178,12131],{"class":37},[31,12180,12134],{"class":62},[31,12182,7802],{"class":37},[31,12184,8792],{"class":58},[31,12186,72],{"class":62},[31,12188,12088],{"class":58},[31,12190,12191],{"class":62},"::CANCELED)\n",[31,12193,12194],{"class":33,"line":10404},[31,12195,114],{"class":62},[31,12197,12198,12200,12202,12204,12206,12208,12210,12213],{"class":33,"line":10409},[31,12199,120],{"class":58},[31,12201,102],{"class":62},[31,12203,126],{"class":125},[31,12205,129],{"class":62},[31,12207,132],{"class":58},[31,12209,135],{"class":62},[31,12211,12212],{"class":41},"\"任务被取消!\"",[31,12214,141],{"class":62},[31,12216,12217],{"class":33,"line":10414},[31,12218,147],{"class":62},[31,12220,12221],{"class":33,"line":10425},[31,12222,11867],{"class":37},[31,12224,12225],{"class":33,"line":10430},[31,12226,114],{"class":62},[31,12228,12229,12231,12233,12235,12237,12239,12241,12244],{"class":33,"line":10435},[31,12230,120],{"class":58},[31,12232,102],{"class":62},[31,12234,126],{"class":125},[31,12236,129],{"class":62},[31,12238,132],{"class":58},[31,12240,135],{"class":62},[31,12242,12243],{"class":41},"\"未知异常!\"",[31,12245,141],{"class":62},[31,12247,12248],{"class":33,"line":10441},[31,12249,147],{"class":62},[31,12251,12252],{"class":33,"line":10447},[31,12253,543],{"class":62},[31,12255,12256],{"class":33,"line":10452},[31,12257,49],{"emptyLinePlaceholder":48},[31,12259,12260],{"class":33,"line":10473},[31,12261,1449],{"class":37},[31,12263,12264,12266,12268,12270,12272,12274],{"class":33,"line":10478},[31,12265,8905],{"class":58},[31,12267,72],{"class":62},[31,12269,6758],{"class":58},[31,12271,236],{"class":62},[31,12273,8802],{"class":58},[31,12275,6765],{"class":62},[31,12277,12278],{"class":33,"line":10488},[31,12279,153],{"class":62},[31,12281,12282],{"class":33,"line":10498},[31,12283,49],{"emptyLinePlaceholder":48},[31,12285,12286,12288,12290,12292,12294,12296,12298,12300,12302,12304],{"class":33,"line":10523},[31,12287,164],{"class":37},[31,12289,167],{"class":58},[31,12291,102],{"class":62},[31,12293,164],{"class":37},[31,12295,175],{"class":174},[31,12297,178],{"class":62},[31,12299,181],{"class":37},[31,12301,184],{"class":37},[31,12303,187],{"class":174},[31,12305,108],{"class":62},[31,12307,12308],{"class":33,"line":10528},[31,12309,81],{"class":62},[31,12311,12312,12314,12316,12318,12320],{"class":33,"line":10533},[31,12313,5892],{"class":37},[31,12315,5895],{"class":62},[31,12317,5898],{"class":37},[31,12319,10894],{"class":125},[31,12321,108],{"class":62},[31,12323,12324],{"class":33,"line":10538},[31,12325,5908],{"class":62},[31,12327,12328,12330,12332,12334,12336,12338,12340,12342,12344,12346],{"class":33,"line":10543},[31,12329,6176],{"class":58},[31,12331,102],{"class":62},[31,12333,4086],{"class":58},[31,12335,72],{"class":62},[31,12337,132],{"class":58},[31,12339,102],{"class":62},[31,12341,10917],{"class":41},[31,12343,3423],{"class":62},[31,12345,10922],{"class":41},[31,12347,141],{"class":62},[31,12349,12350,12352,12354],{"class":33,"line":10576},[31,12351,1980],{"class":37},[31,12353,5940],{"class":125},[31,12355,272],{"class":62},[31,12357,12358],{"class":33,"line":10581},[31,12359,543],{"class":62},[31,12361,12362,12364,12366,12368],{"class":33,"line":10619},[31,12363,200],{"class":58},[31,12365,72],{"class":62},[31,12367,205],{"class":58},[31,12369,208],{"class":62},[31,12371,12372],{"class":33,"line":10624},[31,12373,49],{"emptyLinePlaceholder":48},[31,12375,12376,12378,12381,12383,12385,12387,12389,12391,12393],{"class":33,"line":10629},[31,12377,4834],{"class":37},[31,12379,12380],{"class":62}," node ",[31,12382,1359],{"class":37},[31,12384,1269],{"class":58},[31,12386,72],{"class":62},[31,12388,233],{"class":58},[31,12390,236],{"class":62},[31,12392,8424],{"class":58},[31,12394,4853],{"class":62},[31,12396,12397],{"class":33,"line":10634},[31,12398,49],{"emptyLinePlaceholder":48},[31,12400,12401,12404,12407,12409,12411,12413,12415],{"class":33,"line":10649},[31,12402,12403],{"class":62},"  node->",[31,12405,12406],{"class":58},"send_goal",[31,12408,102],{"class":62},[31,12410,7760],{"class":58},[31,12412,7763],{"class":62},[31,12414,1413],{"class":125},[31,12416,7777],{"class":62},[31,12418,12419],{"class":33,"line":10654},[31,12420,49],{"emptyLinePlaceholder":48},[31,12422,12423,12425,12427,12429],{"class":33,"line":10659},[31,12424,200],{"class":58},[31,12426,72],{"class":62},[31,12428,223],{"class":58},[31,12430,12431],{"class":62},"(node);\n",[31,12433,12434],{"class":33,"line":10682},[31,12435,49],{"emptyLinePlaceholder":48},[31,12437,12438,12440,12442,12444],{"class":33,"line":10687},[31,12439,200],{"class":58},[31,12441,72],{"class":62},[31,12443,257],{"class":58},[31,12445,260],{"class":62},[31,12447,12448,12450,12452],{"class":33,"line":10698},[31,12449,266],{"class":37},[31,12451,269],{"class":125},[31,12453,272],{"class":62},[31,12455,12456],{"class":33,"line":10703},[31,12457,278],{"class":62},[14,12459,12460],{},[17,12461],{"alt":19,"src":12462},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage753.webp",[14,12464,12465],{},[17,12466],{"alt":19,"src":12467},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage754.webp",[14,12469,12470],{},"此时我们取消客户端，反而服务端还在运行，这里的ctrl+c只是结束了我们的客户端，而不是指挥我们的客户端去下发取消请求指令，我们只有去捕获一下我们的键盘才能完成取消请求指令的发送。",[560,12472],{},[14,12474,12475],{},"修复bug:",[14,12477,12478],{},"还没修复好",[22,12480,12482],{"className":24,"code":12481,"language":26,"meta":19,"style":19},"\u002F\u002F 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\nrclcpp::spin_until_future_complete(this->get_node_base_interface(), future_cancel);\nif (future_cancel.wait_for(1s) == std::future_status::ready)\n{\n  RCLCPP_INFO(this->get_logger(), \"终止请求已发送!\");\n}\nelse\n{\n  RCLCPP_ERROR(this->get_logger(), \"无法发送终止请求...\");\n}\n",[28,12483,12484,12489,12509,12540,12544,12565,12569,12574,12578,12598],{"__ignoreMap":19},[31,12485,12486],{"class":33,"line":34},[31,12487,12488],{"class":4828},"\u002F\u002F 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\n",[31,12490,12491,12493,12495,12497,12499,12501,12503,12506],{"class":33,"line":45},[31,12492,4086],{"class":58},[31,12494,72],{"class":62},[31,12496,7796],{"class":58},[31,12498,102],{"class":62},[31,12500,126],{"class":125},[31,12502,129],{"class":62},[31,12504,12505],{"class":58},"get_node_base_interface",[31,12507,12508],{"class":62},"(), future_cancel);\n",[31,12510,12511,12514,12517,12520,12522,12524,12526,12528,12530,12532,12534,12537],{"class":33,"line":52},[31,12512,12513],{"class":37},"if",[31,12515,12516],{"class":62}," (future_cancel.",[31,12518,12519],{"class":58},"wait_for",[31,12521,102],{"class":62},[31,12523,1413],{"class":125},[31,12525,1416],{"class":37},[31,12527,6617],{"class":62},[31,12529,7802],{"class":37},[31,12531,1269],{"class":58},[31,12533,72],{"class":62},[31,12535,12536],{"class":58},"future_status",[31,12538,12539],{"class":62},"::ready)\n",[31,12541,12542],{"class":33,"line":78},[31,12543,81],{"class":62},[31,12545,12546,12549,12551,12553,12555,12557,12560,12563],{"class":33,"line":84},[31,12547,12548],{"class":58},"  RCLCPP_INFO",[31,12550,102],{"class":62},[31,12552,126],{"class":125},[31,12554,129],{"class":62},[31,12556,132],{"class":58},[31,12558,12559],{"class":62},"(), ",[31,12561,12562],{"class":41},"\"终止请求已发送!\"",[31,12564,141],{"class":62},[31,12566,12567],{"class":33,"line":90},[31,12568,278],{"class":62},[31,12570,12571],{"class":33,"line":111},[31,12572,12573],{"class":37},"else\n",[31,12575,12576],{"class":33,"line":117},[31,12577,81],{"class":62},[31,12579,12580,12583,12585,12587,12589,12591,12593,12596],{"class":33,"line":144},[31,12581,12582],{"class":58},"  RCLCPP_ERROR",[31,12584,102],{"class":62},[31,12586,126],{"class":125},[31,12588,129],{"class":62},[31,12590,132],{"class":58},[31,12592,12559],{"class":62},[31,12594,12595],{"class":41},"\"无法发送终止请求...\"",[31,12597,141],{"class":62},[31,12599,12600],{"class":33,"line":150},[31,12601,278],{"class":62},[10,12603,12605],{"id":12604},"参数服务_理论与api介绍c","参数服务_理论与API介绍(C++)",[14,12607,12608],{},[17,12609],{"alt":19,"src":12610},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage755.webp",[14,12612,12613],{},[17,12614],{"alt":19,"src":12615},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage756.webp",[14,12617,12618],{},"当然还有特殊情况，比如把参数设置为私有的。",[560,12620],{},[14,12622,12623],{},[17,12624],{"alt":19,"src":12625},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage757.webp",[14,12627,12628],{},[17,12629],{"alt":19,"src":12630},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage758.webp",[14,12632,12633],{},"其他通信需要自己弄接口文件，但是参数服务不用自己弄接口文件，ROS2已经封装好了API，所以我们只需要调用API即可。",[14,12635,12636],{},[17,12637],{"alt":19,"src":12638},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage759.webp",[14,12640,12641],{},[17,12642],{"alt":19,"src":12643},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage760.webp",[14,12645,12646],{},[17,12647],{"alt":19,"src":12648},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage761.webp",[14,12650,12651],{},"只是想展示一下API，所以先创建参数功能包展示下API，先不创建客户端和服务端。",[14,12653,12654],{},[17,12655],{"alt":19,"src":12656},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage762.webp",[14,12658,12659],{},[17,12660],{"alt":19,"src":12661},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage763.webp",[14,12663,12664],{},[17,12665],{"alt":19,"src":12666},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage764.webp",[14,12668,12669],{},"rclcpp::parameter 对象(键,值);",[14,12671,12672],{},[17,12673],{"alt":19,"src":12674},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage765.webp",[14,12676,12677],{},[17,12678],{"alt":19,"src":12679},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage766.webp",[14,12681,12682],{},[17,12683],{"alt":19,"src":12684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage767.webp",[14,12686,12687],{},[17,12688],{"alt":19,"src":12689},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage768.webp",[14,12691,12692],{},[17,12693],{"alt":19,"src":12694},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage769.webp",[14,12696,12697],{},[17,12698],{"alt":19,"src":12699},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage770.webp",[14,12701,12702],{},[17,12703],{"alt":19,"src":12704},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage771.webp",[14,12706,12707],{},"该函数是给parameter的值赋值的，有18个重载，各种类型。",[14,12709,12710],{},"其中空是说不给赋值，这样只有键，没有值。",[10,12712,12714],{"id":12713},"参数服务_实验1_服务端c","参数服务_实验1_服务端(C++)",[14,12716,12717],{},[17,12718],{"alt":19,"src":12719},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage772.webp",[14,12721,12722],{},[17,12723],{"alt":19,"src":12724},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage773.webp",[14,12726,12727],{},"这里有差异，在Node里传入了第二个参数，这句是专门用来允许删除参数的。undeclared解除声明。",[14,12729,12730],{},[17,12731],{"alt":19,"src":12732},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage774.webp",[14,12734,12735],{},[17,12736],{"alt":19,"src":12737},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage775.webp",[14,12739,12740],{},[17,12741],{"alt":19,"src":12742},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage776.webp",[14,12744,12745],{},[17,12746],{"alt":19,"src":12747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage777.webp",[14,12749,12750],{},[17,12751],{"alt":19,"src":12752},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage778.webp",[14,12754,12755],{},"只有查询和修改的接口API，并没有新增和删除的API，这是ROS2根据安全考虑的。",[14,12757,12758],{},[17,12759],{"alt":19,"src":12760},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage779.webp",[14,12762,12763],{},[17,12764],{"alt":19,"src":12765},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage780.webp",[14,12767,12768],{},[17,12769],{"alt":19,"src":12770},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage781.webp",[14,12772,12773],{},[17,12774],{"alt":19,"src":12775},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage782.webp",[22,12777,12779],{"className":24,"code":12778,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamClient: public rclcpp::Node\n{\n  public:\n    ParamClient():Node(\"param_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数客户端搭建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamClient>();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,12780,12781,12787,12791,12808,12812,12816,12832,12836,12855,12859,12863,12867,12889,12893,12903,12907,12928,12932,12942,12946,12956,12964,12968,12974,12978,12995,12999,13003,13019,13023,13042,13046,13050,13054,13076,13080,13090,13094,13115,13119,13129,13133,13143,13151],{"__ignoreMap":19},[31,12782,12783,12785],{"class":33,"line":34},[31,12784,38],{"class":37},[31,12786,42],{"class":41},[31,12788,12789],{"class":33,"line":45},[31,12790,49],{"emptyLinePlaceholder":48},[31,12792,12793,12795,12798,12800,12802,12804,12806],{"class":33,"line":52},[31,12794,55],{"class":37},[31,12796,12797],{"class":58}," ParamServer",[31,12799,63],{"class":62},[31,12801,66],{"class":37},[31,12803,69],{"class":58},[31,12805,72],{"class":62},[31,12807,75],{"class":58},[31,12809,12810],{"class":33,"line":78},[31,12811,81],{"class":62},[31,12813,12814],{"class":33,"line":84},[31,12815,87],{"class":37},[31,12817,12818,12821,12823,12825,12827,12830],{"class":33,"line":90},[31,12819,12820],{"class":58},"    ParamServer",[31,12822,96],{"class":62},[31,12824,99],{"class":58},[31,12826,102],{"class":62},[31,12828,12829],{"class":41},"\"param_server_node_cpp\"",[31,12831,108],{"class":62},[31,12833,12834],{"class":33,"line":111},[31,12835,114],{"class":62},[31,12837,12838,12840,12842,12844,12846,12848,12850,12853],{"class":33,"line":117},[31,12839,120],{"class":58},[31,12841,102],{"class":62},[31,12843,126],{"class":125},[31,12845,129],{"class":62},[31,12847,132],{"class":58},[31,12849,135],{"class":62},[31,12851,12852],{"class":41},"\"参数服务端搭建!\"",[31,12854,141],{"class":62},[31,12856,12857],{"class":33,"line":144},[31,12858,147],{"class":62},[31,12860,12861],{"class":33,"line":150},[31,12862,153],{"class":62},[31,12864,12865],{"class":33,"line":156},[31,12866,49],{"emptyLinePlaceholder":48},[31,12868,12869,12871,12873,12875,12877,12879,12881,12883,12885,12887],{"class":33,"line":161},[31,12870,164],{"class":37},[31,12872,167],{"class":58},[31,12874,102],{"class":62},[31,12876,164],{"class":37},[31,12878,175],{"class":174},[31,12880,178],{"class":62},[31,12882,181],{"class":37},[31,12884,184],{"class":37},[31,12886,187],{"class":174},[31,12888,108],{"class":62},[31,12890,12891],{"class":33,"line":192},[31,12892,81],{"class":62},[31,12894,12895,12897,12899,12901],{"class":33,"line":197},[31,12896,200],{"class":58},[31,12898,72],{"class":62},[31,12900,205],{"class":58},[31,12902,208],{"class":62},[31,12904,12905],{"class":33,"line":211},[31,12906,49],{"emptyLinePlaceholder":48},[31,12908,12909,12911,12913,12915,12917,12919,12921,12923,12926],{"class":33,"line":216},[31,12910,4834],{"class":37},[31,12912,12380],{"class":62},[31,12914,1359],{"class":37},[31,12916,1269],{"class":58},[31,12918,72],{"class":62},[31,12920,233],{"class":58},[31,12922,236],{"class":62},[31,12924,12925],{"class":58},"ParamServer",[31,12927,4853],{"class":62},[31,12929,12930],{"class":33,"line":245},[31,12931,49],{"emptyLinePlaceholder":48},[31,12933,12934,12936,12938,12940],{"class":33,"line":250},[31,12935,200],{"class":58},[31,12937,72],{"class":62},[31,12939,223],{"class":58},[31,12941,12431],{"class":62},[31,12943,12944],{"class":33,"line":263},[31,12945,49],{"emptyLinePlaceholder":48},[31,12947,12948,12950,12952,12954],{"class":33,"line":275},[31,12949,200],{"class":58},[31,12951,72],{"class":62},[31,12953,257],{"class":58},[31,12955,260],{"class":62},[31,12957,12958,12960,12962],{"class":33,"line":494},[31,12959,266],{"class":37},[31,12961,269],{"class":125},[31,12963,272],{"class":62},[31,12965,12966],{"class":33,"line":501},[31,12967,278],{"class":62},[31,12969,12970,12972],{"class":33,"line":509},[31,12971,38],{"class":37},[31,12973,42],{"class":41},[31,12975,12976],{"class":33,"line":517},[31,12977,49],{"emptyLinePlaceholder":48},[31,12979,12980,12982,12985,12987,12989,12991,12993],{"class":33,"line":523},[31,12981,55],{"class":37},[31,12983,12984],{"class":58}," ParamClient",[31,12986,63],{"class":62},[31,12988,66],{"class":37},[31,12990,69],{"class":58},[31,12992,72],{"class":62},[31,12994,75],{"class":58},[31,12996,12997],{"class":33,"line":529},[31,12998,81],{"class":62},[31,13000,13001],{"class":33,"line":540},[31,13002,87],{"class":37},[31,13004,13005,13008,13010,13012,13014,13017],{"class":33,"line":546},[31,13006,13007],{"class":58},"    ParamClient",[31,13009,96],{"class":62},[31,13011,99],{"class":58},[31,13013,102],{"class":62},[31,13015,13016],{"class":41},"\"param_client_node_cpp\"",[31,13018,108],{"class":62},[31,13020,13021],{"class":33,"line":1640},[31,13022,114],{"class":62},[31,13024,13025,13027,13029,13031,13033,13035,13037,13040],{"class":33,"line":1645},[31,13026,120],{"class":58},[31,13028,102],{"class":62},[31,13030,126],{"class":125},[31,13032,129],{"class":62},[31,13034,132],{"class":58},[31,13036,135],{"class":62},[31,13038,13039],{"class":41},"\"参数客户端搭建!\"",[31,13041,141],{"class":62},[31,13043,13044],{"class":33,"line":1656},[31,13045,147],{"class":62},[31,13047,13048],{"class":33,"line":1661},[31,13049,153],{"class":62},[31,13051,13052],{"class":33,"line":1684},[31,13053,49],{"emptyLinePlaceholder":48},[31,13055,13056,13058,13060,13062,13064,13066,13068,13070,13072,13074],{"class":33,"line":1689},[31,13057,164],{"class":37},[31,13059,167],{"class":58},[31,13061,102],{"class":62},[31,13063,164],{"class":37},[31,13065,175],{"class":174},[31,13067,178],{"class":62},[31,13069,181],{"class":37},[31,13071,184],{"class":37},[31,13073,187],{"class":174},[31,13075,108],{"class":62},[31,13077,13078],{"class":33,"line":1700},[31,13079,81],{"class":62},[31,13081,13082,13084,13086,13088],{"class":33,"line":1709},[31,13083,200],{"class":58},[31,13085,72],{"class":62},[31,13087,205],{"class":58},[31,13089,208],{"class":62},[31,13091,13092],{"class":33,"line":3790},[31,13093,49],{"emptyLinePlaceholder":48},[31,13095,13096,13098,13100,13102,13104,13106,13108,13110,13113],{"class":33,"line":3801},[31,13097,4834],{"class":37},[31,13099,12380],{"class":62},[31,13101,1359],{"class":37},[31,13103,1269],{"class":58},[31,13105,72],{"class":62},[31,13107,233],{"class":58},[31,13109,236],{"class":62},[31,13111,13112],{"class":58},"ParamClient",[31,13114,4853],{"class":62},[31,13116,13117],{"class":33,"line":3810},[31,13118,49],{"emptyLinePlaceholder":48},[31,13120,13121,13123,13125,13127],{"class":33,"line":6840},[31,13122,200],{"class":58},[31,13124,72],{"class":62},[31,13126,223],{"class":58},[31,13128,12431],{"class":62},[31,13130,13131],{"class":33,"line":6849},[31,13132,49],{"emptyLinePlaceholder":48},[31,13134,13135,13137,13139,13141],{"class":33,"line":6854},[31,13136,200],{"class":58},[31,13138,72],{"class":62},[31,13140,257],{"class":58},[31,13142,260],{"class":62},[31,13144,13145,13147,13149],{"class":33,"line":6865},[31,13146,266],{"class":37},[31,13148,269],{"class":125},[31,13150,272],{"class":62},[31,13152,13153],{"class":33,"line":6870},[31,13154,278],{"class":62},[14,13156,13157],{},[17,13158],{"alt":19,"src":13159},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage783.webp",[14,13161,13162],{},[17,13163],{"alt":19,"src":13164},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage784.webp",[14,13166,13167],{},[17,13168],{"alt":19,"src":13169},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage785.webp",[14,13171,13172],{},[17,13173],{"alt":19,"src":13174},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage786.webp",[560,13176],{},[14,13178,13179],{},[17,13180],{"alt":19,"src":13181},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage787.webp",[14,13183,13184],{},[17,13185],{"alt":19,"src":13186},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage788.webp",[14,13188,13189],{},[17,13190],{"alt":19,"src":13191},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage789.webp",[14,13193,13194],{},"链式编程。",[14,13196,13197],{},"一个普通的节点就可以当参数服务端，不需要另行创建参数服务端。",[14,13199,13200],{},[17,13201],{"alt":19,"src":13202},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage790.webp",[14,13204,13205],{},[17,13206],{"alt":19,"src":13207},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage791.webp",[22,13209,13211],{"className":24,"code":13210,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\",rclcpp::NodeOptions().allow_undeclared_parameters(true))\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n\n    void create_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------增操作--------------\");\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------查操作--------------\");\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------改操作--------------\");\n    }\n\n    void delete_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------删操作--------------\");\n    }\n\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  node->create_param();\n  node->get_param();\n  node->update_param();\n  node->delete_param();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,13212,13213,13219,13223,13239,13243,13247,13282,13286,13304,13308,13312,13321,13325,13344,13348,13352,13361,13365,13384,13388,13392,13401,13405,13424,13428,13432,13441,13445,13464,13468,13472,13476,13480,13502,13506,13516,13520,13540,13544,13553,13562,13571,13580,13584,13594,13598,13608,13616],{"__ignoreMap":19},[31,13214,13215,13217],{"class":33,"line":34},[31,13216,38],{"class":37},[31,13218,42],{"class":41},[31,13220,13221],{"class":33,"line":45},[31,13222,49],{"emptyLinePlaceholder":48},[31,13224,13225,13227,13229,13231,13233,13235,13237],{"class":33,"line":52},[31,13226,55],{"class":37},[31,13228,12797],{"class":58},[31,13230,63],{"class":62},[31,13232,66],{"class":37},[31,13234,69],{"class":58},[31,13236,72],{"class":62},[31,13238,75],{"class":58},[31,13240,13241],{"class":33,"line":78},[31,13242,81],{"class":62},[31,13244,13245],{"class":33,"line":84},[31,13246,87],{"class":37},[31,13248,13249,13251,13253,13255,13257,13259,13261,13263,13265,13268,13271,13274,13276,13279],{"class":33,"line":90},[31,13250,12820],{"class":58},[31,13252,96],{"class":62},[31,13254,99],{"class":58},[31,13256,102],{"class":62},[31,13258,12829],{"class":41},[31,13260,1389],{"class":62},[31,13262,4086],{"class":58},[31,13264,72],{"class":62},[31,13266,13267],{"class":58},"NodeOptions",[31,13269,13270],{"class":62},"().",[31,13272,13273],{"class":58},"allow_undeclared_parameters",[31,13275,102],{"class":62},[31,13277,13278],{"class":125},"true",[31,13280,13281],{"class":62},"))\n",[31,13283,13284],{"class":33,"line":111},[31,13285,114],{"class":62},[31,13287,13288,13290,13292,13294,13296,13298,13300,13302],{"class":33,"line":117},[31,13289,120],{"class":58},[31,13291,102],{"class":62},[31,13293,126],{"class":125},[31,13295,129],{"class":62},[31,13297,132],{"class":58},[31,13299,135],{"class":62},[31,13301,12852],{"class":41},[31,13303,141],{"class":62},[31,13305,13306],{"class":33,"line":144},[31,13307,147],{"class":62},[31,13309,13310],{"class":33,"line":150},[31,13311,49],{"emptyLinePlaceholder":48},[31,13313,13314,13316,13319],{"class":33,"line":156},[31,13315,1454],{"class":37},[31,13317,13318],{"class":58}," create_param",[31,13320,1460],{"class":62},[31,13322,13323],{"class":33,"line":161},[31,13324,114],{"class":62},[31,13326,13327,13329,13331,13333,13335,13337,13339,13342],{"class":33,"line":192},[31,13328,120],{"class":58},[31,13330,102],{"class":62},[31,13332,126],{"class":125},[31,13334,129],{"class":62},[31,13336,132],{"class":58},[31,13338,135],{"class":62},[31,13340,13341],{"class":41},"\"-------------增操作--------------\"",[31,13343,141],{"class":62},[31,13345,13346],{"class":33,"line":197},[31,13347,147],{"class":62},[31,13349,13350],{"class":33,"line":211},[31,13351,49],{"emptyLinePlaceholder":48},[31,13353,13354,13356,13359],{"class":33,"line":216},[31,13355,1454],{"class":37},[31,13357,13358],{"class":58}," get_param",[31,13360,1460],{"class":62},[31,13362,13363],{"class":33,"line":245},[31,13364,114],{"class":62},[31,13366,13367,13369,13371,13373,13375,13377,13379,13382],{"class":33,"line":250},[31,13368,120],{"class":58},[31,13370,102],{"class":62},[31,13372,126],{"class":125},[31,13374,129],{"class":62},[31,13376,132],{"class":58},[31,13378,135],{"class":62},[31,13380,13381],{"class":41},"\"-------------查操作--------------\"",[31,13383,141],{"class":62},[31,13385,13386],{"class":33,"line":263},[31,13387,147],{"class":62},[31,13389,13390],{"class":33,"line":275},[31,13391,49],{"emptyLinePlaceholder":48},[31,13393,13394,13396,13399],{"class":33,"line":494},[31,13395,1454],{"class":37},[31,13397,13398],{"class":58}," update_param",[31,13400,1460],{"class":62},[31,13402,13403],{"class":33,"line":501},[31,13404,114],{"class":62},[31,13406,13407,13409,13411,13413,13415,13417,13419,13422],{"class":33,"line":509},[31,13408,120],{"class":58},[31,13410,102],{"class":62},[31,13412,126],{"class":125},[31,13414,129],{"class":62},[31,13416,132],{"class":58},[31,13418,135],{"class":62},[31,13420,13421],{"class":41},"\"-------------改操作--------------\"",[31,13423,141],{"class":62},[31,13425,13426],{"class":33,"line":517},[31,13427,147],{"class":62},[31,13429,13430],{"class":33,"line":523},[31,13431,49],{"emptyLinePlaceholder":48},[31,13433,13434,13436,13439],{"class":33,"line":529},[31,13435,1454],{"class":37},[31,13437,13438],{"class":58}," delete_param",[31,13440,1460],{"class":62},[31,13442,13443],{"class":33,"line":540},[31,13444,114],{"class":62},[31,13446,13447,13449,13451,13453,13455,13457,13459,13462],{"class":33,"line":546},[31,13448,120],{"class":58},[31,13450,102],{"class":62},[31,13452,126],{"class":125},[31,13454,129],{"class":62},[31,13456,132],{"class":58},[31,13458,135],{"class":62},[31,13460,13461],{"class":41},"\"-------------删操作--------------\"",[31,13463,141],{"class":62},[31,13465,13466],{"class":33,"line":1640},[31,13467,147],{"class":62},[31,13469,13470],{"class":33,"line":1645},[31,13471,49],{"emptyLinePlaceholder":48},[31,13473,13474],{"class":33,"line":1656},[31,13475,153],{"class":62},[31,13477,13478],{"class":33,"line":1661},[31,13479,49],{"emptyLinePlaceholder":48},[31,13481,13482,13484,13486,13488,13490,13492,13494,13496,13498,13500],{"class":33,"line":1684},[31,13483,164],{"class":37},[31,13485,167],{"class":58},[31,13487,102],{"class":62},[31,13489,164],{"class":37},[31,13491,175],{"class":174},[31,13493,178],{"class":62},[31,13495,181],{"class":37},[31,13497,184],{"class":37},[31,13499,187],{"class":174},[31,13501,108],{"class":62},[31,13503,13504],{"class":33,"line":1689},[31,13505,81],{"class":62},[31,13507,13508,13510,13512,13514],{"class":33,"line":1700},[31,13509,200],{"class":58},[31,13511,72],{"class":62},[31,13513,205],{"class":58},[31,13515,208],{"class":62},[31,13517,13518],{"class":33,"line":1709},[31,13519,49],{"emptyLinePlaceholder":48},[31,13521,13522,13524,13526,13528,13530,13532,13534,13536,13538],{"class":33,"line":3790},[31,13523,4834],{"class":37},[31,13525,12380],{"class":62},[31,13527,1359],{"class":37},[31,13529,1269],{"class":58},[31,13531,72],{"class":62},[31,13533,233],{"class":58},[31,13535,236],{"class":62},[31,13537,12925],{"class":58},[31,13539,4853],{"class":62},[31,13541,13542],{"class":33,"line":3801},[31,13543,49],{"emptyLinePlaceholder":48},[31,13545,13546,13548,13551],{"class":33,"line":3810},[31,13547,12403],{"class":62},[31,13549,13550],{"class":58},"create_param",[31,13552,260],{"class":62},[31,13554,13555,13557,13560],{"class":33,"line":6840},[31,13556,12403],{"class":62},[31,13558,13559],{"class":58},"get_param",[31,13561,260],{"class":62},[31,13563,13564,13566,13569],{"class":33,"line":6849},[31,13565,12403],{"class":62},[31,13567,13568],{"class":58},"update_param",[31,13570,260],{"class":62},[31,13572,13573,13575,13578],{"class":33,"line":6854},[31,13574,12403],{"class":62},[31,13576,13577],{"class":58},"delete_param",[31,13579,260],{"class":62},[31,13581,13582],{"class":33,"line":6865},[31,13583,49],{"emptyLinePlaceholder":48},[31,13585,13586,13588,13590,13592],{"class":33,"line":6870},[31,13587,200],{"class":58},[31,13589,72],{"class":62},[31,13591,223],{"class":58},[31,13593,12431],{"class":62},[31,13595,13596],{"class":33,"line":6891},[31,13597,49],{"emptyLinePlaceholder":48},[31,13599,13600,13602,13604,13606],{"class":33,"line":6896},[31,13601,200],{"class":58},[31,13603,72],{"class":62},[31,13605,257],{"class":58},[31,13607,260],{"class":62},[31,13609,13610,13612,13614],{"class":33,"line":6915},[31,13611,266],{"class":37},[31,13613,269],{"class":125},[31,13615,272],{"class":62},[31,13617,13618],{"class":33,"line":6920},[31,13619,278],{"class":62},[560,13621],{},[14,13623,13624],{},[17,13625],{"alt":19,"src":13626},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage792.webp",[14,13628,13629],{},[17,13630],{"alt":19,"src":13631},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage793.webp",[14,13633,13634],{},[17,13635],{"alt":19,"src":13636},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage794.webp",[14,13638,13639],{},"ros2 param list",[14,13641,13642],{},"查询所有节点里的所有参数",[14,13644,13645],{},[17,13646],{"alt":19,"src":13647},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage795.webp",[14,13649,13650],{},"ros2 param get \u002F节点名称 参数键名 来查看参数的值",[560,13652],{},[14,13654,13655],{},[17,13656],{"alt":19,"src":13657},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage796.webp",[14,13659,13660],{},"可以通过键来查询参数的值",[14,13662,13663],{},[17,13664],{"alt":19,"src":13665},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage797.webp",[14,13667,13668],{},"带复数形式的函数可以通过由键组成的容器来获取一些参数对象。",[14,13670,13671],{},[17,13672],{"alt":19,"src":13673},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage798.webp",[14,13675,13676],{},"来判断是否有该参数的，入口参数也是键，返回值是布尔值。",[14,13678,13679],{},[17,13680],{"alt":19,"src":13681},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage799.webp",[14,13683,13684],{},[17,13685],{"alt":19,"src":13686},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage800.webp",[14,13688,13689],{},[17,13690],{"alt":19,"src":13691},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage801.webp",[14,13693,13694],{},[17,13695],{"alt":19,"src":13696},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage802.webp",[14,13698,13699],{},[17,13700],{"alt":19,"src":13701},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage803.webp",[14,13703,13704],{},[17,13705],{"alt":19,"src":13706},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage804.webp",[560,13708],{},[14,13710,13711],{},[17,13712],{"alt":19,"src":13713},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage805.webp",[14,13715,13716],{},"需要传入parameter对象。",[14,13718,13719],{},[17,13720],{"alt":19,"src":13721},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage806.webp",[14,13723,13724],{},"我们覆盖掉旧值即可。",[14,13726,13727],{},[17,13728],{"alt":19,"src":13729},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage807.webp",[14,13731,13732],{},[17,13733],{"alt":19,"src":13734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage808.webp",[14,13736,13737],{},"通过set_parameter也可以创建参数,但是必须声明allow_undeclared_parameters(true)。",[14,13739,13740],{},[17,13741],{"alt":19,"src":13742},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage809.webp",[14,13744,13745],{},[17,13746],{"alt":19,"src":13747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage810.webp",[14,13749,13750],{},[17,13751],{"alt":19,"src":13752},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage811.webp",[560,13754],{},[14,13756,13757],{},[17,13758],{"alt":19,"src":13759},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage812.webp",[14,13761,13762],{},[17,13763],{"alt":19,"src":13764},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage813.webp",[14,13766,13767],{},"这种声明的参数不可以被删除，只能删除未声明但设置的。",[14,13769,13770],{},[17,13771],{"alt":19,"src":13772},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage814.webp",[14,13774,13775],{},[17,13776],{"alt":19,"src":13777},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage815.webp",[22,13779,13781],{"className":24,"code":13780,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\",rclcpp::NodeOptions().allow_undeclared_parameters(true))\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n\n    void create_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------增操作--------------\");\n\n      this->declare_parameter(\"car_name\",\"ER\");\n      this->declare_parameter(\"width\",1.55);\n      this->declare_parameter(\"wheels\",5);\n\n      this->set_parameter(rclcpp::Parameter(\"height\",2.00));\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------查操作--------------\");\n\n      auto car = this->get_parameter(\"car_name\");\n      RCLCPP_INFO(this->get_logger(),\"key = %s,value = %s\",car.get_name().c_str(),car.as_string().c_str()); \n\n      auto params = this->get_parameters({\"car_name\",\"width\",\"wheels\"});\n      for(auto &¶m : params)\n      {\n        RCLCPP_INFO(this->get_logger(),\"key = %s,value = %s\",param.get_name().c_str(),param.value_to_string().c_str());\n      }\n      bool car_name_flag = this->has_parameter(\"car_name\");\n      bool height_flag = this->has_parameter(\"height\");\n      RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",car_name_flag);\n      RCLCPP_INFO(this->get_logger(),\"是否包含height? 答案:%d\",height_flag);\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------改操作--------------\");\n      this->set_parameter(rclcpp::Parameter(\"width\",1.85));\n      RCLCPP_INFO(this->get_logger(),\"width = %.2f\",this->get_parameter(\"width\").as_double());\n    }\n\n    void delete_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------删操作--------------\");\n    \u002F\u002F   this->undeclare_parameter(\"car_name\");\n    \u002F\u002F   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n      this->undeclare_parameter(\"height\");\n      RCLCPP_INFO(this->get_logger(),\"是否包含height? 答案:%d\",this->has_parameter(\"height\"));\n    }\n\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  node->create_param();\n  node->get_param();\n  node->update_param();\n  node->delete_param();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,13782,13783,13789,13793,13809,13813,13817,13847,13851,13869,13873,13877,13885,13889,13907,13911,13933,13953,13973,13977,14007,14011,14015,14023,14027,14045,14049,14071,14120,14124,14156,14170,14174,14219,14223,14246,14267,14291,14315,14319,14323,14331,14335,14353,14380,14421,14425,14429,14437,14441,14459,14464,14469,14484,14518,14522,14526,14530,14534,14556,14560,14570,14574,14594,14598,14606,14614,14622,14630,14634,14644,14648,14658,14666],{"__ignoreMap":19},[31,13784,13785,13787],{"class":33,"line":34},[31,13786,38],{"class":37},[31,13788,42],{"class":41},[31,13790,13791],{"class":33,"line":45},[31,13792,49],{"emptyLinePlaceholder":48},[31,13794,13795,13797,13799,13801,13803,13805,13807],{"class":33,"line":52},[31,13796,55],{"class":37},[31,13798,12797],{"class":58},[31,13800,63],{"class":62},[31,13802,66],{"class":37},[31,13804,69],{"class":58},[31,13806,72],{"class":62},[31,13808,75],{"class":58},[31,13810,13811],{"class":33,"line":78},[31,13812,81],{"class":62},[31,13814,13815],{"class":33,"line":84},[31,13816,87],{"class":37},[31,13818,13819,13821,13823,13825,13827,13829,13831,13833,13835,13837,13839,13841,13843,13845],{"class":33,"line":90},[31,13820,12820],{"class":58},[31,13822,96],{"class":62},[31,13824,99],{"class":58},[31,13826,102],{"class":62},[31,13828,12829],{"class":41},[31,13830,1389],{"class":62},[31,13832,4086],{"class":58},[31,13834,72],{"class":62},[31,13836,13267],{"class":58},[31,13838,13270],{"class":62},[31,13840,13273],{"class":58},[31,13842,102],{"class":62},[31,13844,13278],{"class":125},[31,13846,13281],{"class":62},[31,13848,13849],{"class":33,"line":111},[31,13850,114],{"class":62},[31,13852,13853,13855,13857,13859,13861,13863,13865,13867],{"class":33,"line":117},[31,13854,120],{"class":58},[31,13856,102],{"class":62},[31,13858,126],{"class":125},[31,13860,129],{"class":62},[31,13862,132],{"class":58},[31,13864,135],{"class":62},[31,13866,12852],{"class":41},[31,13868,141],{"class":62},[31,13870,13871],{"class":33,"line":144},[31,13872,147],{"class":62},[31,13874,13875],{"class":33,"line":150},[31,13876,49],{"emptyLinePlaceholder":48},[31,13878,13879,13881,13883],{"class":33,"line":156},[31,13880,1454],{"class":37},[31,13882,13318],{"class":58},[31,13884,1460],{"class":62},[31,13886,13887],{"class":33,"line":161},[31,13888,114],{"class":62},[31,13890,13891,13893,13895,13897,13899,13901,13903,13905],{"class":33,"line":192},[31,13892,120],{"class":58},[31,13894,102],{"class":62},[31,13896,126],{"class":125},[31,13898,129],{"class":62},[31,13900,132],{"class":58},[31,13902,135],{"class":62},[31,13904,13341],{"class":41},[31,13906,141],{"class":62},[31,13908,13909],{"class":33,"line":197},[31,13910,49],{"emptyLinePlaceholder":48},[31,13912,13913,13916,13918,13921,13923,13926,13928,13931],{"class":33,"line":211},[31,13914,13915],{"class":125},"      this",[31,13917,129],{"class":62},[31,13919,13920],{"class":58},"declare_parameter",[31,13922,102],{"class":62},[31,13924,13925],{"class":41},"\"car_name\"",[31,13927,1389],{"class":62},[31,13929,13930],{"class":41},"\"ER\"",[31,13932,141],{"class":62},[31,13934,13935,13937,13939,13941,13943,13946,13948,13951],{"class":33,"line":216},[31,13936,13915],{"class":125},[31,13938,129],{"class":62},[31,13940,13920],{"class":58},[31,13942,102],{"class":62},[31,13944,13945],{"class":41},"\"width\"",[31,13947,1389],{"class":62},[31,13949,13950],{"class":125},"1.55",[31,13952,141],{"class":62},[31,13954,13955,13957,13959,13961,13963,13966,13968,13971],{"class":33,"line":245},[31,13956,13915],{"class":125},[31,13958,129],{"class":62},[31,13960,13920],{"class":58},[31,13962,102],{"class":62},[31,13964,13965],{"class":41},"\"wheels\"",[31,13967,1389],{"class":62},[31,13969,13970],{"class":125},"5",[31,13972,141],{"class":62},[31,13974,13975],{"class":33,"line":250},[31,13976,49],{"emptyLinePlaceholder":48},[31,13978,13979,13981,13983,13986,13988,13990,13992,13995,13997,14000,14002,14005],{"class":33,"line":263},[31,13980,13915],{"class":125},[31,13982,129],{"class":62},[31,13984,13985],{"class":58},"set_parameter",[31,13987,102],{"class":62},[31,13989,4086],{"class":58},[31,13991,72],{"class":62},[31,13993,13994],{"class":58},"Parameter",[31,13996,102],{"class":62},[31,13998,13999],{"class":41},"\"height\"",[31,14001,1389],{"class":62},[31,14003,14004],{"class":125},"2.00",[31,14006,1440],{"class":62},[31,14008,14009],{"class":33,"line":275},[31,14010,147],{"class":62},[31,14012,14013],{"class":33,"line":494},[31,14014,49],{"emptyLinePlaceholder":48},[31,14016,14017,14019,14021],{"class":33,"line":501},[31,14018,1454],{"class":37},[31,14020,13358],{"class":58},[31,14022,1460],{"class":62},[31,14024,14025],{"class":33,"line":509},[31,14026,114],{"class":62},[31,14028,14029,14031,14033,14035,14037,14039,14041,14043],{"class":33,"line":517},[31,14030,120],{"class":58},[31,14032,102],{"class":62},[31,14034,126],{"class":125},[31,14036,129],{"class":62},[31,14038,132],{"class":58},[31,14040,135],{"class":62},[31,14042,13381],{"class":41},[31,14044,141],{"class":62},[31,14046,14047],{"class":33,"line":523},[31,14048,49],{"emptyLinePlaceholder":48},[31,14050,14051,14053,14056,14058,14060,14062,14065,14067,14069],{"class":33,"line":529},[31,14052,1469],{"class":37},[31,14054,14055],{"class":62}," car ",[31,14057,1359],{"class":37},[31,14059,1362],{"class":125},[31,14061,129],{"class":62},[31,14063,14064],{"class":58},"get_parameter",[31,14066,102],{"class":62},[31,14068,13925],{"class":41},[31,14070,141],{"class":62},[31,14072,14073,14075,14077,14079,14081,14083,14085,14088,14090,14093,14095,14097,14100,14103,14105,14107,14110,14113,14115,14117],{"class":33,"line":540},[31,14074,120],{"class":58},[31,14076,102],{"class":62},[31,14078,126],{"class":125},[31,14080,129],{"class":62},[31,14082,132],{"class":58},[31,14084,135],{"class":62},[31,14086,14087],{"class":41},"\"key = ",[31,14089,1536],{"class":125},[31,14091,14092],{"class":41},",value = ",[31,14094,1536],{"class":125},[31,14096,367],{"class":41},[31,14098,14099],{"class":62},",car.",[31,14101,14102],{"class":58},"get_name",[31,14104,13270],{"class":62},[31,14106,1544],{"class":58},[31,14108,14109],{"class":62},"(),car.",[31,14111,14112],{"class":58},"as_string",[31,14114,13270],{"class":62},[31,14116,1544],{"class":58},[31,14118,14119],{"class":62},"()); \n",[31,14121,14122],{"class":33,"line":546},[31,14123,49],{"emptyLinePlaceholder":48},[31,14125,14126,14128,14131,14133,14135,14137,14140,14143,14145,14147,14149,14151,14153],{"class":33,"line":1640},[31,14127,1469],{"class":37},[31,14129,14130],{"class":62}," params ",[31,14132,1359],{"class":37},[31,14134,1362],{"class":125},[31,14136,129],{"class":62},[31,14138,14139],{"class":58},"get_parameters",[31,14141,14142],{"class":62},"({",[31,14144,13925],{"class":41},[31,14146,1389],{"class":62},[31,14148,13945],{"class":41},[31,14150,1389],{"class":62},[31,14152,13965],{"class":41},[31,14154,14155],{"class":62},"});\n",[31,14157,14158,14160,14162,14165,14167],{"class":33,"line":1645},[31,14159,10218],{"class":37},[31,14161,102],{"class":62},[31,14163,14164],{"class":37},"auto",[31,14166,2267],{"class":37},[31,14168,14169],{"class":62},"¶m : params)\n",[31,14171,14172],{"class":33,"line":1656},[31,14173,6629],{"class":62},[31,14175,14176,14178,14180,14182,14184,14186,14188,14190,14192,14194,14196,14198,14201,14203,14205,14207,14210,14213,14215,14217],{"class":33,"line":1661},[31,14177,1869],{"class":58},[31,14179,102],{"class":62},[31,14181,126],{"class":125},[31,14183,129],{"class":62},[31,14185,132],{"class":58},[31,14187,135],{"class":62},[31,14189,14087],{"class":41},[31,14191,1536],{"class":125},[31,14193,14092],{"class":41},[31,14195,1536],{"class":125},[31,14197,367],{"class":41},[31,14199,14200],{"class":62},",param.",[31,14202,14102],{"class":58},[31,14204,13270],{"class":62},[31,14206,1544],{"class":58},[31,14208,14209],{"class":62},"(),param.",[31,14211,14212],{"class":58},"value_to_string",[31,14214,13270],{"class":62},[31,14216,1544],{"class":58},[31,14218,1547],{"class":62},[31,14220,14221],{"class":33,"line":1684},[31,14222,6728],{"class":62},[31,14224,14225,14228,14231,14233,14235,14237,14240,14242,14244],{"class":33,"line":1689},[31,14226,14227],{"class":37},"      bool",[31,14229,14230],{"class":62}," car_name_flag ",[31,14232,1359],{"class":37},[31,14234,1362],{"class":125},[31,14236,129],{"class":62},[31,14238,14239],{"class":58},"has_parameter",[31,14241,102],{"class":62},[31,14243,13925],{"class":41},[31,14245,141],{"class":62},[31,14247,14248,14250,14253,14255,14257,14259,14261,14263,14265],{"class":33,"line":1700},[31,14249,14227],{"class":37},[31,14251,14252],{"class":62}," height_flag ",[31,14254,1359],{"class":37},[31,14256,1362],{"class":125},[31,14258,129],{"class":62},[31,14260,14239],{"class":58},[31,14262,102],{"class":62},[31,14264,13999],{"class":41},[31,14266,141],{"class":62},[31,14268,14269,14271,14273,14275,14277,14279,14281,14284,14286,14288],{"class":33,"line":1709},[31,14270,120],{"class":58},[31,14272,102],{"class":62},[31,14274,126],{"class":125},[31,14276,129],{"class":62},[31,14278,132],{"class":58},[31,14280,135],{"class":62},[31,14282,14283],{"class":41},"\"是否包含car_name? 答案:",[31,14285,3655],{"class":125},[31,14287,367],{"class":41},[31,14289,14290],{"class":62},",car_name_flag);\n",[31,14292,14293,14295,14297,14299,14301,14303,14305,14308,14310,14312],{"class":33,"line":3790},[31,14294,120],{"class":58},[31,14296,102],{"class":62},[31,14298,126],{"class":125},[31,14300,129],{"class":62},[31,14302,132],{"class":58},[31,14304,135],{"class":62},[31,14306,14307],{"class":41},"\"是否包含height? 答案:",[31,14309,3655],{"class":125},[31,14311,367],{"class":41},[31,14313,14314],{"class":62},",height_flag);\n",[31,14316,14317],{"class":33,"line":3801},[31,14318,147],{"class":62},[31,14320,14321],{"class":33,"line":3810},[31,14322,49],{"emptyLinePlaceholder":48},[31,14324,14325,14327,14329],{"class":33,"line":6840},[31,14326,1454],{"class":37},[31,14328,13398],{"class":58},[31,14330,1460],{"class":62},[31,14332,14333],{"class":33,"line":6849},[31,14334,114],{"class":62},[31,14336,14337,14339,14341,14343,14345,14347,14349,14351],{"class":33,"line":6854},[31,14338,120],{"class":58},[31,14340,102],{"class":62},[31,14342,126],{"class":125},[31,14344,129],{"class":62},[31,14346,132],{"class":58},[31,14348,135],{"class":62},[31,14350,13421],{"class":41},[31,14352,141],{"class":62},[31,14354,14355,14357,14359,14361,14363,14365,14367,14369,14371,14373,14375,14378],{"class":33,"line":6865},[31,14356,13915],{"class":125},[31,14358,129],{"class":62},[31,14360,13985],{"class":58},[31,14362,102],{"class":62},[31,14364,4086],{"class":58},[31,14366,72],{"class":62},[31,14368,13994],{"class":58},[31,14370,102],{"class":62},[31,14372,13945],{"class":41},[31,14374,1389],{"class":62},[31,14376,14377],{"class":125},"1.85",[31,14379,1440],{"class":62},[31,14381,14382,14384,14386,14388,14390,14392,14394,14397,14399,14401,14403,14405,14407,14409,14411,14413,14416,14419],{"class":33,"line":6870},[31,14383,120],{"class":58},[31,14385,102],{"class":62},[31,14387,126],{"class":125},[31,14389,129],{"class":62},[31,14391,132],{"class":58},[31,14393,135],{"class":62},[31,14395,14396],{"class":41},"\"width = ",[31,14398,3660],{"class":125},[31,14400,367],{"class":41},[31,14402,1389],{"class":62},[31,14404,126],{"class":125},[31,14406,129],{"class":62},[31,14408,14064],{"class":58},[31,14410,102],{"class":62},[31,14412,13945],{"class":41},[31,14414,14415],{"class":62},").",[31,14417,14418],{"class":58},"as_double",[31,14420,1547],{"class":62},[31,14422,14423],{"class":33,"line":6891},[31,14424,147],{"class":62},[31,14426,14427],{"class":33,"line":6896},[31,14428,49],{"emptyLinePlaceholder":48},[31,14430,14431,14433,14435],{"class":33,"line":6915},[31,14432,1454],{"class":37},[31,14434,13438],{"class":58},[31,14436,1460],{"class":62},[31,14438,14439],{"class":33,"line":6920},[31,14440,114],{"class":62},[31,14442,14443,14445,14447,14449,14451,14453,14455,14457],{"class":33,"line":6934},[31,14444,120],{"class":58},[31,14446,102],{"class":62},[31,14448,126],{"class":125},[31,14450,129],{"class":62},[31,14452,132],{"class":58},[31,14454,135],{"class":62},[31,14456,13461],{"class":41},[31,14458,141],{"class":62},[31,14460,14461],{"class":33,"line":6939},[31,14462,14463],{"class":4828},"    \u002F\u002F   this->undeclare_parameter(\"car_name\");\n",[31,14465,14466],{"class":33,"line":6963},[31,14467,14468],{"class":4828},"    \u002F\u002F   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n",[31,14470,14471,14473,14475,14478,14480,14482],{"class":33,"line":6972},[31,14472,13915],{"class":125},[31,14474,129],{"class":62},[31,14476,14477],{"class":58},"undeclare_parameter",[31,14479,102],{"class":62},[31,14481,13999],{"class":41},[31,14483,141],{"class":62},[31,14485,14486,14488,14490,14492,14494,14496,14498,14500,14502,14504,14506,14508,14510,14512,14514,14516],{"class":33,"line":6977},[31,14487,120],{"class":58},[31,14489,102],{"class":62},[31,14491,126],{"class":125},[31,14493,129],{"class":62},[31,14495,132],{"class":58},[31,14497,135],{"class":62},[31,14499,14307],{"class":41},[31,14501,3655],{"class":125},[31,14503,367],{"class":41},[31,14505,1389],{"class":62},[31,14507,126],{"class":125},[31,14509,129],{"class":62},[31,14511,14239],{"class":58},[31,14513,102],{"class":62},[31,14515,13999],{"class":41},[31,14517,1440],{"class":62},[31,14519,14520],{"class":33,"line":6982},[31,14521,147],{"class":62},[31,14523,14524],{"class":33,"line":6993},[31,14525,49],{"emptyLinePlaceholder":48},[31,14527,14528],{"class":33,"line":7002},[31,14529,153],{"class":62},[31,14531,14532],{"class":33,"line":7663},[31,14533,49],{"emptyLinePlaceholder":48},[31,14535,14536,14538,14540,14542,14544,14546,14548,14550,14552,14554],{"class":33,"line":7668},[31,14537,164],{"class":37},[31,14539,167],{"class":58},[31,14541,102],{"class":62},[31,14543,164],{"class":37},[31,14545,175],{"class":174},[31,14547,178],{"class":62},[31,14549,181],{"class":37},[31,14551,184],{"class":37},[31,14553,187],{"class":174},[31,14555,108],{"class":62},[31,14557,14558],{"class":33,"line":7683},[31,14559,81],{"class":62},[31,14561,14562,14564,14566,14568],{"class":33,"line":7688},[31,14563,200],{"class":58},[31,14565,72],{"class":62},[31,14567,205],{"class":58},[31,14569,208],{"class":62},[31,14571,14572],{"class":33,"line":7701},[31,14573,49],{"emptyLinePlaceholder":48},[31,14575,14576,14578,14580,14582,14584,14586,14588,14590,14592],{"class":33,"line":7706},[31,14577,4834],{"class":37},[31,14579,12380],{"class":62},[31,14581,1359],{"class":37},[31,14583,1269],{"class":58},[31,14585,72],{"class":62},[31,14587,233],{"class":58},[31,14589,236],{"class":62},[31,14591,12925],{"class":58},[31,14593,4853],{"class":62},[31,14595,14596],{"class":33,"line":7729},[31,14597,49],{"emptyLinePlaceholder":48},[31,14599,14600,14602,14604],{"class":33,"line":7738},[31,14601,12403],{"class":62},[31,14603,13550],{"class":58},[31,14605,260],{"class":62},[31,14607,14608,14610,14612],{"class":33,"line":7743},[31,14609,12403],{"class":62},[31,14611,13559],{"class":58},[31,14613,260],{"class":62},[31,14615,14616,14618,14620],{"class":33,"line":7780},[31,14617,12403],{"class":62},[31,14619,13568],{"class":58},[31,14621,260],{"class":62},[31,14623,14624,14626,14628],{"class":33,"line":7785},[31,14625,12403],{"class":62},[31,14627,13577],{"class":58},[31,14629,260],{"class":62},[31,14631,14632],{"class":33,"line":7815},[31,14633,49],{"emptyLinePlaceholder":48},[31,14635,14636,14638,14640,14642],{"class":33,"line":7820},[31,14637,200],{"class":58},[31,14639,72],{"class":62},[31,14641,223],{"class":58},[31,14643,12431],{"class":62},[31,14645,14646],{"class":33,"line":7848},[31,14647,49],{"emptyLinePlaceholder":48},[31,14649,14650,14652,14654,14656],{"class":33,"line":7853},[31,14651,200],{"class":58},[31,14653,72],{"class":62},[31,14655,257],{"class":58},[31,14657,260],{"class":62},[31,14659,14660,14662,14664],{"class":33,"line":7859},[31,14661,266],{"class":37},[31,14663,269],{"class":125},[31,14665,272],{"class":62},[31,14667,14668],{"class":33,"line":7864},[31,14669,278],{"class":62},[10,14671,14673],{"id":14672},"参数服务_实验1_客户端c","参数服务_实验1_客户端(C++)",[14,14675,14676],{},[17,14677],{"alt":19,"src":14678},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage816.webp",[14,14680,14681],{},[17,14682],{"alt":19,"src":14683},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage817.webp",[14,14685,14686],{},[17,14687],{"alt":19,"src":14688},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage818.webp",[14,14690,14691],{},[17,14692],{"alt":19,"src":14693},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage819.webp",[14,14695,14696],{},[17,14697],{"alt":19,"src":14698},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage820.webp",[14,14700,14701],{},[17,14702],{"alt":19,"src":14703},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage821.webp",[14,14705,14706],{},[17,14707],{"alt":19,"src":14708},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage822.webp",[14,14710,14711],{},[17,14712],{"alt":19,"src":14713},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage823.webp",[14,14715,14716],{},[17,14717],{"alt":19,"src":14718},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage824.webp",[14,14720,14721],{},[17,14722],{"alt":19,"src":14723},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage825.webp",[14,14725,14726],{},"第一个入口参数是客户端节点对象，",[14,14728,14729],{},"第二个入口参数是需要连接的服务端的节点名称。",[14,14731,14732],{},[17,14733],{"alt":19,"src":14734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage826.webp",[14,14736,14737],{},"如果1秒钟之内连接上了就返回true，如果超时1s没连接上就返回false。",[14,14739,14740],{},[17,14741],{"alt":19,"src":14742},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage827.webp",[14,14744,14745],{},[17,14746],{"alt":19,"src":14747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage828.webp",[22,14749,14751],{"className":24,"code":14750,"language":26,"meta":19,"style":19},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass ParamClient: public rclcpp::Node\n{\n  public:\n    ParamClient():Node(\"param_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数客户端搭建!\");\n      param_client_ = std::make_sharedautolinkrclcpp::SyncParametersClientautolink(this,\"param_server_node_cpp\");\n    }\n\n    bool connect_server()\n    {\n      while(param_client_->wait_for_service(1s) != true)\n      {\n        if(rclcpp::ok() != true)\n        {\n          return false;\n        }\n        RCLCPP_INFO(this->get_logger(),\"服务连接中!\");\n      }\n      return true;\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-----------参数查询操作-------------\");\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-----------参数更新操作-------------\");\n    }\n\n  private:\n    rclcpp::SyncParametersClient::SharedPtr param_client_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CParamClient>();\n\n  bool flag = client->connect_server();\n\n  if(!flag)\n  {\n    return 0;\n  }\n\n  client->get_param();\n  client->update_param();\n  client->get_param();\n\n  \u002F\u002F rclcpp::spin(client);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,14752,14753,14759,14763,14777,14781,14797,14801,14805,14819,14823,14841,14870,14874,14878,14886,14890,14913,14917,14937,14941,14949,14953,14971,14975,14983,14987,14991,14999,15003,15022,15026,15030,15038,15042,15061,15065,15069,15073,15085,15089,15093,15115,15119,15129,15133,15153,15157,15171,15175,15187,15191,15199,15203,15207,15216,15224,15232,15236,15241,15245,15255,15263],{"__ignoreMap":19},[31,14754,14755,14757],{"class":33,"line":34},[31,14756,38],{"class":37},[31,14758,42],{"class":41},[31,14760,14761],{"class":33,"line":45},[31,14762,49],{"emptyLinePlaceholder":48},[31,14764,14765,14767,14769,14771,14773,14775],{"class":33,"line":52},[31,14766,1263],{"class":37},[31,14768,1266],{"class":37},[31,14770,1269],{"class":58},[31,14772,72],{"class":62},[31,14774,1274],{"class":58},[31,14776,272],{"class":62},[31,14778,14779],{"class":33,"line":78},[31,14780,49],{"emptyLinePlaceholder":48},[31,14782,14783,14785,14787,14789,14791,14793,14795],{"class":33,"line":84},[31,14784,55],{"class":37},[31,14786,12984],{"class":58},[31,14788,63],{"class":62},[31,14790,66],{"class":37},[31,14792,69],{"class":58},[31,14794,72],{"class":62},[31,14796,75],{"class":58},[31,14798,14799],{"class":33,"line":90},[31,14800,81],{"class":62},[31,14802,14803],{"class":33,"line":111},[31,14804,87],{"class":37},[31,14806,14807,14809,14811,14813,14815,14817],{"class":33,"line":117},[31,14808,13007],{"class":58},[31,14810,96],{"class":62},[31,14812,99],{"class":58},[31,14814,102],{"class":62},[31,14816,13016],{"class":41},[31,14818,108],{"class":62},[31,14820,14821],{"class":33,"line":144},[31,14822,114],{"class":62},[31,14824,14825,14827,14829,14831,14833,14835,14837,14839],{"class":33,"line":150},[31,14826,120],{"class":58},[31,14828,102],{"class":62},[31,14830,126],{"class":125},[31,14832,129],{"class":62},[31,14834,132],{"class":58},[31,14836,135],{"class":62},[31,14838,13039],{"class":41},[31,14840,141],{"class":62},[31,14842,14843,14846,14848,14850,14852,14855,14857,14860,14862,14864,14866,14868],{"class":33,"line":156},[31,14844,14845],{"class":62},"      param_client_ ",[31,14847,1359],{"class":37},[31,14849,1269],{"class":58},[31,14851,72],{"class":62},[31,14853,14854],{"class":58},"make_sharedautolinkrclcpp",[31,14856,72],{"class":62},[31,14858,14859],{"class":58},"SyncParametersClientautolink",[31,14861,102],{"class":62},[31,14863,126],{"class":125},[31,14865,1389],{"class":62},[31,14867,12829],{"class":41},[31,14869,141],{"class":62},[31,14871,14872],{"class":33,"line":161},[31,14873,147],{"class":62},[31,14875,14876],{"class":33,"line":192},[31,14877,49],{"emptyLinePlaceholder":48},[31,14879,14880,14882,14884],{"class":33,"line":197},[31,14881,6588],{"class":37},[31,14883,6591],{"class":58},[31,14885,1460],{"class":62},[31,14887,14888],{"class":33,"line":211},[31,14889,114],{"class":62},[31,14891,14892,14894,14897,14899,14901,14903,14905,14907,14909,14911],{"class":33,"line":216},[31,14893,6602],{"class":37},[31,14895,14896],{"class":62},"(param_client_->",[31,14898,6608],{"class":58},[31,14900,102],{"class":62},[31,14902,1413],{"class":125},[31,14904,1416],{"class":37},[31,14906,6617],{"class":62},[31,14908,5898],{"class":37},[31,14910,6622],{"class":125},[31,14912,108],{"class":62},[31,14914,14915],{"class":33,"line":245},[31,14916,6629],{"class":62},[31,14918,14919,14921,14923,14925,14927,14929,14931,14933,14935],{"class":33,"line":250},[31,14920,6661],{"class":37},[31,14922,102],{"class":62},[31,14924,4086],{"class":58},[31,14926,72],{"class":62},[31,14928,6670],{"class":58},[31,14930,6673],{"class":62},[31,14932,5898],{"class":37},[31,14934,6622],{"class":125},[31,14936,108],{"class":62},[31,14938,14939],{"class":33,"line":263},[31,14940,6684],{"class":62},[31,14942,14943,14945,14947],{"class":33,"line":275},[31,14944,6713],{"class":37},[31,14946,6716],{"class":125},[31,14948,272],{"class":62},[31,14950,14951],{"class":33,"line":494},[31,14952,6723],{"class":62},[31,14954,14955,14957,14959,14961,14963,14965,14967,14969],{"class":33,"line":501},[31,14956,1869],{"class":58},[31,14958,102],{"class":62},[31,14960,126],{"class":125},[31,14962,129],{"class":62},[31,14964,132],{"class":58},[31,14966,135],{"class":62},[31,14968,6650],{"class":41},[31,14970,141],{"class":62},[31,14972,14973],{"class":33,"line":509},[31,14974,6728],{"class":62},[31,14976,14977,14979,14981],{"class":33,"line":517},[31,14978,6733],{"class":37},[31,14980,6622],{"class":125},[31,14982,272],{"class":62},[31,14984,14985],{"class":33,"line":523},[31,14986,147],{"class":62},[31,14988,14989],{"class":33,"line":529},[31,14990,49],{"emptyLinePlaceholder":48},[31,14992,14993,14995,14997],{"class":33,"line":540},[31,14994,1454],{"class":37},[31,14996,13358],{"class":58},[31,14998,1460],{"class":62},[31,15000,15001],{"class":33,"line":546},[31,15002,114],{"class":62},[31,15004,15005,15007,15009,15011,15013,15015,15017,15020],{"class":33,"line":1640},[31,15006,120],{"class":58},[31,15008,102],{"class":62},[31,15010,126],{"class":125},[31,15012,129],{"class":62},[31,15014,132],{"class":58},[31,15016,135],{"class":62},[31,15018,15019],{"class":41},"\"-----------参数查询操作-------------\"",[31,15021,141],{"class":62},[31,15023,15024],{"class":33,"line":1645},[31,15025,147],{"class":62},[31,15027,15028],{"class":33,"line":1656},[31,15029,49],{"emptyLinePlaceholder":48},[31,15031,15032,15034,15036],{"class":33,"line":1661},[31,15033,1454],{"class":37},[31,15035,13398],{"class":58},[31,15037,1460],{"class":62},[31,15039,15040],{"class":33,"line":1684},[31,15041,114],{"class":62},[31,15043,15044,15046,15048,15050,15052,15054,15056,15059],{"class":33,"line":1689},[31,15045,120],{"class":58},[31,15047,102],{"class":62},[31,15049,126],{"class":125},[31,15051,129],{"class":62},[31,15053,132],{"class":58},[31,15055,135],{"class":62},[31,15057,15058],{"class":41},"\"-----------参数更新操作-------------\"",[31,15060,141],{"class":62},[31,15062,15063],{"class":33,"line":1700},[31,15064,147],{"class":62},[31,15066,15067],{"class":33,"line":1709},[31,15068,49],{"emptyLinePlaceholder":48},[31,15070,15071],{"class":33,"line":3790},[31,15072,1449],{"class":37},[31,15074,15075,15077,15079,15082],{"class":33,"line":3801},[31,15076,1567],{"class":58},[31,15078,72],{"class":62},[31,15080,15081],{"class":58},"SyncParametersClient",[31,15083,15084],{"class":62},"::SharedPtr param_client_;\n",[31,15086,15087],{"class":33,"line":3810},[31,15088,153],{"class":62},[31,15090,15091],{"class":33,"line":6840},[31,15092,49],{"emptyLinePlaceholder":48},[31,15094,15095,15097,15099,15101,15103,15105,15107,15109,15111,15113],{"class":33,"line":6849},[31,15096,164],{"class":37},[31,15098,167],{"class":58},[31,15100,102],{"class":62},[31,15102,164],{"class":37},[31,15104,175],{"class":174},[31,15106,178],{"class":62},[31,15108,181],{"class":37},[31,15110,184],{"class":37},[31,15112,187],{"class":174},[31,15114,108],{"class":62},[31,15116,15117],{"class":33,"line":6854},[31,15118,81],{"class":62},[31,15120,15121,15123,15125,15127],{"class":33,"line":6865},[31,15122,200],{"class":58},[31,15124,72],{"class":62},[31,15126,205],{"class":58},[31,15128,208],{"class":62},[31,15130,15131],{"class":33,"line":6870},[31,15132,49],{"emptyLinePlaceholder":48},[31,15134,15135,15137,15139,15141,15143,15145,15147,15149,15151],{"class":33,"line":6891},[31,15136,4834],{"class":37},[31,15138,4837],{"class":62},[31,15140,1359],{"class":37},[31,15142,1269],{"class":58},[31,15144,72],{"class":62},[31,15146,233],{"class":58},[31,15148,236],{"class":62},[31,15150,13112],{"class":58},[31,15152,4853],{"class":62},[31,15154,15155],{"class":33,"line":6896},[31,15156,49],{"emptyLinePlaceholder":48},[31,15158,15159,15161,15163,15165,15167,15169],{"class":33,"line":6915},[31,15160,6899],{"class":37},[31,15162,6902],{"class":62},[31,15164,1359],{"class":37},[31,15166,6907],{"class":62},[31,15168,6910],{"class":58},[31,15170,260],{"class":62},[31,15172,15173],{"class":33,"line":6920},[31,15174,49],{"emptyLinePlaceholder":48},[31,15176,15177,15179,15181,15184],{"class":33,"line":6934},[31,15178,5892],{"class":37},[31,15180,102],{"class":62},[31,15182,15183],{"class":37},"!",[31,15185,15186],{"class":62},"flag)\n",[31,15188,15189],{"class":33,"line":6939},[31,15190,5908],{"class":62},[31,15192,15193,15195,15197],{"class":33,"line":6963},[31,15194,1980],{"class":37},[31,15196,269],{"class":125},[31,15198,272],{"class":62},[31,15200,15201],{"class":33,"line":6972},[31,15202,543],{"class":62},[31,15204,15205],{"class":33,"line":6977},[31,15206,49],{"emptyLinePlaceholder":48},[31,15208,15209,15212,15214],{"class":33,"line":6982},[31,15210,15211],{"class":62},"  client->",[31,15213,13559],{"class":58},[31,15215,260],{"class":62},[31,15217,15218,15220,15222],{"class":33,"line":6993},[31,15219,15211],{"class":62},[31,15221,13568],{"class":58},[31,15223,260],{"class":62},[31,15225,15226,15228,15230],{"class":33,"line":7002},[31,15227,15211],{"class":62},[31,15229,13559],{"class":58},[31,15231,260],{"class":62},[31,15233,15234],{"class":33,"line":7663},[31,15235,49],{"emptyLinePlaceholder":48},[31,15237,15238],{"class":33,"line":7668},[31,15239,15240],{"class":4828},"  \u002F\u002F rclcpp::spin(client);\n",[31,15242,15243],{"class":33,"line":7683},[31,15244,49],{"emptyLinePlaceholder":48},[31,15246,15247,15249,15251,15253],{"class":33,"line":7688},[31,15248,200],{"class":58},[31,15250,72],{"class":62},[31,15252,257],{"class":58},[31,15254,260],{"class":62},[31,15256,15257,15259,15261],{"class":33,"line":7701},[31,15258,266],{"class":37},[31,15260,269],{"class":125},[31,15262,272],{"class":62},[31,15264,15265],{"class":33,"line":7706},[31,15266,278],{"class":62},[560,15268],{},[14,15270,15271],{},[17,15272],{"alt":19,"src":15273},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage829.webp",[14,15275,15276],{},[17,15277],{"alt":19,"src":15278},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage830.webp",[14,15280,15281],{},[17,15282],{"alt":19,"src":15283},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage831.webp",[14,15285,15286],{},"这些话题都是我们此节点名称下的。",[560,15288],{},[14,15290,15291],{},[17,15292],{"alt":19,"src":15293},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage832.webp",[14,15295,15296],{},[17,15297],{"alt":19,"src":15298},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage833.webp",[14,15300,15301],{},[17,15302],{"alt":19,"src":15303},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage834.webp",[14,15305,15306],{},[17,15307],{"alt":19,"src":15308},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage835.webp",[14,15310,15311],{},"要用高级for",[14,15313,15314],{},[17,15315],{"alt":19,"src":15316},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage836.webp",[14,15318,15319],{},[17,15320],{"alt":19,"src":15321},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage837.webp",[14,15323,15324],{},[17,15325],{"alt":19,"src":15326},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage838.webp",[14,15328,15329],{},[17,15330],{"alt":19,"src":15331},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage839.webp",[14,15333,15334],{},[17,15335],{"alt":19,"src":15336},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage840.webp",[14,15338,15339],{},[17,15340],{"alt":19,"src":15341},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage841.webp",[14,15343,15344],{},"入口参数填参数对象的容器。",[14,15346,15347],{},[17,15348],{"alt":19,"src":15349},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage842.webp",[14,15351,15352],{},[17,15353],{"alt":19,"src":15354},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage843.webp",[14,15356,15357],{},"我们不仅可以修改值，也可以创建新的参数，但是要保证服务端那边调用过undeclared......",[14,15359,15360],{},[17,15361],{"alt":19,"src":15362},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage844.webp",[14,15364,15365],{},[17,15366],{"alt":19,"src":15367},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage845.webp",[15369,15370,15371],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":19,"searchDepth":45,"depth":45,"links":15373},[15374,15375,15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388],{"id":12,"depth":52,"text":12},{"id":704,"depth":52,"text":704},{"id":758,"depth":52,"text":759},{"id":2430,"depth":52,"text":2430},{"id":2676,"depth":52,"text":2677},{"id":4206,"depth":52,"text":4206},{"id":4264,"depth":52,"text":4264},{"id":4290,"depth":52,"text":4291},{"id":5463,"depth":52,"text":5464},{"id":7915,"depth":52,"text":7915},{"id":8082,"depth":52,"text":8083},{"id":10756,"depth":52,"text":10757},{"id":12604,"depth":52,"text":12605},{"id":12713,"depth":52,"text":12714},{"id":14672,"depth":52,"text":14673},"4",4000000,"2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch4-si-da-tong-xin",{"title":5,"description":19},"wiki\u002F2023-12-30-ros2-tutorial\u002Fch4-四大通信","uNYJTMcc21OUMnSIYPesvc4wacHYz65K-uvVRn0GpQs",[15403,15408,15413,15419,15425,15431,15437,15443,15449,15455,15461,15467,15473,15479,15485,15491,15496,15502,15508,15509,15514,15520,15526,15532,15538],{"path":15404,"stem":15405,"title":15406,"date":15391,"chapter":1413,"chapterSort":15407,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch1-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002Fch1-ROS2介绍","ROS2介绍",1000000,{"path":15409,"stem":15410,"title":15411,"date":15391,"chapter":1392,"chapterSort":15412,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch10-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002Fch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":15414,"stem":15415,"title":15416,"date":15391,"chapter":15417,"chapterSort":15418,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-1-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":15420,"stem":15421,"title":15422,"date":15391,"chapter":15423,"chapterSort":15424,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-2-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":15426,"stem":15427,"title":15428,"date":15391,"chapter":15429,"chapterSort":15430,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-3-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":15432,"stem":15433,"title":15434,"date":15391,"chapter":15435,"chapterSort":15436,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-4-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":15438,"stem":15439,"title":15440,"date":15391,"chapter":15441,"chapterSort":15442,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":15444,"stem":15445,"title":15446,"date":15391,"chapter":15447,"chapterSort":15448,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":15450,"stem":15451,"title":15452,"date":15391,"chapter":15453,"chapterSort":15454,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch13-ros2serial","wiki\u002F2023-12-30-ros2-tutorial\u002Fch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":15456,"stem":15457,"title":15458,"date":15391,"chapter":15459,"chapterSort":15460,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch14-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch14-机器人硬件","机器人硬件","14",14000000,{"path":15462,"stem":15463,"title":15464,"date":15391,"chapter":15465,"chapterSort":15466,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch15-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002Fch15-ROS2_Control","ROS2_Control","15",15000000,{"path":15468,"stem":15469,"title":15470,"date":15391,"chapter":15471,"chapterSort":15472,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002Fch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":15474,"stem":15475,"title":15476,"date":15391,"chapter":15477,"chapterSort":15478,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":15480,"stem":15481,"title":15482,"date":15391,"chapter":15483,"chapterSort":15484,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch18-microros","wiki\u002F2023-12-30-ros2-tutorial\u002Fch18-MicroROS","MicroROS","18",18000000,{"path":15486,"stem":15487,"title":15488,"date":15391,"chapter":15489,"chapterSort":15490,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch19-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002Fch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":15492,"stem":15493,"title":15494,"date":15391,"chapter":802,"chapterSort":15495,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch2-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002Fch2-入门操作","入门操作",2000000,{"path":15497,"stem":15498,"title":15499,"date":15391,"chapter":15500,"chapterSort":15501,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch20-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002Fch20-OpenCV","OpenCV","20",20000000,{"path":15503,"stem":15504,"title":15505,"date":15391,"chapter":15506,"chapterSort":15507,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002Fch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":15398,"stem":15400,"title":5,"date":15391,"chapter":15389,"chapterSort":15390,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},{"path":15510,"stem":15511,"title":15512,"date":15391,"chapter":13970,"chapterSort":15513,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch5-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002Fch5-ROS2其他通信机制","ROS2其他通信机制",5000000,{"path":15515,"stem":15516,"title":15517,"date":15391,"chapter":15518,"chapterSort":15519,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch6-launch","wiki\u002F2023-12-30-ros2-tutorial\u002Fch6-Launch","Launch","6",6000000,{"path":15521,"stem":15522,"title":15523,"date":15391,"chapter":15524,"chapterSort":15525,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch7-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002Fch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":15527,"stem":15528,"title":15529,"date":15391,"chapter":15530,"chapterSort":15531,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch8-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002Fch8-坐标变换TF","坐标变换TF","8",8000000,{"path":15533,"stem":15534,"title":15535,"date":15391,"chapter":15536,"chapterSort":15537,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":15396},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002Fch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":15393,"stem":15539,"title":15540,"date":15391,"chapter":15541,"chapterSort":15542,"docKey":15392,"docRoot":15393,"docTitle":15394,"isWikiDoc":48,"isWikiIndex":48},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",null,0,1778666544457]