[{"data":1,"prerenderedAt":16081},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":15717,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":16065,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin":16080},{"id":4,"title":5,"body":6,"canonicalPath":15698,"chapter":15699,"chapterSort":15700,"date":15701,"description":20,"docI18nKey":15702,"docKey":15703,"docRoot":15704,"docTitle":15705,"extension":15706,"i18nKey":15707,"isBlogPost":15708,"isWikiDoc":49,"isWikiIndex":15708,"layout":15709,"legacyPath":15709,"locale":15710,"localeSlug":15711,"meta":15712,"navigation":49,"path":15698,"seo":15713,"sourcePath":15714,"sourceStem":15707,"stem":15715,"wikiDepth":35,"__hash__":15716},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信.md","Four Major Communications",{"type":7,"value":8,"toc":15681},"minimark",[9,14,22,280,285,290,298,303,308,313,462,467,472,475,480,485,490,493,498,503,506,511,516,521,524,529,534,537,540,543,551,556,561,566,571,576,581,586,589,592,594,599,602,607,610,615,619,624,629,634,639,642,647,652,655,660,665,670,674,679,684,689,694,699,704,713,716,719,724,726,731,736,738,741,746,753,758,761,766,775,782,784,789,794,799,804,809,814,994,997,1000,1007,1012,1015,1022,1025,1028,1031,1036,1041,1046,1051,1054,1057,1060,1063,1066,1071,1074,1077,1082,1087,1090,1095,1100,1105,1108,1113,1116,1121,1126,1131,1134,1139,1146,1151,1156,1161,1168,1641,1646,1649,1652,1673,1678,1681,1683,1688,1693,1698,1703,1708,1713,1718,1723,1728,1733,1918,1923,1926,1931,1934,1939,1942,1947,1952,1957,1962,1967,1970,1973,1976,1979,1982,1987,1992,2002,2007,2012,2017,2022,2364,2368,2373,2378,2383,2388,2391,2394,2397,2402,2405,2408,2413,2418,2423,2426,2431,2436,2441,2444,2449,2452,2455,2482,2487,2492,2495,2500,2505,2510,2515,2522,2527,2532,2535,2538,2544,2549,2554,2573,2578,2583,2590,2595,2602,2816,2819,2842,2848,2856,2861,2864,2869,2872,2875,2880,2884,2889,2894,2899,2902,2907,2912,2917,2922,2925,2930,2933,2938,3117,3120,3125,3128,3133,3312,3317,3433,3438,3443,3448,3453,3455,3460,3465,3470,3475,3478,3483,3952,3957,3962,3967,3970,3975,3978,3980,3985,3990,4333,4338,4343,4347,4352,4357,4362,4367,4369,4374,4377,4382,4387,4392,4397,4402,4406,4411,4416,4421,4424,4429,4433,4438,4443,4446,4451,4456,4461,4466,4502,4504,4509,4514,4519,4530,4535,4540,4545,4550,4555,4558,4563,4568,4573,4578,4583,4588,4593,4598,4603,4608,4613,4616,4618,4623,4628,4808,4813,4818,4821,4826,4829,4834,4837,4842,5029,5032,5037,5040,5045,5050,5055,5060,5065,5067,5072,5077,5082,5087,5092,5095,5098,5101,5104,5109,5114,5119,5124,5129,5134,5139,5144,5556,5561,5566,5573,5578,5602,5605,5615,5619,5624,5629,5634,5639,5642,5649,5654,5659,5664,5672,5677,5687,5692,5697,5700,5705,5708,5713,5718,5723,5728,5733,5738,5914,5919,5922,5927,5933,5936,5941,5953,6184,6189,6194,6199,6202,6207,6212,6215,6220,6444,6446,6451,6454,6457,6460,6463,6468,6473,6478,6483,6488,6493,6498,6503,6508,6513,6518,6521,6526,6531,6534,6539,6544,6547,6552,6566,6573,6578,6581,6586,6591,6594,6597,6600,6603,6606,6609,6612,6615,6618,6624,6629,6632,7200,7205,7207,7212,7217,7222,7225,7234,7239,7244,7249,7252,7257,7260,7265,7268,7271,7274,7279,7282,7285,7287,7292,7297,7302,7307,7312,8113,8117,8122,8125,8130,8133,8136,8141,8144,8147,8150,8153,8156,8159,8164,8166,8171,8176,8181,8186,8191,8194,8196,8201,8206,8209,8212,8215,8220,8225,8230,8235,8251,8256,8261,8266,8271,8276,8281,8286,8291,8294,8298,8303,8483,8488,8667,8672,8677,8682,8687,8689,8694,8699,8704,8707,8710,8713,8716,8719,8722,8725,8728,8733,8738,8743,8748,8753,8758,8761,8764,8767,8778,8781,8784,8787,8792,8797,8802,8807,8812,8815,8820,8825,9442,9447,9452,9457,9462,9489,9492,9498,9503,9506,9509,9512,9515,9517,9522,9525,9530,9535,9540,9545,9550,9552,9559,9564,9569,9571,9574,9579,9584,9589,9594,9599,9602,9607,9610,9615,9620,9623,9628,9631,9636,9643,9648,9657,9662,9675,9680,9685,9690,9695,9700,9705,9710,9715,9720,9725,9727,9730,9735,9738,9745,9750,9758,9763,9769,9774,9779,9784,9791,9796,9801,9806,11016,11020,11025,11032,11037,11265,11270,11275,11280,11285,11288,11291,11294,11297,11302,11307,11312,11317,11320,11325,11332,11337,11339,11344,11347,11352,11355,11358,11361,11366,11371,11376,11381,11384,11389,11394,11399,11402,11405,11410,11415,11420,11425,11430,11433,11436,11439,11444,11449,11454,11459,11464,11466,11471,11474,11480,11483,11488,11493,11498,11503,11505,11508,11513,11516,11521,11526,11531,11541,11544,11554,11559,11564,11567,11569,11572,11575,11578,11583,11586,11589,11592,11595,11600,11605,11610,12743,12748,12753,12760,12762,12765,12768,12891,12895,12900,12905,12908,12910,12915,12920,12923,12928,12933,12938,12941,12946,12951,12956,12959,12964,12969,12974,12979,12984,12989,12994,12997,13000,13004,13009,13014,13024,13029,13034,13039,13044,13049,13052,13057,13062,13067,13072,13451,13456,13461,13466,13471,13473,13478,13483,13488,13491,13494,13499,13504,13915,13917,13922,13927,13932,13935,13938,13943,13950,13952,13957,13960,13965,13968,13973,13976,13981,13986,13991,13996,14001,14006,14008,14013,14016,14021,14024,14029,14034,14045,14050,14055,14060,14062,14067,14072,14075,14080,14085,14976,14980,14985,14990,14995,15000,15005,15010,15015,15020,15025,15030,15033,15036,15041,15044,15049,15054,15573,15575,15580,15585,15590,15593,15595,15600,15605,15610,15615,15618,15623,15628,15633,15638,15643,15648,15651,15656,15661,15667,15672,15677],[10,11,13],"h3",{"id":12},"introduction-to-communication-mechanisms-and-code-templates","Introduction to Communication Mechanisms and Code Templates",[15,16,17],"p",{},[18,19],"img",{"alt":20,"src":21},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image332.webp",[23,24,28],"pre",{"className":25,"code":26,"language":27,"meta":20,"style":20},"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",[29,30,31,44,51,77,83,89,110,116,143,149,155,160,191,196,210,215,244,249,262,274],"code",{"__ignoreMap":20},[32,33,36,40],"span",{"class":34,"line":35},"line",1,[32,37,39],{"class":38},"szBVR","#include",[32,41,43],{"class":42},"sZZnC"," \"rclcpp/rclcpp.hpp\"\n",[32,45,47],{"class":34,"line":46},2,[32,48,50],{"emptyLinePlaceholder":49},true,"\n",[32,52,54,57,61,65,68,71,74],{"class":34,"line":53},3,[32,55,56],{"class":38},"class",[32,58,60],{"class":59},"sScJk"," MyNode",[32,62,64],{"class":63},"sVt8B",": ",[32,66,67],{"class":38},"public",[32,69,70],{"class":59}," rclcpp",[32,72,73],{"class":63},"::",[32,75,76],{"class":59},"Node\n",[32,78,80],{"class":34,"line":79},4,[32,81,82],{"class":63},"{\n",[32,84,86],{"class":34,"line":85},5,[32,87,88],{"class":38},"  public:\n",[32,90,92,95,98,101,104,107],{"class":34,"line":91},6,[32,93,94],{"class":59},"    MyNode",[32,96,97],{"class":63},"():",[32,99,100],{"class":59},"Node",[32,102,103],{"class":63},"(",[32,105,106],{"class":42},"\"mynode_node_cpp\"",[32,108,109],{"class":63},")\n",[32,111,113],{"class":34,"line":112},7,[32,114,115],{"class":63},"    {\n",[32,117,119,122,124,128,131,134,137,140],{"class":34,"line":118},8,[32,120,121],{"class":59},"      RCLCPP_INFO",[32,123,103],{"class":63},[32,125,127],{"class":126},"sj4cs","this",[32,129,130],{"class":63},"->",[32,132,133],{"class":59},"get_logger",[32,135,136],{"class":63},"(),",[32,138,139],{"class":42},"\"Hello World!\"",[32,141,142],{"class":63},");\n",[32,144,146],{"class":34,"line":145},9,[32,147,148],{"class":63},"    }\n",[32,150,152],{"class":34,"line":151},10,[32,153,154],{"class":63},"};\n",[32,156,158],{"class":34,"line":157},11,[32,159,50],{"emptyLinePlaceholder":49},[32,161,163,166,169,171,173,177,180,183,186,189],{"class":34,"line":162},12,[32,164,165],{"class":38},"int",[32,167,168],{"class":59}," main",[32,170,103],{"class":63},[32,172,165],{"class":38},[32,174,176],{"class":175},"s4XuR"," argc",[32,178,179],{"class":63},", ",[32,181,182],{"class":38},"char",[32,184,185],{"class":38}," **",[32,187,188],{"class":175}," argv",[32,190,109],{"class":63},[32,192,194],{"class":34,"line":193},13,[32,195,82],{"class":63},[32,197,199,202,204,207],{"class":34,"line":198},14,[32,200,201],{"class":59},"  rclcpp",[32,203,73],{"class":63},[32,205,206],{"class":59},"init",[32,208,209],{"class":63},"(argc,argv);\n",[32,211,213],{"class":34,"line":212},15,[32,214,50],{"emptyLinePlaceholder":49},[32,216,218,220,222,225,227,230,232,235,238,241],{"class":34,"line":217},16,[32,219,201],{"class":59},[32,221,73],{"class":63},[32,223,224],{"class":59},"spin",[32,226,103],{"class":63},[32,228,229],{"class":59},"std",[32,231,73],{"class":63},[32,233,234],{"class":59},"make_shared",[32,236,237],{"class":63},"\u003C",[32,239,240],{"class":59},"MyNode",[32,242,243],{"class":63},">());\n",[32,245,247],{"class":34,"line":246},17,[32,248,50],{"emptyLinePlaceholder":49},[32,250,252,254,256,259],{"class":34,"line":251},18,[32,253,201],{"class":59},[32,255,73],{"class":63},[32,257,258],{"class":59},"shutdown",[32,260,261],{"class":63},"();\n",[32,263,265,268,271],{"class":34,"line":264},19,[32,266,267],{"class":38},"  return",[32,269,270],{"class":126}," 0",[32,272,273],{"class":63},";\n",[32,275,277],{"class":34,"line":276},20,[32,278,279],{"class":63},"}\n",[15,281,282],{},[18,283],{"alt":20,"src":284},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image333.webp",[15,286,287],{},[18,288],{"alt":20,"src":289},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image334.webp",[15,291,292],{},[293,294,295],"a",{"href":295,"rel":296},"https://snippet-generator.app/",[297],"nofollow",[15,299,300],{},[18,301],{"alt":20,"src":302},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image335.webp",[15,304,305],{},[18,306],{"alt":20,"src":307},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image336.webp",[15,309,310],{},[18,311],{"alt":20,"src":312},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image337.webp",[23,314,318],{"className":315,"code":316,"language":317,"meta":20,"style":20},"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",[29,319,320,324,329,334,339,344,349,354,359,364,369,374,379,384,389,393,398,402,407,411,416,421,427,433,439,445,451,457],{"__ignoreMap":20},[32,321,322],{"class":34,"line":35},[32,323,82],{},[32,325,326],{"class":34,"line":46},[32,327,328],{},"\"ROS2节点模板(C++)\": {\n",[32,330,331],{"class":34,"line":53},[32,332,333],{},"    \"prefix\": \"ros2_node_cpp\",\n",[32,335,336],{"class":34,"line":79},[32,337,338],{},"    \"body\": [\n",[32,340,341],{"class":34,"line":85},[32,342,343],{},"      \"#include \\\"rclcpp/rclcpp.hpp\\\"\",\n",[32,345,346],{"class":34,"line":91},[32,347,348],{},"      \"\",\n",[32,350,351],{"class":34,"line":112},[32,352,353],{},"      \"class MyNode: public rclcpp::Node\",\n",[32,355,356],{"class":34,"line":118},[32,357,358],{},"      \"{\",\n",[32,360,361],{"class":34,"line":145},[32,362,363],{},"      \"  public:\",\n",[32,365,366],{"class":34,"line":151},[32,367,368],{},"      \"    MyNode():Node(\\\"mynode_node_cpp\\\")\",\n",[32,370,371],{"class":34,"line":157},[32,372,373],{},"      \"    {\",\n",[32,375,376],{"class":34,"line":162},[32,377,378],{},"      \"      RCLCPP_INFO(this->get_logger(),\\\"Hello World!\\\");\",\n",[32,380,381],{"class":34,"line":193},[32,382,383],{},"      \"    }\",\n",[32,385,386],{"class":34,"line":198},[32,387,388],{},"      \"};\",\n",[32,390,391],{"class":34,"line":212},[32,392,348],{},[32,394,395],{"class":34,"line":217},[32,396,397],{},"      \"int main(int argc, char ** argv)\",\n",[32,399,400],{"class":34,"line":246},[32,401,358],{},[32,403,404],{"class":34,"line":251},[32,405,406],{},"      \"  rclcpp::init(argc,argv);\",\n",[32,408,409],{"class":34,"line":264},[32,410,348],{},[32,412,413],{"class":34,"line":276},[32,414,415],{},"      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\",\n",[32,417,419],{"class":34,"line":418},21,[32,420,348],{},[32,422,424],{"class":34,"line":423},22,[32,425,426],{},"      \"  rclcpp::shutdown();\",\n",[32,428,430],{"class":34,"line":429},23,[32,431,432],{},"      \"  return 0;\",\n",[32,434,436],{"class":34,"line":435},24,[32,437,438],{},"      \"}\"\n",[32,440,442],{"class":34,"line":441},25,[32,443,444],{},"    ],\n",[32,446,448],{"class":34,"line":447},26,[32,449,450],{},"    \"description\": \"ROS2节点模板(C++)\"\n",[32,452,454],{"class":34,"line":453},27,[32,455,456],{},"  }\n",[32,458,460],{"class":34,"line":459},28,[32,461,279],{},[15,463,464],{},[18,465],{"alt":20,"src":466},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image338.webp",[15,468,469],{},[18,470],{"alt":20,"src":471},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image339.webp",[473,474],"hr",{},[15,476,477],{},[18,478],{"alt":20,"src":479},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image340.webp",[15,481,482],{},[18,483],{"alt":20,"src":484},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image341.webp",[15,486,487],{},[18,488],{"alt":20,"src":489},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image342.webp",[15,491,492],{},"The first window is the server, and the second window is the client.",[15,494,495],{},[18,496],{"alt":20,"src":497},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image343.webp",[15,499,500],{},[18,501],{"alt":20,"src":502},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image344.webp",[15,504,505],{},"Communication involves at least two parties; a single person does not constitute communication.",[15,507,508],{},[18,509],{"alt":20,"src":510},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image345.webp",[15,512,513],{},[18,514],{"alt":20,"src":515},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image346.webp",[15,517,518],{},[18,519],{"alt":20,"src":520},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image347.webp",[15,522,523],{},"Interface-oriented, with consistent topics and data carriers, allows for seamless integration.",[15,525,526],{},[18,527],{"alt":20,"src":528},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image348.webp",[15,530,531],{},[18,532],{"alt":20,"src":533},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image349.webp",[15,535,536],{},"Topic Communication: Can only transmit data in one direction",[15,538,539],{},"Service Communication: Bidirectional communication where both parties can act as client and server. The client sends data to the server, and the server responds to the client.",[15,541,542],{},"Action Communication: It is very similar to service communication, with a final response sent from the server to the client, but it also continuously sends feedback to the client in between.",[15,544,545,546,550],{},"Parameter Service: The parameter service is based on ",[547,548,549],"strong",{},"service communication",". A parameter client first sends a request, then retrieves data from the parameter service's data pool. It can also modify data in the pool, but cannot delete it.",[15,552,553],{},[18,554],{"alt":20,"src":555},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image350.webp",[15,557,558],{},[18,559],{"alt":20,"src":560},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image351.webp",[15,562,563],{},[18,564],{"alt":20,"src":565},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image352.webp",[15,567,568],{},[18,569],{"alt":20,"src":570},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image353.webp",[15,572,573],{},[18,574],{"alt":20,"src":575},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image354.webp",[15,577,578],{},[18,579],{"alt":20,"src":580},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image355.webp",[15,582,583],{},[18,584],{"alt":20,"src":585},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image356.webp",[15,587,588],{},"Parameter communication does not require you to define your own interface file — the system will generate one automatically. However, developers cannot see this file, as it is encapsulated.",[15,590,591],{},"The data we operate on has been encapsulated into a parameter object.",[473,593],{},[15,595,596],{},[18,597],{"alt":20,"src":598},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image357.webp",[15,600,601],{},"ros2 pkg create + package name (can be written before or) + --build-type (build type) + ament_cmake / ament_python + --dependencies (dependencies) + rclcpp (ROS2 C++ client) + --node-name (node name) + node name",[15,603,604],{},[18,605],{"alt":20,"src":606},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image358.webp",[15,608,609],{},"Create a functional package in src.",[15,611,612],{},[18,613],{"alt":20,"src":614},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image359.webp",[10,616,618],{"id":617},"topic-communication_theory","Topic Communication_Theory",[15,620,621],{},[18,622],{"alt":20,"src":623},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image360.webp",[15,625,626],{},[18,627],{"alt":20,"src":628},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image361.webp",[15,630,631],{},[18,632],{"alt":20,"src":633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image362.webp",[15,635,636],{},[18,637],{"alt":20,"src":638},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image363.webp",[15,640,641],{},"In ROS1, communication between nodes requires going through the master. Each node that transmits data must register the relevant data with the master, and the master then matches the information.",[15,643,644],{},[18,645],{"alt":20,"src":646},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image364.webp",[15,648,649],{},[18,650],{"alt":20,"src":651},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image365.webp",[15,653,654],{},"A publisher sends data, and both subscribers will receive the data.",[15,656,657],{},[18,658],{"alt":20,"src":659},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image366.webp",[15,661,662],{},[18,663],{"alt":20,"src":664},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image367.webp",[15,666,667],{},[18,668],{"alt":20,"src":669},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image368.webp",[10,671,673],{"id":672},"topic-communication-experiment-1-c","Topic Communication Experiment 1 (C++)",[15,675,676],{},[18,677],{"alt":20,"src":678},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image369.webp",[15,680,681],{},[18,682],{"alt":20,"src":683},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image370.webp",[15,685,686],{},[18,687],{"alt":20,"src":688},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image371.webp",[15,690,691],{},[18,692],{"alt":20,"src":693},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image372.webp",[15,695,696],{},[18,697],{"alt":20,"src":698},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image373.webp",[15,700,701],{},[18,702],{"alt":20,"src":703},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image374.webp",[23,705,707],{"className":315,"code":706,"language":317,"meta":20,"style":20},"ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[29,708,709],{"__ignoreMap":20},[32,710,711],{"class":34,"line":35},[32,712,706],{},[15,714,715],{},"Dependencies also require std_msgs and base_interfaces_demo (which contains the custom interfaces we defined).",[15,717,718],{},"ros2 pkg create + package name (can be written at the beginning or the end) + --build-type + ament_cmake / ament_python + --dependencies + rclcpp (ROS2 C++ client) + --node-name + node name",[15,720,721],{},[18,722],{"alt":20,"src":723},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image375.webp",[473,725],{},[15,727,728],{},[18,729],{"alt":20,"src":730},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image376.webp",[15,732,733],{},[18,734],{"alt":20,"src":735},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image377.webp",[473,737],{},[15,739,740],{},"Publisher",[15,742,743],{},[18,744],{"alt":20,"src":745},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image378.webp",[15,747,748,749,752],{},"The timer is used to control the sending frequency, and a callback function ",[29,750,751],{},"timer_callback"," is executed within the timer.",[15,754,755],{},[18,756],{"alt":20,"src":757},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image379.webp",[15,759,760],{},"count_ is a counter; each time this callback function is executed, count_ increments by one.",[15,762,763],{},[18,764],{"alt":20,"src":765},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image380.webp",[15,767,768,769,771,772,774],{},"The ",[29,770,224],{}," function, once the program reaches this point, returns to the top. It returns to the top in order to call the callback function. Without this ",[29,773,224],{}," function, our callback function would not be executed.",[15,776,777,778,781],{},"From now on, whenever we create a node class object pointer, we must pass that pointer into the ",[29,779,780],{},"spin()"," function.",[473,783],{},[15,785,786],{},[18,787],{"alt":20,"src":788},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image381.webp",[15,790,791],{},[18,792],{"alt":20,"src":793},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image382.webp",[15,795,796],{},[18,797],{"alt":20,"src":798},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image383.webp",[15,800,801],{},[18,802],{"alt":20,"src":803},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image384.webp",[15,805,806],{},[18,807],{"alt":20,"src":808},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image385.webp",[15,810,811],{},[18,812],{"alt":20,"src":813},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image386.webp",[23,815,817],{"className":25,"code":816,"language":27,"meta":20,"style":20},"#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",[29,818,819,825,829,846,850,854,870,874,893,897,901,905,927,931,941,945,968,972,982,990],{"__ignoreMap":20},[32,820,821,823],{"class":34,"line":35},[32,822,39],{"class":38},[32,824,43],{"class":42},[32,826,827],{"class":34,"line":46},[32,828,50],{"emptyLinePlaceholder":49},[32,830,831,833,836,838,840,842,844],{"class":34,"line":53},[32,832,56],{"class":38},[32,834,835],{"class":59}," Talker",[32,837,64],{"class":63},[32,839,67],{"class":38},[32,841,70],{"class":59},[32,843,73],{"class":63},[32,845,76],{"class":59},[32,847,848],{"class":34,"line":79},[32,849,82],{"class":63},[32,851,852],{"class":34,"line":85},[32,853,88],{"class":38},[32,855,856,859,861,863,865,868],{"class":34,"line":91},[32,857,858],{"class":59},"    Talker",[32,860,97],{"class":63},[32,862,100],{"class":59},[32,864,103],{"class":63},[32,866,867],{"class":42},"\"talker_node_cpp\"",[32,869,109],{"class":63},[32,871,872],{"class":34,"line":112},[32,873,115],{"class":63},[32,875,876,878,880,882,884,886,888,891],{"class":34,"line":118},[32,877,121],{"class":59},[32,879,103],{"class":63},[32,881,127],{"class":126},[32,883,130],{"class":63},[32,885,133],{"class":59},[32,887,136],{"class":63},[32,889,890],{"class":42},"\"发布节点创建！\"",[32,892,142],{"class":63},[32,894,895],{"class":34,"line":145},[32,896,148],{"class":63},[32,898,899],{"class":34,"line":151},[32,900,154],{"class":63},[32,902,903],{"class":34,"line":157},[32,904,50],{"emptyLinePlaceholder":49},[32,906,907,909,911,913,915,917,919,921,923,925],{"class":34,"line":162},[32,908,165],{"class":38},[32,910,168],{"class":59},[32,912,103],{"class":63},[32,914,165],{"class":38},[32,916,176],{"class":175},[32,918,179],{"class":63},[32,920,182],{"class":38},[32,922,185],{"class":38},[32,924,188],{"class":175},[32,926,109],{"class":63},[32,928,929],{"class":34,"line":193},[32,930,82],{"class":63},[32,932,933,935,937,939],{"class":34,"line":198},[32,934,201],{"class":59},[32,936,73],{"class":63},[32,938,206],{"class":59},[32,940,209],{"class":63},[32,942,943],{"class":34,"line":212},[32,944,50],{"emptyLinePlaceholder":49},[32,946,947,949,951,953,955,957,959,961,963,966],{"class":34,"line":217},[32,948,201],{"class":59},[32,950,73],{"class":63},[32,952,224],{"class":59},[32,954,103],{"class":63},[32,956,229],{"class":59},[32,958,73],{"class":63},[32,960,234],{"class":59},[32,962,237],{"class":63},[32,964,965],{"class":59},"Talker",[32,967,243],{"class":63},[32,969,970],{"class":34,"line":246},[32,971,50],{"emptyLinePlaceholder":49},[32,973,974,976,978,980],{"class":34,"line":251},[32,975,201],{"class":59},[32,977,73],{"class":63},[32,979,258],{"class":59},[32,981,261],{"class":63},[32,983,984,986,988],{"class":34,"line":264},[32,985,267],{"class":38},[32,987,270],{"class":126},[32,989,273],{"class":63},[32,991,992],{"class":34,"line":276},[32,993,279],{"class":63},[15,995,996],{},"At this point, the program is in a suspended state and will keep running because of the spin function.",[15,998,999],{},"To exit, press Ctrl+C.",[15,1001,1002,1003,1006],{},"The type we want is in ",[29,1004,1005],{},"std_msgs",", so we need to add the header file.",[15,1008,1009],{},[18,1010],{"alt":20,"src":1011},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image387.webp",[15,1013,1014],{},"The first input parameter of create_publisher() is the topic name, which is a string.",[15,1016,1017,1018,1021],{},"The second input parameter of ",[29,1019,1020],{},"create_publisher()"," is related to QoS (Quality of Service). It is a queue depth represented by a number. For now, you can fill in 10 or 20, etc.",[15,1023,1024],{},"In other words, when the network quality is poor and messages cannot be sent, we can temporarily store the data in a queue. For example, if the queue is set to 10, it can hold up to 10 items. When the network recovers, we retrieve data from the queue and send it out.",[15,1026,1027],{},"Other entry parameters have default values, so you can ignore them for now.",[15,1029,1030],{},"The return value is a pointer to a publisher.",[15,1032,1033],{},[18,1034],{"alt":20,"src":1035},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image388.webp",[15,1037,1038],{},[18,1039],{"alt":20,"src":1040},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image389.webp",[15,1042,1043],{},[18,1044],{"alt":20,"src":1045},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image390.webp",[15,1047,1048],{},[18,1049],{"alt":20,"src":1050},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image391.webp",[15,1052,1053],{},"Create a timer. This function has a template, but the template has default values so it can be left unset.",[15,1055,1056],{},"Then three entry parameters,",[15,1058,1059],{},"The first input parameter is the duration, i.e., the period.",[15,1061,1062],{},"The second entry parameter is a callback function.",[15,1064,1065],{},"The third input parameter has a default value, so ignore it for now.",[15,1067,1068],{},[18,1069],{"alt":20,"src":1070},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image392.webp",[15,1072,1073],{},"The advantage of using this namespace is that in the first entry parameter, you can directly fill in the time and unit.",[15,1075,1076],{},"If it's 1s, write 1s; if it's 100ms, fill in 100ms.",[15,1078,1079],{},[18,1080],{"alt":20,"src":1081},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image393.webp",[15,1083,1084],{},[18,1085],{"alt":20,"src":1086},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image394.webp",[15,1088,1089],{},"This function also has a return value, which is a pointer related to the timer.",[15,1091,1092],{},[18,1093],{"alt":20,"src":1094},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image395.webp",[15,1096,1097],{},[18,1098],{"alt":20,"src":1099},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image396.webp",[15,1101,1102],{},[18,1103],{"alt":20,"src":1104},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image397.webp",[15,1106,1107],{},"This function has multiple overloads; choose the one that suits your needs.",[15,1109,1110],{},[18,1111],{"alt":20,"src":1112},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image398.webp",[15,1114,1115],{},"To publish an object, you must first create it.",[15,1117,1118],{},[18,1119],{"alt":20,"src":1120},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image399.webp",[15,1122,1123],{},[18,1124],{"alt":20,"src":1125},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image400.webp",[15,1127,1128],{},[18,1129],{"alt":20,"src":1130},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image401.webp",[15,1132,1133],{},"Convert count to a string and send it.",[15,1135,1136],{},[18,1137],{"alt":20,"src":1138},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image402.webp",[15,1140,1141,1142,1145],{},"Because it is of type ",[29,1143,1144],{},"std::string",", we need to convert it to a C-style string.",[15,1147,1148],{},[18,1149],{"alt":20,"src":1150},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image403.webp",[15,1152,1153],{},[18,1154],{"alt":20,"src":1155},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image404.webp",[15,1157,1158],{},[18,1159],{"alt":20,"src":1160},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image405.webp",[15,1162,1163,1164,1167],{},"Try to assign an initial value of 0 to ",[29,1165,1166],{},"count"," in the constructor whenever possible.",[23,1169,1171],{"className":25,"code":1170,"language":27,"meta":20,"style":20},"#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",[29,1172,1173,1179,1186,1190,1208,1212,1228,1232,1236,1260,1264,1282,1324,1370,1374,1379,1390,1394,1418,1446,1478,1489,1493,1517,1529,1537,1541,1545,1567,1572,1583,1588,1611,1616,1627,1636],{"__ignoreMap":20},[32,1174,1175,1177],{"class":34,"line":35},[32,1176,39],{"class":38},[32,1178,43],{"class":42},[32,1180,1181,1183],{"class":34,"line":46},[32,1182,39],{"class":38},[32,1184,1185],{"class":42}," \"std_msgs/msg/string.hpp\"\n",[32,1187,1188],{"class":34,"line":53},[32,1189,50],{"emptyLinePlaceholder":49},[32,1191,1192,1195,1198,1201,1203,1206],{"class":34,"line":79},[32,1193,1194],{"class":38},"using",[32,1196,1197],{"class":38}," namespace",[32,1199,1200],{"class":59}," std",[32,1202,73],{"class":63},[32,1204,1205],{"class":59},"chrono_literals",[32,1207,273],{"class":63},[32,1209,1210],{"class":34,"line":85},[32,1211,50],{"emptyLinePlaceholder":49},[32,1213,1214,1216,1218,1220,1222,1224,1226],{"class":34,"line":91},[32,1215,56],{"class":38},[32,1217,835],{"class":59},[32,1219,64],{"class":63},[32,1221,67],{"class":38},[32,1223,70],{"class":59},[32,1225,73],{"class":63},[32,1227,76],{"class":59},[32,1229,1230],{"class":34,"line":112},[32,1231,82],{"class":63},[32,1233,1234],{"class":34,"line":118},[32,1235,88],{"class":38},[32,1237,1238,1240,1242,1244,1246,1248,1251,1253,1255,1258],{"class":34,"line":145},[32,1239,858],{"class":59},[32,1241,97],{"class":63},[32,1243,100],{"class":59},[32,1245,103],{"class":63},[32,1247,867],{"class":42},[32,1249,1250],{"class":63},")，",[32,1252,1166],{"class":59},[32,1254,103],{"class":63},[32,1256,1257],{"class":126},"0",[32,1259,109],{"class":63},[32,1261,1262],{"class":34,"line":151},[32,1263,115],{"class":63},[32,1265,1266,1268,1270,1272,1274,1276,1278,1280],{"class":34,"line":157},[32,1267,121],{"class":59},[32,1269,103],{"class":63},[32,1271,127],{"class":126},[32,1273,130],{"class":63},[32,1275,133],{"class":59},[32,1277,136],{"class":63},[32,1279,890],{"class":42},[32,1281,142],{"class":63},[32,1283,1284,1287,1290,1293,1296,1298,1300,1302,1305,1308,1311,1313,1316,1319,1322],{"class":34,"line":162},[32,1285,1286],{"class":63},"      publisher_ ",[32,1288,1289],{"class":38},"=",[32,1291,1292],{"class":126}," this",[32,1294,1295],{"class":63},"->create_publisher",[32,1297,237],{"class":38},[32,1299,1005],{"class":59},[32,1301,73],{"class":63},[32,1303,1304],{"class":59},"msg",[32,1306,1307],{"class":63},"::String",[32,1309,1310],{"class":38},">",[32,1312,103],{"class":63},[32,1314,1315],{"class":42},"\"chatter\"",[32,1317,1318],{"class":63},",",[32,1320,1321],{"class":126},"10",[32,1323,142],{"class":63},[32,1325,1326,1329,1331,1333,1335,1338,1340,1343,1346,1348,1350,1352,1355,1357,1360,1362,1365,1367],{"class":34,"line":193},[32,1327,1328],{"class":63},"      timer_ ",[32,1330,1289],{"class":38},[32,1332,1292],{"class":126},[32,1334,130],{"class":63},[32,1336,1337],{"class":59},"create_wall_timer",[32,1339,103],{"class":63},[32,1341,1342],{"class":126},"1",[32,1344,1345],{"class":38},"s",[32,1347,1318],{"class":63},[32,1349,229],{"class":59},[32,1351,73],{"class":63},[32,1353,1354],{"class":59},"bind",[32,1356,103],{"class":63},[32,1358,1359],{"class":38},"&",[32,1361,965],{"class":59},[32,1363,1364],{"class":63},"::on_timer,",[32,1366,127],{"class":126},[32,1368,1369],{"class":63},"));\n",[32,1371,1372],{"class":34,"line":198},[32,1373,148],{"class":63},[32,1375,1376],{"class":34,"line":212},[32,1377,1378],{"class":38},"  private:\n",[32,1380,1381,1384,1387],{"class":34,"line":217},[32,1382,1383],{"class":38},"    void",[32,1385,1386],{"class":59}," on_timer",[32,1388,1389],{"class":63},"()\n",[32,1391,1392],{"class":34,"line":246},[32,1393,115],{"class":63},[32,1395,1396,1399,1402,1404,1407,1409,1411,1413,1416],{"class":34,"line":251},[32,1397,1398],{"class":38},"      auto",[32,1400,1401],{"class":63}," message ",[32,1403,1289],{"class":38},[32,1405,1406],{"class":59}," std_msgs",[32,1408,73],{"class":63},[32,1410,1304],{"class":59},[32,1412,73],{"class":63},[32,1414,1415],{"class":59},"String",[32,1417,261],{"class":63},[32,1419,1420,1423,1425,1428,1431,1433,1435,1438,1441,1444],{"class":34,"line":264},[32,1421,1422],{"class":63},"      message.data ",[32,1424,1289],{"class":38},[32,1426,1427],{"class":42}," \"hello world!\"",[32,1429,1430],{"class":38}," +",[32,1432,1200],{"class":59},[32,1434,73],{"class":63},[32,1436,1437],{"class":59},"to_string",[32,1439,1440],{"class":63},"(count",[32,1442,1443],{"class":38},"++",[32,1445,142],{"class":63},[32,1447,1448,1450,1452,1454,1456,1458,1460,1463,1466,1469,1472,1475],{"class":34,"line":276},[32,1449,121],{"class":59},[32,1451,103],{"class":63},[32,1453,127],{"class":126},[32,1455,130],{"class":63},[32,1457,133],{"class":59},[32,1459,136],{"class":63},[32,1461,1462],{"class":42},"\"发布方发布的消息：",[32,1464,1465],{"class":126},"%s",[32,1467,1468],{"class":42},"\"",[32,1470,1471],{"class":63},",message.data.",[32,1473,1474],{"class":59},"c_str",[32,1476,1477],{"class":63},"());\n",[32,1479,1480,1483,1486],{"class":34,"line":418},[32,1481,1482],{"class":63},"      publisher_->",[32,1484,1485],{"class":59},"publish",[32,1487,1488],{"class":63},"(message);\n",[32,1490,1491],{"class":34,"line":423},[32,1492,148],{"class":63},[32,1494,1495,1498,1500,1502,1504,1506,1508,1510,1512,1514],{"class":34,"line":429},[32,1496,1497],{"class":59},"    rclcpp",[32,1499,73],{"class":63},[32,1501,740],{"class":59},[32,1503,237],{"class":63},[32,1505,1005],{"class":59},[32,1507,73],{"class":63},[32,1509,1304],{"class":59},[32,1511,73],{"class":63},[32,1513,1415],{"class":59},[32,1515,1516],{"class":63},">::SharedPtr publisher_;\n",[32,1518,1519,1521,1523,1526],{"class":34,"line":435},[32,1520,1497],{"class":59},[32,1522,73],{"class":63},[32,1524,1525],{"class":59},"TimerBase",[32,1527,1528],{"class":63},"::SharedPtr timer_;\n",[32,1530,1531,1534],{"class":34,"line":441},[32,1532,1533],{"class":38},"    size_t",[32,1535,1536],{"class":63}," count;\n",[32,1538,1539],{"class":34,"line":447},[32,1540,154],{"class":63},[32,1542,1543],{"class":34,"line":453},[32,1544,50],{"emptyLinePlaceholder":49},[32,1546,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565],{"class":34,"line":459},[32,1548,165],{"class":38},[32,1550,168],{"class":59},[32,1552,103],{"class":63},[32,1554,165],{"class":38},[32,1556,176],{"class":175},[32,1558,179],{"class":63},[32,1560,182],{"class":38},[32,1562,185],{"class":38},[32,1564,188],{"class":175},[32,1566,109],{"class":63},[32,1568,1570],{"class":34,"line":1569},29,[32,1571,82],{"class":63},[32,1573,1575,1577,1579,1581],{"class":34,"line":1574},30,[32,1576,201],{"class":59},[32,1578,73],{"class":63},[32,1580,206],{"class":59},[32,1582,209],{"class":63},[32,1584,1586],{"class":34,"line":1585},31,[32,1587,50],{"emptyLinePlaceholder":49},[32,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609],{"class":34,"line":1590},32,[32,1592,201],{"class":59},[32,1594,73],{"class":63},[32,1596,224],{"class":59},[32,1598,103],{"class":63},[32,1600,229],{"class":59},[32,1602,73],{"class":63},[32,1604,234],{"class":59},[32,1606,237],{"class":63},[32,1608,965],{"class":59},[32,1610,243],{"class":63},[32,1612,1614],{"class":34,"line":1613},33,[32,1615,50],{"emptyLinePlaceholder":49},[32,1617,1619,1621,1623,1625],{"class":34,"line":1618},34,[32,1620,201],{"class":59},[32,1622,73],{"class":63},[32,1624,258],{"class":59},[32,1626,261],{"class":63},[32,1628,1630,1632,1634],{"class":34,"line":1629},35,[32,1631,267],{"class":38},[32,1633,270],{"class":126},[32,1635,273],{"class":63},[32,1637,1639],{"class":34,"line":1638},36,[32,1640,279],{"class":63},[15,1642,1643],{},[18,1644],{"alt":20,"src":1645},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image406.webp",[15,1647,1648],{},"But it doesn't necessarily mean the message was actually published.",[15,1650,1651],{},"Verification method:",[23,1653,1657],{"className":1654,"code":1655,"language":1656,"meta":20,"style":20},"language-bash shiki shiki-themes github-light github-dark","ros2 topic echo /xxx\n","bash",[29,1658,1659],{"__ignoreMap":20},[32,1660,1661,1664,1667,1670],{"class":34,"line":35},[32,1662,1663],{"class":59},"ros2",[32,1665,1666],{"class":42}," topic",[32,1668,1669],{"class":42}," echo",[32,1671,1672],{"class":42}," /xxx\n",[15,1674,1675],{},[18,1676],{"alt":20,"src":1677},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image407.webp",[15,1679,1680],{},"This is how you can confirm that the message was published to the chatter topic.",[473,1682],{},[15,1684,1685],{},[18,1686],{"alt":20,"src":1687},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image408.webp",[15,1689,1690],{},[18,1691],{"alt":20,"src":1692},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image409.webp",[15,1694,1695],{},[18,1696],{"alt":20,"src":1697},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image410.webp",[15,1699,1700],{},[18,1701],{"alt":20,"src":1702},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image411.webp",[15,1704,1705],{},[18,1706],{"alt":20,"src":1707},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image412.webp",[15,1709,1710],{},[18,1711],{"alt":20,"src":1712},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image413.webp",[15,1714,1715],{},[18,1716],{"alt":20,"src":1717},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image414.webp",[15,1719,1720],{},[18,1721],{"alt":20,"src":1722},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image415.webp",[15,1724,1725],{},[18,1726],{"alt":20,"src":1727},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image416.webp",[15,1729,1730],{},[18,1731],{"alt":20,"src":1732},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image417.webp",[23,1734,1736],{"className":25,"code":1735,"language":27,"meta":20,"style":20},"#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",[29,1737,1738,1744,1748,1765,1769,1774,1790,1794,1814,1818,1822,1826,1850,1854,1864,1868,1891,1895,1905,1914],{"__ignoreMap":20},[32,1739,1740,1742],{"class":34,"line":35},[32,1741,39],{"class":38},[32,1743,43],{"class":42},[32,1745,1746],{"class":34,"line":46},[32,1747,50],{"emptyLinePlaceholder":49},[32,1749,1750,1752,1755,1757,1759,1761,1763],{"class":34,"line":53},[32,1751,56],{"class":38},[32,1753,1754],{"class":59}," Listener",[32,1756,64],{"class":63},[32,1758,67],{"class":38},[32,1760,70],{"class":59},[32,1762,73],{"class":63},[32,1764,76],{"class":59},[32,1766,1767],{"class":34,"line":79},[32,1768,82],{"class":63},[32,1770,1771],{"class":34,"line":85},[32,1772,1773],{"class":38},"public:\n",[32,1775,1776,1779,1781,1783,1785,1788],{"class":34,"line":91},[32,1777,1778],{"class":59},"    Listener",[32,1780,97],{"class":63},[32,1782,100],{"class":59},[32,1784,103],{"class":63},[32,1786,1787],{"class":42},"\"listener_node_cpp\"",[32,1789,109],{"class":63},[32,1791,1792],{"class":34,"line":112},[32,1793,115],{"class":63},[32,1795,1796,1799,1801,1803,1805,1807,1809,1812],{"class":34,"line":118},[32,1797,1798],{"class":59},"        RCLCPP_INFO",[32,1800,103],{"class":63},[32,1802,127],{"class":126},[32,1804,130],{"class":63},[32,1806,133],{"class":59},[32,1808,136],{"class":63},[32,1810,1811],{"class":42},"\"订阅方创建!\"",[32,1813,142],{"class":63},[32,1815,1816],{"class":34,"line":145},[32,1817,148],{"class":63},[32,1819,1820],{"class":34,"line":151},[32,1821,154],{"class":63},[32,1823,1824],{"class":34,"line":157},[32,1825,50],{"emptyLinePlaceholder":49},[32,1827,1828,1830,1832,1834,1836,1838,1840,1842,1845,1847],{"class":34,"line":162},[32,1829,165],{"class":38},[32,1831,168],{"class":59},[32,1833,103],{"class":63},[32,1835,165],{"class":38},[32,1837,176],{"class":175},[32,1839,179],{"class":63},[32,1841,182],{"class":38},[32,1843,1844],{"class":38}," *",[32,1846,188],{"class":175},[32,1848,1849],{"class":63},"[])\n",[32,1851,1852],{"class":34,"line":193},[32,1853,82],{"class":63},[32,1855,1856,1858,1860,1862],{"class":34,"line":198},[32,1857,1497],{"class":59},[32,1859,73],{"class":63},[32,1861,206],{"class":59},[32,1863,209],{"class":63},[32,1865,1866],{"class":34,"line":212},[32,1867,50],{"emptyLinePlaceholder":49},[32,1869,1870,1872,1874,1876,1878,1880,1882,1884,1886,1889],{"class":34,"line":217},[32,1871,1497],{"class":59},[32,1873,73],{"class":63},[32,1875,224],{"class":59},[32,1877,103],{"class":63},[32,1879,229],{"class":59},[32,1881,73],{"class":63},[32,1883,234],{"class":59},[32,1885,237],{"class":63},[32,1887,1888],{"class":59},"Listener",[32,1890,243],{"class":63},[32,1892,1893],{"class":34,"line":246},[32,1894,50],{"emptyLinePlaceholder":49},[32,1896,1897,1899,1901,1903],{"class":34,"line":251},[32,1898,1497],{"class":59},[32,1900,73],{"class":63},[32,1902,258],{"class":59},[32,1904,261],{"class":63},[32,1906,1907,1910,1912],{"class":34,"line":264},[32,1908,1909],{"class":38},"    return",[32,1911,270],{"class":126},[32,1913,273],{"class":63},[32,1915,1916],{"class":34,"line":276},[32,1917,279],{"class":63},[15,1919,1920],{},[18,1921],{"alt":20,"src":1922},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image418.webp",[15,1924,1925],{},"Don't forget to edit the configuration file before compiling.",[15,1927,1928],{},[18,1929],{"alt":20,"src":1930},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image419.webp",[15,1932,1933],{},"The dependency package has been automatically generated, so you don't need to worry about it.",[15,1935,1936],{},[18,1937],{"alt":20,"src":1938},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image420.webp",[15,1940,1941],{},"Mainly revise these three major parts.",[15,1943,1944],{},[18,1945],{"alt":20,"src":1946},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image421.webp",[15,1948,1949],{},[18,1950],{"alt":20,"src":1951},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image422.webp",[15,1953,1954],{},[18,1955],{"alt":20,"src":1956},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image423.webp",[15,1958,1959],{},[18,1960],{"alt":20,"src":1961},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image424.webp",[15,1963,1964],{},[18,1965],{"alt":20,"src":1966},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image425.webp",[15,1968,1969],{},"There are a total of 5 input parameters, with the last two having default values.",[15,1971,1972],{},"The first entry parameter is the topic name, which must match the publisher's.",[15,1974,1975],{},"The second input parameter is QoS, which stands for Quality of Service management, queue depth. You can temporarily set it to 10 or 20 arbitrarily; refer to the QoS explanation on the publisher side.",[15,1977,1978],{},"The third entry parameter is a callback function. Once data is received, this callback function is triggered.",[15,1980,1981],{},"The return value is a pointer to a subscription object.",[15,1983,1984],{},[18,1985],{"alt":20,"src":1986},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image426.webp",[15,1988,1989],{},[18,1990],{"alt":20,"src":1991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image427.webp",[15,1993,1994,1997,1998,2001],{},[29,1995,1996],{},"std::placeholders::_1"," is a placeholder, where ",[29,1999,2000],{},"_1"," refers to the first argument. In this context, a message should normally be provided.",[15,2003,2004],{},[18,2005],{"alt":20,"src":2006},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image428.webp",[15,2008,2009],{},[18,2010],{"alt":20,"src":2011},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image429.webp",[15,2013,2014],{},[18,2015],{"alt":20,"src":2016},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image430.webp",[15,2018,2019],{},[18,2020],{"alt":20,"src":2021},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image431.webp",[23,2023,2025],{"className":25,"code":2024,"language":27,"meta":20,"style":20},"#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",[29,2026,2027,2033,2039,2043,2059,2063,2067,2081,2085,2103,2166,2170,2174,2179,2208,2212,2240,2244,2268,2272,2276,2298,2302,2312,2316,2338,2342,2352,2360],{"__ignoreMap":20},[32,2028,2029,2031],{"class":34,"line":35},[32,2030,39],{"class":38},[32,2032,43],{"class":42},[32,2034,2035,2037],{"class":34,"line":46},[32,2036,39],{"class":38},[32,2038,1185],{"class":42},[32,2040,2041],{"class":34,"line":53},[32,2042,50],{"emptyLinePlaceholder":49},[32,2044,2045,2047,2049,2051,2053,2055,2057],{"class":34,"line":79},[32,2046,56],{"class":38},[32,2048,1754],{"class":59},[32,2050,64],{"class":63},[32,2052,67],{"class":38},[32,2054,70],{"class":59},[32,2056,73],{"class":63},[32,2058,76],{"class":59},[32,2060,2061],{"class":34,"line":85},[32,2062,82],{"class":63},[32,2064,2065],{"class":34,"line":91},[32,2066,1773],{"class":38},[32,2068,2069,2071,2073,2075,2077,2079],{"class":34,"line":112},[32,2070,1778],{"class":59},[32,2072,97],{"class":63},[32,2074,100],{"class":59},[32,2076,103],{"class":63},[32,2078,1787],{"class":42},[32,2080,109],{"class":63},[32,2082,2083],{"class":34,"line":118},[32,2084,115],{"class":63},[32,2086,2087,2089,2091,2093,2095,2097,2099,2101],{"class":34,"line":145},[32,2088,1798],{"class":59},[32,2090,103],{"class":63},[32,2092,127],{"class":126},[32,2094,130],{"class":63},[32,2096,133],{"class":59},[32,2098,136],{"class":63},[32,2100,1811],{"class":42},[32,2102,142],{"class":63},[32,2104,2105,2108,2110,2112,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2152,2154,2156,2158,2160,2163],{"class":34,"line":151},[32,2106,2107],{"class":63},"        subscription_ ",[32,2109,1289],{"class":38},[32,2111,1292],{"class":126},[32,2113,2114],{"class":63},"->create_subscription",[32,2116,237],{"class":38},[32,2118,1005],{"class":59},[32,2120,73],{"class":63},[32,2122,1304],{"class":59},[32,2124,1307],{"class":63},[32,2126,1310],{"class":38},[32,2128,103],{"class":63},[32,2130,1315],{"class":42},[32,2132,1318],{"class":63},[32,2134,1321],{"class":126},[32,2136,1318],{"class":63},[32,2138,229],{"class":59},[32,2140,73],{"class":63},[32,2142,1354],{"class":59},[32,2144,103],{"class":63},[32,2146,1359],{"class":38},[32,2148,1888],{"class":59},[32,2150,2151],{"class":63},"::do_callback,",[32,2153,127],{"class":126},[32,2155,1318],{"class":63},[32,2157,229],{"class":59},[32,2159,73],{"class":63},[32,2161,2162],{"class":59},"placeholders",[32,2164,2165],{"class":63},"::_1));\n",[32,2167,2168],{"class":34,"line":157},[32,2169,50],{"emptyLinePlaceholder":49},[32,2171,2172],{"class":34,"line":162},[32,2173,148],{"class":63},[32,2175,2176],{"class":34,"line":193},[32,2177,2178],{"class":38},"private:\n",[32,2180,2181,2183,2186,2188,2191,2193,2195,2197,2199,2201,2204,2206],{"class":34,"line":198},[32,2182,1383],{"class":38},[32,2184,2185],{"class":59}," do_callback",[32,2187,103],{"class":63},[32,2189,2190],{"class":38},"const",[32,2192,1406],{"class":59},[32,2194,73],{"class":63},[32,2196,1304],{"class":59},[32,2198,73],{"class":63},[32,2200,1415],{"class":59},[32,2202,2203],{"class":38}," &",[32,2205,1304],{"class":175},[32,2207,109],{"class":63},[32,2209,2210],{"class":34,"line":212},[32,2211,115],{"class":63},[32,2213,2214,2216,2218,2220,2222,2224,2226,2229,2231,2233,2236,2238],{"class":34,"line":217},[32,2215,1798],{"class":59},[32,2217,103],{"class":63},[32,2219,127],{"class":126},[32,2221,130],{"class":63},[32,2223,133],{"class":59},[32,2225,136],{"class":63},[32,2227,2228],{"class":42},"\"订阅到的消息是:",[32,2230,1465],{"class":126},[32,2232,1468],{"class":42},[32,2234,2235],{"class":63},",msg.data.",[32,2237,1474],{"class":59},[32,2239,1477],{"class":63},[32,2241,2242],{"class":34,"line":246},[32,2243,148],{"class":63},[32,2245,2246,2248,2250,2253,2255,2257,2259,2261,2263,2265],{"class":34,"line":251},[32,2247,1497],{"class":59},[32,2249,73],{"class":63},[32,2251,2252],{"class":59},"Subscription",[32,2254,237],{"class":63},[32,2256,1005],{"class":59},[32,2258,73],{"class":63},[32,2260,1304],{"class":59},[32,2262,73],{"class":63},[32,2264,1415],{"class":59},[32,2266,2267],{"class":63},">::SharedPtr subscription_;\n",[32,2269,2270],{"class":34,"line":264},[32,2271,154],{"class":63},[32,2273,2274],{"class":34,"line":276},[32,2275,50],{"emptyLinePlaceholder":49},[32,2277,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296],{"class":34,"line":418},[32,2279,165],{"class":38},[32,2281,168],{"class":59},[32,2283,103],{"class":63},[32,2285,165],{"class":38},[32,2287,176],{"class":175},[32,2289,179],{"class":63},[32,2291,182],{"class":38},[32,2293,1844],{"class":38},[32,2295,188],{"class":175},[32,2297,1849],{"class":63},[32,2299,2300],{"class":34,"line":423},[32,2301,82],{"class":63},[32,2303,2304,2306,2308,2310],{"class":34,"line":429},[32,2305,1497],{"class":59},[32,2307,73],{"class":63},[32,2309,206],{"class":59},[32,2311,209],{"class":63},[32,2313,2314],{"class":34,"line":435},[32,2315,50],{"emptyLinePlaceholder":49},[32,2317,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336],{"class":34,"line":441},[32,2319,1497],{"class":59},[32,2321,73],{"class":63},[32,2323,224],{"class":59},[32,2325,103],{"class":63},[32,2327,229],{"class":59},[32,2329,73],{"class":63},[32,2331,234],{"class":59},[32,2333,237],{"class":63},[32,2335,1888],{"class":59},[32,2337,243],{"class":63},[32,2339,2340],{"class":34,"line":447},[32,2341,50],{"emptyLinePlaceholder":49},[32,2343,2344,2346,2348,2350],{"class":34,"line":453},[32,2345,1497],{"class":59},[32,2347,73],{"class":63},[32,2349,258],{"class":59},[32,2351,261],{"class":63},[32,2353,2354,2356,2358],{"class":34,"line":459},[32,2355,1909],{"class":38},[32,2357,270],{"class":126},[32,2359,273],{"class":63},[32,2361,2362],{"class":34,"line":1569},[32,2363,279],{"class":63},[10,2365,2367],{"id":2366},"topic-communication-custom-interface-messages","Topic Communication - Custom Interface Messages",[15,2369,2370],{},[18,2371],{"alt":20,"src":2372},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image432.webp",[15,2374,2375],{},[18,2376],{"alt":20,"src":2377},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image433.webp",[15,2379,2380],{},[18,2381],{"alt":20,"src":2382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image434.webp",[15,2384,2385],{},[18,2386],{"alt":20,"src":2387},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image435.webp",[15,2389,2390],{},"Build dependencies",[15,2392,2393],{},"Install dependencies",[15,2395,2396],{},"The functional package group to which the current functional package belongs",[15,2398,2399],{},[18,2400],{"alt":20,"src":2401},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image436.webp",[15,2403,2404],{},"find_package is used to pass along build dependencies.",[15,2406,2407],{},"Then you also need to specify the path to the interface file currently being built (with this setting, the .msg file can be converted into the corresponding C++ and Python code).",[15,2409,2410],{},[18,2411],{"alt":20,"src":2412},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image437.webp",[15,2414,2415],{},[18,2416],{"alt":20,"src":2417},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image438.webp",[15,2419,2420],{},[18,2421],{"alt":20,"src":2422},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image439.webp",[15,2424,2425],{},"The filename can be customized, but the first letter must be capitalized.",[15,2427,2428],{},[18,2429],{"alt":20,"src":2430},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image440.webp",[15,2432,2433],{},[18,2434],{"alt":20,"src":2435},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image441.webp",[15,2437,2438],{},[18,2439],{"alt":20,"src":2440},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image442.webp",[15,2442,2443],{},"After writing it, the test_depend reported an error.",[15,2445,2446],{},[18,2447],{"alt":20,"src":2448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image443.webp",[15,2450,2451],{},"Just delete it.",[15,2453,2454],{},"The build dependencies start with rosidl. Let's check with grep.",[23,2456,2458],{"className":1654,"code":2457,"language":1656,"meta":20,"style":20},"ros2 pkg list | grep -i rosidl\n",[29,2459,2460],{"__ignoreMap":20},[32,2461,2462,2464,2467,2470,2473,2476,2479],{"class":34,"line":35},[32,2463,1663],{"class":59},[32,2465,2466],{"class":42}," pkg",[32,2468,2469],{"class":42}," list",[32,2471,2472],{"class":38}," |",[32,2474,2475],{"class":59}," grep",[32,2477,2478],{"class":126}," -i",[32,2480,2481],{"class":42}," rosidl\n",[15,2483,2484],{},[18,2485],{"alt":20,"src":2486},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image444.webp",[15,2488,2489],{},[18,2490],{"alt":20,"src":2491},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image445.webp",[15,2493,2494],{},"We are using this one, just copy it directly.",[15,2496,2497],{},[18,2498],{"alt":20,"src":2499},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image446.webp",[15,2501,2502],{},[18,2503],{"alt":20,"src":2504},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image447.webp",[15,2506,2507],{},[18,2508],{"alt":20,"src":2509},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image448.webp",[15,2511,2512],{},[18,2513],{"alt":20,"src":2514},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image449.webp",[15,2516,2517,2518,2521],{},"In the list, the corresponding function package group is no longer present, and you need to write ",[29,2519,2520],{},"rosidl_interface_packages"," yourself.",[15,2523,2524],{},[18,2525],{"alt":20,"src":2526},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image450.webp",[15,2528,2529],{},[18,2530],{"alt":20,"src":2531},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image451.webp",[15,2533,2534],{},"This dependency should be the same as the build dependency.",[15,2536,2537],{},"Then we need to generate source code for the interface file.",[15,2539,2540,2541,781],{},"Need to use the ",[29,2542,2543],{},"rosidl_generate_interfaces",[15,2545,2546],{},[18,2547],{"alt":20,"src":2548},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image452.webp",[15,2550,2551],{},[18,2552],{"alt":20,"src":2553},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image453.webp",[23,2555,2557],{"className":1654,"code":2556,"language":1656,"meta":20,"style":20},"colcon build --packages-select base_interfaces_demo\n",[29,2558,2559],{"__ignoreMap":20},[32,2560,2561,2564,2567,2570],{"class":34,"line":35},[32,2562,2563],{"class":59},"colcon",[32,2565,2566],{"class":42}," build",[32,2568,2569],{"class":126}," --packages-select",[32,2571,2572],{"class":42}," base_interfaces_demo\n",[15,2574,2575],{},[18,2576],{"alt":20,"src":2577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image454.webp",[15,2579,2580],{},[18,2581],{"alt":20,"src":2582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image455.webp",[15,2584,2585,2586,2589],{},"Will generate the ",[29,2587,2588],{},"student.hpp"," code in the install space.",[15,2591,2592],{},[18,2593],{"alt":20,"src":2594},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image456.webp",[15,2596,2597,2598,2601],{},"Here's the C++ code to generate the ",[29,2599,2600],{},".msg"," file content you provided:",[23,2603,2605],{"className":25,"code":2604,"language":27,"meta":20,"style":20},"#include \u003Ciostream>\n#include \u003Cfstream>\n#include \u003Cstring>\n\nint main() {\n    std::string msgContent = R\"(# 以上.msg生成C++的\n# This is a sample .msg file for ROS\n\nstring data\nint32 number\nfloat64 value)\";\n\n    std::ofstream outFile(\"sample.msg\");\n    if (outFile.is_open()) {\n        outFile \u003C\u003C msgContent;\n        outFile.close();\n        std::cout \u003C\u003C \"sample.msg file generated successfully.\" \u003C\u003C std::endl;\n    } else {\n        std::cerr \u003C\u003C \"Failed to create sample.msg file.\" \u003C\u003C std::endl;\n        return 1;\n    }\n\n    return 0;\n}\n",[29,2606,2607,2614,2621,2628,2632,2641,2654,2659,2663,2668,2673,2680,2684,2701,2715,2726,2736,2757,2768,2786,2796,2800,2804,2812],{"__ignoreMap":20},[32,2608,2609,2611],{"class":34,"line":35},[32,2610,39],{"class":38},[32,2612,2613],{"class":42}," \u003Ciostream>\n",[32,2615,2616,2618],{"class":34,"line":46},[32,2617,39],{"class":38},[32,2619,2620],{"class":42}," \u003Cfstream>\n",[32,2622,2623,2625],{"class":34,"line":53},[32,2624,39],{"class":38},[32,2626,2627],{"class":42}," \u003Cstring>\n",[32,2629,2630],{"class":34,"line":79},[32,2631,50],{"emptyLinePlaceholder":49},[32,2633,2634,2636,2638],{"class":34,"line":85},[32,2635,165],{"class":38},[32,2637,168],{"class":59},[32,2639,2640],{"class":63},"() {\n",[32,2642,2643,2646,2649,2651],{"class":34,"line":91},[32,2644,2645],{"class":59},"    std",[32,2647,2648],{"class":63},"::string msgContent ",[32,2650,1289],{"class":38},[32,2652,2653],{"class":42}," R\"(# 以上.msg生成C++的\n",[32,2655,2656],{"class":34,"line":112},[32,2657,2658],{"class":42},"# This is a sample .msg file for ROS\n",[32,2660,2661],{"class":34,"line":118},[32,2662,50],{"emptyLinePlaceholder":49},[32,2664,2665],{"class":34,"line":145},[32,2666,2667],{"class":42},"string data\n",[32,2669,2670],{"class":34,"line":151},[32,2671,2672],{"class":42},"int32 number\n",[32,2674,2675,2678],{"class":34,"line":157},[32,2676,2677],{"class":42},"float64 value)\"",[32,2679,273],{"class":63},[32,2681,2682],{"class":34,"line":162},[32,2683,50],{"emptyLinePlaceholder":49},[32,2685,2686,2688,2691,2694,2696,2699],{"class":34,"line":193},[32,2687,2645],{"class":59},[32,2689,2690],{"class":63},"::ofstream ",[32,2692,2693],{"class":59},"outFile",[32,2695,103],{"class":63},[32,2697,2698],{"class":42},"\"sample.msg\"",[32,2700,142],{"class":63},[32,2702,2703,2706,2709,2712],{"class":34,"line":198},[32,2704,2705],{"class":38},"    if",[32,2707,2708],{"class":63}," (outFile.",[32,2710,2711],{"class":59},"is_open",[32,2713,2714],{"class":63},"()) {\n",[32,2716,2717,2720,2723],{"class":34,"line":212},[32,2718,2719],{"class":63},"        outFile ",[32,2721,2722],{"class":38},"\u003C\u003C",[32,2724,2725],{"class":63}," msgContent;\n",[32,2727,2728,2731,2734],{"class":34,"line":217},[32,2729,2730],{"class":63},"        outFile.",[32,2732,2733],{"class":59},"close",[32,2735,261],{"class":63},[32,2737,2738,2741,2744,2746,2749,2752,2754],{"class":34,"line":246},[32,2739,2740],{"class":59},"        std",[32,2742,2743],{"class":63},"::cout ",[32,2745,2722],{"class":38},[32,2747,2748],{"class":42}," \"sample.msg file generated successfully.\"",[32,2750,2751],{"class":38}," \u003C\u003C",[32,2753,1200],{"class":59},[32,2755,2756],{"class":63},"::endl;\n",[32,2758,2759,2762,2765],{"class":34,"line":251},[32,2760,2761],{"class":63},"    } ",[32,2763,2764],{"class":38},"else",[32,2766,2767],{"class":63}," {\n",[32,2769,2770,2772,2775,2777,2780,2782,2784],{"class":34,"line":264},[32,2771,2740],{"class":59},[32,2773,2774],{"class":63},"::cerr ",[32,2776,2722],{"class":38},[32,2778,2779],{"class":42}," \"Failed to create sample.msg file.\"",[32,2781,2751],{"class":38},[32,2783,1200],{"class":59},[32,2785,2756],{"class":63},[32,2787,2788,2791,2794],{"class":34,"line":276},[32,2789,2790],{"class":38},"        return",[32,2792,2793],{"class":126}," 1",[32,2795,273],{"class":63},[32,2797,2798],{"class":34,"line":418},[32,2799,148],{"class":63},[32,2801,2802],{"class":34,"line":423},[32,2803,50],{"emptyLinePlaceholder":49},[32,2805,2806,2808,2810],{"class":34,"line":429},[32,2807,1909],{"class":38},[32,2809,270],{"class":126},[32,2811,273],{"class":63},[32,2813,2814],{"class":34,"line":435},[32,2815,279],{"class":63},[15,2817,2818],{},"This C++ program:",[2820,2821,2822,2829,2836,2839],"ol",{},[2823,2824,2825,2826,2828],"li",{},"Defines the ",[29,2827,2600],{}," file content as a raw string literal",[2823,2830,2831,2832,2835],{},"Opens a file named ",[29,2833,2834],{},"sample.msg"," for writing",[2823,2837,2838],{},"Writes the content to the file",[2823,2840,2841],{},"Closes the file and reports success or failure",[15,2843,2844,2845,2847],{},"The generated ",[29,2846,2834],{}," file will contain:",[23,2849,2854],{"className":2850,"code":2852,"language":2853},[2851],"language-text","# 以上.msg生成C++的\n# This is a sample .msg file for ROS\n\nstring data\nint32 number\nfloat64 value\n","text",[29,2855,2852],{"__ignoreMap":20},[15,2857,2858],{},[18,2859],{"alt":20,"src":2860},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image457.webp",[15,2862,2863],{},"Then this is the Python source code generated by .msg.",[15,2865,2866],{},[18,2867],{"alt":20,"src":2868},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image458.webp",[15,2870,2871],{},"You can also use this method to check whether the compilation is normal.",[15,2873,2874],{},"interface is an interface",[15,2876,2877],{},[18,2878],{"alt":20,"src":2879},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image459.webp",[10,2881,2883],{"id":2882},"topic-communication-experiment-2-c","Topic Communication Experiment 2 (C++)",[15,2885,2886],{},[18,2887],{"alt":20,"src":2888},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image460.webp",[15,2890,2891],{},[18,2892],{"alt":20,"src":2893},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image461.webp",[15,2895,2896],{},[18,2897],{"alt":20,"src":2898},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image462.webp",[15,2900,2901],{},"After creating the source file, you need to configure CMakeLists.",[15,2903,2904],{},[18,2905],{"alt":20,"src":2906},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image463.webp",[15,2908,2909],{},[18,2910],{"alt":20,"src":2911},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image464.webp",[15,2913,2914],{},[18,2915],{"alt":20,"src":2916},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image465.webp",[15,2918,2919],{},[18,2920],{"alt":20,"src":2921},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image466.webp",[15,2923,2924],{},"Copy the most basic framework directly.",[15,2926,2927],{},[18,2928],{"alt":20,"src":2929},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image467.webp",[15,2931,2932],{},"Then replace the class name.",[15,2934,2935],{},[18,2936],{"alt":20,"src":2937},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image468.webp",[23,2939,2941],{"className":25,"code":2940,"language":27,"meta":20,"style":20},"#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",[29,2942,2943,2949,2953,2970,2974,2978,2994,2998,3016,3020,3024,3028,3050,3054,3064,3068,3091,3095,3105,3113],{"__ignoreMap":20},[32,2944,2945,2947],{"class":34,"line":35},[32,2946,39],{"class":38},[32,2948,43],{"class":42},[32,2950,2951],{"class":34,"line":46},[32,2952,50],{"emptyLinePlaceholder":49},[32,2954,2955,2957,2960,2962,2964,2966,2968],{"class":34,"line":53},[32,2956,56],{"class":38},[32,2958,2959],{"class":59}," TalkerStu",[32,2961,64],{"class":63},[32,2963,67],{"class":38},[32,2965,70],{"class":59},[32,2967,73],{"class":63},[32,2969,76],{"class":59},[32,2971,2972],{"class":34,"line":79},[32,2973,82],{"class":63},[32,2975,2976],{"class":34,"line":85},[32,2977,88],{"class":38},[32,2979,2980,2983,2985,2987,2989,2992],{"class":34,"line":91},[32,2981,2982],{"class":59},"    TalkerStu",[32,2984,97],{"class":63},[32,2986,100],{"class":59},[32,2988,103],{"class":63},[32,2990,2991],{"class":42},"\"talkerstu_node_cpp\"",[32,2993,109],{"class":63},[32,2995,2996],{"class":34,"line":112},[32,2997,115],{"class":63},[32,2999,3000,3002,3004,3006,3008,3010,3012,3014],{"class":34,"line":118},[32,3001,121],{"class":59},[32,3003,103],{"class":63},[32,3005,127],{"class":126},[32,3007,130],{"class":63},[32,3009,133],{"class":59},[32,3011,136],{"class":63},[32,3013,890],{"class":42},[32,3015,142],{"class":63},[32,3017,3018],{"class":34,"line":145},[32,3019,148],{"class":63},[32,3021,3022],{"class":34,"line":151},[32,3023,154],{"class":63},[32,3025,3026],{"class":34,"line":157},[32,3027,50],{"emptyLinePlaceholder":49},[32,3029,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048],{"class":34,"line":162},[32,3031,165],{"class":38},[32,3033,168],{"class":59},[32,3035,103],{"class":63},[32,3037,165],{"class":38},[32,3039,176],{"class":175},[32,3041,179],{"class":63},[32,3043,182],{"class":38},[32,3045,185],{"class":38},[32,3047,188],{"class":175},[32,3049,109],{"class":63},[32,3051,3052],{"class":34,"line":193},[32,3053,82],{"class":63},[32,3055,3056,3058,3060,3062],{"class":34,"line":198},[32,3057,201],{"class":59},[32,3059,73],{"class":63},[32,3061,206],{"class":59},[32,3063,209],{"class":63},[32,3065,3066],{"class":34,"line":212},[32,3067,50],{"emptyLinePlaceholder":49},[32,3069,3070,3072,3074,3076,3078,3080,3082,3084,3086,3089],{"class":34,"line":217},[32,3071,201],{"class":59},[32,3073,73],{"class":63},[32,3075,224],{"class":59},[32,3077,103],{"class":63},[32,3079,229],{"class":59},[32,3081,73],{"class":63},[32,3083,234],{"class":59},[32,3085,237],{"class":63},[32,3087,3088],{"class":59},"TalkerStu",[32,3090,243],{"class":63},[32,3092,3093],{"class":34,"line":246},[32,3094,50],{"emptyLinePlaceholder":49},[32,3096,3097,3099,3101,3103],{"class":34,"line":251},[32,3098,201],{"class":59},[32,3100,73],{"class":63},[32,3102,258],{"class":59},[32,3104,261],{"class":63},[32,3106,3107,3109,3111],{"class":34,"line":264},[32,3108,267],{"class":38},[32,3110,270],{"class":126},[32,3112,273],{"class":63},[32,3114,3115],{"class":34,"line":276},[32,3116,279],{"class":63},[15,3118,3119],{},"For coding standards, change talkerstu_node_cpp to lowercase.",[15,3121,3122],{},[18,3123],{"alt":20,"src":3124},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image469.webp",[15,3126,3127],{},"Similarly, the subscriber also needs to perform this operation.",[15,3129,3130],{},[18,3131],{"alt":20,"src":3132},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image470.webp",[23,3134,3136],{"className":25,"code":3135,"language":27,"meta":20,"style":20},"#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",[29,3137,3138,3144,3148,3165,3169,3173,3189,3193,3211,3215,3219,3223,3245,3249,3259,3263,3286,3290,3300,3308],{"__ignoreMap":20},[32,3139,3140,3142],{"class":34,"line":35},[32,3141,39],{"class":38},[32,3143,43],{"class":42},[32,3145,3146],{"class":34,"line":46},[32,3147,50],{"emptyLinePlaceholder":49},[32,3149,3150,3152,3155,3157,3159,3161,3163],{"class":34,"line":53},[32,3151,56],{"class":38},[32,3153,3154],{"class":59}," ListenerStu",[32,3156,64],{"class":63},[32,3158,67],{"class":38},[32,3160,70],{"class":59},[32,3162,73],{"class":63},[32,3164,76],{"class":59},[32,3166,3167],{"class":34,"line":79},[32,3168,82],{"class":63},[32,3170,3171],{"class":34,"line":85},[32,3172,1773],{"class":38},[32,3174,3175,3178,3180,3182,3184,3187],{"class":34,"line":91},[32,3176,3177],{"class":59},"    ListenerStu",[32,3179,97],{"class":63},[32,3181,100],{"class":59},[32,3183,103],{"class":63},[32,3185,3186],{"class":42},"\"listenerstu_node_cpp\"",[32,3188,109],{"class":63},[32,3190,3191],{"class":34,"line":112},[32,3192,115],{"class":63},[32,3194,3195,3197,3199,3201,3203,3205,3207,3209],{"class":34,"line":118},[32,3196,1798],{"class":59},[32,3198,103],{"class":63},[32,3200,127],{"class":126},[32,3202,130],{"class":63},[32,3204,133],{"class":59},[32,3206,136],{"class":63},[32,3208,1811],{"class":42},[32,3210,142],{"class":63},[32,3212,3213],{"class":34,"line":145},[32,3214,148],{"class":63},[32,3216,3217],{"class":34,"line":151},[32,3218,154],{"class":63},[32,3220,3221],{"class":34,"line":157},[32,3222,50],{"emptyLinePlaceholder":49},[32,3224,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243],{"class":34,"line":162},[32,3226,165],{"class":38},[32,3228,168],{"class":59},[32,3230,103],{"class":63},[32,3232,165],{"class":38},[32,3234,176],{"class":175},[32,3236,179],{"class":63},[32,3238,182],{"class":38},[32,3240,1844],{"class":38},[32,3242,188],{"class":175},[32,3244,1849],{"class":63},[32,3246,3247],{"class":34,"line":193},[32,3248,82],{"class":63},[32,3250,3251,3253,3255,3257],{"class":34,"line":198},[32,3252,1497],{"class":59},[32,3254,73],{"class":63},[32,3256,206],{"class":59},[32,3258,209],{"class":63},[32,3260,3261],{"class":34,"line":212},[32,3262,50],{"emptyLinePlaceholder":49},[32,3264,3265,3267,3269,3271,3273,3275,3277,3279,3281,3284],{"class":34,"line":217},[32,3266,1497],{"class":59},[32,3268,73],{"class":63},[32,3270,224],{"class":59},[32,3272,103],{"class":63},[32,3274,229],{"class":59},[32,3276,73],{"class":63},[32,3278,234],{"class":59},[32,3280,237],{"class":63},[32,3282,3283],{"class":59},"ListenerStu",[32,3285,243],{"class":63},[32,3287,3288],{"class":34,"line":246},[32,3289,50],{"emptyLinePlaceholder":49},[32,3291,3292,3294,3296,3298],{"class":34,"line":251},[32,3293,1497],{"class":59},[32,3295,73],{"class":63},[32,3297,258],{"class":59},[32,3299,261],{"class":63},[32,3301,3302,3304,3306],{"class":34,"line":264},[32,3303,1909],{"class":38},[32,3305,270],{"class":126},[32,3307,273],{"class":63},[32,3309,3310],{"class":34,"line":276},[32,3311,279],{"class":63},[15,3313,3314],{},[18,3315],{"alt":20,"src":3316},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image471.webp",[23,3318,3320],{"className":315,"code":3319,"language":317,"meta":20,"style":20},"{\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",[29,3321,3322,3326,3331,3335,3340,3345,3350,3355,3360,3365,3370,3375,3380,3385,3390,3395,3400,3405,3410,3415,3419,3424,3429],{"__ignoreMap":20},[32,3323,3324],{"class":34,"line":35},[32,3325,82],{},[32,3327,3328],{"class":34,"line":46},[32,3329,3330],{},"  \"configurations\": [\n",[32,3332,3333],{"class":34,"line":53},[32,3334,115],{},[32,3336,3337],{"class":34,"line":79},[32,3338,3339],{},"      \"browse\": {\n",[32,3341,3342],{"class":34,"line":85},[32,3343,3344],{},"        \"databaseFilename\": \"${default}\",\n",[32,3346,3347],{"class":34,"line":91},[32,3348,3349],{},"        \"limitSymbolsToIncludedHeaders\": false\n",[32,3351,3352],{"class":34,"line":112},[32,3353,3354],{},"      },\n",[32,3356,3357],{"class":34,"line":118},[32,3358,3359],{},"      \"includePath\": [\n",[32,3361,3362],{"class":34,"line":145},[32,3363,3364],{},"        \"/opt/ros/humble/include/**\",\n",[32,3366,3367],{"class":34,"line":151},[32,3368,3369],{},"        \"/home/tungchiahui/mysource/ros2src/3.ws01_plumbing/src/base_interfaces_demo/include/**\",\n",[32,3371,3372],{"class":34,"line":157},[32,3373,3374],{},"        \"/usr/include/**\",\n",[32,3376,3377],{"class":34,"line":162},[32,3378,3379],{},"        \"${workspaceFolder}/\",\n",[32,3381,3382],{"class":34,"line":193},[32,3383,3384],{},"**        \"${workspaceFolder}/install/base_interfaces_demo/include/**\"\n",[32,3386,3387],{"class":34,"line":198},[32,3388,3389],{},"      ],\n",[32,3391,3392],{"class":34,"line":212},[32,3393,3394],{},"      \"name\": \"ROS\",\n",[32,3396,3397],{"class":34,"line":217},[32,3398,3399],{},"      \"intelliSenseMode\": \"gcc-x64\",\n",[32,3401,3402],{"class":34,"line":246},[32,3403,3404],{},"      \"compilerPath\": \"/usr/bin/gcc\",\n",[32,3406,3407],{"class":34,"line":251},[32,3408,3409],{},"      \"cStandard\": \"gnu11\",\n",[32,3411,3412],{"class":34,"line":264},[32,3413,3414],{},"      \"cppStandard\": \"c++14\"\n",[32,3416,3417],{"class":34,"line":276},[32,3418,148],{},[32,3420,3421],{"class":34,"line":418},[32,3422,3423],{},"  ],\n",[32,3425,3426],{"class":34,"line":423},[32,3427,3428],{},"  \"version\": 4\n",[32,3430,3431],{"class":34,"line":429},[32,3432,279],{},[15,3434,3435],{},[18,3436],{"alt":20,"src":3437},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image472.webp",[15,3439,3440],{},[18,3441],{"alt":20,"src":3442},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image473.webp",[15,3444,3445],{},[18,3446],{"alt":20,"src":3447},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image474.webp",[15,3449,3450],{},[18,3451],{"alt":20,"src":3452},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image475.webp",[473,3454],{},[15,3456,3457],{},[18,3458],{"alt":20,"src":3459},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image476.webp",[15,3461,3462],{},[18,3463],{"alt":20,"src":3464},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image477.webp",[15,3466,3467],{},[18,3468],{"alt":20,"src":3469},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image478.webp",[15,3471,3472],{},[18,3473],{"alt":20,"src":3474},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image479.webp",[15,3476,3477],{},"Don't forget to convert the string to C-style.",[15,3479,3480],{},[18,3481],{"alt":20,"src":3482},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image480.webp",[23,3484,3486],{"className":25,"code":3485,"language":27,"meta":20,"style":20},"#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",[29,3487,3488,3494,3501,3505,3519,3523,3539,3543,3547,3571,3575,3593,3628,3669,3673,3677,3686,3690,3714,3726,3736,3751,3760,3770,3810,3814,3836,3846,3853,3857,3861,3883,3887,3897,3901,3923,3927,3938,3947],{"__ignoreMap":20},[32,3489,3490,3492],{"class":34,"line":35},[32,3491,39],{"class":38},[32,3493,43],{"class":42},[32,3495,3496,3498],{"class":34,"line":46},[32,3497,39],{"class":38},[32,3499,3500],{"class":42}," \"base_interfaces_demo/msg/student.hpp\"\n",[32,3502,3503],{"class":34,"line":53},[32,3504,50],{"emptyLinePlaceholder":49},[32,3506,3507,3509,3511,3513,3515,3517],{"class":34,"line":79},[32,3508,1194],{"class":38},[32,3510,1197],{"class":38},[32,3512,1200],{"class":59},[32,3514,73],{"class":63},[32,3516,1205],{"class":59},[32,3518,273],{"class":63},[32,3520,3521],{"class":34,"line":85},[32,3522,50],{"emptyLinePlaceholder":49},[32,3524,3525,3527,3529,3531,3533,3535,3537],{"class":34,"line":91},[32,3526,56],{"class":38},[32,3528,2959],{"class":59},[32,3530,64],{"class":63},[32,3532,67],{"class":38},[32,3534,70],{"class":59},[32,3536,73],{"class":63},[32,3538,76],{"class":59},[32,3540,3541],{"class":34,"line":112},[32,3542,82],{"class":63},[32,3544,3545],{"class":34,"line":118},[32,3546,1773],{"class":38},[32,3548,3549,3551,3553,3555,3557,3559,3562,3565,3567,3569],{"class":34,"line":145},[32,3550,2982],{"class":59},[32,3552,97],{"class":63},[32,3554,100],{"class":59},[32,3556,103],{"class":63},[32,3558,2991],{"class":42},[32,3560,3561],{"class":63},"),",[32,3563,3564],{"class":59},"age",[32,3566,103],{"class":63},[32,3568,1257],{"class":126},[32,3570,109],{"class":63},[32,3572,3573],{"class":34,"line":151},[32,3574,115],{"class":63},[32,3576,3577,3579,3581,3583,3585,3587,3589,3591],{"class":34,"line":157},[32,3578,121],{"class":59},[32,3580,103],{"class":63},[32,3582,127],{"class":126},[32,3584,130],{"class":63},[32,3586,133],{"class":59},[32,3588,136],{"class":63},[32,3590,890],{"class":42},[32,3592,142],{"class":63},[32,3594,3595,3597,3599,3601,3603,3605,3608,3610,3612,3615,3617,3619,3622,3624,3626],{"class":34,"line":162},[32,3596,1286],{"class":63},[32,3598,1289],{"class":38},[32,3600,1292],{"class":126},[32,3602,1295],{"class":63},[32,3604,237],{"class":38},[32,3606,3607],{"class":59},"base_interfaces_demo",[32,3609,73],{"class":63},[32,3611,1304],{"class":59},[32,3613,3614],{"class":63},"::Student",[32,3616,1310],{"class":38},[32,3618,103],{"class":63},[32,3620,3621],{"class":42},"\"chatter_stu\"",[32,3623,1318],{"class":63},[32,3625,1321],{"class":126},[32,3627,142],{"class":63},[32,3629,3630,3632,3634,3636,3638,3640,3642,3645,3648,3650,3652,3654,3656,3658,3660,3662,3665,3667],{"class":34,"line":193},[32,3631,1328],{"class":63},[32,3633,1289],{"class":38},[32,3635,1292],{"class":126},[32,3637,130],{"class":63},[32,3639,1337],{"class":59},[32,3641,103],{"class":63},[32,3643,3644],{"class":126},"500",[32,3646,3647],{"class":38},"ms",[32,3649,1318],{"class":63},[32,3651,229],{"class":59},[32,3653,73],{"class":63},[32,3655,1354],{"class":59},[32,3657,103],{"class":63},[32,3659,1359],{"class":38},[32,3661,3088],{"class":59},[32,3663,3664],{"class":63},"::on_timer_callback,",[32,3666,127],{"class":126},[32,3668,1369],{"class":63},[32,3670,3671],{"class":34,"line":198},[32,3672,148],{"class":63},[32,3674,3675],{"class":34,"line":212},[32,3676,2178],{"class":38},[32,3678,3679,3681,3684],{"class":34,"line":217},[32,3680,1383],{"class":38},[32,3682,3683],{"class":59}," on_timer_callback",[32,3685,1389],{"class":63},[32,3687,3688],{"class":34,"line":246},[32,3689,115],{"class":63},[32,3691,3692,3695,3698,3700,3703,3705,3707,3709,3712],{"class":34,"line":251},[32,3693,3694],{"class":38},"        auto",[32,3696,3697],{"class":63}," stu ",[32,3699,1289],{"class":38},[32,3701,3702],{"class":59}," base_interfaces_demo",[32,3704,73],{"class":63},[32,3706,1304],{"class":59},[32,3708,73],{"class":63},[32,3710,3711],{"class":59},"Student",[32,3713,261],{"class":63},[32,3715,3716,3719,3721,3724],{"class":34,"line":264},[32,3717,3718],{"class":63},"        stu.name ",[32,3720,1289],{"class":38},[32,3722,3723],{"class":42}," \"葫芦娃\"",[32,3725,273],{"class":63},[32,3727,3728,3731,3733],{"class":34,"line":276},[32,3729,3730],{"class":63},"        stu.age ",[32,3732,1289],{"class":38},[32,3734,3735],{"class":63}," age;\n",[32,3737,3738,3741,3743,3746,3749],{"class":34,"line":418},[32,3739,3740],{"class":63},"        stu.height ",[32,3742,1289],{"class":38},[32,3744,3745],{"class":126}," 2.20",[32,3747,3748],{"class":38},"f",[32,3750,273],{"class":63},[32,3752,3753,3756,3758],{"class":34,"line":423},[32,3754,3755],{"class":63},"        age",[32,3757,1443],{"class":38},[32,3759,273],{"class":63},[32,3761,3762,3765,3767],{"class":34,"line":429},[32,3763,3764],{"class":63},"        publisher_->",[32,3766,1485],{"class":59},[32,3768,3769],{"class":63},"(stu);\n",[32,3771,3772,3774,3776,3778,3780,3782,3784,3787,3789,3791,3794,3796,3799,3802,3805,3807],{"class":34,"line":435},[32,3773,1798],{"class":59},[32,3775,103],{"class":63},[32,3777,127],{"class":126},[32,3779,130],{"class":63},[32,3781,133],{"class":59},[32,3783,136],{"class":63},[32,3785,3786],{"class":42},"\"发布的消息:(",[32,3788,1465],{"class":126},[32,3790,1318],{"class":42},[32,3792,3793],{"class":126},"%d",[32,3795,1318],{"class":42},[32,3797,3798],{"class":126},"%.2f",[32,3800,3801],{"class":42},")\"",[32,3803,3804],{"class":63},",stu.name.",[32,3806,1474],{"class":59},[32,3808,3809],{"class":63},"(),stu.age,stu.height);\n",[32,3811,3812],{"class":34,"line":441},[32,3813,148],{"class":63},[32,3815,3816,3818,3820,3822,3824,3826,3828,3830,3832,3834],{"class":34,"line":447},[32,3817,1497],{"class":59},[32,3819,73],{"class":63},[32,3821,740],{"class":59},[32,3823,237],{"class":63},[32,3825,3607],{"class":59},[32,3827,73],{"class":63},[32,3829,1304],{"class":59},[32,3831,73],{"class":63},[32,3833,3711],{"class":59},[32,3835,1516],{"class":63},[32,3837,3838,3840,3842,3844],{"class":34,"line":453},[32,3839,1497],{"class":59},[32,3841,73],{"class":63},[32,3843,1525],{"class":59},[32,3845,1528],{"class":63},[32,3847,3848,3851],{"class":34,"line":459},[32,3849,3850],{"class":38},"    int32_t",[32,3852,3735],{"class":63},[32,3854,3855],{"class":34,"line":1569},[32,3856,154],{"class":63},[32,3858,3859],{"class":34,"line":1574},[32,3860,50],{"emptyLinePlaceholder":49},[32,3862,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881],{"class":34,"line":1585},[32,3864,165],{"class":38},[32,3866,168],{"class":59},[32,3868,103],{"class":63},[32,3870,165],{"class":38},[32,3872,176],{"class":175},[32,3874,179],{"class":63},[32,3876,182],{"class":38},[32,3878,185],{"class":38},[32,3880,188],{"class":175},[32,3882,109],{"class":63},[32,3884,3885],{"class":34,"line":1590},[32,3886,82],{"class":63},[32,3888,3889,3891,3893,3895],{"class":34,"line":1613},[32,3890,201],{"class":59},[32,3892,73],{"class":63},[32,3894,206],{"class":59},[32,3896,209],{"class":63},[32,3898,3899],{"class":34,"line":1618},[32,3900,50],{"emptyLinePlaceholder":49},[32,3902,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921],{"class":34,"line":1629},[32,3904,201],{"class":59},[32,3906,73],{"class":63},[32,3908,224],{"class":59},[32,3910,103],{"class":63},[32,3912,229],{"class":59},[32,3914,73],{"class":63},[32,3916,234],{"class":59},[32,3918,237],{"class":63},[32,3920,3088],{"class":59},[32,3922,243],{"class":63},[32,3924,3925],{"class":34,"line":1638},[32,3926,50],{"emptyLinePlaceholder":49},[32,3928,3930,3932,3934,3936],{"class":34,"line":3929},37,[32,3931,201],{"class":59},[32,3933,73],{"class":63},[32,3935,258],{"class":59},[32,3937,261],{"class":63},[32,3939,3941,3943,3945],{"class":34,"line":3940},38,[32,3942,267],{"class":38},[32,3944,270],{"class":126},[32,3946,273],{"class":63},[32,3948,3950],{"class":34,"line":3949},39,[32,3951,279],{"class":63},[15,3953,3954],{},[18,3955],{"alt":20,"src":3956},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image481.webp",[15,3958,3959],{},[18,3960],{"alt":20,"src":3961},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image482.webp",[15,3963,3964],{},[18,3965],{"alt":20,"src":3966},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image483.webp",[15,3968,3969],{},"Although the publisher can print logs, it does not mean the information was sent out normally.",[15,3971,3972],{},[18,3973],{"alt":20,"src":3974},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image484.webp",[15,3976,3977],{},"Only this kind of verification can truly confirm that the data has been sent out.",[473,3979],{},[15,3981,3982],{},[18,3983],{"alt":20,"src":3984},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image485.webp",[15,3986,3987],{},[18,3988],{"alt":20,"src":3989},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image486.webp",[23,3991,3993],{"className":25,"code":3992,"language":27,"meta":20,"style":20},"#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",[29,3994,3995,4001,4007,4011,4024,4028,4044,4048,4052,4066,4070,4088,4145,4149,4153,4173,4177,4214,4218,4237,4241,4245,4267,4271,4281,4285,4307,4311,4321,4329],{"__ignoreMap":20},[32,3996,3997,3999],{"class":34,"line":35},[32,3998,39],{"class":38},[32,4000,43],{"class":42},[32,4002,4003,4005],{"class":34,"line":46},[32,4004,39],{"class":38},[32,4006,3500],{"class":42},[32,4008,4009],{"class":34,"line":53},[32,4010,50],{"emptyLinePlaceholder":49},[32,4012,4013,4015,4017,4019,4021],{"class":34,"line":79},[32,4014,1194],{"class":38},[32,4016,3702],{"class":59},[32,4018,73],{"class":63},[32,4020,1304],{"class":59},[32,4022,4023],{"class":63},"::Student;\n",[32,4025,4026],{"class":34,"line":85},[32,4027,50],{"emptyLinePlaceholder":49},[32,4029,4030,4032,4034,4036,4038,4040,4042],{"class":34,"line":91},[32,4031,56],{"class":38},[32,4033,3154],{"class":59},[32,4035,64],{"class":63},[32,4037,67],{"class":38},[32,4039,70],{"class":59},[32,4041,73],{"class":63},[32,4043,76],{"class":59},[32,4045,4046],{"class":34,"line":112},[32,4047,82],{"class":63},[32,4049,4050],{"class":34,"line":118},[32,4051,1773],{"class":38},[32,4053,4054,4056,4058,4060,4062,4064],{"class":34,"line":145},[32,4055,3177],{"class":59},[32,4057,97],{"class":63},[32,4059,100],{"class":59},[32,4061,103],{"class":63},[32,4063,3186],{"class":42},[32,4065,109],{"class":63},[32,4067,4068],{"class":34,"line":151},[32,4069,115],{"class":63},[32,4071,4072,4074,4076,4078,4080,4082,4084,4086],{"class":34,"line":157},[32,4073,1798],{"class":59},[32,4075,103],{"class":63},[32,4077,127],{"class":126},[32,4079,130],{"class":63},[32,4081,133],{"class":59},[32,4083,136],{"class":63},[32,4085,1811],{"class":42},[32,4087,142],{"class":63},[32,4089,4090,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143],{"class":34,"line":162},[32,4091,4092],{"class":63},"        Subscription_ ",[32,4094,1289],{"class":38},[32,4096,1292],{"class":126},[32,4098,2114],{"class":63},[32,4100,237],{"class":38},[32,4102,3711],{"class":63},[32,4104,1310],{"class":38},[32,4106,103],{"class":63},[32,4108,3621],{"class":42},[32,4110,1318],{"class":63},[32,4112,1321],{"class":126},[32,4114,1318],{"class":63},[32,4116,229],{"class":59},[32,4118,73],{"class":63},[32,4120,1354],{"class":59},[32,4122,103],{"class":63},[32,4124,1359],{"class":38},[32,4126,3283],{"class":59},[32,4128,2151],{"class":63},[32,4130,127],{"class":126},[32,4132,1318],{"class":63},[32,4134,229],{"class":59},[32,4136,73],{"class":63},[32,4138,2162],{"class":59},[32,4140,73],{"class":63},[32,4142,1342],{"class":126},[32,4144,1369],{"class":63},[32,4146,4147],{"class":34,"line":193},[32,4148,148],{"class":63},[32,4150,4151],{"class":34,"line":198},[32,4152,2178],{"class":38},[32,4154,4155,4157,4159,4161,4163,4166,4168,4171],{"class":34,"line":212},[32,4156,1383],{"class":38},[32,4158,2185],{"class":59},[32,4160,103],{"class":63},[32,4162,2190],{"class":38},[32,4164,4165],{"class":59}," Student",[32,4167,2203],{"class":38},[32,4169,4170],{"class":175},"stu",[32,4172,109],{"class":63},[32,4174,4175],{"class":34,"line":217},[32,4176,115],{"class":63},[32,4178,4179,4181,4183,4185,4187,4189,4191,4194,4196,4199,4201,4204,4206,4208,4210,4212],{"class":34,"line":246},[32,4180,1798],{"class":59},[32,4182,103],{"class":63},[32,4184,127],{"class":126},[32,4186,130],{"class":63},[32,4188,133],{"class":59},[32,4190,136],{"class":63},[32,4192,4193],{"class":42},"\"订阅的学生信息:name=",[32,4195,1465],{"class":126},[32,4197,4198],{"class":42},",age=",[32,4200,3793],{"class":126},[32,4202,4203],{"class":42},",height=",[32,4205,3798],{"class":126},[32,4207,1468],{"class":42},[32,4209,3804],{"class":63},[32,4211,1474],{"class":59},[32,4213,3809],{"class":63},[32,4215,4216],{"class":34,"line":251},[32,4217,148],{"class":63},[32,4219,4220,4223,4226,4228,4230,4232,4234],{"class":34,"line":264},[32,4221,4222],{"class":63},"_    ",[32,4224,4225],{"class":59},"rclcpp",[32,4227,73],{"class":63},[32,4229,2252],{"class":59},[32,4231,237],{"class":63},[32,4233,3711],{"class":59},[32,4235,4236],{"class":63},">::SharedPtr Subscription_;\n",[32,4238,4239],{"class":34,"line":276},[32,4240,154],{"class":63},[32,4242,4243],{"class":34,"line":418},[32,4244,50],{"emptyLinePlaceholder":49},[32,4246,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265],{"class":34,"line":423},[32,4248,165],{"class":38},[32,4250,168],{"class":59},[32,4252,103],{"class":63},[32,4254,165],{"class":38},[32,4256,176],{"class":175},[32,4258,179],{"class":63},[32,4260,182],{"class":38},[32,4262,1844],{"class":38},[32,4264,188],{"class":175},[32,4266,1849],{"class":63},[32,4268,4269],{"class":34,"line":429},[32,4270,82],{"class":63},[32,4272,4273,4275,4277,4279],{"class":34,"line":435},[32,4274,1497],{"class":59},[32,4276,73],{"class":63},[32,4278,206],{"class":59},[32,4280,209],{"class":63},[32,4282,4283],{"class":34,"line":441},[32,4284,50],{"emptyLinePlaceholder":49},[32,4286,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305],{"class":34,"line":447},[32,4288,1497],{"class":59},[32,4290,73],{"class":63},[32,4292,224],{"class":59},[32,4294,103],{"class":63},[32,4296,229],{"class":59},[32,4298,73],{"class":63},[32,4300,234],{"class":59},[32,4302,237],{"class":63},[32,4304,3283],{"class":59},[32,4306,243],{"class":63},[32,4308,4309],{"class":34,"line":453},[32,4310,50],{"emptyLinePlaceholder":49},[32,4312,4313,4315,4317,4319],{"class":34,"line":459},[32,4314,1497],{"class":59},[32,4316,73],{"class":63},[32,4318,258],{"class":59},[32,4320,261],{"class":63},[32,4322,4323,4325,4327],{"class":34,"line":1569},[32,4324,1909],{"class":38},[32,4326,270],{"class":126},[32,4328,273],{"class":63},[32,4330,4331],{"class":34,"line":1574},[32,4332,279],{"class":63},[15,4334,4335],{},[18,4336],{"alt":20,"src":4337},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image487.webp",[15,4339,4340],{},[18,4341],{"alt":20,"src":4342},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image488.webp",[10,4344,4346],{"id":4345},"topic-communication-viewing-the-computation-graph-with-rqt","Topic Communication: Viewing the Computation Graph with rqt",[15,4348,4349],{},[18,4350],{"alt":20,"src":4351},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image489.webp",[15,4353,4354],{},[18,4355],{"alt":20,"src":4356},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image490.webp",[15,4358,4359],{},[18,4360],{"alt":20,"src":4361},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image491.webp",[15,4363,4364],{},[18,4365],{"alt":20,"src":4366},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image492.webp",[473,4368],{},[15,4370,4371],{},[18,4372],{"alt":20,"src":4373},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image493.webp",[15,4375,4376],{},"Graphical tool RQT",[15,4378,4379],{},[18,4380],{"alt":20,"src":4381},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image494.webp",[15,4383,4384],{},[18,4385],{"alt":20,"src":4386},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image495.webp",[15,4388,4389],{},[18,4390],{"alt":20,"src":4391},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image496.webp",[15,4393,4394],{},[18,4395],{"alt":20,"src":4396},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image497.webp",[15,4398,4399],{},[18,4400],{"alt":20,"src":4401},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image498.webp",[10,4403,4405],{"id":4404},"service-communication_theory","Service Communication_Theory",[15,4407,4408],{},[18,4409],{"alt":20,"src":4410},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image499.webp",[15,4412,4413],{},[18,4414],{"alt":20,"src":4415},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image500.webp",[15,4417,4418],{},[18,4419],{"alt":20,"src":4420},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image501.webp",[15,4422,4423],{},"Only one server is allowed, but there can be multiple clients, each of which can send requests to the server. (Of course, multiple servers are technically possible, but that would introduce many logical issues and is highly unreasonable, so it is prohibited.)",[15,4425,4426],{},[18,4427],{"alt":20,"src":4428},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image502.webp",[10,4430,4432],{"id":4431},"service-communication_experiment-1_server-implementation-c","Service Communication_Experiment 1_Server Implementation (C++)",[15,4434,4435],{},[18,4436],{"alt":20,"src":4437},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image503.webp",[15,4439,4440],{},[18,4441],{"alt":20,"src":4442},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image504.webp",[15,4444,4445],{},"First start the server, then submit two integers from the client. After the server receives them, it will parse the data, compute the sum, and return the result to the client.",[15,4447,4448],{},[18,4449],{"alt":20,"src":4450},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image505.webp",[15,4452,4453],{},[18,4454],{"alt":20,"src":4455},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image506.webp",[15,4457,4458],{},[18,4459],{"alt":20,"src":4460},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image507.webp",[15,4462,4463],{},[18,4464],{"alt":20,"src":4465},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image508.webp",[23,4467,4469],{"className":1654,"code":4468,"language":1656,"meta":20,"style":20},"ros2 pkg create cpp02_service --build-type ament_cmake --dependencies rclcpp base_interfaces_demo --node-name demo01_server\n",[29,4470,4471],{"__ignoreMap":20},[32,4472,4473,4475,4477,4480,4483,4486,4489,4492,4494,4496,4499],{"class":34,"line":35},[32,4474,1663],{"class":59},[32,4476,2466],{"class":42},[32,4478,4479],{"class":42}," create",[32,4481,4482],{"class":42}," cpp02_service",[32,4484,4485],{"class":126}," --build-type",[32,4487,4488],{"class":42}," ament_cmake",[32,4490,4491],{"class":126}," --dependencies",[32,4493,70],{"class":42},[32,4495,3702],{"class":42},[32,4497,4498],{"class":126}," --node-name",[32,4500,4501],{"class":42}," demo01_server\n",[473,4503],{},[15,4505,4506],{},[18,4507],{"alt":20,"src":4508},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image509.webp",[15,4510,4511],{},[18,4512],{"alt":20,"src":4513},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image510.webp",[15,4515,4516],{},[18,4517],{"alt":20,"src":4518},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image511.webp",[15,4520,4521,4522,4525,4526,4529],{},"If you have used ",[29,4523,4524],{},"demo_interfaces_demo"," before, you generally don't need to configure ",[29,4527,4528],{},"package.xml"," again.",[15,4531,4532],{},[18,4533],{"alt":20,"src":4534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image512.webp",[15,4536,4537],{},[18,4538],{"alt":20,"src":4539},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image513.webp",[15,4541,4542],{},[18,4543],{"alt":20,"src":4544},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image514.webp",[15,4546,4547],{},[18,4548],{"alt":20,"src":4549},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image515.webp",[15,4551,4552],{},[18,4553],{"alt":20,"src":4554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image516.webp",[15,4556,4557],{},"Remember the first letter of the filename should be capitalized!",[15,4559,4560],{},[18,4561],{"alt":20,"src":4562},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image517.webp",[15,4564,4565],{},[18,4566],{"alt":20,"src":4567},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image518.webp",[15,4569,4570],{},[18,4571],{"alt":20,"src":4572},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image519.webp",[15,4574,4575],{},[18,4576],{"alt":20,"src":4577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image520.webp",[15,4579,4580],{},[18,4581],{"alt":20,"src":4582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image521.webp",[15,4584,4585],{},[18,4586],{"alt":20,"src":4587},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image522.webp",[15,4589,4590],{},[18,4591],{"alt":20,"src":4592},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image523.webp",[15,4594,4595],{},[18,4596],{"alt":20,"src":4597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image524.webp",[15,4599,4600],{},[18,4601],{"alt":20,"src":4602},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image525.webp",[15,4604,4605],{},[18,4606],{"alt":20,"src":4607},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image526.webp",[15,4609,4610],{},[18,4611],{"alt":20,"src":4612},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image527.webp",[15,4614,4615],{},"This is another verification method.",[473,4617],{},[15,4619,4620],{},[18,4621],{"alt":20,"src":4622},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image528.webp",[15,4624,4625],{},[18,4626],{"alt":20,"src":4627},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image529.webp",[23,4629,4631],{"className":25,"code":4630,"language":27,"meta":20,"style":20},"#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",[29,4632,4633,4639,4643,4660,4664,4668,4684,4688,4707,4711,4715,4719,4741,4745,4755,4759,4782,4786,4796,4804],{"__ignoreMap":20},[32,4634,4635,4637],{"class":34,"line":35},[32,4636,39],{"class":38},[32,4638,43],{"class":42},[32,4640,4641],{"class":34,"line":46},[32,4642,50],{"emptyLinePlaceholder":49},[32,4644,4645,4647,4650,4652,4654,4656,4658],{"class":34,"line":53},[32,4646,56],{"class":38},[32,4648,4649],{"class":59}," AddIntsServer",[32,4651,64],{"class":63},[32,4653,67],{"class":38},[32,4655,70],{"class":59},[32,4657,73],{"class":63},[32,4659,76],{"class":59},[32,4661,4662],{"class":34,"line":79},[32,4663,82],{"class":63},[32,4665,4666],{"class":34,"line":85},[32,4667,88],{"class":38},[32,4669,4670,4673,4675,4677,4679,4682],{"class":34,"line":91},[32,4671,4672],{"class":59},"    AddIntsServer",[32,4674,97],{"class":63},[32,4676,100],{"class":59},[32,4678,103],{"class":63},[32,4680,4681],{"class":42},"\"add_ints_server_node_cpp\"",[32,4683,109],{"class":63},[32,4685,4686],{"class":34,"line":112},[32,4687,115],{"class":63},[32,4689,4690,4692,4694,4696,4698,4700,4702,4705],{"class":34,"line":118},[32,4691,121],{"class":59},[32,4693,103],{"class":63},[32,4695,127],{"class":126},[32,4697,130],{"class":63},[32,4699,133],{"class":59},[32,4701,136],{"class":63},[32,4703,4704],{"class":42},"\"服务端节点创建！\"",[32,4706,142],{"class":63},[32,4708,4709],{"class":34,"line":145},[32,4710,148],{"class":63},[32,4712,4713],{"class":34,"line":151},[32,4714,154],{"class":63},[32,4716,4717],{"class":34,"line":157},[32,4718,50],{"emptyLinePlaceholder":49},[32,4720,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739],{"class":34,"line":162},[32,4722,165],{"class":38},[32,4724,168],{"class":59},[32,4726,103],{"class":63},[32,4728,165],{"class":38},[32,4730,176],{"class":175},[32,4732,179],{"class":63},[32,4734,182],{"class":38},[32,4736,185],{"class":38},[32,4738,188],{"class":175},[32,4740,109],{"class":63},[32,4742,4743],{"class":34,"line":193},[32,4744,82],{"class":63},[32,4746,4747,4749,4751,4753],{"class":34,"line":198},[32,4748,201],{"class":59},[32,4750,73],{"class":63},[32,4752,206],{"class":59},[32,4754,209],{"class":63},[32,4756,4757],{"class":34,"line":212},[32,4758,50],{"emptyLinePlaceholder":49},[32,4760,4761,4763,4765,4767,4769,4771,4773,4775,4777,4780],{"class":34,"line":217},[32,4762,201],{"class":59},[32,4764,73],{"class":63},[32,4766,224],{"class":59},[32,4768,103],{"class":63},[32,4770,229],{"class":59},[32,4772,73],{"class":63},[32,4774,234],{"class":59},[32,4776,237],{"class":63},[32,4778,4779],{"class":59},"AddIntsServer",[32,4781,243],{"class":63},[32,4783,4784],{"class":34,"line":246},[32,4785,50],{"emptyLinePlaceholder":49},[32,4787,4788,4790,4792,4794],{"class":34,"line":251},[32,4789,201],{"class":59},[32,4791,73],{"class":63},[32,4793,258],{"class":59},[32,4795,261],{"class":63},[32,4797,4798,4800,4802],{"class":34,"line":264},[32,4799,267],{"class":38},[32,4801,270],{"class":126},[32,4803,273],{"class":63},[32,4805,4806],{"class":34,"line":276},[32,4807,279],{"class":63},[15,4809,4810],{},[18,4811],{"alt":20,"src":4812},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image530.webp",[15,4814,4815],{},[18,4816],{"alt":20,"src":4817},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image531.webp",[15,4819,4820],{},"The server must remain running continuously.",[15,4822,4823],{},[18,4824],{"alt":20,"src":4825},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image532.webp",[15,4827,4828],{},"The client returns to the terminal once execution is complete.",[15,4830,4831],{},[18,4832],{"alt":20,"src":4833},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image533.webp",[15,4835,4836],{},"So the client doesn't need to call the spin function; it just creates the object directly.",[15,4838,4839],{},[18,4840],{"alt":20,"src":4841},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image534.webp",[23,4843,4845],{"className":25,"code":4844,"language":27,"meta":20,"style":20},"#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",[29,4846,4847,4853,4857,4874,4878,4882,4898,4902,4921,4925,4929,4933,4955,4959,4969,4973,4979,5003,5007,5017,5025],{"__ignoreMap":20},[32,4848,4849,4851],{"class":34,"line":35},[32,4850,39],{"class":38},[32,4852,43],{"class":42},[32,4854,4855],{"class":34,"line":46},[32,4856,50],{"emptyLinePlaceholder":49},[32,4858,4859,4861,4864,4866,4868,4870,4872],{"class":34,"line":53},[32,4860,56],{"class":38},[32,4862,4863],{"class":59}," AddIntsClient",[32,4865,64],{"class":63},[32,4867,67],{"class":38},[32,4869,70],{"class":59},[32,4871,73],{"class":63},[32,4873,76],{"class":59},[32,4875,4876],{"class":34,"line":79},[32,4877,82],{"class":63},[32,4879,4880],{"class":34,"line":85},[32,4881,88],{"class":38},[32,4883,4884,4887,4889,4891,4893,4896],{"class":34,"line":91},[32,4885,4886],{"class":59},"    AddIntsClient",[32,4888,97],{"class":63},[32,4890,100],{"class":59},[32,4892,103],{"class":63},[32,4894,4895],{"class":42},"\"add_ints_client_node_cpp\"",[32,4897,109],{"class":63},[32,4899,4900],{"class":34,"line":112},[32,4901,115],{"class":63},[32,4903,4904,4906,4908,4910,4912,4914,4916,4919],{"class":34,"line":118},[32,4905,121],{"class":59},[32,4907,103],{"class":63},[32,4909,127],{"class":126},[32,4911,130],{"class":63},[32,4913,133],{"class":59},[32,4915,136],{"class":63},[32,4917,4918],{"class":42},"\"客户端节点创建！\"",[32,4920,142],{"class":63},[32,4922,4923],{"class":34,"line":145},[32,4924,148],{"class":63},[32,4926,4927],{"class":34,"line":151},[32,4928,154],{"class":63},[32,4930,4931],{"class":34,"line":157},[32,4932,50],{"emptyLinePlaceholder":49},[32,4934,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953],{"class":34,"line":162},[32,4936,165],{"class":38},[32,4938,168],{"class":59},[32,4940,103],{"class":63},[32,4942,165],{"class":38},[32,4944,176],{"class":175},[32,4946,179],{"class":63},[32,4948,182],{"class":38},[32,4950,185],{"class":38},[32,4952,188],{"class":175},[32,4954,109],{"class":63},[32,4956,4957],{"class":34,"line":193},[32,4958,82],{"class":63},[32,4960,4961,4963,4965,4967],{"class":34,"line":198},[32,4962,201],{"class":59},[32,4964,73],{"class":63},[32,4966,206],{"class":59},[32,4968,209],{"class":63},[32,4970,4971],{"class":34,"line":212},[32,4972,50],{"emptyLinePlaceholder":49},[32,4974,4975],{"class":34,"line":217},[32,4976,4978],{"class":4977},"sJ8bj","//   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n",[32,4980,4981,4984,4987,4989,4991,4993,4995,4997,5000],{"class":34,"line":246},[32,4982,4983],{"class":38},"  auto",[32,4985,4986],{"class":63}," client ",[32,4988,1289],{"class":38},[32,4990,1200],{"class":59},[32,4992,73],{"class":63},[32,4994,234],{"class":59},[32,4996,237],{"class":63},[32,4998,4999],{"class":59},"AddIntsClient",[32,5001,5002],{"class":63},">();\n",[32,5004,5005],{"class":34,"line":251},[32,5006,50],{"emptyLinePlaceholder":49},[32,5008,5009,5011,5013,5015],{"class":34,"line":264},[32,5010,201],{"class":59},[32,5012,73],{"class":63},[32,5014,258],{"class":59},[32,5016,261],{"class":63},[32,5018,5019,5021,5023],{"class":34,"line":276},[32,5020,267],{"class":38},[32,5022,270],{"class":126},[32,5024,273],{"class":63},[32,5026,5027],{"class":34,"line":418},[32,5028,279],{"class":63},[15,5030,5031],{},"Then you also need to edit the configuration file.",[15,5033,5034],{},[18,5035],{"alt":20,"src":5036},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image535.webp",[15,5038,5039],{},"There is no need to modify package.xml for now.",[15,5041,5042],{},[18,5043],{"alt":20,"src":5044},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image536.webp",[15,5046,5047],{},[18,5048],{"alt":20,"src":5049},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image537.webp",[15,5051,5052],{},[18,5053],{"alt":20,"src":5054},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image538.webp",[15,5056,5057],{},[18,5058],{"alt":20,"src":5059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image539.webp",[15,5061,5062],{},[18,5063],{"alt":20,"src":5064},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image540.webp",[473,5066],{},[15,5068,5069],{},[18,5070],{"alt":20,"src":5071},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image541.webp",[15,5073,5074],{},[18,5075],{"alt":20,"src":5076},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image542.webp",[15,5078,5079],{},[18,5080],{"alt":20,"src":5081},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image543.webp",[15,5083,5084],{},[18,5085],{"alt":20,"src":5086},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image544.webp",[15,5088,5089],{},[18,5090],{"alt":20,"src":5091},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image545.webp",[15,5093,5094],{},"There are 4 input parameters, but the last two have default values, so we only need to worry about the first two.",[15,5096,5097],{},"The first entry parameter is a topic name, a string.",[15,5099,5100],{},"The second input parameter is a callback function.",[15,5102,5103],{},"The return value is a smart pointer of service type.",[15,5105,5106],{},[18,5107],{"alt":20,"src":5108},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image546.webp",[15,5110,5111],{},[18,5112],{"alt":20,"src":5113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image547.webp",[15,5115,5116],{},[18,5117],{"alt":20,"src":5118},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image548.webp",[15,5120,5121],{},[18,5122],{"alt":20,"src":5123},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image549.webp",[15,5125,5126],{},[18,5127],{"alt":20,"src":5128},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image550.webp",[15,5130,5131],{},[18,5132],{"alt":20,"src":5133},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image551.webp",[15,5135,5136],{},[18,5137],{"alt":20,"src":5138},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image552.webp",[15,5140,5141],{},[18,5142],{"alt":20,"src":5143},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image553.webp",[23,5145,5147],{"className":25,"code":5146,"language":27,"meta":20,"style":20},"#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",[29,5148,5149,5155,5162,5166,5180,5184,5200,5204,5208,5222,5226,5244,5317,5321,5325,5371,5375,5397,5430,5434,5460,5464,5468,5490,5494,5504,5508,5530,5534,5544,5552],{"__ignoreMap":20},[32,5150,5151,5153],{"class":34,"line":35},[32,5152,39],{"class":38},[32,5154,43],{"class":42},[32,5156,5157,5159],{"class":34,"line":46},[32,5158,39],{"class":38},[32,5160,5161],{"class":42}," \"base_interfaces_demo/srv/add_ints.hpp\"\n",[32,5163,5164],{"class":34,"line":53},[32,5165,50],{"emptyLinePlaceholder":49},[32,5167,5168,5170,5172,5174,5177],{"class":34,"line":79},[32,5169,1194],{"class":38},[32,5171,3702],{"class":59},[32,5173,73],{"class":63},[32,5175,5176],{"class":59},"srv",[32,5178,5179],{"class":63},"::AddInts;\n",[32,5181,5182],{"class":34,"line":85},[32,5183,50],{"emptyLinePlaceholder":49},[32,5185,5186,5188,5190,5192,5194,5196,5198],{"class":34,"line":91},[32,5187,56],{"class":38},[32,5189,4649],{"class":59},[32,5191,64],{"class":63},[32,5193,67],{"class":38},[32,5195,70],{"class":59},[32,5197,73],{"class":63},[32,5199,76],{"class":59},[32,5201,5202],{"class":34,"line":112},[32,5203,82],{"class":63},[32,5205,5206],{"class":34,"line":118},[32,5207,88],{"class":38},[32,5209,5210,5212,5214,5216,5218,5220],{"class":34,"line":145},[32,5211,4672],{"class":59},[32,5213,97],{"class":63},[32,5215,100],{"class":59},[32,5217,103],{"class":63},[32,5219,4681],{"class":42},[32,5221,109],{"class":63},[32,5223,5224],{"class":34,"line":151},[32,5225,115],{"class":63},[32,5227,5228,5230,5232,5234,5236,5238,5240,5242],{"class":34,"line":157},[32,5229,121],{"class":59},[32,5231,103],{"class":63},[32,5233,127],{"class":126},[32,5235,130],{"class":63},[32,5237,133],{"class":59},[32,5239,136],{"class":63},[32,5241,4704],{"class":42},[32,5243,142],{"class":63},[32,5245,5246,5249,5251,5253,5256,5258,5260,5262,5264,5267,5269,5271,5274,5276,5278,5280,5282,5284,5286,5288,5291,5293,5295,5297,5299,5301,5304,5306,5308,5310,5312,5315],{"class":34,"line":162},[32,5247,5248],{"class":63},"      server_ ",[32,5250,1289],{"class":38},[32,5252,1292],{"class":126},[32,5254,5255],{"class":63},"->create_service",[32,5257,237],{"class":38},[32,5259,3607],{"class":59},[32,5261,73],{"class":63},[32,5263,5176],{"class":59},[32,5265,5266],{"class":63},"::AddInts",[32,5268,1310],{"class":38},[32,5270,103],{"class":63},[32,5272,5273],{"class":42},"\"add_ints\"",[32,5275,1318],{"class":63},[32,5277,229],{"class":59},[32,5279,73],{"class":63},[32,5281,1354],{"class":59},[32,5283,103],{"class":63},[32,5285,1359],{"class":38},[32,5287,4779],{"class":59},[32,5289,5290],{"class":63},"::add_callback,",[32,5292,127],{"class":126},[32,5294,1318],{"class":63},[32,5296,229],{"class":59},[32,5298,73],{"class":63},[32,5300,2162],{"class":59},[32,5302,5303],{"class":63},"::_1,",[32,5305,229],{"class":59},[32,5307,73],{"class":63},[32,5309,2162],{"class":59},[32,5311,73],{"class":63},[32,5313,5314],{"class":126},"2",[32,5316,1369],{"class":63},[32,5318,5319],{"class":34,"line":193},[32,5320,148],{"class":63},[32,5322,5323],{"class":34,"line":198},[32,5324,1378],{"class":38},[32,5326,5327,5329,5332,5334,5336,5339,5341,5344,5346,5349,5352,5354,5357,5359,5362,5364,5366,5369],{"class":34,"line":212},[32,5328,1383],{"class":38},[32,5330,5331],{"class":59}," add_callback",[32,5333,103],{"class":63},[32,5335,2190],{"class":38},[32,5337,5338],{"class":59}," AddInts",[32,5340,73],{"class":63},[32,5342,5343],{"class":59},"Request",[32,5345,73],{"class":63},[32,5347,5348],{"class":59},"SharedPtr",[32,5350,5351],{"class":175}," req",[32,5353,1318],{"class":63},[32,5355,5356],{"class":59},"AddInts",[32,5358,73],{"class":63},[32,5360,5361],{"class":59},"Response",[32,5363,73],{"class":63},[32,5365,5348],{"class":59},[32,5367,5368],{"class":175}," res",[32,5370,109],{"class":63},[32,5372,5373],{"class":34,"line":217},[32,5374,115],{"class":63},[32,5376,5377,5380,5382,5385,5388,5391,5394],{"class":34,"line":246},[32,5378,5379],{"class":63},"      res->sum ",[32,5381,1289],{"class":38},[32,5383,5384],{"class":63}," req->num1 ",[32,5386,5387],{"class":38},"+",[32,5389,5390],{"class":63}," (",[32,5392,5393],{"class":38},"*",[32,5395,5396],{"class":63},"req).num2;\n",[32,5398,5399,5401,5403,5405,5407,5409,5411,5413,5415,5418,5420,5423,5425,5427],{"class":34,"line":251},[32,5400,121],{"class":59},[32,5402,103],{"class":63},[32,5404,127],{"class":126},[32,5406,130],{"class":63},[32,5408,133],{"class":59},[32,5410,136],{"class":63},[32,5412,1468],{"class":42},[32,5414,3793],{"class":126},[32,5416,5417],{"class":42}," + ",[32,5419,3793],{"class":126},[32,5421,5422],{"class":42}," = ",[32,5424,3793],{"class":126},[32,5426,1468],{"class":42},[32,5428,5429],{"class":63},",req->num1,req->num2,res->sum);\n",[32,5431,5432],{"class":34,"line":264},[32,5433,148],{"class":63},[32,5435,5436,5438,5440,5442,5445,5447,5449,5451,5453,5455,5457],{"class":34,"line":276},[32,5437,4222],{"class":63},[32,5439,4225],{"class":59},[32,5441,73],{"class":63},[32,5443,5444],{"class":59},"Service",[32,5446,237],{"class":63},[32,5448,3607],{"class":59},[32,5450,73],{"class":63},[32,5452,5176],{"class":59},[32,5454,73],{"class":63},[32,5456,5356],{"class":59},[32,5458,5459],{"class":63},">::SharedPtr server_;\n",[32,5461,5462],{"class":34,"line":418},[32,5463,154],{"class":63},[32,5465,5466],{"class":34,"line":423},[32,5467,50],{"emptyLinePlaceholder":49},[32,5469,5470,5472,5474,5476,5478,5480,5482,5484,5486,5488],{"class":34,"line":429},[32,5471,165],{"class":38},[32,5473,168],{"class":59},[32,5475,103],{"class":63},[32,5477,165],{"class":38},[32,5479,176],{"class":175},[32,5481,179],{"class":63},[32,5483,182],{"class":38},[32,5485,185],{"class":38},[32,5487,188],{"class":175},[32,5489,109],{"class":63},[32,5491,5492],{"class":34,"line":435},[32,5493,82],{"class":63},[32,5495,5496,5498,5500,5502],{"class":34,"line":441},[32,5497,201],{"class":59},[32,5499,73],{"class":63},[32,5501,206],{"class":59},[32,5503,209],{"class":63},[32,5505,5506],{"class":34,"line":447},[32,5507,50],{"emptyLinePlaceholder":49},[32,5509,5510,5512,5514,5516,5518,5520,5522,5524,5526,5528],{"class":34,"line":453},[32,5511,201],{"class":59},[32,5513,73],{"class":63},[32,5515,224],{"class":59},[32,5517,103],{"class":63},[32,5519,229],{"class":59},[32,5521,73],{"class":63},[32,5523,234],{"class":59},[32,5525,237],{"class":63},[32,5527,4779],{"class":59},[32,5529,243],{"class":63},[32,5531,5532],{"class":34,"line":459},[32,5533,50],{"emptyLinePlaceholder":49},[32,5535,5536,5538,5540,5542],{"class":34,"line":1569},[32,5537,201],{"class":59},[32,5539,73],{"class":63},[32,5541,258],{"class":59},[32,5543,261],{"class":63},[32,5545,5546,5548,5550],{"class":34,"line":1574},[32,5547,267],{"class":38},[32,5549,270],{"class":126},[32,5551,273],{"class":63},[32,5553,5554],{"class":34,"line":1585},[32,5555,279],{"class":63},[15,5557,5558],{},[18,5559],{"alt":20,"src":5560},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image554.webp",[15,5562,5563],{},[18,5564],{"alt":20,"src":5565},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image555.webp",[15,5567,5568,5569,5572],{},"Since we haven't written the client yet, we'll temporarily use the ",[29,5570,5571],{},"ros2 service call"," tool to check the server's status.",[15,5574,5575],{},[18,5576],{"alt":20,"src":5577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image556.webp",[23,5579,5581],{"className":1654,"code":5580,"language":1656,"meta":20,"style":20},"ros2 service call /add_ints base_interfaces_demo/srv/AddInts \"{'num1': 10,'num2': 30}\"\n",[29,5582,5583],{"__ignoreMap":20},[32,5584,5585,5587,5590,5593,5596,5599],{"class":34,"line":35},[32,5586,1663],{"class":59},[32,5588,5589],{"class":42}," service",[32,5591,5592],{"class":42}," call",[32,5594,5595],{"class":42}," /add_ints",[32,5597,5598],{"class":42}," base_interfaces_demo/srv/AddInts",[32,5600,5601],{"class":42}," \"{'num1': 10,'num2': 30}\"\n",[15,5603,5604],{},"ros2 service call + topic name + interface data type + JSON code (which can also be understood as YAML format)",[15,5606,5607,5608,5611,5612,5614],{},"This JSON code (YAML format) format: \"{'name of the first number': ",[547,5609,5610],{},"space"," + corresponding value, 'name of the second number': ",[547,5613,5610],{}," + corresponding value}\"",[10,5616,5618],{"id":5617},"service-communication_experiment-1_client-implementation-c","Service Communication_Experiment 1_Client Implementation (C++)",[15,5620,5621],{},[18,5622],{"alt":20,"src":5623},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image557.webp",[15,5625,5626],{},[18,5627],{"alt":20,"src":5628},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image558.webp",[15,5630,5631],{},[18,5632],{"alt":20,"src":5633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image559.webp",[15,5635,5636],{},[18,5637],{"alt":20,"src":5638},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image560.webp",[15,5640,5641],{},"When running, it is followed by two integer data.",[15,5643,5644,5645,5648],{},"So this ",[29,5646,5647],{},"argc"," should be equal to 3.",[15,5650,5651],{},[18,5652],{"alt":20,"src":5653},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image561.webp",[15,5655,5656],{},[18,5657],{"alt":20,"src":5658},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image562.webp",[15,5660,5661],{},[18,5662],{"alt":20,"src":5663},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image563.webp",[15,5665,5666],{},[547,5667,5668,5669,5671],{},"argv",[32,5670],{},": receives the argc parameters returned at compile time",[15,5673,5674],{},[547,5675,5676],{},"argc is the total number of command-line arguments.",[15,5678,5679,5683,5684,5686],{},[547,5680,5668,5681],{},[32,5682],{}," contains ",[547,5685,5647],{}," parameters, where the 0th parameter is the full name of the program, and the subsequent parameters are the remaining arguments.",[15,5688,5689],{},[18,5690],{"alt":20,"src":5691},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image564.webp",[15,5693,5694],{},[18,5695],{"alt":20,"src":5696},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image565.webp",[15,5698,5699],{},"The server must be running and the client must be able to connect to it. If the server is not running, any data sent will be lost. However, service communication is typically used for important information that must not be lost.",[15,5701,5702],{},[18,5703],{"alt":20,"src":5704},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image566.webp",[15,5706,5707],{},"After the client finishes sending data, a response is generated, which is directly returned as the function's return value here.",[15,5709,5710],{},[18,5711],{"alt":20,"src":5712},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image567.webp",[15,5714,5715],{},[18,5716],{"alt":20,"src":5717},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image568.webp",[15,5719,5720],{},[18,5721],{"alt":20,"src":5722},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image569.webp",[15,5724,5725],{},[18,5726],{"alt":20,"src":5727},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image570.webp",[15,5729,5730],{},[18,5731],{"alt":20,"src":5732},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image571.webp",[15,5734,5735],{},[18,5736],{"alt":20,"src":5737},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image572.webp",[23,5739,5740],{"className":25,"code":4844,"language":27,"meta":20,"style":20},[29,5741,5742,5748,5752,5768,5772,5776,5790,5794,5812,5816,5820,5824,5846,5850,5860,5864,5868,5888,5892,5902,5910],{"__ignoreMap":20},[32,5743,5744,5746],{"class":34,"line":35},[32,5745,39],{"class":38},[32,5747,43],{"class":42},[32,5749,5750],{"class":34,"line":46},[32,5751,50],{"emptyLinePlaceholder":49},[32,5753,5754,5756,5758,5760,5762,5764,5766],{"class":34,"line":53},[32,5755,56],{"class":38},[32,5757,4863],{"class":59},[32,5759,64],{"class":63},[32,5761,67],{"class":38},[32,5763,70],{"class":59},[32,5765,73],{"class":63},[32,5767,76],{"class":59},[32,5769,5770],{"class":34,"line":79},[32,5771,82],{"class":63},[32,5773,5774],{"class":34,"line":85},[32,5775,88],{"class":38},[32,5777,5778,5780,5782,5784,5786,5788],{"class":34,"line":91},[32,5779,4886],{"class":59},[32,5781,97],{"class":63},[32,5783,100],{"class":59},[32,5785,103],{"class":63},[32,5787,4895],{"class":42},[32,5789,109],{"class":63},[32,5791,5792],{"class":34,"line":112},[32,5793,115],{"class":63},[32,5795,5796,5798,5800,5802,5804,5806,5808,5810],{"class":34,"line":118},[32,5797,121],{"class":59},[32,5799,103],{"class":63},[32,5801,127],{"class":126},[32,5803,130],{"class":63},[32,5805,133],{"class":59},[32,5807,136],{"class":63},[32,5809,4918],{"class":42},[32,5811,142],{"class":63},[32,5813,5814],{"class":34,"line":145},[32,5815,148],{"class":63},[32,5817,5818],{"class":34,"line":151},[32,5819,154],{"class":63},[32,5821,5822],{"class":34,"line":157},[32,5823,50],{"emptyLinePlaceholder":49},[32,5825,5826,5828,5830,5832,5834,5836,5838,5840,5842,5844],{"class":34,"line":162},[32,5827,165],{"class":38},[32,5829,168],{"class":59},[32,5831,103],{"class":63},[32,5833,165],{"class":38},[32,5835,176],{"class":175},[32,5837,179],{"class":63},[32,5839,182],{"class":38},[32,5841,185],{"class":38},[32,5843,188],{"class":175},[32,5845,109],{"class":63},[32,5847,5848],{"class":34,"line":193},[32,5849,82],{"class":63},[32,5851,5852,5854,5856,5858],{"class":34,"line":198},[32,5853,201],{"class":59},[32,5855,73],{"class":63},[32,5857,206],{"class":59},[32,5859,209],{"class":63},[32,5861,5862],{"class":34,"line":212},[32,5863,50],{"emptyLinePlaceholder":49},[32,5865,5866],{"class":34,"line":217},[32,5867,4978],{"class":4977},[32,5869,5870,5872,5874,5876,5878,5880,5882,5884,5886],{"class":34,"line":246},[32,5871,4983],{"class":38},[32,5873,4986],{"class":63},[32,5875,1289],{"class":38},[32,5877,1200],{"class":59},[32,5879,73],{"class":63},[32,5881,234],{"class":59},[32,5883,237],{"class":63},[32,5885,4999],{"class":59},[32,5887,5002],{"class":63},[32,5889,5890],{"class":34,"line":251},[32,5891,50],{"emptyLinePlaceholder":49},[32,5893,5894,5896,5898,5900],{"class":34,"line":264},[32,5895,201],{"class":59},[32,5897,73],{"class":63},[32,5899,258],{"class":59},[32,5901,261],{"class":63},[32,5903,5904,5906,5908],{"class":34,"line":276},[32,5905,267],{"class":38},[32,5907,270],{"class":126},[32,5909,273],{"class":63},[32,5911,5912],{"class":34,"line":418},[32,5913,279],{"class":63},[15,5915,5916],{},[18,5917],{"alt":20,"src":5918},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image573.webp",[15,5920,5921],{},"This section should be placed before node initialization to prevent performing resource-intensive operations before making a judgment.",[15,5923,5924],{},[18,5925],{"alt":20,"src":5926},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image574.webp",[15,5928,5929,5930,5932],{},"Because RCLCPP_INFO is placed before the node is created, it cannot use class and instantiation methods to call get_logger, meaning it cannot use the ",[29,5931,127],{}," pointer or the node's smart pointer to retrieve it.",[15,5934,5935],{},"Therefore, we adopt the following approach:",[15,5937,5938],{},[18,5939],{"alt":20,"src":5940},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image575.webp",[15,5942,5943,5944,5946,5947,5949,5950,5952],{},"This approach uses ",[29,5945,133],{}," from ",[29,5948,4225],{},", but it requires giving the logger a name, which is passed as an input parameter. Let's call it ",[29,5951,4225],{},".",[23,5954,5956],{"className":25,"code":5955,"language":27,"meta":20,"style":20},"#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",[29,5957,5958,5964,5968,5984,5988,5992,6006,6010,6028,6032,6036,6040,6062,6066,6082,6087,6112,6120,6124,6134,6138,6158,6162,6172,6180],{"__ignoreMap":20},[32,5959,5960,5962],{"class":34,"line":35},[32,5961,39],{"class":38},[32,5963,43],{"class":42},[32,5965,5966],{"class":34,"line":46},[32,5967,50],{"emptyLinePlaceholder":49},[32,5969,5970,5972,5974,5976,5978,5980,5982],{"class":34,"line":53},[32,5971,56],{"class":38},[32,5973,4863],{"class":59},[32,5975,64],{"class":63},[32,5977,67],{"class":38},[32,5979,70],{"class":59},[32,5981,73],{"class":63},[32,5983,76],{"class":59},[32,5985,5986],{"class":34,"line":79},[32,5987,82],{"class":63},[32,5989,5990],{"class":34,"line":85},[32,5991,88],{"class":38},[32,5993,5994,5996,5998,6000,6002,6004],{"class":34,"line":91},[32,5995,4886],{"class":59},[32,5997,97],{"class":63},[32,5999,100],{"class":59},[32,6001,103],{"class":63},[32,6003,4895],{"class":42},[32,6005,109],{"class":63},[32,6007,6008],{"class":34,"line":112},[32,6009,115],{"class":63},[32,6011,6012,6014,6016,6018,6020,6022,6024,6026],{"class":34,"line":118},[32,6013,121],{"class":59},[32,6015,103],{"class":63},[32,6017,127],{"class":126},[32,6019,130],{"class":63},[32,6021,133],{"class":59},[32,6023,136],{"class":63},[32,6025,4918],{"class":42},[32,6027,142],{"class":63},[32,6029,6030],{"class":34,"line":145},[32,6031,148],{"class":63},[32,6033,6034],{"class":34,"line":151},[32,6035,154],{"class":63},[32,6037,6038],{"class":34,"line":157},[32,6039,50],{"emptyLinePlaceholder":49},[32,6041,6042,6044,6046,6048,6050,6052,6054,6056,6058,6060],{"class":34,"line":162},[32,6043,165],{"class":38},[32,6045,168],{"class":59},[32,6047,103],{"class":63},[32,6049,165],{"class":38},[32,6051,176],{"class":175},[32,6053,179],{"class":63},[32,6055,182],{"class":38},[32,6057,185],{"class":38},[32,6059,188],{"class":175},[32,6061,109],{"class":63},[32,6063,6064],{"class":34,"line":193},[32,6065,82],{"class":63},[32,6067,6068,6071,6074,6077,6080],{"class":34,"line":198},[32,6069,6070],{"class":38},"  if",[32,6072,6073],{"class":63},"(argc ",[32,6075,6076],{"class":38},"!=",[32,6078,6079],{"class":126}," 3",[32,6081,109],{"class":63},[32,6083,6084],{"class":34,"line":212},[32,6085,6086],{"class":63},"  {\n",[32,6088,6089,6092,6094,6096,6098,6100,6102,6105,6107,6110],{"class":34,"line":217},[32,6090,6091],{"class":59},"    RCLCPP_INFO",[32,6093,103],{"class":63},[32,6095,4225],{"class":59},[32,6097,73],{"class":63},[32,6099,133],{"class":59},[32,6101,103],{"class":63},[32,6103,6104],{"class":42},"\"rclcpp\"",[32,6106,3561],{"class":63},[32,6108,6109],{"class":42},"\"请提交两个整形数字!\"",[32,6111,142],{"class":63},[32,6113,6114,6116,6118],{"class":34,"line":246},[32,6115,1909],{"class":38},[32,6117,2793],{"class":126},[32,6119,273],{"class":63},[32,6121,6122],{"class":34,"line":251},[32,6123,456],{"class":63},[32,6125,6126,6128,6130,6132],{"class":34,"line":264},[32,6127,201],{"class":59},[32,6129,73],{"class":63},[32,6131,206],{"class":59},[32,6133,209],{"class":63},[32,6135,6136],{"class":34,"line":276},[32,6137,50],{"emptyLinePlaceholder":49},[32,6139,6140,6142,6144,6146,6148,6150,6152,6154,6156],{"class":34,"line":418},[32,6141,4983],{"class":38},[32,6143,4986],{"class":63},[32,6145,1289],{"class":38},[32,6147,1200],{"class":59},[32,6149,73],{"class":63},[32,6151,234],{"class":59},[32,6153,237],{"class":63},[32,6155,4999],{"class":59},[32,6157,5002],{"class":63},[32,6159,6160],{"class":34,"line":423},[32,6161,50],{"emptyLinePlaceholder":49},[32,6163,6164,6166,6168,6170],{"class":34,"line":429},[32,6165,201],{"class":59},[32,6167,73],{"class":63},[32,6169,258],{"class":59},[32,6171,261],{"class":63},[32,6173,6174,6176,6178],{"class":34,"line":435},[32,6175,267],{"class":38},[32,6177,270],{"class":126},[32,6179,273],{"class":63},[32,6181,6182],{"class":34,"line":441},[32,6183,279],{"class":63},[15,6185,6186],{},[18,6187],{"alt":20,"src":6188},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image576.webp",[15,6190,6191],{},[18,6192],{"alt":20,"src":6193},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image577.webp",[15,6195,6196],{},[18,6197],{"alt":20,"src":6198},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image578.webp",[15,6200,6201],{},"If I don't submit any parameters and just press Enter, this is an exception, and the main function's return value is not 0.",[15,6203,6204],{},[18,6205],{"alt":20,"src":6206},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image579.webp",[15,6208,6209],{},[18,6210],{"alt":20,"src":6211},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image580.webp",[15,6213,6214],{},"You can also change INFO to ERROR.",[15,6216,6217],{},[18,6218],{"alt":20,"src":6219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image581.webp",[23,6221,6223],{"className":25,"code":6222,"language":27,"meta":20,"style":20},"#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",[29,6224,6225,6231,6235,6251,6255,6259,6273,6277,6295,6299,6303,6307,6329,6333,6345,6349,6372,6380,6384,6394,6398,6418,6422,6432,6440],{"__ignoreMap":20},[32,6226,6227,6229],{"class":34,"line":35},[32,6228,39],{"class":38},[32,6230,43],{"class":42},[32,6232,6233],{"class":34,"line":46},[32,6234,50],{"emptyLinePlaceholder":49},[32,6236,6237,6239,6241,6243,6245,6247,6249],{"class":34,"line":53},[32,6238,56],{"class":38},[32,6240,4863],{"class":59},[32,6242,64],{"class":63},[32,6244,67],{"class":38},[32,6246,70],{"class":59},[32,6248,73],{"class":63},[32,6250,76],{"class":59},[32,6252,6253],{"class":34,"line":79},[32,6254,82],{"class":63},[32,6256,6257],{"class":34,"line":85},[32,6258,88],{"class":38},[32,6260,6261,6263,6265,6267,6269,6271],{"class":34,"line":91},[32,6262,4886],{"class":59},[32,6264,97],{"class":63},[32,6266,100],{"class":59},[32,6268,103],{"class":63},[32,6270,4895],{"class":42},[32,6272,109],{"class":63},[32,6274,6275],{"class":34,"line":112},[32,6276,115],{"class":63},[32,6278,6279,6281,6283,6285,6287,6289,6291,6293],{"class":34,"line":118},[32,6280,121],{"class":59},[32,6282,103],{"class":63},[32,6284,127],{"class":126},[32,6286,130],{"class":63},[32,6288,133],{"class":59},[32,6290,136],{"class":63},[32,6292,4918],{"class":42},[32,6294,142],{"class":63},[32,6296,6297],{"class":34,"line":145},[32,6298,148],{"class":63},[32,6300,6301],{"class":34,"line":151},[32,6302,154],{"class":63},[32,6304,6305],{"class":34,"line":157},[32,6306,50],{"emptyLinePlaceholder":49},[32,6308,6309,6311,6313,6315,6317,6319,6321,6323,6325,6327],{"class":34,"line":162},[32,6310,165],{"class":38},[32,6312,168],{"class":59},[32,6314,103],{"class":63},[32,6316,165],{"class":38},[32,6318,176],{"class":175},[32,6320,179],{"class":63},[32,6322,182],{"class":38},[32,6324,185],{"class":38},[32,6326,188],{"class":175},[32,6328,109],{"class":63},[32,6330,6331],{"class":34,"line":193},[32,6332,82],{"class":63},[32,6334,6335,6337,6339,6341,6343],{"class":34,"line":198},[32,6336,6070],{"class":38},[32,6338,6073],{"class":63},[32,6340,6076],{"class":38},[32,6342,6079],{"class":126},[32,6344,109],{"class":63},[32,6346,6347],{"class":34,"line":212},[32,6348,6086],{"class":63},[32,6350,6351,6354,6356,6358,6360,6362,6364,6366,6368,6370],{"class":34,"line":217},[32,6352,6353],{"class":59},"    RCLCPP_ERROR",[32,6355,103],{"class":63},[32,6357,4225],{"class":59},[32,6359,73],{"class":63},[32,6361,133],{"class":59},[32,6363,103],{"class":63},[32,6365,6104],{"class":42},[32,6367,3561],{"class":63},[32,6369,6109],{"class":42},[32,6371,142],{"class":63},[32,6373,6374,6376,6378],{"class":34,"line":246},[32,6375,1909],{"class":38},[32,6377,2793],{"class":126},[32,6379,273],{"class":63},[32,6381,6382],{"class":34,"line":251},[32,6383,456],{"class":63},[32,6385,6386,6388,6390,6392],{"class":34,"line":264},[32,6387,201],{"class":59},[32,6389,73],{"class":63},[32,6391,206],{"class":59},[32,6393,209],{"class":63},[32,6395,6396],{"class":34,"line":276},[32,6397,50],{"emptyLinePlaceholder":49},[32,6399,6400,6402,6404,6406,6408,6410,6412,6414,6416],{"class":34,"line":418},[32,6401,4983],{"class":38},[32,6403,4986],{"class":63},[32,6405,1289],{"class":38},[32,6407,1200],{"class":59},[32,6409,73],{"class":63},[32,6411,234],{"class":59},[32,6413,237],{"class":63},[32,6415,4999],{"class":59},[32,6417,5002],{"class":63},[32,6419,6420],{"class":34,"line":423},[32,6421,50],{"emptyLinePlaceholder":49},[32,6423,6424,6426,6428,6430],{"class":34,"line":429},[32,6425,201],{"class":59},[32,6427,73],{"class":63},[32,6429,258],{"class":59},[32,6431,261],{"class":63},[32,6433,6434,6436,6438],{"class":34,"line":435},[32,6435,267],{"class":38},[32,6437,270],{"class":126},[32,6439,273],{"class":63},[32,6441,6442],{"class":34,"line":441},[32,6443,279],{"class":63},[473,6445],{},[15,6447,6448],{},[18,6449],{"alt":20,"src":6450},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image582.webp",[15,6452,6453],{},"There are a total of 3 entry parameters.",[15,6455,6456],{},"The first input parameter is the topic name, which is a string.",[15,6458,6459],{},"The second and third input parameters have default values, so ignore them for now.",[15,6461,6462],{},"The return value is a smart pointer for the client.",[15,6464,6465],{},[18,6466],{"alt":20,"src":6467},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image583.webp",[15,6469,6470],{},[18,6471],{"alt":20,"src":6472},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image584.webp",[15,6474,6475],{},[18,6476],{"alt":20,"src":6477},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image585.webp",[15,6479,6480],{},[18,6481],{"alt":20,"src":6482},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image586.webp",[15,6484,6485],{},[18,6486],{"alt":20,"src":6487},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image587.webp",[15,6489,6490],{},[18,6491],{"alt":20,"src":6492},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image588.webp",[15,6494,6495],{},[18,6496],{"alt":20,"src":6497},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image589.webp",[15,6499,6500],{},[18,6501],{"alt":20,"src":6502},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image590.webp",[15,6504,6505],{},[18,6506],{"alt":20,"src":6507},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image591.webp",[15,6509,6510],{},[18,6511],{"alt":20,"src":6512},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image592.webp",[15,6514,6515],{},[18,6516],{"alt":20,"src":6517},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image593.webp",[15,6519,6520],{},"Once Ctrl+C is pressed to close, it will flood with INFO messages and the program cannot be stopped.",[15,6522,6523],{},[18,6524],{"alt":20,"src":6525},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image594.webp",[15,6527,6528],{},[18,6529],{"alt":20,"src":6530},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image595.webp",[15,6532,6533],{},"Press Ctrl+Z again to stop the program.",[15,6535,6536],{},[18,6537],{"alt":20,"src":6538},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image596.webp",[15,6540,6541],{},[18,6542],{"alt":20,"src":6543},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image597.webp",[15,6545,6546],{},"Fix the Ctrl+C bug mentioned above:",[15,6548,6549],{},[18,6550],{"alt":20,"src":6551},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image598.webp",[15,6553,6554,6557,6558,6561,6562,6565],{},[29,6555,6556],{},"rclcpp::ok()"," checks whether the current program is running normally. If it is running normally, it returns ",[29,6559,6560],{},"true","; if not, it returns ",[29,6563,6564],{},"false",". For example, pressing Ctrl+C causes abnormal termination.",[15,6567,6568,6569,6572],{},"When ",[29,6570,6571],{},"rclcpp::ok() != true",", that means Ctrl+C has been pressed.",[15,6574,6575],{},[18,6576],{"alt":20,"src":6577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image599.webp",[15,6579,6580],{},"This directly allows the function to end.",[15,6582,6583],{},[18,6584],{"alt":20,"src":6585},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image600.webp",[15,6587,6588],{},[18,6589],{"alt":20,"src":6590},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image601.webp",[15,6592,6593],{},"At this point, pressing Ctrl+C will throw many errors.",[15,6595,6596],{},"This is because",[15,6598,6599],{},"this->get_logger()",[15,6601,6602],{},"client->get_logger()",[15,6604,6605],{},"rclcpp::get_logger()",[15,6607,6608],{},"of different",[15,6610,6611],{},"This exception is related to the context. During initialization, a context object is created, which acts as a container. Data can be placed into this container, and data can also be retrieved from it.",[15,6613,6614],{},"Currently, if our connection fails, we print a log.",[15,6616,6617],{},"Pressing ctrl+c will terminate our ROS2 program. To release resources, such as closing the context, the context will already be shut down by then. As a result, we can no longer retrieve logs from the client and this, so it is recommended to use rclcpp::get_logger().",[15,6619,6620,6621,6623],{},"Because the call to ",[29,6622,6605],{}," has no relation to the context.",[15,6625,6626],{},[18,6627],{"alt":20,"src":6628},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image602.webp",[15,6630,6631],{},"The program works correctly now!",[23,6633,6635],{"className":25,"code":6634,"language":27,"meta":20,"style":20},"#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",[29,6636,6637,6643,6649,6653,6665,6679,6683,6699,6703,6707,6721,6725,6747,6771,6775,6779,6789,6793,6820,6825,6848,6852,6875,6880,6904,6914,6919,6924,6933,6937,6941,6945,6961,6965,6969,6991,6995,7007,7011,7033,7042,7047,7058,7063,7084,7089,7108,7113,7127,7132,7156,7165,7170,7175,7186,7195],{"__ignoreMap":20},[32,6638,6639,6641],{"class":34,"line":35},[32,6640,39],{"class":38},[32,6642,43],{"class":42},[32,6644,6645,6647],{"class":34,"line":46},[32,6646,39],{"class":38},[32,6648,5161],{"class":42},[32,6650,6651],{"class":34,"line":53},[32,6652,50],{"emptyLinePlaceholder":49},[32,6654,6655,6657,6659,6661,6663],{"class":34,"line":79},[32,6656,1194],{"class":38},[32,6658,3702],{"class":59},[32,6660,73],{"class":63},[32,6662,5176],{"class":59},[32,6664,5179],{"class":63},[32,6666,6667,6669,6671,6673,6675,6677],{"class":34,"line":85},[32,6668,1194],{"class":38},[32,6670,1197],{"class":38},[32,6672,1200],{"class":59},[32,6674,73],{"class":63},[32,6676,1205],{"class":59},[32,6678,273],{"class":63},[32,6680,6681],{"class":34,"line":91},[32,6682,50],{"emptyLinePlaceholder":49},[32,6684,6685,6687,6689,6691,6693,6695,6697],{"class":34,"line":112},[32,6686,56],{"class":38},[32,6688,4863],{"class":59},[32,6690,64],{"class":63},[32,6692,67],{"class":38},[32,6694,70],{"class":59},[32,6696,73],{"class":63},[32,6698,76],{"class":59},[32,6700,6701],{"class":34,"line":118},[32,6702,82],{"class":63},[32,6704,6705],{"class":34,"line":145},[32,6706,88],{"class":38},[32,6708,6709,6711,6713,6715,6717,6719],{"class":34,"line":151},[32,6710,4886],{"class":59},[32,6712,97],{"class":63},[32,6714,100],{"class":59},[32,6716,103],{"class":63},[32,6718,4895],{"class":42},[32,6720,109],{"class":63},[32,6722,6723],{"class":34,"line":157},[32,6724,115],{"class":63},[32,6726,6727,6729,6731,6733,6735,6737,6739,6741,6743,6745],{"class":34,"line":162},[32,6728,121],{"class":59},[32,6730,103],{"class":63},[32,6732,4225],{"class":59},[32,6734,73],{"class":63},[32,6736,133],{"class":59},[32,6738,103],{"class":63},[32,6740,6104],{"class":42},[32,6742,3561],{"class":63},[32,6744,4918],{"class":42},[32,6746,142],{"class":63},[32,6748,6749,6752,6754,6756,6759,6761,6763,6765,6767,6769],{"class":34,"line":193},[32,6750,6751],{"class":63},"      client_ ",[32,6753,1289],{"class":38},[32,6755,1292],{"class":126},[32,6757,6758],{"class":63},"->create_client",[32,6760,237],{"class":38},[32,6762,5356],{"class":63},[32,6764,1310],{"class":38},[32,6766,103],{"class":63},[32,6768,5273],{"class":42},[32,6770,142],{"class":63},[32,6772,6773],{"class":34,"line":198},[32,6774,148],{"class":63},[32,6776,6777],{"class":34,"line":212},[32,6778,50],{"emptyLinePlaceholder":49},[32,6780,6781,6784,6787],{"class":34,"line":217},[32,6782,6783],{"class":38},"    bool",[32,6785,6786],{"class":59}," connect_server",[32,6788,1389],{"class":63},[32,6790,6791],{"class":34,"line":246},[32,6792,115],{"class":63},[32,6794,6795,6798,6801,6804,6806,6808,6810,6813,6815,6818],{"class":34,"line":251},[32,6796,6797],{"class":38},"      while",[32,6799,6800],{"class":63},"(client_->",[32,6802,6803],{"class":59},"wait_for_service",[32,6805,103],{"class":63},[32,6807,1342],{"class":126},[32,6809,1345],{"class":38},[32,6811,6812],{"class":63},") ",[32,6814,6076],{"class":38},[32,6816,6817],{"class":126}," true",[32,6819,109],{"class":63},[32,6821,6822],{"class":34,"line":264},[32,6823,6824],{"class":63},"      {\n",[32,6826,6827,6829,6831,6833,6835,6837,6839,6841,6843,6846],{"class":34,"line":276},[32,6828,1798],{"class":59},[32,6830,103],{"class":63},[32,6832,4225],{"class":59},[32,6834,73],{"class":63},[32,6836,133],{"class":59},[32,6838,103],{"class":63},[32,6840,6104],{"class":42},[32,6842,3561],{"class":63},[32,6844,6845],{"class":42},"\"服务连接中!\"",[32,6847,142],{"class":63},[32,6849,6850],{"class":34,"line":418},[32,6851,50],{"emptyLinePlaceholder":49},[32,6853,6854,6857,6859,6861,6863,6866,6869,6871,6873],{"class":34,"line":423},[32,6855,6856],{"class":38},"        if",[32,6858,5390],{"class":63},[32,6860,4225],{"class":59},[32,6862,73],{"class":63},[32,6864,6865],{"class":59},"ok",[32,6867,6868],{"class":63},"() ",[32,6870,6076],{"class":38},[32,6872,6817],{"class":126},[32,6874,109],{"class":63},[32,6876,6877],{"class":34,"line":429},[32,6878,6879],{"class":63},"        {\n",[32,6881,6882,6885,6887,6889,6891,6893,6895,6897,6899,6902],{"class":34,"line":435},[32,6883,6884],{"class":59},"          RCLCPP_INFO",[32,6886,103],{"class":63},[32,6888,4225],{"class":59},[32,6890,73],{"class":63},[32,6892,133],{"class":59},[32,6894,103],{"class":63},[32,6896,6104],{"class":42},[32,6898,3561],{"class":63},[32,6900,6901],{"class":42},"\"强行终止客户端!\"",[32,6903,142],{"class":63},[32,6905,6906,6909,6912],{"class":34,"line":441},[32,6907,6908],{"class":38},"          return",[32,6910,6911],{"class":126}," false",[32,6913,273],{"class":63},[32,6915,6916],{"class":34,"line":447},[32,6917,6918],{"class":63},"        }\n",[32,6920,6921],{"class":34,"line":453},[32,6922,6923],{"class":63},"      }\n",[32,6925,6926,6929,6931],{"class":34,"line":459},[32,6927,6928],{"class":38},"      return",[32,6930,6817],{"class":126},[32,6932,273],{"class":63},[32,6934,6935],{"class":34,"line":1569},[32,6936,148],{"class":63},[32,6938,6939],{"class":34,"line":1574},[32,6940,50],{"emptyLinePlaceholder":49},[32,6942,6943],{"class":34,"line":1585},[32,6944,1378],{"class":38},[32,6946,6947,6949,6951,6954,6956,6958],{"class":34,"line":1590},[32,6948,1497],{"class":59},[32,6950,73],{"class":63},[32,6952,6953],{"class":59},"Client",[32,6955,237],{"class":63},[32,6957,5356],{"class":59},[32,6959,6960],{"class":63},">::SharedPtr client_;\n",[32,6962,6963],{"class":34,"line":1613},[32,6964,154],{"class":63},[32,6966,6967],{"class":34,"line":1618},[32,6968,50],{"emptyLinePlaceholder":49},[32,6970,6971,6973,6975,6977,6979,6981,6983,6985,6987,6989],{"class":34,"line":1629},[32,6972,165],{"class":38},[32,6974,168],{"class":59},[32,6976,103],{"class":63},[32,6978,165],{"class":38},[32,6980,176],{"class":175},[32,6982,179],{"class":63},[32,6984,182],{"class":38},[32,6986,185],{"class":38},[32,6988,188],{"class":175},[32,6990,109],{"class":63},[32,6992,6993],{"class":34,"line":1638},[32,6994,82],{"class":63},[32,6996,6997,6999,7001,7003,7005],{"class":34,"line":3929},[32,6998,6070],{"class":38},[32,7000,6073],{"class":63},[32,7002,6076],{"class":38},[32,7004,6079],{"class":126},[32,7006,109],{"class":63},[32,7008,7009],{"class":34,"line":3940},[32,7010,6086],{"class":63},[32,7012,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031],{"class":34,"line":3949},[32,7014,6353],{"class":59},[32,7016,103],{"class":63},[32,7018,4225],{"class":59},[32,7020,73],{"class":63},[32,7022,133],{"class":59},[32,7024,103],{"class":63},[32,7026,6104],{"class":42},[32,7028,3561],{"class":63},[32,7030,6109],{"class":42},[32,7032,142],{"class":63},[32,7034,7036,7038,7040],{"class":34,"line":7035},40,[32,7037,1909],{"class":38},[32,7039,2793],{"class":126},[32,7041,273],{"class":63},[32,7043,7045],{"class":34,"line":7044},41,[32,7046,456],{"class":63},[32,7048,7050,7052,7054,7056],{"class":34,"line":7049},42,[32,7051,201],{"class":59},[32,7053,73],{"class":63},[32,7055,206],{"class":59},[32,7057,209],{"class":63},[32,7059,7061],{"class":34,"line":7060},43,[32,7062,50],{"emptyLinePlaceholder":49},[32,7064,7066,7068,7070,7072,7074,7076,7078,7080,7082],{"class":34,"line":7065},44,[32,7067,4983],{"class":38},[32,7069,4986],{"class":63},[32,7071,1289],{"class":38},[32,7073,1200],{"class":59},[32,7075,73],{"class":63},[32,7077,234],{"class":59},[32,7079,237],{"class":63},[32,7081,4999],{"class":59},[32,7083,5002],{"class":63},[32,7085,7087],{"class":34,"line":7086},45,[32,7088,50],{"emptyLinePlaceholder":49},[32,7090,7092,7095,7098,7100,7103,7106],{"class":34,"line":7091},46,[32,7093,7094],{"class":38},"  bool",[32,7096,7097],{"class":63}," flag ",[32,7099,1289],{"class":38},[32,7101,7102],{"class":63}," client->",[32,7104,7105],{"class":59},"connect_server",[32,7107,261],{"class":63},[32,7109,7111],{"class":34,"line":7110},47,[32,7112,50],{"emptyLinePlaceholder":49},[32,7114,7116,7118,7121,7123,7125],{"class":34,"line":7115},48,[32,7117,6070],{"class":38},[32,7119,7120],{"class":63}," (flag ",[32,7122,6076],{"class":38},[32,7124,6817],{"class":126},[32,7126,109],{"class":63},[32,7128,7130],{"class":34,"line":7129},49,[32,7131,6086],{"class":63},[32,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7154],{"class":34,"line":7134},50,[32,7136,6091],{"class":59},[32,7138,103],{"class":63},[32,7140,4225],{"class":59},[32,7142,73],{"class":63},[32,7144,133],{"class":59},[32,7146,103],{"class":63},[32,7148,6104],{"class":42},[32,7150,3561],{"class":63},[32,7152,7153],{"class":42},"\"服务器连接失败，程序退出!\"",[32,7155,142],{"class":63},[32,7157,7159,7161,7163],{"class":34,"line":7158},51,[32,7160,1909],{"class":38},[32,7162,270],{"class":126},[32,7164,273],{"class":63},[32,7166,7168],{"class":34,"line":7167},52,[32,7169,456],{"class":63},[32,7171,7173],{"class":34,"line":7172},53,[32,7174,50],{"emptyLinePlaceholder":49},[32,7176,7178,7180,7182,7184],{"class":34,"line":7177},54,[32,7179,201],{"class":59},[32,7181,73],{"class":63},[32,7183,258],{"class":59},[32,7185,261],{"class":63},[32,7187,7189,7191,7193],{"class":34,"line":7188},55,[32,7190,267],{"class":38},[32,7192,270],{"class":126},[32,7194,273],{"class":63},[32,7196,7198],{"class":34,"line":7197},56,[32,7199,279],{"class":63},[15,7201,7202],{},[18,7203],{"alt":20,"src":7204},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image603.webp",[473,7206],{},[15,7208,7209],{},[18,7210],{"alt":20,"src":7211},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image604.webp",[15,7213,7214],{},[18,7215],{"alt":20,"src":7216},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image605.webp",[15,7218,7219],{},[18,7220],{"alt":20,"src":7221},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image606.webp",[15,7223,7224],{},"Now that we have the return value type, let's paste it over.",[15,7226,7227,7228,7231,7232,5952],{},"Because of ",[29,7229,7230],{},"using base_interfaces_demo::srv::AddInts",", it can be abbreviated as ",[29,7233,5356],{},[15,7235,7236],{},[18,7237],{"alt":20,"src":7238},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image607.webp",[15,7240,7241],{},[18,7242],{"alt":20,"src":7243},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image608.webp",[15,7245,7246],{},[18,7247],{"alt":20,"src":7248},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image609.webp",[15,7250,7251],{},"In the main function, you need to call the function.",[15,7253,7254],{},[18,7255],{"alt":20,"src":7256},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image610.webp",[15,7258,7259],{},"atoi() converts data into an integer.",[15,7261,7262],{},[18,7263],{"alt":20,"src":7264},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image611.webp",[15,7266,7267],{},"We also need to handle the response. There are 3 responses.",[15,7269,7270],{},"The first is interrupt, the second is success, and the third is timeout.",[15,7272,7273],{},"We generally only consider success, and treat the other two cases as failures.",[15,7275,7276],{},[18,7277],{"alt":20,"src":7278},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image612.webp",[15,7280,7281],{},"The first entry parameter is the smart pointer of the node.",[15,7283,7284],{},"The second input parameter is the future.",[15,7286,1065],{},[15,7288,7289],{},[18,7290],{"alt":20,"src":7291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image613.webp",[15,7293,7294],{},[18,7295],{"alt":20,"src":7296},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image614.webp",[15,7298,7299],{},[18,7300],{"alt":20,"src":7301},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image615.webp",[15,7303,7304],{},[18,7305],{"alt":20,"src":7306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image616.webp",[15,7308,7309],{},[18,7310],{"alt":20,"src":7311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image617.webp",[23,7313,7315],{"className":25,"code":7314,"language":27,"meta":20,"style":20},"#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",[29,7316,7317,7323,7329,7333,7345,7359,7363,7379,7383,7387,7401,7405,7427,7449,7453,7457,7465,7469,7491,7495,7517,7521,7541,7545,7567,7575,7579,7583,7591,7595,7599,7637,7641,7646,7651,7656,7661,7684,7694,7704,7717,7721,7725,7729,7743,7747,7751,7773,7777,7789,7793,7815,7823,7827,7837,7841,7861,7866,7881,7886,7899,7904,7927,7936,7941,7978,7983,8013,8018,8046,8051,8057,8062,8078,8083,8088,8099,8108],{"__ignoreMap":20},[32,7318,7319,7321],{"class":34,"line":35},[32,7320,39],{"class":38},[32,7322,43],{"class":42},[32,7324,7325,7327],{"class":34,"line":46},[32,7326,39],{"class":38},[32,7328,5161],{"class":42},[32,7330,7331],{"class":34,"line":53},[32,7332,50],{"emptyLinePlaceholder":49},[32,7334,7335,7337,7339,7341,7343],{"class":34,"line":79},[32,7336,1194],{"class":38},[32,7338,3702],{"class":59},[32,7340,73],{"class":63},[32,7342,5176],{"class":59},[32,7344,5179],{"class":63},[32,7346,7347,7349,7351,7353,7355,7357],{"class":34,"line":85},[32,7348,1194],{"class":38},[32,7350,1197],{"class":38},[32,7352,1200],{"class":59},[32,7354,73],{"class":63},[32,7356,1205],{"class":59},[32,7358,273],{"class":63},[32,7360,7361],{"class":34,"line":91},[32,7362,50],{"emptyLinePlaceholder":49},[32,7364,7365,7367,7369,7371,7373,7375,7377],{"class":34,"line":112},[32,7366,56],{"class":38},[32,7368,4863],{"class":59},[32,7370,64],{"class":63},[32,7372,67],{"class":38},[32,7374,70],{"class":59},[32,7376,73],{"class":63},[32,7378,76],{"class":59},[32,7380,7381],{"class":34,"line":118},[32,7382,82],{"class":63},[32,7384,7385],{"class":34,"line":145},[32,7386,88],{"class":38},[32,7388,7389,7391,7393,7395,7397,7399],{"class":34,"line":151},[32,7390,4886],{"class":59},[32,7392,97],{"class":63},[32,7394,100],{"class":59},[32,7396,103],{"class":63},[32,7398,4895],{"class":42},[32,7400,109],{"class":63},[32,7402,7403],{"class":34,"line":157},[32,7404,115],{"class":63},[32,7406,7407,7409,7411,7413,7415,7417,7419,7421,7423,7425],{"class":34,"line":162},[32,7408,121],{"class":59},[32,7410,103],{"class":63},[32,7412,4225],{"class":59},[32,7414,73],{"class":63},[32,7416,133],{"class":59},[32,7418,103],{"class":63},[32,7420,6104],{"class":42},[32,7422,3561],{"class":63},[32,7424,4918],{"class":42},[32,7426,142],{"class":63},[32,7428,7429,7431,7433,7435,7437,7439,7441,7443,7445,7447],{"class":34,"line":193},[32,7430,6751],{"class":63},[32,7432,1289],{"class":38},[32,7434,1292],{"class":126},[32,7436,6758],{"class":63},[32,7438,237],{"class":38},[32,7440,5356],{"class":63},[32,7442,1310],{"class":38},[32,7444,103],{"class":63},[32,7446,5273],{"class":42},[32,7448,142],{"class":63},[32,7450,7451],{"class":34,"line":198},[32,7452,148],{"class":63},[32,7454,7455],{"class":34,"line":212},[32,7456,50],{"emptyLinePlaceholder":49},[32,7458,7459,7461,7463],{"class":34,"line":217},[32,7460,6783],{"class":38},[32,7462,6786],{"class":59},[32,7464,1389],{"class":63},[32,7466,7467],{"class":34,"line":246},[32,7468,115],{"class":63},[32,7470,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489],{"class":34,"line":251},[32,7472,6797],{"class":38},[32,7474,6800],{"class":63},[32,7476,6803],{"class":59},[32,7478,103],{"class":63},[32,7480,1342],{"class":126},[32,7482,1345],{"class":38},[32,7484,6812],{"class":63},[32,7486,6076],{"class":38},[32,7488,6817],{"class":126},[32,7490,109],{"class":63},[32,7492,7493],{"class":34,"line":264},[32,7494,6824],{"class":63},[32,7496,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515],{"class":34,"line":276},[32,7498,1798],{"class":59},[32,7500,103],{"class":63},[32,7502,4225],{"class":59},[32,7504,73],{"class":63},[32,7506,133],{"class":59},[32,7508,103],{"class":63},[32,7510,6104],{"class":42},[32,7512,3561],{"class":63},[32,7514,6845],{"class":42},[32,7516,142],{"class":63},[32,7518,7519],{"class":34,"line":418},[32,7520,50],{"emptyLinePlaceholder":49},[32,7522,7523,7525,7527,7529,7531,7533,7535,7537,7539],{"class":34,"line":423},[32,7524,6856],{"class":38},[32,7526,5390],{"class":63},[32,7528,4225],{"class":59},[32,7530,73],{"class":63},[32,7532,6865],{"class":59},[32,7534,6868],{"class":63},[32,7536,6076],{"class":38},[32,7538,6817],{"class":126},[32,7540,109],{"class":63},[32,7542,7543],{"class":34,"line":429},[32,7544,6879],{"class":63},[32,7546,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565],{"class":34,"line":435},[32,7548,6884],{"class":59},[32,7550,103],{"class":63},[32,7552,4225],{"class":59},[32,7554,73],{"class":63},[32,7556,133],{"class":59},[32,7558,103],{"class":63},[32,7560,6104],{"class":42},[32,7562,3561],{"class":63},[32,7564,6901],{"class":42},[32,7566,142],{"class":63},[32,7568,7569,7571,7573],{"class":34,"line":441},[32,7570,6908],{"class":38},[32,7572,6911],{"class":126},[32,7574,273],{"class":63},[32,7576,7577],{"class":34,"line":447},[32,7578,6918],{"class":63},[32,7580,7581],{"class":34,"line":453},[32,7582,6923],{"class":63},[32,7584,7585,7587,7589],{"class":34,"line":459},[32,7586,6928],{"class":38},[32,7588,6817],{"class":126},[32,7590,273],{"class":63},[32,7592,7593],{"class":34,"line":1569},[32,7594,148],{"class":63},[32,7596,7597],{"class":34,"line":1574},[32,7598,50],{"emptyLinePlaceholder":49},[32,7600,7601,7603,7605,7607,7609,7611,7614,7617,7620,7622,7625,7628,7630,7632,7635],{"class":34,"line":1585},[32,7602,1497],{"class":59},[32,7604,73],{"class":63},[32,7606,6953],{"class":59},[32,7608,237],{"class":63},[32,7610,5356],{"class":59},[32,7612,7613],{"class":63},">::",[32,7615,7616],{"class":59},"FutureAndRequestId",[32,7618,7619],{"class":59}," send_request",[32,7621,103],{"class":63},[32,7623,7624],{"class":38},"int32_t",[32,7626,7627],{"class":175}," num1",[32,7629,1318],{"class":63},[32,7631,7624],{"class":38},[32,7633,7634],{"class":175}," num2",[32,7636,109],{"class":63},[32,7638,7639],{"class":34,"line":1590},[32,7640,115],{"class":63},[32,7642,7643],{"class":34,"line":1613},[32,7644,7645],{"class":4977},"      /*\n",[32,7647,7648],{"class":34,"line":1618},[32,7649,7650],{"class":4977},"        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n",[32,7652,7653],{"class":34,"line":1629},[32,7654,7655],{"class":4977},"        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  //其实就相当于AddInts::Request类型\n",[32,7657,7658],{"class":34,"line":1638},[32,7659,7660],{"class":4977},"      */\n",[32,7662,7663,7665,7668,7670,7672,7674,7677,7679,7682],{"class":34,"line":3929},[32,7664,1398],{"class":38},[32,7666,7667],{"class":63}," request ",[32,7669,1289],{"class":38},[32,7671,1200],{"class":59},[32,7673,73],{"class":63},[32,7675,7676],{"class":59},"make_sharedautolinkAddInts",[32,7678,73],{"class":63},[32,7680,7681],{"class":59},"Requestautolink",[32,7683,261],{"class":63},[32,7685,7686,7689,7691],{"class":34,"line":3940},[32,7687,7688],{"class":63},"      request->num1 ",[32,7690,1289],{"class":38},[32,7692,7693],{"class":63}," num1;\n",[32,7695,7696,7699,7701],{"class":34,"line":3949},[32,7697,7698],{"class":63},"      request->num2 ",[32,7700,1289],{"class":38},[32,7702,7703],{"class":63}," num2;\n",[32,7705,7706,7708,7711,7714],{"class":34,"line":7035},[32,7707,6928],{"class":38},[32,7709,7710],{"class":63}," client_->",[32,7712,7713],{"class":59},"async_send_request",[32,7715,7716],{"class":63},"(request);\n",[32,7718,7719],{"class":34,"line":7044},[32,7720,148],{"class":63},[32,7722,7723],{"class":34,"line":7049},[32,7724,50],{"emptyLinePlaceholder":49},[32,7726,7727],{"class":34,"line":7060},[32,7728,1378],{"class":38},[32,7730,7731,7733,7735,7737,7739,7741],{"class":34,"line":7065},[32,7732,1497],{"class":59},[32,7734,73],{"class":63},[32,7736,6953],{"class":59},[32,7738,237],{"class":63},[32,7740,5356],{"class":59},[32,7742,6960],{"class":63},[32,7744,7745],{"class":34,"line":7086},[32,7746,154],{"class":63},[32,7748,7749],{"class":34,"line":7091},[32,7750,50],{"emptyLinePlaceholder":49},[32,7752,7753,7755,7757,7759,7761,7763,7765,7767,7769,7771],{"class":34,"line":7110},[32,7754,165],{"class":38},[32,7756,168],{"class":59},[32,7758,103],{"class":63},[32,7760,165],{"class":38},[32,7762,176],{"class":175},[32,7764,179],{"class":63},[32,7766,182],{"class":38},[32,7768,185],{"class":38},[32,7770,188],{"class":175},[32,7772,109],{"class":63},[32,7774,7775],{"class":34,"line":7115},[32,7776,82],{"class":63},[32,7778,7779,7781,7783,7785,7787],{"class":34,"line":7129},[32,7780,6070],{"class":38},[32,7782,6073],{"class":63},[32,7784,6076],{"class":38},[32,7786,6079],{"class":126},[32,7788,109],{"class":63},[32,7790,7791],{"class":34,"line":7134},[32,7792,6086],{"class":63},[32,7794,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813],{"class":34,"line":7158},[32,7796,6353],{"class":59},[32,7798,103],{"class":63},[32,7800,4225],{"class":59},[32,7802,73],{"class":63},[32,7804,133],{"class":59},[32,7806,103],{"class":63},[32,7808,6104],{"class":42},[32,7810,3561],{"class":63},[32,7812,6109],{"class":42},[32,7814,142],{"class":63},[32,7816,7817,7819,7821],{"class":34,"line":7167},[32,7818,1909],{"class":38},[32,7820,2793],{"class":126},[32,7822,273],{"class":63},[32,7824,7825],{"class":34,"line":7172},[32,7826,456],{"class":63},[32,7828,7829,7831,7833,7835],{"class":34,"line":7177},[32,7830,201],{"class":59},[32,7832,73],{"class":63},[32,7834,206],{"class":59},[32,7836,209],{"class":63},[32,7838,7839],{"class":34,"line":7188},[32,7840,50],{"emptyLinePlaceholder":49},[32,7842,7843,7845,7847,7849,7851,7853,7855,7857,7859],{"class":34,"line":7197},[32,7844,4983],{"class":38},[32,7846,4986],{"class":63},[32,7848,1289],{"class":38},[32,7850,1200],{"class":59},[32,7852,73],{"class":63},[32,7854,234],{"class":59},[32,7856,237],{"class":63},[32,7858,4999],{"class":59},[32,7860,5002],{"class":63},[32,7862,7864],{"class":34,"line":7863},57,[32,7865,50],{"emptyLinePlaceholder":49},[32,7867,7869,7871,7873,7875,7877,7879],{"class":34,"line":7868},58,[32,7870,7094],{"class":38},[32,7872,7097],{"class":63},[32,7874,1289],{"class":38},[32,7876,7102],{"class":63},[32,7878,7105],{"class":59},[32,7880,261],{"class":63},[32,7882,7884],{"class":34,"line":7883},59,[32,7885,50],{"emptyLinePlaceholder":49},[32,7887,7889,7891,7893,7895,7897],{"class":34,"line":7888},60,[32,7890,6070],{"class":38},[32,7892,7120],{"class":63},[32,7894,6076],{"class":38},[32,7896,6817],{"class":126},[32,7898,109],{"class":63},[32,7900,7902],{"class":34,"line":7901},61,[32,7903,6086],{"class":63},[32,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925],{"class":34,"line":7906},62,[32,7908,6091],{"class":59},[32,7910,103],{"class":63},[32,7912,4225],{"class":59},[32,7914,73],{"class":63},[32,7916,133],{"class":59},[32,7918,103],{"class":63},[32,7920,6104],{"class":42},[32,7922,3561],{"class":63},[32,7924,7153],{"class":42},[32,7926,142],{"class":63},[32,7928,7930,7932,7934],{"class":34,"line":7929},63,[32,7931,1909],{"class":38},[32,7933,270],{"class":126},[32,7935,273],{"class":63},[32,7937,7939],{"class":34,"line":7938},64,[32,7940,456],{"class":63},[32,7942,7944,7946,7949,7951,7953,7956,7958,7961,7964,7966,7969,7971,7973,7975],{"class":34,"line":7943},65,[32,7945,4983],{"class":38},[32,7947,7948],{"class":63}," future ",[32,7950,1289],{"class":38},[32,7952,7102],{"class":63},[32,7954,7955],{"class":59},"send_request",[32,7957,103],{"class":63},[32,7959,7960],{"class":59},"atoi",[32,7962,7963],{"class":63},"(argv[",[32,7965,1342],{"class":126},[32,7967,7968],{"class":63},"]),",[32,7970,7960],{"class":59},[32,7972,7963],{"class":63},[32,7974,5314],{"class":126},[32,7976,7977],{"class":63},"]));\n",[32,7979,7981],{"class":34,"line":7980},66,[32,7982,50],{"emptyLinePlaceholder":49},[32,7984,7986,7988,7990,7992,7994,7997,8000,8003,8005,8007,8010],{"class":34,"line":7985},67,[32,7987,6070],{"class":38},[32,7989,5390],{"class":63},[32,7991,4225],{"class":59},[32,7993,73],{"class":63},[32,7995,7996],{"class":59},"spin_until_future_complete",[32,7998,7999],{"class":63},"(client,future) ",[32,8001,8002],{"class":38},"==",[32,8004,70],{"class":59},[32,8006,73],{"class":63},[32,8008,8009],{"class":59},"FutureReturnCode",[32,8011,8012],{"class":63},"::SUCCESS)\n",[32,8014,8016],{"class":34,"line":8015},68,[32,8017,6086],{"class":63},[32,8019,8021,8023,8026,8028,8030,8033,8035,8037,8040,8043],{"class":34,"line":8020},69,[32,8022,6091],{"class":59},[32,8024,8025],{"class":63},"(client->",[32,8027,133],{"class":59},[32,8029,136],{"class":63},[32,8031,8032],{"class":42},"\"响应成功! sum = ",[32,8034,3793],{"class":126},[32,8036,1468],{"class":42},[32,8038,8039],{"class":63},",future.",[32,8041,8042],{"class":59},"get",[32,8044,8045],{"class":63},"()->sum);\n",[32,8047,8049],{"class":34,"line":8048},70,[32,8050,456],{"class":63},[32,8052,8054],{"class":34,"line":8053},71,[32,8055,8056],{"class":38},"  else\n",[32,8058,8060],{"class":34,"line":8059},72,[32,8061,6086],{"class":63},[32,8063,8065,8067,8069,8071,8073,8076],{"class":34,"line":8064},73,[32,8066,6091],{"class":59},[32,8068,8025],{"class":63},[32,8070,133],{"class":59},[32,8072,136],{"class":63},[32,8074,8075],{"class":42},"\"响应失败!\"",[32,8077,142],{"class":63},[32,8079,8081],{"class":34,"line":8080},74,[32,8082,456],{"class":63},[32,8084,8086],{"class":34,"line":8085},75,[32,8087,50],{"emptyLinePlaceholder":49},[32,8089,8091,8093,8095,8097],{"class":34,"line":8090},76,[32,8092,201],{"class":59},[32,8094,73],{"class":63},[32,8096,258],{"class":59},[32,8098,261],{"class":63},[32,8100,8102,8104,8106],{"class":34,"line":8101},77,[32,8103,267],{"class":38},[32,8105,270],{"class":126},[32,8107,273],{"class":63},[32,8109,8111],{"class":34,"line":8110},78,[32,8112,279],{"class":63},[10,8114,8116],{"id":8115},"action-communication_theory","Action Communication_Theory",[15,8118,8119],{},[18,8120],{"alt":20,"src":8121},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image618.webp",[15,8123,8124],{},"Having B continuously return the current robot status information to A makes this communication behavior more aligned with our needs for controlling robot navigation.",[15,8126,8127],{},[18,8128],{"alt":20,"src":8129},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image619.webp",[15,8131,8132],{},"Input 10 will accumulate all numbers from 1 to 10, and will iterate through all numbers from 1 to 10, performing the accumulation. The accumulation is time-consuming; assuming each accumulation takes one second.",[15,8134,8135],{},"Then, to make the program's running status visible, an INFO message is sent with each accumulation to indicate the current progress.",[15,8137,8138],{},[18,8139],{"alt":20,"src":8140},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image620.webp",[15,8142,8143],{},"You can cancel the task while it is in progress.",[15,8145,8146],{},"First, the client sends the target data to the server.",[15,8148,8149],{},"Second, the server evaluates the target data and feeds the evaluation result back to the client (whether the target can be achieved).",[15,8151,8152],{},"Third, the client sends the final confirmed target data to the server.",[15,8154,8155],{},"Step 4: The server continuously feeds back the execution process data to the client.",[15,8157,8158],{},"Step five: After completion, the server returns the final result to the client.",[15,8160,8161],{},[18,8162],{"alt":20,"src":8163},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image621.webp",[473,8165],{},[15,8167,8168],{},[18,8169],{"alt":20,"src":8170},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image622.webp",[15,8172,8173],{},[18,8174],{"alt":20,"src":8175},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image623.webp",[15,8177,8178],{},[18,8179],{"alt":20,"src":8180},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image624.webp",[15,8182,8183],{},[18,8184],{"alt":20,"src":8185},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image625.webp",[15,8187,8188],{},[18,8189],{"alt":20,"src":8190},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image626.webp",[15,8192,8193],{},"ros2 pkg create cpp03_action --build-type ament_cmake --dependencies rclcpp rclcpp_action base_interfaces_demo --node-name demo01_action_server",[473,8195],{},[15,8197,8198],{},[18,8199],{"alt":20,"src":8200},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image627.webp",[15,8202,8203],{},[18,8204],{"alt":20,"src":8205},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image628.webp",[15,8207,8208],{},"At the very top is the request data.",[15,8210,8211],{},"In the middle is the data of the final response result.",[15,8213,8214],{},"At the very bottom is the continuous feedback data.",[15,8216,8217],{},[18,8218],{"alt":20,"src":8219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image629.webp",[15,8221,8222],{},[18,8223],{"alt":20,"src":8224},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image630.webp",[15,8226,8227],{},[18,8228],{"alt":20,"src":8229},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image631.webp",[15,8231,8232],{},[18,8233],{"alt":20,"src":8234},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image632.webp",[15,8236,8237,8240,8241,179,8244,8247,8248,5952],{},[29,8238,8239],{},"depend"," is an integration of ",[29,8242,8243],{},"build depend",[29,8245,8246],{},"exe depend",", and ",[29,8249,8250],{},"export depend",[15,8252,8253],{},[18,8254],{"alt":20,"src":8255},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image633.webp",[15,8257,8258],{},[18,8259],{"alt":20,"src":8260},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image634.webp",[15,8262,8263],{},[18,8264],{"alt":20,"src":8265},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image635.webp",[15,8267,8268],{},[18,8269],{"alt":20,"src":8270},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image636.webp",[15,8272,8273],{},[18,8274],{"alt":20,"src":8275},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image637.webp",[15,8277,8278],{},[18,8279],{"alt":20,"src":8280},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image638.webp",[15,8282,8283],{},[18,8284],{"alt":20,"src":8285},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image639.webp",[15,8287,8288],{},[18,8289],{"alt":20,"src":8290},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image640.webp",[15,8292,8293],{},"ros2 interface show base_interfaces_demo/action/Progress",[10,8295,8297],{"id":8296},"action-communication_experiment-1_server-implementation-c","Action Communication_Experiment 1_Server Implementation (C++)",[15,8299,8300],{},[18,8301],{"alt":20,"src":8302},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image641.webp",[23,8304,8306],{"className":25,"code":8305,"language":27,"meta":20,"style":20},"#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",[29,8307,8308,8314,8318,8335,8339,8343,8359,8363,8382,8386,8390,8394,8416,8420,8430,8434,8457,8461,8471,8479],{"__ignoreMap":20},[32,8309,8310,8312],{"class":34,"line":35},[32,8311,39],{"class":38},[32,8313,43],{"class":42},[32,8315,8316],{"class":34,"line":46},[32,8317,50],{"emptyLinePlaceholder":49},[32,8319,8320,8322,8325,8327,8329,8331,8333],{"class":34,"line":53},[32,8321,56],{"class":38},[32,8323,8324],{"class":59}," ProgressActionServer",[32,8326,64],{"class":63},[32,8328,67],{"class":38},[32,8330,70],{"class":59},[32,8332,73],{"class":63},[32,8334,76],{"class":59},[32,8336,8337],{"class":34,"line":79},[32,8338,82],{"class":63},[32,8340,8341],{"class":34,"line":85},[32,8342,88],{"class":38},[32,8344,8345,8348,8350,8352,8354,8357],{"class":34,"line":91},[32,8346,8347],{"class":59},"    ProgressActionServer",[32,8349,97],{"class":63},[32,8351,100],{"class":59},[32,8353,103],{"class":63},[32,8355,8356],{"class":42},"\"progress_action_server_node_cpp\"",[32,8358,109],{"class":63},[32,8360,8361],{"class":34,"line":112},[32,8362,115],{"class":63},[32,8364,8365,8367,8369,8371,8373,8375,8377,8380],{"class":34,"line":118},[32,8366,121],{"class":59},[32,8368,103],{"class":63},[32,8370,127],{"class":126},[32,8372,130],{"class":63},[32,8374,133],{"class":59},[32,8376,136],{"class":63},[32,8378,8379],{"class":42},"\"action服务端创建!\"",[32,8381,142],{"class":63},[32,8383,8384],{"class":34,"line":145},[32,8385,148],{"class":63},[32,8387,8388],{"class":34,"line":151},[32,8389,154],{"class":63},[32,8391,8392],{"class":34,"line":157},[32,8393,50],{"emptyLinePlaceholder":49},[32,8395,8396,8398,8400,8402,8404,8406,8408,8410,8412,8414],{"class":34,"line":162},[32,8397,165],{"class":38},[32,8399,168],{"class":59},[32,8401,103],{"class":63},[32,8403,165],{"class":38},[32,8405,176],{"class":175},[32,8407,179],{"class":63},[32,8409,182],{"class":38},[32,8411,185],{"class":38},[32,8413,188],{"class":175},[32,8415,109],{"class":63},[32,8417,8418],{"class":34,"line":193},[32,8419,82],{"class":63},[32,8421,8422,8424,8426,8428],{"class":34,"line":198},[32,8423,201],{"class":59},[32,8425,73],{"class":63},[32,8427,206],{"class":59},[32,8429,209],{"class":63},[32,8431,8432],{"class":34,"line":212},[32,8433,50],{"emptyLinePlaceholder":49},[32,8435,8436,8438,8440,8442,8444,8446,8448,8450,8452,8455],{"class":34,"line":217},[32,8437,201],{"class":59},[32,8439,73],{"class":63},[32,8441,224],{"class":59},[32,8443,103],{"class":63},[32,8445,229],{"class":59},[32,8447,73],{"class":63},[32,8449,234],{"class":59},[32,8451,237],{"class":63},[32,8453,8454],{"class":59},"ProgressActionServer",[32,8456,243],{"class":63},[32,8458,8459],{"class":34,"line":246},[32,8460,50],{"emptyLinePlaceholder":49},[32,8462,8463,8465,8467,8469],{"class":34,"line":251},[32,8464,201],{"class":59},[32,8466,73],{"class":63},[32,8468,258],{"class":59},[32,8470,261],{"class":63},[32,8472,8473,8475,8477],{"class":34,"line":264},[32,8474,267],{"class":38},[32,8476,270],{"class":126},[32,8478,273],{"class":63},[32,8480,8481],{"class":34,"line":276},[32,8482,279],{"class":63},[15,8484,8485],{},[18,8486],{"alt":20,"src":8487},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image642.webp",[23,8489,8491],{"className":25,"code":8490,"language":27,"meta":20,"style":20},"#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",[29,8492,8493,8499,8503,8520,8524,8528,8543,8547,8566,8570,8574,8578,8600,8604,8614,8618,8641,8645,8655,8663],{"__ignoreMap":20},[32,8494,8495,8497],{"class":34,"line":35},[32,8496,39],{"class":38},[32,8498,43],{"class":42},[32,8500,8501],{"class":34,"line":46},[32,8502,50],{"emptyLinePlaceholder":49},[32,8504,8505,8507,8510,8512,8514,8516,8518],{"class":34,"line":53},[32,8506,56],{"class":38},[32,8508,8509],{"class":59}," ProgressActionClient",[32,8511,64],{"class":63},[32,8513,67],{"class":38},[32,8515,70],{"class":59},[32,8517,73],{"class":63},[32,8519,76],{"class":59},[32,8521,8522],{"class":34,"line":79},[32,8523,82],{"class":63},[32,8525,8526],{"class":34,"line":85},[32,8527,88],{"class":38},[32,8529,8530,8533,8535,8537,8539,8541],{"class":34,"line":91},[32,8531,8532],{"class":59},"    ProgressActionClient",[32,8534,97],{"class":63},[32,8536,100],{"class":59},[32,8538,103],{"class":63},[32,8540,8356],{"class":42},[32,8542,109],{"class":63},[32,8544,8545],{"class":34,"line":112},[32,8546,115],{"class":63},[32,8548,8549,8551,8553,8555,8557,8559,8561,8564],{"class":34,"line":118},[32,8550,121],{"class":59},[32,8552,103],{"class":63},[32,8554,127],{"class":126},[32,8556,130],{"class":63},[32,8558,133],{"class":59},[32,8560,136],{"class":63},[32,8562,8563],{"class":42},"\"action客户端创建!\"",[32,8565,142],{"class":63},[32,8567,8568],{"class":34,"line":145},[32,8569,148],{"class":63},[32,8571,8572],{"class":34,"line":151},[32,8573,154],{"class":63},[32,8575,8576],{"class":34,"line":157},[32,8577,50],{"emptyLinePlaceholder":49},[32,8579,8580,8582,8584,8586,8588,8590,8592,8594,8596,8598],{"class":34,"line":162},[32,8581,165],{"class":38},[32,8583,168],{"class":59},[32,8585,103],{"class":63},[32,8587,165],{"class":38},[32,8589,176],{"class":175},[32,8591,179],{"class":63},[32,8593,182],{"class":38},[32,8595,185],{"class":38},[32,8597,188],{"class":175},[32,8599,109],{"class":63},[32,8601,8602],{"class":34,"line":193},[32,8603,82],{"class":63},[32,8605,8606,8608,8610,8612],{"class":34,"line":198},[32,8607,201],{"class":59},[32,8609,73],{"class":63},[32,8611,206],{"class":59},[32,8613,209],{"class":63},[32,8615,8616],{"class":34,"line":212},[32,8617,50],{"emptyLinePlaceholder":49},[32,8619,8620,8622,8624,8626,8628,8630,8632,8634,8636,8639],{"class":34,"line":217},[32,8621,201],{"class":59},[32,8623,73],{"class":63},[32,8625,224],{"class":59},[32,8627,103],{"class":63},[32,8629,229],{"class":59},[32,8631,73],{"class":63},[32,8633,234],{"class":59},[32,8635,237],{"class":63},[32,8637,8638],{"class":59},"ProgressActionClient",[32,8640,243],{"class":63},[32,8642,8643],{"class":34,"line":246},[32,8644,50],{"emptyLinePlaceholder":49},[32,8646,8647,8649,8651,8653],{"class":34,"line":251},[32,8648,201],{"class":59},[32,8650,73],{"class":63},[32,8652,258],{"class":59},[32,8654,261],{"class":63},[32,8656,8657,8659,8661],{"class":34,"line":264},[32,8658,267],{"class":38},[32,8660,270],{"class":126},[32,8662,273],{"class":63},[32,8664,8665],{"class":34,"line":276},[32,8666,279],{"class":63},[15,8668,8669],{},[18,8670],{"alt":20,"src":8671},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image643.webp",[15,8673,8674],{},[18,8675],{"alt":20,"src":8676},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image644.webp",[15,8678,8679],{},[18,8680],{"alt":20,"src":8681},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image645.webp",[15,8683,8684],{},[18,8685],{"alt":20,"src":8686},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image646.webp",[473,8688],{},[15,8690,8691],{},[18,8692],{"alt":20,"src":8693},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image647.webp",[15,8695,8696],{},[18,8697],{"alt":20,"src":8698},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image648.webp",[15,8700,8701],{},[18,8702],{"alt":20,"src":8703},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image649.webp",[15,8705,8706],{},"There are two templates; we only need to set the action, which is our action interface type.",[15,8708,8709],{},"The first parameter is node; use the this pointer within the class.",[15,8711,8712],{},"The second parameter is the topic, a string.",[15,8714,8715],{},"The third parameter is a callback function used to process the target value.",[15,8717,8718],{},"The fourth parameter is a callback function used to handle the cancellation request.",[15,8720,8721],{},"The fifth parameter is the callback function that generates continuous feedback after receiving the target value.",[15,8723,8724],{},"The sixth and seventh parameters have default values, so ignore them for now.",[15,8726,8727],{},"The return value is an action smart pointer.",[15,8729,8730],{},[18,8731],{"alt":20,"src":8732},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image650.webp",[15,8734,8735],{},[18,8736],{"alt":20,"src":8737},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image651.webp",[15,8739,8740],{},[18,8741],{"alt":20,"src":8742},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image652.webp",[15,8744,8745],{},[18,8746],{"alt":20,"src":8747},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image653.webp",[15,8749,8750],{},[18,8751],{"alt":20,"src":8752},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image654.webp",[15,8754,8755],{},[18,8756],{"alt":20,"src":8757},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image655.webp",[15,8759,8760],{},"Goal_callback parsing:",[15,8762,8763],{},"The first parameter is GoalUUID.",[15,8765,8766],{},"The second parameter is the Goal under our action interface.",[15,8768,8769,8770,8773,8774,8777],{},"The return value is ",[29,8771,8772],{},"goalresponse",", using the namespace ",[29,8775,8776],{},"rclcpp_action",", which encapsulates three constants underneath.",[15,8779,8780],{},"The first one is to receive and execute immediately.",[15,8782,8783],{},"The second is to receive and defer execution.",[15,8785,8786],{},"The third is rejection.",[15,8788,8789],{},[18,8790],{"alt":20,"src":8791},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image656.webp",[15,8793,8794],{},[18,8795],{"alt":20,"src":8796},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image657.webp",[15,8798,8799],{},[18,8800],{"alt":20,"src":8801},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image658.webp",[15,8803,8804],{},[18,8805],{"alt":20,"src":8806},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image659.webp",[15,8808,8809],{},[18,8810],{"alt":20,"src":8811},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image660.webp",[15,8813,8814],{},"The error is caused by not adding a placeholder.",[15,8816,8817],{},[18,8818],{"alt":20,"src":8819},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image661.webp",[15,8821,8822],{},[18,8823],{"alt":20,"src":8824},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image662.webp",[23,8826,8828],{"className":25,"code":8827,"language":27,"meta":20,"style":20},"#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",[29,8829,8830,8836,8843,8850,8854,8868,8881,8894,8898,8914,8918,8922,8936,8940,8958,8962,8967,8972,8977,8982,8987,8992,8997,9002,9006,9028,9036,9043,9065,9087,9109,9114,9118,9123,9173,9177,9181,9194,9198,9202,9207,9248,9252,9256,9269,9273,9277,9282,9315,9319,9323,9327,9331,9346,9350,9354,9376,9380,9390,9394,9416,9420,9430,9438],{"__ignoreMap":20},[32,8831,8832,8834],{"class":34,"line":35},[32,8833,39],{"class":38},[32,8835,43],{"class":42},[32,8837,8838,8840],{"class":34,"line":46},[32,8839,39],{"class":38},[32,8841,8842],{"class":42}," \"rclcpp_action/rclcpp_action.hpp\"\n",[32,8844,8845,8847],{"class":34,"line":53},[32,8846,39],{"class":38},[32,8848,8849],{"class":42}," \"base_interfaces_demo/action/progress.hpp\"\n",[32,8851,8852],{"class":34,"line":79},[32,8853,50],{"emptyLinePlaceholder":49},[32,8855,8856,8858,8860,8862,8865],{"class":34,"line":85},[32,8857,1194],{"class":38},[32,8859,3702],{"class":59},[32,8861,73],{"class":63},[32,8863,8864],{"class":59},"action",[32,8866,8867],{"class":63},"::Progress;\n",[32,8869,8870,8872,8874,8876,8878],{"class":34,"line":91},[32,8871,1194],{"class":38},[32,8873,1200],{"class":59},[32,8875,73],{"class":63},[32,8877,2162],{"class":59},[32,8879,8880],{"class":63},"::_1;\n",[32,8882,8883,8885,8887,8889,8891],{"class":34,"line":112},[32,8884,1194],{"class":38},[32,8886,1200],{"class":59},[32,8888,73],{"class":63},[32,8890,2162],{"class":59},[32,8892,8893],{"class":63},"::_2;\n",[32,8895,8896],{"class":34,"line":118},[32,8897,50],{"emptyLinePlaceholder":49},[32,8899,8900,8902,8904,8906,8908,8910,8912],{"class":34,"line":145},[32,8901,56],{"class":38},[32,8903,8324],{"class":59},[32,8905,64],{"class":63},[32,8907,67],{"class":38},[32,8909,70],{"class":59},[32,8911,73],{"class":63},[32,8913,76],{"class":59},[32,8915,8916],{"class":34,"line":151},[32,8917,82],{"class":63},[32,8919,8920],{"class":34,"line":157},[32,8921,88],{"class":38},[32,8923,8924,8926,8928,8930,8932,8934],{"class":34,"line":162},[32,8925,8347],{"class":59},[32,8927,97],{"class":63},[32,8929,100],{"class":59},[32,8931,103],{"class":63},[32,8933,8356],{"class":42},[32,8935,109],{"class":63},[32,8937,8938],{"class":34,"line":193},[32,8939,115],{"class":63},[32,8941,8942,8944,8946,8948,8950,8952,8954,8956],{"class":34,"line":198},[32,8943,121],{"class":59},[32,8945,103],{"class":63},[32,8947,127],{"class":126},[32,8949,130],{"class":63},[32,8951,133],{"class":59},[32,8953,136],{"class":63},[32,8955,8379],{"class":42},[32,8957,142],{"class":63},[32,8959,8960],{"class":34,"line":212},[32,8961,7645],{"class":4977},[32,8963,8964],{"class":34,"line":217},[32,8965,8966],{"class":4977},"      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n",[32,8968,8969],{"class":34,"line":246},[32,8970,8971],{"class":4977},"      NodeT>(NodeT node,\n",[32,8973,8974],{"class":34,"line":251},[32,8975,8976],{"class":4977},"      const std::string &name,\n",[32,8978,8979],{"class":34,"line":264},[32,8980,8981],{"class":4977},"      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n",[32,8983,8984],{"class":34,"line":276},[32,8985,8986],{"class":4977},"      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n",[32,8988,8989],{"class":34,"line":418},[32,8990,8991],{"class":4977},"      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n",[32,8993,8994],{"class":34,"line":423},[32,8995,8996],{"class":4977},"      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n",[32,8998,8999],{"class":34,"line":429},[32,9000,9001],{"class":4977},"      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n",[32,9003,9004],{"class":34,"line":435},[32,9005,7660],{"class":4977},[32,9007,9008,9010,9012,9015,9017,9020,9022,9025],{"class":34,"line":441},[32,9009,5248],{"class":63},[32,9011,1289],{"class":38},[32,9013,9014],{"class":59}," rclcpp_action",[32,9016,73],{"class":63},[32,9018,9019],{"class":59},"create_server",[32,9021,237],{"class":63},[32,9023,9024],{"class":59},"Progress",[32,9026,9027],{"class":63},">(\n",[32,9029,9030,9033],{"class":34,"line":447},[32,9031,9032],{"class":126},"        this",[32,9034,9035],{"class":63},",\n",[32,9037,9038,9041],{"class":34,"line":453},[32,9039,9040],{"class":42},"        \"get_sum_topic\"",[32,9042,9035],{"class":63},[32,9044,9045,9047,9049,9051,9053,9055,9057,9060,9062],{"class":34,"line":459},[32,9046,2740],{"class":59},[32,9048,73],{"class":63},[32,9050,1354],{"class":59},[32,9052,103],{"class":63},[32,9054,1359],{"class":38},[32,9056,8454],{"class":59},[32,9058,9059],{"class":63},"::handle_goal_callback,",[32,9061,127],{"class":126},[32,9063,9064],{"class":63},",_1,_2),\n",[32,9066,9067,9069,9071,9073,9075,9077,9079,9082,9084],{"class":34,"line":1569},[32,9068,2740],{"class":59},[32,9070,73],{"class":63},[32,9072,1354],{"class":59},[32,9074,103],{"class":63},[32,9076,1359],{"class":38},[32,9078,8454],{"class":59},[32,9080,9081],{"class":63},"::handle_cancel_callback,",[32,9083,127],{"class":126},[32,9085,9086],{"class":63},",_1),\n",[32,9088,9089,9091,9093,9095,9097,9099,9101,9104,9106],{"class":34,"line":1574},[32,9090,2740],{"class":59},[32,9092,73],{"class":63},[32,9094,1354],{"class":59},[32,9096,103],{"class":63},[32,9098,1359],{"class":38},[32,9100,8454],{"class":59},[32,9102,9103],{"class":63},"::handle_accepted_callback,",[32,9105,127],{"class":126},[32,9107,9108],{"class":63},",_1)\n",[32,9110,9111],{"class":34,"line":1585},[32,9112,9113],{"class":63},"        );\n",[32,9115,9116],{"class":34,"line":1590},[32,9117,148],{"class":63},[32,9119,9120],{"class":34,"line":1613},[32,9121,9122],{"class":4977},"    //std::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n",[32,9124,9125,9128,9130,9133,9136,9138,9140,9142,9144,9147,9149,9151,9153,9155,9158,9160,9162,9165,9167,9170],{"class":34,"line":1618},[32,9126,9127],{"class":59},"    rclcpp_action",[32,9129,73],{"class":63},[32,9131,9132],{"class":59},"GoalResponse",[32,9134,9135],{"class":59}," handle_goal_callback",[32,9137,103],{"class":63},[32,9139,2190],{"class":38},[32,9141,9014],{"class":59},[32,9143,73],{"class":63},[32,9145,9146],{"class":59},"GoalUUID",[32,9148,2203],{"class":38},[32,9150,179],{"class":63},[32,9152,229],{"class":59},[32,9154,73],{"class":63},[32,9156,9157],{"class":59},"shared_ptr",[32,9159,237],{"class":63},[32,9161,2190],{"class":38},[32,9163,9164],{"class":59}," Progress",[32,9166,73],{"class":63},[32,9168,9169],{"class":59},"Goal",[32,9171,9172],{"class":63},">)\n",[32,9174,9175],{"class":34,"line":1629},[32,9176,115],{"class":63},[32,9178,9179],{"class":34,"line":1638},[32,9180,50],{"emptyLinePlaceholder":49},[32,9182,9183,9185,9187,9189,9191],{"class":34,"line":3929},[32,9184,6928],{"class":38},[32,9186,9014],{"class":59},[32,9188,73],{"class":63},[32,9190,9132],{"class":59},[32,9192,9193],{"class":63},"::ACCEPT_AND_EXECUTE;\n",[32,9195,9196],{"class":34,"line":3940},[32,9197,148],{"class":63},[32,9199,9200],{"class":34,"line":3949},[32,9201,50],{"emptyLinePlaceholder":49},[32,9203,9204],{"class":34,"line":7035},[32,9205,9206],{"class":4977},"    //std::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[32,9208,9209,9211,9213,9216,9219,9221,9223,9225,9227,9229,9231,9233,9236,9238,9240,9243,9246],{"class":34,"line":7044},[32,9210,9127],{"class":59},[32,9212,73],{"class":63},[32,9214,9215],{"class":59},"CancelResponse",[32,9217,9218],{"class":59}," handle_cancel_callback",[32,9220,103],{"class":63},[32,9222,229],{"class":59},[32,9224,73],{"class":63},[32,9226,9157],{"class":59},[32,9228,237],{"class":63},[32,9230,8776],{"class":59},[32,9232,73],{"class":63},[32,9234,9235],{"class":59},"ServerGoalHandle",[32,9237,237],{"class":63},[32,9239,9024],{"class":59},[32,9241,9242],{"class":63},">> ",[32,9244,9245],{"class":175},"goal_handle",[32,9247,109],{"class":63},[32,9249,9250],{"class":34,"line":7049},[32,9251,115],{"class":63},[32,9253,9254],{"class":34,"line":7060},[32,9255,50],{"emptyLinePlaceholder":49},[32,9257,9258,9260,9262,9264,9266],{"class":34,"line":7065},[32,9259,6928],{"class":38},[32,9261,9014],{"class":59},[32,9263,73],{"class":63},[32,9265,9215],{"class":59},[32,9267,9268],{"class":63},"::ACCEPT;\n",[32,9270,9271],{"class":34,"line":7086},[32,9272,148],{"class":63},[32,9274,9275],{"class":34,"line":7091},[32,9276,50],{"emptyLinePlaceholder":49},[32,9278,9279],{"class":34,"line":7110},[32,9280,9281],{"class":4977},"    //std::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[32,9283,9284,9286,9289,9291,9293,9295,9297,9299,9301,9303,9305,9307,9309,9311,9313],{"class":34,"line":7115},[32,9285,1383],{"class":38},[32,9287,9288],{"class":59}," handle_accepted_callback",[32,9290,103],{"class":63},[32,9292,229],{"class":59},[32,9294,73],{"class":63},[32,9296,9157],{"class":59},[32,9298,237],{"class":63},[32,9300,8776],{"class":59},[32,9302,73],{"class":63},[32,9304,9235],{"class":59},[32,9306,237],{"class":63},[32,9308,9024],{"class":59},[32,9310,9242],{"class":63},[32,9312,9245],{"class":175},[32,9314,109],{"class":63},[32,9316,9317],{"class":34,"line":7129},[32,9318,115],{"class":63},[32,9320,9321],{"class":34,"line":7134},[32,9322,148],{"class":63},[32,9324,9325],{"class":34,"line":7158},[32,9326,50],{"emptyLinePlaceholder":49},[32,9328,9329],{"class":34,"line":7167},[32,9330,1378],{"class":38},[32,9332,9333,9335,9337,9340,9342,9344],{"class":34,"line":7172},[32,9334,9127],{"class":59},[32,9336,73],{"class":63},[32,9338,9339],{"class":59},"Server",[32,9341,237],{"class":63},[32,9343,9024],{"class":59},[32,9345,5459],{"class":63},[32,9347,9348],{"class":34,"line":7177},[32,9349,154],{"class":63},[32,9351,9352],{"class":34,"line":7188},[32,9353,50],{"emptyLinePlaceholder":49},[32,9355,9356,9358,9360,9362,9364,9366,9368,9370,9372,9374],{"class":34,"line":7197},[32,9357,165],{"class":38},[32,9359,168],{"class":59},[32,9361,103],{"class":63},[32,9363,165],{"class":38},[32,9365,176],{"class":175},[32,9367,179],{"class":63},[32,9369,182],{"class":38},[32,9371,185],{"class":38},[32,9373,188],{"class":175},[32,9375,109],{"class":63},[32,9377,9378],{"class":34,"line":7863},[32,9379,82],{"class":63},[32,9381,9382,9384,9386,9388],{"class":34,"line":7868},[32,9383,201],{"class":59},[32,9385,73],{"class":63},[32,9387,206],{"class":59},[32,9389,209],{"class":63},[32,9391,9392],{"class":34,"line":7883},[32,9393,50],{"emptyLinePlaceholder":49},[32,9395,9396,9398,9400,9402,9404,9406,9408,9410,9412,9414],{"class":34,"line":7888},[32,9397,201],{"class":59},[32,9399,73],{"class":63},[32,9401,224],{"class":59},[32,9403,103],{"class":63},[32,9405,229],{"class":59},[32,9407,73],{"class":63},[32,9409,234],{"class":59},[32,9411,237],{"class":63},[32,9413,8454],{"class":59},[32,9415,243],{"class":63},[32,9417,9418],{"class":34,"line":7901},[32,9419,50],{"emptyLinePlaceholder":49},[32,9421,9422,9424,9426,9428],{"class":34,"line":7906},[32,9423,201],{"class":59},[32,9425,73],{"class":63},[32,9427,258],{"class":59},[32,9429,261],{"class":63},[32,9431,9432,9434,9436],{"class":34,"line":7929},[32,9433,267],{"class":38},[32,9435,270],{"class":126},[32,9437,273],{"class":63},[32,9439,9440],{"class":34,"line":7938},[32,9441,279],{"class":63},[15,9443,9444],{},[18,9445],{"alt":20,"src":9446},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image663.webp",[15,9448,9449],{},[18,9450],{"alt":20,"src":9451},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image664.webp",[15,9453,9454],{},[18,9455],{"alt":20,"src":9456},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image665.webp",[15,9458,9459],{},[18,9460],{"alt":20,"src":9461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image666.webp",[23,9463,9465],{"className":1654,"code":9464,"language":1656,"meta":20,"style":20},"ros2 action send_goal /get_sum_topic base_interfaces_demo/action/Progress -f \"{'num': 10}\"\n",[29,9466,9467],{"__ignoreMap":20},[32,9468,9469,9471,9474,9477,9480,9483,9486],{"class":34,"line":35},[32,9470,1663],{"class":59},[32,9472,9473],{"class":42}," action",[32,9475,9476],{"class":42}," send_goal",[32,9478,9479],{"class":42}," /get_sum_topic",[32,9481,9482],{"class":42}," base_interfaces_demo/action/Progress",[32,9484,9485],{"class":126}," -f",[32,9487,9488],{"class":42}," \"{'num': 10}\"\n",[15,9490,9491],{},"ros2 action send_goal /topic_name + interface type + -f + parameters",[15,9493,9494,9497],{},[29,9495,9496],{},"-f"," is for continuous feedback, meaning it can retrieve continuous feedback.",[15,9499,9500],{},[18,9501],{"alt":20,"src":9502},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image667.webp",[15,9504,9505],{},"Send target value of 10.",[15,9507,9508],{},"Then we set an ID for our client. Since multiple clients may access this server, we need to assign a unique ID to each client.",[15,9510,9511],{},"Then the result is 0.",[15,9513,9514],{},"Because our program hasn't written anything yet.",[473,9516],{},[15,9518,9519],{},[18,9520],{"alt":20,"src":9521},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image668.webp",[15,9523,9524],{},"The uuid is the client ID. Since it is not used here, use (void)uuid, because the compiler may issue a warning if it is not used.",[15,9526,9527],{},[18,9528],{"alt":20,"src":9529},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image669.webp",[15,9531,9532],{},[18,9533],{"alt":20,"src":9534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image670.webp",[15,9536,9537],{},[18,9538],{"alt":20,"src":9539},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image671.webp",[15,9541,9542],{},[18,9543],{"alt":20,"src":9544},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image672.webp",[15,9546,9547],{},[18,9548],{"alt":20,"src":9549},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image673.webp",[473,9551],{},[15,9553,9554,9555,9558],{},"Our task can be canceled normally, so simply returning ",[29,9556,9557],{},"accept"," is sufficient. Different actions can be performed within the function based on the specific requirements of each task.",[15,9560,9561],{},[18,9562],{"alt":20,"src":9563},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image674.webp",[15,9565,9566],{},[18,9567],{"alt":20,"src":9568},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image675.webp",[473,9570],{},[15,9572,9573],{},"Because our continuous feedback and final response generation are time-consuming operations, to avoid blocking the main logic, it is recommended to start a separate thread.",[15,9575,9576],{},[18,9577],{"alt":20,"src":9578},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image676.webp",[15,9580,9581],{},[18,9582],{"alt":20,"src":9583},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image677.webp",[15,9585,9586],{},[18,9587],{"alt":20,"src":9588},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image678.webp",[15,9590,9591],{},[18,9592],{"alt":20,"src":9593},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image679.webp",[15,9595,9596],{},[18,9597],{"alt":20,"src":9598},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image680.webp",[15,9600,9601],{},"Generate a continuous feedback API that requires parameters. The parameter passed in is the Feedback object from Progress.",[15,9603,9604],{},[18,9605],{"alt":20,"src":9606},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image681.webp",[15,9608,9609],{},"get_goal() can retrieve the target value.",[15,9611,9612],{},[18,9613],{"alt":20,"src":9614},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image682.webp",[15,9616,9617],{},[18,9618],{"alt":20,"src":9619},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image683.webp",[15,9621,9622],{},"Because this is a time-consuming operation, in order to see the effect, we set a sleep each time we loop.",[15,9624,9625],{},[18,9626],{"alt":20,"src":9627},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image684.webp",[15,9629,9630],{},"1.0 refers to 1 Hz, meaning it executes once every second.",[15,9632,9633],{},[18,9634],{"alt":20,"src":9635},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image685.webp",[15,9637,9638,9639,9642],{},"Because it's 1Hz, our ",[29,9640,9641],{},"rate.sleep()"," will sleep for 1 second each time.",[15,9644,9645],{},[18,9646],{"alt":20,"src":9647},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image686.webp",[15,9649,9650,9651,9654,9655,5952],{},"The API to generate the final result requires parameters, and the parameter passed in is the ",[29,9652,9653],{},"Result"," object from ",[29,9656,9024],{},[15,9658,9659],{},[18,9660],{"alt":20,"src":9661},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image687.webp",[15,9663,9664,9665,9668,9669,9671,9672,9674],{},"The return value of the ",[29,9666,9667],{},"ok()"," function: returns ",[29,9670,6560],{}," if it runs normally, and returns ",[29,9673,6564],{}," if it does not run normally.",[15,9676,9677],{},[18,9678],{"alt":20,"src":9679},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image688.webp",[15,9681,9682],{},[18,9683],{"alt":20,"src":9684},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image689.webp",[15,9686,9687],{},[18,9688],{"alt":20,"src":9689},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image690.webp",[15,9691,9692],{},[18,9693],{"alt":20,"src":9694},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image691.webp",[15,9696,9697],{},[18,9698],{"alt":20,"src":9699},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image692.webp",[15,9701,9702],{},[18,9703],{"alt":20,"src":9704},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image693.webp",[15,9706,9707],{},[18,9708],{"alt":20,"src":9709},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image694.webp",[15,9711,9712],{},[18,9713],{"alt":20,"src":9714},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image695.webp",[15,9716,9717],{},[18,9718],{"alt":20,"src":9719},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image696.webp",[15,9721,9722],{},[18,9723],{"alt":20,"src":9724},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image697.webp",[473,9726],{},[15,9728,9729],{},"Bug: When we terminate the client, the server does not stop running. The server must keep executing until the program ends.",[15,9731,9732],{},[18,9733],{"alt":20,"src":9734},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image698.webp",[15,9736,9737],{},"Bug Resolution Approach:",[15,9739,9740,9741,9744],{},"After receiving a cancellation request, my main logic is interrupted, meaning ",[29,9742,9743],{},"execute_callback"," is terminated.",[15,9746,9747],{},[18,9748],{"alt":20,"src":9749},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image699.webp",[15,9751,9752,9753,9755,9756,5952],{},"This function returns a boolean value. It returns ",[29,9754,6560],{}," if a cancellation request is received, otherwise it returns ",[29,9757,6564],{},[15,9759,9760],{},[18,9761],{"alt":20,"src":9762},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image700.webp",[15,9764,9765,9766,781],{},"After we cancel, we can still report the final result back to the client using the ",[29,9767,9768],{},"canceled",[15,9770,9771],{},[18,9772],{"alt":20,"src":9773},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image701.webp",[15,9775,9776],{},[18,9777],{"alt":20,"src":9778},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image702.webp",[15,9780,9781],{},[18,9782],{"alt":20,"src":9783},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image703.webp",[15,9785,9786,9787,9790],{},"Move the definition of ",[29,9788,9789],{},"result"," to the front.",[15,9792,9793],{},[18,9794],{"alt":20,"src":9795},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image704.webp",[15,9797,9798],{},[18,9799],{"alt":20,"src":9800},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image705.webp",[15,9802,9803],{},[18,9804],{"alt":20,"src":9805},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image706.webp",[23,9807,9809],{"className":25,"code":9808,"language":27,"meta":20,"style":20},"#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",[29,9810,9811,9817,9823,9829,9833,9845,9857,9869,9873,9889,9893,9897,9911,9915,9933,9937,9941,9945,9949,9953,9957,9961,9965,9969,9973,9991,9997,10003,10023,10043,10063,10067,10071,10075,10079,10130,10134,10145,10160,10164,10183,10196,10200,10219,10231,10235,10239,10243,10279,10283,10292,10311,10323,10327,10331,10335,10368,10372,10377,10382,10401,10414,10437,10459,10477,10505,10509,10520,10543,10553,10557,10568,10592,10596,10614,10618,10628,10638,10657,10664,10669,10674,10685,10690,10695,10701,10707,10712,10733,10738,10748,10758,10783,10788,10793,10798,10803,10836,10841,10879,10884,10889,10894,10909,10914,10919,10942,10947,10958,10963,10986,10991,11002,11011],{"__ignoreMap":20},[32,9812,9813,9815],{"class":34,"line":35},[32,9814,39],{"class":38},[32,9816,43],{"class":42},[32,9818,9819,9821],{"class":34,"line":46},[32,9820,39],{"class":38},[32,9822,8842],{"class":42},[32,9824,9825,9827],{"class":34,"line":53},[32,9826,39],{"class":38},[32,9828,8849],{"class":42},[32,9830,9831],{"class":34,"line":79},[32,9832,50],{"emptyLinePlaceholder":49},[32,9834,9835,9837,9839,9841,9843],{"class":34,"line":85},[32,9836,1194],{"class":38},[32,9838,3702],{"class":59},[32,9840,73],{"class":63},[32,9842,8864],{"class":59},[32,9844,8867],{"class":63},[32,9846,9847,9849,9851,9853,9855],{"class":34,"line":91},[32,9848,1194],{"class":38},[32,9850,1200],{"class":59},[32,9852,73],{"class":63},[32,9854,2162],{"class":59},[32,9856,8880],{"class":63},[32,9858,9859,9861,9863,9865,9867],{"class":34,"line":112},[32,9860,1194],{"class":38},[32,9862,1200],{"class":59},[32,9864,73],{"class":63},[32,9866,2162],{"class":59},[32,9868,8893],{"class":63},[32,9870,9871],{"class":34,"line":118},[32,9872,50],{"emptyLinePlaceholder":49},[32,9874,9875,9877,9879,9881,9883,9885,9887],{"class":34,"line":145},[32,9876,56],{"class":38},[32,9878,8324],{"class":59},[32,9880,64],{"class":63},[32,9882,67],{"class":38},[32,9884,70],{"class":59},[32,9886,73],{"class":63},[32,9888,76],{"class":59},[32,9890,9891],{"class":34,"line":151},[32,9892,82],{"class":63},[32,9894,9895],{"class":34,"line":157},[32,9896,88],{"class":38},[32,9898,9899,9901,9903,9905,9907,9909],{"class":34,"line":162},[32,9900,8347],{"class":59},[32,9902,97],{"class":63},[32,9904,100],{"class":59},[32,9906,103],{"class":63},[32,9908,8356],{"class":42},[32,9910,109],{"class":63},[32,9912,9913],{"class":34,"line":193},[32,9914,115],{"class":63},[32,9916,9917,9919,9921,9923,9925,9927,9929,9931],{"class":34,"line":198},[32,9918,121],{"class":59},[32,9920,103],{"class":63},[32,9922,127],{"class":126},[32,9924,130],{"class":63},[32,9926,133],{"class":59},[32,9928,136],{"class":63},[32,9930,8379],{"class":42},[32,9932,142],{"class":63},[32,9934,9935],{"class":34,"line":212},[32,9936,7645],{"class":4977},[32,9938,9939],{"class":34,"line":217},[32,9940,8966],{"class":4977},[32,9942,9943],{"class":34,"line":246},[32,9944,8971],{"class":4977},[32,9946,9947],{"class":34,"line":251},[32,9948,8976],{"class":4977},[32,9950,9951],{"class":34,"line":264},[32,9952,8981],{"class":4977},[32,9954,9955],{"class":34,"line":276},[32,9956,8986],{"class":4977},[32,9958,9959],{"class":34,"line":418},[32,9960,8991],{"class":4977},[32,9962,9963],{"class":34,"line":423},[32,9964,8996],{"class":4977},[32,9966,9967],{"class":34,"line":429},[32,9968,9001],{"class":4977},[32,9970,9971],{"class":34,"line":435},[32,9972,7660],{"class":4977},[32,9974,9975,9977,9979,9981,9983,9985,9987,9989],{"class":34,"line":441},[32,9976,5248],{"class":63},[32,9978,1289],{"class":38},[32,9980,9014],{"class":59},[32,9982,73],{"class":63},[32,9984,9019],{"class":59},[32,9986,237],{"class":63},[32,9988,9024],{"class":59},[32,9990,9027],{"class":63},[32,9992,9993,9995],{"class":34,"line":447},[32,9994,9032],{"class":126},[32,9996,9035],{"class":63},[32,9998,9999,10001],{"class":34,"line":453},[32,10000,9040],{"class":42},[32,10002,9035],{"class":63},[32,10004,10005,10007,10009,10011,10013,10015,10017,10019,10021],{"class":34,"line":459},[32,10006,2740],{"class":59},[32,10008,73],{"class":63},[32,10010,1354],{"class":59},[32,10012,103],{"class":63},[32,10014,1359],{"class":38},[32,10016,8454],{"class":59},[32,10018,9059],{"class":63},[32,10020,127],{"class":126},[32,10022,9064],{"class":63},[32,10024,10025,10027,10029,10031,10033,10035,10037,10039,10041],{"class":34,"line":1569},[32,10026,2740],{"class":59},[32,10028,73],{"class":63},[32,10030,1354],{"class":59},[32,10032,103],{"class":63},[32,10034,1359],{"class":38},[32,10036,8454],{"class":59},[32,10038,9081],{"class":63},[32,10040,127],{"class":126},[32,10042,9086],{"class":63},[32,10044,10045,10047,10049,10051,10053,10055,10057,10059,10061],{"class":34,"line":1574},[32,10046,2740],{"class":59},[32,10048,73],{"class":63},[32,10050,1354],{"class":59},[32,10052,103],{"class":63},[32,10054,1359],{"class":38},[32,10056,8454],{"class":59},[32,10058,9103],{"class":63},[32,10060,127],{"class":126},[32,10062,9108],{"class":63},[32,10064,10065],{"class":34,"line":1585},[32,10066,9113],{"class":63},[32,10068,10069],{"class":34,"line":1590},[32,10070,148],{"class":63},[32,10072,10073],{"class":34,"line":1613},[32,10074,50],{"emptyLinePlaceholder":49},[32,10076,10077],{"class":34,"line":1618},[32,10078,9122],{"class":4977},[32,10080,10081,10083,10085,10087,10089,10091,10093,10095,10097,10099,10101,10104,10106,10108,10110,10112,10114,10116,10118,10120,10122,10125,10128],{"class":34,"line":1629},[32,10082,9127],{"class":59},[32,10084,73],{"class":63},[32,10086,9132],{"class":59},[32,10088,9135],{"class":59},[32,10090,103],{"class":63},[32,10092,2190],{"class":38},[32,10094,9014],{"class":59},[32,10096,73],{"class":63},[32,10098,9146],{"class":59},[32,10100,2203],{"class":38},[32,10102,10103],{"class":175},"uuid",[32,10105,179],{"class":63},[32,10107,229],{"class":59},[32,10109,73],{"class":63},[32,10111,9157],{"class":59},[32,10113,237],{"class":63},[32,10115,2190],{"class":38},[32,10117,9164],{"class":59},[32,10119,73],{"class":63},[32,10121,9169],{"class":59},[32,10123,10124],{"class":63},"> ",[32,10126,10127],{"class":175},"goal",[32,10129,109],{"class":63},[32,10131,10132],{"class":34,"line":1638},[32,10133,115],{"class":63},[32,10135,10136,10139,10142],{"class":34,"line":3929},[32,10137,10138],{"class":63},"      (",[32,10140,10141],{"class":38},"void",[32,10143,10144],{"class":63},")uuid;\n",[32,10146,10147,10150,10153,10156,10158],{"class":34,"line":3940},[32,10148,10149],{"class":38},"      if",[32,10151,10152],{"class":63},"(goal->num ",[32,10154,10155],{"class":38},"\u003C=",[32,10157,2793],{"class":126},[32,10159,109],{"class":63},[32,10161,10162],{"class":34,"line":3949},[32,10163,6824],{"class":63},[32,10165,10166,10168,10170,10172,10174,10176,10178,10181],{"class":34,"line":7035},[32,10167,1798],{"class":59},[32,10169,103],{"class":63},[32,10171,127],{"class":126},[32,10173,130],{"class":63},[32,10175,133],{"class":59},[32,10177,136],{"class":63},[32,10179,10180],{"class":42},"\"提交的目标值必须大于1!\"",[32,10182,142],{"class":63},[32,10184,10185,10187,10189,10191,10193],{"class":34,"line":7044},[32,10186,2790],{"class":38},[32,10188,9014],{"class":59},[32,10190,73],{"class":63},[32,10192,9132],{"class":59},[32,10194,10195],{"class":63},"::REJECT;\n",[32,10197,10198],{"class":34,"line":7049},[32,10199,6923],{"class":63},[32,10201,10202,10204,10206,10208,10210,10212,10214,10217],{"class":34,"line":7060},[32,10203,121],{"class":59},[32,10205,103],{"class":63},[32,10207,127],{"class":126},[32,10209,130],{"class":63},[32,10211,133],{"class":59},[32,10213,136],{"class":63},[32,10215,10216],{"class":42},"\"提交的目标值合法!\"",[32,10218,142],{"class":63},[32,10220,10221,10223,10225,10227,10229],{"class":34,"line":7065},[32,10222,6928],{"class":38},[32,10224,9014],{"class":59},[32,10226,73],{"class":63},[32,10228,9132],{"class":59},[32,10230,9193],{"class":63},[32,10232,10233],{"class":34,"line":7086},[32,10234,148],{"class":63},[32,10236,10237],{"class":34,"line":7091},[32,10238,50],{"emptyLinePlaceholder":49},[32,10240,10241],{"class":34,"line":7110},[32,10242,9206],{"class":4977},[32,10244,10245,10247,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275,10277],{"class":34,"line":7115},[32,10246,9127],{"class":59},[32,10248,73],{"class":63},[32,10250,9215],{"class":59},[32,10252,9218],{"class":59},[32,10254,103],{"class":63},[32,10256,229],{"class":59},[32,10258,73],{"class":63},[32,10260,9157],{"class":59},[32,10262,237],{"class":63},[32,10264,8776],{"class":59},[32,10266,73],{"class":63},[32,10268,9235],{"class":59},[32,10270,237],{"class":63},[32,10272,9024],{"class":59},[32,10274,9242],{"class":63},[32,10276,9245],{"class":175},[32,10278,109],{"class":63},[32,10280,10281],{"class":34,"line":7129},[32,10282,115],{"class":63},[32,10284,10285,10287,10289],{"class":34,"line":7134},[32,10286,10138],{"class":63},[32,10288,10141],{"class":38},[32,10290,10291],{"class":63},")goal_handle;\n",[32,10293,10294,10296,10298,10300,10302,10304,10306,10309],{"class":34,"line":7158},[32,10295,121],{"class":59},[32,10297,103],{"class":63},[32,10299,127],{"class":126},[32,10301,130],{"class":63},[32,10303,133],{"class":59},[32,10305,136],{"class":63},[32,10307,10308],{"class":42},"\"接收到任务取消请求!\"",[32,10310,142],{"class":63},[32,10312,10313,10315,10317,10319,10321],{"class":34,"line":7167},[32,10314,6928],{"class":38},[32,10316,9014],{"class":59},[32,10318,73],{"class":63},[32,10320,9215],{"class":59},[32,10322,9268],{"class":63},[32,10324,10325],{"class":34,"line":7172},[32,10326,148],{"class":63},[32,10328,10329],{"class":34,"line":7177},[32,10330,50],{"emptyLinePlaceholder":49},[32,10332,10333],{"class":34,"line":7188},[32,10334,9281],{"class":4977},[32,10336,10337,10339,10342,10344,10346,10348,10350,10352,10354,10356,10358,10360,10362,10364,10366],{"class":34,"line":7197},[32,10338,1383],{"class":38},[32,10340,10341],{"class":59}," execute_callback",[32,10343,103],{"class":63},[32,10345,229],{"class":59},[32,10347,73],{"class":63},[32,10349,9157],{"class":59},[32,10351,237],{"class":63},[32,10353,8776],{"class":59},[32,10355,73],{"class":63},[32,10357,9235],{"class":59},[32,10359,237],{"class":63},[32,10361,9024],{"class":59},[32,10363,9242],{"class":63},[32,10365,9245],{"class":175},[32,10367,109],{"class":63},[32,10369,10370],{"class":34,"line":7863},[32,10371,115],{"class":63},[32,10373,10374],{"class":34,"line":7868},[32,10375,10376],{"class":4977},"      //void publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n",[32,10378,10379],{"class":34,"line":7883},[32,10380,10381],{"class":4977},"      //goal_handle->publish_feedback();\n",[32,10383,10384,10387,10390,10392,10395,10398],{"class":34,"line":7888},[32,10385,10386],{"class":38},"      int",[32,10388,10389],{"class":63}," num ",[32,10391,1289],{"class":38},[32,10393,10394],{"class":63}," goal_handle->",[32,10396,10397],{"class":59},"get_goal",[32,10399,10400],{"class":63},"()->num;\n",[32,10402,10403,10405,10408,10410,10412],{"class":34,"line":7901},[32,10404,10386],{"class":38},[32,10406,10407],{"class":63}," sum ",[32,10409,1289],{"class":38},[32,10411,270],{"class":126},[32,10413,273],{"class":63},[32,10415,10416,10418,10421,10423,10425,10427,10430,10432,10435],{"class":34,"line":7906},[32,10417,1398],{"class":38},[32,10419,10420],{"class":63}," feedback ",[32,10422,1289],{"class":38},[32,10424,1200],{"class":59},[32,10426,73],{"class":63},[32,10428,10429],{"class":59},"make_sharedautolinkProgress",[32,10431,73],{"class":63},[32,10433,10434],{"class":59},"Feedbackautolink",[32,10436,261],{"class":63},[32,10438,10439,10441,10444,10446,10448,10450,10452,10454,10457],{"class":34,"line":7929},[32,10440,1398],{"class":38},[32,10442,10443],{"class":63}," result ",[32,10445,1289],{"class":38},[32,10447,1200],{"class":59},[32,10449,73],{"class":63},[32,10451,10429],{"class":59},[32,10453,73],{"class":63},[32,10455,10456],{"class":59},"Resultautolink",[32,10458,261],{"class":63},[32,10460,10461,10464,10467,10470,10472,10475],{"class":34,"line":7938},[32,10462,10463],{"class":59},"      rclcpp",[32,10465,10466],{"class":63},"::Rate ",[32,10468,10469],{"class":59},"rate",[32,10471,103],{"class":63},[32,10473,10474],{"class":126},"1.0",[32,10476,142],{"class":63},[32,10478,10479,10482,10484,10486,10489,10491,10493,10496,10498,10501,10503],{"class":34,"line":7943},[32,10480,10481],{"class":38},"      for",[32,10483,5390],{"class":63},[32,10485,7624],{"class":38},[32,10487,10488],{"class":63}," i ",[32,10490,1289],{"class":38},[32,10492,2793],{"class":126},[32,10494,10495],{"class":63},"; i ",[32,10497,10155],{"class":38},[32,10499,10500],{"class":63}," num; i",[32,10502,1443],{"class":38},[32,10504,109],{"class":63},[32,10506,10507],{"class":34,"line":7980},[32,10508,6824],{"class":63},[32,10510,10511,10514,10517],{"class":34,"line":7985},[32,10512,10513],{"class":63},"        sum ",[32,10515,10516],{"class":38},"+=",[32,10518,10519],{"class":63}," i;\n",[32,10521,10522,10525,10528,10530,10532,10535,10537,10540],{"class":34,"line":8015},[32,10523,10524],{"class":38},"        double",[32,10526,10527],{"class":63}," progress ",[32,10529,1289],{"class":38},[32,10531,10488],{"class":63},[32,10533,10534],{"class":38},"/",[32,10536,5390],{"class":63},[32,10538,10539],{"class":38},"double",[32,10541,10542],{"class":63},")num;\n",[32,10544,10545,10548,10550],{"class":34,"line":8020},[32,10546,10547],{"class":63},"        feedback->progress ",[32,10549,1289],{"class":38},[32,10551,10552],{"class":63}," progress;\n",[32,10554,10555],{"class":34,"line":8048},[32,10556,50],{"emptyLinePlaceholder":49},[32,10558,10559,10562,10565],{"class":34,"line":8053},[32,10560,10561],{"class":63},"        goal_handle->",[32,10563,10564],{"class":59},"publish_feedback",[32,10566,10567],{"class":63},"(feedback);\n",[32,10569,10570,10572,10574,10576,10578,10580,10582,10585,10587,10589],{"class":34,"line":8059},[32,10571,1798],{"class":59},[32,10573,103],{"class":63},[32,10575,127],{"class":126},[32,10577,130],{"class":63},[32,10579,133],{"class":59},[32,10581,136],{"class":63},[32,10583,10584],{"class":42},"\"连续反馈中，当前进度为:",[32,10586,3798],{"class":126},[32,10588,1468],{"class":42},[32,10590,10591],{"class":63},",progress);\n",[32,10593,10594],{"class":34,"line":8064},[32,10595,50],{"emptyLinePlaceholder":49},[32,10597,10598,10600,10603,10606,10608,10610,10612],{"class":34,"line":8080},[32,10599,6856],{"class":38},[32,10601,10602],{"class":63},"(goal_handle->",[32,10604,10605],{"class":59},"is_canceling",[32,10607,6868],{"class":63},[32,10609,8002],{"class":38},[32,10611,6817],{"class":126},[32,10613,109],{"class":63},[32,10615,10616],{"class":34,"line":8085},[32,10617,6879],{"class":63},[32,10619,10620,10623,10625],{"class":34,"line":8090},[32,10621,10622],{"class":63},"          result->sum ",[32,10624,1289],{"class":38},[32,10626,10627],{"class":63}," sum;\n",[32,10629,10630,10633,10635],{"class":34,"line":8101},[32,10631,10632],{"class":63},"          goal_handle->",[32,10634,9768],{"class":59},[32,10636,10637],{"class":63},"(result);\n",[32,10639,10640,10642,10644,10646,10648,10650,10652,10655],{"class":34,"line":8110},[32,10641,6884],{"class":59},[32,10643,103],{"class":63},[32,10645,127],{"class":126},[32,10647,130],{"class":63},[32,10649,133],{"class":59},[32,10651,136],{"class":63},[32,10653,10654],{"class":42},"\"任务被取消了!\"",[32,10656,142],{"class":63},[32,10658,10660,10662],{"class":34,"line":10659},79,[32,10661,6908],{"class":38},[32,10663,273],{"class":63},[32,10665,10667],{"class":34,"line":10666},80,[32,10668,6918],{"class":63},[32,10670,10672],{"class":34,"line":10671},81,[32,10673,50],{"emptyLinePlaceholder":49},[32,10675,10677,10680,10683],{"class":34,"line":10676},82,[32,10678,10679],{"class":63},"        rate.",[32,10681,10682],{"class":59},"sleep",[32,10684,261],{"class":63},[32,10686,10688],{"class":34,"line":10687},83,[32,10689,6923],{"class":63},[32,10691,10693],{"class":34,"line":10692},84,[32,10694,50],{"emptyLinePlaceholder":49},[32,10696,10698],{"class":34,"line":10697},85,[32,10699,10700],{"class":4977},"      //void succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n",[32,10702,10704],{"class":34,"line":10703},86,[32,10705,10706],{"class":4977},"      //goal_handle->succeed();\n",[32,10708,10710],{"class":34,"line":10709},87,[32,10711,50],{"emptyLinePlaceholder":49},[32,10713,10715,10717,10719,10721,10723,10725,10727,10729,10731],{"class":34,"line":10714},88,[32,10716,10149],{"class":38},[32,10718,103],{"class":63},[32,10720,4225],{"class":59},[32,10722,73],{"class":63},[32,10724,6865],{"class":59},[32,10726,6868],{"class":63},[32,10728,8002],{"class":38},[32,10730,6817],{"class":126},[32,10732,109],{"class":63},[32,10734,10736],{"class":34,"line":10735},89,[32,10737,6824],{"class":63},[32,10739,10741,10744,10746],{"class":34,"line":10740},90,[32,10742,10743],{"class":63},"        result->sum ",[32,10745,1289],{"class":38},[32,10747,10627],{"class":63},[32,10749,10751,10753,10756],{"class":34,"line":10750},91,[32,10752,10561],{"class":63},[32,10754,10755],{"class":59},"succeed",[32,10757,10637],{"class":63},[32,10759,10761,10763,10765,10767,10769,10771,10773,10776,10778,10780],{"class":34,"line":10760},92,[32,10762,1798],{"class":59},[32,10764,103],{"class":63},[32,10766,127],{"class":126},[32,10768,130],{"class":63},[32,10770,133],{"class":59},[32,10772,136],{"class":63},[32,10774,10775],{"class":42},"\"最终响应结果为:",[32,10777,3793],{"class":126},[32,10779,1468],{"class":42},[32,10781,10782],{"class":63},",sum);\n",[32,10784,10786],{"class":34,"line":10785},93,[32,10787,6923],{"class":63},[32,10789,10791],{"class":34,"line":10790},94,[32,10792,50],{"emptyLinePlaceholder":49},[32,10794,10796],{"class":34,"line":10795},95,[32,10797,148],{"class":63},[32,10799,10801],{"class":34,"line":10800},96,[32,10802,50],{"emptyLinePlaceholder":49},[32,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822,10824,10826,10828,10830,10832,10834],{"class":34,"line":10805},97,[32,10807,1383],{"class":38},[32,10809,9288],{"class":59},[32,10811,103],{"class":63},[32,10813,229],{"class":59},[32,10815,73],{"class":63},[32,10817,9157],{"class":59},[32,10819,237],{"class":63},[32,10821,8776],{"class":59},[32,10823,73],{"class":63},[32,10825,9235],{"class":59},[32,10827,237],{"class":63},[32,10829,9024],{"class":59},[32,10831,9242],{"class":63},[32,10833,9245],{"class":175},[32,10835,109],{"class":63},[32,10837,10839],{"class":34,"line":10838},98,[32,10840,115],{"class":63},[32,10842,10844,10847,10849,10852,10854,10856,10858,10860,10862,10864,10866,10869,10871,10874,10877],{"class":34,"line":10843},99,[32,10845,10846],{"class":59},"      std",[32,10848,73],{"class":63},[32,10850,10851],{"class":59},"thread",[32,10853,103],{"class":63},[32,10855,229],{"class":59},[32,10857,73],{"class":63},[32,10859,1354],{"class":59},[32,10861,103],{"class":63},[32,10863,1359],{"class":38},[32,10865,8454],{"class":59},[32,10867,10868],{"class":63},"::execute_callback,",[32,10870,127],{"class":126},[32,10872,10873],{"class":63},",goal_handle)).",[32,10875,10876],{"class":59},"detach",[32,10878,261],{"class":63},[32,10880,10882],{"class":34,"line":10881},100,[32,10883,148],{"class":63},[32,10885,10887],{"class":34,"line":10886},101,[32,10888,50],{"emptyLinePlaceholder":49},[32,10890,10892],{"class":34,"line":10891},102,[32,10893,1378],{"class":38},[32,10895,10897,10899,10901,10903,10905,10907],{"class":34,"line":10896},103,[32,10898,9127],{"class":59},[32,10900,73],{"class":63},[32,10902,9339],{"class":59},[32,10904,237],{"class":63},[32,10906,9024],{"class":59},[32,10908,5459],{"class":63},[32,10910,10912],{"class":34,"line":10911},104,[32,10913,154],{"class":63},[32,10915,10917],{"class":34,"line":10916},105,[32,10918,50],{"emptyLinePlaceholder":49},[32,10920,10922,10924,10926,10928,10930,10932,10934,10936,10938,10940],{"class":34,"line":10921},106,[32,10923,165],{"class":38},[32,10925,168],{"class":59},[32,10927,103],{"class":63},[32,10929,165],{"class":38},[32,10931,176],{"class":175},[32,10933,179],{"class":63},[32,10935,182],{"class":38},[32,10937,185],{"class":38},[32,10939,188],{"class":175},[32,10941,109],{"class":63},[32,10943,10945],{"class":34,"line":10944},107,[32,10946,82],{"class":63},[32,10948,10950,10952,10954,10956],{"class":34,"line":10949},108,[32,10951,201],{"class":59},[32,10953,73],{"class":63},[32,10955,206],{"class":59},[32,10957,209],{"class":63},[32,10959,10961],{"class":34,"line":10960},109,[32,10962,50],{"emptyLinePlaceholder":49},[32,10964,10966,10968,10970,10972,10974,10976,10978,10980,10982,10984],{"class":34,"line":10965},110,[32,10967,201],{"class":59},[32,10969,73],{"class":63},[32,10971,224],{"class":59},[32,10973,103],{"class":63},[32,10975,229],{"class":59},[32,10977,73],{"class":63},[32,10979,234],{"class":59},[32,10981,237],{"class":63},[32,10983,8454],{"class":59},[32,10985,243],{"class":63},[32,10987,10989],{"class":34,"line":10988},111,[32,10990,50],{"emptyLinePlaceholder":49},[32,10992,10994,10996,10998,11000],{"class":34,"line":10993},112,[32,10995,201],{"class":59},[32,10997,73],{"class":63},[32,10999,258],{"class":59},[32,11001,261],{"class":63},[32,11003,11005,11007,11009],{"class":34,"line":11004},113,[32,11006,267],{"class":38},[32,11008,270],{"class":126},[32,11010,273],{"class":63},[32,11012,11014],{"class":34,"line":11013},114,[32,11015,279],{"class":63},[10,11017,11019],{"id":11018},"action-communication_experiment-1_client-implementation-c","Action Communication_Experiment 1_Client Implementation (C++)",[15,11021,11022],{},[18,11023],{"alt":20,"src":11024},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image707.webp",[15,11026,11027,11028,11031],{},"This red line is already encapsulated for us in ",[29,11029,11030],{},"action_client",", so there's no need to worry about it.",[15,11033,11034],{},[18,11035],{"alt":20,"src":11036},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image708.webp",[23,11038,11040],{"className":25,"code":11039,"language":27,"meta":20,"style":20},"#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",[29,11041,11042,11048,11052,11068,11072,11076,11090,11094,11112,11116,11120,11124,11146,11150,11163,11167,11191,11199,11203,11213,11217,11239,11243,11253,11261],{"__ignoreMap":20},[32,11043,11044,11046],{"class":34,"line":35},[32,11045,39],{"class":38},[32,11047,43],{"class":42},[32,11049,11050],{"class":34,"line":46},[32,11051,50],{"emptyLinePlaceholder":49},[32,11053,11054,11056,11058,11060,11062,11064,11066],{"class":34,"line":53},[32,11055,56],{"class":38},[32,11057,8509],{"class":59},[32,11059,64],{"class":63},[32,11061,67],{"class":38},[32,11063,70],{"class":59},[32,11065,73],{"class":63},[32,11067,76],{"class":59},[32,11069,11070],{"class":34,"line":79},[32,11071,82],{"class":63},[32,11073,11074],{"class":34,"line":85},[32,11075,88],{"class":38},[32,11077,11078,11080,11082,11084,11086,11088],{"class":34,"line":91},[32,11079,8532],{"class":59},[32,11081,97],{"class":63},[32,11083,100],{"class":59},[32,11085,103],{"class":63},[32,11087,8356],{"class":42},[32,11089,109],{"class":63},[32,11091,11092],{"class":34,"line":112},[32,11093,115],{"class":63},[32,11095,11096,11098,11100,11102,11104,11106,11108,11110],{"class":34,"line":118},[32,11097,121],{"class":59},[32,11099,103],{"class":63},[32,11101,127],{"class":126},[32,11103,130],{"class":63},[32,11105,133],{"class":59},[32,11107,136],{"class":63},[32,11109,8563],{"class":42},[32,11111,142],{"class":63},[32,11113,11114],{"class":34,"line":145},[32,11115,148],{"class":63},[32,11117,11118],{"class":34,"line":151},[32,11119,154],{"class":63},[32,11121,11122],{"class":34,"line":157},[32,11123,50],{"emptyLinePlaceholder":49},[32,11125,11126,11128,11130,11132,11134,11136,11138,11140,11142,11144],{"class":34,"line":162},[32,11127,165],{"class":38},[32,11129,168],{"class":59},[32,11131,103],{"class":63},[32,11133,165],{"class":38},[32,11135,176],{"class":175},[32,11137,179],{"class":63},[32,11139,182],{"class":38},[32,11141,185],{"class":38},[32,11143,188],{"class":175},[32,11145,109],{"class":63},[32,11147,11148],{"class":34,"line":193},[32,11149,82],{"class":63},[32,11151,11152,11154,11156,11158,11161],{"class":34,"line":198},[32,11153,6070],{"class":38},[32,11155,6073],{"class":63},[32,11157,6076],{"class":38},[32,11159,11160],{"class":126}," 2",[32,11162,109],{"class":63},[32,11164,11165],{"class":34,"line":212},[32,11166,6086],{"class":63},[32,11168,11169,11171,11173,11175,11177,11179,11181,11184,11186,11189],{"class":34,"line":217},[32,11170,6091],{"class":59},[32,11172,103],{"class":63},[32,11174,4225],{"class":59},[32,11176,73],{"class":63},[32,11178,133],{"class":59},[32,11180,103],{"class":63},[32,11182,11183],{"class":42},"\"rclcppp\"",[32,11185,3561],{"class":63},[32,11187,11188],{"class":42},"\"请输入一个整形数字!\"",[32,11190,142],{"class":63},[32,11192,11193,11195,11197],{"class":34,"line":246},[32,11194,1909],{"class":38},[32,11196,2793],{"class":126},[32,11198,273],{"class":63},[32,11200,11201],{"class":34,"line":251},[32,11202,456],{"class":63},[32,11204,11205,11207,11209,11211],{"class":34,"line":264},[32,11206,201],{"class":59},[32,11208,73],{"class":63},[32,11210,206],{"class":59},[32,11212,209],{"class":63},[32,11214,11215],{"class":34,"line":276},[32,11216,50],{"emptyLinePlaceholder":49},[32,11218,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237],{"class":34,"line":418},[32,11220,201],{"class":59},[32,11222,73],{"class":63},[32,11224,224],{"class":59},[32,11226,103],{"class":63},[32,11228,229],{"class":59},[32,11230,73],{"class":63},[32,11232,234],{"class":59},[32,11234,237],{"class":63},[32,11236,8638],{"class":59},[32,11238,243],{"class":63},[32,11240,11241],{"class":34,"line":423},[32,11242,50],{"emptyLinePlaceholder":49},[32,11244,11245,11247,11249,11251],{"class":34,"line":429},[32,11246,201],{"class":59},[32,11248,73],{"class":63},[32,11250,258],{"class":59},[32,11252,261],{"class":63},[32,11254,11255,11257,11259],{"class":34,"line":435},[32,11256,267],{"class":38},[32,11258,270],{"class":126},[32,11260,273],{"class":63},[32,11262,11263],{"class":34,"line":441},[32,11264,279],{"class":63},[15,11266,11267],{},[18,11268],{"alt":20,"src":11269},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image709.webp",[15,11271,11272],{},[18,11273],{"alt":20,"src":11274},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image710.webp",[15,11276,11277],{},[18,11278],{"alt":20,"src":11279},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image711.webp",[15,11281,11282],{},[18,11283],{"alt":20,"src":11284},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image712.webp",[15,11286,11287],{},"The first input parameter is node.",[15,11289,11290],{},"The second input parameter is the topic name, a string.",[15,11292,11293],{},"The third input parameter and the fourth input parameter both have default values.",[15,11295,11296],{},"The return value is a client-side smart pointer.",[15,11298,11299],{},[18,11300],{"alt":20,"src":11301},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image713.webp",[15,11303,11304],{},[18,11305],{"alt":20,"src":11306},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image714.webp",[15,11308,11309],{},[18,11310],{"alt":20,"src":11311},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image715.webp",[15,11313,11314],{},[18,11315],{"alt":20,"src":11316},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image716.webp",[15,11318,11319],{},"Need to split one step into two steps.",[15,11321,11322],{},[18,11323],{"alt":20,"src":11324},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image717.webp",[15,11326,11327,11328,11331],{},"Now call the ",[29,11329,11330],{},"send_goal"," function again.",[15,11333,11334],{},[18,11335],{"alt":20,"src":11336},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image718.webp",[473,11338],{},[15,11340,11341],{},[18,11342],{"alt":20,"src":11343},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image719.webp",[15,11345,11346],{},"async_send_goal sends the target value asynchronously.",[15,11348,11349],{},[18,11350],{"alt":20,"src":11351},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image720.webp",[15,11353,11354],{},"The first input parameter is the target value in our interface file.",[15,11356,11357],{},"The second input parameter is the target sending options object, through which we can set certain callback functions that need to be handled after the target is sent.",[15,11359,11360],{},"The return value is",[15,11362,11363],{},[18,11364],{"alt":20,"src":11365},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image721.webp",[15,11367,11368],{},[18,11369],{"alt":20,"src":11370},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image722.webp",[15,11372,11373],{},[18,11374],{"alt":20,"src":11375},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image723.webp",[15,11377,11378],{},[18,11379],{"alt":20,"src":11380},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image724.webp",[15,11382,11383],{},"For now, just define the functions casually, with void as both the return type and entry parameters, just to prevent the program from throwing errors.",[15,11385,11386],{},[18,11387],{"alt":20,"src":11388},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image725.webp",[15,11390,11391],{},[18,11392],{"alt":20,"src":11393},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image726.webp",[15,11395,11396],{},[18,11397],{"alt":20,"src":11398},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image727.webp",[15,11400,11401],{},"Got it.",[15,11403,11404],{},"The GoalResponseCallback return type is void, and its entry parameter is goalhandle. In the diagram above, this goalhandle is a ClientGoalHandle, which belongs to the rclcpp_action namespace.",[15,11406,11407],{},[18,11408],{"alt":20,"src":11409},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image728.webp",[15,11411,11412],{},[18,11413],{"alt":20,"src":11414},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image729.webp",[15,11416,11417],{},[18,11418],{"alt":20,"src":11419},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image730.webp",[15,11421,11422],{},[18,11423],{"alt":20,"src":11424},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image731.webp",[15,11426,11427],{},[18,11428],{"alt":20,"src":11429},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image732.webp",[15,11431,11432],{},"The return value is void.",[15,11434,11435],{},"The first entry parameter is clientgoalhandle.",[15,11437,11438],{},"The second input parameter is feedback.",[15,11440,11441],{},[18,11442],{"alt":20,"src":11443},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image733.webp",[15,11445,11446],{},[18,11447],{"alt":20,"src":11448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image734.webp",[15,11450,11451],{},[18,11452],{"alt":20,"src":11453},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image735.webp",[15,11455,11456],{},[18,11457],{"alt":20,"src":11458},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image736.webp",[15,11460,11461],{},[18,11462],{"alt":20,"src":11463},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image737.webp",[473,11465],{},[15,11467,11468],{},[18,11469],{"alt":20,"src":11470},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image738.webp",[15,11472,11473],{},"Send a value to the server. The server must first retrieve the target value, determine whether it can be accepted or rejected, and then respond with the processing result to the client.",[15,11475,11476,11477,11479],{},"If this target value is processable, then the ",[29,11478,9245],{}," will contain content.",[15,11481,11482],{},"If it cannot be processed, then goal_handle is a nullptr.",[15,11484,11485],{},[18,11486],{"alt":20,"src":11487},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image739.webp",[15,11489,11490],{},[18,11491],{"alt":20,"src":11492},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image740.webp",[15,11494,11495],{},[18,11496],{"alt":20,"src":11497},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image741.webp",[15,11499,11500],{},[18,11501],{"alt":20,"src":11502},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image742.webp",[473,11504],{},[15,11506,11507],{},"Now processing the feedback data:",[15,11509,11510],{},[18,11511],{"alt":20,"src":11512},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image743.webp",[15,11514,11515],{},"If we are only parsing the feedback data, then goal_handle is not needed.",[15,11517,11518],{},[18,11519],{"alt":20,"src":11520},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image744.webp",[15,11522,11523],{},[18,11524],{"alt":20,"src":11525},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image745.webp",[15,11527,11528],{},[18,11529],{"alt":20,"src":11530},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image746.webp",[15,11532,11533,11534,11537,11538,11540],{},"You need to use two ",[29,11535,11536],{},"%"," signs to escape a ",[29,11539,11536],{},", as shown in the example above, which is a case of printing percentage data.",[15,11542,11543],{},"Assuming progress_int is 50, it will output 50%.",[15,11545,11546,11547,11549,11550,11553],{},"If you only want to print a single ",[29,11548,11536],{},", you need to use ",[29,11551,11552],{},"%%"," to escape it.",[15,11555,11556],{},[18,11557],{"alt":20,"src":11558},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image747.webp",[15,11560,11561],{},[18,11562],{"alt":20,"src":11563},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image748.webp",[15,11565,11566],{},"Callback functions may experience data loss. This is normal behavior.",[473,11568],{},[15,11570,11571],{},"Final response.",[15,11573,11574],{},"The final status of this result is uncertain; the task may have been canceled, terminated, or completed normally.",[15,11576,11577],{},"Therefore, we need to determine the status based on the status code.",[15,11579,11580],{},[18,11581],{"alt":20,"src":11582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image749.webp",[15,11584,11585],{},"The first one was forcibly terminated.",[15,11587,11588],{},"The second is to cancel.",[15,11590,11591],{},"The third one is success.",[15,11593,11594],{},"The fourth one is unknown.",[15,11596,11597],{},[18,11598],{"alt":20,"src":11599},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image750.webp",[15,11601,11602],{},[18,11603],{"alt":20,"src":11604},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image751.webp",[15,11606,11607],{},[18,11608],{"alt":20,"src":11609},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image752.webp",[23,11611,11613],{"className":25,"code":11612,"language":27,"meta":20,"style":20},"#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",[29,11614,11615,11621,11627,11633,11637,11649,11663,11675,11687,11691,11707,11711,11715,11729,11733,11751,11755,11760,11765,11770,11775,11779,11808,11812,11816,11831,11835,11858,11862,11882,11888,11892,11896,11900,11905,11910,11915,11919,11936,11946,11950,11966,11993,12020,12046,12050,12066,12070,12074,12104,12108,12122,12126,12145,12149,12154,12158,12177,12181,12185,12189,12240,12244,12253,12265,12289,12314,12318,12322,12355,12359,12378,12382,12406,12410,12432,12436,12455,12459,12478,12482,12501,12505,12509,12513,12532,12536,12540,12544,12548,12562,12566,12570,12592,12596,12608,12612,12634,12642,12646,12656,12660,12681,12685,12702,12706,12717,12721,12731,12739],{"__ignoreMap":20},[32,11616,11617,11619],{"class":34,"line":35},[32,11618,39],{"class":38},[32,11620,43],{"class":42},[32,11622,11623,11625],{"class":34,"line":46},[32,11624,39],{"class":38},[32,11626,8842],{"class":42},[32,11628,11629,11631],{"class":34,"line":53},[32,11630,39],{"class":38},[32,11632,8849],{"class":42},[32,11634,11635],{"class":34,"line":79},[32,11636,50],{"emptyLinePlaceholder":49},[32,11638,11639,11641,11643,11645,11647],{"class":34,"line":85},[32,11640,1194],{"class":38},[32,11642,3702],{"class":59},[32,11644,73],{"class":63},[32,11646,8864],{"class":59},[32,11648,8867],{"class":63},[32,11650,11651,11653,11655,11657,11659,11661],{"class":34,"line":91},[32,11652,1194],{"class":38},[32,11654,1197],{"class":38},[32,11656,1200],{"class":59},[32,11658,73],{"class":63},[32,11660,1205],{"class":59},[32,11662,273],{"class":63},[32,11664,11665,11667,11669,11671,11673],{"class":34,"line":112},[32,11666,1194],{"class":38},[32,11668,1200],{"class":59},[32,11670,73],{"class":63},[32,11672,2162],{"class":59},[32,11674,8880],{"class":63},[32,11676,11677,11679,11681,11683,11685],{"class":34,"line":118},[32,11678,1194],{"class":38},[32,11680,1200],{"class":59},[32,11682,73],{"class":63},[32,11684,2162],{"class":59},[32,11686,8893],{"class":63},[32,11688,11689],{"class":34,"line":145},[32,11690,50],{"emptyLinePlaceholder":49},[32,11692,11693,11695,11697,11699,11701,11703,11705],{"class":34,"line":151},[32,11694,56],{"class":38},[32,11696,8509],{"class":59},[32,11698,64],{"class":63},[32,11700,67],{"class":38},[32,11702,70],{"class":59},[32,11704,73],{"class":63},[32,11706,76],{"class":59},[32,11708,11709],{"class":34,"line":157},[32,11710,82],{"class":63},[32,11712,11713],{"class":34,"line":162},[32,11714,88],{"class":38},[32,11716,11717,11719,11721,11723,11725,11727],{"class":34,"line":193},[32,11718,8532],{"class":59},[32,11720,97],{"class":63},[32,11722,100],{"class":59},[32,11724,103],{"class":63},[32,11726,8356],{"class":42},[32,11728,109],{"class":63},[32,11730,11731],{"class":34,"line":198},[32,11732,115],{"class":63},[32,11734,11735,11737,11739,11741,11743,11745,11747,11749],{"class":34,"line":212},[32,11736,121],{"class":59},[32,11738,103],{"class":63},[32,11740,127],{"class":126},[32,11742,130],{"class":63},[32,11744,133],{"class":59},[32,11746,136],{"class":63},[32,11748,8563],{"class":42},[32,11750,142],{"class":63},[32,11752,11753],{"class":34,"line":217},[32,11754,7645],{"class":4977},[32,11756,11757],{"class":34,"line":246},[32,11758,11759],{"class":4977},"      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n",[32,11761,11762],{"class":34,"line":251},[32,11763,11764],{"class":4977},"      NodeT>(NodeT node, const std::string &name,\n",[32,11766,11767],{"class":34,"line":264},[32,11768,11769],{"class":4977},"      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n",[32,11771,11772],{"class":34,"line":276},[32,11773,11774],{"class":4977},"      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n",[32,11776,11777],{"class":34,"line":418},[32,11778,7660],{"class":4977},[32,11780,11781,11783,11785,11787,11789,11792,11794,11796,11799,11801,11803,11806],{"class":34,"line":423},[32,11782,6751],{"class":63},[32,11784,1289],{"class":38},[32,11786,9014],{"class":59},[32,11788,73],{"class":63},[32,11790,11791],{"class":59},"create_client",[32,11793,237],{"class":63},[32,11795,9024],{"class":59},[32,11797,11798],{"class":63},">(",[32,11800,127],{"class":126},[32,11802,1318],{"class":63},[32,11804,11805],{"class":42},"\"get_sum_topic\"",[32,11807,142],{"class":63},[32,11809,11810],{"class":34,"line":429},[32,11811,148],{"class":63},[32,11813,11814],{"class":34,"line":435},[32,11815,50],{"emptyLinePlaceholder":49},[32,11817,11818,11820,11822,11824,11826,11829],{"class":34,"line":441},[32,11819,1383],{"class":38},[32,11821,9476],{"class":59},[32,11823,103],{"class":63},[32,11825,7624],{"class":38},[32,11827,11828],{"class":175}," num",[32,11830,109],{"class":63},[32,11832,11833],{"class":34,"line":447},[32,11834,115],{"class":63},[32,11836,11837,11839,11841,11844,11846,11848,11850,11852,11854,11856],{"class":34,"line":453},[32,11838,10149],{"class":38},[32,11840,6800],{"class":63},[32,11842,11843],{"class":59},"wait_for_action_server",[32,11845,103],{"class":63},[32,11847,1342],{"class":126},[32,11849,1345],{"class":38},[32,11851,6812],{"class":63},[32,11853,6076],{"class":38},[32,11855,6817],{"class":126},[32,11857,109],{"class":63},[32,11859,11860],{"class":34,"line":459},[32,11861,6824],{"class":63},[32,11863,11864,11867,11869,11871,11873,11875,11877,11880],{"class":34,"line":1569},[32,11865,11866],{"class":59},"        RCLCPP_ERROR",[32,11868,103],{"class":63},[32,11870,127],{"class":126},[32,11872,130],{"class":63},[32,11874,133],{"class":59},[32,11876,136],{"class":63},[32,11878,11879],{"class":42},"\"服务连接失败!\"",[32,11881,142],{"class":63},[32,11883,11884,11886],{"class":34,"line":1574},[32,11885,2790],{"class":38},[32,11887,273],{"class":63},[32,11889,11890],{"class":34,"line":1585},[32,11891,6923],{"class":63},[32,11893,11894],{"class":34,"line":1590},[32,11895,50],{"emptyLinePlaceholder":49},[32,11897,11898],{"class":34,"line":1613},[32,11899,7645],{"class":4977},[32,11901,11902],{"class":34,"line":1618},[32,11903,11904],{"class":4977},"      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n",[32,11906,11907],{"class":34,"line":1629},[32,11908,11909],{"class":4977},"      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n",[32,11911,11912],{"class":34,"line":1638},[32,11913,11914],{"class":4977},"      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n",[32,11916,11917],{"class":34,"line":3929},[32,11918,7660],{"class":4977},[32,11920,11921,11923,11926,11928,11930,11932,11934],{"class":34,"line":3940},[32,11922,1398],{"class":38},[32,11924,11925],{"class":63}," goal ",[32,11927,1289],{"class":38},[32,11929,9164],{"class":59},[32,11931,73],{"class":63},[32,11933,9169],{"class":59},[32,11935,261],{"class":63},[32,11937,11938,11941,11943],{"class":34,"line":3949},[32,11939,11940],{"class":63},"      goal.num ",[32,11942,1289],{"class":38},[32,11944,11945],{"class":63}," num;\n",[32,11947,11948],{"class":34,"line":7035},[32,11949,50],{"emptyLinePlaceholder":49},[32,11951,11952,11955,11957,11959,11961,11963],{"class":34,"line":7044},[32,11953,11954],{"class":59},"      rclcpp_action",[32,11956,73],{"class":63},[32,11958,6953],{"class":59},[32,11960,237],{"class":63},[32,11962,9024],{"class":59},[32,11964,11965],{"class":63},">::SendGoalOptions options;\n",[32,11967,11968,11971,11973,11975,11977,11979,11981,11983,11985,11988,11990],{"class":34,"line":7049},[32,11969,11970],{"class":63},"      options.goal_response_callback ",[32,11972,1289],{"class":38},[32,11974,1200],{"class":59},[32,11976,73],{"class":63},[32,11978,1354],{"class":59},[32,11980,103],{"class":63},[32,11982,1359],{"class":38},[32,11984,8638],{"class":59},[32,11986,11987],{"class":63},"::goal_response_callback,",[32,11989,127],{"class":126},[32,11991,11992],{"class":63},",_1);\n",[32,11994,11995,11998,12000,12002,12004,12006,12008,12010,12012,12015,12017],{"class":34,"line":7060},[32,11996,11997],{"class":63},"      options.feedback_callback ",[32,11999,1289],{"class":38},[32,12001,1200],{"class":59},[32,12003,73],{"class":63},[32,12005,1354],{"class":59},[32,12007,103],{"class":63},[32,12009,1359],{"class":38},[32,12011,8638],{"class":59},[32,12013,12014],{"class":63},"::feedback_callback,",[32,12016,127],{"class":126},[32,12018,12019],{"class":63},",_1,_2);\n",[32,12021,12022,12025,12027,12029,12031,12033,12035,12037,12039,12042,12044],{"class":34,"line":7065},[32,12023,12024],{"class":63},"      options.result_callback ",[32,12026,1289],{"class":38},[32,12028,1200],{"class":59},[32,12030,73],{"class":63},[32,12032,1354],{"class":59},[32,12034,103],{"class":63},[32,12036,1359],{"class":38},[32,12038,8638],{"class":59},[32,12040,12041],{"class":63},"::result_callback,",[32,12043,127],{"class":126},[32,12045,11992],{"class":63},[32,12047,12048],{"class":34,"line":7086},[32,12049,50],{"emptyLinePlaceholder":49},[32,12051,12052,12054,12056,12058,12060,12063],{"class":34,"line":7091},[32,12053,1398],{"class":38},[32,12055,7948],{"class":63},[32,12057,1289],{"class":38},[32,12059,7710],{"class":63},[32,12061,12062],{"class":59},"async_send_goal",[32,12064,12065],{"class":63},"(goal,options);\n",[32,12067,12068],{"class":34,"line":7110},[32,12069,148],{"class":63},[32,12071,12072],{"class":34,"line":7115},[32,12073,50],{"emptyLinePlaceholder":49},[32,12075,12076,12079,12082,12084,12086,12088,12091,12093,12095,12097,12099,12102],{"class":34,"line":7129},[32,12077,12078],{"class":38},"  void",[32,12080,12081],{"class":59}," goal_response_callback",[32,12083,103],{"class":63},[32,12085,8776],{"class":59},[32,12087,73],{"class":63},[32,12089,12090],{"class":59},"ClientGoalHandle",[32,12092,237],{"class":63},[32,12094,9024],{"class":59},[32,12096,7613],{"class":63},[32,12098,5348],{"class":59},[32,12100,12101],{"class":175}," goal_handle",[32,12103,109],{"class":63},[32,12105,12106],{"class":34,"line":7134},[32,12107,6086],{"class":63},[32,12109,12110,12112,12115,12117,12120],{"class":34,"line":7158},[32,12111,2705],{"class":38},[32,12113,12114],{"class":63},"(goal_handle ",[32,12116,8002],{"class":38},[32,12118,12119],{"class":126}," nullptr",[32,12121,109],{"class":63},[32,12123,12124],{"class":34,"line":7167},[32,12125,115],{"class":63},[32,12127,12128,12130,12132,12134,12136,12138,12140,12143],{"class":34,"line":7172},[32,12129,121],{"class":59},[32,12131,103],{"class":63},[32,12133,127],{"class":126},[32,12135,130],{"class":63},[32,12137,133],{"class":59},[32,12139,136],{"class":63},[32,12141,12142],{"class":42},"\"目标请求被服务端拒绝!\"",[32,12144,142],{"class":63},[32,12146,12147],{"class":34,"line":7177},[32,12148,148],{"class":63},[32,12150,12151],{"class":34,"line":7188},[32,12152,12153],{"class":38},"    else\n",[32,12155,12156],{"class":34,"line":7197},[32,12157,115],{"class":63},[32,12159,12160,12162,12164,12166,12168,12170,12172,12175],{"class":34,"line":7863},[32,12161,121],{"class":59},[32,12163,103],{"class":63},[32,12165,127],{"class":126},[32,12167,130],{"class":63},[32,12169,133],{"class":59},[32,12171,136],{"class":63},[32,12173,12174],{"class":42},"\"目标处理中!\"",[32,12176,142],{"class":63},[32,12178,12179],{"class":34,"line":7868},[32,12180,148],{"class":63},[32,12182,12183],{"class":34,"line":7883},[32,12184,456],{"class":63},[32,12186,12187],{"class":34,"line":7888},[32,12188,50],{"emptyLinePlaceholder":49},[32,12190,12191,12193,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214,12216,12218,12220,12222,12224,12226,12228,12230,12233,12235,12238],{"class":34,"line":7901},[32,12192,12078],{"class":38},[32,12194,12195],{"class":59}," feedback_callback",[32,12197,103],{"class":63},[32,12199,8776],{"class":59},[32,12201,73],{"class":63},[32,12203,12090],{"class":59},[32,12205,237],{"class":63},[32,12207,9024],{"class":59},[32,12209,7613],{"class":63},[32,12211,5348],{"class":59},[32,12213,12101],{"class":175},[32,12215,1318],{"class":63},[32,12217,229],{"class":59},[32,12219,73],{"class":63},[32,12221,9157],{"class":59},[32,12223,237],{"class":63},[32,12225,2190],{"class":38},[32,12227,9164],{"class":59},[32,12229,73],{"class":63},[32,12231,12232],{"class":59},"Feedback",[32,12234,10124],{"class":63},[32,12236,12237],{"class":175},"feedback",[32,12239,109],{"class":63},[32,12241,12242],{"class":34,"line":7906},[32,12243,6086],{"class":63},[32,12245,12246,12249,12251],{"class":34,"line":7929},[32,12247,12248],{"class":63},"    (",[32,12250,10141],{"class":38},[32,12252,10291],{"class":63},[32,12254,12255,12258,12260,12262],{"class":34,"line":7938},[32,12256,12257],{"class":38},"    double",[32,12259,10527],{"class":63},[32,12261,1289],{"class":38},[32,12263,12264],{"class":63}," feedback->progress;\n",[32,12266,12267,12270,12273,12275,12277,12279,12282,12284,12287],{"class":34,"line":7943},[32,12268,12269],{"class":38},"    int",[32,12271,12272],{"class":63}," progress_int ",[32,12274,1289],{"class":38},[32,12276,5390],{"class":63},[32,12278,165],{"class":38},[32,12280,12281],{"class":63},") (progress ",[32,12283,5393],{"class":38},[32,12285,12286],{"class":126}," 100",[32,12288,142],{"class":63},[32,12290,12291,12293,12295,12297,12299,12301,12303,12306,12309,12311],{"class":34,"line":7980},[32,12292,6091],{"class":59},[32,12294,103],{"class":63},[32,12296,127],{"class":126},[32,12298,130],{"class":63},[32,12300,133],{"class":59},[32,12302,136],{"class":63},[32,12304,12305],{"class":42},"\"当前进度为:",[32,12307,12308],{"class":126},"%d%%",[32,12310,1468],{"class":42},[32,12312,12313],{"class":63},",progress_int);\n",[32,12315,12316],{"class":34,"line":7985},[32,12317,456],{"class":63},[32,12319,12320],{"class":34,"line":8015},[32,12321,50],{"emptyLinePlaceholder":49},[32,12323,12324,12326,12329,12331,12333,12335,12337,12339,12341,12343,12345,12348,12350,12353],{"class":34,"line":8020},[32,12325,12078],{"class":38},[32,12327,12328],{"class":59}," result_callback",[32,12330,103],{"class":63},[32,12332,2190],{"class":38},[32,12334,9014],{"class":59},[32,12336,73],{"class":63},[32,12338,12090],{"class":59},[32,12340,237],{"class":63},[32,12342,9024],{"class":59},[32,12344,7613],{"class":63},[32,12346,12347],{"class":59},"WrappedResult",[32,12349,2203],{"class":38},[32,12351,12352],{"class":175}," result",[32,12354,109],{"class":63},[32,12356,12357],{"class":34,"line":8048},[32,12358,6086],{"class":63},[32,12360,12361,12363,12366,12368,12370,12372,12375],{"class":34,"line":8053},[32,12362,2705],{"class":38},[32,12364,12365],{"class":63}," (result.code ",[32,12367,8002],{"class":38},[32,12369,9014],{"class":59},[32,12371,73],{"class":63},[32,12373,12374],{"class":59},"ResultCode",[32,12376,12377],{"class":63},"::SUCCEEDED)\n",[32,12379,12380],{"class":34,"line":8059},[32,12381,115],{"class":63},[32,12383,12384,12386,12388,12390,12392,12394,12396,12399,12401,12403],{"class":34,"line":8064},[32,12385,121],{"class":59},[32,12387,103],{"class":63},[32,12389,127],{"class":126},[32,12391,130],{"class":63},[32,12393,133],{"class":59},[32,12395,136],{"class":63},[32,12397,12398],{"class":42},"\"最终结果为:",[32,12400,3793],{"class":126},[32,12402,1468],{"class":42},[32,12404,12405],{"class":63},",result.result->sum);\n",[32,12407,12408],{"class":34,"line":8080},[32,12409,148],{"class":63},[32,12411,12412,12415,12418,12421,12423,12425,12427,12429],{"class":34,"line":8085},[32,12413,12414],{"class":38},"    else",[32,12416,12417],{"class":38}," if",[32,12419,12420],{"class":63},"(result.code ",[32,12422,8002],{"class":38},[32,12424,9014],{"class":59},[32,12426,73],{"class":63},[32,12428,12374],{"class":59},[32,12430,12431],{"class":63},"::ABORTED)\n",[32,12433,12434],{"class":34,"line":8090},[32,12435,115],{"class":63},[32,12437,12438,12440,12442,12444,12446,12448,12450,12453],{"class":34,"line":8101},[32,12439,121],{"class":59},[32,12441,103],{"class":63},[32,12443,127],{"class":126},[32,12445,130],{"class":63},[32,12447,133],{"class":59},[32,12449,136],{"class":63},[32,12451,12452],{"class":42},"\"过程被中断!\"",[32,12454,142],{"class":63},[32,12456,12457],{"class":34,"line":8110},[32,12458,148],{"class":63},[32,12460,12461,12463,12465,12467,12469,12471,12473,12475],{"class":34,"line":10659},[32,12462,12414],{"class":38},[32,12464,12417],{"class":38},[32,12466,12420],{"class":63},[32,12468,8002],{"class":38},[32,12470,9014],{"class":59},[32,12472,73],{"class":63},[32,12474,12374],{"class":59},[32,12476,12477],{"class":63},"::CANCELED)\n",[32,12479,12480],{"class":34,"line":10666},[32,12481,115],{"class":63},[32,12483,12484,12486,12488,12490,12492,12494,12496,12499],{"class":34,"line":10671},[32,12485,121],{"class":59},[32,12487,103],{"class":63},[32,12489,127],{"class":126},[32,12491,130],{"class":63},[32,12493,133],{"class":59},[32,12495,136],{"class":63},[32,12497,12498],{"class":42},"\"任务被取消!\"",[32,12500,142],{"class":63},[32,12502,12503],{"class":34,"line":10676},[32,12504,148],{"class":63},[32,12506,12507],{"class":34,"line":10687},[32,12508,12153],{"class":38},[32,12510,12511],{"class":34,"line":10692},[32,12512,115],{"class":63},[32,12514,12515,12517,12519,12521,12523,12525,12527,12530],{"class":34,"line":10697},[32,12516,121],{"class":59},[32,12518,103],{"class":63},[32,12520,127],{"class":126},[32,12522,130],{"class":63},[32,12524,133],{"class":59},[32,12526,136],{"class":63},[32,12528,12529],{"class":42},"\"未知异常!\"",[32,12531,142],{"class":63},[32,12533,12534],{"class":34,"line":10703},[32,12535,148],{"class":63},[32,12537,12538],{"class":34,"line":10709},[32,12539,456],{"class":63},[32,12541,12542],{"class":34,"line":10714},[32,12543,50],{"emptyLinePlaceholder":49},[32,12545,12546],{"class":34,"line":10735},[32,12547,1378],{"class":38},[32,12549,12550,12552,12554,12556,12558,12560],{"class":34,"line":10740},[32,12551,9127],{"class":59},[32,12553,73],{"class":63},[32,12555,6953],{"class":59},[32,12557,237],{"class":63},[32,12559,9024],{"class":59},[32,12561,6960],{"class":63},[32,12563,12564],{"class":34,"line":10750},[32,12565,154],{"class":63},[32,12567,12568],{"class":34,"line":10760},[32,12569,50],{"emptyLinePlaceholder":49},[32,12571,12572,12574,12576,12578,12580,12582,12584,12586,12588,12590],{"class":34,"line":10785},[32,12573,165],{"class":38},[32,12575,168],{"class":59},[32,12577,103],{"class":63},[32,12579,165],{"class":38},[32,12581,176],{"class":175},[32,12583,179],{"class":63},[32,12585,182],{"class":38},[32,12587,185],{"class":38},[32,12589,188],{"class":175},[32,12591,109],{"class":63},[32,12593,12594],{"class":34,"line":10790},[32,12595,82],{"class":63},[32,12597,12598,12600,12602,12604,12606],{"class":34,"line":10795},[32,12599,6070],{"class":38},[32,12601,6073],{"class":63},[32,12603,6076],{"class":38},[32,12605,11160],{"class":126},[32,12607,109],{"class":63},[32,12609,12610],{"class":34,"line":10800},[32,12611,6086],{"class":63},[32,12613,12614,12616,12618,12620,12622,12624,12626,12628,12630,12632],{"class":34,"line":10805},[32,12615,6353],{"class":59},[32,12617,103],{"class":63},[32,12619,4225],{"class":59},[32,12621,73],{"class":63},[32,12623,133],{"class":59},[32,12625,103],{"class":63},[32,12627,11183],{"class":42},[32,12629,3561],{"class":63},[32,12631,11188],{"class":42},[32,12633,142],{"class":63},[32,12635,12636,12638,12640],{"class":34,"line":10838},[32,12637,1909],{"class":38},[32,12639,2793],{"class":126},[32,12641,273],{"class":63},[32,12643,12644],{"class":34,"line":10843},[32,12645,456],{"class":63},[32,12647,12648,12650,12652,12654],{"class":34,"line":10881},[32,12649,201],{"class":59},[32,12651,73],{"class":63},[32,12653,206],{"class":59},[32,12655,209],{"class":63},[32,12657,12658],{"class":34,"line":10886},[32,12659,50],{"emptyLinePlaceholder":49},[32,12661,12662,12664,12667,12669,12671,12673,12675,12677,12679],{"class":34,"line":10891},[32,12663,4983],{"class":38},[32,12665,12666],{"class":63}," node ",[32,12668,1289],{"class":38},[32,12670,1200],{"class":59},[32,12672,73],{"class":63},[32,12674,234],{"class":59},[32,12676,237],{"class":63},[32,12678,8638],{"class":59},[32,12680,5002],{"class":63},[32,12682,12683],{"class":34,"line":10896},[32,12684,50],{"emptyLinePlaceholder":49},[32,12686,12687,12690,12692,12694,12696,12698,12700],{"class":34,"line":10911},[32,12688,12689],{"class":63},"  node->",[32,12691,11330],{"class":59},[32,12693,103],{"class":63},[32,12695,7960],{"class":59},[32,12697,7963],{"class":63},[32,12699,1342],{"class":126},[32,12701,7977],{"class":63},[32,12703,12704],{"class":34,"line":10916},[32,12705,50],{"emptyLinePlaceholder":49},[32,12707,12708,12710,12712,12714],{"class":34,"line":10921},[32,12709,201],{"class":59},[32,12711,73],{"class":63},[32,12713,224],{"class":59},[32,12715,12716],{"class":63},"(node);\n",[32,12718,12719],{"class":34,"line":10944},[32,12720,50],{"emptyLinePlaceholder":49},[32,12722,12723,12725,12727,12729],{"class":34,"line":10949},[32,12724,201],{"class":59},[32,12726,73],{"class":63},[32,12728,258],{"class":59},[32,12730,261],{"class":63},[32,12732,12733,12735,12737],{"class":34,"line":10960},[32,12734,267],{"class":38},[32,12736,270],{"class":126},[32,12738,273],{"class":63},[32,12740,12741],{"class":34,"line":10965},[32,12742,279],{"class":63},[15,12744,12745],{},[18,12746],{"alt":20,"src":12747},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image753.webp",[15,12749,12750],{},[18,12751],{"alt":20,"src":12752},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image754.webp",[15,12754,12755,12756,12759],{},"At this point, we cancel the client, but the server is still running. The ",[29,12757,12758],{},"ctrl+c"," here only terminates our client, rather than instructing it to send a cancel request command. We need to capture our keyboard input in order to send the cancel request command.",[473,12761],{},[15,12763,12764],{},"Fix bug:",[15,12766,12767],{},"Not fixed yet.",[23,12769,12771],{"className":25,"code":12770,"language":27,"meta":20,"style":20},"// 发送取消请求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",[29,12772,12773,12778,12798,12829,12833,12854,12858,12863,12867,12887],{"__ignoreMap":20},[32,12774,12775],{"class":34,"line":35},[32,12776,12777],{"class":4977},"// 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\n",[32,12779,12780,12782,12784,12786,12788,12790,12792,12795],{"class":34,"line":46},[32,12781,4225],{"class":59},[32,12783,73],{"class":63},[32,12785,7996],{"class":59},[32,12787,103],{"class":63},[32,12789,127],{"class":126},[32,12791,130],{"class":63},[32,12793,12794],{"class":59},"get_node_base_interface",[32,12796,12797],{"class":63},"(), future_cancel);\n",[32,12799,12800,12803,12806,12809,12811,12813,12815,12817,12819,12821,12823,12826],{"class":34,"line":53},[32,12801,12802],{"class":38},"if",[32,12804,12805],{"class":63}," (future_cancel.",[32,12807,12808],{"class":59},"wait_for",[32,12810,103],{"class":63},[32,12812,1342],{"class":126},[32,12814,1345],{"class":38},[32,12816,6812],{"class":63},[32,12818,8002],{"class":38},[32,12820,1200],{"class":59},[32,12822,73],{"class":63},[32,12824,12825],{"class":59},"future_status",[32,12827,12828],{"class":63},"::ready)\n",[32,12830,12831],{"class":34,"line":79},[32,12832,82],{"class":63},[32,12834,12835,12838,12840,12842,12844,12846,12849,12852],{"class":34,"line":85},[32,12836,12837],{"class":59},"  RCLCPP_INFO",[32,12839,103],{"class":63},[32,12841,127],{"class":126},[32,12843,130],{"class":63},[32,12845,133],{"class":59},[32,12847,12848],{"class":63},"(), ",[32,12850,12851],{"class":42},"\"终止请求已发送!\"",[32,12853,142],{"class":63},[32,12855,12856],{"class":34,"line":91},[32,12857,279],{"class":63},[32,12859,12860],{"class":34,"line":112},[32,12861,12862],{"class":38},"else\n",[32,12864,12865],{"class":34,"line":118},[32,12866,82],{"class":63},[32,12868,12869,12872,12874,12876,12878,12880,12882,12885],{"class":34,"line":145},[32,12870,12871],{"class":59},"  RCLCPP_ERROR",[32,12873,103],{"class":63},[32,12875,127],{"class":126},[32,12877,130],{"class":63},[32,12879,133],{"class":59},[32,12881,12848],{"class":63},[32,12883,12884],{"class":42},"\"无法发送终止请求...\"",[32,12886,142],{"class":63},[32,12888,12889],{"class":34,"line":151},[32,12890,279],{"class":63},[10,12892,12894],{"id":12893},"parameter-service_theory-and-api-introduction-c","Parameter Service_Theory and API Introduction (C++)",[15,12896,12897],{},[18,12898],{"alt":20,"src":12899},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image755.webp",[15,12901,12902],{},[18,12903],{"alt":20,"src":12904},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image756.webp",[15,12906,12907],{},"Of course, there are special cases, such as setting parameters to private.",[473,12909],{},[15,12911,12912],{},[18,12913],{"alt":20,"src":12914},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image757.webp",[15,12916,12917],{},[18,12918],{"alt":20,"src":12919},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image758.webp",[15,12921,12922],{},"Other communication methods require you to create your own interface files, but parameter services do not. ROS2 has already encapsulated the API, so we only need to call the API.",[15,12924,12925],{},[18,12926],{"alt":20,"src":12927},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image759.webp",[15,12929,12930],{},[18,12931],{"alt":20,"src":12932},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image760.webp",[15,12934,12935],{},[18,12936],{"alt":20,"src":12937},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image761.webp",[15,12939,12940],{},"Just to demonstrate the API, first create a parameter package to show the API, without creating the client and server for now.",[15,12942,12943],{},[18,12944],{"alt":20,"src":12945},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image762.webp",[15,12947,12948],{},[18,12949],{"alt":20,"src":12950},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image763.webp",[15,12952,12953],{},[18,12954],{"alt":20,"src":12955},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image764.webp",[15,12957,12958],{},"rclcpp::parameter object (key, value);",[15,12960,12961],{},[18,12962],{"alt":20,"src":12963},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image765.webp",[15,12965,12966],{},[18,12967],{"alt":20,"src":12968},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image766.webp",[15,12970,12971],{},[18,12972],{"alt":20,"src":12973},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image767.webp",[15,12975,12976],{},[18,12977],{"alt":20,"src":12978},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image768.webp",[15,12980,12981],{},[18,12982],{"alt":20,"src":12983},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image769.webp",[15,12985,12986],{},[18,12987],{"alt":20,"src":12988},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image770.webp",[15,12990,12991],{},[18,12992],{"alt":20,"src":12993},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image771.webp",[15,12995,12996],{},"This function assigns a value to the parameter, with 18 overloads for various types.",[15,12998,12999],{},"The term \"empty\" means not assigning a value, so there are only keys, no values.",[10,13001,13003],{"id":13002},"parameter-service_experiment-1_server-c","Parameter Service_Experiment 1_Server (C++)",[15,13005,13006],{},[18,13007],{"alt":20,"src":13008},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image772.webp",[15,13010,13011],{},[18,13012],{"alt":20,"src":13013},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image773.webp",[15,13015,13016,13017,13019,13020,13023],{},"Here's the difference: a second parameter is passed in ",[29,13018,100],{},", which is specifically used to allow parameter deletion. ",[29,13021,13022],{},"undeclared"," removes the declaration.",[15,13025,13026],{},[18,13027],{"alt":20,"src":13028},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image774.webp",[15,13030,13031],{},[18,13032],{"alt":20,"src":13033},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image775.webp",[15,13035,13036],{},[18,13037],{"alt":20,"src":13038},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image776.webp",[15,13040,13041],{},[18,13042],{"alt":20,"src":13043},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image777.webp",[15,13045,13046],{},[18,13047],{"alt":20,"src":13048},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image778.webp",[15,13050,13051],{},"Only query and modification interface APIs are provided, without APIs for creation or deletion. This is a security consideration in ROS2.",[15,13053,13054],{},[18,13055],{"alt":20,"src":13056},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image779.webp",[15,13058,13059],{},[18,13060],{"alt":20,"src":13061},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image780.webp",[15,13063,13064],{},[18,13065],{"alt":20,"src":13066},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image781.webp",[15,13068,13069],{},[18,13070],{"alt":20,"src":13071},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image782.webp",[23,13073,13075],{"className":25,"code":13074,"language":27,"meta":20,"style":20},"#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",[29,13076,13077,13083,13087,13104,13108,13112,13128,13132,13151,13155,13159,13163,13185,13189,13199,13203,13224,13228,13238,13242,13252,13260,13264,13270,13274,13291,13295,13299,13315,13319,13338,13342,13346,13350,13372,13376,13386,13390,13411,13415,13425,13429,13439,13447],{"__ignoreMap":20},[32,13078,13079,13081],{"class":34,"line":35},[32,13080,39],{"class":38},[32,13082,43],{"class":42},[32,13084,13085],{"class":34,"line":46},[32,13086,50],{"emptyLinePlaceholder":49},[32,13088,13089,13091,13094,13096,13098,13100,13102],{"class":34,"line":53},[32,13090,56],{"class":38},[32,13092,13093],{"class":59}," ParamServer",[32,13095,64],{"class":63},[32,13097,67],{"class":38},[32,13099,70],{"class":59},[32,13101,73],{"class":63},[32,13103,76],{"class":59},[32,13105,13106],{"class":34,"line":79},[32,13107,82],{"class":63},[32,13109,13110],{"class":34,"line":85},[32,13111,88],{"class":38},[32,13113,13114,13117,13119,13121,13123,13126],{"class":34,"line":91},[32,13115,13116],{"class":59},"    ParamServer",[32,13118,97],{"class":63},[32,13120,100],{"class":59},[32,13122,103],{"class":63},[32,13124,13125],{"class":42},"\"param_server_node_cpp\"",[32,13127,109],{"class":63},[32,13129,13130],{"class":34,"line":112},[32,13131,115],{"class":63},[32,13133,13134,13136,13138,13140,13142,13144,13146,13149],{"class":34,"line":118},[32,13135,121],{"class":59},[32,13137,103],{"class":63},[32,13139,127],{"class":126},[32,13141,130],{"class":63},[32,13143,133],{"class":59},[32,13145,136],{"class":63},[32,13147,13148],{"class":42},"\"参数服务端搭建!\"",[32,13150,142],{"class":63},[32,13152,13153],{"class":34,"line":145},[32,13154,148],{"class":63},[32,13156,13157],{"class":34,"line":151},[32,13158,154],{"class":63},[32,13160,13161],{"class":34,"line":157},[32,13162,50],{"emptyLinePlaceholder":49},[32,13164,13165,13167,13169,13171,13173,13175,13177,13179,13181,13183],{"class":34,"line":162},[32,13166,165],{"class":38},[32,13168,168],{"class":59},[32,13170,103],{"class":63},[32,13172,165],{"class":38},[32,13174,176],{"class":175},[32,13176,179],{"class":63},[32,13178,182],{"class":38},[32,13180,185],{"class":38},[32,13182,188],{"class":175},[32,13184,109],{"class":63},[32,13186,13187],{"class":34,"line":193},[32,13188,82],{"class":63},[32,13190,13191,13193,13195,13197],{"class":34,"line":198},[32,13192,201],{"class":59},[32,13194,73],{"class":63},[32,13196,206],{"class":59},[32,13198,209],{"class":63},[32,13200,13201],{"class":34,"line":212},[32,13202,50],{"emptyLinePlaceholder":49},[32,13204,13205,13207,13209,13211,13213,13215,13217,13219,13222],{"class":34,"line":217},[32,13206,4983],{"class":38},[32,13208,12666],{"class":63},[32,13210,1289],{"class":38},[32,13212,1200],{"class":59},[32,13214,73],{"class":63},[32,13216,234],{"class":59},[32,13218,237],{"class":63},[32,13220,13221],{"class":59},"ParamServer",[32,13223,5002],{"class":63},[32,13225,13226],{"class":34,"line":246},[32,13227,50],{"emptyLinePlaceholder":49},[32,13229,13230,13232,13234,13236],{"class":34,"line":251},[32,13231,201],{"class":59},[32,13233,73],{"class":63},[32,13235,224],{"class":59},[32,13237,12716],{"class":63},[32,13239,13240],{"class":34,"line":264},[32,13241,50],{"emptyLinePlaceholder":49},[32,13243,13244,13246,13248,13250],{"class":34,"line":276},[32,13245,201],{"class":59},[32,13247,73],{"class":63},[32,13249,258],{"class":59},[32,13251,261],{"class":63},[32,13253,13254,13256,13258],{"class":34,"line":418},[32,13255,267],{"class":38},[32,13257,270],{"class":126},[32,13259,273],{"class":63},[32,13261,13262],{"class":34,"line":423},[32,13263,279],{"class":63},[32,13265,13266,13268],{"class":34,"line":429},[32,13267,39],{"class":38},[32,13269,43],{"class":42},[32,13271,13272],{"class":34,"line":435},[32,13273,50],{"emptyLinePlaceholder":49},[32,13275,13276,13278,13281,13283,13285,13287,13289],{"class":34,"line":441},[32,13277,56],{"class":38},[32,13279,13280],{"class":59}," ParamClient",[32,13282,64],{"class":63},[32,13284,67],{"class":38},[32,13286,70],{"class":59},[32,13288,73],{"class":63},[32,13290,76],{"class":59},[32,13292,13293],{"class":34,"line":447},[32,13294,82],{"class":63},[32,13296,13297],{"class":34,"line":453},[32,13298,88],{"class":38},[32,13300,13301,13304,13306,13308,13310,13313],{"class":34,"line":459},[32,13302,13303],{"class":59},"    ParamClient",[32,13305,97],{"class":63},[32,13307,100],{"class":59},[32,13309,103],{"class":63},[32,13311,13312],{"class":42},"\"param_client_node_cpp\"",[32,13314,109],{"class":63},[32,13316,13317],{"class":34,"line":1569},[32,13318,115],{"class":63},[32,13320,13321,13323,13325,13327,13329,13331,13333,13336],{"class":34,"line":1574},[32,13322,121],{"class":59},[32,13324,103],{"class":63},[32,13326,127],{"class":126},[32,13328,130],{"class":63},[32,13330,133],{"class":59},[32,13332,136],{"class":63},[32,13334,13335],{"class":42},"\"参数客户端搭建!\"",[32,13337,142],{"class":63},[32,13339,13340],{"class":34,"line":1585},[32,13341,148],{"class":63},[32,13343,13344],{"class":34,"line":1590},[32,13345,154],{"class":63},[32,13347,13348],{"class":34,"line":1613},[32,13349,50],{"emptyLinePlaceholder":49},[32,13351,13352,13354,13356,13358,13360,13362,13364,13366,13368,13370],{"class":34,"line":1618},[32,13353,165],{"class":38},[32,13355,168],{"class":59},[32,13357,103],{"class":63},[32,13359,165],{"class":38},[32,13361,176],{"class":175},[32,13363,179],{"class":63},[32,13365,182],{"class":38},[32,13367,185],{"class":38},[32,13369,188],{"class":175},[32,13371,109],{"class":63},[32,13373,13374],{"class":34,"line":1629},[32,13375,82],{"class":63},[32,13377,13378,13380,13382,13384],{"class":34,"line":1638},[32,13379,201],{"class":59},[32,13381,73],{"class":63},[32,13383,206],{"class":59},[32,13385,209],{"class":63},[32,13387,13388],{"class":34,"line":3929},[32,13389,50],{"emptyLinePlaceholder":49},[32,13391,13392,13394,13396,13398,13400,13402,13404,13406,13409],{"class":34,"line":3940},[32,13393,4983],{"class":38},[32,13395,12666],{"class":63},[32,13397,1289],{"class":38},[32,13399,1200],{"class":59},[32,13401,73],{"class":63},[32,13403,234],{"class":59},[32,13405,237],{"class":63},[32,13407,13408],{"class":59},"ParamClient",[32,13410,5002],{"class":63},[32,13412,13413],{"class":34,"line":3949},[32,13414,50],{"emptyLinePlaceholder":49},[32,13416,13417,13419,13421,13423],{"class":34,"line":7035},[32,13418,201],{"class":59},[32,13420,73],{"class":63},[32,13422,224],{"class":59},[32,13424,12716],{"class":63},[32,13426,13427],{"class":34,"line":7044},[32,13428,50],{"emptyLinePlaceholder":49},[32,13430,13431,13433,13435,13437],{"class":34,"line":7049},[32,13432,201],{"class":59},[32,13434,73],{"class":63},[32,13436,258],{"class":59},[32,13438,261],{"class":63},[32,13440,13441,13443,13445],{"class":34,"line":7060},[32,13442,267],{"class":38},[32,13444,270],{"class":126},[32,13446,273],{"class":63},[32,13448,13449],{"class":34,"line":7065},[32,13450,279],{"class":63},[15,13452,13453],{},[18,13454],{"alt":20,"src":13455},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image783.webp",[15,13457,13458],{},[18,13459],{"alt":20,"src":13460},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image784.webp",[15,13462,13463],{},[18,13464],{"alt":20,"src":13465},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image785.webp",[15,13467,13468],{},[18,13469],{"alt":20,"src":13470},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image786.webp",[473,13472],{},[15,13474,13475],{},[18,13476],{"alt":20,"src":13477},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image787.webp",[15,13479,13480],{},[18,13481],{"alt":20,"src":13482},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image788.webp",[15,13484,13485],{},[18,13486],{"alt":20,"src":13487},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image789.webp",[15,13489,13490],{},"Chain programming.",[15,13492,13493],{},"An ordinary node can act as a parameter server without needing to create a separate parameter server.",[15,13495,13496],{},[18,13497],{"alt":20,"src":13498},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image790.webp",[15,13500,13501],{},[18,13502],{"alt":20,"src":13503},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image791.webp",[23,13505,13507],{"className":25,"code":13506,"language":27,"meta":20,"style":20},"#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",[29,13508,13509,13515,13519,13535,13539,13543,13577,13581,13599,13603,13607,13616,13620,13639,13643,13647,13656,13660,13679,13683,13687,13696,13700,13719,13723,13727,13736,13740,13759,13763,13767,13771,13775,13797,13801,13811,13815,13835,13839,13848,13857,13866,13875,13879,13889,13893,13903,13911],{"__ignoreMap":20},[32,13510,13511,13513],{"class":34,"line":35},[32,13512,39],{"class":38},[32,13514,43],{"class":42},[32,13516,13517],{"class":34,"line":46},[32,13518,50],{"emptyLinePlaceholder":49},[32,13520,13521,13523,13525,13527,13529,13531,13533],{"class":34,"line":53},[32,13522,56],{"class":38},[32,13524,13093],{"class":59},[32,13526,64],{"class":63},[32,13528,67],{"class":38},[32,13530,70],{"class":59},[32,13532,73],{"class":63},[32,13534,76],{"class":59},[32,13536,13537],{"class":34,"line":79},[32,13538,82],{"class":63},[32,13540,13541],{"class":34,"line":85},[32,13542,88],{"class":38},[32,13544,13545,13547,13549,13551,13553,13555,13557,13559,13561,13564,13567,13570,13572,13574],{"class":34,"line":91},[32,13546,13116],{"class":59},[32,13548,97],{"class":63},[32,13550,100],{"class":59},[32,13552,103],{"class":63},[32,13554,13125],{"class":42},[32,13556,1318],{"class":63},[32,13558,4225],{"class":59},[32,13560,73],{"class":63},[32,13562,13563],{"class":59},"NodeOptions",[32,13565,13566],{"class":63},"().",[32,13568,13569],{"class":59},"allow_undeclared_parameters",[32,13571,103],{"class":63},[32,13573,6560],{"class":126},[32,13575,13576],{"class":63},"))\n",[32,13578,13579],{"class":34,"line":112},[32,13580,115],{"class":63},[32,13582,13583,13585,13587,13589,13591,13593,13595,13597],{"class":34,"line":118},[32,13584,121],{"class":59},[32,13586,103],{"class":63},[32,13588,127],{"class":126},[32,13590,130],{"class":63},[32,13592,133],{"class":59},[32,13594,136],{"class":63},[32,13596,13148],{"class":42},[32,13598,142],{"class":63},[32,13600,13601],{"class":34,"line":145},[32,13602,148],{"class":63},[32,13604,13605],{"class":34,"line":151},[32,13606,50],{"emptyLinePlaceholder":49},[32,13608,13609,13611,13614],{"class":34,"line":157},[32,13610,1383],{"class":38},[32,13612,13613],{"class":59}," create_param",[32,13615,1389],{"class":63},[32,13617,13618],{"class":34,"line":162},[32,13619,115],{"class":63},[32,13621,13622,13624,13626,13628,13630,13632,13634,13637],{"class":34,"line":193},[32,13623,121],{"class":59},[32,13625,103],{"class":63},[32,13627,127],{"class":126},[32,13629,130],{"class":63},[32,13631,133],{"class":59},[32,13633,136],{"class":63},[32,13635,13636],{"class":42},"\"-------------增操作--------------\"",[32,13638,142],{"class":63},[32,13640,13641],{"class":34,"line":198},[32,13642,148],{"class":63},[32,13644,13645],{"class":34,"line":212},[32,13646,50],{"emptyLinePlaceholder":49},[32,13648,13649,13651,13654],{"class":34,"line":217},[32,13650,1383],{"class":38},[32,13652,13653],{"class":59}," get_param",[32,13655,1389],{"class":63},[32,13657,13658],{"class":34,"line":246},[32,13659,115],{"class":63},[32,13661,13662,13664,13666,13668,13670,13672,13674,13677],{"class":34,"line":251},[32,13663,121],{"class":59},[32,13665,103],{"class":63},[32,13667,127],{"class":126},[32,13669,130],{"class":63},[32,13671,133],{"class":59},[32,13673,136],{"class":63},[32,13675,13676],{"class":42},"\"-------------查操作--------------\"",[32,13678,142],{"class":63},[32,13680,13681],{"class":34,"line":264},[32,13682,148],{"class":63},[32,13684,13685],{"class":34,"line":276},[32,13686,50],{"emptyLinePlaceholder":49},[32,13688,13689,13691,13694],{"class":34,"line":418},[32,13690,1383],{"class":38},[32,13692,13693],{"class":59}," update_param",[32,13695,1389],{"class":63},[32,13697,13698],{"class":34,"line":423},[32,13699,115],{"class":63},[32,13701,13702,13704,13706,13708,13710,13712,13714,13717],{"class":34,"line":429},[32,13703,121],{"class":59},[32,13705,103],{"class":63},[32,13707,127],{"class":126},[32,13709,130],{"class":63},[32,13711,133],{"class":59},[32,13713,136],{"class":63},[32,13715,13716],{"class":42},"\"-------------改操作--------------\"",[32,13718,142],{"class":63},[32,13720,13721],{"class":34,"line":435},[32,13722,148],{"class":63},[32,13724,13725],{"class":34,"line":441},[32,13726,50],{"emptyLinePlaceholder":49},[32,13728,13729,13731,13734],{"class":34,"line":447},[32,13730,1383],{"class":38},[32,13732,13733],{"class":59}," delete_param",[32,13735,1389],{"class":63},[32,13737,13738],{"class":34,"line":453},[32,13739,115],{"class":63},[32,13741,13742,13744,13746,13748,13750,13752,13754,13757],{"class":34,"line":459},[32,13743,121],{"class":59},[32,13745,103],{"class":63},[32,13747,127],{"class":126},[32,13749,130],{"class":63},[32,13751,133],{"class":59},[32,13753,136],{"class":63},[32,13755,13756],{"class":42},"\"-------------删操作--------------\"",[32,13758,142],{"class":63},[32,13760,13761],{"class":34,"line":1569},[32,13762,148],{"class":63},[32,13764,13765],{"class":34,"line":1574},[32,13766,50],{"emptyLinePlaceholder":49},[32,13768,13769],{"class":34,"line":1585},[32,13770,154],{"class":63},[32,13772,13773],{"class":34,"line":1590},[32,13774,50],{"emptyLinePlaceholder":49},[32,13776,13777,13779,13781,13783,13785,13787,13789,13791,13793,13795],{"class":34,"line":1613},[32,13778,165],{"class":38},[32,13780,168],{"class":59},[32,13782,103],{"class":63},[32,13784,165],{"class":38},[32,13786,176],{"class":175},[32,13788,179],{"class":63},[32,13790,182],{"class":38},[32,13792,185],{"class":38},[32,13794,188],{"class":175},[32,13796,109],{"class":63},[32,13798,13799],{"class":34,"line":1618},[32,13800,82],{"class":63},[32,13802,13803,13805,13807,13809],{"class":34,"line":1629},[32,13804,201],{"class":59},[32,13806,73],{"class":63},[32,13808,206],{"class":59},[32,13810,209],{"class":63},[32,13812,13813],{"class":34,"line":1638},[32,13814,50],{"emptyLinePlaceholder":49},[32,13816,13817,13819,13821,13823,13825,13827,13829,13831,13833],{"class":34,"line":3929},[32,13818,4983],{"class":38},[32,13820,12666],{"class":63},[32,13822,1289],{"class":38},[32,13824,1200],{"class":59},[32,13826,73],{"class":63},[32,13828,234],{"class":59},[32,13830,237],{"class":63},[32,13832,13221],{"class":59},[32,13834,5002],{"class":63},[32,13836,13837],{"class":34,"line":3940},[32,13838,50],{"emptyLinePlaceholder":49},[32,13840,13841,13843,13846],{"class":34,"line":3949},[32,13842,12689],{"class":63},[32,13844,13845],{"class":59},"create_param",[32,13847,261],{"class":63},[32,13849,13850,13852,13855],{"class":34,"line":7035},[32,13851,12689],{"class":63},[32,13853,13854],{"class":59},"get_param",[32,13856,261],{"class":63},[32,13858,13859,13861,13864],{"class":34,"line":7044},[32,13860,12689],{"class":63},[32,13862,13863],{"class":59},"update_param",[32,13865,261],{"class":63},[32,13867,13868,13870,13873],{"class":34,"line":7049},[32,13869,12689],{"class":63},[32,13871,13872],{"class":59},"delete_param",[32,13874,261],{"class":63},[32,13876,13877],{"class":34,"line":7060},[32,13878,50],{"emptyLinePlaceholder":49},[32,13880,13881,13883,13885,13887],{"class":34,"line":7065},[32,13882,201],{"class":59},[32,13884,73],{"class":63},[32,13886,224],{"class":59},[32,13888,12716],{"class":63},[32,13890,13891],{"class":34,"line":7086},[32,13892,50],{"emptyLinePlaceholder":49},[32,13894,13895,13897,13899,13901],{"class":34,"line":7091},[32,13896,201],{"class":59},[32,13898,73],{"class":63},[32,13900,258],{"class":59},[32,13902,261],{"class":63},[32,13904,13905,13907,13909],{"class":34,"line":7110},[32,13906,267],{"class":38},[32,13908,270],{"class":126},[32,13910,273],{"class":63},[32,13912,13913],{"class":34,"line":7115},[32,13914,279],{"class":63},[473,13916],{},[15,13918,13919],{},[18,13920],{"alt":20,"src":13921},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image792.webp",[15,13923,13924],{},[18,13925],{"alt":20,"src":13926},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image793.webp",[15,13928,13929],{},[18,13930],{"alt":20,"src":13931},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image794.webp",[15,13933,13934],{},"ros2 param list",[15,13936,13937],{},"Query all parameters in all nodes.",[15,13939,13940],{},[18,13941],{"alt":20,"src":13942},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image795.webp",[15,13944,13945,13946,13949],{},"Use ",[29,13947,13948],{},"ros2 param get /node_name parameter_key"," to view the value of a parameter.",[473,13951],{},[15,13953,13954],{},[18,13955],{"alt":20,"src":13956},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image796.webp",[15,13958,13959],{},"You can query the value of a parameter by its key.",[15,13961,13962],{},[18,13963],{"alt":20,"src":13964},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image797.webp",[15,13966,13967],{},"Functions with plural forms can obtain some parameter objects through containers composed of keys.",[15,13969,13970],{},[18,13971],{"alt":20,"src":13972},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image798.webp",[15,13974,13975],{},"to determine whether the parameter exists. The input parameter is also a key, and the return value is a boolean.",[15,13977,13978],{},[18,13979],{"alt":20,"src":13980},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image799.webp",[15,13982,13983],{},[18,13984],{"alt":20,"src":13985},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image800.webp",[15,13987,13988],{},[18,13989],{"alt":20,"src":13990},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image801.webp",[15,13992,13993],{},[18,13994],{"alt":20,"src":13995},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image802.webp",[15,13997,13998],{},[18,13999],{"alt":20,"src":14000},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image803.webp",[15,14002,14003],{},[18,14004],{"alt":20,"src":14005},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image804.webp",[473,14007],{},[15,14009,14010],{},[18,14011],{"alt":20,"src":14012},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image805.webp",[15,14014,14015],{},"The parameter object needs to be passed in.",[15,14017,14018],{},[18,14019],{"alt":20,"src":14020},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image806.webp",[15,14022,14023],{},"We just overwrite the old value.",[15,14025,14026],{},[18,14027],{"alt":20,"src":14028},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image807.webp",[15,14030,14031],{},[18,14032],{"alt":20,"src":14033},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image808.webp",[15,14035,14036,14037,14040,14041,14044],{},"Parameters can also be created using ",[29,14038,14039],{},"set_parameter",", but ",[29,14042,14043],{},"allow_undeclared_parameters(true)"," must be declared.",[15,14046,14047],{},[18,14048],{"alt":20,"src":14049},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image809.webp",[15,14051,14052],{},[18,14053],{"alt":20,"src":14054},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image810.webp",[15,14056,14057],{},[18,14058],{"alt":20,"src":14059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image811.webp",[473,14061],{},[15,14063,14064],{},[18,14065],{"alt":20,"src":14066},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image812.webp",[15,14068,14069],{},[18,14070],{"alt":20,"src":14071},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image813.webp",[15,14073,14074],{},"Parameters declared in this way cannot be deleted; only undeclared but set parameters can be removed.",[15,14076,14077],{},[18,14078],{"alt":20,"src":14079},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image814.webp",[15,14081,14082],{},[18,14083],{"alt":20,"src":14084},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image815.webp",[23,14086,14088],{"className":25,"code":14087,"language":27,"meta":20,"style":20},"#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",[29,14089,14090,14096,14100,14116,14120,14124,14154,14158,14176,14180,14184,14192,14196,14214,14218,14240,14260,14280,14284,14313,14317,14321,14329,14333,14351,14355,14377,14426,14430,14462,14476,14480,14525,14529,14552,14573,14597,14621,14625,14629,14637,14641,14659,14686,14727,14731,14735,14743,14747,14765,14770,14775,14790,14824,14828,14832,14836,14840,14862,14866,14876,14880,14900,14904,14912,14920,14928,14936,14940,14950,14954,14964,14972],{"__ignoreMap":20},[32,14091,14092,14094],{"class":34,"line":35},[32,14093,39],{"class":38},[32,14095,43],{"class":42},[32,14097,14098],{"class":34,"line":46},[32,14099,50],{"emptyLinePlaceholder":49},[32,14101,14102,14104,14106,14108,14110,14112,14114],{"class":34,"line":53},[32,14103,56],{"class":38},[32,14105,13093],{"class":59},[32,14107,64],{"class":63},[32,14109,67],{"class":38},[32,14111,70],{"class":59},[32,14113,73],{"class":63},[32,14115,76],{"class":59},[32,14117,14118],{"class":34,"line":79},[32,14119,82],{"class":63},[32,14121,14122],{"class":34,"line":85},[32,14123,88],{"class":38},[32,14125,14126,14128,14130,14132,14134,14136,14138,14140,14142,14144,14146,14148,14150,14152],{"class":34,"line":91},[32,14127,13116],{"class":59},[32,14129,97],{"class":63},[32,14131,100],{"class":59},[32,14133,103],{"class":63},[32,14135,13125],{"class":42},[32,14137,1318],{"class":63},[32,14139,4225],{"class":59},[32,14141,73],{"class":63},[32,14143,13563],{"class":59},[32,14145,13566],{"class":63},[32,14147,13569],{"class":59},[32,14149,103],{"class":63},[32,14151,6560],{"class":126},[32,14153,13576],{"class":63},[32,14155,14156],{"class":34,"line":112},[32,14157,115],{"class":63},[32,14159,14160,14162,14164,14166,14168,14170,14172,14174],{"class":34,"line":118},[32,14161,121],{"class":59},[32,14163,103],{"class":63},[32,14165,127],{"class":126},[32,14167,130],{"class":63},[32,14169,133],{"class":59},[32,14171,136],{"class":63},[32,14173,13148],{"class":42},[32,14175,142],{"class":63},[32,14177,14178],{"class":34,"line":145},[32,14179,148],{"class":63},[32,14181,14182],{"class":34,"line":151},[32,14183,50],{"emptyLinePlaceholder":49},[32,14185,14186,14188,14190],{"class":34,"line":157},[32,14187,1383],{"class":38},[32,14189,13613],{"class":59},[32,14191,1389],{"class":63},[32,14193,14194],{"class":34,"line":162},[32,14195,115],{"class":63},[32,14197,14198,14200,14202,14204,14206,14208,14210,14212],{"class":34,"line":193},[32,14199,121],{"class":59},[32,14201,103],{"class":63},[32,14203,127],{"class":126},[32,14205,130],{"class":63},[32,14207,133],{"class":59},[32,14209,136],{"class":63},[32,14211,13636],{"class":42},[32,14213,142],{"class":63},[32,14215,14216],{"class":34,"line":198},[32,14217,50],{"emptyLinePlaceholder":49},[32,14219,14220,14223,14225,14228,14230,14233,14235,14238],{"class":34,"line":212},[32,14221,14222],{"class":126},"      this",[32,14224,130],{"class":63},[32,14226,14227],{"class":59},"declare_parameter",[32,14229,103],{"class":63},[32,14231,14232],{"class":42},"\"car_name\"",[32,14234,1318],{"class":63},[32,14236,14237],{"class":42},"\"ER\"",[32,14239,142],{"class":63},[32,14241,14242,14244,14246,14248,14250,14253,14255,14258],{"class":34,"line":217},[32,14243,14222],{"class":126},[32,14245,130],{"class":63},[32,14247,14227],{"class":59},[32,14249,103],{"class":63},[32,14251,14252],{"class":42},"\"width\"",[32,14254,1318],{"class":63},[32,14256,14257],{"class":126},"1.55",[32,14259,142],{"class":63},[32,14261,14262,14264,14266,14268,14270,14273,14275,14278],{"class":34,"line":246},[32,14263,14222],{"class":126},[32,14265,130],{"class":63},[32,14267,14227],{"class":59},[32,14269,103],{"class":63},[32,14271,14272],{"class":42},"\"wheels\"",[32,14274,1318],{"class":63},[32,14276,14277],{"class":126},"5",[32,14279,142],{"class":63},[32,14281,14282],{"class":34,"line":251},[32,14283,50],{"emptyLinePlaceholder":49},[32,14285,14286,14288,14290,14292,14294,14296,14298,14301,14303,14306,14308,14311],{"class":34,"line":264},[32,14287,14222],{"class":126},[32,14289,130],{"class":63},[32,14291,14039],{"class":59},[32,14293,103],{"class":63},[32,14295,4225],{"class":59},[32,14297,73],{"class":63},[32,14299,14300],{"class":59},"Parameter",[32,14302,103],{"class":63},[32,14304,14305],{"class":42},"\"height\"",[32,14307,1318],{"class":63},[32,14309,14310],{"class":126},"2.00",[32,14312,1369],{"class":63},[32,14314,14315],{"class":34,"line":276},[32,14316,148],{"class":63},[32,14318,14319],{"class":34,"line":418},[32,14320,50],{"emptyLinePlaceholder":49},[32,14322,14323,14325,14327],{"class":34,"line":423},[32,14324,1383],{"class":38},[32,14326,13653],{"class":59},[32,14328,1389],{"class":63},[32,14330,14331],{"class":34,"line":429},[32,14332,115],{"class":63},[32,14334,14335,14337,14339,14341,14343,14345,14347,14349],{"class":34,"line":435},[32,14336,121],{"class":59},[32,14338,103],{"class":63},[32,14340,127],{"class":126},[32,14342,130],{"class":63},[32,14344,133],{"class":59},[32,14346,136],{"class":63},[32,14348,13676],{"class":42},[32,14350,142],{"class":63},[32,14352,14353],{"class":34,"line":441},[32,14354,50],{"emptyLinePlaceholder":49},[32,14356,14357,14359,14362,14364,14366,14368,14371,14373,14375],{"class":34,"line":447},[32,14358,1398],{"class":38},[32,14360,14361],{"class":63}," car ",[32,14363,1289],{"class":38},[32,14365,1292],{"class":126},[32,14367,130],{"class":63},[32,14369,14370],{"class":59},"get_parameter",[32,14372,103],{"class":63},[32,14374,14232],{"class":42},[32,14376,142],{"class":63},[32,14378,14379,14381,14383,14385,14387,14389,14391,14394,14396,14399,14401,14403,14406,14409,14411,14413,14416,14419,14421,14423],{"class":34,"line":453},[32,14380,121],{"class":59},[32,14382,103],{"class":63},[32,14384,127],{"class":126},[32,14386,130],{"class":63},[32,14388,133],{"class":59},[32,14390,136],{"class":63},[32,14392,14393],{"class":42},"\"key = ",[32,14395,1465],{"class":126},[32,14397,14398],{"class":42},",value = ",[32,14400,1465],{"class":126},[32,14402,1468],{"class":42},[32,14404,14405],{"class":63},",car.",[32,14407,14408],{"class":59},"get_name",[32,14410,13566],{"class":63},[32,14412,1474],{"class":59},[32,14414,14415],{"class":63},"(),car.",[32,14417,14418],{"class":59},"as_string",[32,14420,13566],{"class":63},[32,14422,1474],{"class":59},[32,14424,14425],{"class":63},"()); \n",[32,14427,14428],{"class":34,"line":459},[32,14429,50],{"emptyLinePlaceholder":49},[32,14431,14432,14434,14437,14439,14441,14443,14446,14449,14451,14453,14455,14457,14459],{"class":34,"line":1569},[32,14433,1398],{"class":38},[32,14435,14436],{"class":63}," params ",[32,14438,1289],{"class":38},[32,14440,1292],{"class":126},[32,14442,130],{"class":63},[32,14444,14445],{"class":59},"get_parameters",[32,14447,14448],{"class":63},"({",[32,14450,14232],{"class":42},[32,14452,1318],{"class":63},[32,14454,14252],{"class":42},[32,14456,1318],{"class":63},[32,14458,14272],{"class":42},[32,14460,14461],{"class":63},"});\n",[32,14463,14464,14466,14468,14471,14473],{"class":34,"line":1574},[32,14465,10481],{"class":38},[32,14467,103],{"class":63},[32,14469,14470],{"class":38},"auto",[32,14472,2203],{"class":38},[32,14474,14475],{"class":63},"¶m : params)\n",[32,14477,14478],{"class":34,"line":1585},[32,14479,6824],{"class":63},[32,14481,14482,14484,14486,14488,14490,14492,14494,14496,14498,14500,14502,14504,14507,14509,14511,14513,14516,14519,14521,14523],{"class":34,"line":1590},[32,14483,1798],{"class":59},[32,14485,103],{"class":63},[32,14487,127],{"class":126},[32,14489,130],{"class":63},[32,14491,133],{"class":59},[32,14493,136],{"class":63},[32,14495,14393],{"class":42},[32,14497,1465],{"class":126},[32,14499,14398],{"class":42},[32,14501,1465],{"class":126},[32,14503,1468],{"class":42},[32,14505,14506],{"class":63},",param.",[32,14508,14408],{"class":59},[32,14510,13566],{"class":63},[32,14512,1474],{"class":59},[32,14514,14515],{"class":63},"(),param.",[32,14517,14518],{"class":59},"value_to_string",[32,14520,13566],{"class":63},[32,14522,1474],{"class":59},[32,14524,1477],{"class":63},[32,14526,14527],{"class":34,"line":1613},[32,14528,6923],{"class":63},[32,14530,14531,14534,14537,14539,14541,14543,14546,14548,14550],{"class":34,"line":1618},[32,14532,14533],{"class":38},"      bool",[32,14535,14536],{"class":63}," car_name_flag ",[32,14538,1289],{"class":38},[32,14540,1292],{"class":126},[32,14542,130],{"class":63},[32,14544,14545],{"class":59},"has_parameter",[32,14547,103],{"class":63},[32,14549,14232],{"class":42},[32,14551,142],{"class":63},[32,14553,14554,14556,14559,14561,14563,14565,14567,14569,14571],{"class":34,"line":1629},[32,14555,14533],{"class":38},[32,14557,14558],{"class":63}," height_flag ",[32,14560,1289],{"class":38},[32,14562,1292],{"class":126},[32,14564,130],{"class":63},[32,14566,14545],{"class":59},[32,14568,103],{"class":63},[32,14570,14305],{"class":42},[32,14572,142],{"class":63},[32,14574,14575,14577,14579,14581,14583,14585,14587,14590,14592,14594],{"class":34,"line":1638},[32,14576,121],{"class":59},[32,14578,103],{"class":63},[32,14580,127],{"class":126},[32,14582,130],{"class":63},[32,14584,133],{"class":59},[32,14586,136],{"class":63},[32,14588,14589],{"class":42},"\"是否包含car_name? 答案:",[32,14591,3793],{"class":126},[32,14593,1468],{"class":42},[32,14595,14596],{"class":63},",car_name_flag);\n",[32,14598,14599,14601,14603,14605,14607,14609,14611,14614,14616,14618],{"class":34,"line":3929},[32,14600,121],{"class":59},[32,14602,103],{"class":63},[32,14604,127],{"class":126},[32,14606,130],{"class":63},[32,14608,133],{"class":59},[32,14610,136],{"class":63},[32,14612,14613],{"class":42},"\"是否包含height? 答案:",[32,14615,3793],{"class":126},[32,14617,1468],{"class":42},[32,14619,14620],{"class":63},",height_flag);\n",[32,14622,14623],{"class":34,"line":3940},[32,14624,148],{"class":63},[32,14626,14627],{"class":34,"line":3949},[32,14628,50],{"emptyLinePlaceholder":49},[32,14630,14631,14633,14635],{"class":34,"line":7035},[32,14632,1383],{"class":38},[32,14634,13693],{"class":59},[32,14636,1389],{"class":63},[32,14638,14639],{"class":34,"line":7044},[32,14640,115],{"class":63},[32,14642,14643,14645,14647,14649,14651,14653,14655,14657],{"class":34,"line":7049},[32,14644,121],{"class":59},[32,14646,103],{"class":63},[32,14648,127],{"class":126},[32,14650,130],{"class":63},[32,14652,133],{"class":59},[32,14654,136],{"class":63},[32,14656,13716],{"class":42},[32,14658,142],{"class":63},[32,14660,14661,14663,14665,14667,14669,14671,14673,14675,14677,14679,14681,14684],{"class":34,"line":7060},[32,14662,14222],{"class":126},[32,14664,130],{"class":63},[32,14666,14039],{"class":59},[32,14668,103],{"class":63},[32,14670,4225],{"class":59},[32,14672,73],{"class":63},[32,14674,14300],{"class":59},[32,14676,103],{"class":63},[32,14678,14252],{"class":42},[32,14680,1318],{"class":63},[32,14682,14683],{"class":126},"1.85",[32,14685,1369],{"class":63},[32,14687,14688,14690,14692,14694,14696,14698,14700,14703,14705,14707,14709,14711,14713,14715,14717,14719,14722,14725],{"class":34,"line":7065},[32,14689,121],{"class":59},[32,14691,103],{"class":63},[32,14693,127],{"class":126},[32,14695,130],{"class":63},[32,14697,133],{"class":59},[32,14699,136],{"class":63},[32,14701,14702],{"class":42},"\"width = ",[32,14704,3798],{"class":126},[32,14706,1468],{"class":42},[32,14708,1318],{"class":63},[32,14710,127],{"class":126},[32,14712,130],{"class":63},[32,14714,14370],{"class":59},[32,14716,103],{"class":63},[32,14718,14252],{"class":42},[32,14720,14721],{"class":63},").",[32,14723,14724],{"class":59},"as_double",[32,14726,1477],{"class":63},[32,14728,14729],{"class":34,"line":7086},[32,14730,148],{"class":63},[32,14732,14733],{"class":34,"line":7091},[32,14734,50],{"emptyLinePlaceholder":49},[32,14736,14737,14739,14741],{"class":34,"line":7110},[32,14738,1383],{"class":38},[32,14740,13733],{"class":59},[32,14742,1389],{"class":63},[32,14744,14745],{"class":34,"line":7115},[32,14746,115],{"class":63},[32,14748,14749,14751,14753,14755,14757,14759,14761,14763],{"class":34,"line":7129},[32,14750,121],{"class":59},[32,14752,103],{"class":63},[32,14754,127],{"class":126},[32,14756,130],{"class":63},[32,14758,133],{"class":59},[32,14760,136],{"class":63},[32,14762,13756],{"class":42},[32,14764,142],{"class":63},[32,14766,14767],{"class":34,"line":7134},[32,14768,14769],{"class":4977},"    //   this->undeclare_parameter(\"car_name\");\n",[32,14771,14772],{"class":34,"line":7158},[32,14773,14774],{"class":4977},"    //   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n",[32,14776,14777,14779,14781,14784,14786,14788],{"class":34,"line":7167},[32,14778,14222],{"class":126},[32,14780,130],{"class":63},[32,14782,14783],{"class":59},"undeclare_parameter",[32,14785,103],{"class":63},[32,14787,14305],{"class":42},[32,14789,142],{"class":63},[32,14791,14792,14794,14796,14798,14800,14802,14804,14806,14808,14810,14812,14814,14816,14818,14820,14822],{"class":34,"line":7172},[32,14793,121],{"class":59},[32,14795,103],{"class":63},[32,14797,127],{"class":126},[32,14799,130],{"class":63},[32,14801,133],{"class":59},[32,14803,136],{"class":63},[32,14805,14613],{"class":42},[32,14807,3793],{"class":126},[32,14809,1468],{"class":42},[32,14811,1318],{"class":63},[32,14813,127],{"class":126},[32,14815,130],{"class":63},[32,14817,14545],{"class":59},[32,14819,103],{"class":63},[32,14821,14305],{"class":42},[32,14823,1369],{"class":63},[32,14825,14826],{"class":34,"line":7177},[32,14827,148],{"class":63},[32,14829,14830],{"class":34,"line":7188},[32,14831,50],{"emptyLinePlaceholder":49},[32,14833,14834],{"class":34,"line":7197},[32,14835,154],{"class":63},[32,14837,14838],{"class":34,"line":7863},[32,14839,50],{"emptyLinePlaceholder":49},[32,14841,14842,14844,14846,14848,14850,14852,14854,14856,14858,14860],{"class":34,"line":7868},[32,14843,165],{"class":38},[32,14845,168],{"class":59},[32,14847,103],{"class":63},[32,14849,165],{"class":38},[32,14851,176],{"class":175},[32,14853,179],{"class":63},[32,14855,182],{"class":38},[32,14857,185],{"class":38},[32,14859,188],{"class":175},[32,14861,109],{"class":63},[32,14863,14864],{"class":34,"line":7883},[32,14865,82],{"class":63},[32,14867,14868,14870,14872,14874],{"class":34,"line":7888},[32,14869,201],{"class":59},[32,14871,73],{"class":63},[32,14873,206],{"class":59},[32,14875,209],{"class":63},[32,14877,14878],{"class":34,"line":7901},[32,14879,50],{"emptyLinePlaceholder":49},[32,14881,14882,14884,14886,14888,14890,14892,14894,14896,14898],{"class":34,"line":7906},[32,14883,4983],{"class":38},[32,14885,12666],{"class":63},[32,14887,1289],{"class":38},[32,14889,1200],{"class":59},[32,14891,73],{"class":63},[32,14893,234],{"class":59},[32,14895,237],{"class":63},[32,14897,13221],{"class":59},[32,14899,5002],{"class":63},[32,14901,14902],{"class":34,"line":7929},[32,14903,50],{"emptyLinePlaceholder":49},[32,14905,14906,14908,14910],{"class":34,"line":7938},[32,14907,12689],{"class":63},[32,14909,13845],{"class":59},[32,14911,261],{"class":63},[32,14913,14914,14916,14918],{"class":34,"line":7943},[32,14915,12689],{"class":63},[32,14917,13854],{"class":59},[32,14919,261],{"class":63},[32,14921,14922,14924,14926],{"class":34,"line":7980},[32,14923,12689],{"class":63},[32,14925,13863],{"class":59},[32,14927,261],{"class":63},[32,14929,14930,14932,14934],{"class":34,"line":7985},[32,14931,12689],{"class":63},[32,14933,13872],{"class":59},[32,14935,261],{"class":63},[32,14937,14938],{"class":34,"line":8015},[32,14939,50],{"emptyLinePlaceholder":49},[32,14941,14942,14944,14946,14948],{"class":34,"line":8020},[32,14943,201],{"class":59},[32,14945,73],{"class":63},[32,14947,224],{"class":59},[32,14949,12716],{"class":63},[32,14951,14952],{"class":34,"line":8048},[32,14953,50],{"emptyLinePlaceholder":49},[32,14955,14956,14958,14960,14962],{"class":34,"line":8053},[32,14957,201],{"class":59},[32,14959,73],{"class":63},[32,14961,258],{"class":59},[32,14963,261],{"class":63},[32,14965,14966,14968,14970],{"class":34,"line":8059},[32,14967,267],{"class":38},[32,14969,270],{"class":126},[32,14971,273],{"class":63},[32,14973,14974],{"class":34,"line":8064},[32,14975,279],{"class":63},[10,14977,14979],{"id":14978},"parameter-service-experiment-1-client-c","Parameter Service Experiment 1 - Client (C++)",[15,14981,14982],{},[18,14983],{"alt":20,"src":14984},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image816.webp",[15,14986,14987],{},[18,14988],{"alt":20,"src":14989},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image817.webp",[15,14991,14992],{},[18,14993],{"alt":20,"src":14994},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image818.webp",[15,14996,14997],{},[18,14998],{"alt":20,"src":14999},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image819.webp",[15,15001,15002],{},[18,15003],{"alt":20,"src":15004},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image820.webp",[15,15006,15007],{},[18,15008],{"alt":20,"src":15009},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image821.webp",[15,15011,15012],{},[18,15013],{"alt":20,"src":15014},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image822.webp",[15,15016,15017],{},[18,15018],{"alt":20,"src":15019},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image823.webp",[15,15021,15022],{},[18,15023],{"alt":20,"src":15024},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image824.webp",[15,15026,15027],{},[18,15028],{"alt":20,"src":15029},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image825.webp",[15,15031,15032],{},"The first entry parameter is the client node object.",[15,15034,15035],{},"The second entry parameter is the name of the server node to connect to.",[15,15037,15038],{},[18,15039],{"alt":20,"src":15040},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image826.webp",[15,15042,15043],{},"If connected within 1 second, return true; if the connection times out after 1 second, return false.",[15,15045,15046],{},[18,15047],{"alt":20,"src":15048},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image827.webp",[15,15050,15051],{},[18,15052],{"alt":20,"src":15053},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image828.webp",[23,15055,15057],{"className":25,"code":15056,"language":27,"meta":20,"style":20},"#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",[29,15058,15059,15065,15069,15083,15087,15103,15107,15111,15125,15129,15147,15176,15180,15184,15192,15196,15219,15223,15243,15247,15255,15259,15277,15281,15289,15293,15297,15305,15309,15328,15332,15336,15344,15348,15367,15371,15375,15379,15391,15395,15399,15421,15425,15435,15439,15459,15463,15477,15481,15493,15497,15505,15509,15513,15522,15530,15538,15542,15547,15551,15561,15569],{"__ignoreMap":20},[32,15060,15061,15063],{"class":34,"line":35},[32,15062,39],{"class":38},[32,15064,43],{"class":42},[32,15066,15067],{"class":34,"line":46},[32,15068,50],{"emptyLinePlaceholder":49},[32,15070,15071,15073,15075,15077,15079,15081],{"class":34,"line":53},[32,15072,1194],{"class":38},[32,15074,1197],{"class":38},[32,15076,1200],{"class":59},[32,15078,73],{"class":63},[32,15080,1205],{"class":59},[32,15082,273],{"class":63},[32,15084,15085],{"class":34,"line":79},[32,15086,50],{"emptyLinePlaceholder":49},[32,15088,15089,15091,15093,15095,15097,15099,15101],{"class":34,"line":85},[32,15090,56],{"class":38},[32,15092,13280],{"class":59},[32,15094,64],{"class":63},[32,15096,67],{"class":38},[32,15098,70],{"class":59},[32,15100,73],{"class":63},[32,15102,76],{"class":59},[32,15104,15105],{"class":34,"line":91},[32,15106,82],{"class":63},[32,15108,15109],{"class":34,"line":112},[32,15110,88],{"class":38},[32,15112,15113,15115,15117,15119,15121,15123],{"class":34,"line":118},[32,15114,13303],{"class":59},[32,15116,97],{"class":63},[32,15118,100],{"class":59},[32,15120,103],{"class":63},[32,15122,13312],{"class":42},[32,15124,109],{"class":63},[32,15126,15127],{"class":34,"line":145},[32,15128,115],{"class":63},[32,15130,15131,15133,15135,15137,15139,15141,15143,15145],{"class":34,"line":151},[32,15132,121],{"class":59},[32,15134,103],{"class":63},[32,15136,127],{"class":126},[32,15138,130],{"class":63},[32,15140,133],{"class":59},[32,15142,136],{"class":63},[32,15144,13335],{"class":42},[32,15146,142],{"class":63},[32,15148,15149,15152,15154,15156,15158,15161,15163,15166,15168,15170,15172,15174],{"class":34,"line":157},[32,15150,15151],{"class":63},"      param_client_ ",[32,15153,1289],{"class":38},[32,15155,1200],{"class":59},[32,15157,73],{"class":63},[32,15159,15160],{"class":59},"make_sharedautolinkrclcpp",[32,15162,73],{"class":63},[32,15164,15165],{"class":59},"SyncParametersClientautolink",[32,15167,103],{"class":63},[32,15169,127],{"class":126},[32,15171,1318],{"class":63},[32,15173,13125],{"class":42},[32,15175,142],{"class":63},[32,15177,15178],{"class":34,"line":162},[32,15179,148],{"class":63},[32,15181,15182],{"class":34,"line":193},[32,15183,50],{"emptyLinePlaceholder":49},[32,15185,15186,15188,15190],{"class":34,"line":198},[32,15187,6783],{"class":38},[32,15189,6786],{"class":59},[32,15191,1389],{"class":63},[32,15193,15194],{"class":34,"line":212},[32,15195,115],{"class":63},[32,15197,15198,15200,15203,15205,15207,15209,15211,15213,15215,15217],{"class":34,"line":217},[32,15199,6797],{"class":38},[32,15201,15202],{"class":63},"(param_client_->",[32,15204,6803],{"class":59},[32,15206,103],{"class":63},[32,15208,1342],{"class":126},[32,15210,1345],{"class":38},[32,15212,6812],{"class":63},[32,15214,6076],{"class":38},[32,15216,6817],{"class":126},[32,15218,109],{"class":63},[32,15220,15221],{"class":34,"line":246},[32,15222,6824],{"class":63},[32,15224,15225,15227,15229,15231,15233,15235,15237,15239,15241],{"class":34,"line":251},[32,15226,6856],{"class":38},[32,15228,103],{"class":63},[32,15230,4225],{"class":59},[32,15232,73],{"class":63},[32,15234,6865],{"class":59},[32,15236,6868],{"class":63},[32,15238,6076],{"class":38},[32,15240,6817],{"class":126},[32,15242,109],{"class":63},[32,15244,15245],{"class":34,"line":264},[32,15246,6879],{"class":63},[32,15248,15249,15251,15253],{"class":34,"line":276},[32,15250,6908],{"class":38},[32,15252,6911],{"class":126},[32,15254,273],{"class":63},[32,15256,15257],{"class":34,"line":418},[32,15258,6918],{"class":63},[32,15260,15261,15263,15265,15267,15269,15271,15273,15275],{"class":34,"line":423},[32,15262,1798],{"class":59},[32,15264,103],{"class":63},[32,15266,127],{"class":126},[32,15268,130],{"class":63},[32,15270,133],{"class":59},[32,15272,136],{"class":63},[32,15274,6845],{"class":42},[32,15276,142],{"class":63},[32,15278,15279],{"class":34,"line":429},[32,15280,6923],{"class":63},[32,15282,15283,15285,15287],{"class":34,"line":435},[32,15284,6928],{"class":38},[32,15286,6817],{"class":126},[32,15288,273],{"class":63},[32,15290,15291],{"class":34,"line":441},[32,15292,148],{"class":63},[32,15294,15295],{"class":34,"line":447},[32,15296,50],{"emptyLinePlaceholder":49},[32,15298,15299,15301,15303],{"class":34,"line":453},[32,15300,1383],{"class":38},[32,15302,13653],{"class":59},[32,15304,1389],{"class":63},[32,15306,15307],{"class":34,"line":459},[32,15308,115],{"class":63},[32,15310,15311,15313,15315,15317,15319,15321,15323,15326],{"class":34,"line":1569},[32,15312,121],{"class":59},[32,15314,103],{"class":63},[32,15316,127],{"class":126},[32,15318,130],{"class":63},[32,15320,133],{"class":59},[32,15322,136],{"class":63},[32,15324,15325],{"class":42},"\"-----------参数查询操作-------------\"",[32,15327,142],{"class":63},[32,15329,15330],{"class":34,"line":1574},[32,15331,148],{"class":63},[32,15333,15334],{"class":34,"line":1585},[32,15335,50],{"emptyLinePlaceholder":49},[32,15337,15338,15340,15342],{"class":34,"line":1590},[32,15339,1383],{"class":38},[32,15341,13693],{"class":59},[32,15343,1389],{"class":63},[32,15345,15346],{"class":34,"line":1613},[32,15347,115],{"class":63},[32,15349,15350,15352,15354,15356,15358,15360,15362,15365],{"class":34,"line":1618},[32,15351,121],{"class":59},[32,15353,103],{"class":63},[32,15355,127],{"class":126},[32,15357,130],{"class":63},[32,15359,133],{"class":59},[32,15361,136],{"class":63},[32,15363,15364],{"class":42},"\"-----------参数更新操作-------------\"",[32,15366,142],{"class":63},[32,15368,15369],{"class":34,"line":1629},[32,15370,148],{"class":63},[32,15372,15373],{"class":34,"line":1638},[32,15374,50],{"emptyLinePlaceholder":49},[32,15376,15377],{"class":34,"line":3929},[32,15378,1378],{"class":38},[32,15380,15381,15383,15385,15388],{"class":34,"line":3940},[32,15382,1497],{"class":59},[32,15384,73],{"class":63},[32,15386,15387],{"class":59},"SyncParametersClient",[32,15389,15390],{"class":63},"::SharedPtr param_client_;\n",[32,15392,15393],{"class":34,"line":3949},[32,15394,154],{"class":63},[32,15396,15397],{"class":34,"line":7035},[32,15398,50],{"emptyLinePlaceholder":49},[32,15400,15401,15403,15405,15407,15409,15411,15413,15415,15417,15419],{"class":34,"line":7044},[32,15402,165],{"class":38},[32,15404,168],{"class":59},[32,15406,103],{"class":63},[32,15408,165],{"class":38},[32,15410,176],{"class":175},[32,15412,179],{"class":63},[32,15414,182],{"class":38},[32,15416,185],{"class":38},[32,15418,188],{"class":175},[32,15420,109],{"class":63},[32,15422,15423],{"class":34,"line":7049},[32,15424,82],{"class":63},[32,15426,15427,15429,15431,15433],{"class":34,"line":7060},[32,15428,201],{"class":59},[32,15430,73],{"class":63},[32,15432,206],{"class":59},[32,15434,209],{"class":63},[32,15436,15437],{"class":34,"line":7065},[32,15438,50],{"emptyLinePlaceholder":49},[32,15440,15441,15443,15445,15447,15449,15451,15453,15455,15457],{"class":34,"line":7086},[32,15442,4983],{"class":38},[32,15444,4986],{"class":63},[32,15446,1289],{"class":38},[32,15448,1200],{"class":59},[32,15450,73],{"class":63},[32,15452,234],{"class":59},[32,15454,237],{"class":63},[32,15456,13408],{"class":59},[32,15458,5002],{"class":63},[32,15460,15461],{"class":34,"line":7091},[32,15462,50],{"emptyLinePlaceholder":49},[32,15464,15465,15467,15469,15471,15473,15475],{"class":34,"line":7110},[32,15466,7094],{"class":38},[32,15468,7097],{"class":63},[32,15470,1289],{"class":38},[32,15472,7102],{"class":63},[32,15474,7105],{"class":59},[32,15476,261],{"class":63},[32,15478,15479],{"class":34,"line":7115},[32,15480,50],{"emptyLinePlaceholder":49},[32,15482,15483,15485,15487,15490],{"class":34,"line":7129},[32,15484,6070],{"class":38},[32,15486,103],{"class":63},[32,15488,15489],{"class":38},"!",[32,15491,15492],{"class":63},"flag)\n",[32,15494,15495],{"class":34,"line":7134},[32,15496,6086],{"class":63},[32,15498,15499,15501,15503],{"class":34,"line":7158},[32,15500,1909],{"class":38},[32,15502,270],{"class":126},[32,15504,273],{"class":63},[32,15506,15507],{"class":34,"line":7167},[32,15508,456],{"class":63},[32,15510,15511],{"class":34,"line":7172},[32,15512,50],{"emptyLinePlaceholder":49},[32,15514,15515,15518,15520],{"class":34,"line":7177},[32,15516,15517],{"class":63},"  client->",[32,15519,13854],{"class":59},[32,15521,261],{"class":63},[32,15523,15524,15526,15528],{"class":34,"line":7188},[32,15525,15517],{"class":63},[32,15527,13863],{"class":59},[32,15529,261],{"class":63},[32,15531,15532,15534,15536],{"class":34,"line":7197},[32,15533,15517],{"class":63},[32,15535,13854],{"class":59},[32,15537,261],{"class":63},[32,15539,15540],{"class":34,"line":7863},[32,15541,50],{"emptyLinePlaceholder":49},[32,15543,15544],{"class":34,"line":7868},[32,15545,15546],{"class":4977},"  // rclcpp::spin(client);\n",[32,15548,15549],{"class":34,"line":7883},[32,15550,50],{"emptyLinePlaceholder":49},[32,15552,15553,15555,15557,15559],{"class":34,"line":7888},[32,15554,201],{"class":59},[32,15556,73],{"class":63},[32,15558,258],{"class":59},[32,15560,261],{"class":63},[32,15562,15563,15565,15567],{"class":34,"line":7901},[32,15564,267],{"class":38},[32,15566,270],{"class":126},[32,15568,273],{"class":63},[32,15570,15571],{"class":34,"line":7906},[32,15572,279],{"class":63},[473,15574],{},[15,15576,15577],{},[18,15578],{"alt":20,"src":15579},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image829.webp",[15,15581,15582],{},[18,15583],{"alt":20,"src":15584},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image830.webp",[15,15586,15587],{},[18,15588],{"alt":20,"src":15589},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image831.webp",[15,15591,15592],{},"These topics are all under this node name.",[473,15594],{},[15,15596,15597],{},[18,15598],{"alt":20,"src":15599},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image832.webp",[15,15601,15602],{},[18,15603],{"alt":20,"src":15604},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image833.webp",[15,15606,15607],{},[18,15608],{"alt":20,"src":15609},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image834.webp",[15,15611,15612],{},[18,15613],{"alt":20,"src":15614},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image835.webp",[15,15616,15617],{},"Use advanced for",[15,15619,15620],{},[18,15621],{"alt":20,"src":15622},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image836.webp",[15,15624,15625],{},[18,15626],{"alt":20,"src":15627},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image837.webp",[15,15629,15630],{},[18,15631],{"alt":20,"src":15632},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image838.webp",[15,15634,15635],{},[18,15636],{"alt":20,"src":15637},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image839.webp",[15,15639,15640],{},[18,15641],{"alt":20,"src":15642},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image840.webp",[15,15644,15645],{},[18,15646],{"alt":20,"src":15647},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image841.webp",[15,15649,15650],{},"Entry parameter: the container for the parameter object.",[15,15652,15653],{},[18,15654],{"alt":20,"src":15655},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image842.webp",[15,15657,15658],{},[18,15659],{"alt":20,"src":15660},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image843.webp",[15,15662,15663,15664,15666],{},"We can not only modify values, but also create new parameters, provided that the server has called ",[29,15665,13022],{},"...",[15,15668,15669],{},[18,15670],{"alt":20,"src":15671},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image844.webp",[15,15673,15674],{},[18,15675],{"alt":20,"src":15676},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image845.webp",[15678,15679,15680],"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":20,"searchDepth":46,"depth":46,"links":15682},[15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,15695,15696,15697],{"id":12,"depth":53,"text":13},{"id":617,"depth":53,"text":618},{"id":672,"depth":53,"text":673},{"id":2366,"depth":53,"text":2367},{"id":2882,"depth":53,"text":2883},{"id":4345,"depth":53,"text":4346},{"id":4404,"depth":53,"text":4405},{"id":4431,"depth":53,"text":4432},{"id":5617,"depth":53,"text":5618},{"id":8115,"depth":53,"text":8116},{"id":8296,"depth":53,"text":8297},{"id":11018,"depth":53,"text":11019},{"id":12893,"depth":53,"text":12894},{"id":13002,"depth":53,"text":13003},{"id":14978,"depth":53,"text":14979},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","4",4000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch4-四大通信",false,null,"en-US","en-us",{},{"title":5,"description":20},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","E5HSmL55xN5XBdOPux95upkTW7_GiygN_B1urKZOTM4",[15718,15723,15728,15734,15740,15746,15752,15758,15764,15770,15776,15782,15788,15794,15800,15806,15812,15818,15823,15829,15834,15840,15846,15852,15858,15864,15870,15876,15882,15888,15894,15900,15906,15912,15918,15924,15930,15936,15942,15948,15954,15960,15966,15972,15978,15984,15990,15996,16002,16008,16014,16019,16025,16031,16032,16037,16043,16049,16055,16061],{"path":15719,"stem":15720,"title":15721,"date":15701,"chapter":1342,"chapterSort":15722,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2",1000000,{"path":15724,"stem":15725,"title":15726,"date":15701,"chapter":1321,"chapterSort":15727,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform",10000000,{"path":15729,"stem":15730,"title":15731,"date":15701,"chapter":15732,"chapterSort":15733,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":15735,"stem":15736,"title":15737,"date":15701,"chapter":15738,"chapterSort":15739,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":15741,"stem":15742,"title":15743,"date":15701,"chapter":15744,"chapterSort":15745,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":15747,"stem":15748,"title":15749,"date":15701,"chapter":15750,"chapterSort":15751,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":15753,"stem":15754,"title":15755,"date":15701,"chapter":15756,"chapterSort":15757,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform","11",11000000,{"path":15759,"stem":15760,"title":15761,"date":15701,"chapter":15762,"chapterSort":15763,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":15765,"stem":15766,"title":15767,"date":15701,"chapter":15768,"chapterSort":15769,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":15771,"stem":15772,"title":15773,"date":15701,"chapter":15774,"chapterSort":15775,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":15777,"stem":15778,"title":15779,"date":15701,"chapter":15780,"chapterSort":15781,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","12",12000000,{"path":15783,"stem":15784,"title":15785,"date":15701,"chapter":15786,"chapterSort":15787,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":15789,"stem":15790,"title":15791,"date":15701,"chapter":15792,"chapterSort":15793,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":15795,"stem":15796,"title":15797,"date":15701,"chapter":15798,"chapterSort":15799,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":15801,"stem":15802,"title":15803,"date":15701,"chapter":15804,"chapterSort":15805,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":15807,"stem":15808,"title":15809,"date":15701,"chapter":15810,"chapterSort":15811,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":15813,"stem":15814,"title":15815,"date":15701,"chapter":15816,"chapterSort":15817,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":15819,"stem":15820,"title":15785,"date":15701,"chapter":15821,"chapterSort":15822,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":15824,"stem":15825,"title":15826,"date":15701,"chapter":15827,"chapterSort":15828,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":15830,"stem":15831,"title":15785,"date":15701,"chapter":15832,"chapterSort":15833,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":15835,"stem":15836,"title":15837,"date":15701,"chapter":15838,"chapterSort":15839,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":15841,"stem":15842,"title":15843,"date":15701,"chapter":15844,"chapterSort":15845,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication","13",13000000,{"path":15847,"stem":15848,"title":15849,"date":15701,"chapter":15850,"chapterSort":15851,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":15853,"stem":15854,"title":15855,"date":15701,"chapter":15856,"chapterSort":15857,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":15859,"stem":15860,"title":15861,"date":15701,"chapter":15862,"chapterSort":15863,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":15865,"stem":15866,"title":15867,"date":15701,"chapter":15868,"chapterSort":15869,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":15871,"stem":15872,"title":15873,"date":15701,"chapter":15874,"chapterSort":15875,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":15877,"stem":15878,"title":15879,"date":15701,"chapter":15880,"chapterSort":15881,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":15883,"stem":15884,"title":15885,"date":15701,"chapter":15886,"chapterSort":15887,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":15889,"stem":15890,"title":15891,"date":15701,"chapter":15892,"chapterSort":15893,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":15895,"stem":15896,"title":15897,"date":15701,"chapter":15898,"chapterSort":15899,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":15901,"stem":15902,"title":15903,"date":15701,"chapter":15904,"chapterSort":15905,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":15907,"stem":15908,"title":15909,"date":15701,"chapter":15910,"chapterSort":15911,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","Camera","14.6.4",14060400,{"path":15913,"stem":15914,"title":15915,"date":15701,"chapter":15916,"chapterSort":15917,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":15919,"stem":15920,"title":15921,"date":15701,"chapter":15922,"chapterSort":15923,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":15925,"stem":15926,"title":15927,"date":15701,"chapter":15928,"chapterSort":15929,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":15931,"stem":15932,"title":15933,"date":15701,"chapter":15934,"chapterSort":15935,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":15937,"stem":15938,"title":15939,"date":15701,"chapter":15940,"chapterSort":15941,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":15943,"stem":15944,"title":15945,"date":15701,"chapter":15946,"chapterSort":15947,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":15949,"stem":15950,"title":15951,"date":15701,"chapter":15952,"chapterSort":15953,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":15955,"stem":15956,"title":15957,"date":15701,"chapter":15958,"chapterSort":15959,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":15961,"stem":15962,"title":15963,"date":15701,"chapter":15964,"chapterSort":15965,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":15967,"stem":15968,"title":15969,"date":15701,"chapter":15970,"chapterSort":15971,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":15973,"stem":15974,"title":15975,"date":15701,"chapter":15976,"chapterSort":15977,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":15979,"stem":15980,"title":15981,"date":15701,"chapter":15982,"chapterSort":15983,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware","14",14000000,{"path":15985,"stem":15986,"title":15987,"date":15701,"chapter":15988,"chapterSort":15989,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":15991,"stem":15992,"title":15993,"date":15701,"chapter":15994,"chapterSort":15995,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","16",16000000,{"path":15997,"stem":15998,"title":15999,"date":15701,"chapter":16000,"chapterSort":16001,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","17",17000000,{"path":16003,"stem":16004,"title":16005,"date":15701,"chapter":16006,"chapterSort":16007,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":16009,"stem":16010,"title":16011,"date":15701,"chapter":16012,"chapterSort":16013,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform","19",19000000,{"path":16015,"stem":16016,"title":16017,"date":15701,"chapter":5314,"chapterSort":16018,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","Getting Started",2000000,{"path":16020,"stem":16021,"title":16022,"date":15701,"chapter":16023,"chapterSort":16024,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":16026,"stem":16027,"title":16028,"date":15701,"chapter":16029,"chapterSort":16030,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages","3",3000000,{"path":15698,"stem":15715,"title":5,"date":15701,"chapter":15699,"chapterSort":15700,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},{"path":16033,"stem":16034,"title":16035,"date":15701,"chapter":14277,"chapterSort":16036,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms",5000000,{"path":16038,"stem":16039,"title":16040,"date":15701,"chapter":16041,"chapterSort":16042,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":16044,"stem":16045,"title":16046,"date":15701,"chapter":16047,"chapterSort":16048,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","Replaying rosbag2","7",7000000,{"path":16050,"stem":16051,"title":16052,"date":15701,"chapter":16053,"chapterSort":16054,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF","8",8000000,{"path":16056,"stem":16057,"title":16058,"date":15701,"chapter":16059,"chapterSort":16060,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":15708},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","9",9000000,{"path":15704,"stem":16062,"title":16063,"date":15701,"chapter":15709,"chapterSort":16064,"docKey":15703,"docRoot":15704,"docTitle":15705,"isWikiDoc":49,"isWikiIndex":49},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":16066},[16067,16068,16071,16074,16077],{"path":15698,"localeSlug":15711,"i18nKey":15707},{"path":16069,"localeSlug":16070,"i18nKey":15707},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","zh-hant",{"path":16072,"localeSlug":16073,"i18nKey":15707},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","zh-hk",{"path":16075,"localeSlug":16076,"i18nKey":15707},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","zh-tw",{"path":16078,"localeSlug":16079,"i18nKey":15707},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","zh-cn",[15698,15714,16069,15714,16072,15714,16075,15714,16078,15714],1780671798271]