[{"data":1,"prerenderedAt":15378},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":15238},{"id":4,"title":5,"body":6,"chapter":15224,"chapterSort":15225,"date":15226,"description":19,"docKey":15227,"docRoot":15228,"docTitle":15229,"extension":15230,"isWikiDoc":48,"isWikiIndex":15231,"layout":15232,"meta":15233,"navigation":48,"path":15234,"seo":15235,"stem":15236,"wikiDepth":34,"__hash__":15237},"content/wiki/2023-12-30-ros2-tutorial/ch4-四大通信.md","四大通信",{"type":7,"value":8,"toc":15207},"minimark",[9,13,21,279,284,289,297,302,307,312,461,466,471,474,479,484,489,492,497,502,505,510,515,520,523,528,533,536,539,542,550,555,560,565,570,575,580,585,588,591,593,598,601,606,609,614,617,622,627,632,637,640,645,650,653,658,663,668,672,677,682,687,692,697,702,711,714,717,722,724,729,734,736,739,744,747,752,755,760,763,766,768,773,778,783,788,793,798,978,981,984,987,992,995,998,1001,1004,1007,1012,1017,1022,1027,1030,1033,1036,1039,1042,1047,1050,1053,1058,1063,1066,1071,1076,1081,1084,1089,1092,1097,1102,1107,1110,1115,1118,1123,1128,1133,1136,1612,1617,1620,1623,1644,1649,1652,1654,1659,1664,1669,1674,1679,1684,1689,1694,1699,1704,1889,1894,1897,1902,1905,1910,1913,1918,1923,1928,1933,1938,1941,1944,1947,1950,1953,1958,1963,1966,1971,1976,1981,1986,2328,2331,2336,2341,2346,2351,2354,2357,2360,2365,2368,2371,2376,2381,2386,2389,2394,2399,2404,2407,2412,2415,2418,2445,2450,2455,2458,2463,2468,2473,2478,2481,2486,2491,2494,2497,2500,2505,2510,2529,2534,2539,2542,2547,2550,2555,2558,2563,2566,2569,2574,2578,2583,2588,2593,2596,2601,2606,2611,2616,2619,2624,2627,2632,2811,2814,2819,2822,2827,3006,3011,3127,3132,3137,3142,3147,3149,3154,3159,3164,3169,3172,3177,3646,3651,3656,3661,3664,3669,3672,3674,3679,3684,4027,4032,4037,4040,4045,4050,4055,4060,4062,4067,4070,4075,4080,4085,4090,4095,4098,4103,4108,4113,4116,4121,4125,4130,4135,4138,4143,4148,4153,4158,4194,4196,4201,4206,4211,4214,4219,4224,4229,4234,4239,4242,4247,4252,4257,4262,4267,4272,4277,4282,4287,4292,4297,4300,4302,4307,4312,4492,4497,4502,4505,4510,4513,4518,4521,4526,4713,4716,4721,4724,4729,4734,4739,4744,4749,4751,4756,4761,4766,4771,4776,4779,4782,4785,4788,4793,4798,4803,4808,4813,4818,4823,4828,5240,5245,5250,5253,5258,5282,5285,5295,5299,5304,5309,5314,5319,5322,5325,5330,5335,5340,5345,5350,5355,5360,5365,5368,5373,5376,5381,5386,5391,5396,5401,5406,5582,5587,5590,5595,5598,5601,5606,5609,5841,5846,5851,5856,5859,5864,5869,5872,5877,6101,6103,6108,6111,6114,6117,6120,6125,6130,6135,6140,6145,6150,6155,6160,6165,6170,6175,6178,6183,6188,6191,6196,6201,6204,6209,6212,6215,6220,6223,6228,6233,6236,6239,6242,6245,6248,6251,6254,6257,6260,6263,6268,6271,6839,6844,6846,6851,6856,6861,6864,6867,6872,6877,6882,6885,6890,6893,6898,6901,6904,6907,6912,6915,6918,6921,6926,6931,6936,6941,6946,7747,7750,7755,7758,7763,7766,7769,7774,7777,7780,7783,7786,7789,7792,7797,7799,7804,7809,7814,7819,7824,7827,7829,7834,7839,7842,7845,7848,7853,7858,7863,7868,7871,7876,7881,7886,7891,7896,7901,7906,7911,7914,7918,7923,8103,8108,8287,8292,8297,8302,8307,8309,8314,8319,8324,8327,8330,8333,8336,8339,8342,8345,8348,8353,8358,8363,8368,8373,8378,8381,8384,8387,8390,8393,8396,8399,8404,8409,8414,8419,8424,8427,8432,8437,9056,9061,9066,9071,9076,9103,9106,9109,9114,9117,9120,9123,9126,9128,9133,9136,9141,9146,9151,9156,9161,9163,9166,9171,9176,9178,9181,9186,9191,9196,9201,9206,9209,9214,9217,9222,9227,9230,9235,9238,9243,9246,9251,9254,9259,9262,9267,9272,9277,9282,9287,9292,9297,9302,9307,9312,9314,9317,9322,9325,9328,9333,9336,9341,9344,9349,9354,9359,9362,9367,9372,9377,10589,10593,10598,10601,10606,10834,10839,10844,10849,10854,10857,10860,10863,10866,10871,10876,10881,10886,10889,10894,10897,10902,10904,10909,10912,10917,10920,10923,10926,10931,10936,10941,10946,10949,10954,10959,10964,10967,10970,10975,10980,10985,10990,10995,10998,11001,11004,11009,11014,11019,11024,11029,11031,11036,11039,11042,11045,11050,11055,11060,11065,11067,11070,11075,11078,11083,11088,11093,11096,11099,11102,11107,11112,11115,11117,11120,11123,11126,11131,11134,11137,11140,11143,11148,11153,11158,12293,12298,12303,12306,12308,12311,12314,12437,12441,12446,12451,12454,12456,12461,12466,12469,12474,12479,12484,12487,12492,12497,12502,12505,12510,12515,12520,12525,12530,12535,12540,12543,12546,12550,12555,12560,12563,12568,12573,12578,12583,12588,12591,12596,12601,12606,12611,12990,12995,13000,13005,13010,13012,13017,13022,13027,13030,13033,13038,13043,13455,13457,13462,13467,13472,13475,13478,13483,13486,13488,13493,13496,13501,13504,13509,13512,13517,13522,13527,13532,13537,13542,13544,13549,13552,13557,13560,13565,13570,13573,13578,13583,13588,13590,13595,13600,13603,13608,13613,14505,14509,14514,14519,14524,14529,14534,14539,14544,14549,14554,14559,14562,14565,14570,14573,14578,14583,15102,15104,15109,15114,15119,15122,15124,15129,15134,15139,15144,15147,15152,15157,15162,15167,15172,15177,15180,15185,15190,15193,15198,15203],[10,11,12],"h3",{"id":12},"通信机制简介与代码模板",[14,15,16],"p",{},[17,18],"img",{"alt":19,"src":20},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image332.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/rclcpp.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/rclcpp.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image333.webp",[14,285,286],{},[17,287],{"alt":19,"src":288},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image334.webp",[14,290,291],{},[292,293,294],"a",{"href":294,"rel":295},"https://snippet-generator.app/",[296],"nofollow",[14,298,299],{},[17,300],{"alt":19,"src":301},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image335.webp",[14,303,304],{},[17,305],{"alt":19,"src":306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image336.webp",[14,308,309],{},[17,310],{"alt":19,"src":311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image337.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/rclcpp.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,328,333,338,343,348,353,358,363,368,373,378,383,388,392,397,401,406,410,415,420,426,432,438,444,450,456],{"__ignoreMap":19},[31,320,321],{"class":33,"line":34},[31,322,81],{},[31,324,325],{"class":33,"line":45},[31,326,327],{},"\"ROS2节点模板(C++)\": {\n",[31,329,330],{"class":33,"line":52},[31,331,332],{},"    \"prefix\": \"ros2_node_cpp\",\n",[31,334,335],{"class":33,"line":78},[31,336,337],{},"    \"body\": [\n",[31,339,340],{"class":33,"line":84},[31,341,342],{},"      \"#include \\\"rclcpp/rclcpp.hpp\\\"\",\n",[31,344,345],{"class":33,"line":90},[31,346,347],{},"      \"\",\n",[31,349,350],{"class":33,"line":111},[31,351,352],{},"      \"class MyNode: public rclcpp::Node\",\n",[31,354,355],{"class":33,"line":117},[31,356,357],{},"      \"{\",\n",[31,359,360],{"class":33,"line":144},[31,361,362],{},"      \"  public:\",\n",[31,364,365],{"class":33,"line":150},[31,366,367],{},"      \"    MyNode():Node(\\\"mynode_node_cpp\\\")\",\n",[31,369,370],{"class":33,"line":156},[31,371,372],{},"      \"    {\",\n",[31,374,375],{"class":33,"line":161},[31,376,377],{},"      \"      RCLCPP_INFO(this->get_logger(),\\\"Hello World!\\\");\",\n",[31,379,380],{"class":33,"line":192},[31,381,382],{},"      \"    }\",\n",[31,384,385],{"class":33,"line":197},[31,386,387],{},"      \"};\",\n",[31,389,390],{"class":33,"line":211},[31,391,347],{},[31,393,394],{"class":33,"line":216},[31,395,396],{},"      \"int main(int argc, char ** argv)\",\n",[31,398,399],{"class":33,"line":245},[31,400,357],{},[31,402,403],{"class":33,"line":250},[31,404,405],{},"      \"  rclcpp::init(argc,argv);\",\n",[31,407,408],{"class":33,"line":263},[31,409,347],{},[31,411,412],{"class":33,"line":275},[31,413,414],{},"      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\",\n",[31,416,418],{"class":33,"line":417},21,[31,419,347],{},[31,421,423],{"class":33,"line":422},22,[31,424,425],{},"      \"  rclcpp::shutdown();\",\n",[31,427,429],{"class":33,"line":428},23,[31,430,431],{},"      \"  return 0;\",\n",[31,433,435],{"class":33,"line":434},24,[31,436,437],{},"      \"}\"\n",[31,439,441],{"class":33,"line":440},25,[31,442,443],{},"    ],\n",[31,445,447],{"class":33,"line":446},26,[31,448,449],{},"    \"description\": \"ROS2节点模板(C++)\"\n",[31,451,453],{"class":33,"line":452},27,[31,454,455],{},"  }\n",[31,457,459],{"class":33,"line":458},28,[31,460,278],{},[14,462,463],{},[17,464],{"alt":19,"src":465},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image338.webp",[14,467,468],{},[17,469],{"alt":19,"src":470},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image339.webp",[472,473],"hr",{},[14,475,476],{},[17,477],{"alt":19,"src":478},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image340.webp",[14,480,481],{},[17,482],{"alt":19,"src":483},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image341.webp",[14,485,486],{},[17,487],{"alt":19,"src":488},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image342.webp",[14,490,491],{},"第一个窗口是服务端，第二个窗口是客户端。",[14,493,494],{},[17,495],{"alt":19,"src":496},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image343.webp",[14,498,499],{},[17,500],{"alt":19,"src":501},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image344.webp",[14,503,504],{},"通信至少要涉及两方，只是一个人算不上通信。",[14,506,507],{},[17,508],{"alt":19,"src":509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image345.webp",[14,511,512],{},[17,513],{"alt":19,"src":514},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image346.webp",[14,516,517],{},[17,518],{"alt":19,"src":519},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image347.webp",[14,521,522],{},"面向接口，话题是一致的，数据载体也是一致的，就可以无缝对接",[14,524,525],{},[17,526],{"alt":19,"src":527},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image348.webp",[14,529,530],{},[17,531],{"alt":19,"src":532},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image349.webp",[14,534,535],{},"话题通信：只能单向传输数据",[14,537,538],{},"服务通信：双向通信，可以互为客户端和服务端，客户端给服务端发数据，服务端给客户端响应",[14,540,541],{},"动作通信：和服务通信很像，有服务端给客户端发的最终响应，但是中间也会连续发送反馈给客户端。",[14,543,544,545,549],{},"参数服务：参数服务是基于",[546,547,548],"strong",{},"服务通信","的，参数客户先发送一个请求，然后从参数服务的数据池里拿走数据。也可以更改数据池里的东西，但是不能删除。",[14,551,552],{},[17,553],{"alt":19,"src":554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image350.webp",[14,556,557],{},[17,558],{"alt":19,"src":559},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image351.webp",[14,561,562],{},[17,563],{"alt":19,"src":564},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image352.webp",[14,566,567],{},[17,568],{"alt":19,"src":569},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image353.webp",[14,571,572],{},[17,573],{"alt":19,"src":574},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image354.webp",[14,576,577],{},[17,578],{"alt":19,"src":579},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image355.webp",[14,581,582],{},[17,583],{"alt":19,"src":584},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image356.webp",[14,586,587],{},"参数通信不用自己定义接口文件，系统会自己弄接口文件，但是开发者是看不到该文件的，该文件被封装了。",[14,589,590],{},"我们操作的数据被封装成参数对象了。",[472,592],{},[14,594,595],{},[17,596],{"alt":19,"src":597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image357.webp",[14,599,600],{},"ros2 pkg create + 功能包名（可以写在前面或者） + --build-type(构建类型) + ament_cmake / ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[14,602,603],{},[17,604],{"alt":19,"src":605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image358.webp",[14,607,608],{},"在src里创建功能包",[14,610,611],{},[17,612],{"alt":19,"src":613},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image359.webp",[10,615,616],{"id":616},"话题通信_理论",[14,618,619],{},[17,620],{"alt":19,"src":621},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image360.webp",[14,623,624],{},[17,625],{"alt":19,"src":626},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image361.webp",[14,628,629],{},[17,630],{"alt":19,"src":631},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image362.webp",[14,633,634],{},[17,635],{"alt":19,"src":636},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image363.webp",[14,638,639],{},"在ROS1里，node和node之间通信需要经过master，每个传输数据的node都需要在master里注册相关数据，master再将信息进行匹配。",[14,641,642],{},[17,643],{"alt":19,"src":644},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image364.webp",[14,646,647],{},[17,648],{"alt":19,"src":649},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image365.webp",[14,651,652],{},"一个publisher发布数据，两个subscriber都会接收到数据。",[14,654,655],{},[17,656],{"alt":19,"src":657},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image366.webp",[14,659,660],{},[17,661],{"alt":19,"src":662},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image367.webp",[14,664,665],{},[17,666],{"alt":19,"src":667},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image368.webp",[10,669,671],{"id":670},"话题通信_实验1c","话题通信_实验1(C++)",[14,673,674],{},[17,675],{"alt":19,"src":676},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image369.webp",[14,678,679],{},[17,680],{"alt":19,"src":681},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image370.webp",[14,683,684],{},[17,685],{"alt":19,"src":686},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image371.webp",[14,688,689],{},[17,690],{"alt":19,"src":691},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image372.webp",[14,693,694],{},[17,695],{"alt":19,"src":696},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image373.webp",[14,698,699],{},[17,700],{"alt":19,"src":701},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image374.webp",[22,703,705],{"className":314,"code":704,"language":316,"meta":19,"style":19},"ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[28,706,707],{"__ignoreMap":19},[31,708,709],{"class":33,"line":34},[31,710,704],{},[14,712,713],{},"依赖还需要std_msgs，base_interfaces_demo（这里面存放了我们自己定义的所需的接口）",[14,715,716],{},"ros2 pkg create + 功能包名（可以写在前面或者最后面） + --build-type(构建类型) + ament_cmake / ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[14,718,719],{},[17,720],{"alt":19,"src":721},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image375.webp",[472,723],{},[14,725,726],{},[17,727],{"alt":19,"src":728},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image376.webp",[14,730,731],{},[17,732],{"alt":19,"src":733},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image377.webp",[472,735],{},[14,737,738],{},"发布方",[14,740,741],{},[17,742],{"alt":19,"src":743},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image378.webp",[14,745,746],{},"定时器是用来控制发送频率的，定时器里还会执行一个回调函数timer_callback。",[14,748,749],{},[17,750],{"alt":19,"src":751},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image379.webp",[14,753,754],{},"count_是计数器，每执行一次这个回调函数，count_就++；",[14,756,757],{},[17,758],{"alt":19,"src":759},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image380.webp",[14,761,762],{},"spin函数是，程序一旦执行到这里，就返回到上面，返回到上面是为了调用回调函数，如果没有这个spin函数，那么我们这个回调函数是不会被执行的。",[14,764,765],{},"以后只要我们创建完节点类对象指针，就要把该指针传入spin()函数里。",[472,767],{},[14,769,770],{},[17,771],{"alt":19,"src":772},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image381.webp",[14,774,775],{},[17,776],{"alt":19,"src":777},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image382.webp",[14,779,780],{},[17,781],{"alt":19,"src":782},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image383.webp",[14,784,785],{},[17,786],{"alt":19,"src":787},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image384.webp",[14,789,790],{},[17,791],{"alt":19,"src":792},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image385.webp",[14,794,795],{},[17,796],{"alt":19,"src":797},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image386.webp",[22,799,801],{"className":24,"code":800,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,802,803,809,813,830,834,838,854,858,877,881,885,889,911,915,925,929,952,956,966,974],{"__ignoreMap":19},[31,804,805,807],{"class":33,"line":34},[31,806,38],{"class":37},[31,808,42],{"class":41},[31,810,811],{"class":33,"line":45},[31,812,49],{"emptyLinePlaceholder":48},[31,814,815,817,820,822,824,826,828],{"class":33,"line":52},[31,816,55],{"class":37},[31,818,819],{"class":58}," Talker",[31,821,63],{"class":62},[31,823,66],{"class":37},[31,825,69],{"class":58},[31,827,72],{"class":62},[31,829,75],{"class":58},[31,831,832],{"class":33,"line":78},[31,833,81],{"class":62},[31,835,836],{"class":33,"line":84},[31,837,87],{"class":37},[31,839,840,843,845,847,849,852],{"class":33,"line":90},[31,841,842],{"class":58},"    Talker",[31,844,96],{"class":62},[31,846,99],{"class":58},[31,848,102],{"class":62},[31,850,851],{"class":41},"\"talker_node_cpp\"",[31,853,108],{"class":62},[31,855,856],{"class":33,"line":111},[31,857,114],{"class":62},[31,859,860,862,864,866,868,870,872,875],{"class":33,"line":117},[31,861,120],{"class":58},[31,863,102],{"class":62},[31,865,126],{"class":125},[31,867,129],{"class":62},[31,869,132],{"class":58},[31,871,135],{"class":62},[31,873,874],{"class":41},"\"发布节点创建！\"",[31,876,141],{"class":62},[31,878,879],{"class":33,"line":144},[31,880,147],{"class":62},[31,882,883],{"class":33,"line":150},[31,884,153],{"class":62},[31,886,887],{"class":33,"line":156},[31,888,49],{"emptyLinePlaceholder":48},[31,890,891,893,895,897,899,901,903,905,907,909],{"class":33,"line":161},[31,892,164],{"class":37},[31,894,167],{"class":58},[31,896,102],{"class":62},[31,898,164],{"class":37},[31,900,175],{"class":174},[31,902,178],{"class":62},[31,904,181],{"class":37},[31,906,184],{"class":37},[31,908,187],{"class":174},[31,910,108],{"class":62},[31,912,913],{"class":33,"line":192},[31,914,81],{"class":62},[31,916,917,919,921,923],{"class":33,"line":197},[31,918,200],{"class":58},[31,920,72],{"class":62},[31,922,205],{"class":58},[31,924,208],{"class":62},[31,926,927],{"class":33,"line":211},[31,928,49],{"emptyLinePlaceholder":48},[31,930,931,933,935,937,939,941,943,945,947,950],{"class":33,"line":216},[31,932,200],{"class":58},[31,934,72],{"class":62},[31,936,223],{"class":58},[31,938,102],{"class":62},[31,940,228],{"class":58},[31,942,72],{"class":62},[31,944,233],{"class":58},[31,946,236],{"class":62},[31,948,949],{"class":58},"Talker",[31,951,242],{"class":62},[31,953,954],{"class":33,"line":245},[31,955,49],{"emptyLinePlaceholder":48},[31,957,958,960,962,964],{"class":33,"line":250},[31,959,200],{"class":58},[31,961,72],{"class":62},[31,963,257],{"class":58},[31,965,260],{"class":62},[31,967,968,970,972],{"class":33,"line":263},[31,969,266],{"class":37},[31,971,269],{"class":125},[31,973,272],{"class":62},[31,975,976],{"class":33,"line":275},[31,977,278],{"class":62},[14,979,980],{},"此时程序处于挂起状态，会一直运行，因为spin函数。",[14,982,983],{},"想结束得按Ctrl+C。",[14,985,986],{},"我们想要的类型在std_msgs里，所以要加头文件。",[14,988,989],{},[17,990],{"alt":19,"src":991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image387.webp",[14,993,994],{},"create_publisher()第一个入口参数是话题名称，是一个字符串",[14,996,997],{},"create_publisher()第二个入口参数是QOS服务质量有关的，是队列深度是一串数字，暂时可以先填10或者20等。",[14,999,1000],{},"也就是当网络质量不好的时候，消息发不出去了，我们可以将数据先存到队列里，假设填10，最多就可以存10个数，当网络恢复了，我们就从队列里取数据，将其发出。",[14,1002,1003],{},"其他入口参数有默认值，可以暂时先不管。",[14,1005,1006],{},"返回值是一个publisher的指针。",[14,1008,1009],{},[17,1010],{"alt":19,"src":1011},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image388.webp",[14,1013,1014],{},[17,1015],{"alt":19,"src":1016},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image389.webp",[14,1018,1019],{},[17,1020],{"alt":19,"src":1021},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image390.webp",[14,1023,1024],{},[17,1025],{"alt":19,"src":1026},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image391.webp",[14,1028,1029],{},"创建定时器，这个函数有模板，但是模板有默认值可以不设置，",[14,1031,1032],{},"然后三个入口参数，",[14,1034,1035],{},"第一个入口参数是持续时间，也就是周期；",[14,1037,1038],{},"第二个入口参数是回调函数；",[14,1040,1041],{},"第三个入口参数有默认值，先不管。",[14,1043,1044],{},[17,1045],{"alt":19,"src":1046},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image392.webp",[14,1048,1049],{},"使用该命名空间的优势是，在第一个入口参数，可以直接填时间+单位。",[14,1051,1052],{},"如果是1s就写1s，是100ms就填100ms。",[14,1054,1055],{},[17,1056],{"alt":19,"src":1057},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image393.webp",[14,1059,1060],{},[17,1061],{"alt":19,"src":1062},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image394.webp",[14,1064,1065],{},"该函数还有个返回值，返回值是定时器相关的一个指针。",[14,1067,1068],{},[17,1069],{"alt":19,"src":1070},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image395.webp",[14,1072,1073],{},[17,1074],{"alt":19,"src":1075},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image396.webp",[14,1077,1078],{},[17,1079],{"alt":19,"src":1080},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image397.webp",[14,1082,1083],{},"该函数有多个重载，选择适合自己的一个函数。",[14,1085,1086],{},[17,1087],{"alt":19,"src":1088},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image398.webp",[14,1090,1091],{},"发布对象得先创建对象。",[14,1093,1094],{},[17,1095],{"alt":19,"src":1096},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image399.webp",[14,1098,1099],{},[17,1100],{"alt":19,"src":1101},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image400.webp",[14,1103,1104],{},[17,1105],{"alt":19,"src":1106},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image401.webp",[14,1108,1109],{},"把count转化成字符串并发送。",[14,1111,1112],{},[17,1113],{"alt":19,"src":1114},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image402.webp",[14,1116,1117],{},"因为它是一个std::string类型的，我们要转化成c风格的字符串。",[14,1119,1120],{},[17,1121],{"alt":19,"src":1122},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image403.webp",[14,1124,1125],{},[17,1126],{"alt":19,"src":1127},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image404.webp",[14,1129,1130],{},[17,1131],{"alt":19,"src":1132},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image405.webp",[14,1134,1135],{},"尽量在构造函数的时候，给count赋初值0.",[22,1137,1139],{"className":24,"code":1138,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"std_msgs/msg/string.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,1140,1141,1147,1154,1158,1176,1180,1196,1200,1204,1229,1233,1251,1294,1340,1344,1349,1360,1364,1388,1416,1448,1459,1463,1488,1500,1508,1512,1516,1538,1543,1554,1559,1582,1587,1598,1607],{"__ignoreMap":19},[31,1142,1143,1145],{"class":33,"line":34},[31,1144,38],{"class":37},[31,1146,42],{"class":41},[31,1148,1149,1151],{"class":33,"line":45},[31,1150,38],{"class":37},[31,1152,1153],{"class":41}," \"std_msgs/msg/string.hpp\"\n",[31,1155,1156],{"class":33,"line":52},[31,1157,49],{"emptyLinePlaceholder":48},[31,1159,1160,1163,1166,1169,1171,1174],{"class":33,"line":78},[31,1161,1162],{"class":37},"using",[31,1164,1165],{"class":37}," namespace",[31,1167,1168],{"class":58}," std",[31,1170,72],{"class":62},[31,1172,1173],{"class":58},"chrono_literals",[31,1175,272],{"class":62},[31,1177,1178],{"class":33,"line":84},[31,1179,49],{"emptyLinePlaceholder":48},[31,1181,1182,1184,1186,1188,1190,1192,1194],{"class":33,"line":90},[31,1183,55],{"class":37},[31,1185,819],{"class":58},[31,1187,63],{"class":62},[31,1189,66],{"class":37},[31,1191,69],{"class":58},[31,1193,72],{"class":62},[31,1195,75],{"class":58},[31,1197,1198],{"class":33,"line":111},[31,1199,81],{"class":62},[31,1201,1202],{"class":33,"line":117},[31,1203,87],{"class":37},[31,1205,1206,1208,1210,1212,1214,1216,1219,1222,1224,1227],{"class":33,"line":144},[31,1207,842],{"class":58},[31,1209,96],{"class":62},[31,1211,99],{"class":58},[31,1213,102],{"class":62},[31,1215,851],{"class":41},[31,1217,1218],{"class":62},")，",[31,1220,1221],{"class":58},"count",[31,1223,102],{"class":62},[31,1225,1226],{"class":125},"0",[31,1228,108],{"class":62},[31,1230,1231],{"class":33,"line":150},[31,1232,114],{"class":62},[31,1234,1235,1237,1239,1241,1243,1245,1247,1249],{"class":33,"line":156},[31,1236,120],{"class":58},[31,1238,102],{"class":62},[31,1240,126],{"class":125},[31,1242,129],{"class":62},[31,1244,132],{"class":58},[31,1246,135],{"class":62},[31,1248,874],{"class":41},[31,1250,141],{"class":62},[31,1252,1253,1256,1259,1262,1265,1267,1270,1272,1275,1278,1281,1283,1286,1289,1292],{"class":33,"line":161},[31,1254,1255],{"class":62},"      publisher_ ",[31,1257,1258],{"class":37},"=",[31,1260,1261],{"class":125}," this",[31,1263,1264],{"class":62},"->create_publisher",[31,1266,236],{"class":37},[31,1268,1269],{"class":58},"std_msgs",[31,1271,72],{"class":62},[31,1273,1274],{"class":58},"msg",[31,1276,1277],{"class":62},"::String",[31,1279,1280],{"class":37},">",[31,1282,102],{"class":62},[31,1284,1285],{"class":41},"\"chatter\"",[31,1287,1288],{"class":62},",",[31,1290,1291],{"class":125},"10",[31,1293,141],{"class":62},[31,1295,1296,1299,1301,1303,1305,1308,1310,1313,1316,1318,1320,1322,1325,1327,1330,1332,1335,1337],{"class":33,"line":192},[31,1297,1298],{"class":62},"      timer_ ",[31,1300,1258],{"class":37},[31,1302,1261],{"class":125},[31,1304,129],{"class":62},[31,1306,1307],{"class":58},"create_wall_timer",[31,1309,102],{"class":62},[31,1311,1312],{"class":125},"1",[31,1314,1315],{"class":37},"s",[31,1317,1288],{"class":62},[31,1319,228],{"class":58},[31,1321,72],{"class":62},[31,1323,1324],{"class":58},"bind",[31,1326,102],{"class":62},[31,1328,1329],{"class":37},"&",[31,1331,949],{"class":58},[31,1333,1334],{"class":62},"::on_timer,",[31,1336,126],{"class":125},[31,1338,1339],{"class":62},"));\n",[31,1341,1342],{"class":33,"line":197},[31,1343,147],{"class":62},[31,1345,1346],{"class":33,"line":211},[31,1347,1348],{"class":37},"  private:\n",[31,1350,1351,1354,1357],{"class":33,"line":216},[31,1352,1353],{"class":37},"    void",[31,1355,1356],{"class":58}," on_timer",[31,1358,1359],{"class":62},"()\n",[31,1361,1362],{"class":33,"line":245},[31,1363,114],{"class":62},[31,1365,1366,1369,1372,1374,1377,1379,1381,1383,1386],{"class":33,"line":250},[31,1367,1368],{"class":37},"      auto",[31,1370,1371],{"class":62}," message ",[31,1373,1258],{"class":37},[31,1375,1376],{"class":58}," std_msgs",[31,1378,72],{"class":62},[31,1380,1274],{"class":58},[31,1382,72],{"class":62},[31,1384,1385],{"class":58},"String",[31,1387,260],{"class":62},[31,1389,1390,1393,1395,1398,1401,1403,1405,1408,1411,1414],{"class":33,"line":263},[31,1391,1392],{"class":62},"      message.data ",[31,1394,1258],{"class":37},[31,1396,1397],{"class":41}," \"hello world!\"",[31,1399,1400],{"class":37}," +",[31,1402,1168],{"class":58},[31,1404,72],{"class":62},[31,1406,1407],{"class":58},"to_string",[31,1409,1410],{"class":62},"(count",[31,1412,1413],{"class":37},"++",[31,1415,141],{"class":62},[31,1417,1418,1420,1422,1424,1426,1428,1430,1433,1436,1439,1442,1445],{"class":33,"line":275},[31,1419,120],{"class":58},[31,1421,102],{"class":62},[31,1423,126],{"class":125},[31,1425,129],{"class":62},[31,1427,132],{"class":58},[31,1429,135],{"class":62},[31,1431,1432],{"class":41},"\"发布方发布的消息：",[31,1434,1435],{"class":125},"%s",[31,1437,1438],{"class":41},"\"",[31,1440,1441],{"class":62},",message.data.",[31,1443,1444],{"class":58},"c_str",[31,1446,1447],{"class":62},"());\n",[31,1449,1450,1453,1456],{"class":33,"line":417},[31,1451,1452],{"class":62},"      publisher_->",[31,1454,1455],{"class":58},"publish",[31,1457,1458],{"class":62},"(message);\n",[31,1460,1461],{"class":33,"line":422},[31,1462,147],{"class":62},[31,1464,1465,1468,1470,1473,1475,1477,1479,1481,1483,1485],{"class":33,"line":428},[31,1466,1467],{"class":58},"    rclcpp",[31,1469,72],{"class":62},[31,1471,1472],{"class":58},"Publisher",[31,1474,236],{"class":62},[31,1476,1269],{"class":58},[31,1478,72],{"class":62},[31,1480,1274],{"class":58},[31,1482,72],{"class":62},[31,1484,1385],{"class":58},[31,1486,1487],{"class":62},">::SharedPtr publisher_;\n",[31,1489,1490,1492,1494,1497],{"class":33,"line":434},[31,1491,1467],{"class":58},[31,1493,72],{"class":62},[31,1495,1496],{"class":58},"TimerBase",[31,1498,1499],{"class":62},"::SharedPtr timer_;\n",[31,1501,1502,1505],{"class":33,"line":440},[31,1503,1504],{"class":37},"    size_t",[31,1506,1507],{"class":62}," count;\n",[31,1509,1510],{"class":33,"line":446},[31,1511,153],{"class":62},[31,1513,1514],{"class":33,"line":452},[31,1515,49],{"emptyLinePlaceholder":48},[31,1517,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":33,"line":458},[31,1519,164],{"class":37},[31,1521,167],{"class":58},[31,1523,102],{"class":62},[31,1525,164],{"class":37},[31,1527,175],{"class":174},[31,1529,178],{"class":62},[31,1531,181],{"class":37},[31,1533,184],{"class":37},[31,1535,187],{"class":174},[31,1537,108],{"class":62},[31,1539,1541],{"class":33,"line":1540},29,[31,1542,81],{"class":62},[31,1544,1546,1548,1550,1552],{"class":33,"line":1545},30,[31,1547,200],{"class":58},[31,1549,72],{"class":62},[31,1551,205],{"class":58},[31,1553,208],{"class":62},[31,1555,1557],{"class":33,"line":1556},31,[31,1558,49],{"emptyLinePlaceholder":48},[31,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580],{"class":33,"line":1561},32,[31,1563,200],{"class":58},[31,1565,72],{"class":62},[31,1567,223],{"class":58},[31,1569,102],{"class":62},[31,1571,228],{"class":58},[31,1573,72],{"class":62},[31,1575,233],{"class":58},[31,1577,236],{"class":62},[31,1579,949],{"class":58},[31,1581,242],{"class":62},[31,1583,1585],{"class":33,"line":1584},33,[31,1586,49],{"emptyLinePlaceholder":48},[31,1588,1590,1592,1594,1596],{"class":33,"line":1589},34,[31,1591,200],{"class":58},[31,1593,72],{"class":62},[31,1595,257],{"class":58},[31,1597,260],{"class":62},[31,1599,1601,1603,1605],{"class":33,"line":1600},35,[31,1602,266],{"class":37},[31,1604,269],{"class":125},[31,1606,272],{"class":62},[31,1608,1610],{"class":33,"line":1609},36,[31,1611,278],{"class":62},[14,1613,1614],{},[17,1615],{"alt":19,"src":1616},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image406.webp",[14,1618,1619],{},"但是不一定消息真的发布出去了。",[14,1621,1622],{},"验证方法：",[22,1624,1628],{"className":1625,"code":1626,"language":1627,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","ros2 topic echo /xxx\n","bash",[28,1629,1630],{"__ignoreMap":19},[31,1631,1632,1635,1638,1641],{"class":33,"line":34},[31,1633,1634],{"class":58},"ros2",[31,1636,1637],{"class":41}," topic",[31,1639,1640],{"class":41}," echo",[31,1642,1643],{"class":41}," /xxx\n",[14,1645,1646],{},[17,1647],{"alt":19,"src":1648},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image407.webp",[14,1650,1651],{},"这样才能确定消息被发到chatter话题上了。",[472,1653],{},[14,1655,1656],{},[17,1657],{"alt":19,"src":1658},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image408.webp",[14,1660,1661],{},[17,1662],{"alt":19,"src":1663},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image409.webp",[14,1665,1666],{},[17,1667],{"alt":19,"src":1668},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image410.webp",[14,1670,1671],{},[17,1672],{"alt":19,"src":1673},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image411.webp",[14,1675,1676],{},[17,1677],{"alt":19,"src":1678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image412.webp",[14,1680,1681],{},[17,1682],{"alt":19,"src":1683},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image413.webp",[14,1685,1686],{},[17,1687],{"alt":19,"src":1688},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image414.webp",[14,1690,1691],{},[17,1692],{"alt":19,"src":1693},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image415.webp",[14,1695,1696],{},[17,1697],{"alt":19,"src":1698},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image416.webp",[14,1700,1701],{},[17,1702],{"alt":19,"src":1703},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image417.webp",[22,1705,1707],{"className":24,"code":1706,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,1708,1709,1715,1719,1736,1740,1745,1761,1765,1785,1789,1793,1797,1821,1825,1835,1839,1862,1866,1876,1885],{"__ignoreMap":19},[31,1710,1711,1713],{"class":33,"line":34},[31,1712,38],{"class":37},[31,1714,42],{"class":41},[31,1716,1717],{"class":33,"line":45},[31,1718,49],{"emptyLinePlaceholder":48},[31,1720,1721,1723,1726,1728,1730,1732,1734],{"class":33,"line":52},[31,1722,55],{"class":37},[31,1724,1725],{"class":58}," Listener",[31,1727,63],{"class":62},[31,1729,66],{"class":37},[31,1731,69],{"class":58},[31,1733,72],{"class":62},[31,1735,75],{"class":58},[31,1737,1738],{"class":33,"line":78},[31,1739,81],{"class":62},[31,1741,1742],{"class":33,"line":84},[31,1743,1744],{"class":37},"public:\n",[31,1746,1747,1750,1752,1754,1756,1759],{"class":33,"line":90},[31,1748,1749],{"class":58},"    Listener",[31,1751,96],{"class":62},[31,1753,99],{"class":58},[31,1755,102],{"class":62},[31,1757,1758],{"class":41},"\"listener_node_cpp\"",[31,1760,108],{"class":62},[31,1762,1763],{"class":33,"line":111},[31,1764,114],{"class":62},[31,1766,1767,1770,1772,1774,1776,1778,1780,1783],{"class":33,"line":117},[31,1768,1769],{"class":58},"        RCLCPP_INFO",[31,1771,102],{"class":62},[31,1773,126],{"class":125},[31,1775,129],{"class":62},[31,1777,132],{"class":58},[31,1779,135],{"class":62},[31,1781,1782],{"class":41},"\"订阅方创建!\"",[31,1784,141],{"class":62},[31,1786,1787],{"class":33,"line":144},[31,1788,147],{"class":62},[31,1790,1791],{"class":33,"line":150},[31,1792,153],{"class":62},[31,1794,1795],{"class":33,"line":156},[31,1796,49],{"emptyLinePlaceholder":48},[31,1798,1799,1801,1803,1805,1807,1809,1811,1813,1816,1818],{"class":33,"line":161},[31,1800,164],{"class":37},[31,1802,167],{"class":58},[31,1804,102],{"class":62},[31,1806,164],{"class":37},[31,1808,175],{"class":174},[31,1810,178],{"class":62},[31,1812,181],{"class":37},[31,1814,1815],{"class":37}," *",[31,1817,187],{"class":174},[31,1819,1820],{"class":62},"[])\n",[31,1822,1823],{"class":33,"line":192},[31,1824,81],{"class":62},[31,1826,1827,1829,1831,1833],{"class":33,"line":197},[31,1828,1467],{"class":58},[31,1830,72],{"class":62},[31,1832,205],{"class":58},[31,1834,208],{"class":62},[31,1836,1837],{"class":33,"line":211},[31,1838,49],{"emptyLinePlaceholder":48},[31,1840,1841,1843,1845,1847,1849,1851,1853,1855,1857,1860],{"class":33,"line":216},[31,1842,1467],{"class":58},[31,1844,72],{"class":62},[31,1846,223],{"class":58},[31,1848,102],{"class":62},[31,1850,228],{"class":58},[31,1852,72],{"class":62},[31,1854,233],{"class":58},[31,1856,236],{"class":62},[31,1858,1859],{"class":58},"Listener",[31,1861,242],{"class":62},[31,1863,1864],{"class":33,"line":245},[31,1865,49],{"emptyLinePlaceholder":48},[31,1867,1868,1870,1872,1874],{"class":33,"line":250},[31,1869,1467],{"class":58},[31,1871,72],{"class":62},[31,1873,257],{"class":58},[31,1875,260],{"class":62},[31,1877,1878,1881,1883],{"class":33,"line":263},[31,1879,1880],{"class":37},"    return",[31,1882,269],{"class":125},[31,1884,272],{"class":62},[31,1886,1887],{"class":33,"line":275},[31,1888,278],{"class":62},[14,1890,1891],{},[17,1892],{"alt":19,"src":1893},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image418.webp",[14,1895,1896],{},"编译之前别忘了编辑配置文件",[14,1898,1899],{},[17,1900],{"alt":19,"src":1901},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image419.webp",[14,1903,1904],{},"依赖包已经自动生成了，不用管。",[14,1906,1907],{},[17,1908],{"alt":19,"src":1909},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image420.webp",[14,1911,1912],{},"主要改这三大部分",[14,1914,1915],{},[17,1916],{"alt":19,"src":1917},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image421.webp",[14,1919,1920],{},[17,1921],{"alt":19,"src":1922},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image422.webp",[14,1924,1925],{},[17,1926],{"alt":19,"src":1927},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image423.webp",[14,1929,1930],{},[17,1931],{"alt":19,"src":1932},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image424.webp",[14,1934,1935],{},[17,1936],{"alt":19,"src":1937},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image425.webp",[14,1939,1940],{},"一共有5个入口参数，后面两个入口参数有默认值。",[14,1942,1943],{},"第一个入口参数是话题名称，要保证和发布方一致；",[14,1945,1946],{},"第二个入口参数是QoS，就是服务质量管理，队列深度，10或者20暂时随便设置，可以看看发布方那边的QoS的解释;",[14,1948,1949],{},"第三个入口参数是回调函数，一旦接收到数据，就触发该回调函数。",[14,1951,1952],{},"返回值是一个订阅对象的指针。",[14,1954,1955],{},[17,1956],{"alt":19,"src":1957},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image426.webp",[14,1959,1960],{},[17,1961],{"alt":19,"src":1962},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image427.webp",[14,1964,1965],{},"std::placeholders::_1这个是占位符，_1是指一个。这个地方本应该填入消息。",[14,1967,1968],{},[17,1969],{"alt":19,"src":1970},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image428.webp",[14,1972,1973],{},[17,1974],{"alt":19,"src":1975},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image429.webp",[14,1977,1978],{},[17,1979],{"alt":19,"src":1980},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image430.webp",[14,1982,1983],{},[17,1984],{"alt":19,"src":1985},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image431.webp",[22,1987,1989],{"className":24,"code":1988,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"std_msgs/msg/string.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,1990,1991,1997,2003,2007,2023,2027,2031,2045,2049,2067,2130,2134,2138,2143,2172,2176,2204,2208,2232,2236,2240,2262,2266,2276,2280,2302,2306,2316,2324],{"__ignoreMap":19},[31,1992,1993,1995],{"class":33,"line":34},[31,1994,38],{"class":37},[31,1996,42],{"class":41},[31,1998,1999,2001],{"class":33,"line":45},[31,2000,38],{"class":37},[31,2002,1153],{"class":41},[31,2004,2005],{"class":33,"line":52},[31,2006,49],{"emptyLinePlaceholder":48},[31,2008,2009,2011,2013,2015,2017,2019,2021],{"class":33,"line":78},[31,2010,55],{"class":37},[31,2012,1725],{"class":58},[31,2014,63],{"class":62},[31,2016,66],{"class":37},[31,2018,69],{"class":58},[31,2020,72],{"class":62},[31,2022,75],{"class":58},[31,2024,2025],{"class":33,"line":84},[31,2026,81],{"class":62},[31,2028,2029],{"class":33,"line":90},[31,2030,1744],{"class":37},[31,2032,2033,2035,2037,2039,2041,2043],{"class":33,"line":111},[31,2034,1749],{"class":58},[31,2036,96],{"class":62},[31,2038,99],{"class":58},[31,2040,102],{"class":62},[31,2042,1758],{"class":41},[31,2044,108],{"class":62},[31,2046,2047],{"class":33,"line":117},[31,2048,114],{"class":62},[31,2050,2051,2053,2055,2057,2059,2061,2063,2065],{"class":33,"line":144},[31,2052,1769],{"class":58},[31,2054,102],{"class":62},[31,2056,126],{"class":125},[31,2058,129],{"class":62},[31,2060,132],{"class":58},[31,2062,135],{"class":62},[31,2064,1782],{"class":41},[31,2066,141],{"class":62},[31,2068,2069,2072,2074,2076,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2116,2118,2120,2122,2124,2127],{"class":33,"line":150},[31,2070,2071],{"class":62},"        subscription_ ",[31,2073,1258],{"class":37},[31,2075,1261],{"class":125},[31,2077,2078],{"class":62},"->create_subscription",[31,2080,236],{"class":37},[31,2082,1269],{"class":58},[31,2084,72],{"class":62},[31,2086,1274],{"class":58},[31,2088,1277],{"class":62},[31,2090,1280],{"class":37},[31,2092,102],{"class":62},[31,2094,1285],{"class":41},[31,2096,1288],{"class":62},[31,2098,1291],{"class":125},[31,2100,1288],{"class":62},[31,2102,228],{"class":58},[31,2104,72],{"class":62},[31,2106,1324],{"class":58},[31,2108,102],{"class":62},[31,2110,1329],{"class":37},[31,2112,1859],{"class":58},[31,2114,2115],{"class":62},"::do_callback,",[31,2117,126],{"class":125},[31,2119,1288],{"class":62},[31,2121,228],{"class":58},[31,2123,72],{"class":62},[31,2125,2126],{"class":58},"placeholders",[31,2128,2129],{"class":62},"::_1));\n",[31,2131,2132],{"class":33,"line":156},[31,2133,49],{"emptyLinePlaceholder":48},[31,2135,2136],{"class":33,"line":161},[31,2137,147],{"class":62},[31,2139,2140],{"class":33,"line":192},[31,2141,2142],{"class":37},"private:\n",[31,2144,2145,2147,2150,2152,2155,2157,2159,2161,2163,2165,2168,2170],{"class":33,"line":197},[31,2146,1353],{"class":37},[31,2148,2149],{"class":58}," do_callback",[31,2151,102],{"class":62},[31,2153,2154],{"class":37},"const",[31,2156,1376],{"class":58},[31,2158,72],{"class":62},[31,2160,1274],{"class":58},[31,2162,72],{"class":62},[31,2164,1385],{"class":58},[31,2166,2167],{"class":37}," &",[31,2169,1274],{"class":174},[31,2171,108],{"class":62},[31,2173,2174],{"class":33,"line":211},[31,2175,114],{"class":62},[31,2177,2178,2180,2182,2184,2186,2188,2190,2193,2195,2197,2200,2202],{"class":33,"line":216},[31,2179,1769],{"class":58},[31,2181,102],{"class":62},[31,2183,126],{"class":125},[31,2185,129],{"class":62},[31,2187,132],{"class":58},[31,2189,135],{"class":62},[31,2191,2192],{"class":41},"\"订阅到的消息是:",[31,2194,1435],{"class":125},[31,2196,1438],{"class":41},[31,2198,2199],{"class":62},",msg.data.",[31,2201,1444],{"class":58},[31,2203,1447],{"class":62},[31,2205,2206],{"class":33,"line":245},[31,2207,147],{"class":62},[31,2209,2210,2212,2214,2217,2219,2221,2223,2225,2227,2229],{"class":33,"line":250},[31,2211,1467],{"class":58},[31,2213,72],{"class":62},[31,2215,2216],{"class":58},"Subscription",[31,2218,236],{"class":62},[31,2220,1269],{"class":58},[31,2222,72],{"class":62},[31,2224,1274],{"class":58},[31,2226,72],{"class":62},[31,2228,1385],{"class":58},[31,2230,2231],{"class":62},">::SharedPtr subscription_;\n",[31,2233,2234],{"class":33,"line":263},[31,2235,153],{"class":62},[31,2237,2238],{"class":33,"line":275},[31,2239,49],{"emptyLinePlaceholder":48},[31,2241,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260],{"class":33,"line":417},[31,2243,164],{"class":37},[31,2245,167],{"class":58},[31,2247,102],{"class":62},[31,2249,164],{"class":37},[31,2251,175],{"class":174},[31,2253,178],{"class":62},[31,2255,181],{"class":37},[31,2257,1815],{"class":37},[31,2259,187],{"class":174},[31,2261,1820],{"class":62},[31,2263,2264],{"class":33,"line":422},[31,2265,81],{"class":62},[31,2267,2268,2270,2272,2274],{"class":33,"line":428},[31,2269,1467],{"class":58},[31,2271,72],{"class":62},[31,2273,205],{"class":58},[31,2275,208],{"class":62},[31,2277,2278],{"class":33,"line":434},[31,2279,49],{"emptyLinePlaceholder":48},[31,2281,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300],{"class":33,"line":440},[31,2283,1467],{"class":58},[31,2285,72],{"class":62},[31,2287,223],{"class":58},[31,2289,102],{"class":62},[31,2291,228],{"class":58},[31,2293,72],{"class":62},[31,2295,233],{"class":58},[31,2297,236],{"class":62},[31,2299,1859],{"class":58},[31,2301,242],{"class":62},[31,2303,2304],{"class":33,"line":446},[31,2305,49],{"emptyLinePlaceholder":48},[31,2307,2308,2310,2312,2314],{"class":33,"line":452},[31,2309,1467],{"class":58},[31,2311,72],{"class":62},[31,2313,257],{"class":58},[31,2315,260],{"class":62},[31,2317,2318,2320,2322],{"class":33,"line":458},[31,2319,1880],{"class":37},[31,2321,269],{"class":125},[31,2323,272],{"class":62},[31,2325,2326],{"class":33,"line":1540},[31,2327,278],{"class":62},[10,2329,2330],{"id":2330},"话题通信_自定义接口信息",[14,2332,2333],{},[17,2334],{"alt":19,"src":2335},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image432.webp",[14,2337,2338],{},[17,2339],{"alt":19,"src":2340},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image433.webp",[14,2342,2343],{},[17,2344],{"alt":19,"src":2345},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image434.webp",[14,2347,2348],{},[17,2349],{"alt":19,"src":2350},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image435.webp",[14,2352,2353],{},"构建依赖",[14,2355,2356],{},"执行依赖",[14,2358,2359],{},"当前功能包所属的功能包组",[14,2361,2362],{},[17,2363],{"alt":19,"src":2364},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image436.webp",[14,2366,2367],{},"find_package是要把构建依赖传递过来",[14,2369,2370],{},"然后还要指定当前被构建的接口文件的路径（通过这个设置，就可以把.msg转化成对应的C++和Python代码了）",[14,2372,2373],{},[17,2374],{"alt":19,"src":2375},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image437.webp",[14,2377,2378],{},[17,2379],{"alt":19,"src":2380},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image438.webp",[14,2382,2383],{},[17,2384],{"alt":19,"src":2385},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image439.webp",[14,2387,2388],{},"文件名可以自定义，但是首字母必须大写",[14,2390,2391],{},[17,2392],{"alt":19,"src":2393},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image440.webp",[14,2395,2396],{},[17,2397],{"alt":19,"src":2398},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image441.webp",[14,2400,2401],{},[17,2402],{"alt":19,"src":2403},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image442.webp",[14,2405,2406],{},"写完之后test_depend报错了",[14,2408,2409],{},[17,2410],{"alt":19,"src":2411},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image443.webp",[14,2413,2414],{},"删掉即可",[14,2416,2417],{},"编译依赖是rosidl开头的，我们通过grep查询一下",[22,2419,2421],{"className":1625,"code":2420,"language":1627,"meta":19,"style":19},"ros2 pkg list | grep -i rosidl\n",[28,2422,2423],{"__ignoreMap":19},[31,2424,2425,2427,2430,2433,2436,2439,2442],{"class":33,"line":34},[31,2426,1634],{"class":58},[31,2428,2429],{"class":41}," pkg",[31,2431,2432],{"class":41}," list",[31,2434,2435],{"class":37}," |",[31,2437,2438],{"class":58}," grep",[31,2440,2441],{"class":125}," -i",[31,2443,2444],{"class":41}," rosidl\n",[14,2446,2447],{},[17,2448],{"alt":19,"src":2449},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image444.webp",[14,2451,2452],{},[17,2453],{"alt":19,"src":2454},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image445.webp",[14,2456,2457],{},"我们用的是这一个，直接复制过来",[14,2459,2460],{},[17,2461],{"alt":19,"src":2462},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image446.webp",[14,2464,2465],{},[17,2466],{"alt":19,"src":2467},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image447.webp",[14,2469,2470],{},[17,2471],{"alt":19,"src":2472},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image448.webp",[14,2474,2475],{},[17,2476],{"alt":19,"src":2477},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image449.webp",[14,2479,2480],{},"在list里这个所属的功能包组就没有了，需要自己写rosidl_interface_packages",[14,2482,2483],{},[17,2484],{"alt":19,"src":2485},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image450.webp",[14,2487,2488],{},[17,2489],{"alt":19,"src":2490},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image451.webp",[14,2492,2493],{},"这个依赖要和构建依赖一样",[14,2495,2496],{},"然后我们要为接口文件生成源码",[14,2498,2499],{},"需要使用rosidl_generate_interfaces函数",[14,2501,2502],{},[17,2503],{"alt":19,"src":2504},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image452.webp",[14,2506,2507],{},[17,2508],{"alt":19,"src":2509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image453.webp",[22,2511,2513],{"className":1625,"code":2512,"language":1627,"meta":19,"style":19},"colcon build --packages-select base_interfaces_demo\n",[28,2514,2515],{"__ignoreMap":19},[31,2516,2517,2520,2523,2526],{"class":33,"line":34},[31,2518,2519],{"class":58},"colcon",[31,2521,2522],{"class":41}," build",[31,2524,2525],{"class":125}," --packages-select",[31,2527,2528],{"class":41}," base_interfaces_demo\n",[14,2530,2531],{},[17,2532],{"alt":19,"src":2533},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image454.webp",[14,2535,2536],{},[17,2537],{"alt":19,"src":2538},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image455.webp",[14,2540,2541],{},"会在install空间下生成student.hpp代码",[14,2543,2544],{},[17,2545],{"alt":19,"src":2546},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image456.webp",[14,2548,2549],{},"以上.msg生成C++的",[14,2551,2552],{},[17,2553],{"alt":19,"src":2554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image457.webp",[14,2556,2557],{},"然后这个是.msg生成的Python的源码",[14,2559,2560],{},[17,2561],{"alt":19,"src":2562},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image458.webp",[14,2564,2565],{},"也可以通过这个方式来检测是否编译正常",[14,2567,2568],{},"interface是接口",[14,2570,2571],{},[17,2572],{"alt":19,"src":2573},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image459.webp",[10,2575,2577],{"id":2576},"话题通信_实验2c","话题通信_实验2(C++)",[14,2579,2580],{},[17,2581],{"alt":19,"src":2582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image460.webp",[14,2584,2585],{},[17,2586],{"alt":19,"src":2587},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image461.webp",[14,2589,2590],{},[17,2591],{"alt":19,"src":2592},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image462.webp",[14,2594,2595],{},"新建完源文件之后，要配置CMakeLists",[14,2597,2598],{},[17,2599],{"alt":19,"src":2600},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image463.webp",[14,2602,2603],{},[17,2604],{"alt":19,"src":2605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image464.webp",[14,2607,2608],{},[17,2609],{"alt":19,"src":2610},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image465.webp",[14,2612,2613],{},[17,2614],{"alt":19,"src":2615},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image466.webp",[14,2617,2618],{},"将最基本的框架直接复制过来",[14,2620,2621],{},[17,2622],{"alt":19,"src":2623},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image467.webp",[14,2625,2626],{},"然后替换类的名称",[14,2628,2629],{},[17,2630],{"alt":19,"src":2631},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image468.webp",[22,2633,2635],{"className":24,"code":2634,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,2636,2637,2643,2647,2664,2668,2672,2688,2692,2710,2714,2718,2722,2744,2748,2758,2762,2785,2789,2799,2807],{"__ignoreMap":19},[31,2638,2639,2641],{"class":33,"line":34},[31,2640,38],{"class":37},[31,2642,42],{"class":41},[31,2644,2645],{"class":33,"line":45},[31,2646,49],{"emptyLinePlaceholder":48},[31,2648,2649,2651,2654,2656,2658,2660,2662],{"class":33,"line":52},[31,2650,55],{"class":37},[31,2652,2653],{"class":58}," TalkerStu",[31,2655,63],{"class":62},[31,2657,66],{"class":37},[31,2659,69],{"class":58},[31,2661,72],{"class":62},[31,2663,75],{"class":58},[31,2665,2666],{"class":33,"line":78},[31,2667,81],{"class":62},[31,2669,2670],{"class":33,"line":84},[31,2671,87],{"class":37},[31,2673,2674,2677,2679,2681,2683,2686],{"class":33,"line":90},[31,2675,2676],{"class":58},"    TalkerStu",[31,2678,96],{"class":62},[31,2680,99],{"class":58},[31,2682,102],{"class":62},[31,2684,2685],{"class":41},"\"talkerstu_node_cpp\"",[31,2687,108],{"class":62},[31,2689,2690],{"class":33,"line":111},[31,2691,114],{"class":62},[31,2693,2694,2696,2698,2700,2702,2704,2706,2708],{"class":33,"line":117},[31,2695,120],{"class":58},[31,2697,102],{"class":62},[31,2699,126],{"class":125},[31,2701,129],{"class":62},[31,2703,132],{"class":58},[31,2705,135],{"class":62},[31,2707,874],{"class":41},[31,2709,141],{"class":62},[31,2711,2712],{"class":33,"line":144},[31,2713,147],{"class":62},[31,2715,2716],{"class":33,"line":150},[31,2717,153],{"class":62},[31,2719,2720],{"class":33,"line":156},[31,2721,49],{"emptyLinePlaceholder":48},[31,2723,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742],{"class":33,"line":161},[31,2725,164],{"class":37},[31,2727,167],{"class":58},[31,2729,102],{"class":62},[31,2731,164],{"class":37},[31,2733,175],{"class":174},[31,2735,178],{"class":62},[31,2737,181],{"class":37},[31,2739,184],{"class":37},[31,2741,187],{"class":174},[31,2743,108],{"class":62},[31,2745,2746],{"class":33,"line":192},[31,2747,81],{"class":62},[31,2749,2750,2752,2754,2756],{"class":33,"line":197},[31,2751,200],{"class":58},[31,2753,72],{"class":62},[31,2755,205],{"class":58},[31,2757,208],{"class":62},[31,2759,2760],{"class":33,"line":211},[31,2761,49],{"emptyLinePlaceholder":48},[31,2763,2764,2766,2768,2770,2772,2774,2776,2778,2780,2783],{"class":33,"line":216},[31,2765,200],{"class":58},[31,2767,72],{"class":62},[31,2769,223],{"class":58},[31,2771,102],{"class":62},[31,2773,228],{"class":58},[31,2775,72],{"class":62},[31,2777,233],{"class":58},[31,2779,236],{"class":62},[31,2781,2782],{"class":58},"TalkerStu",[31,2784,242],{"class":62},[31,2786,2787],{"class":33,"line":245},[31,2788,49],{"emptyLinePlaceholder":48},[31,2790,2791,2793,2795,2797],{"class":33,"line":250},[31,2792,200],{"class":58},[31,2794,72],{"class":62},[31,2796,257],{"class":58},[31,2798,260],{"class":62},[31,2800,2801,2803,2805],{"class":33,"line":263},[31,2802,266],{"class":37},[31,2804,269],{"class":125},[31,2806,272],{"class":62},[31,2808,2809],{"class":33,"line":275},[31,2810,278],{"class":62},[14,2812,2813],{},"为了编码规范，把talkerstu_node_cpp改成小写",[14,2815,2816],{},[17,2817],{"alt":19,"src":2818},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image469.webp",[14,2820,2821],{},"同样的，订阅方也是需要这样操作",[14,2823,2824],{},[17,2825],{"alt":19,"src":2826},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image470.webp",[22,2828,2830],{"className":24,"code":2829,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,2831,2832,2838,2842,2859,2863,2867,2883,2887,2905,2909,2913,2917,2939,2943,2953,2957,2980,2984,2994,3002],{"__ignoreMap":19},[31,2833,2834,2836],{"class":33,"line":34},[31,2835,38],{"class":37},[31,2837,42],{"class":41},[31,2839,2840],{"class":33,"line":45},[31,2841,49],{"emptyLinePlaceholder":48},[31,2843,2844,2846,2849,2851,2853,2855,2857],{"class":33,"line":52},[31,2845,55],{"class":37},[31,2847,2848],{"class":58}," ListenerStu",[31,2850,63],{"class":62},[31,2852,66],{"class":37},[31,2854,69],{"class":58},[31,2856,72],{"class":62},[31,2858,75],{"class":58},[31,2860,2861],{"class":33,"line":78},[31,2862,81],{"class":62},[31,2864,2865],{"class":33,"line":84},[31,2866,1744],{"class":37},[31,2868,2869,2872,2874,2876,2878,2881],{"class":33,"line":90},[31,2870,2871],{"class":58},"    ListenerStu",[31,2873,96],{"class":62},[31,2875,99],{"class":58},[31,2877,102],{"class":62},[31,2879,2880],{"class":41},"\"listenerstu_node_cpp\"",[31,2882,108],{"class":62},[31,2884,2885],{"class":33,"line":111},[31,2886,114],{"class":62},[31,2888,2889,2891,2893,2895,2897,2899,2901,2903],{"class":33,"line":117},[31,2890,1769],{"class":58},[31,2892,102],{"class":62},[31,2894,126],{"class":125},[31,2896,129],{"class":62},[31,2898,132],{"class":58},[31,2900,135],{"class":62},[31,2902,1782],{"class":41},[31,2904,141],{"class":62},[31,2906,2907],{"class":33,"line":144},[31,2908,147],{"class":62},[31,2910,2911],{"class":33,"line":150},[31,2912,153],{"class":62},[31,2914,2915],{"class":33,"line":156},[31,2916,49],{"emptyLinePlaceholder":48},[31,2918,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937],{"class":33,"line":161},[31,2920,164],{"class":37},[31,2922,167],{"class":58},[31,2924,102],{"class":62},[31,2926,164],{"class":37},[31,2928,175],{"class":174},[31,2930,178],{"class":62},[31,2932,181],{"class":37},[31,2934,1815],{"class":37},[31,2936,187],{"class":174},[31,2938,1820],{"class":62},[31,2940,2941],{"class":33,"line":192},[31,2942,81],{"class":62},[31,2944,2945,2947,2949,2951],{"class":33,"line":197},[31,2946,1467],{"class":58},[31,2948,72],{"class":62},[31,2950,205],{"class":58},[31,2952,208],{"class":62},[31,2954,2955],{"class":33,"line":211},[31,2956,49],{"emptyLinePlaceholder":48},[31,2958,2959,2961,2963,2965,2967,2969,2971,2973,2975,2978],{"class":33,"line":216},[31,2960,1467],{"class":58},[31,2962,72],{"class":62},[31,2964,223],{"class":58},[31,2966,102],{"class":62},[31,2968,228],{"class":58},[31,2970,72],{"class":62},[31,2972,233],{"class":58},[31,2974,236],{"class":62},[31,2976,2977],{"class":58},"ListenerStu",[31,2979,242],{"class":62},[31,2981,2982],{"class":33,"line":245},[31,2983,49],{"emptyLinePlaceholder":48},[31,2985,2986,2988,2990,2992],{"class":33,"line":250},[31,2987,1467],{"class":58},[31,2989,72],{"class":62},[31,2991,257],{"class":58},[31,2993,260],{"class":62},[31,2995,2996,2998,3000],{"class":33,"line":263},[31,2997,1880],{"class":37},[31,2999,269],{"class":125},[31,3001,272],{"class":62},[31,3003,3004],{"class":33,"line":275},[31,3005,278],{"class":62},[14,3007,3008],{},[17,3009],{"alt":19,"src":3010},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image471.webp",[22,3012,3014],{"className":314,"code":3013,"language":316,"meta":19,"style":19},"{\n  \"configurations\": [\n    {\n      \"browse\": {\n        \"databaseFilename\": \"${default}\",\n        \"limitSymbolsToIncludedHeaders\": false\n      },\n      \"includePath\": [\n        \"/opt/ros/humble/include/**\",\n        \"/home/tungchiahui/mysource/ros2src/3.ws01_plumbing/src/base_interfaces_demo/include/**\",\n        \"/usr/include/**\",\n        \"${workspaceFolder}/\",\n**        \"${workspaceFolder}/install/base_interfaces_demo/include/**\"\n      ],\n      \"name\": \"ROS\",\n      \"intelliSenseMode\": \"gcc-x64\",\n      \"compilerPath\": \"/usr/bin/gcc\",\n      \"cStandard\": \"gnu11\",\n      \"cppStandard\": \"c++14\"\n    }\n  ],\n  \"version\": 4\n}\n",[28,3015,3016,3020,3025,3029,3034,3039,3044,3049,3054,3059,3064,3069,3074,3079,3084,3089,3094,3099,3104,3109,3113,3118,3123],{"__ignoreMap":19},[31,3017,3018],{"class":33,"line":34},[31,3019,81],{},[31,3021,3022],{"class":33,"line":45},[31,3023,3024],{},"  \"configurations\": [\n",[31,3026,3027],{"class":33,"line":52},[31,3028,114],{},[31,3030,3031],{"class":33,"line":78},[31,3032,3033],{},"      \"browse\": {\n",[31,3035,3036],{"class":33,"line":84},[31,3037,3038],{},"        \"databaseFilename\": \"${default}\",\n",[31,3040,3041],{"class":33,"line":90},[31,3042,3043],{},"        \"limitSymbolsToIncludedHeaders\": false\n",[31,3045,3046],{"class":33,"line":111},[31,3047,3048],{},"      },\n",[31,3050,3051],{"class":33,"line":117},[31,3052,3053],{},"      \"includePath\": [\n",[31,3055,3056],{"class":33,"line":144},[31,3057,3058],{},"        \"/opt/ros/humble/include/**\",\n",[31,3060,3061],{"class":33,"line":150},[31,3062,3063],{},"        \"/home/tungchiahui/mysource/ros2src/3.ws01_plumbing/src/base_interfaces_demo/include/**\",\n",[31,3065,3066],{"class":33,"line":156},[31,3067,3068],{},"        \"/usr/include/**\",\n",[31,3070,3071],{"class":33,"line":161},[31,3072,3073],{},"        \"${workspaceFolder}/\",\n",[31,3075,3076],{"class":33,"line":192},[31,3077,3078],{},"**        \"${workspaceFolder}/install/base_interfaces_demo/include/**\"\n",[31,3080,3081],{"class":33,"line":197},[31,3082,3083],{},"      ],\n",[31,3085,3086],{"class":33,"line":211},[31,3087,3088],{},"      \"name\": \"ROS\",\n",[31,3090,3091],{"class":33,"line":216},[31,3092,3093],{},"      \"intelliSenseMode\": \"gcc-x64\",\n",[31,3095,3096],{"class":33,"line":245},[31,3097,3098],{},"      \"compilerPath\": \"/usr/bin/gcc\",\n",[31,3100,3101],{"class":33,"line":250},[31,3102,3103],{},"      \"cStandard\": \"gnu11\",\n",[31,3105,3106],{"class":33,"line":263},[31,3107,3108],{},"      \"cppStandard\": \"c++14\"\n",[31,3110,3111],{"class":33,"line":275},[31,3112,147],{},[31,3114,3115],{"class":33,"line":417},[31,3116,3117],{},"  ],\n",[31,3119,3120],{"class":33,"line":422},[31,3121,3122],{},"  \"version\": 4\n",[31,3124,3125],{"class":33,"line":428},[31,3126,278],{},[14,3128,3129],{},[17,3130],{"alt":19,"src":3131},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image472.webp",[14,3133,3134],{},[17,3135],{"alt":19,"src":3136},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image473.webp",[14,3138,3139],{},[17,3140],{"alt":19,"src":3141},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image474.webp",[14,3143,3144],{},[17,3145],{"alt":19,"src":3146},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image475.webp",[472,3148],{},[14,3150,3151],{},[17,3152],{"alt":19,"src":3153},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image476.webp",[14,3155,3156],{},[17,3157],{"alt":19,"src":3158},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image477.webp",[14,3160,3161],{},[17,3162],{"alt":19,"src":3163},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image478.webp",[14,3165,3166],{},[17,3167],{"alt":19,"src":3168},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image479.webp",[14,3170,3171],{},"不要忘记字符串转成C风格的。",[14,3173,3174],{},[17,3175],{"alt":19,"src":3176},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image480.webp",[22,3178,3180],{"className":24,"code":3179,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"base_interfaces_demo/msg/student.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,3181,3182,3188,3195,3199,3213,3217,3233,3237,3241,3265,3269,3287,3322,3363,3367,3371,3380,3384,3408,3420,3430,3445,3454,3464,3504,3508,3530,3540,3547,3551,3555,3577,3581,3591,3595,3617,3621,3632,3641],{"__ignoreMap":19},[31,3183,3184,3186],{"class":33,"line":34},[31,3185,38],{"class":37},[31,3187,42],{"class":41},[31,3189,3190,3192],{"class":33,"line":45},[31,3191,38],{"class":37},[31,3193,3194],{"class":41}," \"base_interfaces_demo/msg/student.hpp\"\n",[31,3196,3197],{"class":33,"line":52},[31,3198,49],{"emptyLinePlaceholder":48},[31,3200,3201,3203,3205,3207,3209,3211],{"class":33,"line":78},[31,3202,1162],{"class":37},[31,3204,1165],{"class":37},[31,3206,1168],{"class":58},[31,3208,72],{"class":62},[31,3210,1173],{"class":58},[31,3212,272],{"class":62},[31,3214,3215],{"class":33,"line":84},[31,3216,49],{"emptyLinePlaceholder":48},[31,3218,3219,3221,3223,3225,3227,3229,3231],{"class":33,"line":90},[31,3220,55],{"class":37},[31,3222,2653],{"class":58},[31,3224,63],{"class":62},[31,3226,66],{"class":37},[31,3228,69],{"class":58},[31,3230,72],{"class":62},[31,3232,75],{"class":58},[31,3234,3235],{"class":33,"line":111},[31,3236,81],{"class":62},[31,3238,3239],{"class":33,"line":117},[31,3240,1744],{"class":37},[31,3242,3243,3245,3247,3249,3251,3253,3256,3259,3261,3263],{"class":33,"line":144},[31,3244,2676],{"class":58},[31,3246,96],{"class":62},[31,3248,99],{"class":58},[31,3250,102],{"class":62},[31,3252,2685],{"class":41},[31,3254,3255],{"class":62},"),",[31,3257,3258],{"class":58},"age",[31,3260,102],{"class":62},[31,3262,1226],{"class":125},[31,3264,108],{"class":62},[31,3266,3267],{"class":33,"line":150},[31,3268,114],{"class":62},[31,3270,3271,3273,3275,3277,3279,3281,3283,3285],{"class":33,"line":156},[31,3272,120],{"class":58},[31,3274,102],{"class":62},[31,3276,126],{"class":125},[31,3278,129],{"class":62},[31,3280,132],{"class":58},[31,3282,135],{"class":62},[31,3284,874],{"class":41},[31,3286,141],{"class":62},[31,3288,3289,3291,3293,3295,3297,3299,3302,3304,3306,3309,3311,3313,3316,3318,3320],{"class":33,"line":161},[31,3290,1255],{"class":62},[31,3292,1258],{"class":37},[31,3294,1261],{"class":125},[31,3296,1264],{"class":62},[31,3298,236],{"class":37},[31,3300,3301],{"class":58},"base_interfaces_demo",[31,3303,72],{"class":62},[31,3305,1274],{"class":58},[31,3307,3308],{"class":62},"::Student",[31,3310,1280],{"class":37},[31,3312,102],{"class":62},[31,3314,3315],{"class":41},"\"chatter_stu\"",[31,3317,1288],{"class":62},[31,3319,1291],{"class":125},[31,3321,141],{"class":62},[31,3323,3324,3326,3328,3330,3332,3334,3336,3339,3342,3344,3346,3348,3350,3352,3354,3356,3359,3361],{"class":33,"line":192},[31,3325,1298],{"class":62},[31,3327,1258],{"class":37},[31,3329,1261],{"class":125},[31,3331,129],{"class":62},[31,3333,1307],{"class":58},[31,3335,102],{"class":62},[31,3337,3338],{"class":125},"500",[31,3340,3341],{"class":37},"ms",[31,3343,1288],{"class":62},[31,3345,228],{"class":58},[31,3347,72],{"class":62},[31,3349,1324],{"class":58},[31,3351,102],{"class":62},[31,3353,1329],{"class":37},[31,3355,2782],{"class":58},[31,3357,3358],{"class":62},"::on_timer_callback,",[31,3360,126],{"class":125},[31,3362,1339],{"class":62},[31,3364,3365],{"class":33,"line":197},[31,3366,147],{"class":62},[31,3368,3369],{"class":33,"line":211},[31,3370,2142],{"class":37},[31,3372,3373,3375,3378],{"class":33,"line":216},[31,3374,1353],{"class":37},[31,3376,3377],{"class":58}," on_timer_callback",[31,3379,1359],{"class":62},[31,3381,3382],{"class":33,"line":245},[31,3383,114],{"class":62},[31,3385,3386,3389,3392,3394,3397,3399,3401,3403,3406],{"class":33,"line":250},[31,3387,3388],{"class":37},"        auto",[31,3390,3391],{"class":62}," stu ",[31,3393,1258],{"class":37},[31,3395,3396],{"class":58}," base_interfaces_demo",[31,3398,72],{"class":62},[31,3400,1274],{"class":58},[31,3402,72],{"class":62},[31,3404,3405],{"class":58},"Student",[31,3407,260],{"class":62},[31,3409,3410,3413,3415,3418],{"class":33,"line":263},[31,3411,3412],{"class":62},"        stu.name ",[31,3414,1258],{"class":37},[31,3416,3417],{"class":41}," \"葫芦娃\"",[31,3419,272],{"class":62},[31,3421,3422,3425,3427],{"class":33,"line":275},[31,3423,3424],{"class":62},"        stu.age ",[31,3426,1258],{"class":37},[31,3428,3429],{"class":62}," age;\n",[31,3431,3432,3435,3437,3440,3443],{"class":33,"line":417},[31,3433,3434],{"class":62},"        stu.height ",[31,3436,1258],{"class":37},[31,3438,3439],{"class":125}," 2.20",[31,3441,3442],{"class":37},"f",[31,3444,272],{"class":62},[31,3446,3447,3450,3452],{"class":33,"line":422},[31,3448,3449],{"class":62},"        age",[31,3451,1413],{"class":37},[31,3453,272],{"class":62},[31,3455,3456,3459,3461],{"class":33,"line":428},[31,3457,3458],{"class":62},"        publisher_->",[31,3460,1455],{"class":58},[31,3462,3463],{"class":62},"(stu);\n",[31,3465,3466,3468,3470,3472,3474,3476,3478,3481,3483,3485,3488,3490,3493,3496,3499,3501],{"class":33,"line":434},[31,3467,1769],{"class":58},[31,3469,102],{"class":62},[31,3471,126],{"class":125},[31,3473,129],{"class":62},[31,3475,132],{"class":58},[31,3477,135],{"class":62},[31,3479,3480],{"class":41},"\"发布的消息:(",[31,3482,1435],{"class":125},[31,3484,1288],{"class":41},[31,3486,3487],{"class":125},"%d",[31,3489,1288],{"class":41},[31,3491,3492],{"class":125},"%.2f",[31,3494,3495],{"class":41},")\"",[31,3497,3498],{"class":62},",stu.name.",[31,3500,1444],{"class":58},[31,3502,3503],{"class":62},"(),stu.age,stu.height);\n",[31,3505,3506],{"class":33,"line":440},[31,3507,147],{"class":62},[31,3509,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528],{"class":33,"line":446},[31,3511,1467],{"class":58},[31,3513,72],{"class":62},[31,3515,1472],{"class":58},[31,3517,236],{"class":62},[31,3519,3301],{"class":58},[31,3521,72],{"class":62},[31,3523,1274],{"class":58},[31,3525,72],{"class":62},[31,3527,3405],{"class":58},[31,3529,1487],{"class":62},[31,3531,3532,3534,3536,3538],{"class":33,"line":452},[31,3533,1467],{"class":58},[31,3535,72],{"class":62},[31,3537,1496],{"class":58},[31,3539,1499],{"class":62},[31,3541,3542,3545],{"class":33,"line":458},[31,3543,3544],{"class":37},"    int32_t",[31,3546,3429],{"class":62},[31,3548,3549],{"class":33,"line":1540},[31,3550,153],{"class":62},[31,3552,3553],{"class":33,"line":1545},[31,3554,49],{"emptyLinePlaceholder":48},[31,3556,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575],{"class":33,"line":1556},[31,3558,164],{"class":37},[31,3560,167],{"class":58},[31,3562,102],{"class":62},[31,3564,164],{"class":37},[31,3566,175],{"class":174},[31,3568,178],{"class":62},[31,3570,181],{"class":37},[31,3572,184],{"class":37},[31,3574,187],{"class":174},[31,3576,108],{"class":62},[31,3578,3579],{"class":33,"line":1561},[31,3580,81],{"class":62},[31,3582,3583,3585,3587,3589],{"class":33,"line":1584},[31,3584,200],{"class":58},[31,3586,72],{"class":62},[31,3588,205],{"class":58},[31,3590,208],{"class":62},[31,3592,3593],{"class":33,"line":1589},[31,3594,49],{"emptyLinePlaceholder":48},[31,3596,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615],{"class":33,"line":1600},[31,3598,200],{"class":58},[31,3600,72],{"class":62},[31,3602,223],{"class":58},[31,3604,102],{"class":62},[31,3606,228],{"class":58},[31,3608,72],{"class":62},[31,3610,233],{"class":58},[31,3612,236],{"class":62},[31,3614,2782],{"class":58},[31,3616,242],{"class":62},[31,3618,3619],{"class":33,"line":1609},[31,3620,49],{"emptyLinePlaceholder":48},[31,3622,3624,3626,3628,3630],{"class":33,"line":3623},37,[31,3625,200],{"class":58},[31,3627,72],{"class":62},[31,3629,257],{"class":58},[31,3631,260],{"class":62},[31,3633,3635,3637,3639],{"class":33,"line":3634},38,[31,3636,266],{"class":37},[31,3638,269],{"class":125},[31,3640,272],{"class":62},[31,3642,3644],{"class":33,"line":3643},39,[31,3645,278],{"class":62},[14,3647,3648],{},[17,3649],{"alt":19,"src":3650},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image481.webp",[14,3652,3653],{},[17,3654],{"alt":19,"src":3655},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image482.webp",[14,3657,3658],{},[17,3659],{"alt":19,"src":3660},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image483.webp",[14,3662,3663],{},"虽然发布方可以打印日志，但是不代表信息被正常发出去了。",[14,3665,3666],{},[17,3667],{"alt":19,"src":3668},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image484.webp",[14,3670,3671],{},"这样检验才是真能确定数据被发送出去了。",[472,3673],{},[14,3675,3676],{},[17,3677],{"alt":19,"src":3678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image485.webp",[14,3680,3681],{},[17,3682],{"alt":19,"src":3683},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image486.webp",[22,3685,3687],{"className":24,"code":3686,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"base_interfaces_demo/msg/student.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,3688,3689,3695,3701,3705,3718,3722,3738,3742,3746,3760,3764,3782,3839,3843,3847,3867,3871,3908,3912,3931,3935,3939,3961,3965,3975,3979,4001,4005,4015,4023],{"__ignoreMap":19},[31,3690,3691,3693],{"class":33,"line":34},[31,3692,38],{"class":37},[31,3694,42],{"class":41},[31,3696,3697,3699],{"class":33,"line":45},[31,3698,38],{"class":37},[31,3700,3194],{"class":41},[31,3702,3703],{"class":33,"line":52},[31,3704,49],{"emptyLinePlaceholder":48},[31,3706,3707,3709,3711,3713,3715],{"class":33,"line":78},[31,3708,1162],{"class":37},[31,3710,3396],{"class":58},[31,3712,72],{"class":62},[31,3714,1274],{"class":58},[31,3716,3717],{"class":62},"::Student;\n",[31,3719,3720],{"class":33,"line":84},[31,3721,49],{"emptyLinePlaceholder":48},[31,3723,3724,3726,3728,3730,3732,3734,3736],{"class":33,"line":90},[31,3725,55],{"class":37},[31,3727,2848],{"class":58},[31,3729,63],{"class":62},[31,3731,66],{"class":37},[31,3733,69],{"class":58},[31,3735,72],{"class":62},[31,3737,75],{"class":58},[31,3739,3740],{"class":33,"line":111},[31,3741,81],{"class":62},[31,3743,3744],{"class":33,"line":117},[31,3745,1744],{"class":37},[31,3747,3748,3750,3752,3754,3756,3758],{"class":33,"line":144},[31,3749,2871],{"class":58},[31,3751,96],{"class":62},[31,3753,99],{"class":58},[31,3755,102],{"class":62},[31,3757,2880],{"class":41},[31,3759,108],{"class":62},[31,3761,3762],{"class":33,"line":150},[31,3763,114],{"class":62},[31,3765,3766,3768,3770,3772,3774,3776,3778,3780],{"class":33,"line":156},[31,3767,1769],{"class":58},[31,3769,102],{"class":62},[31,3771,126],{"class":125},[31,3773,129],{"class":62},[31,3775,132],{"class":58},[31,3777,135],{"class":62},[31,3779,1782],{"class":41},[31,3781,141],{"class":62},[31,3783,3784,3787,3789,3791,3793,3795,3797,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837],{"class":33,"line":161},[31,3785,3786],{"class":62},"        Subscription_ ",[31,3788,1258],{"class":37},[31,3790,1261],{"class":125},[31,3792,2078],{"class":62},[31,3794,236],{"class":37},[31,3796,3405],{"class":62},[31,3798,1280],{"class":37},[31,3800,102],{"class":62},[31,3802,3315],{"class":41},[31,3804,1288],{"class":62},[31,3806,1291],{"class":125},[31,3808,1288],{"class":62},[31,3810,228],{"class":58},[31,3812,72],{"class":62},[31,3814,1324],{"class":58},[31,3816,102],{"class":62},[31,3818,1329],{"class":37},[31,3820,2977],{"class":58},[31,3822,2115],{"class":62},[31,3824,126],{"class":125},[31,3826,1288],{"class":62},[31,3828,228],{"class":58},[31,3830,72],{"class":62},[31,3832,2126],{"class":58},[31,3834,72],{"class":62},[31,3836,1312],{"class":125},[31,3838,1339],{"class":62},[31,3840,3841],{"class":33,"line":192},[31,3842,147],{"class":62},[31,3844,3845],{"class":33,"line":197},[31,3846,2142],{"class":37},[31,3848,3849,3851,3853,3855,3857,3860,3862,3865],{"class":33,"line":211},[31,3850,1353],{"class":37},[31,3852,2149],{"class":58},[31,3854,102],{"class":62},[31,3856,2154],{"class":37},[31,3858,3859],{"class":58}," Student",[31,3861,2167],{"class":37},[31,3863,3864],{"class":174},"stu",[31,3866,108],{"class":62},[31,3868,3869],{"class":33,"line":216},[31,3870,114],{"class":62},[31,3872,3873,3875,3877,3879,3881,3883,3885,3888,3890,3893,3895,3898,3900,3902,3904,3906],{"class":33,"line":245},[31,3874,1769],{"class":58},[31,3876,102],{"class":62},[31,3878,126],{"class":125},[31,3880,129],{"class":62},[31,3882,132],{"class":58},[31,3884,135],{"class":62},[31,3886,3887],{"class":41},"\"订阅的学生信息:name=",[31,3889,1435],{"class":125},[31,3891,3892],{"class":41},",age=",[31,3894,3487],{"class":125},[31,3896,3897],{"class":41},",height=",[31,3899,3492],{"class":125},[31,3901,1438],{"class":41},[31,3903,3498],{"class":62},[31,3905,1444],{"class":58},[31,3907,3503],{"class":62},[31,3909,3910],{"class":33,"line":250},[31,3911,147],{"class":62},[31,3913,3914,3917,3920,3922,3924,3926,3928],{"class":33,"line":263},[31,3915,3916],{"class":62},"_    ",[31,3918,3919],{"class":58},"rclcpp",[31,3921,72],{"class":62},[31,3923,2216],{"class":58},[31,3925,236],{"class":62},[31,3927,3405],{"class":58},[31,3929,3930],{"class":62},">::SharedPtr Subscription_;\n",[31,3932,3933],{"class":33,"line":275},[31,3934,153],{"class":62},[31,3936,3937],{"class":33,"line":417},[31,3938,49],{"emptyLinePlaceholder":48},[31,3940,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959],{"class":33,"line":422},[31,3942,164],{"class":37},[31,3944,167],{"class":58},[31,3946,102],{"class":62},[31,3948,164],{"class":37},[31,3950,175],{"class":174},[31,3952,178],{"class":62},[31,3954,181],{"class":37},[31,3956,1815],{"class":37},[31,3958,187],{"class":174},[31,3960,1820],{"class":62},[31,3962,3963],{"class":33,"line":428},[31,3964,81],{"class":62},[31,3966,3967,3969,3971,3973],{"class":33,"line":434},[31,3968,1467],{"class":58},[31,3970,72],{"class":62},[31,3972,205],{"class":58},[31,3974,208],{"class":62},[31,3976,3977],{"class":33,"line":440},[31,3978,49],{"emptyLinePlaceholder":48},[31,3980,3981,3983,3985,3987,3989,3991,3993,3995,3997,3999],{"class":33,"line":446},[31,3982,1467],{"class":58},[31,3984,72],{"class":62},[31,3986,223],{"class":58},[31,3988,102],{"class":62},[31,3990,228],{"class":58},[31,3992,72],{"class":62},[31,3994,233],{"class":58},[31,3996,236],{"class":62},[31,3998,2977],{"class":58},[31,4000,242],{"class":62},[31,4002,4003],{"class":33,"line":452},[31,4004,49],{"emptyLinePlaceholder":48},[31,4006,4007,4009,4011,4013],{"class":33,"line":458},[31,4008,1467],{"class":58},[31,4010,72],{"class":62},[31,4012,257],{"class":58},[31,4014,260],{"class":62},[31,4016,4017,4019,4021],{"class":33,"line":1540},[31,4018,1880],{"class":37},[31,4020,269],{"class":125},[31,4022,272],{"class":62},[31,4024,4025],{"class":33,"line":1545},[31,4026,278],{"class":62},[14,4028,4029],{},[17,4030],{"alt":19,"src":4031},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image487.webp",[14,4033,4034],{},[17,4035],{"alt":19,"src":4036},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image488.webp",[10,4038,4039],{"id":4039},"话题通信_rqt查看计算图",[14,4041,4042],{},[17,4043],{"alt":19,"src":4044},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image489.webp",[14,4046,4047],{},[17,4048],{"alt":19,"src":4049},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image490.webp",[14,4051,4052],{},[17,4053],{"alt":19,"src":4054},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image491.webp",[14,4056,4057],{},[17,4058],{"alt":19,"src":4059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image492.webp",[472,4061],{},[14,4063,4064],{},[17,4065],{"alt":19,"src":4066},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image493.webp",[14,4068,4069],{},"图形化工具RQT",[14,4071,4072],{},[17,4073],{"alt":19,"src":4074},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image494.webp",[14,4076,4077],{},[17,4078],{"alt":19,"src":4079},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image495.webp",[14,4081,4082],{},[17,4083],{"alt":19,"src":4084},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image496.webp",[14,4086,4087],{},[17,4088],{"alt":19,"src":4089},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image497.webp",[14,4091,4092],{},[17,4093],{"alt":19,"src":4094},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image498.webp",[10,4096,4097],{"id":4097},"服务通信_理论",[14,4099,4100],{},[17,4101],{"alt":19,"src":4102},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image499.webp",[14,4104,4105],{},[17,4106],{"alt":19,"src":4107},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image500.webp",[14,4109,4110],{},[17,4111],{"alt":19,"src":4112},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image501.webp",[14,4114,4115],{},"只能有一个服务端，可以有多个客户端，每个客户端都可以向服务端发送请求。（当然可以有多个服务端，但是会出很多逻辑问题，这是极其不合理的，禁止使用）",[14,4117,4118],{},[17,4119],{"alt":19,"src":4120},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image502.webp",[10,4122,4124],{"id":4123},"服务通信_实验1_服务端实现c","服务通信_实验1_服务端实现(C++)",[14,4126,4127],{},[17,4128],{"alt":19,"src":4129},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image503.webp",[14,4131,4132],{},[17,4133],{"alt":19,"src":4134},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image504.webp",[14,4136,4137],{},"先开服务端，然后从客户端提交两个整数，到服务端之后，服务端会解析数据，然后求和，并返回给客户端。",[14,4139,4140],{},[17,4141],{"alt":19,"src":4142},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image505.webp",[14,4144,4145],{},[17,4146],{"alt":19,"src":4147},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image506.webp",[14,4149,4150],{},[17,4151],{"alt":19,"src":4152},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image507.webp",[14,4154,4155],{},[17,4156],{"alt":19,"src":4157},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image508.webp",[22,4159,4161],{"className":1625,"code":4160,"language":1627,"meta":19,"style":19},"ros2 pkg create cpp02_service --build-type ament_cmake --dependencies rclcpp base_interfaces_demo --node-name demo01_server\n",[28,4162,4163],{"__ignoreMap":19},[31,4164,4165,4167,4169,4172,4175,4178,4181,4184,4186,4188,4191],{"class":33,"line":34},[31,4166,1634],{"class":58},[31,4168,2429],{"class":41},[31,4170,4171],{"class":41}," create",[31,4173,4174],{"class":41}," cpp02_service",[31,4176,4177],{"class":125}," --build-type",[31,4179,4180],{"class":41}," ament_cmake",[31,4182,4183],{"class":125}," --dependencies",[31,4185,69],{"class":41},[31,4187,3396],{"class":41},[31,4189,4190],{"class":125}," --node-name",[31,4192,4193],{"class":41}," demo01_server\n",[472,4195],{},[14,4197,4198],{},[17,4199],{"alt":19,"src":4200},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image509.webp",[14,4202,4203],{},[17,4204],{"alt":19,"src":4205},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image510.webp",[14,4207,4208],{},[17,4209],{"alt":19,"src":4210},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image511.webp",[14,4212,4213],{},"如果之前用过demo_interfaces_demo，那么一般是不用再配置package.xml了。",[14,4215,4216],{},[17,4217],{"alt":19,"src":4218},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image512.webp",[14,4220,4221],{},[17,4222],{"alt":19,"src":4223},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image513.webp",[14,4225,4226],{},[17,4227],{"alt":19,"src":4228},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image514.webp",[14,4230,4231],{},[17,4232],{"alt":19,"src":4233},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image515.webp",[14,4235,4236],{},[17,4237],{"alt":19,"src":4238},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image516.webp",[14,4240,4241],{},"记得文件名首字母要大写！",[14,4243,4244],{},[17,4245],{"alt":19,"src":4246},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image517.webp",[14,4248,4249],{},[17,4250],{"alt":19,"src":4251},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image518.webp",[14,4253,4254],{},[17,4255],{"alt":19,"src":4256},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image519.webp",[14,4258,4259],{},[17,4260],{"alt":19,"src":4261},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image520.webp",[14,4263,4264],{},[17,4265],{"alt":19,"src":4266},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image521.webp",[14,4268,4269],{},[17,4270],{"alt":19,"src":4271},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image522.webp",[14,4273,4274],{},[17,4275],{"alt":19,"src":4276},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image523.webp",[14,4278,4279],{},[17,4280],{"alt":19,"src":4281},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image524.webp",[14,4283,4284],{},[17,4285],{"alt":19,"src":4286},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image525.webp",[14,4288,4289],{},[17,4290],{"alt":19,"src":4291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image526.webp",[14,4293,4294],{},[17,4295],{"alt":19,"src":4296},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image527.webp",[14,4298,4299],{},"这是另一个验证方式",[472,4301],{},[14,4303,4304],{},[17,4305],{"alt":19,"src":4306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image528.webp",[14,4308,4309],{},[17,4310],{"alt":19,"src":4311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image529.webp",[22,4313,4315],{"className":24,"code":4314,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,4316,4317,4323,4327,4344,4348,4352,4368,4372,4391,4395,4399,4403,4425,4429,4439,4443,4466,4470,4480,4488],{"__ignoreMap":19},[31,4318,4319,4321],{"class":33,"line":34},[31,4320,38],{"class":37},[31,4322,42],{"class":41},[31,4324,4325],{"class":33,"line":45},[31,4326,49],{"emptyLinePlaceholder":48},[31,4328,4329,4331,4334,4336,4338,4340,4342],{"class":33,"line":52},[31,4330,55],{"class":37},[31,4332,4333],{"class":58}," AddIntsServer",[31,4335,63],{"class":62},[31,4337,66],{"class":37},[31,4339,69],{"class":58},[31,4341,72],{"class":62},[31,4343,75],{"class":58},[31,4345,4346],{"class":33,"line":78},[31,4347,81],{"class":62},[31,4349,4350],{"class":33,"line":84},[31,4351,87],{"class":37},[31,4353,4354,4357,4359,4361,4363,4366],{"class":33,"line":90},[31,4355,4356],{"class":58},"    AddIntsServer",[31,4358,96],{"class":62},[31,4360,99],{"class":58},[31,4362,102],{"class":62},[31,4364,4365],{"class":41},"\"add_ints_server_node_cpp\"",[31,4367,108],{"class":62},[31,4369,4370],{"class":33,"line":111},[31,4371,114],{"class":62},[31,4373,4374,4376,4378,4380,4382,4384,4386,4389],{"class":33,"line":117},[31,4375,120],{"class":58},[31,4377,102],{"class":62},[31,4379,126],{"class":125},[31,4381,129],{"class":62},[31,4383,132],{"class":58},[31,4385,135],{"class":62},[31,4387,4388],{"class":41},"\"服务端节点创建！\"",[31,4390,141],{"class":62},[31,4392,4393],{"class":33,"line":144},[31,4394,147],{"class":62},[31,4396,4397],{"class":33,"line":150},[31,4398,153],{"class":62},[31,4400,4401],{"class":33,"line":156},[31,4402,49],{"emptyLinePlaceholder":48},[31,4404,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423],{"class":33,"line":161},[31,4406,164],{"class":37},[31,4408,167],{"class":58},[31,4410,102],{"class":62},[31,4412,164],{"class":37},[31,4414,175],{"class":174},[31,4416,178],{"class":62},[31,4418,181],{"class":37},[31,4420,184],{"class":37},[31,4422,187],{"class":174},[31,4424,108],{"class":62},[31,4426,4427],{"class":33,"line":192},[31,4428,81],{"class":62},[31,4430,4431,4433,4435,4437],{"class":33,"line":197},[31,4432,200],{"class":58},[31,4434,72],{"class":62},[31,4436,205],{"class":58},[31,4438,208],{"class":62},[31,4440,4441],{"class":33,"line":211},[31,4442,49],{"emptyLinePlaceholder":48},[31,4444,4445,4447,4449,4451,4453,4455,4457,4459,4461,4464],{"class":33,"line":216},[31,4446,200],{"class":58},[31,4448,72],{"class":62},[31,4450,223],{"class":58},[31,4452,102],{"class":62},[31,4454,228],{"class":58},[31,4456,72],{"class":62},[31,4458,233],{"class":58},[31,4460,236],{"class":62},[31,4462,4463],{"class":58},"AddIntsServer",[31,4465,242],{"class":62},[31,4467,4468],{"class":33,"line":245},[31,4469,49],{"emptyLinePlaceholder":48},[31,4471,4472,4474,4476,4478],{"class":33,"line":250},[31,4473,200],{"class":58},[31,4475,72],{"class":62},[31,4477,257],{"class":58},[31,4479,260],{"class":62},[31,4481,4482,4484,4486],{"class":33,"line":263},[31,4483,266],{"class":37},[31,4485,269],{"class":125},[31,4487,272],{"class":62},[31,4489,4490],{"class":33,"line":275},[31,4491,278],{"class":62},[14,4493,4494],{},[17,4495],{"alt":19,"src":4496},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image530.webp",[14,4498,4499],{},[17,4500],{"alt":19,"src":4501},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image531.webp",[14,4503,4504],{},"服务端是一直要挂起的",[14,4506,4507],{},[17,4508],{"alt":19,"src":4509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image532.webp",[14,4511,4512],{},"客户端是执行完毕就结束返回到终端的",[14,4514,4515],{},[17,4516],{"alt":19,"src":4517},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image533.webp",[14,4519,4520],{},"所以客户端不用调用spin函数，直接创建对象即可。",[14,4522,4523],{},[17,4524],{"alt":19,"src":4525},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image534.webp",[22,4527,4529],{"className":24,"code":4528,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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//   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,4530,4531,4537,4541,4558,4562,4566,4582,4586,4605,4609,4613,4617,4639,4643,4653,4657,4663,4687,4691,4701,4709],{"__ignoreMap":19},[31,4532,4533,4535],{"class":33,"line":34},[31,4534,38],{"class":37},[31,4536,42],{"class":41},[31,4538,4539],{"class":33,"line":45},[31,4540,49],{"emptyLinePlaceholder":48},[31,4542,4543,4545,4548,4550,4552,4554,4556],{"class":33,"line":52},[31,4544,55],{"class":37},[31,4546,4547],{"class":58}," AddIntsClient",[31,4549,63],{"class":62},[31,4551,66],{"class":37},[31,4553,69],{"class":58},[31,4555,72],{"class":62},[31,4557,75],{"class":58},[31,4559,4560],{"class":33,"line":78},[31,4561,81],{"class":62},[31,4563,4564],{"class":33,"line":84},[31,4565,87],{"class":37},[31,4567,4568,4571,4573,4575,4577,4580],{"class":33,"line":90},[31,4569,4570],{"class":58},"    AddIntsClient",[31,4572,96],{"class":62},[31,4574,99],{"class":58},[31,4576,102],{"class":62},[31,4578,4579],{"class":41},"\"add_ints_client_node_cpp\"",[31,4581,108],{"class":62},[31,4583,4584],{"class":33,"line":111},[31,4585,114],{"class":62},[31,4587,4588,4590,4592,4594,4596,4598,4600,4603],{"class":33,"line":117},[31,4589,120],{"class":58},[31,4591,102],{"class":62},[31,4593,126],{"class":125},[31,4595,129],{"class":62},[31,4597,132],{"class":58},[31,4599,135],{"class":62},[31,4601,4602],{"class":41},"\"客户端节点创建！\"",[31,4604,141],{"class":62},[31,4606,4607],{"class":33,"line":144},[31,4608,147],{"class":62},[31,4610,4611],{"class":33,"line":150},[31,4612,153],{"class":62},[31,4614,4615],{"class":33,"line":156},[31,4616,49],{"emptyLinePlaceholder":48},[31,4618,4619,4621,4623,4625,4627,4629,4631,4633,4635,4637],{"class":33,"line":161},[31,4620,164],{"class":37},[31,4622,167],{"class":58},[31,4624,102],{"class":62},[31,4626,164],{"class":37},[31,4628,175],{"class":174},[31,4630,178],{"class":62},[31,4632,181],{"class":37},[31,4634,184],{"class":37},[31,4636,187],{"class":174},[31,4638,108],{"class":62},[31,4640,4641],{"class":33,"line":192},[31,4642,81],{"class":62},[31,4644,4645,4647,4649,4651],{"class":33,"line":197},[31,4646,200],{"class":58},[31,4648,72],{"class":62},[31,4650,205],{"class":58},[31,4652,208],{"class":62},[31,4654,4655],{"class":33,"line":211},[31,4656,49],{"emptyLinePlaceholder":48},[31,4658,4659],{"class":33,"line":216},[31,4660,4662],{"class":4661},"sJ8bj","//   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n",[31,4664,4665,4668,4671,4673,4675,4677,4679,4681,4684],{"class":33,"line":245},[31,4666,4667],{"class":37},"  auto",[31,4669,4670],{"class":62}," client ",[31,4672,1258],{"class":37},[31,4674,1168],{"class":58},[31,4676,72],{"class":62},[31,4678,233],{"class":58},[31,4680,236],{"class":62},[31,4682,4683],{"class":58},"AddIntsClient",[31,4685,4686],{"class":62},">();\n",[31,4688,4689],{"class":33,"line":250},[31,4690,49],{"emptyLinePlaceholder":48},[31,4692,4693,4695,4697,4699],{"class":33,"line":263},[31,4694,200],{"class":58},[31,4696,72],{"class":62},[31,4698,257],{"class":58},[31,4700,260],{"class":62},[31,4702,4703,4705,4707],{"class":33,"line":275},[31,4704,266],{"class":37},[31,4706,269],{"class":125},[31,4708,272],{"class":62},[31,4710,4711],{"class":33,"line":417},[31,4712,278],{"class":62},[14,4714,4715],{},"然后还要编辑配置文件",[14,4717,4718],{},[17,4719],{"alt":19,"src":4720},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image535.webp",[14,4722,4723],{},"package.xml现在不用修改",[14,4725,4726],{},[17,4727],{"alt":19,"src":4728},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image536.webp",[14,4730,4731],{},[17,4732],{"alt":19,"src":4733},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image537.webp",[14,4735,4736],{},[17,4737],{"alt":19,"src":4738},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image538.webp",[14,4740,4741],{},[17,4742],{"alt":19,"src":4743},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image539.webp",[14,4745,4746],{},[17,4747],{"alt":19,"src":4748},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image540.webp",[472,4750],{},[14,4752,4753],{},[17,4754],{"alt":19,"src":4755},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image541.webp",[14,4757,4758],{},[17,4759],{"alt":19,"src":4760},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image542.webp",[14,4762,4763],{},[17,4764],{"alt":19,"src":4765},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image543.webp",[14,4767,4768],{},[17,4769],{"alt":19,"src":4770},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image544.webp",[14,4772,4773],{},[17,4774],{"alt":19,"src":4775},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image545.webp",[14,4777,4778],{},"有4个入口参数，但是后两个有默认值，所以我们只用管前2个。",[14,4780,4781],{},"第一个入口参数就是一个话题名称，字符串",[14,4783,4784],{},"第二个入口参数是回调函数",[14,4786,4787],{},"返回值是一个service类型的智能指针",[14,4789,4790],{},[17,4791],{"alt":19,"src":4792},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image546.webp",[14,4794,4795],{},[17,4796],{"alt":19,"src":4797},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image547.webp",[14,4799,4800],{},[17,4801],{"alt":19,"src":4802},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image548.webp",[14,4804,4805],{},[17,4806],{"alt":19,"src":4807},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image549.webp",[14,4809,4810],{},[17,4811],{"alt":19,"src":4812},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image550.webp",[14,4814,4815],{},[17,4816],{"alt":19,"src":4817},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image551.webp",[14,4819,4820],{},[17,4821],{"alt":19,"src":4822},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image552.webp",[14,4824,4825],{},[17,4826],{"alt":19,"src":4827},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image553.webp",[22,4829,4831],{"className":24,"code":4830,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"base_interfaces_demo/srv/add_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,4832,4833,4839,4846,4850,4864,4868,4884,4888,4892,4906,4910,4928,5001,5005,5009,5055,5059,5081,5114,5118,5144,5148,5152,5174,5178,5188,5192,5214,5218,5228,5236],{"__ignoreMap":19},[31,4834,4835,4837],{"class":33,"line":34},[31,4836,38],{"class":37},[31,4838,42],{"class":41},[31,4840,4841,4843],{"class":33,"line":45},[31,4842,38],{"class":37},[31,4844,4845],{"class":41}," \"base_interfaces_demo/srv/add_ints.hpp\"\n",[31,4847,4848],{"class":33,"line":52},[31,4849,49],{"emptyLinePlaceholder":48},[31,4851,4852,4854,4856,4858,4861],{"class":33,"line":78},[31,4853,1162],{"class":37},[31,4855,3396],{"class":58},[31,4857,72],{"class":62},[31,4859,4860],{"class":58},"srv",[31,4862,4863],{"class":62},"::AddInts;\n",[31,4865,4866],{"class":33,"line":84},[31,4867,49],{"emptyLinePlaceholder":48},[31,4869,4870,4872,4874,4876,4878,4880,4882],{"class":33,"line":90},[31,4871,55],{"class":37},[31,4873,4333],{"class":58},[31,4875,63],{"class":62},[31,4877,66],{"class":37},[31,4879,69],{"class":58},[31,4881,72],{"class":62},[31,4883,75],{"class":58},[31,4885,4886],{"class":33,"line":111},[31,4887,81],{"class":62},[31,4889,4890],{"class":33,"line":117},[31,4891,87],{"class":37},[31,4893,4894,4896,4898,4900,4902,4904],{"class":33,"line":144},[31,4895,4356],{"class":58},[31,4897,96],{"class":62},[31,4899,99],{"class":58},[31,4901,102],{"class":62},[31,4903,4365],{"class":41},[31,4905,108],{"class":62},[31,4907,4908],{"class":33,"line":150},[31,4909,114],{"class":62},[31,4911,4912,4914,4916,4918,4920,4922,4924,4926],{"class":33,"line":156},[31,4913,120],{"class":58},[31,4915,102],{"class":62},[31,4917,126],{"class":125},[31,4919,129],{"class":62},[31,4921,132],{"class":58},[31,4923,135],{"class":62},[31,4925,4388],{"class":41},[31,4927,141],{"class":62},[31,4929,4930,4933,4935,4937,4940,4942,4944,4946,4948,4951,4953,4955,4958,4960,4962,4964,4966,4968,4970,4972,4975,4977,4979,4981,4983,4985,4988,4990,4992,4994,4996,4999],{"class":33,"line":161},[31,4931,4932],{"class":62},"      server_ ",[31,4934,1258],{"class":37},[31,4936,1261],{"class":125},[31,4938,4939],{"class":62},"->create_service",[31,4941,236],{"class":37},[31,4943,3301],{"class":58},[31,4945,72],{"class":62},[31,4947,4860],{"class":58},[31,4949,4950],{"class":62},"::AddInts",[31,4952,1280],{"class":37},[31,4954,102],{"class":62},[31,4956,4957],{"class":41},"\"add_ints\"",[31,4959,1288],{"class":62},[31,4961,228],{"class":58},[31,4963,72],{"class":62},[31,4965,1324],{"class":58},[31,4967,102],{"class":62},[31,4969,1329],{"class":37},[31,4971,4463],{"class":58},[31,4973,4974],{"class":62},"::add_callback,",[31,4976,126],{"class":125},[31,4978,1288],{"class":62},[31,4980,228],{"class":58},[31,4982,72],{"class":62},[31,4984,2126],{"class":58},[31,4986,4987],{"class":62},"::_1,",[31,4989,228],{"class":58},[31,4991,72],{"class":62},[31,4993,2126],{"class":58},[31,4995,72],{"class":62},[31,4997,4998],{"class":125},"2",[31,5000,1339],{"class":62},[31,5002,5003],{"class":33,"line":192},[31,5004,147],{"class":62},[31,5006,5007],{"class":33,"line":197},[31,5008,1348],{"class":37},[31,5010,5011,5013,5016,5018,5020,5023,5025,5028,5030,5033,5036,5038,5041,5043,5046,5048,5050,5053],{"class":33,"line":211},[31,5012,1353],{"class":37},[31,5014,5015],{"class":58}," add_callback",[31,5017,102],{"class":62},[31,5019,2154],{"class":37},[31,5021,5022],{"class":58}," AddInts",[31,5024,72],{"class":62},[31,5026,5027],{"class":58},"Request",[31,5029,72],{"class":62},[31,5031,5032],{"class":58},"SharedPtr",[31,5034,5035],{"class":174}," req",[31,5037,1288],{"class":62},[31,5039,5040],{"class":58},"AddInts",[31,5042,72],{"class":62},[31,5044,5045],{"class":58},"Response",[31,5047,72],{"class":62},[31,5049,5032],{"class":58},[31,5051,5052],{"class":174}," res",[31,5054,108],{"class":62},[31,5056,5057],{"class":33,"line":216},[31,5058,114],{"class":62},[31,5060,5061,5064,5066,5069,5072,5075,5078],{"class":33,"line":245},[31,5062,5063],{"class":62},"      res->sum ",[31,5065,1258],{"class":37},[31,5067,5068],{"class":62}," req->num1 ",[31,5070,5071],{"class":37},"+",[31,5073,5074],{"class":62}," (",[31,5076,5077],{"class":37},"*",[31,5079,5080],{"class":62},"req).num2;\n",[31,5082,5083,5085,5087,5089,5091,5093,5095,5097,5099,5102,5104,5107,5109,5111],{"class":33,"line":250},[31,5084,120],{"class":58},[31,5086,102],{"class":62},[31,5088,126],{"class":125},[31,5090,129],{"class":62},[31,5092,132],{"class":58},[31,5094,135],{"class":62},[31,5096,1438],{"class":41},[31,5098,3487],{"class":125},[31,5100,5101],{"class":41}," + ",[31,5103,3487],{"class":125},[31,5105,5106],{"class":41}," = ",[31,5108,3487],{"class":125},[31,5110,1438],{"class":41},[31,5112,5113],{"class":62},",req->num1,req->num2,res->sum);\n",[31,5115,5116],{"class":33,"line":263},[31,5117,147],{"class":62},[31,5119,5120,5122,5124,5126,5129,5131,5133,5135,5137,5139,5141],{"class":33,"line":275},[31,5121,3916],{"class":62},[31,5123,3919],{"class":58},[31,5125,72],{"class":62},[31,5127,5128],{"class":58},"Service",[31,5130,236],{"class":62},[31,5132,3301],{"class":58},[31,5134,72],{"class":62},[31,5136,4860],{"class":58},[31,5138,72],{"class":62},[31,5140,5040],{"class":58},[31,5142,5143],{"class":62},">::SharedPtr server_;\n",[31,5145,5146],{"class":33,"line":417},[31,5147,153],{"class":62},[31,5149,5150],{"class":33,"line":422},[31,5151,49],{"emptyLinePlaceholder":48},[31,5153,5154,5156,5158,5160,5162,5164,5166,5168,5170,5172],{"class":33,"line":428},[31,5155,164],{"class":37},[31,5157,167],{"class":58},[31,5159,102],{"class":62},[31,5161,164],{"class":37},[31,5163,175],{"class":174},[31,5165,178],{"class":62},[31,5167,181],{"class":37},[31,5169,184],{"class":37},[31,5171,187],{"class":174},[31,5173,108],{"class":62},[31,5175,5176],{"class":33,"line":434},[31,5177,81],{"class":62},[31,5179,5180,5182,5184,5186],{"class":33,"line":440},[31,5181,200],{"class":58},[31,5183,72],{"class":62},[31,5185,205],{"class":58},[31,5187,208],{"class":62},[31,5189,5190],{"class":33,"line":446},[31,5191,49],{"emptyLinePlaceholder":48},[31,5193,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212],{"class":33,"line":452},[31,5195,200],{"class":58},[31,5197,72],{"class":62},[31,5199,223],{"class":58},[31,5201,102],{"class":62},[31,5203,228],{"class":58},[31,5205,72],{"class":62},[31,5207,233],{"class":58},[31,5209,236],{"class":62},[31,5211,4463],{"class":58},[31,5213,242],{"class":62},[31,5215,5216],{"class":33,"line":458},[31,5217,49],{"emptyLinePlaceholder":48},[31,5219,5220,5222,5224,5226],{"class":33,"line":1540},[31,5221,200],{"class":58},[31,5223,72],{"class":62},[31,5225,257],{"class":58},[31,5227,260],{"class":62},[31,5229,5230,5232,5234],{"class":33,"line":1545},[31,5231,266],{"class":37},[31,5233,269],{"class":125},[31,5235,272],{"class":62},[31,5237,5238],{"class":33,"line":1556},[31,5239,278],{"class":62},[14,5241,5242],{},[17,5243],{"alt":19,"src":5244},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image554.webp",[14,5246,5247],{},[17,5248],{"alt":19,"src":5249},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image555.webp",[14,5251,5252],{},"因为我们的客户端还没写，所以先暂时用ros2 service call这个小工具来查看服务端的情况",[14,5254,5255],{},[17,5256],{"alt":19,"src":5257},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image556.webp",[22,5259,5261],{"className":1625,"code":5260,"language":1627,"meta":19,"style":19},"ros2 service call /add_ints base_interfaces_demo/srv/AddInts \"{'num1': 10,'num2': 30}\"\n",[28,5262,5263],{"__ignoreMap":19},[31,5264,5265,5267,5270,5273,5276,5279],{"class":33,"line":34},[31,5266,1634],{"class":58},[31,5268,5269],{"class":41}," service",[31,5271,5272],{"class":41}," call",[31,5274,5275],{"class":41}," /add_ints",[31,5277,5278],{"class":41}," base_interfaces_demo/srv/AddInts",[31,5280,5281],{"class":41}," \"{'num1': 10,'num2': 30}\"\n",[14,5283,5284],{},"ros2 service call + 话题名 + 接口数据类型 + json代码(也可以理解成yaml格式的)",[14,5286,5287,5288,5291,5292,5294],{},"此json代码(yaml格式)格式: \"{'第一个数的名': ",[546,5289,5290],{},"空格"," +对应数值,'第二个数的名': ",[546,5293,5290],{}," +对应数的数值}\"",[10,5296,5298],{"id":5297},"服务通信_实验1_客户端实现c","服务通信_实验1_客户端实现(C++)",[14,5300,5301],{},[17,5302],{"alt":19,"src":5303},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image557.webp",[14,5305,5306],{},[17,5307],{"alt":19,"src":5308},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image558.webp",[14,5310,5311],{},[17,5312],{"alt":19,"src":5313},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image559.webp",[14,5315,5316],{},[17,5317],{"alt":19,"src":5318},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image560.webp",[14,5320,5321],{},"运行的时候后面跟了两个整形数据，",[14,5323,5324],{},"所以这个argc应该是等于3的。",[14,5326,5327],{},[17,5328],{"alt":19,"src":5329},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image561.webp",[14,5331,5332],{},[17,5333],{"alt":19,"src":5334},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image562.webp",[14,5336,5337],{},[17,5338],{"alt":19,"src":5339},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image563.webp",[14,5341,5342],{},[546,5343,5344],{},"argv[]:接收编译时的返回的argc的参数",[14,5346,5347],{},[546,5348,5349],{},"argc是命令行总的参数个数",[14,5351,5352],{},[546,5353,5354],{},"argv[]是argc个参数，其中第0个参数是程序的全名，以后的参数",[14,5356,5357],{},[17,5358],{"alt":19,"src":5359},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image564.webp",[14,5361,5362],{},[17,5363],{"alt":19,"src":5364},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image565.webp",[14,5366,5367],{},"必须得保证服务器开着，并且客户端能够连接服务器，如果服务器没开，那么发送的数据会丢失，但是一般使用服务通信的都是比较重要的信息，一定不要丢失了。",[14,5369,5370],{},[17,5371],{"alt":19,"src":5372},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image566.webp",[14,5374,5375],{},"客户端发送完数据后，会产生一个响应，这里直接当函数的返回值给返回了。",[14,5377,5378],{},[17,5379],{"alt":19,"src":5380},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image567.webp",[14,5382,5383],{},[17,5384],{"alt":19,"src":5385},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image568.webp",[14,5387,5388],{},[17,5389],{"alt":19,"src":5390},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image569.webp",[14,5392,5393],{},[17,5394],{"alt":19,"src":5395},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image570.webp",[14,5397,5398],{},[17,5399],{"alt":19,"src":5400},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image571.webp",[14,5402,5403],{},[17,5404],{"alt":19,"src":5405},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image572.webp",[22,5407,5408],{"className":24,"code":4528,"language":26,"meta":19,"style":19},[28,5409,5410,5416,5420,5436,5440,5444,5458,5462,5480,5484,5488,5492,5514,5518,5528,5532,5536,5556,5560,5570,5578],{"__ignoreMap":19},[31,5411,5412,5414],{"class":33,"line":34},[31,5413,38],{"class":37},[31,5415,42],{"class":41},[31,5417,5418],{"class":33,"line":45},[31,5419,49],{"emptyLinePlaceholder":48},[31,5421,5422,5424,5426,5428,5430,5432,5434],{"class":33,"line":52},[31,5423,55],{"class":37},[31,5425,4547],{"class":58},[31,5427,63],{"class":62},[31,5429,66],{"class":37},[31,5431,69],{"class":58},[31,5433,72],{"class":62},[31,5435,75],{"class":58},[31,5437,5438],{"class":33,"line":78},[31,5439,81],{"class":62},[31,5441,5442],{"class":33,"line":84},[31,5443,87],{"class":37},[31,5445,5446,5448,5450,5452,5454,5456],{"class":33,"line":90},[31,5447,4570],{"class":58},[31,5449,96],{"class":62},[31,5451,99],{"class":58},[31,5453,102],{"class":62},[31,5455,4579],{"class":41},[31,5457,108],{"class":62},[31,5459,5460],{"class":33,"line":111},[31,5461,114],{"class":62},[31,5463,5464,5466,5468,5470,5472,5474,5476,5478],{"class":33,"line":117},[31,5465,120],{"class":58},[31,5467,102],{"class":62},[31,5469,126],{"class":125},[31,5471,129],{"class":62},[31,5473,132],{"class":58},[31,5475,135],{"class":62},[31,5477,4602],{"class":41},[31,5479,141],{"class":62},[31,5481,5482],{"class":33,"line":144},[31,5483,147],{"class":62},[31,5485,5486],{"class":33,"line":150},[31,5487,153],{"class":62},[31,5489,5490],{"class":33,"line":156},[31,5491,49],{"emptyLinePlaceholder":48},[31,5493,5494,5496,5498,5500,5502,5504,5506,5508,5510,5512],{"class":33,"line":161},[31,5495,164],{"class":37},[31,5497,167],{"class":58},[31,5499,102],{"class":62},[31,5501,164],{"class":37},[31,5503,175],{"class":174},[31,5505,178],{"class":62},[31,5507,181],{"class":37},[31,5509,184],{"class":37},[31,5511,187],{"class":174},[31,5513,108],{"class":62},[31,5515,5516],{"class":33,"line":192},[31,5517,81],{"class":62},[31,5519,5520,5522,5524,5526],{"class":33,"line":197},[31,5521,200],{"class":58},[31,5523,72],{"class":62},[31,5525,205],{"class":58},[31,5527,208],{"class":62},[31,5529,5530],{"class":33,"line":211},[31,5531,49],{"emptyLinePlaceholder":48},[31,5533,5534],{"class":33,"line":216},[31,5535,4662],{"class":4661},[31,5537,5538,5540,5542,5544,5546,5548,5550,5552,5554],{"class":33,"line":245},[31,5539,4667],{"class":37},[31,5541,4670],{"class":62},[31,5543,1258],{"class":37},[31,5545,1168],{"class":58},[31,5547,72],{"class":62},[31,5549,233],{"class":58},[31,5551,236],{"class":62},[31,5553,4683],{"class":58},[31,5555,4686],{"class":62},[31,5557,5558],{"class":33,"line":250},[31,5559,49],{"emptyLinePlaceholder":48},[31,5561,5562,5564,5566,5568],{"class":33,"line":263},[31,5563,200],{"class":58},[31,5565,72],{"class":62},[31,5567,257],{"class":58},[31,5569,260],{"class":62},[31,5571,5572,5574,5576],{"class":33,"line":275},[31,5573,266],{"class":37},[31,5575,269],{"class":125},[31,5577,272],{"class":62},[31,5579,5580],{"class":33,"line":417},[31,5581,278],{"class":62},[14,5583,5584],{},[17,5585],{"alt":19,"src":5586},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image573.webp",[14,5588,5589],{},"这一段就应该放在节点初始化前面，防止多作一些耗资源的操作再进行判断。",[14,5591,5592],{},[17,5593],{"alt":19,"src":5594},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image574.webp",[14,5596,5597],{},"因为RCLCPP_INFO在节点创建的前面，无法使用类和实例化方式进行get_logger，也就是无法使用this指针和节点智能指针来获取。",[14,5599,5600],{},"所以我们采用以下方式：",[14,5602,5603],{},[17,5604],{"alt":19,"src":5605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image575.webp",[14,5607,5608],{},"这种方式通过rclcpp里的get_logger，但是需要给日志起个名字，放到入口参数里，我们就叫rclcpp吧。",[22,5610,5612],{"className":24,"code":5611,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,5613,5614,5620,5624,5640,5644,5648,5662,5666,5684,5688,5692,5696,5718,5722,5738,5743,5768,5777,5781,5791,5795,5815,5819,5829,5837],{"__ignoreMap":19},[31,5615,5616,5618],{"class":33,"line":34},[31,5617,38],{"class":37},[31,5619,42],{"class":41},[31,5621,5622],{"class":33,"line":45},[31,5623,49],{"emptyLinePlaceholder":48},[31,5625,5626,5628,5630,5632,5634,5636,5638],{"class":33,"line":52},[31,5627,55],{"class":37},[31,5629,4547],{"class":58},[31,5631,63],{"class":62},[31,5633,66],{"class":37},[31,5635,69],{"class":58},[31,5637,72],{"class":62},[31,5639,75],{"class":58},[31,5641,5642],{"class":33,"line":78},[31,5643,81],{"class":62},[31,5645,5646],{"class":33,"line":84},[31,5647,87],{"class":37},[31,5649,5650,5652,5654,5656,5658,5660],{"class":33,"line":90},[31,5651,4570],{"class":58},[31,5653,96],{"class":62},[31,5655,99],{"class":58},[31,5657,102],{"class":62},[31,5659,4579],{"class":41},[31,5661,108],{"class":62},[31,5663,5664],{"class":33,"line":111},[31,5665,114],{"class":62},[31,5667,5668,5670,5672,5674,5676,5678,5680,5682],{"class":33,"line":117},[31,5669,120],{"class":58},[31,5671,102],{"class":62},[31,5673,126],{"class":125},[31,5675,129],{"class":62},[31,5677,132],{"class":58},[31,5679,135],{"class":62},[31,5681,4602],{"class":41},[31,5683,141],{"class":62},[31,5685,5686],{"class":33,"line":144},[31,5687,147],{"class":62},[31,5689,5690],{"class":33,"line":150},[31,5691,153],{"class":62},[31,5693,5694],{"class":33,"line":156},[31,5695,49],{"emptyLinePlaceholder":48},[31,5697,5698,5700,5702,5704,5706,5708,5710,5712,5714,5716],{"class":33,"line":161},[31,5699,164],{"class":37},[31,5701,167],{"class":58},[31,5703,102],{"class":62},[31,5705,164],{"class":37},[31,5707,175],{"class":174},[31,5709,178],{"class":62},[31,5711,181],{"class":37},[31,5713,184],{"class":37},[31,5715,187],{"class":174},[31,5717,108],{"class":62},[31,5719,5720],{"class":33,"line":192},[31,5721,81],{"class":62},[31,5723,5724,5727,5730,5733,5736],{"class":33,"line":197},[31,5725,5726],{"class":37},"  if",[31,5728,5729],{"class":62},"(argc ",[31,5731,5732],{"class":37},"!=",[31,5734,5735],{"class":125}," 3",[31,5737,108],{"class":62},[31,5739,5740],{"class":33,"line":211},[31,5741,5742],{"class":62},"  {\n",[31,5744,5745,5748,5750,5752,5754,5756,5758,5761,5763,5766],{"class":33,"line":216},[31,5746,5747],{"class":58},"    RCLCPP_INFO",[31,5749,102],{"class":62},[31,5751,3919],{"class":58},[31,5753,72],{"class":62},[31,5755,132],{"class":58},[31,5757,102],{"class":62},[31,5759,5760],{"class":41},"\"rclcpp\"",[31,5762,3255],{"class":62},[31,5764,5765],{"class":41},"\"请提交两个整形数字!\"",[31,5767,141],{"class":62},[31,5769,5770,5772,5775],{"class":33,"line":245},[31,5771,1880],{"class":37},[31,5773,5774],{"class":125}," 1",[31,5776,272],{"class":62},[31,5778,5779],{"class":33,"line":250},[31,5780,455],{"class":62},[31,5782,5783,5785,5787,5789],{"class":33,"line":263},[31,5784,200],{"class":58},[31,5786,72],{"class":62},[31,5788,205],{"class":58},[31,5790,208],{"class":62},[31,5792,5793],{"class":33,"line":275},[31,5794,49],{"emptyLinePlaceholder":48},[31,5796,5797,5799,5801,5803,5805,5807,5809,5811,5813],{"class":33,"line":417},[31,5798,4667],{"class":37},[31,5800,4670],{"class":62},[31,5802,1258],{"class":37},[31,5804,1168],{"class":58},[31,5806,72],{"class":62},[31,5808,233],{"class":58},[31,5810,236],{"class":62},[31,5812,4683],{"class":58},[31,5814,4686],{"class":62},[31,5816,5817],{"class":33,"line":422},[31,5818,49],{"emptyLinePlaceholder":48},[31,5820,5821,5823,5825,5827],{"class":33,"line":428},[31,5822,200],{"class":58},[31,5824,72],{"class":62},[31,5826,257],{"class":58},[31,5828,260],{"class":62},[31,5830,5831,5833,5835],{"class":33,"line":434},[31,5832,266],{"class":37},[31,5834,269],{"class":125},[31,5836,272],{"class":62},[31,5838,5839],{"class":33,"line":440},[31,5840,278],{"class":62},[14,5842,5843],{},[17,5844],{"alt":19,"src":5845},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image576.webp",[14,5847,5848],{},[17,5849],{"alt":19,"src":5850},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image577.webp",[14,5852,5853],{},[17,5854],{"alt":19,"src":5855},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image578.webp",[14,5857,5858],{},"如果我不提交参数，直接回车，然后这是一个异常，主函数返回值不是0",[14,5860,5861],{},[17,5862],{"alt":19,"src":5863},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image579.webp",[14,5865,5866],{},[17,5867],{"alt":19,"src":5868},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image580.webp",[14,5870,5871],{},"也可以把INFO改成ERROR",[14,5873,5874],{},[17,5875],{"alt":19,"src":5876},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image581.webp",[22,5878,5880],{"className":24,"code":5879,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,5881,5882,5888,5892,5908,5912,5916,5930,5934,5952,5956,5960,5964,5986,5990,6002,6006,6029,6037,6041,6051,6055,6075,6079,6089,6097],{"__ignoreMap":19},[31,5883,5884,5886],{"class":33,"line":34},[31,5885,38],{"class":37},[31,5887,42],{"class":41},[31,5889,5890],{"class":33,"line":45},[31,5891,49],{"emptyLinePlaceholder":48},[31,5893,5894,5896,5898,5900,5902,5904,5906],{"class":33,"line":52},[31,5895,55],{"class":37},[31,5897,4547],{"class":58},[31,5899,63],{"class":62},[31,5901,66],{"class":37},[31,5903,69],{"class":58},[31,5905,72],{"class":62},[31,5907,75],{"class":58},[31,5909,5910],{"class":33,"line":78},[31,5911,81],{"class":62},[31,5913,5914],{"class":33,"line":84},[31,5915,87],{"class":37},[31,5917,5918,5920,5922,5924,5926,5928],{"class":33,"line":90},[31,5919,4570],{"class":58},[31,5921,96],{"class":62},[31,5923,99],{"class":58},[31,5925,102],{"class":62},[31,5927,4579],{"class":41},[31,5929,108],{"class":62},[31,5931,5932],{"class":33,"line":111},[31,5933,114],{"class":62},[31,5935,5936,5938,5940,5942,5944,5946,5948,5950],{"class":33,"line":117},[31,5937,120],{"class":58},[31,5939,102],{"class":62},[31,5941,126],{"class":125},[31,5943,129],{"class":62},[31,5945,132],{"class":58},[31,5947,135],{"class":62},[31,5949,4602],{"class":41},[31,5951,141],{"class":62},[31,5953,5954],{"class":33,"line":144},[31,5955,147],{"class":62},[31,5957,5958],{"class":33,"line":150},[31,5959,153],{"class":62},[31,5961,5962],{"class":33,"line":156},[31,5963,49],{"emptyLinePlaceholder":48},[31,5965,5966,5968,5970,5972,5974,5976,5978,5980,5982,5984],{"class":33,"line":161},[31,5967,164],{"class":37},[31,5969,167],{"class":58},[31,5971,102],{"class":62},[31,5973,164],{"class":37},[31,5975,175],{"class":174},[31,5977,178],{"class":62},[31,5979,181],{"class":37},[31,5981,184],{"class":37},[31,5983,187],{"class":174},[31,5985,108],{"class":62},[31,5987,5988],{"class":33,"line":192},[31,5989,81],{"class":62},[31,5991,5992,5994,5996,5998,6000],{"class":33,"line":197},[31,5993,5726],{"class":37},[31,5995,5729],{"class":62},[31,5997,5732],{"class":37},[31,5999,5735],{"class":125},[31,6001,108],{"class":62},[31,6003,6004],{"class":33,"line":211},[31,6005,5742],{"class":62},[31,6007,6008,6011,6013,6015,6017,6019,6021,6023,6025,6027],{"class":33,"line":216},[31,6009,6010],{"class":58},"    RCLCPP_ERROR",[31,6012,102],{"class":62},[31,6014,3919],{"class":58},[31,6016,72],{"class":62},[31,6018,132],{"class":58},[31,6020,102],{"class":62},[31,6022,5760],{"class":41},[31,6024,3255],{"class":62},[31,6026,5765],{"class":41},[31,6028,141],{"class":62},[31,6030,6031,6033,6035],{"class":33,"line":245},[31,6032,1880],{"class":37},[31,6034,5774],{"class":125},[31,6036,272],{"class":62},[31,6038,6039],{"class":33,"line":250},[31,6040,455],{"class":62},[31,6042,6043,6045,6047,6049],{"class":33,"line":263},[31,6044,200],{"class":58},[31,6046,72],{"class":62},[31,6048,205],{"class":58},[31,6050,208],{"class":62},[31,6052,6053],{"class":33,"line":275},[31,6054,49],{"emptyLinePlaceholder":48},[31,6056,6057,6059,6061,6063,6065,6067,6069,6071,6073],{"class":33,"line":417},[31,6058,4667],{"class":37},[31,6060,4670],{"class":62},[31,6062,1258],{"class":37},[31,6064,1168],{"class":58},[31,6066,72],{"class":62},[31,6068,233],{"class":58},[31,6070,236],{"class":62},[31,6072,4683],{"class":58},[31,6074,4686],{"class":62},[31,6076,6077],{"class":33,"line":422},[31,6078,49],{"emptyLinePlaceholder":48},[31,6080,6081,6083,6085,6087],{"class":33,"line":428},[31,6082,200],{"class":58},[31,6084,72],{"class":62},[31,6086,257],{"class":58},[31,6088,260],{"class":62},[31,6090,6091,6093,6095],{"class":33,"line":434},[31,6092,266],{"class":37},[31,6094,269],{"class":125},[31,6096,272],{"class":62},[31,6098,6099],{"class":33,"line":440},[31,6100,278],{"class":62},[472,6102],{},[14,6104,6105],{},[17,6106],{"alt":19,"src":6107},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image582.webp",[14,6109,6110],{},"一共3个入口参数，",[14,6112,6113],{},"第一个入口参数是话题名称，是字符串;",[14,6115,6116],{},"第二个入口参数和第三个入口参数有默认值，先不用管;",[14,6118,6119],{},"返回值是客户端的智能指针。",[14,6121,6122],{},[17,6123],{"alt":19,"src":6124},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image583.webp",[14,6126,6127],{},[17,6128],{"alt":19,"src":6129},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image584.webp",[14,6131,6132],{},[17,6133],{"alt":19,"src":6134},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image585.webp",[14,6136,6137],{},[17,6138],{"alt":19,"src":6139},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image586.webp",[14,6141,6142],{},[17,6143],{"alt":19,"src":6144},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image587.webp",[14,6146,6147],{},[17,6148],{"alt":19,"src":6149},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image588.webp",[14,6151,6152],{},[17,6153],{"alt":19,"src":6154},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image589.webp",[14,6156,6157],{},[17,6158],{"alt":19,"src":6159},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image590.webp",[14,6161,6162],{},[17,6163],{"alt":19,"src":6164},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image591.webp",[14,6166,6167],{},[17,6168],{"alt":19,"src":6169},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image592.webp",[14,6171,6172],{},[17,6173],{"alt":19,"src":6174},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image593.webp",[14,6176,6177],{},"一旦Ctrl+C关闭，则会疯狂爆INFO，且程序无法停止。",[14,6179,6180],{},[17,6181],{"alt":19,"src":6182},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image594.webp",[14,6184,6185],{},[17,6186],{"alt":19,"src":6187},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image595.webp",[14,6189,6190],{},"再按Ctrl+Z可以停止程序进行。",[14,6192,6193],{},[17,6194],{"alt":19,"src":6195},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image596.webp",[14,6197,6198],{},[17,6199],{"alt":19,"src":6200},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image597.webp",[14,6202,6203],{},"解决上面Ctrl+C的bug：",[14,6205,6206],{},[17,6207],{"alt":19,"src":6208},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image598.webp",[14,6210,6211],{},"rclcpp::ok()这个是判断当前程序是否正常运行，如果正常运行，则返回true，如果不正常运行则返回false，比如按下Ctrl+C就是不正常运行。",[14,6213,6214],{},"当rclcpp::ok() != true的时候，就是ctrl+c按下了。",[14,6216,6217],{},[17,6218],{"alt":19,"src":6219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image599.webp",[14,6221,6222],{},"这样直接可以让函数结束。",[14,6224,6225],{},[17,6226],{"alt":19,"src":6227},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image600.webp",[14,6229,6230],{},[17,6231],{"alt":19,"src":6232},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image601.webp",[14,6234,6235],{},"这时按下ctrl+c会爆很多错误",[14,6237,6238],{},"这是因为",[14,6240,6241],{},"this->get_logger()",[14,6243,6244],{},"client->get_logger()",[14,6246,6247],{},"rclcpp::get_logger()",[14,6249,6250],{},"的不同",[14,6252,6253],{},"这个异常和context有关，初始化的时候会创建context对象，相当于是一个容器，可以往容器里放数据，也可以在容器里取数据。",[14,6255,6256],{},"当前，如果我们连接失败的话，打印日志。",[14,6258,6259],{},"按下ctrl+c会结束我们的ROS2程序，要释放资源，比如要关闭context，这时已经关掉了context，这样，我们再从client和this来获取日志，就不行了，所以建议用rclcpp::get_logger()。",[14,6261,6262],{},"因为rclcpp::get_logger()的调用和context没有关系。",[14,6264,6265],{},[17,6266],{"alt":19,"src":6267},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image602.webp",[14,6269,6270],{},"这样程序就正常了！",[22,6272,6274],{"className":24,"code":6273,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"base_interfaces_demo/srv/add_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,6275,6276,6282,6288,6292,6304,6318,6322,6338,6342,6346,6360,6364,6386,6410,6414,6418,6428,6432,6459,6464,6487,6491,6514,6519,6543,6553,6558,6563,6572,6576,6580,6584,6600,6604,6608,6630,6634,6646,6650,6672,6681,6686,6697,6702,6723,6728,6747,6752,6766,6771,6795,6804,6809,6814,6825,6834],{"__ignoreMap":19},[31,6277,6278,6280],{"class":33,"line":34},[31,6279,38],{"class":37},[31,6281,42],{"class":41},[31,6283,6284,6286],{"class":33,"line":45},[31,6285,38],{"class":37},[31,6287,4845],{"class":41},[31,6289,6290],{"class":33,"line":52},[31,6291,49],{"emptyLinePlaceholder":48},[31,6293,6294,6296,6298,6300,6302],{"class":33,"line":78},[31,6295,1162],{"class":37},[31,6297,3396],{"class":58},[31,6299,72],{"class":62},[31,6301,4860],{"class":58},[31,6303,4863],{"class":62},[31,6305,6306,6308,6310,6312,6314,6316],{"class":33,"line":84},[31,6307,1162],{"class":37},[31,6309,1165],{"class":37},[31,6311,1168],{"class":58},[31,6313,72],{"class":62},[31,6315,1173],{"class":58},[31,6317,272],{"class":62},[31,6319,6320],{"class":33,"line":90},[31,6321,49],{"emptyLinePlaceholder":48},[31,6323,6324,6326,6328,6330,6332,6334,6336],{"class":33,"line":111},[31,6325,55],{"class":37},[31,6327,4547],{"class":58},[31,6329,63],{"class":62},[31,6331,66],{"class":37},[31,6333,69],{"class":58},[31,6335,72],{"class":62},[31,6337,75],{"class":58},[31,6339,6340],{"class":33,"line":117},[31,6341,81],{"class":62},[31,6343,6344],{"class":33,"line":144},[31,6345,87],{"class":37},[31,6347,6348,6350,6352,6354,6356,6358],{"class":33,"line":150},[31,6349,4570],{"class":58},[31,6351,96],{"class":62},[31,6353,99],{"class":58},[31,6355,102],{"class":62},[31,6357,4579],{"class":41},[31,6359,108],{"class":62},[31,6361,6362],{"class":33,"line":156},[31,6363,114],{"class":62},[31,6365,6366,6368,6370,6372,6374,6376,6378,6380,6382,6384],{"class":33,"line":161},[31,6367,120],{"class":58},[31,6369,102],{"class":62},[31,6371,3919],{"class":58},[31,6373,72],{"class":62},[31,6375,132],{"class":58},[31,6377,102],{"class":62},[31,6379,5760],{"class":41},[31,6381,3255],{"class":62},[31,6383,4602],{"class":41},[31,6385,141],{"class":62},[31,6387,6388,6391,6393,6395,6398,6400,6402,6404,6406,6408],{"class":33,"line":192},[31,6389,6390],{"class":62},"      client_ ",[31,6392,1258],{"class":37},[31,6394,1261],{"class":125},[31,6396,6397],{"class":62},"->create_client",[31,6399,236],{"class":37},[31,6401,5040],{"class":62},[31,6403,1280],{"class":37},[31,6405,102],{"class":62},[31,6407,4957],{"class":41},[31,6409,141],{"class":62},[31,6411,6412],{"class":33,"line":197},[31,6413,147],{"class":62},[31,6415,6416],{"class":33,"line":211},[31,6417,49],{"emptyLinePlaceholder":48},[31,6419,6420,6423,6426],{"class":33,"line":216},[31,6421,6422],{"class":37},"    bool",[31,6424,6425],{"class":58}," connect_server",[31,6427,1359],{"class":62},[31,6429,6430],{"class":33,"line":245},[31,6431,114],{"class":62},[31,6433,6434,6437,6440,6443,6445,6447,6449,6452,6454,6457],{"class":33,"line":250},[31,6435,6436],{"class":37},"      while",[31,6438,6439],{"class":62},"(client_->",[31,6441,6442],{"class":58},"wait_for_service",[31,6444,102],{"class":62},[31,6446,1312],{"class":125},[31,6448,1315],{"class":37},[31,6450,6451],{"class":62},") ",[31,6453,5732],{"class":37},[31,6455,6456],{"class":125}," true",[31,6458,108],{"class":62},[31,6460,6461],{"class":33,"line":263},[31,6462,6463],{"class":62},"      {\n",[31,6465,6466,6468,6470,6472,6474,6476,6478,6480,6482,6485],{"class":33,"line":275},[31,6467,1769],{"class":58},[31,6469,102],{"class":62},[31,6471,3919],{"class":58},[31,6473,72],{"class":62},[31,6475,132],{"class":58},[31,6477,102],{"class":62},[31,6479,5760],{"class":41},[31,6481,3255],{"class":62},[31,6483,6484],{"class":41},"\"服务连接中!\"",[31,6486,141],{"class":62},[31,6488,6489],{"class":33,"line":417},[31,6490,49],{"emptyLinePlaceholder":48},[31,6492,6493,6496,6498,6500,6502,6505,6508,6510,6512],{"class":33,"line":422},[31,6494,6495],{"class":37},"        if",[31,6497,5074],{"class":62},[31,6499,3919],{"class":58},[31,6501,72],{"class":62},[31,6503,6504],{"class":58},"ok",[31,6506,6507],{"class":62},"() ",[31,6509,5732],{"class":37},[31,6511,6456],{"class":125},[31,6513,108],{"class":62},[31,6515,6516],{"class":33,"line":428},[31,6517,6518],{"class":62},"        {\n",[31,6520,6521,6524,6526,6528,6530,6532,6534,6536,6538,6541],{"class":33,"line":434},[31,6522,6523],{"class":58},"          RCLCPP_INFO",[31,6525,102],{"class":62},[31,6527,3919],{"class":58},[31,6529,72],{"class":62},[31,6531,132],{"class":58},[31,6533,102],{"class":62},[31,6535,5760],{"class":41},[31,6537,3255],{"class":62},[31,6539,6540],{"class":41},"\"强行终止客户端!\"",[31,6542,141],{"class":62},[31,6544,6545,6548,6551],{"class":33,"line":440},[31,6546,6547],{"class":37},"          return",[31,6549,6550],{"class":125}," false",[31,6552,272],{"class":62},[31,6554,6555],{"class":33,"line":446},[31,6556,6557],{"class":62},"        }\n",[31,6559,6560],{"class":33,"line":452},[31,6561,6562],{"class":62},"      }\n",[31,6564,6565,6568,6570],{"class":33,"line":458},[31,6566,6567],{"class":37},"      return",[31,6569,6456],{"class":125},[31,6571,272],{"class":62},[31,6573,6574],{"class":33,"line":1540},[31,6575,147],{"class":62},[31,6577,6578],{"class":33,"line":1545},[31,6579,49],{"emptyLinePlaceholder":48},[31,6581,6582],{"class":33,"line":1556},[31,6583,1348],{"class":37},[31,6585,6586,6588,6590,6593,6595,6597],{"class":33,"line":1561},[31,6587,1467],{"class":58},[31,6589,72],{"class":62},[31,6591,6592],{"class":58},"Client",[31,6594,236],{"class":62},[31,6596,5040],{"class":58},[31,6598,6599],{"class":62},">::SharedPtr client_;\n",[31,6601,6602],{"class":33,"line":1584},[31,6603,153],{"class":62},[31,6605,6606],{"class":33,"line":1589},[31,6607,49],{"emptyLinePlaceholder":48},[31,6609,6610,6612,6614,6616,6618,6620,6622,6624,6626,6628],{"class":33,"line":1600},[31,6611,164],{"class":37},[31,6613,167],{"class":58},[31,6615,102],{"class":62},[31,6617,164],{"class":37},[31,6619,175],{"class":174},[31,6621,178],{"class":62},[31,6623,181],{"class":37},[31,6625,184],{"class":37},[31,6627,187],{"class":174},[31,6629,108],{"class":62},[31,6631,6632],{"class":33,"line":1609},[31,6633,81],{"class":62},[31,6635,6636,6638,6640,6642,6644],{"class":33,"line":3623},[31,6637,5726],{"class":37},[31,6639,5729],{"class":62},[31,6641,5732],{"class":37},[31,6643,5735],{"class":125},[31,6645,108],{"class":62},[31,6647,6648],{"class":33,"line":3634},[31,6649,5742],{"class":62},[31,6651,6652,6654,6656,6658,6660,6662,6664,6666,6668,6670],{"class":33,"line":3643},[31,6653,6010],{"class":58},[31,6655,102],{"class":62},[31,6657,3919],{"class":58},[31,6659,72],{"class":62},[31,6661,132],{"class":58},[31,6663,102],{"class":62},[31,6665,5760],{"class":41},[31,6667,3255],{"class":62},[31,6669,5765],{"class":41},[31,6671,141],{"class":62},[31,6673,6675,6677,6679],{"class":33,"line":6674},40,[31,6676,1880],{"class":37},[31,6678,5774],{"class":125},[31,6680,272],{"class":62},[31,6682,6684],{"class":33,"line":6683},41,[31,6685,455],{"class":62},[31,6687,6689,6691,6693,6695],{"class":33,"line":6688},42,[31,6690,200],{"class":58},[31,6692,72],{"class":62},[31,6694,205],{"class":58},[31,6696,208],{"class":62},[31,6698,6700],{"class":33,"line":6699},43,[31,6701,49],{"emptyLinePlaceholder":48},[31,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721],{"class":33,"line":6704},44,[31,6706,4667],{"class":37},[31,6708,4670],{"class":62},[31,6710,1258],{"class":37},[31,6712,1168],{"class":58},[31,6714,72],{"class":62},[31,6716,233],{"class":58},[31,6718,236],{"class":62},[31,6720,4683],{"class":58},[31,6722,4686],{"class":62},[31,6724,6726],{"class":33,"line":6725},45,[31,6727,49],{"emptyLinePlaceholder":48},[31,6729,6731,6734,6737,6739,6742,6745],{"class":33,"line":6730},46,[31,6732,6733],{"class":37},"  bool",[31,6735,6736],{"class":62}," flag ",[31,6738,1258],{"class":37},[31,6740,6741],{"class":62}," client->",[31,6743,6744],{"class":58},"connect_server",[31,6746,260],{"class":62},[31,6748,6750],{"class":33,"line":6749},47,[31,6751,49],{"emptyLinePlaceholder":48},[31,6753,6755,6757,6760,6762,6764],{"class":33,"line":6754},48,[31,6756,5726],{"class":37},[31,6758,6759],{"class":62}," (flag ",[31,6761,5732],{"class":37},[31,6763,6456],{"class":125},[31,6765,108],{"class":62},[31,6767,6769],{"class":33,"line":6768},49,[31,6770,5742],{"class":62},[31,6772,6774,6776,6778,6780,6782,6784,6786,6788,6790,6793],{"class":33,"line":6773},50,[31,6775,5747],{"class":58},[31,6777,102],{"class":62},[31,6779,3919],{"class":58},[31,6781,72],{"class":62},[31,6783,132],{"class":58},[31,6785,102],{"class":62},[31,6787,5760],{"class":41},[31,6789,3255],{"class":62},[31,6791,6792],{"class":41},"\"服务器连接失败，程序退出!\"",[31,6794,141],{"class":62},[31,6796,6798,6800,6802],{"class":33,"line":6797},51,[31,6799,1880],{"class":37},[31,6801,269],{"class":125},[31,6803,272],{"class":62},[31,6805,6807],{"class":33,"line":6806},52,[31,6808,455],{"class":62},[31,6810,6812],{"class":33,"line":6811},53,[31,6813,49],{"emptyLinePlaceholder":48},[31,6815,6817,6819,6821,6823],{"class":33,"line":6816},54,[31,6818,200],{"class":58},[31,6820,72],{"class":62},[31,6822,257],{"class":58},[31,6824,260],{"class":62},[31,6826,6828,6830,6832],{"class":33,"line":6827},55,[31,6829,266],{"class":37},[31,6831,269],{"class":125},[31,6833,272],{"class":62},[31,6835,6837],{"class":33,"line":6836},56,[31,6838,278],{"class":62},[14,6840,6841],{},[17,6842],{"alt":19,"src":6843},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image603.webp",[472,6845],{},[14,6847,6848],{},[17,6849],{"alt":19,"src":6850},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image604.webp",[14,6852,6853],{},[17,6854],{"alt":19,"src":6855},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image605.webp",[14,6857,6858],{},[17,6859],{"alt":19,"src":6860},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image606.webp",[14,6862,6863],{},"返回值类型有了，我们就粘贴过去，",[14,6865,6866],{},"因为using base_interfaces_demo::srv::AddInts所以可以省略成AddInts",[14,6868,6869],{},[17,6870],{"alt":19,"src":6871},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image607.webp",[14,6873,6874],{},[17,6875],{"alt":19,"src":6876},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image608.webp",[14,6878,6879],{},[17,6880],{"alt":19,"src":6881},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image609.webp",[14,6883,6884],{},"在主函数里要调用函数。",[14,6886,6887],{},[17,6888],{"alt":19,"src":6889},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image610.webp",[14,6891,6892],{},"atoi()是把数据转化成整形",[14,6894,6895],{},[17,6896],{"alt":19,"src":6897},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image611.webp",[14,6899,6900],{},"我们还要处理响应，响应有3个",[14,6902,6903],{},"第一个是中断，第二个是成功，第三个是超时;",[14,6905,6906],{},"我们一般只判断成功，其他两种情况都认为是失败。",[14,6908,6909],{},[17,6910],{"alt":19,"src":6911},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image612.webp",[14,6913,6914],{},"第一个入口参数是 节点的智能指针",[14,6916,6917],{},"第二个入口参数是future",[14,6919,6920],{},"第三个入口参数有默认值，先不用管",[14,6922,6923],{},[17,6924],{"alt":19,"src":6925},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image613.webp",[14,6927,6928],{},[17,6929],{"alt":19,"src":6930},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image614.webp",[14,6932,6933],{},[17,6934],{"alt":19,"src":6935},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image615.webp",[14,6937,6938],{},[17,6939],{"alt":19,"src":6940},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image616.webp",[14,6942,6943],{},[17,6944],{"alt":19,"src":6945},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image617.webp",[22,6947,6949],{"className":24,"code":6948,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"base_interfaces_demo/srv/add_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      /*\n        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  //其实就相当于AddInts::Request类型\n      */\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,6950,6951,6957,6963,6967,6979,6993,6997,7013,7017,7021,7035,7039,7061,7083,7087,7091,7099,7103,7125,7129,7151,7155,7175,7179,7201,7209,7213,7217,7225,7229,7233,7271,7275,7280,7285,7290,7295,7318,7328,7338,7351,7355,7359,7363,7377,7381,7385,7407,7411,7423,7427,7449,7457,7461,7471,7475,7495,7500,7515,7520,7533,7538,7561,7570,7575,7612,7617,7647,7652,7680,7685,7691,7696,7712,7717,7722,7733,7742],{"__ignoreMap":19},[31,6952,6953,6955],{"class":33,"line":34},[31,6954,38],{"class":37},[31,6956,42],{"class":41},[31,6958,6959,6961],{"class":33,"line":45},[31,6960,38],{"class":37},[31,6962,4845],{"class":41},[31,6964,6965],{"class":33,"line":52},[31,6966,49],{"emptyLinePlaceholder":48},[31,6968,6969,6971,6973,6975,6977],{"class":33,"line":78},[31,6970,1162],{"class":37},[31,6972,3396],{"class":58},[31,6974,72],{"class":62},[31,6976,4860],{"class":58},[31,6978,4863],{"class":62},[31,6980,6981,6983,6985,6987,6989,6991],{"class":33,"line":84},[31,6982,1162],{"class":37},[31,6984,1165],{"class":37},[31,6986,1168],{"class":58},[31,6988,72],{"class":62},[31,6990,1173],{"class":58},[31,6992,272],{"class":62},[31,6994,6995],{"class":33,"line":90},[31,6996,49],{"emptyLinePlaceholder":48},[31,6998,6999,7001,7003,7005,7007,7009,7011],{"class":33,"line":111},[31,7000,55],{"class":37},[31,7002,4547],{"class":58},[31,7004,63],{"class":62},[31,7006,66],{"class":37},[31,7008,69],{"class":58},[31,7010,72],{"class":62},[31,7012,75],{"class":58},[31,7014,7015],{"class":33,"line":117},[31,7016,81],{"class":62},[31,7018,7019],{"class":33,"line":144},[31,7020,87],{"class":37},[31,7022,7023,7025,7027,7029,7031,7033],{"class":33,"line":150},[31,7024,4570],{"class":58},[31,7026,96],{"class":62},[31,7028,99],{"class":58},[31,7030,102],{"class":62},[31,7032,4579],{"class":41},[31,7034,108],{"class":62},[31,7036,7037],{"class":33,"line":156},[31,7038,114],{"class":62},[31,7040,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059],{"class":33,"line":161},[31,7042,120],{"class":58},[31,7044,102],{"class":62},[31,7046,3919],{"class":58},[31,7048,72],{"class":62},[31,7050,132],{"class":58},[31,7052,102],{"class":62},[31,7054,5760],{"class":41},[31,7056,3255],{"class":62},[31,7058,4602],{"class":41},[31,7060,141],{"class":62},[31,7062,7063,7065,7067,7069,7071,7073,7075,7077,7079,7081],{"class":33,"line":192},[31,7064,6390],{"class":62},[31,7066,1258],{"class":37},[31,7068,1261],{"class":125},[31,7070,6397],{"class":62},[31,7072,236],{"class":37},[31,7074,5040],{"class":62},[31,7076,1280],{"class":37},[31,7078,102],{"class":62},[31,7080,4957],{"class":41},[31,7082,141],{"class":62},[31,7084,7085],{"class":33,"line":197},[31,7086,147],{"class":62},[31,7088,7089],{"class":33,"line":211},[31,7090,49],{"emptyLinePlaceholder":48},[31,7092,7093,7095,7097],{"class":33,"line":216},[31,7094,6422],{"class":37},[31,7096,6425],{"class":58},[31,7098,1359],{"class":62},[31,7100,7101],{"class":33,"line":245},[31,7102,114],{"class":62},[31,7104,7105,7107,7109,7111,7113,7115,7117,7119,7121,7123],{"class":33,"line":250},[31,7106,6436],{"class":37},[31,7108,6439],{"class":62},[31,7110,6442],{"class":58},[31,7112,102],{"class":62},[31,7114,1312],{"class":125},[31,7116,1315],{"class":37},[31,7118,6451],{"class":62},[31,7120,5732],{"class":37},[31,7122,6456],{"class":125},[31,7124,108],{"class":62},[31,7126,7127],{"class":33,"line":263},[31,7128,6463],{"class":62},[31,7130,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149],{"class":33,"line":275},[31,7132,1769],{"class":58},[31,7134,102],{"class":62},[31,7136,3919],{"class":58},[31,7138,72],{"class":62},[31,7140,132],{"class":58},[31,7142,102],{"class":62},[31,7144,5760],{"class":41},[31,7146,3255],{"class":62},[31,7148,6484],{"class":41},[31,7150,141],{"class":62},[31,7152,7153],{"class":33,"line":417},[31,7154,49],{"emptyLinePlaceholder":48},[31,7156,7157,7159,7161,7163,7165,7167,7169,7171,7173],{"class":33,"line":422},[31,7158,6495],{"class":37},[31,7160,5074],{"class":62},[31,7162,3919],{"class":58},[31,7164,72],{"class":62},[31,7166,6504],{"class":58},[31,7168,6507],{"class":62},[31,7170,5732],{"class":37},[31,7172,6456],{"class":125},[31,7174,108],{"class":62},[31,7176,7177],{"class":33,"line":428},[31,7178,6518],{"class":62},[31,7180,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199],{"class":33,"line":434},[31,7182,6523],{"class":58},[31,7184,102],{"class":62},[31,7186,3919],{"class":58},[31,7188,72],{"class":62},[31,7190,132],{"class":58},[31,7192,102],{"class":62},[31,7194,5760],{"class":41},[31,7196,3255],{"class":62},[31,7198,6540],{"class":41},[31,7200,141],{"class":62},[31,7202,7203,7205,7207],{"class":33,"line":440},[31,7204,6547],{"class":37},[31,7206,6550],{"class":125},[31,7208,272],{"class":62},[31,7210,7211],{"class":33,"line":446},[31,7212,6557],{"class":62},[31,7214,7215],{"class":33,"line":452},[31,7216,6562],{"class":62},[31,7218,7219,7221,7223],{"class":33,"line":458},[31,7220,6567],{"class":37},[31,7222,6456],{"class":125},[31,7224,272],{"class":62},[31,7226,7227],{"class":33,"line":1540},[31,7228,147],{"class":62},[31,7230,7231],{"class":33,"line":1545},[31,7232,49],{"emptyLinePlaceholder":48},[31,7234,7235,7237,7239,7241,7243,7245,7248,7251,7254,7256,7259,7262,7264,7266,7269],{"class":33,"line":1556},[31,7236,1467],{"class":58},[31,7238,72],{"class":62},[31,7240,6592],{"class":58},[31,7242,236],{"class":62},[31,7244,5040],{"class":58},[31,7246,7247],{"class":62},">::",[31,7249,7250],{"class":58},"FutureAndRequestId",[31,7252,7253],{"class":58}," send_request",[31,7255,102],{"class":62},[31,7257,7258],{"class":37},"int32_t",[31,7260,7261],{"class":174}," num1",[31,7263,1288],{"class":62},[31,7265,7258],{"class":37},[31,7267,7268],{"class":174}," num2",[31,7270,108],{"class":62},[31,7272,7273],{"class":33,"line":1561},[31,7274,114],{"class":62},[31,7276,7277],{"class":33,"line":1584},[31,7278,7279],{"class":4661},"      /*\n",[31,7281,7282],{"class":33,"line":1589},[31,7283,7284],{"class":4661},"        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n",[31,7286,7287],{"class":33,"line":1600},[31,7288,7289],{"class":4661},"        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  //其实就相当于AddInts::Request类型\n",[31,7291,7292],{"class":33,"line":1609},[31,7293,7294],{"class":4661},"      */\n",[31,7296,7297,7299,7302,7304,7306,7308,7311,7313,7316],{"class":33,"line":3623},[31,7298,1368],{"class":37},[31,7300,7301],{"class":62}," request ",[31,7303,1258],{"class":37},[31,7305,1168],{"class":58},[31,7307,72],{"class":62},[31,7309,7310],{"class":58},"make_sharedautolinkAddInts",[31,7312,72],{"class":62},[31,7314,7315],{"class":58},"Requestautolink",[31,7317,260],{"class":62},[31,7319,7320,7323,7325],{"class":33,"line":3634},[31,7321,7322],{"class":62},"      request->num1 ",[31,7324,1258],{"class":37},[31,7326,7327],{"class":62}," num1;\n",[31,7329,7330,7333,7335],{"class":33,"line":3643},[31,7331,7332],{"class":62},"      request->num2 ",[31,7334,1258],{"class":37},[31,7336,7337],{"class":62}," num2;\n",[31,7339,7340,7342,7345,7348],{"class":33,"line":6674},[31,7341,6567],{"class":37},[31,7343,7344],{"class":62}," client_->",[31,7346,7347],{"class":58},"async_send_request",[31,7349,7350],{"class":62},"(request);\n",[31,7352,7353],{"class":33,"line":6683},[31,7354,147],{"class":62},[31,7356,7357],{"class":33,"line":6688},[31,7358,49],{"emptyLinePlaceholder":48},[31,7360,7361],{"class":33,"line":6699},[31,7362,1348],{"class":37},[31,7364,7365,7367,7369,7371,7373,7375],{"class":33,"line":6704},[31,7366,1467],{"class":58},[31,7368,72],{"class":62},[31,7370,6592],{"class":58},[31,7372,236],{"class":62},[31,7374,5040],{"class":58},[31,7376,6599],{"class":62},[31,7378,7379],{"class":33,"line":6725},[31,7380,153],{"class":62},[31,7382,7383],{"class":33,"line":6730},[31,7384,49],{"emptyLinePlaceholder":48},[31,7386,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405],{"class":33,"line":6749},[31,7388,164],{"class":37},[31,7390,167],{"class":58},[31,7392,102],{"class":62},[31,7394,164],{"class":37},[31,7396,175],{"class":174},[31,7398,178],{"class":62},[31,7400,181],{"class":37},[31,7402,184],{"class":37},[31,7404,187],{"class":174},[31,7406,108],{"class":62},[31,7408,7409],{"class":33,"line":6754},[31,7410,81],{"class":62},[31,7412,7413,7415,7417,7419,7421],{"class":33,"line":6768},[31,7414,5726],{"class":37},[31,7416,5729],{"class":62},[31,7418,5732],{"class":37},[31,7420,5735],{"class":125},[31,7422,108],{"class":62},[31,7424,7425],{"class":33,"line":6773},[31,7426,5742],{"class":62},[31,7428,7429,7431,7433,7435,7437,7439,7441,7443,7445,7447],{"class":33,"line":6797},[31,7430,6010],{"class":58},[31,7432,102],{"class":62},[31,7434,3919],{"class":58},[31,7436,72],{"class":62},[31,7438,132],{"class":58},[31,7440,102],{"class":62},[31,7442,5760],{"class":41},[31,7444,3255],{"class":62},[31,7446,5765],{"class":41},[31,7448,141],{"class":62},[31,7450,7451,7453,7455],{"class":33,"line":6806},[31,7452,1880],{"class":37},[31,7454,5774],{"class":125},[31,7456,272],{"class":62},[31,7458,7459],{"class":33,"line":6811},[31,7460,455],{"class":62},[31,7462,7463,7465,7467,7469],{"class":33,"line":6816},[31,7464,200],{"class":58},[31,7466,72],{"class":62},[31,7468,205],{"class":58},[31,7470,208],{"class":62},[31,7472,7473],{"class":33,"line":6827},[31,7474,49],{"emptyLinePlaceholder":48},[31,7476,7477,7479,7481,7483,7485,7487,7489,7491,7493],{"class":33,"line":6836},[31,7478,4667],{"class":37},[31,7480,4670],{"class":62},[31,7482,1258],{"class":37},[31,7484,1168],{"class":58},[31,7486,72],{"class":62},[31,7488,233],{"class":58},[31,7490,236],{"class":62},[31,7492,4683],{"class":58},[31,7494,4686],{"class":62},[31,7496,7498],{"class":33,"line":7497},57,[31,7499,49],{"emptyLinePlaceholder":48},[31,7501,7503,7505,7507,7509,7511,7513],{"class":33,"line":7502},58,[31,7504,6733],{"class":37},[31,7506,6736],{"class":62},[31,7508,1258],{"class":37},[31,7510,6741],{"class":62},[31,7512,6744],{"class":58},[31,7514,260],{"class":62},[31,7516,7518],{"class":33,"line":7517},59,[31,7519,49],{"emptyLinePlaceholder":48},[31,7521,7523,7525,7527,7529,7531],{"class":33,"line":7522},60,[31,7524,5726],{"class":37},[31,7526,6759],{"class":62},[31,7528,5732],{"class":37},[31,7530,6456],{"class":125},[31,7532,108],{"class":62},[31,7534,7536],{"class":33,"line":7535},61,[31,7537,5742],{"class":62},[31,7539,7541,7543,7545,7547,7549,7551,7553,7555,7557,7559],{"class":33,"line":7540},62,[31,7542,5747],{"class":58},[31,7544,102],{"class":62},[31,7546,3919],{"class":58},[31,7548,72],{"class":62},[31,7550,132],{"class":58},[31,7552,102],{"class":62},[31,7554,5760],{"class":41},[31,7556,3255],{"class":62},[31,7558,6792],{"class":41},[31,7560,141],{"class":62},[31,7562,7564,7566,7568],{"class":33,"line":7563},63,[31,7565,1880],{"class":37},[31,7567,269],{"class":125},[31,7569,272],{"class":62},[31,7571,7573],{"class":33,"line":7572},64,[31,7574,455],{"class":62},[31,7576,7578,7580,7583,7585,7587,7590,7592,7595,7598,7600,7603,7605,7607,7609],{"class":33,"line":7577},65,[31,7579,4667],{"class":37},[31,7581,7582],{"class":62}," future ",[31,7584,1258],{"class":37},[31,7586,6741],{"class":62},[31,7588,7589],{"class":58},"send_request",[31,7591,102],{"class":62},[31,7593,7594],{"class":58},"atoi",[31,7596,7597],{"class":62},"(argv[",[31,7599,1312],{"class":125},[31,7601,7602],{"class":62},"]),",[31,7604,7594],{"class":58},[31,7606,7597],{"class":62},[31,7608,4998],{"class":125},[31,7610,7611],{"class":62},"]));\n",[31,7613,7615],{"class":33,"line":7614},66,[31,7616,49],{"emptyLinePlaceholder":48},[31,7618,7620,7622,7624,7626,7628,7631,7634,7637,7639,7641,7644],{"class":33,"line":7619},67,[31,7621,5726],{"class":37},[31,7623,5074],{"class":62},[31,7625,3919],{"class":58},[31,7627,72],{"class":62},[31,7629,7630],{"class":58},"spin_until_future_complete",[31,7632,7633],{"class":62},"(client,future) ",[31,7635,7636],{"class":37},"==",[31,7638,69],{"class":58},[31,7640,72],{"class":62},[31,7642,7643],{"class":58},"FutureReturnCode",[31,7645,7646],{"class":62},"::SUCCESS)\n",[31,7648,7650],{"class":33,"line":7649},68,[31,7651,5742],{"class":62},[31,7653,7655,7657,7660,7662,7664,7667,7669,7671,7674,7677],{"class":33,"line":7654},69,[31,7656,5747],{"class":58},[31,7658,7659],{"class":62},"(client->",[31,7661,132],{"class":58},[31,7663,135],{"class":62},[31,7665,7666],{"class":41},"\"响应成功! sum = ",[31,7668,3487],{"class":125},[31,7670,1438],{"class":41},[31,7672,7673],{"class":62},",future.",[31,7675,7676],{"class":58},"get",[31,7678,7679],{"class":62},"()->sum);\n",[31,7681,7683],{"class":33,"line":7682},70,[31,7684,455],{"class":62},[31,7686,7688],{"class":33,"line":7687},71,[31,7689,7690],{"class":37},"  else\n",[31,7692,7694],{"class":33,"line":7693},72,[31,7695,5742],{"class":62},[31,7697,7699,7701,7703,7705,7707,7710],{"class":33,"line":7698},73,[31,7700,5747],{"class":58},[31,7702,7659],{"class":62},[31,7704,132],{"class":58},[31,7706,135],{"class":62},[31,7708,7709],{"class":41},"\"响应失败!\"",[31,7711,141],{"class":62},[31,7713,7715],{"class":33,"line":7714},74,[31,7716,455],{"class":62},[31,7718,7720],{"class":33,"line":7719},75,[31,7721,49],{"emptyLinePlaceholder":48},[31,7723,7725,7727,7729,7731],{"class":33,"line":7724},76,[31,7726,200],{"class":58},[31,7728,72],{"class":62},[31,7730,257],{"class":58},[31,7732,260],{"class":62},[31,7734,7736,7738,7740],{"class":33,"line":7735},77,[31,7737,266],{"class":37},[31,7739,269],{"class":125},[31,7741,272],{"class":62},[31,7743,7745],{"class":33,"line":7744},78,[31,7746,278],{"class":62},[10,7748,7749],{"id":7749},"动作通信_理论",[14,7751,7752],{},[17,7753],{"alt":19,"src":7754},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image618.webp",[14,7756,7757],{},"让B一直给A返回当前机器人的状态信息，这样的行为通信更符合我们操控机器人的导航需求。",[14,7759,7760],{},[17,7761],{"alt":19,"src":7762},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image619.webp",[14,7764,7765],{},"输入10，会累加1-10的所有数，并且会遍历1-10所有的数，并进行累加，累加是需要耗时的，假设每累加一次，耗时一秒，",[14,7767,7768],{},"然后为了好看出来程序运行情况，在每累加的时候，都发一个INFO，代表当前进度。",[14,7770,7771],{},[17,7772],{"alt":19,"src":7773},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image620.webp",[14,7775,7776],{},"可以在进行任务时，把任务取消掉。",[14,7778,7779],{},"第一步，客户端给服务端发目标数据",[14,7781,7782],{},"第二步，服务端评估目标数据，并反馈给客户端这个评估结果(是否能够达到目标)",[14,7784,7785],{},"第三步，客户端再给服务端发最终确定的目标数据",[14,7787,7788],{},"第四步，服务端一直反馈给客户端执行的过程数据",[14,7790,7791],{},"第五步，结束之后，服务端反馈给客户端最终的结果",[14,7793,7794],{},[17,7795],{"alt":19,"src":7796},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image621.webp",[472,7798],{},[14,7800,7801],{},[17,7802],{"alt":19,"src":7803},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image622.webp",[14,7805,7806],{},[17,7807],{"alt":19,"src":7808},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image623.webp",[14,7810,7811],{},[17,7812],{"alt":19,"src":7813},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image624.webp",[14,7815,7816],{},[17,7817],{"alt":19,"src":7818},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image625.webp",[14,7820,7821],{},[17,7822],{"alt":19,"src":7823},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image626.webp",[14,7825,7826],{},"ros2 pkg create cpp03_action --build-type ament_cmake --dependencies rclcpp rclcpp_action base_interfaces_demo --node-name demo01_action_server",[472,7828],{},[14,7830,7831],{},[17,7832],{"alt":19,"src":7833},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image627.webp",[14,7835,7836],{},[17,7837],{"alt":19,"src":7838},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image628.webp",[14,7840,7841],{},"最顶上是请求数据，",[14,7843,7844],{},"中间是最终响应结果的数据，",[14,7846,7847],{},"最底下是连续反馈的数据。",[14,7849,7850],{},[17,7851],{"alt":19,"src":7852},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image629.webp",[14,7854,7855],{},[17,7856],{"alt":19,"src":7857},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image630.webp",[14,7859,7860],{},[17,7861],{"alt":19,"src":7862},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image631.webp",[14,7864,7865],{},[17,7866],{"alt":19,"src":7867},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image632.webp",[14,7869,7870],{},"depend是build depend,exe depend,export depend三者的集成。",[14,7872,7873],{},[17,7874],{"alt":19,"src":7875},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image633.webp",[14,7877,7878],{},[17,7879],{"alt":19,"src":7880},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image634.webp",[14,7882,7883],{},[17,7884],{"alt":19,"src":7885},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image635.webp",[14,7887,7888],{},[17,7889],{"alt":19,"src":7890},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image636.webp",[14,7892,7893],{},[17,7894],{"alt":19,"src":7895},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image637.webp",[14,7897,7898],{},[17,7899],{"alt":19,"src":7900},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image638.webp",[14,7902,7903],{},[17,7904],{"alt":19,"src":7905},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image639.webp",[14,7907,7908],{},[17,7909],{"alt":19,"src":7910},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image640.webp",[14,7912,7913],{},"ros2 interface show base_interfaces_demo/action/Progress",[10,7915,7917],{"id":7916},"动作通信_实验1_服务端实现c","动作通信_实验1_服务端实现(C++)",[14,7919,7920],{},[17,7921],{"alt":19,"src":7922},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image641.webp",[22,7924,7926],{"className":24,"code":7925,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,7927,7928,7934,7938,7955,7959,7963,7979,7983,8002,8006,8010,8014,8036,8040,8050,8054,8077,8081,8091,8099],{"__ignoreMap":19},[31,7929,7930,7932],{"class":33,"line":34},[31,7931,38],{"class":37},[31,7933,42],{"class":41},[31,7935,7936],{"class":33,"line":45},[31,7937,49],{"emptyLinePlaceholder":48},[31,7939,7940,7942,7945,7947,7949,7951,7953],{"class":33,"line":52},[31,7941,55],{"class":37},[31,7943,7944],{"class":58}," ProgressActionServer",[31,7946,63],{"class":62},[31,7948,66],{"class":37},[31,7950,69],{"class":58},[31,7952,72],{"class":62},[31,7954,75],{"class":58},[31,7956,7957],{"class":33,"line":78},[31,7958,81],{"class":62},[31,7960,7961],{"class":33,"line":84},[31,7962,87],{"class":37},[31,7964,7965,7968,7970,7972,7974,7977],{"class":33,"line":90},[31,7966,7967],{"class":58},"    ProgressActionServer",[31,7969,96],{"class":62},[31,7971,99],{"class":58},[31,7973,102],{"class":62},[31,7975,7976],{"class":41},"\"progress_action_server_node_cpp\"",[31,7978,108],{"class":62},[31,7980,7981],{"class":33,"line":111},[31,7982,114],{"class":62},[31,7984,7985,7987,7989,7991,7993,7995,7997,8000],{"class":33,"line":117},[31,7986,120],{"class":58},[31,7988,102],{"class":62},[31,7990,126],{"class":125},[31,7992,129],{"class":62},[31,7994,132],{"class":58},[31,7996,135],{"class":62},[31,7998,7999],{"class":41},"\"action服务端创建!\"",[31,8001,141],{"class":62},[31,8003,8004],{"class":33,"line":144},[31,8005,147],{"class":62},[31,8007,8008],{"class":33,"line":150},[31,8009,153],{"class":62},[31,8011,8012],{"class":33,"line":156},[31,8013,49],{"emptyLinePlaceholder":48},[31,8015,8016,8018,8020,8022,8024,8026,8028,8030,8032,8034],{"class":33,"line":161},[31,8017,164],{"class":37},[31,8019,167],{"class":58},[31,8021,102],{"class":62},[31,8023,164],{"class":37},[31,8025,175],{"class":174},[31,8027,178],{"class":62},[31,8029,181],{"class":37},[31,8031,184],{"class":37},[31,8033,187],{"class":174},[31,8035,108],{"class":62},[31,8037,8038],{"class":33,"line":192},[31,8039,81],{"class":62},[31,8041,8042,8044,8046,8048],{"class":33,"line":197},[31,8043,200],{"class":58},[31,8045,72],{"class":62},[31,8047,205],{"class":58},[31,8049,208],{"class":62},[31,8051,8052],{"class":33,"line":211},[31,8053,49],{"emptyLinePlaceholder":48},[31,8055,8056,8058,8060,8062,8064,8066,8068,8070,8072,8075],{"class":33,"line":216},[31,8057,200],{"class":58},[31,8059,72],{"class":62},[31,8061,223],{"class":58},[31,8063,102],{"class":62},[31,8065,228],{"class":58},[31,8067,72],{"class":62},[31,8069,233],{"class":58},[31,8071,236],{"class":62},[31,8073,8074],{"class":58},"ProgressActionServer",[31,8076,242],{"class":62},[31,8078,8079],{"class":33,"line":245},[31,8080,49],{"emptyLinePlaceholder":48},[31,8082,8083,8085,8087,8089],{"class":33,"line":250},[31,8084,200],{"class":58},[31,8086,72],{"class":62},[31,8088,257],{"class":58},[31,8090,260],{"class":62},[31,8092,8093,8095,8097],{"class":33,"line":263},[31,8094,266],{"class":37},[31,8096,269],{"class":125},[31,8098,272],{"class":62},[31,8100,8101],{"class":33,"line":275},[31,8102,278],{"class":62},[14,8104,8105],{},[17,8106],{"alt":19,"src":8107},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image642.webp",[22,8109,8111],{"className":24,"code":8110,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,8112,8113,8119,8123,8140,8144,8148,8163,8167,8186,8190,8194,8198,8220,8224,8234,8238,8261,8265,8275,8283],{"__ignoreMap":19},[31,8114,8115,8117],{"class":33,"line":34},[31,8116,38],{"class":37},[31,8118,42],{"class":41},[31,8120,8121],{"class":33,"line":45},[31,8122,49],{"emptyLinePlaceholder":48},[31,8124,8125,8127,8130,8132,8134,8136,8138],{"class":33,"line":52},[31,8126,55],{"class":37},[31,8128,8129],{"class":58}," ProgressActionClient",[31,8131,63],{"class":62},[31,8133,66],{"class":37},[31,8135,69],{"class":58},[31,8137,72],{"class":62},[31,8139,75],{"class":58},[31,8141,8142],{"class":33,"line":78},[31,8143,81],{"class":62},[31,8145,8146],{"class":33,"line":84},[31,8147,87],{"class":37},[31,8149,8150,8153,8155,8157,8159,8161],{"class":33,"line":90},[31,8151,8152],{"class":58},"    ProgressActionClient",[31,8154,96],{"class":62},[31,8156,99],{"class":58},[31,8158,102],{"class":62},[31,8160,7976],{"class":41},[31,8162,108],{"class":62},[31,8164,8165],{"class":33,"line":111},[31,8166,114],{"class":62},[31,8168,8169,8171,8173,8175,8177,8179,8181,8184],{"class":33,"line":117},[31,8170,120],{"class":58},[31,8172,102],{"class":62},[31,8174,126],{"class":125},[31,8176,129],{"class":62},[31,8178,132],{"class":58},[31,8180,135],{"class":62},[31,8182,8183],{"class":41},"\"action客户端创建!\"",[31,8185,141],{"class":62},[31,8187,8188],{"class":33,"line":144},[31,8189,147],{"class":62},[31,8191,8192],{"class":33,"line":150},[31,8193,153],{"class":62},[31,8195,8196],{"class":33,"line":156},[31,8197,49],{"emptyLinePlaceholder":48},[31,8199,8200,8202,8204,8206,8208,8210,8212,8214,8216,8218],{"class":33,"line":161},[31,8201,164],{"class":37},[31,8203,167],{"class":58},[31,8205,102],{"class":62},[31,8207,164],{"class":37},[31,8209,175],{"class":174},[31,8211,178],{"class":62},[31,8213,181],{"class":37},[31,8215,184],{"class":37},[31,8217,187],{"class":174},[31,8219,108],{"class":62},[31,8221,8222],{"class":33,"line":192},[31,8223,81],{"class":62},[31,8225,8226,8228,8230,8232],{"class":33,"line":197},[31,8227,200],{"class":58},[31,8229,72],{"class":62},[31,8231,205],{"class":58},[31,8233,208],{"class":62},[31,8235,8236],{"class":33,"line":211},[31,8237,49],{"emptyLinePlaceholder":48},[31,8239,8240,8242,8244,8246,8248,8250,8252,8254,8256,8259],{"class":33,"line":216},[31,8241,200],{"class":58},[31,8243,72],{"class":62},[31,8245,223],{"class":58},[31,8247,102],{"class":62},[31,8249,228],{"class":58},[31,8251,72],{"class":62},[31,8253,233],{"class":58},[31,8255,236],{"class":62},[31,8257,8258],{"class":58},"ProgressActionClient",[31,8260,242],{"class":62},[31,8262,8263],{"class":33,"line":245},[31,8264,49],{"emptyLinePlaceholder":48},[31,8266,8267,8269,8271,8273],{"class":33,"line":250},[31,8268,200],{"class":58},[31,8270,72],{"class":62},[31,8272,257],{"class":58},[31,8274,260],{"class":62},[31,8276,8277,8279,8281],{"class":33,"line":263},[31,8278,266],{"class":37},[31,8280,269],{"class":125},[31,8282,272],{"class":62},[31,8284,8285],{"class":33,"line":275},[31,8286,278],{"class":62},[14,8288,8289],{},[17,8290],{"alt":19,"src":8291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image643.webp",[14,8293,8294],{},[17,8295],{"alt":19,"src":8296},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image644.webp",[14,8298,8299],{},[17,8300],{"alt":19,"src":8301},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image645.webp",[14,8303,8304],{},[17,8305],{"alt":19,"src":8306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image646.webp",[472,8308],{},[14,8310,8311],{},[17,8312],{"alt":19,"src":8313},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image647.webp",[14,8315,8316],{},[17,8317],{"alt":19,"src":8318},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image648.webp",[14,8320,8321],{},[17,8322],{"alt":19,"src":8323},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image649.webp",[14,8325,8326],{},"有俩模板，我们只需要设置action就行了，就是我们的动作接口类型。",[14,8328,8329],{},"第一个参数是node，在class里就用this指针，",[14,8331,8332],{},"第二个参数是话题，字符串，",[14,8334,8335],{},"第三个参数是回调函数用来处理目标值的，",[14,8337,8338],{},"第四个参数是回调函数用来处理取消请求的，",[14,8340,8341],{},"第五个参数是接收目标值之后，该回调函数生成连续反馈，",[14,8343,8344],{},"第六、第七个参数有默认值，先不管，",[14,8346,8347],{},"返回值是action智能指针。",[14,8349,8350],{},[17,8351],{"alt":19,"src":8352},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image650.webp",[14,8354,8355],{},[17,8356],{"alt":19,"src":8357},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image651.webp",[14,8359,8360],{},[17,8361],{"alt":19,"src":8362},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image652.webp",[14,8364,8365],{},[17,8366],{"alt":19,"src":8367},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image653.webp",[14,8369,8370],{},[17,8371],{"alt":19,"src":8372},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image654.webp",[14,8374,8375],{},[17,8376],{"alt":19,"src":8377},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image655.webp",[14,8379,8380],{},"Goal_callback解析：",[14,8382,8383],{},"第一个参数是GoalUUID，",[14,8385,8386],{},"第二个参数是我们动作接口下的Goal，",[14,8388,8389],{},"返回值是goalresponse，用的命名空间是rclcpp_action，底下封装了3个常量，",[14,8391,8392],{},"第一个是接收并马上执行，",[14,8394,8395],{},"第二个是接收并推迟执行，",[14,8397,8398],{},"第三个是拒绝。",[14,8400,8401],{},[17,8402],{"alt":19,"src":8403},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image656.webp",[14,8405,8406],{},[17,8407],{"alt":19,"src":8408},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image657.webp",[14,8410,8411],{},[17,8412],{"alt":19,"src":8413},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image658.webp",[14,8415,8416],{},[17,8417],{"alt":19,"src":8418},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image659.webp",[14,8420,8421],{},[17,8422],{"alt":19,"src":8423},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image660.webp",[14,8425,8426],{},"报错原因是没加占位符",[14,8428,8429],{},[17,8430],{"alt":19,"src":8431},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image661.webp",[14,8433,8434],{},[17,8435],{"alt":19,"src":8436},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image662.webp",[22,8438,8440],{"className":24,"code":8439,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"rclcpp_action/rclcpp_action.hpp\"\n#include \"base_interfaces_demo/action/progress.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      /*\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      */\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    //std::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    //std::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    //std::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,8441,8442,8448,8455,8462,8466,8480,8493,8506,8510,8526,8530,8534,8548,8552,8570,8574,8579,8584,8589,8594,8599,8604,8609,8614,8618,8640,8648,8655,8678,8700,8722,8727,8731,8736,8786,8790,8794,8807,8811,8815,8820,8862,8866,8870,8883,8887,8891,8896,8929,8933,8937,8941,8945,8960,8964,8968,8990,8994,9004,9008,9030,9034,9044,9052],{"__ignoreMap":19},[31,8443,8444,8446],{"class":33,"line":34},[31,8445,38],{"class":37},[31,8447,42],{"class":41},[31,8449,8450,8452],{"class":33,"line":45},[31,8451,38],{"class":37},[31,8453,8454],{"class":41}," \"rclcpp_action/rclcpp_action.hpp\"\n",[31,8456,8457,8459],{"class":33,"line":52},[31,8458,38],{"class":37},[31,8460,8461],{"class":41}," \"base_interfaces_demo/action/progress.hpp\"\n",[31,8463,8464],{"class":33,"line":78},[31,8465,49],{"emptyLinePlaceholder":48},[31,8467,8468,8470,8472,8474,8477],{"class":33,"line":84},[31,8469,1162],{"class":37},[31,8471,3396],{"class":58},[31,8473,72],{"class":62},[31,8475,8476],{"class":58},"action",[31,8478,8479],{"class":62},"::Progress;\n",[31,8481,8482,8484,8486,8488,8490],{"class":33,"line":90},[31,8483,1162],{"class":37},[31,8485,1168],{"class":58},[31,8487,72],{"class":62},[31,8489,2126],{"class":58},[31,8491,8492],{"class":62},"::_1;\n",[31,8494,8495,8497,8499,8501,8503],{"class":33,"line":111},[31,8496,1162],{"class":37},[31,8498,1168],{"class":58},[31,8500,72],{"class":62},[31,8502,2126],{"class":58},[31,8504,8505],{"class":62},"::_2;\n",[31,8507,8508],{"class":33,"line":117},[31,8509,49],{"emptyLinePlaceholder":48},[31,8511,8512,8514,8516,8518,8520,8522,8524],{"class":33,"line":144},[31,8513,55],{"class":37},[31,8515,7944],{"class":58},[31,8517,63],{"class":62},[31,8519,66],{"class":37},[31,8521,69],{"class":58},[31,8523,72],{"class":62},[31,8525,75],{"class":58},[31,8527,8528],{"class":33,"line":150},[31,8529,81],{"class":62},[31,8531,8532],{"class":33,"line":156},[31,8533,87],{"class":37},[31,8535,8536,8538,8540,8542,8544,8546],{"class":33,"line":161},[31,8537,7967],{"class":58},[31,8539,96],{"class":62},[31,8541,99],{"class":58},[31,8543,102],{"class":62},[31,8545,7976],{"class":41},[31,8547,108],{"class":62},[31,8549,8550],{"class":33,"line":192},[31,8551,114],{"class":62},[31,8553,8554,8556,8558,8560,8562,8564,8566,8568],{"class":33,"line":197},[31,8555,120],{"class":58},[31,8557,102],{"class":62},[31,8559,126],{"class":125},[31,8561,129],{"class":62},[31,8563,132],{"class":58},[31,8565,135],{"class":62},[31,8567,7999],{"class":41},[31,8569,141],{"class":62},[31,8571,8572],{"class":33,"line":211},[31,8573,7279],{"class":4661},[31,8575,8576],{"class":33,"line":216},[31,8577,8578],{"class":4661},"      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n",[31,8580,8581],{"class":33,"line":245},[31,8582,8583],{"class":4661},"      NodeT>(NodeT node,\n",[31,8585,8586],{"class":33,"line":250},[31,8587,8588],{"class":4661},"      const std::string &name,\n",[31,8590,8591],{"class":33,"line":263},[31,8592,8593],{"class":4661},"      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n",[31,8595,8596],{"class":33,"line":275},[31,8597,8598],{"class":4661},"      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n",[31,8600,8601],{"class":33,"line":417},[31,8602,8603],{"class":4661},"      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n",[31,8605,8606],{"class":33,"line":422},[31,8607,8608],{"class":4661},"      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n",[31,8610,8611],{"class":33,"line":428},[31,8612,8613],{"class":4661},"      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n",[31,8615,8616],{"class":33,"line":434},[31,8617,7294],{"class":4661},[31,8619,8620,8622,8624,8627,8629,8632,8634,8637],{"class":33,"line":440},[31,8621,4932],{"class":62},[31,8623,1258],{"class":37},[31,8625,8626],{"class":58}," rclcpp_action",[31,8628,72],{"class":62},[31,8630,8631],{"class":58},"create_server",[31,8633,236],{"class":62},[31,8635,8636],{"class":58},"Progress",[31,8638,8639],{"class":62},">(\n",[31,8641,8642,8645],{"class":33,"line":446},[31,8643,8644],{"class":125},"        this",[31,8646,8647],{"class":62},",\n",[31,8649,8650,8653],{"class":33,"line":452},[31,8651,8652],{"class":41},"        \"get_sum_topic\"",[31,8654,8647],{"class":62},[31,8656,8657,8660,8662,8664,8666,8668,8670,8673,8675],{"class":33,"line":458},[31,8658,8659],{"class":58},"        std",[31,8661,72],{"class":62},[31,8663,1324],{"class":58},[31,8665,102],{"class":62},[31,8667,1329],{"class":37},[31,8669,8074],{"class":58},[31,8671,8672],{"class":62},"::handle_goal_callback,",[31,8674,126],{"class":125},[31,8676,8677],{"class":62},",_1,_2),\n",[31,8679,8680,8682,8684,8686,8688,8690,8692,8695,8697],{"class":33,"line":1540},[31,8681,8659],{"class":58},[31,8683,72],{"class":62},[31,8685,1324],{"class":58},[31,8687,102],{"class":62},[31,8689,1329],{"class":37},[31,8691,8074],{"class":58},[31,8693,8694],{"class":62},"::handle_cancel_callback,",[31,8696,126],{"class":125},[31,8698,8699],{"class":62},",_1),\n",[31,8701,8702,8704,8706,8708,8710,8712,8714,8717,8719],{"class":33,"line":1545},[31,8703,8659],{"class":58},[31,8705,72],{"class":62},[31,8707,1324],{"class":58},[31,8709,102],{"class":62},[31,8711,1329],{"class":37},[31,8713,8074],{"class":58},[31,8715,8716],{"class":62},"::handle_accepted_callback,",[31,8718,126],{"class":125},[31,8720,8721],{"class":62},",_1)\n",[31,8723,8724],{"class":33,"line":1556},[31,8725,8726],{"class":62},"        );\n",[31,8728,8729],{"class":33,"line":1561},[31,8730,147],{"class":62},[31,8732,8733],{"class":33,"line":1584},[31,8734,8735],{"class":4661},"    //std::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n",[31,8737,8738,8741,8743,8746,8749,8751,8753,8755,8757,8760,8762,8764,8766,8768,8771,8773,8775,8778,8780,8783],{"class":33,"line":1589},[31,8739,8740],{"class":58},"    rclcpp_action",[31,8742,72],{"class":62},[31,8744,8745],{"class":58},"GoalResponse",[31,8747,8748],{"class":58}," handle_goal_callback",[31,8750,102],{"class":62},[31,8752,2154],{"class":37},[31,8754,8626],{"class":58},[31,8756,72],{"class":62},[31,8758,8759],{"class":58},"GoalUUID",[31,8761,2167],{"class":37},[31,8763,178],{"class":62},[31,8765,228],{"class":58},[31,8767,72],{"class":62},[31,8769,8770],{"class":58},"shared_ptr",[31,8772,236],{"class":62},[31,8774,2154],{"class":37},[31,8776,8777],{"class":58}," Progress",[31,8779,72],{"class":62},[31,8781,8782],{"class":58},"Goal",[31,8784,8785],{"class":62},">)\n",[31,8787,8788],{"class":33,"line":1600},[31,8789,114],{"class":62},[31,8791,8792],{"class":33,"line":1609},[31,8793,49],{"emptyLinePlaceholder":48},[31,8795,8796,8798,8800,8802,8804],{"class":33,"line":3623},[31,8797,6567],{"class":37},[31,8799,8626],{"class":58},[31,8801,72],{"class":62},[31,8803,8745],{"class":58},[31,8805,8806],{"class":62},"::ACCEPT_AND_EXECUTE;\n",[31,8808,8809],{"class":33,"line":3634},[31,8810,147],{"class":62},[31,8812,8813],{"class":33,"line":3643},[31,8814,49],{"emptyLinePlaceholder":48},[31,8816,8817],{"class":33,"line":6674},[31,8818,8819],{"class":4661},"    //std::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[31,8821,8822,8824,8826,8829,8832,8834,8836,8838,8840,8842,8845,8847,8850,8852,8854,8857,8860],{"class":33,"line":6683},[31,8823,8740],{"class":58},[31,8825,72],{"class":62},[31,8827,8828],{"class":58},"CancelResponse",[31,8830,8831],{"class":58}," handle_cancel_callback",[31,8833,102],{"class":62},[31,8835,228],{"class":58},[31,8837,72],{"class":62},[31,8839,8770],{"class":58},[31,8841,236],{"class":62},[31,8843,8844],{"class":58},"rclcpp_action",[31,8846,72],{"class":62},[31,8848,8849],{"class":58},"ServerGoalHandle",[31,8851,236],{"class":62},[31,8853,8636],{"class":58},[31,8855,8856],{"class":62},">> ",[31,8858,8859],{"class":174},"goal_handle",[31,8861,108],{"class":62},[31,8863,8864],{"class":33,"line":6688},[31,8865,114],{"class":62},[31,8867,8868],{"class":33,"line":6699},[31,8869,49],{"emptyLinePlaceholder":48},[31,8871,8872,8874,8876,8878,8880],{"class":33,"line":6704},[31,8873,6567],{"class":37},[31,8875,8626],{"class":58},[31,8877,72],{"class":62},[31,8879,8828],{"class":58},[31,8881,8882],{"class":62},"::ACCEPT;\n",[31,8884,8885],{"class":33,"line":6725},[31,8886,147],{"class":62},[31,8888,8889],{"class":33,"line":6730},[31,8890,49],{"emptyLinePlaceholder":48},[31,8892,8893],{"class":33,"line":6749},[31,8894,8895],{"class":4661},"    //std::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[31,8897,8898,8900,8903,8905,8907,8909,8911,8913,8915,8917,8919,8921,8923,8925,8927],{"class":33,"line":6754},[31,8899,1353],{"class":37},[31,8901,8902],{"class":58}," handle_accepted_callback",[31,8904,102],{"class":62},[31,8906,228],{"class":58},[31,8908,72],{"class":62},[31,8910,8770],{"class":58},[31,8912,236],{"class":62},[31,8914,8844],{"class":58},[31,8916,72],{"class":62},[31,8918,8849],{"class":58},[31,8920,236],{"class":62},[31,8922,8636],{"class":58},[31,8924,8856],{"class":62},[31,8926,8859],{"class":174},[31,8928,108],{"class":62},[31,8930,8931],{"class":33,"line":6768},[31,8932,114],{"class":62},[31,8934,8935],{"class":33,"line":6773},[31,8936,147],{"class":62},[31,8938,8939],{"class":33,"line":6797},[31,8940,49],{"emptyLinePlaceholder":48},[31,8942,8943],{"class":33,"line":6806},[31,8944,1348],{"class":37},[31,8946,8947,8949,8951,8954,8956,8958],{"class":33,"line":6811},[31,8948,8740],{"class":58},[31,8950,72],{"class":62},[31,8952,8953],{"class":58},"Server",[31,8955,236],{"class":62},[31,8957,8636],{"class":58},[31,8959,5143],{"class":62},[31,8961,8962],{"class":33,"line":6816},[31,8963,153],{"class":62},[31,8965,8966],{"class":33,"line":6827},[31,8967,49],{"emptyLinePlaceholder":48},[31,8969,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988],{"class":33,"line":6836},[31,8971,164],{"class":37},[31,8973,167],{"class":58},[31,8975,102],{"class":62},[31,8977,164],{"class":37},[31,8979,175],{"class":174},[31,8981,178],{"class":62},[31,8983,181],{"class":37},[31,8985,184],{"class":37},[31,8987,187],{"class":174},[31,8989,108],{"class":62},[31,8991,8992],{"class":33,"line":7497},[31,8993,81],{"class":62},[31,8995,8996,8998,9000,9002],{"class":33,"line":7502},[31,8997,200],{"class":58},[31,8999,72],{"class":62},[31,9001,205],{"class":58},[31,9003,208],{"class":62},[31,9005,9006],{"class":33,"line":7517},[31,9007,49],{"emptyLinePlaceholder":48},[31,9009,9010,9012,9014,9016,9018,9020,9022,9024,9026,9028],{"class":33,"line":7522},[31,9011,200],{"class":58},[31,9013,72],{"class":62},[31,9015,223],{"class":58},[31,9017,102],{"class":62},[31,9019,228],{"class":58},[31,9021,72],{"class":62},[31,9023,233],{"class":58},[31,9025,236],{"class":62},[31,9027,8074],{"class":58},[31,9029,242],{"class":62},[31,9031,9032],{"class":33,"line":7535},[31,9033,49],{"emptyLinePlaceholder":48},[31,9035,9036,9038,9040,9042],{"class":33,"line":7540},[31,9037,200],{"class":58},[31,9039,72],{"class":62},[31,9041,257],{"class":58},[31,9043,260],{"class":62},[31,9045,9046,9048,9050],{"class":33,"line":7563},[31,9047,266],{"class":37},[31,9049,269],{"class":125},[31,9051,272],{"class":62},[31,9053,9054],{"class":33,"line":7572},[31,9055,278],{"class":62},[14,9057,9058],{},[17,9059],{"alt":19,"src":9060},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image663.webp",[14,9062,9063],{},[17,9064],{"alt":19,"src":9065},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image664.webp",[14,9067,9068],{},[17,9069],{"alt":19,"src":9070},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image665.webp",[14,9072,9073],{},[17,9074],{"alt":19,"src":9075},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image666.webp",[22,9077,9079],{"className":1625,"code":9078,"language":1627,"meta":19,"style":19},"ros2 action send_goal /get_sum_topic base_interfaces_demo/action/Progress -f \"{'num': 10}\"\n",[28,9080,9081],{"__ignoreMap":19},[31,9082,9083,9085,9088,9091,9094,9097,9100],{"class":33,"line":34},[31,9084,1634],{"class":58},[31,9086,9087],{"class":41}," action",[31,9089,9090],{"class":41}," send_goal",[31,9092,9093],{"class":41}," /get_sum_topic",[31,9095,9096],{"class":41}," base_interfaces_demo/action/Progress",[31,9098,9099],{"class":125}," -f",[31,9101,9102],{"class":41}," \"{'num': 10}\"\n",[14,9104,9105],{},"ros2 action send_goal /话题名称 + 接口类型 + -f + 参数",[14,9107,9108],{},"-f是连续反馈，就是可以获取连续反馈。",[14,9110,9111],{},[17,9112],{"alt":19,"src":9113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image667.webp",[14,9115,9116],{},"发送目标值为10",[14,9118,9119],{},"然后为我们客户端设置了一个ID，因为可能有多个客户端都访问这个服务端，所以我们要给每个客户端都设置一个唯一的ID",[14,9121,9122],{},"然后结果是0",[14,9124,9125],{},"因为我们程序暂时啥都还没写。",[472,9127],{},[14,9129,9130],{},[17,9131],{"alt":19,"src":9132},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image668.webp",[14,9134,9135],{},"uuid就是客户端ID，在此时没有使用，那就用(void)uuid，因为如果不用，编译器可能报警告。",[14,9137,9138],{},[17,9139],{"alt":19,"src":9140},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image669.webp",[14,9142,9143],{},[17,9144],{"alt":19,"src":9145},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image670.webp",[14,9147,9148],{},[17,9149],{"alt":19,"src":9150},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image671.webp",[14,9152,9153],{},[17,9154],{"alt":19,"src":9155},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image672.webp",[14,9157,9158],{},[17,9159],{"alt":19,"src":9160},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image673.webp",[472,9162],{},[14,9164,9165],{},"我们的这个任务是可以正常被取消的，所以直接return accept就可以，根据不同任务需求来在函数里做不同的事。",[14,9167,9168],{},[17,9169],{"alt":19,"src":9170},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image674.webp",[14,9172,9173],{},[17,9174],{"alt":19,"src":9175},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image675.webp",[472,9177],{},[14,9179,9180],{},"因为我们的连续反馈和最终响应的生成是耗时操作，为了避免主逻辑出现阻塞，建议单独再开一个线程。",[14,9182,9183],{},[17,9184],{"alt":19,"src":9185},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image676.webp",[14,9187,9188],{},[17,9189],{"alt":19,"src":9190},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image677.webp",[14,9192,9193],{},[17,9194],{"alt":19,"src":9195},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image678.webp",[14,9197,9198],{},[17,9199],{"alt":19,"src":9200},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image679.webp",[14,9202,9203],{},[17,9204],{"alt":19,"src":9205},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image680.webp",[14,9207,9208],{},"生成连续反馈的API，需要传参，传入的参数就是Progress里的Feedback对象。",[14,9210,9211],{},[17,9212],{"alt":19,"src":9213},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image681.webp",[14,9215,9216],{},"get_goal()可以获取目标值",[14,9218,9219],{},[17,9220],{"alt":19,"src":9221},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image682.webp",[14,9223,9224],{},[17,9225],{"alt":19,"src":9226},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image683.webp",[14,9228,9229],{},"因为这是个耗时操作，为了看出效果来，所以咱们每次循环的时候都给设置一下休眠。",[14,9231,9232],{},[17,9233],{"alt":19,"src":9234},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image684.webp",[14,9236,9237],{},"1.0是指1Hz，也就是每隔1秒执行一次。",[14,9239,9240],{},[17,9241],{"alt":19,"src":9242},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image685.webp",[14,9244,9245],{},"因为1Hz，所以我们这个rate.sleep()每次都会休眠1秒钟;",[14,9247,9248],{},[17,9249],{"alt":19,"src":9250},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image686.webp",[14,9252,9253],{},"生成最终结果的API，需要传参，传入的参数就是Progress里的Result对象。",[14,9255,9256],{},[17,9257],{"alt":19,"src":9258},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image687.webp",[14,9260,9261],{},"ok()函数的返回值：如果正常运行，则返回true，如果不正常运行则返回false",[14,9263,9264],{},[17,9265],{"alt":19,"src":9266},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image688.webp",[14,9268,9269],{},[17,9270],{"alt":19,"src":9271},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image689.webp",[14,9273,9274],{},[17,9275],{"alt":19,"src":9276},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image690.webp",[14,9278,9279],{},[17,9280],{"alt":19,"src":9281},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image691.webp",[14,9283,9284],{},[17,9285],{"alt":19,"src":9286},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image692.webp",[14,9288,9289],{},[17,9290],{"alt":19,"src":9291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image693.webp",[14,9293,9294],{},[17,9295],{"alt":19,"src":9296},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image694.webp",[14,9298,9299],{},[17,9300],{"alt":19,"src":9301},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image695.webp",[14,9303,9304],{},[17,9305],{"alt":19,"src":9306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image696.webp",[14,9308,9309],{},[17,9310],{"alt":19,"src":9311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image697.webp",[472,9313],{},[14,9315,9316],{},"bug：当我们终止客户端之后，服务端没有停止运行。服务端要一直执行到程序结束。",[14,9318,9319],{},[17,9320],{"alt":19,"src":9321},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image698.webp",[14,9323,9324],{},"bug解决思路：",[14,9326,9327],{},"接收到取消请求后，就是中断我的主逻辑，也就是execute_callback被关闭，",[14,9329,9330],{},[17,9331],{"alt":19,"src":9332},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image699.webp",[14,9334,9335],{},"这个函数返回值是布尔值，如果接收到了取消请求就返回true，否则返回false，",[14,9337,9338],{},[17,9339],{"alt":19,"src":9340},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image700.webp",[14,9342,9343],{},"我们取消之后，其实仍然可以向客户端反应最终的结果，用canceled函数，",[14,9345,9346],{},[17,9347],{"alt":19,"src":9348},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image701.webp",[14,9350,9351],{},[17,9352],{"alt":19,"src":9353},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image702.webp",[14,9355,9356],{},[17,9357],{"alt":19,"src":9358},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image703.webp",[14,9360,9361],{},"要把定义result放在前面。",[14,9363,9364],{},[17,9365],{"alt":19,"src":9366},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image704.webp",[14,9368,9369],{},[17,9370],{"alt":19,"src":9371},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image705.webp",[14,9373,9374],{},[17,9375],{"alt":19,"src":9376},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image706.webp",[22,9378,9380],{"className":24,"code":9379,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"rclcpp_action/rclcpp_action.hpp\"\n#include \"base_interfaces_demo/action/progress.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      /*\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      */\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    //std::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    //std::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    //std::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    void execute_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      //void publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n      //goal_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 / (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      //void succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n      //goal_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,9381,9382,9388,9394,9400,9404,9416,9428,9440,9444,9460,9464,9468,9482,9486,9504,9508,9512,9516,9520,9524,9528,9532,9536,9540,9544,9562,9568,9574,9594,9614,9634,9638,9642,9646,9650,9701,9705,9716,9731,9735,9754,9768,9772,9791,9803,9807,9811,9815,9851,9855,9864,9883,9895,9899,9903,9907,9940,9944,9949,9954,9973,9986,10009,10031,10049,10077,10081,10092,10115,10125,10129,10140,10164,10168,10186,10190,10200,10211,10230,10237,10242,10247,10258,10263,10268,10274,10280,10285,10306,10311,10321,10331,10356,10361,10366,10371,10376,10409,10414,10452,10457,10462,10467,10482,10487,10492,10515,10520,10531,10536,10559,10564,10575,10584],{"__ignoreMap":19},[31,9383,9384,9386],{"class":33,"line":34},[31,9385,38],{"class":37},[31,9387,42],{"class":41},[31,9389,9390,9392],{"class":33,"line":45},[31,9391,38],{"class":37},[31,9393,8454],{"class":41},[31,9395,9396,9398],{"class":33,"line":52},[31,9397,38],{"class":37},[31,9399,8461],{"class":41},[31,9401,9402],{"class":33,"line":78},[31,9403,49],{"emptyLinePlaceholder":48},[31,9405,9406,9408,9410,9412,9414],{"class":33,"line":84},[31,9407,1162],{"class":37},[31,9409,3396],{"class":58},[31,9411,72],{"class":62},[31,9413,8476],{"class":58},[31,9415,8479],{"class":62},[31,9417,9418,9420,9422,9424,9426],{"class":33,"line":90},[31,9419,1162],{"class":37},[31,9421,1168],{"class":58},[31,9423,72],{"class":62},[31,9425,2126],{"class":58},[31,9427,8492],{"class":62},[31,9429,9430,9432,9434,9436,9438],{"class":33,"line":111},[31,9431,1162],{"class":37},[31,9433,1168],{"class":58},[31,9435,72],{"class":62},[31,9437,2126],{"class":58},[31,9439,8505],{"class":62},[31,9441,9442],{"class":33,"line":117},[31,9443,49],{"emptyLinePlaceholder":48},[31,9445,9446,9448,9450,9452,9454,9456,9458],{"class":33,"line":144},[31,9447,55],{"class":37},[31,9449,7944],{"class":58},[31,9451,63],{"class":62},[31,9453,66],{"class":37},[31,9455,69],{"class":58},[31,9457,72],{"class":62},[31,9459,75],{"class":58},[31,9461,9462],{"class":33,"line":150},[31,9463,81],{"class":62},[31,9465,9466],{"class":33,"line":156},[31,9467,87],{"class":37},[31,9469,9470,9472,9474,9476,9478,9480],{"class":33,"line":161},[31,9471,7967],{"class":58},[31,9473,96],{"class":62},[31,9475,99],{"class":58},[31,9477,102],{"class":62},[31,9479,7976],{"class":41},[31,9481,108],{"class":62},[31,9483,9484],{"class":33,"line":192},[31,9485,114],{"class":62},[31,9487,9488,9490,9492,9494,9496,9498,9500,9502],{"class":33,"line":197},[31,9489,120],{"class":58},[31,9491,102],{"class":62},[31,9493,126],{"class":125},[31,9495,129],{"class":62},[31,9497,132],{"class":58},[31,9499,135],{"class":62},[31,9501,7999],{"class":41},[31,9503,141],{"class":62},[31,9505,9506],{"class":33,"line":211},[31,9507,7279],{"class":4661},[31,9509,9510],{"class":33,"line":216},[31,9511,8578],{"class":4661},[31,9513,9514],{"class":33,"line":245},[31,9515,8583],{"class":4661},[31,9517,9518],{"class":33,"line":250},[31,9519,8588],{"class":4661},[31,9521,9522],{"class":33,"line":263},[31,9523,8593],{"class":4661},[31,9525,9526],{"class":33,"line":275},[31,9527,8598],{"class":4661},[31,9529,9530],{"class":33,"line":417},[31,9531,8603],{"class":4661},[31,9533,9534],{"class":33,"line":422},[31,9535,8608],{"class":4661},[31,9537,9538],{"class":33,"line":428},[31,9539,8613],{"class":4661},[31,9541,9542],{"class":33,"line":434},[31,9543,7294],{"class":4661},[31,9545,9546,9548,9550,9552,9554,9556,9558,9560],{"class":33,"line":440},[31,9547,4932],{"class":62},[31,9549,1258],{"class":37},[31,9551,8626],{"class":58},[31,9553,72],{"class":62},[31,9555,8631],{"class":58},[31,9557,236],{"class":62},[31,9559,8636],{"class":58},[31,9561,8639],{"class":62},[31,9563,9564,9566],{"class":33,"line":446},[31,9565,8644],{"class":125},[31,9567,8647],{"class":62},[31,9569,9570,9572],{"class":33,"line":452},[31,9571,8652],{"class":41},[31,9573,8647],{"class":62},[31,9575,9576,9578,9580,9582,9584,9586,9588,9590,9592],{"class":33,"line":458},[31,9577,8659],{"class":58},[31,9579,72],{"class":62},[31,9581,1324],{"class":58},[31,9583,102],{"class":62},[31,9585,1329],{"class":37},[31,9587,8074],{"class":58},[31,9589,8672],{"class":62},[31,9591,126],{"class":125},[31,9593,8677],{"class":62},[31,9595,9596,9598,9600,9602,9604,9606,9608,9610,9612],{"class":33,"line":1540},[31,9597,8659],{"class":58},[31,9599,72],{"class":62},[31,9601,1324],{"class":58},[31,9603,102],{"class":62},[31,9605,1329],{"class":37},[31,9607,8074],{"class":58},[31,9609,8694],{"class":62},[31,9611,126],{"class":125},[31,9613,8699],{"class":62},[31,9615,9616,9618,9620,9622,9624,9626,9628,9630,9632],{"class":33,"line":1545},[31,9617,8659],{"class":58},[31,9619,72],{"class":62},[31,9621,1324],{"class":58},[31,9623,102],{"class":62},[31,9625,1329],{"class":37},[31,9627,8074],{"class":58},[31,9629,8716],{"class":62},[31,9631,126],{"class":125},[31,9633,8721],{"class":62},[31,9635,9636],{"class":33,"line":1556},[31,9637,8726],{"class":62},[31,9639,9640],{"class":33,"line":1561},[31,9641,147],{"class":62},[31,9643,9644],{"class":33,"line":1584},[31,9645,49],{"emptyLinePlaceholder":48},[31,9647,9648],{"class":33,"line":1589},[31,9649,8735],{"class":4661},[31,9651,9652,9654,9656,9658,9660,9662,9664,9666,9668,9670,9672,9675,9677,9679,9681,9683,9685,9687,9689,9691,9693,9696,9699],{"class":33,"line":1600},[31,9653,8740],{"class":58},[31,9655,72],{"class":62},[31,9657,8745],{"class":58},[31,9659,8748],{"class":58},[31,9661,102],{"class":62},[31,9663,2154],{"class":37},[31,9665,8626],{"class":58},[31,9667,72],{"class":62},[31,9669,8759],{"class":58},[31,9671,2167],{"class":37},[31,9673,9674],{"class":174},"uuid",[31,9676,178],{"class":62},[31,9678,228],{"class":58},[31,9680,72],{"class":62},[31,9682,8770],{"class":58},[31,9684,236],{"class":62},[31,9686,2154],{"class":37},[31,9688,8777],{"class":58},[31,9690,72],{"class":62},[31,9692,8782],{"class":58},[31,9694,9695],{"class":62},"> ",[31,9697,9698],{"class":174},"goal",[31,9700,108],{"class":62},[31,9702,9703],{"class":33,"line":1609},[31,9704,114],{"class":62},[31,9706,9707,9710,9713],{"class":33,"line":3623},[31,9708,9709],{"class":62},"      (",[31,9711,9712],{"class":37},"void",[31,9714,9715],{"class":62},")uuid;\n",[31,9717,9718,9721,9724,9727,9729],{"class":33,"line":3634},[31,9719,9720],{"class":37},"      if",[31,9722,9723],{"class":62},"(goal->num ",[31,9725,9726],{"class":37},"\u003C=",[31,9728,5774],{"class":125},[31,9730,108],{"class":62},[31,9732,9733],{"class":33,"line":3643},[31,9734,6463],{"class":62},[31,9736,9737,9739,9741,9743,9745,9747,9749,9752],{"class":33,"line":6674},[31,9738,1769],{"class":58},[31,9740,102],{"class":62},[31,9742,126],{"class":125},[31,9744,129],{"class":62},[31,9746,132],{"class":58},[31,9748,135],{"class":62},[31,9750,9751],{"class":41},"\"提交的目标值必须大于1!\"",[31,9753,141],{"class":62},[31,9755,9756,9759,9761,9763,9765],{"class":33,"line":6683},[31,9757,9758],{"class":37},"        return",[31,9760,8626],{"class":58},[31,9762,72],{"class":62},[31,9764,8745],{"class":58},[31,9766,9767],{"class":62},"::REJECT;\n",[31,9769,9770],{"class":33,"line":6688},[31,9771,6562],{"class":62},[31,9773,9774,9776,9778,9780,9782,9784,9786,9789],{"class":33,"line":6699},[31,9775,120],{"class":58},[31,9777,102],{"class":62},[31,9779,126],{"class":125},[31,9781,129],{"class":62},[31,9783,132],{"class":58},[31,9785,135],{"class":62},[31,9787,9788],{"class":41},"\"提交的目标值合法!\"",[31,9790,141],{"class":62},[31,9792,9793,9795,9797,9799,9801],{"class":33,"line":6704},[31,9794,6567],{"class":37},[31,9796,8626],{"class":58},[31,9798,72],{"class":62},[31,9800,8745],{"class":58},[31,9802,8806],{"class":62},[31,9804,9805],{"class":33,"line":6725},[31,9806,147],{"class":62},[31,9808,9809],{"class":33,"line":6730},[31,9810,49],{"emptyLinePlaceholder":48},[31,9812,9813],{"class":33,"line":6749},[31,9814,8819],{"class":4661},[31,9816,9817,9819,9821,9823,9825,9827,9829,9831,9833,9835,9837,9839,9841,9843,9845,9847,9849],{"class":33,"line":6754},[31,9818,8740],{"class":58},[31,9820,72],{"class":62},[31,9822,8828],{"class":58},[31,9824,8831],{"class":58},[31,9826,102],{"class":62},[31,9828,228],{"class":58},[31,9830,72],{"class":62},[31,9832,8770],{"class":58},[31,9834,236],{"class":62},[31,9836,8844],{"class":58},[31,9838,72],{"class":62},[31,9840,8849],{"class":58},[31,9842,236],{"class":62},[31,9844,8636],{"class":58},[31,9846,8856],{"class":62},[31,9848,8859],{"class":174},[31,9850,108],{"class":62},[31,9852,9853],{"class":33,"line":6768},[31,9854,114],{"class":62},[31,9856,9857,9859,9861],{"class":33,"line":6773},[31,9858,9709],{"class":62},[31,9860,9712],{"class":37},[31,9862,9863],{"class":62},")goal_handle;\n",[31,9865,9866,9868,9870,9872,9874,9876,9878,9881],{"class":33,"line":6797},[31,9867,120],{"class":58},[31,9869,102],{"class":62},[31,9871,126],{"class":125},[31,9873,129],{"class":62},[31,9875,132],{"class":58},[31,9877,135],{"class":62},[31,9879,9880],{"class":41},"\"接收到任务取消请求!\"",[31,9882,141],{"class":62},[31,9884,9885,9887,9889,9891,9893],{"class":33,"line":6806},[31,9886,6567],{"class":37},[31,9888,8626],{"class":58},[31,9890,72],{"class":62},[31,9892,8828],{"class":58},[31,9894,8882],{"class":62},[31,9896,9897],{"class":33,"line":6811},[31,9898,147],{"class":62},[31,9900,9901],{"class":33,"line":6816},[31,9902,49],{"emptyLinePlaceholder":48},[31,9904,9905],{"class":33,"line":6827},[31,9906,8895],{"class":4661},[31,9908,9909,9911,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932,9934,9936,9938],{"class":33,"line":6836},[31,9910,1353],{"class":37},[31,9912,9913],{"class":58}," execute_callback",[31,9915,102],{"class":62},[31,9917,228],{"class":58},[31,9919,72],{"class":62},[31,9921,8770],{"class":58},[31,9923,236],{"class":62},[31,9925,8844],{"class":58},[31,9927,72],{"class":62},[31,9929,8849],{"class":58},[31,9931,236],{"class":62},[31,9933,8636],{"class":58},[31,9935,8856],{"class":62},[31,9937,8859],{"class":174},[31,9939,108],{"class":62},[31,9941,9942],{"class":33,"line":7497},[31,9943,114],{"class":62},[31,9945,9946],{"class":33,"line":7502},[31,9947,9948],{"class":4661},"      //void publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n",[31,9950,9951],{"class":33,"line":7517},[31,9952,9953],{"class":4661},"      //goal_handle->publish_feedback();\n",[31,9955,9956,9959,9962,9964,9967,9970],{"class":33,"line":7522},[31,9957,9958],{"class":37},"      int",[31,9960,9961],{"class":62}," num ",[31,9963,1258],{"class":37},[31,9965,9966],{"class":62}," goal_handle->",[31,9968,9969],{"class":58},"get_goal",[31,9971,9972],{"class":62},"()->num;\n",[31,9974,9975,9977,9980,9982,9984],{"class":33,"line":7535},[31,9976,9958],{"class":37},[31,9978,9979],{"class":62}," sum ",[31,9981,1258],{"class":37},[31,9983,269],{"class":125},[31,9985,272],{"class":62},[31,9987,9988,9990,9993,9995,9997,9999,10002,10004,10007],{"class":33,"line":7540},[31,9989,1368],{"class":37},[31,9991,9992],{"class":62}," feedback ",[31,9994,1258],{"class":37},[31,9996,1168],{"class":58},[31,9998,72],{"class":62},[31,10000,10001],{"class":58},"make_sharedautolinkProgress",[31,10003,72],{"class":62},[31,10005,10006],{"class":58},"Feedbackautolink",[31,10008,260],{"class":62},[31,10010,10011,10013,10016,10018,10020,10022,10024,10026,10029],{"class":33,"line":7563},[31,10012,1368],{"class":37},[31,10014,10015],{"class":62}," result ",[31,10017,1258],{"class":37},[31,10019,1168],{"class":58},[31,10021,72],{"class":62},[31,10023,10001],{"class":58},[31,10025,72],{"class":62},[31,10027,10028],{"class":58},"Resultautolink",[31,10030,260],{"class":62},[31,10032,10033,10036,10039,10042,10044,10047],{"class":33,"line":7572},[31,10034,10035],{"class":58},"      rclcpp",[31,10037,10038],{"class":62},"::Rate ",[31,10040,10041],{"class":58},"rate",[31,10043,102],{"class":62},[31,10045,10046],{"class":125},"1.0",[31,10048,141],{"class":62},[31,10050,10051,10054,10056,10058,10061,10063,10065,10068,10070,10073,10075],{"class":33,"line":7577},[31,10052,10053],{"class":37},"      for",[31,10055,5074],{"class":62},[31,10057,7258],{"class":37},[31,10059,10060],{"class":62}," i ",[31,10062,1258],{"class":37},[31,10064,5774],{"class":125},[31,10066,10067],{"class":62},"; i ",[31,10069,9726],{"class":37},[31,10071,10072],{"class":62}," num; i",[31,10074,1413],{"class":37},[31,10076,108],{"class":62},[31,10078,10079],{"class":33,"line":7614},[31,10080,6463],{"class":62},[31,10082,10083,10086,10089],{"class":33,"line":7619},[31,10084,10085],{"class":62},"        sum ",[31,10087,10088],{"class":37},"+=",[31,10090,10091],{"class":62}," i;\n",[31,10093,10094,10097,10100,10102,10104,10107,10109,10112],{"class":33,"line":7649},[31,10095,10096],{"class":37},"        double",[31,10098,10099],{"class":62}," progress ",[31,10101,1258],{"class":37},[31,10103,10060],{"class":62},[31,10105,10106],{"class":37},"/",[31,10108,5074],{"class":62},[31,10110,10111],{"class":37},"double",[31,10113,10114],{"class":62},")num;\n",[31,10116,10117,10120,10122],{"class":33,"line":7654},[31,10118,10119],{"class":62},"        feedback->progress ",[31,10121,1258],{"class":37},[31,10123,10124],{"class":62}," progress;\n",[31,10126,10127],{"class":33,"line":7682},[31,10128,49],{"emptyLinePlaceholder":48},[31,10130,10131,10134,10137],{"class":33,"line":7687},[31,10132,10133],{"class":62},"        goal_handle->",[31,10135,10136],{"class":58},"publish_feedback",[31,10138,10139],{"class":62},"(feedback);\n",[31,10141,10142,10144,10146,10148,10150,10152,10154,10157,10159,10161],{"class":33,"line":7693},[31,10143,1769],{"class":58},[31,10145,102],{"class":62},[31,10147,126],{"class":125},[31,10149,129],{"class":62},[31,10151,132],{"class":58},[31,10153,135],{"class":62},[31,10155,10156],{"class":41},"\"连续反馈中，当前进度为:",[31,10158,3492],{"class":125},[31,10160,1438],{"class":41},[31,10162,10163],{"class":62},",progress);\n",[31,10165,10166],{"class":33,"line":7698},[31,10167,49],{"emptyLinePlaceholder":48},[31,10169,10170,10172,10175,10178,10180,10182,10184],{"class":33,"line":7714},[31,10171,6495],{"class":37},[31,10173,10174],{"class":62},"(goal_handle->",[31,10176,10177],{"class":58},"is_canceling",[31,10179,6507],{"class":62},[31,10181,7636],{"class":37},[31,10183,6456],{"class":125},[31,10185,108],{"class":62},[31,10187,10188],{"class":33,"line":7719},[31,10189,6518],{"class":62},[31,10191,10192,10195,10197],{"class":33,"line":7724},[31,10193,10194],{"class":62},"          result->sum ",[31,10196,1258],{"class":37},[31,10198,10199],{"class":62}," sum;\n",[31,10201,10202,10205,10208],{"class":33,"line":7735},[31,10203,10204],{"class":62},"          goal_handle->",[31,10206,10207],{"class":58},"canceled",[31,10209,10210],{"class":62},"(result);\n",[31,10212,10213,10215,10217,10219,10221,10223,10225,10228],{"class":33,"line":7744},[31,10214,6523],{"class":58},[31,10216,102],{"class":62},[31,10218,126],{"class":125},[31,10220,129],{"class":62},[31,10222,132],{"class":58},[31,10224,135],{"class":62},[31,10226,10227],{"class":41},"\"任务被取消了!\"",[31,10229,141],{"class":62},[31,10231,10233,10235],{"class":33,"line":10232},79,[31,10234,6547],{"class":37},[31,10236,272],{"class":62},[31,10238,10240],{"class":33,"line":10239},80,[31,10241,6557],{"class":62},[31,10243,10245],{"class":33,"line":10244},81,[31,10246,49],{"emptyLinePlaceholder":48},[31,10248,10250,10253,10256],{"class":33,"line":10249},82,[31,10251,10252],{"class":62},"        rate.",[31,10254,10255],{"class":58},"sleep",[31,10257,260],{"class":62},[31,10259,10261],{"class":33,"line":10260},83,[31,10262,6562],{"class":62},[31,10264,10266],{"class":33,"line":10265},84,[31,10267,49],{"emptyLinePlaceholder":48},[31,10269,10271],{"class":33,"line":10270},85,[31,10272,10273],{"class":4661},"      //void succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n",[31,10275,10277],{"class":33,"line":10276},86,[31,10278,10279],{"class":4661},"      //goal_handle->succeed();\n",[31,10281,10283],{"class":33,"line":10282},87,[31,10284,49],{"emptyLinePlaceholder":48},[31,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304],{"class":33,"line":10287},88,[31,10289,9720],{"class":37},[31,10291,102],{"class":62},[31,10293,3919],{"class":58},[31,10295,72],{"class":62},[31,10297,6504],{"class":58},[31,10299,6507],{"class":62},[31,10301,7636],{"class":37},[31,10303,6456],{"class":125},[31,10305,108],{"class":62},[31,10307,10309],{"class":33,"line":10308},89,[31,10310,6463],{"class":62},[31,10312,10314,10317,10319],{"class":33,"line":10313},90,[31,10315,10316],{"class":62},"        result->sum ",[31,10318,1258],{"class":37},[31,10320,10199],{"class":62},[31,10322,10324,10326,10329],{"class":33,"line":10323},91,[31,10325,10133],{"class":62},[31,10327,10328],{"class":58},"succeed",[31,10330,10210],{"class":62},[31,10332,10334,10336,10338,10340,10342,10344,10346,10349,10351,10353],{"class":33,"line":10333},92,[31,10335,1769],{"class":58},[31,10337,102],{"class":62},[31,10339,126],{"class":125},[31,10341,129],{"class":62},[31,10343,132],{"class":58},[31,10345,135],{"class":62},[31,10347,10348],{"class":41},"\"最终响应结果为:",[31,10350,3487],{"class":125},[31,10352,1438],{"class":41},[31,10354,10355],{"class":62},",sum);\n",[31,10357,10359],{"class":33,"line":10358},93,[31,10360,6562],{"class":62},[31,10362,10364],{"class":33,"line":10363},94,[31,10365,49],{"emptyLinePlaceholder":48},[31,10367,10369],{"class":33,"line":10368},95,[31,10370,147],{"class":62},[31,10372,10374],{"class":33,"line":10373},96,[31,10375,49],{"emptyLinePlaceholder":48},[31,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405,10407],{"class":33,"line":10378},97,[31,10380,1353],{"class":37},[31,10382,8902],{"class":58},[31,10384,102],{"class":62},[31,10386,228],{"class":58},[31,10388,72],{"class":62},[31,10390,8770],{"class":58},[31,10392,236],{"class":62},[31,10394,8844],{"class":58},[31,10396,72],{"class":62},[31,10398,8849],{"class":58},[31,10400,236],{"class":62},[31,10402,8636],{"class":58},[31,10404,8856],{"class":62},[31,10406,8859],{"class":174},[31,10408,108],{"class":62},[31,10410,10412],{"class":33,"line":10411},98,[31,10413,114],{"class":62},[31,10415,10417,10420,10422,10425,10427,10429,10431,10433,10435,10437,10439,10442,10444,10447,10450],{"class":33,"line":10416},99,[31,10418,10419],{"class":58},"      std",[31,10421,72],{"class":62},[31,10423,10424],{"class":58},"thread",[31,10426,102],{"class":62},[31,10428,228],{"class":58},[31,10430,72],{"class":62},[31,10432,1324],{"class":58},[31,10434,102],{"class":62},[31,10436,1329],{"class":37},[31,10438,8074],{"class":58},[31,10440,10441],{"class":62},"::execute_callback,",[31,10443,126],{"class":125},[31,10445,10446],{"class":62},",goal_handle)).",[31,10448,10449],{"class":58},"detach",[31,10451,260],{"class":62},[31,10453,10455],{"class":33,"line":10454},100,[31,10456,147],{"class":62},[31,10458,10460],{"class":33,"line":10459},101,[31,10461,49],{"emptyLinePlaceholder":48},[31,10463,10465],{"class":33,"line":10464},102,[31,10466,1348],{"class":37},[31,10468,10470,10472,10474,10476,10478,10480],{"class":33,"line":10469},103,[31,10471,8740],{"class":58},[31,10473,72],{"class":62},[31,10475,8953],{"class":58},[31,10477,236],{"class":62},[31,10479,8636],{"class":58},[31,10481,5143],{"class":62},[31,10483,10485],{"class":33,"line":10484},104,[31,10486,153],{"class":62},[31,10488,10490],{"class":33,"line":10489},105,[31,10491,49],{"emptyLinePlaceholder":48},[31,10493,10495,10497,10499,10501,10503,10505,10507,10509,10511,10513],{"class":33,"line":10494},106,[31,10496,164],{"class":37},[31,10498,167],{"class":58},[31,10500,102],{"class":62},[31,10502,164],{"class":37},[31,10504,175],{"class":174},[31,10506,178],{"class":62},[31,10508,181],{"class":37},[31,10510,184],{"class":37},[31,10512,187],{"class":174},[31,10514,108],{"class":62},[31,10516,10518],{"class":33,"line":10517},107,[31,10519,81],{"class":62},[31,10521,10523,10525,10527,10529],{"class":33,"line":10522},108,[31,10524,200],{"class":58},[31,10526,72],{"class":62},[31,10528,205],{"class":58},[31,10530,208],{"class":62},[31,10532,10534],{"class":33,"line":10533},109,[31,10535,49],{"emptyLinePlaceholder":48},[31,10537,10539,10541,10543,10545,10547,10549,10551,10553,10555,10557],{"class":33,"line":10538},110,[31,10540,200],{"class":58},[31,10542,72],{"class":62},[31,10544,223],{"class":58},[31,10546,102],{"class":62},[31,10548,228],{"class":58},[31,10550,72],{"class":62},[31,10552,233],{"class":58},[31,10554,236],{"class":62},[31,10556,8074],{"class":58},[31,10558,242],{"class":62},[31,10560,10562],{"class":33,"line":10561},111,[31,10563,49],{"emptyLinePlaceholder":48},[31,10565,10567,10569,10571,10573],{"class":33,"line":10566},112,[31,10568,200],{"class":58},[31,10570,72],{"class":62},[31,10572,257],{"class":58},[31,10574,260],{"class":62},[31,10576,10578,10580,10582],{"class":33,"line":10577},113,[31,10579,266],{"class":37},[31,10581,269],{"class":125},[31,10583,272],{"class":62},[31,10585,10587],{"class":33,"line":10586},114,[31,10588,278],{"class":62},[10,10590,10592],{"id":10591},"动作通信_实验1_客户端实现c","动作通信_实验1_客户端实现(C++)",[14,10594,10595],{},[17,10596],{"alt":19,"src":10597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image707.webp",[14,10599,10600],{},"这条红色的线是在action_client帮我们封装好的，所以可以不用管。",[14,10602,10603],{},[17,10604],{"alt":19,"src":10605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image708.webp",[22,10607,10609],{"className":24,"code":10608,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,10610,10611,10617,10621,10637,10641,10645,10659,10663,10681,10685,10689,10693,10715,10719,10732,10736,10760,10768,10772,10782,10786,10808,10812,10822,10830],{"__ignoreMap":19},[31,10612,10613,10615],{"class":33,"line":34},[31,10614,38],{"class":37},[31,10616,42],{"class":41},[31,10618,10619],{"class":33,"line":45},[31,10620,49],{"emptyLinePlaceholder":48},[31,10622,10623,10625,10627,10629,10631,10633,10635],{"class":33,"line":52},[31,10624,55],{"class":37},[31,10626,8129],{"class":58},[31,10628,63],{"class":62},[31,10630,66],{"class":37},[31,10632,69],{"class":58},[31,10634,72],{"class":62},[31,10636,75],{"class":58},[31,10638,10639],{"class":33,"line":78},[31,10640,81],{"class":62},[31,10642,10643],{"class":33,"line":84},[31,10644,87],{"class":37},[31,10646,10647,10649,10651,10653,10655,10657],{"class":33,"line":90},[31,10648,8152],{"class":58},[31,10650,96],{"class":62},[31,10652,99],{"class":58},[31,10654,102],{"class":62},[31,10656,7976],{"class":41},[31,10658,108],{"class":62},[31,10660,10661],{"class":33,"line":111},[31,10662,114],{"class":62},[31,10664,10665,10667,10669,10671,10673,10675,10677,10679],{"class":33,"line":117},[31,10666,120],{"class":58},[31,10668,102],{"class":62},[31,10670,126],{"class":125},[31,10672,129],{"class":62},[31,10674,132],{"class":58},[31,10676,135],{"class":62},[31,10678,8183],{"class":41},[31,10680,141],{"class":62},[31,10682,10683],{"class":33,"line":144},[31,10684,147],{"class":62},[31,10686,10687],{"class":33,"line":150},[31,10688,153],{"class":62},[31,10690,10691],{"class":33,"line":156},[31,10692,49],{"emptyLinePlaceholder":48},[31,10694,10695,10697,10699,10701,10703,10705,10707,10709,10711,10713],{"class":33,"line":161},[31,10696,164],{"class":37},[31,10698,167],{"class":58},[31,10700,102],{"class":62},[31,10702,164],{"class":37},[31,10704,175],{"class":174},[31,10706,178],{"class":62},[31,10708,181],{"class":37},[31,10710,184],{"class":37},[31,10712,187],{"class":174},[31,10714,108],{"class":62},[31,10716,10717],{"class":33,"line":192},[31,10718,81],{"class":62},[31,10720,10721,10723,10725,10727,10730],{"class":33,"line":197},[31,10722,5726],{"class":37},[31,10724,5729],{"class":62},[31,10726,5732],{"class":37},[31,10728,10729],{"class":125}," 2",[31,10731,108],{"class":62},[31,10733,10734],{"class":33,"line":211},[31,10735,5742],{"class":62},[31,10737,10738,10740,10742,10744,10746,10748,10750,10753,10755,10758],{"class":33,"line":216},[31,10739,5747],{"class":58},[31,10741,102],{"class":62},[31,10743,3919],{"class":58},[31,10745,72],{"class":62},[31,10747,132],{"class":58},[31,10749,102],{"class":62},[31,10751,10752],{"class":41},"\"rclcppp\"",[31,10754,3255],{"class":62},[31,10756,10757],{"class":41},"\"请输入一个整形数字!\"",[31,10759,141],{"class":62},[31,10761,10762,10764,10766],{"class":33,"line":245},[31,10763,1880],{"class":37},[31,10765,5774],{"class":125},[31,10767,272],{"class":62},[31,10769,10770],{"class":33,"line":250},[31,10771,455],{"class":62},[31,10773,10774,10776,10778,10780],{"class":33,"line":263},[31,10775,200],{"class":58},[31,10777,72],{"class":62},[31,10779,205],{"class":58},[31,10781,208],{"class":62},[31,10783,10784],{"class":33,"line":275},[31,10785,49],{"emptyLinePlaceholder":48},[31,10787,10788,10790,10792,10794,10796,10798,10800,10802,10804,10806],{"class":33,"line":417},[31,10789,200],{"class":58},[31,10791,72],{"class":62},[31,10793,223],{"class":58},[31,10795,102],{"class":62},[31,10797,228],{"class":58},[31,10799,72],{"class":62},[31,10801,233],{"class":58},[31,10803,236],{"class":62},[31,10805,8258],{"class":58},[31,10807,242],{"class":62},[31,10809,10810],{"class":33,"line":422},[31,10811,49],{"emptyLinePlaceholder":48},[31,10813,10814,10816,10818,10820],{"class":33,"line":428},[31,10815,200],{"class":58},[31,10817,72],{"class":62},[31,10819,257],{"class":58},[31,10821,260],{"class":62},[31,10823,10824,10826,10828],{"class":33,"line":434},[31,10825,266],{"class":37},[31,10827,269],{"class":125},[31,10829,272],{"class":62},[31,10831,10832],{"class":33,"line":440},[31,10833,278],{"class":62},[14,10835,10836],{},[17,10837],{"alt":19,"src":10838},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image709.webp",[14,10840,10841],{},[17,10842],{"alt":19,"src":10843},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image710.webp",[14,10845,10846],{},[17,10847],{"alt":19,"src":10848},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image711.webp",[14,10850,10851],{},[17,10852],{"alt":19,"src":10853},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image712.webp",[14,10855,10856],{},"第一个入口参数是node",[14,10858,10859],{},"第二个入口参数是话题名称，字符串",[14,10861,10862],{},"第三个入口参数和第四个入口参数都有默认值",[14,10864,10865],{},"返回值是客户端智能指针。",[14,10867,10868],{},[17,10869],{"alt":19,"src":10870},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image713.webp",[14,10872,10873],{},[17,10874],{"alt":19,"src":10875},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image714.webp",[14,10877,10878],{},[17,10879],{"alt":19,"src":10880},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image715.webp",[14,10882,10883],{},[17,10884],{"alt":19,"src":10885},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image716.webp",[14,10887,10888],{},"需要把一步分成两步。",[14,10890,10891],{},[17,10892],{"alt":19,"src":10893},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image717.webp",[14,10895,10896],{},"再把send_goal函数调用一下。",[14,10898,10899],{},[17,10900],{"alt":19,"src":10901},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image718.webp",[472,10903],{},[14,10905,10906],{},[17,10907],{"alt":19,"src":10908},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image719.webp",[14,10910,10911],{},"async_send_goal是异步发送目标值",[14,10913,10914],{},[17,10915],{"alt":19,"src":10916},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image720.webp",[14,10918,10919],{},"第一个入口参数是我们接口文件里的目标值",[14,10921,10922],{},"第二个入口参数是发送目标选项对象，我们可以设置这个目标发送过去之后，我们需要处理的一些回调函数",[14,10924,10925],{},"返回值是",[14,10927,10928],{},[17,10929],{"alt":19,"src":10930},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image721.webp",[14,10932,10933],{},[17,10934],{"alt":19,"src":10935},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image722.webp",[14,10937,10938],{},[17,10939],{"alt":19,"src":10940},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image723.webp",[14,10942,10943],{},[17,10944],{"alt":19,"src":10945},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image724.webp",[14,10947,10948],{},"先不管其他的，先把函数随便定义上，什么返回值，入口参数都是void，先不让程序报错。",[14,10950,10951],{},[17,10952],{"alt":19,"src":10953},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image725.webp",[14,10955,10956],{},[17,10957],{"alt":19,"src":10958},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image726.webp",[14,10960,10961],{},[17,10962],{"alt":19,"src":10963},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image727.webp",[14,10965,10966],{},"得知，",[14,10968,10969],{},"GoalResponseCallback返回值是void，入口参数是goalhandle，goalhandle在本图的上面，是clientgoalhandle，然后这个clientgoalhandle属于rclcpp_action工作空间",[14,10971,10972],{},[17,10973],{"alt":19,"src":10974},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image728.webp",[14,10976,10977],{},[17,10978],{"alt":19,"src":10979},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image729.webp",[14,10981,10982],{},[17,10983],{"alt":19,"src":10984},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image730.webp",[14,10986,10987],{},[17,10988],{"alt":19,"src":10989},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image731.webp",[14,10991,10992],{},[17,10993],{"alt":19,"src":10994},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image732.webp",[14,10996,10997],{},"返回值是void",[14,10999,11000],{},"第一个入口参数是clientgoalhandle",[14,11002,11003],{},"第二个入口参数是feedback",[14,11005,11006],{},[17,11007],{"alt":19,"src":11008},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image733.webp",[14,11010,11011],{},[17,11012],{"alt":19,"src":11013},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image734.webp",[14,11015,11016],{},[17,11017],{"alt":19,"src":11018},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image735.webp",[14,11020,11021],{},[17,11022],{"alt":19,"src":11023},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image736.webp",[14,11025,11026],{},[17,11027],{"alt":19,"src":11028},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image737.webp",[472,11030],{},[14,11032,11033],{},[17,11034],{"alt":19,"src":11035},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image738.webp",[14,11037,11038],{},"发送一个数值给服务端，服务端要先拿到目标值进行判断，判断该目标值是否可以被接收，或者被拒绝，再把处理结果响应给客户端。",[14,11040,11041],{},"如果说这个目标值可处理，那么goal_handle里是有内容的;",[14,11043,11044],{},"如果不可以被处理，那么goal_handle是一个nullptr空指针。",[14,11046,11047],{},[17,11048],{"alt":19,"src":11049},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image739.webp",[14,11051,11052],{},[17,11053],{"alt":19,"src":11054},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image740.webp",[14,11056,11057],{},[17,11058],{"alt":19,"src":11059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image741.webp",[14,11061,11062],{},[17,11063],{"alt":19,"src":11064},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image742.webp",[472,11066],{},[14,11068,11069],{},"接下来处理反馈数据：",[14,11071,11072],{},[17,11073],{"alt":19,"src":11074},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image743.webp",[14,11076,11077],{},"如果我们只是解析反馈的数据，那么goal_handle是用不上的。",[14,11079,11080],{},[17,11081],{"alt":19,"src":11082},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image744.webp",[14,11084,11085],{},[17,11086],{"alt":19,"src":11087},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image745.webp",[14,11089,11090],{},[17,11091],{"alt":19,"src":11092},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image746.webp",[14,11094,11095],{},"需要用俩%来转译%，如上图是打印百分比数据的案例。",[14,11097,11098],{},"假设progress_int是50，则会输出50%。",[14,11100,11101],{},"如果只想打印一个%，那就需要%%来转译。",[14,11103,11104],{},[17,11105],{"alt":19,"src":11106},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image747.webp",[14,11108,11109],{},[17,11110],{"alt":19,"src":11111},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image748.webp",[14,11113,11114],{},"回调函数是可能会数据丢失的。这是正常现象。",[472,11116],{},[14,11118,11119],{},"最终响应：",[14,11121,11122],{},"这个result最终结果的状态是不一定的，有可能任务被取消了，或被终止了，也有可能任务正常运行了。",[14,11124,11125],{},"所以我们要通过状态码来判断状态。",[14,11127,11128],{},[17,11129],{"alt":19,"src":11130},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image749.webp",[14,11132,11133],{},"第一个是被强行终止",[14,11135,11136],{},"第二个是取消",[14,11138,11139],{},"第三个是成功",[14,11141,11142],{},"第四个是未知",[14,11144,11145],{},[17,11146],{"alt":19,"src":11147},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image750.webp",[14,11149,11150],{},[17,11151],{"alt":19,"src":11152},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image751.webp",[14,11154,11155],{},[17,11156],{"alt":19,"src":11157},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image752.webp",[22,11159,11161],{"className":24,"code":11160,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.hpp\"\n#include \"rclcpp_action/rclcpp_action.hpp\"\n#include \"base_interfaces_demo/action/progress.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      /*\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      */\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      /*\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      */\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,11162,11163,11169,11175,11181,11185,11197,11211,11223,11235,11239,11255,11259,11263,11277,11281,11299,11303,11308,11313,11318,11323,11327,11356,11360,11364,11379,11383,11406,11410,11430,11436,11440,11444,11448,11453,11458,11463,11467,11484,11494,11498,11514,11541,11568,11594,11598,11614,11618,11622,11652,11656,11671,11675,11694,11698,11703,11707,11726,11730,11734,11738,11789,11793,11802,11814,11838,11863,11867,11871,11904,11908,11927,11931,11955,11959,11981,11985,12004,12008,12027,12031,12050,12054,12058,12062,12081,12085,12089,12093,12097,12111,12115,12119,12141,12145,12157,12161,12183,12191,12195,12205,12209,12230,12234,12252,12256,12267,12271,12281,12289],{"__ignoreMap":19},[31,11164,11165,11167],{"class":33,"line":34},[31,11166,38],{"class":37},[31,11168,42],{"class":41},[31,11170,11171,11173],{"class":33,"line":45},[31,11172,38],{"class":37},[31,11174,8454],{"class":41},[31,11176,11177,11179],{"class":33,"line":52},[31,11178,38],{"class":37},[31,11180,8461],{"class":41},[31,11182,11183],{"class":33,"line":78},[31,11184,49],{"emptyLinePlaceholder":48},[31,11186,11187,11189,11191,11193,11195],{"class":33,"line":84},[31,11188,1162],{"class":37},[31,11190,3396],{"class":58},[31,11192,72],{"class":62},[31,11194,8476],{"class":58},[31,11196,8479],{"class":62},[31,11198,11199,11201,11203,11205,11207,11209],{"class":33,"line":90},[31,11200,1162],{"class":37},[31,11202,1165],{"class":37},[31,11204,1168],{"class":58},[31,11206,72],{"class":62},[31,11208,1173],{"class":58},[31,11210,272],{"class":62},[31,11212,11213,11215,11217,11219,11221],{"class":33,"line":111},[31,11214,1162],{"class":37},[31,11216,1168],{"class":58},[31,11218,72],{"class":62},[31,11220,2126],{"class":58},[31,11222,8492],{"class":62},[31,11224,11225,11227,11229,11231,11233],{"class":33,"line":117},[31,11226,1162],{"class":37},[31,11228,1168],{"class":58},[31,11230,72],{"class":62},[31,11232,2126],{"class":58},[31,11234,8505],{"class":62},[31,11236,11237],{"class":33,"line":144},[31,11238,49],{"emptyLinePlaceholder":48},[31,11240,11241,11243,11245,11247,11249,11251,11253],{"class":33,"line":150},[31,11242,55],{"class":37},[31,11244,8129],{"class":58},[31,11246,63],{"class":62},[31,11248,66],{"class":37},[31,11250,69],{"class":58},[31,11252,72],{"class":62},[31,11254,75],{"class":58},[31,11256,11257],{"class":33,"line":156},[31,11258,81],{"class":62},[31,11260,11261],{"class":33,"line":161},[31,11262,87],{"class":37},[31,11264,11265,11267,11269,11271,11273,11275],{"class":33,"line":192},[31,11266,8152],{"class":58},[31,11268,96],{"class":62},[31,11270,99],{"class":58},[31,11272,102],{"class":62},[31,11274,7976],{"class":41},[31,11276,108],{"class":62},[31,11278,11279],{"class":33,"line":197},[31,11280,114],{"class":62},[31,11282,11283,11285,11287,11289,11291,11293,11295,11297],{"class":33,"line":211},[31,11284,120],{"class":58},[31,11286,102],{"class":62},[31,11288,126],{"class":125},[31,11290,129],{"class":62},[31,11292,132],{"class":58},[31,11294,135],{"class":62},[31,11296,8183],{"class":41},[31,11298,141],{"class":62},[31,11300,11301],{"class":33,"line":216},[31,11302,7279],{"class":4661},[31,11304,11305],{"class":33,"line":245},[31,11306,11307],{"class":4661},"      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n",[31,11309,11310],{"class":33,"line":250},[31,11311,11312],{"class":4661},"      NodeT>(NodeT node, const std::string &name,\n",[31,11314,11315],{"class":33,"line":263},[31,11316,11317],{"class":4661},"      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n",[31,11319,11320],{"class":33,"line":275},[31,11321,11322],{"class":4661},"      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n",[31,11324,11325],{"class":33,"line":417},[31,11326,7294],{"class":4661},[31,11328,11329,11331,11333,11335,11337,11340,11342,11344,11347,11349,11351,11354],{"class":33,"line":422},[31,11330,6390],{"class":62},[31,11332,1258],{"class":37},[31,11334,8626],{"class":58},[31,11336,72],{"class":62},[31,11338,11339],{"class":58},"create_client",[31,11341,236],{"class":62},[31,11343,8636],{"class":58},[31,11345,11346],{"class":62},">(",[31,11348,126],{"class":125},[31,11350,1288],{"class":62},[31,11352,11353],{"class":41},"\"get_sum_topic\"",[31,11355,141],{"class":62},[31,11357,11358],{"class":33,"line":428},[31,11359,147],{"class":62},[31,11361,11362],{"class":33,"line":434},[31,11363,49],{"emptyLinePlaceholder":48},[31,11365,11366,11368,11370,11372,11374,11377],{"class":33,"line":440},[31,11367,1353],{"class":37},[31,11369,9090],{"class":58},[31,11371,102],{"class":62},[31,11373,7258],{"class":37},[31,11375,11376],{"class":174}," num",[31,11378,108],{"class":62},[31,11380,11381],{"class":33,"line":446},[31,11382,114],{"class":62},[31,11384,11385,11387,11389,11392,11394,11396,11398,11400,11402,11404],{"class":33,"line":452},[31,11386,9720],{"class":37},[31,11388,6439],{"class":62},[31,11390,11391],{"class":58},"wait_for_action_server",[31,11393,102],{"class":62},[31,11395,1312],{"class":125},[31,11397,1315],{"class":37},[31,11399,6451],{"class":62},[31,11401,5732],{"class":37},[31,11403,6456],{"class":125},[31,11405,108],{"class":62},[31,11407,11408],{"class":33,"line":458},[31,11409,6463],{"class":62},[31,11411,11412,11415,11417,11419,11421,11423,11425,11428],{"class":33,"line":1540},[31,11413,11414],{"class":58},"        RCLCPP_ERROR",[31,11416,102],{"class":62},[31,11418,126],{"class":125},[31,11420,129],{"class":62},[31,11422,132],{"class":58},[31,11424,135],{"class":62},[31,11426,11427],{"class":41},"\"服务连接失败!\"",[31,11429,141],{"class":62},[31,11431,11432,11434],{"class":33,"line":1545},[31,11433,9758],{"class":37},[31,11435,272],{"class":62},[31,11437,11438],{"class":33,"line":1556},[31,11439,6562],{"class":62},[31,11441,11442],{"class":33,"line":1561},[31,11443,49],{"emptyLinePlaceholder":48},[31,11445,11446],{"class":33,"line":1584},[31,11447,7279],{"class":4661},[31,11449,11450],{"class":33,"line":1589},[31,11451,11452],{"class":4661},"      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n",[31,11454,11455],{"class":33,"line":1600},[31,11456,11457],{"class":4661},"      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n",[31,11459,11460],{"class":33,"line":1609},[31,11461,11462],{"class":4661},"      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n",[31,11464,11465],{"class":33,"line":3623},[31,11466,7294],{"class":4661},[31,11468,11469,11471,11474,11476,11478,11480,11482],{"class":33,"line":3634},[31,11470,1368],{"class":37},[31,11472,11473],{"class":62}," goal ",[31,11475,1258],{"class":37},[31,11477,8777],{"class":58},[31,11479,72],{"class":62},[31,11481,8782],{"class":58},[31,11483,260],{"class":62},[31,11485,11486,11489,11491],{"class":33,"line":3643},[31,11487,11488],{"class":62},"      goal.num ",[31,11490,1258],{"class":37},[31,11492,11493],{"class":62}," num;\n",[31,11495,11496],{"class":33,"line":6674},[31,11497,49],{"emptyLinePlaceholder":48},[31,11499,11500,11503,11505,11507,11509,11511],{"class":33,"line":6683},[31,11501,11502],{"class":58},"      rclcpp_action",[31,11504,72],{"class":62},[31,11506,6592],{"class":58},[31,11508,236],{"class":62},[31,11510,8636],{"class":58},[31,11512,11513],{"class":62},">::SendGoalOptions options;\n",[31,11515,11516,11519,11521,11523,11525,11527,11529,11531,11533,11536,11538],{"class":33,"line":6688},[31,11517,11518],{"class":62},"      options.goal_response_callback ",[31,11520,1258],{"class":37},[31,11522,1168],{"class":58},[31,11524,72],{"class":62},[31,11526,1324],{"class":58},[31,11528,102],{"class":62},[31,11530,1329],{"class":37},[31,11532,8258],{"class":58},[31,11534,11535],{"class":62},"::goal_response_callback,",[31,11537,126],{"class":125},[31,11539,11540],{"class":62},",_1);\n",[31,11542,11543,11546,11548,11550,11552,11554,11556,11558,11560,11563,11565],{"class":33,"line":6699},[31,11544,11545],{"class":62},"      options.feedback_callback ",[31,11547,1258],{"class":37},[31,11549,1168],{"class":58},[31,11551,72],{"class":62},[31,11553,1324],{"class":58},[31,11555,102],{"class":62},[31,11557,1329],{"class":37},[31,11559,8258],{"class":58},[31,11561,11562],{"class":62},"::feedback_callback,",[31,11564,126],{"class":125},[31,11566,11567],{"class":62},",_1,_2);\n",[31,11569,11570,11573,11575,11577,11579,11581,11583,11585,11587,11590,11592],{"class":33,"line":6704},[31,11571,11572],{"class":62},"      options.result_callback ",[31,11574,1258],{"class":37},[31,11576,1168],{"class":58},[31,11578,72],{"class":62},[31,11580,1324],{"class":58},[31,11582,102],{"class":62},[31,11584,1329],{"class":37},[31,11586,8258],{"class":58},[31,11588,11589],{"class":62},"::result_callback,",[31,11591,126],{"class":125},[31,11593,11540],{"class":62},[31,11595,11596],{"class":33,"line":6725},[31,11597,49],{"emptyLinePlaceholder":48},[31,11599,11600,11602,11604,11606,11608,11611],{"class":33,"line":6730},[31,11601,1368],{"class":37},[31,11603,7582],{"class":62},[31,11605,1258],{"class":37},[31,11607,7344],{"class":62},[31,11609,11610],{"class":58},"async_send_goal",[31,11612,11613],{"class":62},"(goal,options);\n",[31,11615,11616],{"class":33,"line":6749},[31,11617,147],{"class":62},[31,11619,11620],{"class":33,"line":6754},[31,11621,49],{"emptyLinePlaceholder":48},[31,11623,11624,11627,11630,11632,11634,11636,11639,11641,11643,11645,11647,11650],{"class":33,"line":6768},[31,11625,11626],{"class":37},"  void",[31,11628,11629],{"class":58}," goal_response_callback",[31,11631,102],{"class":62},[31,11633,8844],{"class":58},[31,11635,72],{"class":62},[31,11637,11638],{"class":58},"ClientGoalHandle",[31,11640,236],{"class":62},[31,11642,8636],{"class":58},[31,11644,7247],{"class":62},[31,11646,5032],{"class":58},[31,11648,11649],{"class":174}," goal_handle",[31,11651,108],{"class":62},[31,11653,11654],{"class":33,"line":6773},[31,11655,5742],{"class":62},[31,11657,11658,11661,11664,11666,11669],{"class":33,"line":6797},[31,11659,11660],{"class":37},"    if",[31,11662,11663],{"class":62},"(goal_handle ",[31,11665,7636],{"class":37},[31,11667,11668],{"class":125}," nullptr",[31,11670,108],{"class":62},[31,11672,11673],{"class":33,"line":6806},[31,11674,114],{"class":62},[31,11676,11677,11679,11681,11683,11685,11687,11689,11692],{"class":33,"line":6811},[31,11678,120],{"class":58},[31,11680,102],{"class":62},[31,11682,126],{"class":125},[31,11684,129],{"class":62},[31,11686,132],{"class":58},[31,11688,135],{"class":62},[31,11690,11691],{"class":41},"\"目标请求被服务端拒绝!\"",[31,11693,141],{"class":62},[31,11695,11696],{"class":33,"line":6816},[31,11697,147],{"class":62},[31,11699,11700],{"class":33,"line":6827},[31,11701,11702],{"class":37},"    else\n",[31,11704,11705],{"class":33,"line":6836},[31,11706,114],{"class":62},[31,11708,11709,11711,11713,11715,11717,11719,11721,11724],{"class":33,"line":7497},[31,11710,120],{"class":58},[31,11712,102],{"class":62},[31,11714,126],{"class":125},[31,11716,129],{"class":62},[31,11718,132],{"class":58},[31,11720,135],{"class":62},[31,11722,11723],{"class":41},"\"目标处理中!\"",[31,11725,141],{"class":62},[31,11727,11728],{"class":33,"line":7502},[31,11729,147],{"class":62},[31,11731,11732],{"class":33,"line":7517},[31,11733,455],{"class":62},[31,11735,11736],{"class":33,"line":7522},[31,11737,49],{"emptyLinePlaceholder":48},[31,11739,11740,11742,11745,11747,11749,11751,11753,11755,11757,11759,11761,11763,11765,11767,11769,11771,11773,11775,11777,11779,11782,11784,11787],{"class":33,"line":7535},[31,11741,11626],{"class":37},[31,11743,11744],{"class":58}," feedback_callback",[31,11746,102],{"class":62},[31,11748,8844],{"class":58},[31,11750,72],{"class":62},[31,11752,11638],{"class":58},[31,11754,236],{"class":62},[31,11756,8636],{"class":58},[31,11758,7247],{"class":62},[31,11760,5032],{"class":58},[31,11762,11649],{"class":174},[31,11764,1288],{"class":62},[31,11766,228],{"class":58},[31,11768,72],{"class":62},[31,11770,8770],{"class":58},[31,11772,236],{"class":62},[31,11774,2154],{"class":37},[31,11776,8777],{"class":58},[31,11778,72],{"class":62},[31,11780,11781],{"class":58},"Feedback",[31,11783,9695],{"class":62},[31,11785,11786],{"class":174},"feedback",[31,11788,108],{"class":62},[31,11790,11791],{"class":33,"line":7540},[31,11792,5742],{"class":62},[31,11794,11795,11798,11800],{"class":33,"line":7563},[31,11796,11797],{"class":62},"    (",[31,11799,9712],{"class":37},[31,11801,9863],{"class":62},[31,11803,11804,11807,11809,11811],{"class":33,"line":7572},[31,11805,11806],{"class":37},"    double",[31,11808,10099],{"class":62},[31,11810,1258],{"class":37},[31,11812,11813],{"class":62}," feedback->progress;\n",[31,11815,11816,11819,11822,11824,11826,11828,11831,11833,11836],{"class":33,"line":7577},[31,11817,11818],{"class":37},"    int",[31,11820,11821],{"class":62}," progress_int ",[31,11823,1258],{"class":37},[31,11825,5074],{"class":62},[31,11827,164],{"class":37},[31,11829,11830],{"class":62},") (progress ",[31,11832,5077],{"class":37},[31,11834,11835],{"class":125}," 100",[31,11837,141],{"class":62},[31,11839,11840,11842,11844,11846,11848,11850,11852,11855,11858,11860],{"class":33,"line":7614},[31,11841,5747],{"class":58},[31,11843,102],{"class":62},[31,11845,126],{"class":125},[31,11847,129],{"class":62},[31,11849,132],{"class":58},[31,11851,135],{"class":62},[31,11853,11854],{"class":41},"\"当前进度为:",[31,11856,11857],{"class":125},"%d%%",[31,11859,1438],{"class":41},[31,11861,11862],{"class":62},",progress_int);\n",[31,11864,11865],{"class":33,"line":7619},[31,11866,455],{"class":62},[31,11868,11869],{"class":33,"line":7649},[31,11870,49],{"emptyLinePlaceholder":48},[31,11872,11873,11875,11878,11880,11882,11884,11886,11888,11890,11892,11894,11897,11899,11902],{"class":33,"line":7654},[31,11874,11626],{"class":37},[31,11876,11877],{"class":58}," result_callback",[31,11879,102],{"class":62},[31,11881,2154],{"class":37},[31,11883,8626],{"class":58},[31,11885,72],{"class":62},[31,11887,11638],{"class":58},[31,11889,236],{"class":62},[31,11891,8636],{"class":58},[31,11893,7247],{"class":62},[31,11895,11896],{"class":58},"WrappedResult",[31,11898,2167],{"class":37},[31,11900,11901],{"class":174}," result",[31,11903,108],{"class":62},[31,11905,11906],{"class":33,"line":7682},[31,11907,5742],{"class":62},[31,11909,11910,11912,11915,11917,11919,11921,11924],{"class":33,"line":7687},[31,11911,11660],{"class":37},[31,11913,11914],{"class":62}," (result.code ",[31,11916,7636],{"class":37},[31,11918,8626],{"class":58},[31,11920,72],{"class":62},[31,11922,11923],{"class":58},"ResultCode",[31,11925,11926],{"class":62},"::SUCCEEDED)\n",[31,11928,11929],{"class":33,"line":7693},[31,11930,114],{"class":62},[31,11932,11933,11935,11937,11939,11941,11943,11945,11948,11950,11952],{"class":33,"line":7698},[31,11934,120],{"class":58},[31,11936,102],{"class":62},[31,11938,126],{"class":125},[31,11940,129],{"class":62},[31,11942,132],{"class":58},[31,11944,135],{"class":62},[31,11946,11947],{"class":41},"\"最终结果为:",[31,11949,3487],{"class":125},[31,11951,1438],{"class":41},[31,11953,11954],{"class":62},",result.result->sum);\n",[31,11956,11957],{"class":33,"line":7714},[31,11958,147],{"class":62},[31,11960,11961,11964,11967,11970,11972,11974,11976,11978],{"class":33,"line":7719},[31,11962,11963],{"class":37},"    else",[31,11965,11966],{"class":37}," if",[31,11968,11969],{"class":62},"(result.code ",[31,11971,7636],{"class":37},[31,11973,8626],{"class":58},[31,11975,72],{"class":62},[31,11977,11923],{"class":58},[31,11979,11980],{"class":62},"::ABORTED)\n",[31,11982,11983],{"class":33,"line":7724},[31,11984,114],{"class":62},[31,11986,11987,11989,11991,11993,11995,11997,11999,12002],{"class":33,"line":7735},[31,11988,120],{"class":58},[31,11990,102],{"class":62},[31,11992,126],{"class":125},[31,11994,129],{"class":62},[31,11996,132],{"class":58},[31,11998,135],{"class":62},[31,12000,12001],{"class":41},"\"过程被中断!\"",[31,12003,141],{"class":62},[31,12005,12006],{"class":33,"line":7744},[31,12007,147],{"class":62},[31,12009,12010,12012,12014,12016,12018,12020,12022,12024],{"class":33,"line":10232},[31,12011,11963],{"class":37},[31,12013,11966],{"class":37},[31,12015,11969],{"class":62},[31,12017,7636],{"class":37},[31,12019,8626],{"class":58},[31,12021,72],{"class":62},[31,12023,11923],{"class":58},[31,12025,12026],{"class":62},"::CANCELED)\n",[31,12028,12029],{"class":33,"line":10239},[31,12030,114],{"class":62},[31,12032,12033,12035,12037,12039,12041,12043,12045,12048],{"class":33,"line":10244},[31,12034,120],{"class":58},[31,12036,102],{"class":62},[31,12038,126],{"class":125},[31,12040,129],{"class":62},[31,12042,132],{"class":58},[31,12044,135],{"class":62},[31,12046,12047],{"class":41},"\"任务被取消!\"",[31,12049,141],{"class":62},[31,12051,12052],{"class":33,"line":10249},[31,12053,147],{"class":62},[31,12055,12056],{"class":33,"line":10260},[31,12057,11702],{"class":37},[31,12059,12060],{"class":33,"line":10265},[31,12061,114],{"class":62},[31,12063,12064,12066,12068,12070,12072,12074,12076,12079],{"class":33,"line":10270},[31,12065,120],{"class":58},[31,12067,102],{"class":62},[31,12069,126],{"class":125},[31,12071,129],{"class":62},[31,12073,132],{"class":58},[31,12075,135],{"class":62},[31,12077,12078],{"class":41},"\"未知异常!\"",[31,12080,141],{"class":62},[31,12082,12083],{"class":33,"line":10276},[31,12084,147],{"class":62},[31,12086,12087],{"class":33,"line":10282},[31,12088,455],{"class":62},[31,12090,12091],{"class":33,"line":10287},[31,12092,49],{"emptyLinePlaceholder":48},[31,12094,12095],{"class":33,"line":10308},[31,12096,1348],{"class":37},[31,12098,12099,12101,12103,12105,12107,12109],{"class":33,"line":10313},[31,12100,8740],{"class":58},[31,12102,72],{"class":62},[31,12104,6592],{"class":58},[31,12106,236],{"class":62},[31,12108,8636],{"class":58},[31,12110,6599],{"class":62},[31,12112,12113],{"class":33,"line":10323},[31,12114,153],{"class":62},[31,12116,12117],{"class":33,"line":10333},[31,12118,49],{"emptyLinePlaceholder":48},[31,12120,12121,12123,12125,12127,12129,12131,12133,12135,12137,12139],{"class":33,"line":10358},[31,12122,164],{"class":37},[31,12124,167],{"class":58},[31,12126,102],{"class":62},[31,12128,164],{"class":37},[31,12130,175],{"class":174},[31,12132,178],{"class":62},[31,12134,181],{"class":37},[31,12136,184],{"class":37},[31,12138,187],{"class":174},[31,12140,108],{"class":62},[31,12142,12143],{"class":33,"line":10363},[31,12144,81],{"class":62},[31,12146,12147,12149,12151,12153,12155],{"class":33,"line":10368},[31,12148,5726],{"class":37},[31,12150,5729],{"class":62},[31,12152,5732],{"class":37},[31,12154,10729],{"class":125},[31,12156,108],{"class":62},[31,12158,12159],{"class":33,"line":10373},[31,12160,5742],{"class":62},[31,12162,12163,12165,12167,12169,12171,12173,12175,12177,12179,12181],{"class":33,"line":10378},[31,12164,6010],{"class":58},[31,12166,102],{"class":62},[31,12168,3919],{"class":58},[31,12170,72],{"class":62},[31,12172,132],{"class":58},[31,12174,102],{"class":62},[31,12176,10752],{"class":41},[31,12178,3255],{"class":62},[31,12180,10757],{"class":41},[31,12182,141],{"class":62},[31,12184,12185,12187,12189],{"class":33,"line":10411},[31,12186,1880],{"class":37},[31,12188,5774],{"class":125},[31,12190,272],{"class":62},[31,12192,12193],{"class":33,"line":10416},[31,12194,455],{"class":62},[31,12196,12197,12199,12201,12203],{"class":33,"line":10454},[31,12198,200],{"class":58},[31,12200,72],{"class":62},[31,12202,205],{"class":58},[31,12204,208],{"class":62},[31,12206,12207],{"class":33,"line":10459},[31,12208,49],{"emptyLinePlaceholder":48},[31,12210,12211,12213,12216,12218,12220,12222,12224,12226,12228],{"class":33,"line":10464},[31,12212,4667],{"class":37},[31,12214,12215],{"class":62}," node ",[31,12217,1258],{"class":37},[31,12219,1168],{"class":58},[31,12221,72],{"class":62},[31,12223,233],{"class":58},[31,12225,236],{"class":62},[31,12227,8258],{"class":58},[31,12229,4686],{"class":62},[31,12231,12232],{"class":33,"line":10469},[31,12233,49],{"emptyLinePlaceholder":48},[31,12235,12236,12239,12242,12244,12246,12248,12250],{"class":33,"line":10484},[31,12237,12238],{"class":62},"  node->",[31,12240,12241],{"class":58},"send_goal",[31,12243,102],{"class":62},[31,12245,7594],{"class":58},[31,12247,7597],{"class":62},[31,12249,1312],{"class":125},[31,12251,7611],{"class":62},[31,12253,12254],{"class":33,"line":10489},[31,12255,49],{"emptyLinePlaceholder":48},[31,12257,12258,12260,12262,12264],{"class":33,"line":10494},[31,12259,200],{"class":58},[31,12261,72],{"class":62},[31,12263,223],{"class":58},[31,12265,12266],{"class":62},"(node);\n",[31,12268,12269],{"class":33,"line":10517},[31,12270,49],{"emptyLinePlaceholder":48},[31,12272,12273,12275,12277,12279],{"class":33,"line":10522},[31,12274,200],{"class":58},[31,12276,72],{"class":62},[31,12278,257],{"class":58},[31,12280,260],{"class":62},[31,12282,12283,12285,12287],{"class":33,"line":10533},[31,12284,266],{"class":37},[31,12286,269],{"class":125},[31,12288,272],{"class":62},[31,12290,12291],{"class":33,"line":10538},[31,12292,278],{"class":62},[14,12294,12295],{},[17,12296],{"alt":19,"src":12297},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image753.webp",[14,12299,12300],{},[17,12301],{"alt":19,"src":12302},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image754.webp",[14,12304,12305],{},"此时我们取消客户端，反而服务端还在运行，这里的ctrl+c只是结束了我们的客户端，而不是指挥我们的客户端去下发取消请求指令，我们只有去捕获一下我们的键盘才能完成取消请求指令的发送。",[472,12307],{},[14,12309,12310],{},"修复bug:",[14,12312,12313],{},"还没修复好",[22,12315,12317],{"className":24,"code":12316,"language":26,"meta":19,"style":19},"// 发送取消请求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,12318,12319,12324,12344,12375,12379,12400,12404,12409,12413,12433],{"__ignoreMap":19},[31,12320,12321],{"class":33,"line":34},[31,12322,12323],{"class":4661},"// 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\n",[31,12325,12326,12328,12330,12332,12334,12336,12338,12341],{"class":33,"line":45},[31,12327,3919],{"class":58},[31,12329,72],{"class":62},[31,12331,7630],{"class":58},[31,12333,102],{"class":62},[31,12335,126],{"class":125},[31,12337,129],{"class":62},[31,12339,12340],{"class":58},"get_node_base_interface",[31,12342,12343],{"class":62},"(), future_cancel);\n",[31,12345,12346,12349,12352,12355,12357,12359,12361,12363,12365,12367,12369,12372],{"class":33,"line":52},[31,12347,12348],{"class":37},"if",[31,12350,12351],{"class":62}," (future_cancel.",[31,12353,12354],{"class":58},"wait_for",[31,12356,102],{"class":62},[31,12358,1312],{"class":125},[31,12360,1315],{"class":37},[31,12362,6451],{"class":62},[31,12364,7636],{"class":37},[31,12366,1168],{"class":58},[31,12368,72],{"class":62},[31,12370,12371],{"class":58},"future_status",[31,12373,12374],{"class":62},"::ready)\n",[31,12376,12377],{"class":33,"line":78},[31,12378,81],{"class":62},[31,12380,12381,12384,12386,12388,12390,12392,12395,12398],{"class":33,"line":84},[31,12382,12383],{"class":58},"  RCLCPP_INFO",[31,12385,102],{"class":62},[31,12387,126],{"class":125},[31,12389,129],{"class":62},[31,12391,132],{"class":58},[31,12393,12394],{"class":62},"(), ",[31,12396,12397],{"class":41},"\"终止请求已发送!\"",[31,12399,141],{"class":62},[31,12401,12402],{"class":33,"line":90},[31,12403,278],{"class":62},[31,12405,12406],{"class":33,"line":111},[31,12407,12408],{"class":37},"else\n",[31,12410,12411],{"class":33,"line":117},[31,12412,81],{"class":62},[31,12414,12415,12418,12420,12422,12424,12426,12428,12431],{"class":33,"line":144},[31,12416,12417],{"class":58},"  RCLCPP_ERROR",[31,12419,102],{"class":62},[31,12421,126],{"class":125},[31,12423,129],{"class":62},[31,12425,132],{"class":58},[31,12427,12394],{"class":62},[31,12429,12430],{"class":41},"\"无法发送终止请求...\"",[31,12432,141],{"class":62},[31,12434,12435],{"class":33,"line":150},[31,12436,278],{"class":62},[10,12438,12440],{"id":12439},"参数服务_理论与api介绍c","参数服务_理论与API介绍(C++)",[14,12442,12443],{},[17,12444],{"alt":19,"src":12445},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image755.webp",[14,12447,12448],{},[17,12449],{"alt":19,"src":12450},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image756.webp",[14,12452,12453],{},"当然还有特殊情况，比如把参数设置为私有的。",[472,12455],{},[14,12457,12458],{},[17,12459],{"alt":19,"src":12460},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image757.webp",[14,12462,12463],{},[17,12464],{"alt":19,"src":12465},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image758.webp",[14,12467,12468],{},"其他通信需要自己弄接口文件，但是参数服务不用自己弄接口文件，ROS2已经封装好了API，所以我们只需要调用API即可。",[14,12470,12471],{},[17,12472],{"alt":19,"src":12473},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image759.webp",[14,12475,12476],{},[17,12477],{"alt":19,"src":12478},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image760.webp",[14,12480,12481],{},[17,12482],{"alt":19,"src":12483},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image761.webp",[14,12485,12486],{},"只是想展示一下API，所以先创建参数功能包展示下API，先不创建客户端和服务端。",[14,12488,12489],{},[17,12490],{"alt":19,"src":12491},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image762.webp",[14,12493,12494],{},[17,12495],{"alt":19,"src":12496},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image763.webp",[14,12498,12499],{},[17,12500],{"alt":19,"src":12501},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image764.webp",[14,12503,12504],{},"rclcpp::parameter 对象(键,值);",[14,12506,12507],{},[17,12508],{"alt":19,"src":12509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image765.webp",[14,12511,12512],{},[17,12513],{"alt":19,"src":12514},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image766.webp",[14,12516,12517],{},[17,12518],{"alt":19,"src":12519},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image767.webp",[14,12521,12522],{},[17,12523],{"alt":19,"src":12524},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image768.webp",[14,12526,12527],{},[17,12528],{"alt":19,"src":12529},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image769.webp",[14,12531,12532],{},[17,12533],{"alt":19,"src":12534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image770.webp",[14,12536,12537],{},[17,12538],{"alt":19,"src":12539},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image771.webp",[14,12541,12542],{},"该函数是给parameter的值赋值的，有18个重载，各种类型。",[14,12544,12545],{},"其中空是说不给赋值，这样只有键，没有值。",[10,12547,12549],{"id":12548},"参数服务_实验1_服务端c","参数服务_实验1_服务端(C++)",[14,12551,12552],{},[17,12553],{"alt":19,"src":12554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image772.webp",[14,12556,12557],{},[17,12558],{"alt":19,"src":12559},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image773.webp",[14,12561,12562],{},"这里有差异，在Node里传入了第二个参数，这句是专门用来允许删除参数的。undeclared解除声明。",[14,12564,12565],{},[17,12566],{"alt":19,"src":12567},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image774.webp",[14,12569,12570],{},[17,12571],{"alt":19,"src":12572},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image775.webp",[14,12574,12575],{},[17,12576],{"alt":19,"src":12577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image776.webp",[14,12579,12580],{},[17,12581],{"alt":19,"src":12582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image777.webp",[14,12584,12585],{},[17,12586],{"alt":19,"src":12587},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image778.webp",[14,12589,12590],{},"只有查询和修改的接口API，并没有新增和删除的API，这是ROS2根据安全考虑的。",[14,12592,12593],{},[17,12594],{"alt":19,"src":12595},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image779.webp",[14,12597,12598],{},[17,12599],{"alt":19,"src":12600},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image780.webp",[14,12602,12603],{},[17,12604],{"alt":19,"src":12605},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image781.webp",[14,12607,12608],{},[17,12609],{"alt":19,"src":12610},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image782.webp",[22,12612,12614],{"className":24,"code":12613,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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/rclcpp.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,12615,12616,12622,12626,12643,12647,12651,12667,12671,12690,12694,12698,12702,12724,12728,12738,12742,12763,12767,12777,12781,12791,12799,12803,12809,12813,12830,12834,12838,12854,12858,12877,12881,12885,12889,12911,12915,12925,12929,12950,12954,12964,12968,12978,12986],{"__ignoreMap":19},[31,12617,12618,12620],{"class":33,"line":34},[31,12619,38],{"class":37},[31,12621,42],{"class":41},[31,12623,12624],{"class":33,"line":45},[31,12625,49],{"emptyLinePlaceholder":48},[31,12627,12628,12630,12633,12635,12637,12639,12641],{"class":33,"line":52},[31,12629,55],{"class":37},[31,12631,12632],{"class":58}," ParamServer",[31,12634,63],{"class":62},[31,12636,66],{"class":37},[31,12638,69],{"class":58},[31,12640,72],{"class":62},[31,12642,75],{"class":58},[31,12644,12645],{"class":33,"line":78},[31,12646,81],{"class":62},[31,12648,12649],{"class":33,"line":84},[31,12650,87],{"class":37},[31,12652,12653,12656,12658,12660,12662,12665],{"class":33,"line":90},[31,12654,12655],{"class":58},"    ParamServer",[31,12657,96],{"class":62},[31,12659,99],{"class":58},[31,12661,102],{"class":62},[31,12663,12664],{"class":41},"\"param_server_node_cpp\"",[31,12666,108],{"class":62},[31,12668,12669],{"class":33,"line":111},[31,12670,114],{"class":62},[31,12672,12673,12675,12677,12679,12681,12683,12685,12688],{"class":33,"line":117},[31,12674,120],{"class":58},[31,12676,102],{"class":62},[31,12678,126],{"class":125},[31,12680,129],{"class":62},[31,12682,132],{"class":58},[31,12684,135],{"class":62},[31,12686,12687],{"class":41},"\"参数服务端搭建!\"",[31,12689,141],{"class":62},[31,12691,12692],{"class":33,"line":144},[31,12693,147],{"class":62},[31,12695,12696],{"class":33,"line":150},[31,12697,153],{"class":62},[31,12699,12700],{"class":33,"line":156},[31,12701,49],{"emptyLinePlaceholder":48},[31,12703,12704,12706,12708,12710,12712,12714,12716,12718,12720,12722],{"class":33,"line":161},[31,12705,164],{"class":37},[31,12707,167],{"class":58},[31,12709,102],{"class":62},[31,12711,164],{"class":37},[31,12713,175],{"class":174},[31,12715,178],{"class":62},[31,12717,181],{"class":37},[31,12719,184],{"class":37},[31,12721,187],{"class":174},[31,12723,108],{"class":62},[31,12725,12726],{"class":33,"line":192},[31,12727,81],{"class":62},[31,12729,12730,12732,12734,12736],{"class":33,"line":197},[31,12731,200],{"class":58},[31,12733,72],{"class":62},[31,12735,205],{"class":58},[31,12737,208],{"class":62},[31,12739,12740],{"class":33,"line":211},[31,12741,49],{"emptyLinePlaceholder":48},[31,12743,12744,12746,12748,12750,12752,12754,12756,12758,12761],{"class":33,"line":216},[31,12745,4667],{"class":37},[31,12747,12215],{"class":62},[31,12749,1258],{"class":37},[31,12751,1168],{"class":58},[31,12753,72],{"class":62},[31,12755,233],{"class":58},[31,12757,236],{"class":62},[31,12759,12760],{"class":58},"ParamServer",[31,12762,4686],{"class":62},[31,12764,12765],{"class":33,"line":245},[31,12766,49],{"emptyLinePlaceholder":48},[31,12768,12769,12771,12773,12775],{"class":33,"line":250},[31,12770,200],{"class":58},[31,12772,72],{"class":62},[31,12774,223],{"class":58},[31,12776,12266],{"class":62},[31,12778,12779],{"class":33,"line":263},[31,12780,49],{"emptyLinePlaceholder":48},[31,12782,12783,12785,12787,12789],{"class":33,"line":275},[31,12784,200],{"class":58},[31,12786,72],{"class":62},[31,12788,257],{"class":58},[31,12790,260],{"class":62},[31,12792,12793,12795,12797],{"class":33,"line":417},[31,12794,266],{"class":37},[31,12796,269],{"class":125},[31,12798,272],{"class":62},[31,12800,12801],{"class":33,"line":422},[31,12802,278],{"class":62},[31,12804,12805,12807],{"class":33,"line":428},[31,12806,38],{"class":37},[31,12808,42],{"class":41},[31,12810,12811],{"class":33,"line":434},[31,12812,49],{"emptyLinePlaceholder":48},[31,12814,12815,12817,12820,12822,12824,12826,12828],{"class":33,"line":440},[31,12816,55],{"class":37},[31,12818,12819],{"class":58}," ParamClient",[31,12821,63],{"class":62},[31,12823,66],{"class":37},[31,12825,69],{"class":58},[31,12827,72],{"class":62},[31,12829,75],{"class":58},[31,12831,12832],{"class":33,"line":446},[31,12833,81],{"class":62},[31,12835,12836],{"class":33,"line":452},[31,12837,87],{"class":37},[31,12839,12840,12843,12845,12847,12849,12852],{"class":33,"line":458},[31,12841,12842],{"class":58},"    ParamClient",[31,12844,96],{"class":62},[31,12846,99],{"class":58},[31,12848,102],{"class":62},[31,12850,12851],{"class":41},"\"param_client_node_cpp\"",[31,12853,108],{"class":62},[31,12855,12856],{"class":33,"line":1540},[31,12857,114],{"class":62},[31,12859,12860,12862,12864,12866,12868,12870,12872,12875],{"class":33,"line":1545},[31,12861,120],{"class":58},[31,12863,102],{"class":62},[31,12865,126],{"class":125},[31,12867,129],{"class":62},[31,12869,132],{"class":58},[31,12871,135],{"class":62},[31,12873,12874],{"class":41},"\"参数客户端搭建!\"",[31,12876,141],{"class":62},[31,12878,12879],{"class":33,"line":1556},[31,12880,147],{"class":62},[31,12882,12883],{"class":33,"line":1561},[31,12884,153],{"class":62},[31,12886,12887],{"class":33,"line":1584},[31,12888,49],{"emptyLinePlaceholder":48},[31,12890,12891,12893,12895,12897,12899,12901,12903,12905,12907,12909],{"class":33,"line":1589},[31,12892,164],{"class":37},[31,12894,167],{"class":58},[31,12896,102],{"class":62},[31,12898,164],{"class":37},[31,12900,175],{"class":174},[31,12902,178],{"class":62},[31,12904,181],{"class":37},[31,12906,184],{"class":37},[31,12908,187],{"class":174},[31,12910,108],{"class":62},[31,12912,12913],{"class":33,"line":1600},[31,12914,81],{"class":62},[31,12916,12917,12919,12921,12923],{"class":33,"line":1609},[31,12918,200],{"class":58},[31,12920,72],{"class":62},[31,12922,205],{"class":58},[31,12924,208],{"class":62},[31,12926,12927],{"class":33,"line":3623},[31,12928,49],{"emptyLinePlaceholder":48},[31,12930,12931,12933,12935,12937,12939,12941,12943,12945,12948],{"class":33,"line":3634},[31,12932,4667],{"class":37},[31,12934,12215],{"class":62},[31,12936,1258],{"class":37},[31,12938,1168],{"class":58},[31,12940,72],{"class":62},[31,12942,233],{"class":58},[31,12944,236],{"class":62},[31,12946,12947],{"class":58},"ParamClient",[31,12949,4686],{"class":62},[31,12951,12952],{"class":33,"line":3643},[31,12953,49],{"emptyLinePlaceholder":48},[31,12955,12956,12958,12960,12962],{"class":33,"line":6674},[31,12957,200],{"class":58},[31,12959,72],{"class":62},[31,12961,223],{"class":58},[31,12963,12266],{"class":62},[31,12965,12966],{"class":33,"line":6683},[31,12967,49],{"emptyLinePlaceholder":48},[31,12969,12970,12972,12974,12976],{"class":33,"line":6688},[31,12971,200],{"class":58},[31,12973,72],{"class":62},[31,12975,257],{"class":58},[31,12977,260],{"class":62},[31,12979,12980,12982,12984],{"class":33,"line":6699},[31,12981,266],{"class":37},[31,12983,269],{"class":125},[31,12985,272],{"class":62},[31,12987,12988],{"class":33,"line":6704},[31,12989,278],{"class":62},[14,12991,12992],{},[17,12993],{"alt":19,"src":12994},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image783.webp",[14,12996,12997],{},[17,12998],{"alt":19,"src":12999},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image784.webp",[14,13001,13002],{},[17,13003],{"alt":19,"src":13004},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image785.webp",[14,13006,13007],{},[17,13008],{"alt":19,"src":13009},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image786.webp",[472,13011],{},[14,13013,13014],{},[17,13015],{"alt":19,"src":13016},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image787.webp",[14,13018,13019],{},[17,13020],{"alt":19,"src":13021},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image788.webp",[14,13023,13024],{},[17,13025],{"alt":19,"src":13026},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image789.webp",[14,13028,13029],{},"链式编程。",[14,13031,13032],{},"一个普通的节点就可以当参数服务端，不需要另行创建参数服务端。",[14,13034,13035],{},[17,13036],{"alt":19,"src":13037},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image790.webp",[14,13039,13040],{},[17,13041],{"alt":19,"src":13042},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image791.webp",[22,13044,13046],{"className":24,"code":13045,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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,13047,13048,13054,13058,13074,13078,13082,13117,13121,13139,13143,13147,13156,13160,13179,13183,13187,13196,13200,13219,13223,13227,13236,13240,13259,13263,13267,13276,13280,13299,13303,13307,13311,13315,13337,13341,13351,13355,13375,13379,13388,13397,13406,13415,13419,13429,13433,13443,13451],{"__ignoreMap":19},[31,13049,13050,13052],{"class":33,"line":34},[31,13051,38],{"class":37},[31,13053,42],{"class":41},[31,13055,13056],{"class":33,"line":45},[31,13057,49],{"emptyLinePlaceholder":48},[31,13059,13060,13062,13064,13066,13068,13070,13072],{"class":33,"line":52},[31,13061,55],{"class":37},[31,13063,12632],{"class":58},[31,13065,63],{"class":62},[31,13067,66],{"class":37},[31,13069,69],{"class":58},[31,13071,72],{"class":62},[31,13073,75],{"class":58},[31,13075,13076],{"class":33,"line":78},[31,13077,81],{"class":62},[31,13079,13080],{"class":33,"line":84},[31,13081,87],{"class":37},[31,13083,13084,13086,13088,13090,13092,13094,13096,13098,13100,13103,13106,13109,13111,13114],{"class":33,"line":90},[31,13085,12655],{"class":58},[31,13087,96],{"class":62},[31,13089,99],{"class":58},[31,13091,102],{"class":62},[31,13093,12664],{"class":41},[31,13095,1288],{"class":62},[31,13097,3919],{"class":58},[31,13099,72],{"class":62},[31,13101,13102],{"class":58},"NodeOptions",[31,13104,13105],{"class":62},"().",[31,13107,13108],{"class":58},"allow_undeclared_parameters",[31,13110,102],{"class":62},[31,13112,13113],{"class":125},"true",[31,13115,13116],{"class":62},"))\n",[31,13118,13119],{"class":33,"line":111},[31,13120,114],{"class":62},[31,13122,13123,13125,13127,13129,13131,13133,13135,13137],{"class":33,"line":117},[31,13124,120],{"class":58},[31,13126,102],{"class":62},[31,13128,126],{"class":125},[31,13130,129],{"class":62},[31,13132,132],{"class":58},[31,13134,135],{"class":62},[31,13136,12687],{"class":41},[31,13138,141],{"class":62},[31,13140,13141],{"class":33,"line":144},[31,13142,147],{"class":62},[31,13144,13145],{"class":33,"line":150},[31,13146,49],{"emptyLinePlaceholder":48},[31,13148,13149,13151,13154],{"class":33,"line":156},[31,13150,1353],{"class":37},[31,13152,13153],{"class":58}," create_param",[31,13155,1359],{"class":62},[31,13157,13158],{"class":33,"line":161},[31,13159,114],{"class":62},[31,13161,13162,13164,13166,13168,13170,13172,13174,13177],{"class":33,"line":192},[31,13163,120],{"class":58},[31,13165,102],{"class":62},[31,13167,126],{"class":125},[31,13169,129],{"class":62},[31,13171,132],{"class":58},[31,13173,135],{"class":62},[31,13175,13176],{"class":41},"\"-------------增操作--------------\"",[31,13178,141],{"class":62},[31,13180,13181],{"class":33,"line":197},[31,13182,147],{"class":62},[31,13184,13185],{"class":33,"line":211},[31,13186,49],{"emptyLinePlaceholder":48},[31,13188,13189,13191,13194],{"class":33,"line":216},[31,13190,1353],{"class":37},[31,13192,13193],{"class":58}," get_param",[31,13195,1359],{"class":62},[31,13197,13198],{"class":33,"line":245},[31,13199,114],{"class":62},[31,13201,13202,13204,13206,13208,13210,13212,13214,13217],{"class":33,"line":250},[31,13203,120],{"class":58},[31,13205,102],{"class":62},[31,13207,126],{"class":125},[31,13209,129],{"class":62},[31,13211,132],{"class":58},[31,13213,135],{"class":62},[31,13215,13216],{"class":41},"\"-------------查操作--------------\"",[31,13218,141],{"class":62},[31,13220,13221],{"class":33,"line":263},[31,13222,147],{"class":62},[31,13224,13225],{"class":33,"line":275},[31,13226,49],{"emptyLinePlaceholder":48},[31,13228,13229,13231,13234],{"class":33,"line":417},[31,13230,1353],{"class":37},[31,13232,13233],{"class":58}," update_param",[31,13235,1359],{"class":62},[31,13237,13238],{"class":33,"line":422},[31,13239,114],{"class":62},[31,13241,13242,13244,13246,13248,13250,13252,13254,13257],{"class":33,"line":428},[31,13243,120],{"class":58},[31,13245,102],{"class":62},[31,13247,126],{"class":125},[31,13249,129],{"class":62},[31,13251,132],{"class":58},[31,13253,135],{"class":62},[31,13255,13256],{"class":41},"\"-------------改操作--------------\"",[31,13258,141],{"class":62},[31,13260,13261],{"class":33,"line":434},[31,13262,147],{"class":62},[31,13264,13265],{"class":33,"line":440},[31,13266,49],{"emptyLinePlaceholder":48},[31,13268,13269,13271,13274],{"class":33,"line":446},[31,13270,1353],{"class":37},[31,13272,13273],{"class":58}," delete_param",[31,13275,1359],{"class":62},[31,13277,13278],{"class":33,"line":452},[31,13279,114],{"class":62},[31,13281,13282,13284,13286,13288,13290,13292,13294,13297],{"class":33,"line":458},[31,13283,120],{"class":58},[31,13285,102],{"class":62},[31,13287,126],{"class":125},[31,13289,129],{"class":62},[31,13291,132],{"class":58},[31,13293,135],{"class":62},[31,13295,13296],{"class":41},"\"-------------删操作--------------\"",[31,13298,141],{"class":62},[31,13300,13301],{"class":33,"line":1540},[31,13302,147],{"class":62},[31,13304,13305],{"class":33,"line":1545},[31,13306,49],{"emptyLinePlaceholder":48},[31,13308,13309],{"class":33,"line":1556},[31,13310,153],{"class":62},[31,13312,13313],{"class":33,"line":1561},[31,13314,49],{"emptyLinePlaceholder":48},[31,13316,13317,13319,13321,13323,13325,13327,13329,13331,13333,13335],{"class":33,"line":1584},[31,13318,164],{"class":37},[31,13320,167],{"class":58},[31,13322,102],{"class":62},[31,13324,164],{"class":37},[31,13326,175],{"class":174},[31,13328,178],{"class":62},[31,13330,181],{"class":37},[31,13332,184],{"class":37},[31,13334,187],{"class":174},[31,13336,108],{"class":62},[31,13338,13339],{"class":33,"line":1589},[31,13340,81],{"class":62},[31,13342,13343,13345,13347,13349],{"class":33,"line":1600},[31,13344,200],{"class":58},[31,13346,72],{"class":62},[31,13348,205],{"class":58},[31,13350,208],{"class":62},[31,13352,13353],{"class":33,"line":1609},[31,13354,49],{"emptyLinePlaceholder":48},[31,13356,13357,13359,13361,13363,13365,13367,13369,13371,13373],{"class":33,"line":3623},[31,13358,4667],{"class":37},[31,13360,12215],{"class":62},[31,13362,1258],{"class":37},[31,13364,1168],{"class":58},[31,13366,72],{"class":62},[31,13368,233],{"class":58},[31,13370,236],{"class":62},[31,13372,12760],{"class":58},[31,13374,4686],{"class":62},[31,13376,13377],{"class":33,"line":3634},[31,13378,49],{"emptyLinePlaceholder":48},[31,13380,13381,13383,13386],{"class":33,"line":3643},[31,13382,12238],{"class":62},[31,13384,13385],{"class":58},"create_param",[31,13387,260],{"class":62},[31,13389,13390,13392,13395],{"class":33,"line":6674},[31,13391,12238],{"class":62},[31,13393,13394],{"class":58},"get_param",[31,13396,260],{"class":62},[31,13398,13399,13401,13404],{"class":33,"line":6683},[31,13400,12238],{"class":62},[31,13402,13403],{"class":58},"update_param",[31,13405,260],{"class":62},[31,13407,13408,13410,13413],{"class":33,"line":6688},[31,13409,12238],{"class":62},[31,13411,13412],{"class":58},"delete_param",[31,13414,260],{"class":62},[31,13416,13417],{"class":33,"line":6699},[31,13418,49],{"emptyLinePlaceholder":48},[31,13420,13421,13423,13425,13427],{"class":33,"line":6704},[31,13422,200],{"class":58},[31,13424,72],{"class":62},[31,13426,223],{"class":58},[31,13428,12266],{"class":62},[31,13430,13431],{"class":33,"line":6725},[31,13432,49],{"emptyLinePlaceholder":48},[31,13434,13435,13437,13439,13441],{"class":33,"line":6730},[31,13436,200],{"class":58},[31,13438,72],{"class":62},[31,13440,257],{"class":58},[31,13442,260],{"class":62},[31,13444,13445,13447,13449],{"class":33,"line":6749},[31,13446,266],{"class":37},[31,13448,269],{"class":125},[31,13450,272],{"class":62},[31,13452,13453],{"class":33,"line":6754},[31,13454,278],{"class":62},[472,13456],{},[14,13458,13459],{},[17,13460],{"alt":19,"src":13461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image792.webp",[14,13463,13464],{},[17,13465],{"alt":19,"src":13466},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image793.webp",[14,13468,13469],{},[17,13470],{"alt":19,"src":13471},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image794.webp",[14,13473,13474],{},"ros2 param list",[14,13476,13477],{},"查询所有节点里的所有参数",[14,13479,13480],{},[17,13481],{"alt":19,"src":13482},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image795.webp",[14,13484,13485],{},"ros2 param get /节点名称 参数键名 来查看参数的值",[472,13487],{},[14,13489,13490],{},[17,13491],{"alt":19,"src":13492},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image796.webp",[14,13494,13495],{},"可以通过键来查询参数的值",[14,13497,13498],{},[17,13499],{"alt":19,"src":13500},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image797.webp",[14,13502,13503],{},"带复数形式的函数可以通过由键组成的容器来获取一些参数对象。",[14,13505,13506],{},[17,13507],{"alt":19,"src":13508},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image798.webp",[14,13510,13511],{},"来判断是否有该参数的，入口参数也是键，返回值是布尔值。",[14,13513,13514],{},[17,13515],{"alt":19,"src":13516},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image799.webp",[14,13518,13519],{},[17,13520],{"alt":19,"src":13521},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image800.webp",[14,13523,13524],{},[17,13525],{"alt":19,"src":13526},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image801.webp",[14,13528,13529],{},[17,13530],{"alt":19,"src":13531},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image802.webp",[14,13533,13534],{},[17,13535],{"alt":19,"src":13536},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image803.webp",[14,13538,13539],{},[17,13540],{"alt":19,"src":13541},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image804.webp",[472,13543],{},[14,13545,13546],{},[17,13547],{"alt":19,"src":13548},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image805.webp",[14,13550,13551],{},"需要传入parameter对象。",[14,13553,13554],{},[17,13555],{"alt":19,"src":13556},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image806.webp",[14,13558,13559],{},"我们覆盖掉旧值即可。",[14,13561,13562],{},[17,13563],{"alt":19,"src":13564},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image807.webp",[14,13566,13567],{},[17,13568],{"alt":19,"src":13569},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image808.webp",[14,13571,13572],{},"通过set_parameter也可以创建参数,但是必须声明allow_undeclared_parameters(true)。",[14,13574,13575],{},[17,13576],{"alt":19,"src":13577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image809.webp",[14,13579,13580],{},[17,13581],{"alt":19,"src":13582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image810.webp",[14,13584,13585],{},[17,13586],{"alt":19,"src":13587},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image811.webp",[472,13589],{},[14,13591,13592],{},[17,13593],{"alt":19,"src":13594},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image812.webp",[14,13596,13597],{},[17,13598],{"alt":19,"src":13599},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image813.webp",[14,13601,13602],{},"这种声明的参数不可以被删除，只能删除未声明但设置的。",[14,13604,13605],{},[17,13606],{"alt":19,"src":13607},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image814.webp",[14,13609,13610],{},[17,13611],{"alt":19,"src":13612},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image815.webp",[22,13614,13616],{"className":24,"code":13615,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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    //   this->undeclare_parameter(\"car_name\");\n    //   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,13617,13618,13624,13628,13644,13648,13652,13682,13686,13704,13708,13712,13720,13724,13742,13746,13768,13788,13808,13812,13842,13846,13850,13858,13862,13880,13884,13906,13955,13959,13991,14005,14009,14054,14058,14081,14102,14126,14150,14154,14158,14166,14170,14188,14215,14256,14260,14264,14272,14276,14294,14299,14304,14319,14353,14357,14361,14365,14369,14391,14395,14405,14409,14429,14433,14441,14449,14457,14465,14469,14479,14483,14493,14501],{"__ignoreMap":19},[31,13619,13620,13622],{"class":33,"line":34},[31,13621,38],{"class":37},[31,13623,42],{"class":41},[31,13625,13626],{"class":33,"line":45},[31,13627,49],{"emptyLinePlaceholder":48},[31,13629,13630,13632,13634,13636,13638,13640,13642],{"class":33,"line":52},[31,13631,55],{"class":37},[31,13633,12632],{"class":58},[31,13635,63],{"class":62},[31,13637,66],{"class":37},[31,13639,69],{"class":58},[31,13641,72],{"class":62},[31,13643,75],{"class":58},[31,13645,13646],{"class":33,"line":78},[31,13647,81],{"class":62},[31,13649,13650],{"class":33,"line":84},[31,13651,87],{"class":37},[31,13653,13654,13656,13658,13660,13662,13664,13666,13668,13670,13672,13674,13676,13678,13680],{"class":33,"line":90},[31,13655,12655],{"class":58},[31,13657,96],{"class":62},[31,13659,99],{"class":58},[31,13661,102],{"class":62},[31,13663,12664],{"class":41},[31,13665,1288],{"class":62},[31,13667,3919],{"class":58},[31,13669,72],{"class":62},[31,13671,13102],{"class":58},[31,13673,13105],{"class":62},[31,13675,13108],{"class":58},[31,13677,102],{"class":62},[31,13679,13113],{"class":125},[31,13681,13116],{"class":62},[31,13683,13684],{"class":33,"line":111},[31,13685,114],{"class":62},[31,13687,13688,13690,13692,13694,13696,13698,13700,13702],{"class":33,"line":117},[31,13689,120],{"class":58},[31,13691,102],{"class":62},[31,13693,126],{"class":125},[31,13695,129],{"class":62},[31,13697,132],{"class":58},[31,13699,135],{"class":62},[31,13701,12687],{"class":41},[31,13703,141],{"class":62},[31,13705,13706],{"class":33,"line":144},[31,13707,147],{"class":62},[31,13709,13710],{"class":33,"line":150},[31,13711,49],{"emptyLinePlaceholder":48},[31,13713,13714,13716,13718],{"class":33,"line":156},[31,13715,1353],{"class":37},[31,13717,13153],{"class":58},[31,13719,1359],{"class":62},[31,13721,13722],{"class":33,"line":161},[31,13723,114],{"class":62},[31,13725,13726,13728,13730,13732,13734,13736,13738,13740],{"class":33,"line":192},[31,13727,120],{"class":58},[31,13729,102],{"class":62},[31,13731,126],{"class":125},[31,13733,129],{"class":62},[31,13735,132],{"class":58},[31,13737,135],{"class":62},[31,13739,13176],{"class":41},[31,13741,141],{"class":62},[31,13743,13744],{"class":33,"line":197},[31,13745,49],{"emptyLinePlaceholder":48},[31,13747,13748,13751,13753,13756,13758,13761,13763,13766],{"class":33,"line":211},[31,13749,13750],{"class":125},"      this",[31,13752,129],{"class":62},[31,13754,13755],{"class":58},"declare_parameter",[31,13757,102],{"class":62},[31,13759,13760],{"class":41},"\"car_name\"",[31,13762,1288],{"class":62},[31,13764,13765],{"class":41},"\"ER\"",[31,13767,141],{"class":62},[31,13769,13770,13772,13774,13776,13778,13781,13783,13786],{"class":33,"line":216},[31,13771,13750],{"class":125},[31,13773,129],{"class":62},[31,13775,13755],{"class":58},[31,13777,102],{"class":62},[31,13779,13780],{"class":41},"\"width\"",[31,13782,1288],{"class":62},[31,13784,13785],{"class":125},"1.55",[31,13787,141],{"class":62},[31,13789,13790,13792,13794,13796,13798,13801,13803,13806],{"class":33,"line":245},[31,13791,13750],{"class":125},[31,13793,129],{"class":62},[31,13795,13755],{"class":58},[31,13797,102],{"class":62},[31,13799,13800],{"class":41},"\"wheels\"",[31,13802,1288],{"class":62},[31,13804,13805],{"class":125},"5",[31,13807,141],{"class":62},[31,13809,13810],{"class":33,"line":250},[31,13811,49],{"emptyLinePlaceholder":48},[31,13813,13814,13816,13818,13821,13823,13825,13827,13830,13832,13835,13837,13840],{"class":33,"line":263},[31,13815,13750],{"class":125},[31,13817,129],{"class":62},[31,13819,13820],{"class":58},"set_parameter",[31,13822,102],{"class":62},[31,13824,3919],{"class":58},[31,13826,72],{"class":62},[31,13828,13829],{"class":58},"Parameter",[31,13831,102],{"class":62},[31,13833,13834],{"class":41},"\"height\"",[31,13836,1288],{"class":62},[31,13838,13839],{"class":125},"2.00",[31,13841,1339],{"class":62},[31,13843,13844],{"class":33,"line":275},[31,13845,147],{"class":62},[31,13847,13848],{"class":33,"line":417},[31,13849,49],{"emptyLinePlaceholder":48},[31,13851,13852,13854,13856],{"class":33,"line":422},[31,13853,1353],{"class":37},[31,13855,13193],{"class":58},[31,13857,1359],{"class":62},[31,13859,13860],{"class":33,"line":428},[31,13861,114],{"class":62},[31,13863,13864,13866,13868,13870,13872,13874,13876,13878],{"class":33,"line":434},[31,13865,120],{"class":58},[31,13867,102],{"class":62},[31,13869,126],{"class":125},[31,13871,129],{"class":62},[31,13873,132],{"class":58},[31,13875,135],{"class":62},[31,13877,13216],{"class":41},[31,13879,141],{"class":62},[31,13881,13882],{"class":33,"line":440},[31,13883,49],{"emptyLinePlaceholder":48},[31,13885,13886,13888,13891,13893,13895,13897,13900,13902,13904],{"class":33,"line":446},[31,13887,1368],{"class":37},[31,13889,13890],{"class":62}," car ",[31,13892,1258],{"class":37},[31,13894,1261],{"class":125},[31,13896,129],{"class":62},[31,13898,13899],{"class":58},"get_parameter",[31,13901,102],{"class":62},[31,13903,13760],{"class":41},[31,13905,141],{"class":62},[31,13907,13908,13910,13912,13914,13916,13918,13920,13923,13925,13928,13930,13932,13935,13938,13940,13942,13945,13948,13950,13952],{"class":33,"line":452},[31,13909,120],{"class":58},[31,13911,102],{"class":62},[31,13913,126],{"class":125},[31,13915,129],{"class":62},[31,13917,132],{"class":58},[31,13919,135],{"class":62},[31,13921,13922],{"class":41},"\"key = ",[31,13924,1435],{"class":125},[31,13926,13927],{"class":41},",value = ",[31,13929,1435],{"class":125},[31,13931,1438],{"class":41},[31,13933,13934],{"class":62},",car.",[31,13936,13937],{"class":58},"get_name",[31,13939,13105],{"class":62},[31,13941,1444],{"class":58},[31,13943,13944],{"class":62},"(),car.",[31,13946,13947],{"class":58},"as_string",[31,13949,13105],{"class":62},[31,13951,1444],{"class":58},[31,13953,13954],{"class":62},"()); \n",[31,13956,13957],{"class":33,"line":458},[31,13958,49],{"emptyLinePlaceholder":48},[31,13960,13961,13963,13966,13968,13970,13972,13975,13978,13980,13982,13984,13986,13988],{"class":33,"line":1540},[31,13962,1368],{"class":37},[31,13964,13965],{"class":62}," params ",[31,13967,1258],{"class":37},[31,13969,1261],{"class":125},[31,13971,129],{"class":62},[31,13973,13974],{"class":58},"get_parameters",[31,13976,13977],{"class":62},"({",[31,13979,13760],{"class":41},[31,13981,1288],{"class":62},[31,13983,13780],{"class":41},[31,13985,1288],{"class":62},[31,13987,13800],{"class":41},[31,13989,13990],{"class":62},"});\n",[31,13992,13993,13995,13997,14000,14002],{"class":33,"line":1545},[31,13994,10053],{"class":37},[31,13996,102],{"class":62},[31,13998,13999],{"class":37},"auto",[31,14001,2167],{"class":37},[31,14003,14004],{"class":62},"¶m : params)\n",[31,14006,14007],{"class":33,"line":1556},[31,14008,6463],{"class":62},[31,14010,14011,14013,14015,14017,14019,14021,14023,14025,14027,14029,14031,14033,14036,14038,14040,14042,14045,14048,14050,14052],{"class":33,"line":1561},[31,14012,1769],{"class":58},[31,14014,102],{"class":62},[31,14016,126],{"class":125},[31,14018,129],{"class":62},[31,14020,132],{"class":58},[31,14022,135],{"class":62},[31,14024,13922],{"class":41},[31,14026,1435],{"class":125},[31,14028,13927],{"class":41},[31,14030,1435],{"class":125},[31,14032,1438],{"class":41},[31,14034,14035],{"class":62},",param.",[31,14037,13937],{"class":58},[31,14039,13105],{"class":62},[31,14041,1444],{"class":58},[31,14043,14044],{"class":62},"(),param.",[31,14046,14047],{"class":58},"value_to_string",[31,14049,13105],{"class":62},[31,14051,1444],{"class":58},[31,14053,1447],{"class":62},[31,14055,14056],{"class":33,"line":1584},[31,14057,6562],{"class":62},[31,14059,14060,14063,14066,14068,14070,14072,14075,14077,14079],{"class":33,"line":1589},[31,14061,14062],{"class":37},"      bool",[31,14064,14065],{"class":62}," car_name_flag ",[31,14067,1258],{"class":37},[31,14069,1261],{"class":125},[31,14071,129],{"class":62},[31,14073,14074],{"class":58},"has_parameter",[31,14076,102],{"class":62},[31,14078,13760],{"class":41},[31,14080,141],{"class":62},[31,14082,14083,14085,14088,14090,14092,14094,14096,14098,14100],{"class":33,"line":1600},[31,14084,14062],{"class":37},[31,14086,14087],{"class":62}," height_flag ",[31,14089,1258],{"class":37},[31,14091,1261],{"class":125},[31,14093,129],{"class":62},[31,14095,14074],{"class":58},[31,14097,102],{"class":62},[31,14099,13834],{"class":41},[31,14101,141],{"class":62},[31,14103,14104,14106,14108,14110,14112,14114,14116,14119,14121,14123],{"class":33,"line":1609},[31,14105,120],{"class":58},[31,14107,102],{"class":62},[31,14109,126],{"class":125},[31,14111,129],{"class":62},[31,14113,132],{"class":58},[31,14115,135],{"class":62},[31,14117,14118],{"class":41},"\"是否包含car_name? 答案:",[31,14120,3487],{"class":125},[31,14122,1438],{"class":41},[31,14124,14125],{"class":62},",car_name_flag);\n",[31,14127,14128,14130,14132,14134,14136,14138,14140,14143,14145,14147],{"class":33,"line":3623},[31,14129,120],{"class":58},[31,14131,102],{"class":62},[31,14133,126],{"class":125},[31,14135,129],{"class":62},[31,14137,132],{"class":58},[31,14139,135],{"class":62},[31,14141,14142],{"class":41},"\"是否包含height? 答案:",[31,14144,3487],{"class":125},[31,14146,1438],{"class":41},[31,14148,14149],{"class":62},",height_flag);\n",[31,14151,14152],{"class":33,"line":3634},[31,14153,147],{"class":62},[31,14155,14156],{"class":33,"line":3643},[31,14157,49],{"emptyLinePlaceholder":48},[31,14159,14160,14162,14164],{"class":33,"line":6674},[31,14161,1353],{"class":37},[31,14163,13233],{"class":58},[31,14165,1359],{"class":62},[31,14167,14168],{"class":33,"line":6683},[31,14169,114],{"class":62},[31,14171,14172,14174,14176,14178,14180,14182,14184,14186],{"class":33,"line":6688},[31,14173,120],{"class":58},[31,14175,102],{"class":62},[31,14177,126],{"class":125},[31,14179,129],{"class":62},[31,14181,132],{"class":58},[31,14183,135],{"class":62},[31,14185,13256],{"class":41},[31,14187,141],{"class":62},[31,14189,14190,14192,14194,14196,14198,14200,14202,14204,14206,14208,14210,14213],{"class":33,"line":6699},[31,14191,13750],{"class":125},[31,14193,129],{"class":62},[31,14195,13820],{"class":58},[31,14197,102],{"class":62},[31,14199,3919],{"class":58},[31,14201,72],{"class":62},[31,14203,13829],{"class":58},[31,14205,102],{"class":62},[31,14207,13780],{"class":41},[31,14209,1288],{"class":62},[31,14211,14212],{"class":125},"1.85",[31,14214,1339],{"class":62},[31,14216,14217,14219,14221,14223,14225,14227,14229,14232,14234,14236,14238,14240,14242,14244,14246,14248,14251,14254],{"class":33,"line":6704},[31,14218,120],{"class":58},[31,14220,102],{"class":62},[31,14222,126],{"class":125},[31,14224,129],{"class":62},[31,14226,132],{"class":58},[31,14228,135],{"class":62},[31,14230,14231],{"class":41},"\"width = ",[31,14233,3492],{"class":125},[31,14235,1438],{"class":41},[31,14237,1288],{"class":62},[31,14239,126],{"class":125},[31,14241,129],{"class":62},[31,14243,13899],{"class":58},[31,14245,102],{"class":62},[31,14247,13780],{"class":41},[31,14249,14250],{"class":62},").",[31,14252,14253],{"class":58},"as_double",[31,14255,1447],{"class":62},[31,14257,14258],{"class":33,"line":6725},[31,14259,147],{"class":62},[31,14261,14262],{"class":33,"line":6730},[31,14263,49],{"emptyLinePlaceholder":48},[31,14265,14266,14268,14270],{"class":33,"line":6749},[31,14267,1353],{"class":37},[31,14269,13273],{"class":58},[31,14271,1359],{"class":62},[31,14273,14274],{"class":33,"line":6754},[31,14275,114],{"class":62},[31,14277,14278,14280,14282,14284,14286,14288,14290,14292],{"class":33,"line":6768},[31,14279,120],{"class":58},[31,14281,102],{"class":62},[31,14283,126],{"class":125},[31,14285,129],{"class":62},[31,14287,132],{"class":58},[31,14289,135],{"class":62},[31,14291,13296],{"class":41},[31,14293,141],{"class":62},[31,14295,14296],{"class":33,"line":6773},[31,14297,14298],{"class":4661},"    //   this->undeclare_parameter(\"car_name\");\n",[31,14300,14301],{"class":33,"line":6797},[31,14302,14303],{"class":4661},"    //   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n",[31,14305,14306,14308,14310,14313,14315,14317],{"class":33,"line":6806},[31,14307,13750],{"class":125},[31,14309,129],{"class":62},[31,14311,14312],{"class":58},"undeclare_parameter",[31,14314,102],{"class":62},[31,14316,13834],{"class":41},[31,14318,141],{"class":62},[31,14320,14321,14323,14325,14327,14329,14331,14333,14335,14337,14339,14341,14343,14345,14347,14349,14351],{"class":33,"line":6811},[31,14322,120],{"class":58},[31,14324,102],{"class":62},[31,14326,126],{"class":125},[31,14328,129],{"class":62},[31,14330,132],{"class":58},[31,14332,135],{"class":62},[31,14334,14142],{"class":41},[31,14336,3487],{"class":125},[31,14338,1438],{"class":41},[31,14340,1288],{"class":62},[31,14342,126],{"class":125},[31,14344,129],{"class":62},[31,14346,14074],{"class":58},[31,14348,102],{"class":62},[31,14350,13834],{"class":41},[31,14352,1339],{"class":62},[31,14354,14355],{"class":33,"line":6816},[31,14356,147],{"class":62},[31,14358,14359],{"class":33,"line":6827},[31,14360,49],{"emptyLinePlaceholder":48},[31,14362,14363],{"class":33,"line":6836},[31,14364,153],{"class":62},[31,14366,14367],{"class":33,"line":7497},[31,14368,49],{"emptyLinePlaceholder":48},[31,14370,14371,14373,14375,14377,14379,14381,14383,14385,14387,14389],{"class":33,"line":7502},[31,14372,164],{"class":37},[31,14374,167],{"class":58},[31,14376,102],{"class":62},[31,14378,164],{"class":37},[31,14380,175],{"class":174},[31,14382,178],{"class":62},[31,14384,181],{"class":37},[31,14386,184],{"class":37},[31,14388,187],{"class":174},[31,14390,108],{"class":62},[31,14392,14393],{"class":33,"line":7517},[31,14394,81],{"class":62},[31,14396,14397,14399,14401,14403],{"class":33,"line":7522},[31,14398,200],{"class":58},[31,14400,72],{"class":62},[31,14402,205],{"class":58},[31,14404,208],{"class":62},[31,14406,14407],{"class":33,"line":7535},[31,14408,49],{"emptyLinePlaceholder":48},[31,14410,14411,14413,14415,14417,14419,14421,14423,14425,14427],{"class":33,"line":7540},[31,14412,4667],{"class":37},[31,14414,12215],{"class":62},[31,14416,1258],{"class":37},[31,14418,1168],{"class":58},[31,14420,72],{"class":62},[31,14422,233],{"class":58},[31,14424,236],{"class":62},[31,14426,12760],{"class":58},[31,14428,4686],{"class":62},[31,14430,14431],{"class":33,"line":7563},[31,14432,49],{"emptyLinePlaceholder":48},[31,14434,14435,14437,14439],{"class":33,"line":7572},[31,14436,12238],{"class":62},[31,14438,13385],{"class":58},[31,14440,260],{"class":62},[31,14442,14443,14445,14447],{"class":33,"line":7577},[31,14444,12238],{"class":62},[31,14446,13394],{"class":58},[31,14448,260],{"class":62},[31,14450,14451,14453,14455],{"class":33,"line":7614},[31,14452,12238],{"class":62},[31,14454,13403],{"class":58},[31,14456,260],{"class":62},[31,14458,14459,14461,14463],{"class":33,"line":7619},[31,14460,12238],{"class":62},[31,14462,13412],{"class":58},[31,14464,260],{"class":62},[31,14466,14467],{"class":33,"line":7649},[31,14468,49],{"emptyLinePlaceholder":48},[31,14470,14471,14473,14475,14477],{"class":33,"line":7654},[31,14472,200],{"class":58},[31,14474,72],{"class":62},[31,14476,223],{"class":58},[31,14478,12266],{"class":62},[31,14480,14481],{"class":33,"line":7682},[31,14482,49],{"emptyLinePlaceholder":48},[31,14484,14485,14487,14489,14491],{"class":33,"line":7687},[31,14486,200],{"class":58},[31,14488,72],{"class":62},[31,14490,257],{"class":58},[31,14492,260],{"class":62},[31,14494,14495,14497,14499],{"class":33,"line":7693},[31,14496,266],{"class":37},[31,14498,269],{"class":125},[31,14500,272],{"class":62},[31,14502,14503],{"class":33,"line":7698},[31,14504,278],{"class":62},[10,14506,14508],{"id":14507},"参数服务_实验1_客户端c","参数服务_实验1_客户端(C++)",[14,14510,14511],{},[17,14512],{"alt":19,"src":14513},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image816.webp",[14,14515,14516],{},[17,14517],{"alt":19,"src":14518},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image817.webp",[14,14520,14521],{},[17,14522],{"alt":19,"src":14523},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image818.webp",[14,14525,14526],{},[17,14527],{"alt":19,"src":14528},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image819.webp",[14,14530,14531],{},[17,14532],{"alt":19,"src":14533},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image820.webp",[14,14535,14536],{},[17,14537],{"alt":19,"src":14538},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image821.webp",[14,14540,14541],{},[17,14542],{"alt":19,"src":14543},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image822.webp",[14,14545,14546],{},[17,14547],{"alt":19,"src":14548},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image823.webp",[14,14550,14551],{},[17,14552],{"alt":19,"src":14553},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image824.webp",[14,14555,14556],{},[17,14557],{"alt":19,"src":14558},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image825.webp",[14,14560,14561],{},"第一个入口参数是客户端节点对象，",[14,14563,14564],{},"第二个入口参数是需要连接的服务端的节点名称。",[14,14566,14567],{},[17,14568],{"alt":19,"src":14569},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image826.webp",[14,14571,14572],{},"如果1秒钟之内连接上了就返回true，如果超时1s没连接上就返回false。",[14,14574,14575],{},[17,14576],{"alt":19,"src":14577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image827.webp",[14,14579,14580],{},[17,14581],{"alt":19,"src":14582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image828.webp",[22,14584,14586],{"className":24,"code":14585,"language":26,"meta":19,"style":19},"#include \"rclcpp/rclcpp.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  // rclcpp::spin(client);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[28,14587,14588,14594,14598,14612,14616,14632,14636,14640,14654,14658,14676,14705,14709,14713,14721,14725,14748,14752,14772,14776,14784,14788,14806,14810,14818,14822,14826,14834,14838,14857,14861,14865,14873,14877,14896,14900,14904,14908,14920,14924,14928,14950,14954,14964,14968,14988,14992,15006,15010,15022,15026,15034,15038,15042,15051,15059,15067,15071,15076,15080,15090,15098],{"__ignoreMap":19},[31,14589,14590,14592],{"class":33,"line":34},[31,14591,38],{"class":37},[31,14593,42],{"class":41},[31,14595,14596],{"class":33,"line":45},[31,14597,49],{"emptyLinePlaceholder":48},[31,14599,14600,14602,14604,14606,14608,14610],{"class":33,"line":52},[31,14601,1162],{"class":37},[31,14603,1165],{"class":37},[31,14605,1168],{"class":58},[31,14607,72],{"class":62},[31,14609,1173],{"class":58},[31,14611,272],{"class":62},[31,14613,14614],{"class":33,"line":78},[31,14615,49],{"emptyLinePlaceholder":48},[31,14617,14618,14620,14622,14624,14626,14628,14630],{"class":33,"line":84},[31,14619,55],{"class":37},[31,14621,12819],{"class":58},[31,14623,63],{"class":62},[31,14625,66],{"class":37},[31,14627,69],{"class":58},[31,14629,72],{"class":62},[31,14631,75],{"class":58},[31,14633,14634],{"class":33,"line":90},[31,14635,81],{"class":62},[31,14637,14638],{"class":33,"line":111},[31,14639,87],{"class":37},[31,14641,14642,14644,14646,14648,14650,14652],{"class":33,"line":117},[31,14643,12842],{"class":58},[31,14645,96],{"class":62},[31,14647,99],{"class":58},[31,14649,102],{"class":62},[31,14651,12851],{"class":41},[31,14653,108],{"class":62},[31,14655,14656],{"class":33,"line":144},[31,14657,114],{"class":62},[31,14659,14660,14662,14664,14666,14668,14670,14672,14674],{"class":33,"line":150},[31,14661,120],{"class":58},[31,14663,102],{"class":62},[31,14665,126],{"class":125},[31,14667,129],{"class":62},[31,14669,132],{"class":58},[31,14671,135],{"class":62},[31,14673,12874],{"class":41},[31,14675,141],{"class":62},[31,14677,14678,14681,14683,14685,14687,14690,14692,14695,14697,14699,14701,14703],{"class":33,"line":156},[31,14679,14680],{"class":62},"      param_client_ ",[31,14682,1258],{"class":37},[31,14684,1168],{"class":58},[31,14686,72],{"class":62},[31,14688,14689],{"class":58},"make_sharedautolinkrclcpp",[31,14691,72],{"class":62},[31,14693,14694],{"class":58},"SyncParametersClientautolink",[31,14696,102],{"class":62},[31,14698,126],{"class":125},[31,14700,1288],{"class":62},[31,14702,12664],{"class":41},[31,14704,141],{"class":62},[31,14706,14707],{"class":33,"line":161},[31,14708,147],{"class":62},[31,14710,14711],{"class":33,"line":192},[31,14712,49],{"emptyLinePlaceholder":48},[31,14714,14715,14717,14719],{"class":33,"line":197},[31,14716,6422],{"class":37},[31,14718,6425],{"class":58},[31,14720,1359],{"class":62},[31,14722,14723],{"class":33,"line":211},[31,14724,114],{"class":62},[31,14726,14727,14729,14732,14734,14736,14738,14740,14742,14744,14746],{"class":33,"line":216},[31,14728,6436],{"class":37},[31,14730,14731],{"class":62},"(param_client_->",[31,14733,6442],{"class":58},[31,14735,102],{"class":62},[31,14737,1312],{"class":125},[31,14739,1315],{"class":37},[31,14741,6451],{"class":62},[31,14743,5732],{"class":37},[31,14745,6456],{"class":125},[31,14747,108],{"class":62},[31,14749,14750],{"class":33,"line":245},[31,14751,6463],{"class":62},[31,14753,14754,14756,14758,14760,14762,14764,14766,14768,14770],{"class":33,"line":250},[31,14755,6495],{"class":37},[31,14757,102],{"class":62},[31,14759,3919],{"class":58},[31,14761,72],{"class":62},[31,14763,6504],{"class":58},[31,14765,6507],{"class":62},[31,14767,5732],{"class":37},[31,14769,6456],{"class":125},[31,14771,108],{"class":62},[31,14773,14774],{"class":33,"line":263},[31,14775,6518],{"class":62},[31,14777,14778,14780,14782],{"class":33,"line":275},[31,14779,6547],{"class":37},[31,14781,6550],{"class":125},[31,14783,272],{"class":62},[31,14785,14786],{"class":33,"line":417},[31,14787,6557],{"class":62},[31,14789,14790,14792,14794,14796,14798,14800,14802,14804],{"class":33,"line":422},[31,14791,1769],{"class":58},[31,14793,102],{"class":62},[31,14795,126],{"class":125},[31,14797,129],{"class":62},[31,14799,132],{"class":58},[31,14801,135],{"class":62},[31,14803,6484],{"class":41},[31,14805,141],{"class":62},[31,14807,14808],{"class":33,"line":428},[31,14809,6562],{"class":62},[31,14811,14812,14814,14816],{"class":33,"line":434},[31,14813,6567],{"class":37},[31,14815,6456],{"class":125},[31,14817,272],{"class":62},[31,14819,14820],{"class":33,"line":440},[31,14821,147],{"class":62},[31,14823,14824],{"class":33,"line":446},[31,14825,49],{"emptyLinePlaceholder":48},[31,14827,14828,14830,14832],{"class":33,"line":452},[31,14829,1353],{"class":37},[31,14831,13193],{"class":58},[31,14833,1359],{"class":62},[31,14835,14836],{"class":33,"line":458},[31,14837,114],{"class":62},[31,14839,14840,14842,14844,14846,14848,14850,14852,14855],{"class":33,"line":1540},[31,14841,120],{"class":58},[31,14843,102],{"class":62},[31,14845,126],{"class":125},[31,14847,129],{"class":62},[31,14849,132],{"class":58},[31,14851,135],{"class":62},[31,14853,14854],{"class":41},"\"-----------参数查询操作-------------\"",[31,14856,141],{"class":62},[31,14858,14859],{"class":33,"line":1545},[31,14860,147],{"class":62},[31,14862,14863],{"class":33,"line":1556},[31,14864,49],{"emptyLinePlaceholder":48},[31,14866,14867,14869,14871],{"class":33,"line":1561},[31,14868,1353],{"class":37},[31,14870,13233],{"class":58},[31,14872,1359],{"class":62},[31,14874,14875],{"class":33,"line":1584},[31,14876,114],{"class":62},[31,14878,14879,14881,14883,14885,14887,14889,14891,14894],{"class":33,"line":1589},[31,14880,120],{"class":58},[31,14882,102],{"class":62},[31,14884,126],{"class":125},[31,14886,129],{"class":62},[31,14888,132],{"class":58},[31,14890,135],{"class":62},[31,14892,14893],{"class":41},"\"-----------参数更新操作-------------\"",[31,14895,141],{"class":62},[31,14897,14898],{"class":33,"line":1600},[31,14899,147],{"class":62},[31,14901,14902],{"class":33,"line":1609},[31,14903,49],{"emptyLinePlaceholder":48},[31,14905,14906],{"class":33,"line":3623},[31,14907,1348],{"class":37},[31,14909,14910,14912,14914,14917],{"class":33,"line":3634},[31,14911,1467],{"class":58},[31,14913,72],{"class":62},[31,14915,14916],{"class":58},"SyncParametersClient",[31,14918,14919],{"class":62},"::SharedPtr param_client_;\n",[31,14921,14922],{"class":33,"line":3643},[31,14923,153],{"class":62},[31,14925,14926],{"class":33,"line":6674},[31,14927,49],{"emptyLinePlaceholder":48},[31,14929,14930,14932,14934,14936,14938,14940,14942,14944,14946,14948],{"class":33,"line":6683},[31,14931,164],{"class":37},[31,14933,167],{"class":58},[31,14935,102],{"class":62},[31,14937,164],{"class":37},[31,14939,175],{"class":174},[31,14941,178],{"class":62},[31,14943,181],{"class":37},[31,14945,184],{"class":37},[31,14947,187],{"class":174},[31,14949,108],{"class":62},[31,14951,14952],{"class":33,"line":6688},[31,14953,81],{"class":62},[31,14955,14956,14958,14960,14962],{"class":33,"line":6699},[31,14957,200],{"class":58},[31,14959,72],{"class":62},[31,14961,205],{"class":58},[31,14963,208],{"class":62},[31,14965,14966],{"class":33,"line":6704},[31,14967,49],{"emptyLinePlaceholder":48},[31,14969,14970,14972,14974,14976,14978,14980,14982,14984,14986],{"class":33,"line":6725},[31,14971,4667],{"class":37},[31,14973,4670],{"class":62},[31,14975,1258],{"class":37},[31,14977,1168],{"class":58},[31,14979,72],{"class":62},[31,14981,233],{"class":58},[31,14983,236],{"class":62},[31,14985,12947],{"class":58},[31,14987,4686],{"class":62},[31,14989,14990],{"class":33,"line":6730},[31,14991,49],{"emptyLinePlaceholder":48},[31,14993,14994,14996,14998,15000,15002,15004],{"class":33,"line":6749},[31,14995,6733],{"class":37},[31,14997,6736],{"class":62},[31,14999,1258],{"class":37},[31,15001,6741],{"class":62},[31,15003,6744],{"class":58},[31,15005,260],{"class":62},[31,15007,15008],{"class":33,"line":6754},[31,15009,49],{"emptyLinePlaceholder":48},[31,15011,15012,15014,15016,15019],{"class":33,"line":6768},[31,15013,5726],{"class":37},[31,15015,102],{"class":62},[31,15017,15018],{"class":37},"!",[31,15020,15021],{"class":62},"flag)\n",[31,15023,15024],{"class":33,"line":6773},[31,15025,5742],{"class":62},[31,15027,15028,15030,15032],{"class":33,"line":6797},[31,15029,1880],{"class":37},[31,15031,269],{"class":125},[31,15033,272],{"class":62},[31,15035,15036],{"class":33,"line":6806},[31,15037,455],{"class":62},[31,15039,15040],{"class":33,"line":6811},[31,15041,49],{"emptyLinePlaceholder":48},[31,15043,15044,15047,15049],{"class":33,"line":6816},[31,15045,15046],{"class":62},"  client->",[31,15048,13394],{"class":58},[31,15050,260],{"class":62},[31,15052,15053,15055,15057],{"class":33,"line":6827},[31,15054,15046],{"class":62},[31,15056,13403],{"class":58},[31,15058,260],{"class":62},[31,15060,15061,15063,15065],{"class":33,"line":6836},[31,15062,15046],{"class":62},[31,15064,13394],{"class":58},[31,15066,260],{"class":62},[31,15068,15069],{"class":33,"line":7497},[31,15070,49],{"emptyLinePlaceholder":48},[31,15072,15073],{"class":33,"line":7502},[31,15074,15075],{"class":4661},"  // rclcpp::spin(client);\n",[31,15077,15078],{"class":33,"line":7517},[31,15079,49],{"emptyLinePlaceholder":48},[31,15081,15082,15084,15086,15088],{"class":33,"line":7522},[31,15083,200],{"class":58},[31,15085,72],{"class":62},[31,15087,257],{"class":58},[31,15089,260],{"class":62},[31,15091,15092,15094,15096],{"class":33,"line":7535},[31,15093,266],{"class":37},[31,15095,269],{"class":125},[31,15097,272],{"class":62},[31,15099,15100],{"class":33,"line":7540},[31,15101,278],{"class":62},[472,15103],{},[14,15105,15106],{},[17,15107],{"alt":19,"src":15108},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image829.webp",[14,15110,15111],{},[17,15112],{"alt":19,"src":15113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image830.webp",[14,15115,15116],{},[17,15117],{"alt":19,"src":15118},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image831.webp",[14,15120,15121],{},"这些话题都是我们此节点名称下的。",[472,15123],{},[14,15125,15126],{},[17,15127],{"alt":19,"src":15128},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image832.webp",[14,15130,15131],{},[17,15132],{"alt":19,"src":15133},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image833.webp",[14,15135,15136],{},[17,15137],{"alt":19,"src":15138},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image834.webp",[14,15140,15141],{},[17,15142],{"alt":19,"src":15143},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image835.webp",[14,15145,15146],{},"要用高级for",[14,15148,15149],{},[17,15150],{"alt":19,"src":15151},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image836.webp",[14,15153,15154],{},[17,15155],{"alt":19,"src":15156},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image837.webp",[14,15158,15159],{},[17,15160],{"alt":19,"src":15161},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image838.webp",[14,15163,15164],{},[17,15165],{"alt":19,"src":15166},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image839.webp",[14,15168,15169],{},[17,15170],{"alt":19,"src":15171},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image840.webp",[14,15173,15174],{},[17,15175],{"alt":19,"src":15176},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image841.webp",[14,15178,15179],{},"入口参数填参数对象的容器。",[14,15181,15182],{},[17,15183],{"alt":19,"src":15184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image842.webp",[14,15186,15187],{},[17,15188],{"alt":19,"src":15189},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image843.webp",[14,15191,15192],{},"我们不仅可以修改值，也可以创建新的参数，但是要保证服务端那边调用过undeclared......",[14,15194,15195],{},[17,15196],{"alt":19,"src":15197},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image844.webp",[14,15199,15200],{},[17,15201],{"alt":19,"src":15202},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image845.webp",[15204,15205,15206],"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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":19,"searchDepth":45,"depth":45,"links":15208},[15209,15210,15211,15212,15213,15214,15215,15216,15217,15218,15219,15220,15221,15222,15223],{"id":12,"depth":52,"text":12},{"id":616,"depth":52,"text":616},{"id":670,"depth":52,"text":671},{"id":2330,"depth":52,"text":2330},{"id":2576,"depth":52,"text":2577},{"id":4039,"depth":52,"text":4039},{"id":4097,"depth":52,"text":4097},{"id":4123,"depth":52,"text":4124},{"id":5297,"depth":52,"text":5298},{"id":7749,"depth":52,"text":7749},{"id":7916,"depth":52,"text":7917},{"id":10591,"depth":52,"text":10592},{"id":12439,"depth":52,"text":12440},{"id":12548,"depth":52,"text":12549},{"id":14507,"depth":52,"text":14508},"4",4000000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin",{"title":5,"description":19},"wiki/2023-12-30-ros2-tutorial/ch4-四大通信","AcIGQZ7ahg2jX7ava4FfpVKhuq3qJuDWdjzvt8INzDM",[15239,15244,15249,15255,15261,15267,15273,15279,15285,15291,15297,15303,15309,15315,15321,15327,15332,15338,15344,15345,15350,15356,15362,15368,15374],{"path":15240,"stem":15241,"title":15242,"date":15226,"chapter":1312,"chapterSort":15243,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍",1000000,{"path":15245,"stem":15246,"title":15247,"date":15226,"chapter":1291,"chapterSort":15248,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":15250,"stem":15251,"title":15252,"date":15226,"chapter":15253,"chapterSort":15254,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":15256,"stem":15257,"title":15258,"date":15226,"chapter":15259,"chapterSort":15260,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":15262,"stem":15263,"title":15264,"date":15226,"chapter":15265,"chapterSort":15266,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":15268,"stem":15269,"title":15270,"date":15226,"chapter":15271,"chapterSort":15272,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":15274,"stem":15275,"title":15276,"date":15226,"chapter":15277,"chapterSort":15278,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":15280,"stem":15281,"title":15282,"date":15226,"chapter":15283,"chapterSort":15284,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":15286,"stem":15287,"title":15288,"date":15226,"chapter":15289,"chapterSort":15290,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":15292,"stem":15293,"title":15294,"date":15226,"chapter":15295,"chapterSort":15296,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":15298,"stem":15299,"title":15300,"date":15226,"chapter":15301,"chapterSort":15302,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":15304,"stem":15305,"title":15306,"date":15226,"chapter":15307,"chapterSort":15308,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":15310,"stem":15311,"title":15312,"date":15226,"chapter":15313,"chapterSort":15314,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":15316,"stem":15317,"title":15318,"date":15226,"chapter":15319,"chapterSort":15320,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":15322,"stem":15323,"title":15324,"date":15226,"chapter":15325,"chapterSort":15326,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":15328,"stem":15329,"title":15330,"date":15226,"chapter":4998,"chapterSort":15331,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作",2000000,{"path":15333,"stem":15334,"title":15335,"date":15226,"chapter":15336,"chapterSort":15337,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":15339,"stem":15340,"title":15341,"date":15226,"chapter":15342,"chapterSort":15343,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":15234,"stem":15236,"title":5,"date":15226,"chapter":15224,"chapterSort":15225,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},{"path":15346,"stem":15347,"title":15348,"date":15226,"chapter":13805,"chapterSort":15349,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制",5000000,{"path":15351,"stem":15352,"title":15353,"date":15226,"chapter":15354,"chapterSort":15355,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":15357,"stem":15358,"title":15359,"date":15226,"chapter":15360,"chapterSort":15361,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":15363,"stem":15364,"title":15365,"date":15226,"chapter":15366,"chapterSort":15367,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":15369,"stem":15370,"title":15371,"date":15226,"chapter":15372,"chapterSort":15373,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":15231},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":15228,"stem":15375,"title":15376,"date":15226,"chapter":15232,"chapterSort":15377,"docKey":15227,"docRoot":15228,"docTitle":15229,"isWikiDoc":48,"isWikiIndex":48},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560328709]