[{"data":1,"prerenderedAt":15824},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin":3,"wiki-doc-items-2023-12-30-ros2-tutorial":15404,"wiki:author-members":15812},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":15391,"chapterOrder":15392,"date":15393,"description":21,"docKey":15394,"docRoot":15395,"docTitle":15396,"extension":15397,"isWikiDoc":50,"isWikiIndex":15398,"meta":15399,"navigation":50,"path":15400,"seo":15401,"stem":15402,"wikiDepth":36,"__hash__":15403},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信.md","四大通信",[7],"董佳辉",{"type":9,"value":10,"toc":15374},"minimark",[11,15,23,281,286,291,299,304,309,314,551,556,561,564,569,574,579,582,587,592,595,600,605,610,613,618,623,626,629,632,640,645,650,655,660,665,670,675,678,681,683,688,691,696,699,704,707,712,717,722,727,730,735,740,743,748,753,758,762,767,772,777,782,787,792,814,817,820,825,827,832,837,839,842,847,850,855,858,863,866,869,871,876,881,886,891,896,901,1081,1084,1087,1090,1095,1098,1101,1104,1107,1110,1115,1120,1125,1130,1133,1136,1139,1142,1145,1150,1153,1156,1161,1166,1169,1174,1179,1184,1187,1192,1195,1200,1205,1210,1213,1218,1221,1226,1231,1236,1239,1714,1719,1722,1725,1746,1751,1754,1756,1761,1766,1771,1776,1781,1786,1791,1796,1801,1806,1991,1996,1999,2004,2007,2012,2015,2020,2025,2030,2035,2040,2043,2046,2049,2052,2055,2060,2065,2068,2073,2078,2083,2088,2430,2433,2438,2443,2448,2453,2456,2459,2462,2467,2470,2473,2478,2483,2488,2491,2496,2501,2506,2509,2514,2517,2520,2547,2552,2557,2560,2565,2570,2575,2580,2583,2588,2593,2596,2599,2602,2607,2612,2631,2636,2641,2644,2649,2652,2657,2660,2665,2668,2671,2676,2680,2685,2690,2695,2698,2703,2708,2713,2718,2721,2726,2729,2734,2913,2916,2921,2924,2929,3108,3113,3297,3302,3307,3312,3317,3319,3324,3329,3334,3339,3342,3347,3815,3820,3825,3830,3833,3838,3841,3843,3848,3853,4196,4201,4206,4209,4214,4219,4224,4229,4231,4236,4239,4244,4249,4254,4259,4264,4267,4272,4277,4282,4285,4290,4294,4299,4304,4307,4312,4317,4322,4327,4363,4365,4370,4375,4380,4383,4388,4393,4398,4403,4408,4411,4416,4421,4426,4431,4436,4441,4446,4451,4456,4461,4466,4469,4471,4476,4481,4661,4666,4671,4674,4679,4682,4687,4690,4695,4882,4885,4890,4893,4898,4903,4908,4913,4918,4920,4925,4930,4935,4940,4945,4948,4951,4954,4957,4962,4967,4972,4977,4982,4987,4992,4997,5408,5413,5418,5421,5426,5450,5453,5463,5467,5472,5477,5482,5487,5490,5493,5498,5503,5508,5513,5518,5523,5528,5533,5536,5541,5544,5549,5554,5559,5564,5569,5574,5750,5755,5758,5763,5766,5769,5774,5777,6009,6014,6019,6024,6027,6032,6037,6040,6045,6269,6271,6276,6279,6282,6285,6288,6293,6298,6303,6308,6313,6318,6323,6328,6333,6338,6343,6346,6351,6356,6359,6364,6369,6372,6377,6380,6383,6388,6391,6396,6401,6404,6407,6410,6413,6416,6419,6422,6425,6428,6431,6436,6439,7007,7012,7014,7019,7024,7029,7032,7035,7040,7045,7050,7053,7058,7061,7066,7069,7072,7075,7080,7083,7086,7089,7094,7099,7104,7109,7114,7915,7918,7923,7926,7931,7934,7937,7942,7945,7948,7951,7954,7957,7960,7965,7967,7972,7977,7982,7987,7992,7995,7997,8002,8007,8010,8013,8016,8021,8026,8031,8036,8039,8044,8049,8054,8059,8064,8069,8074,8079,8082,8086,8091,8271,8276,8455,8460,8465,8470,8475,8477,8482,8487,8492,8495,8498,8501,8504,8507,8510,8513,8516,8521,8526,8531,8536,8541,8546,8549,8552,8555,8558,8561,8564,8567,8572,8577,8582,8587,8592,8595,8600,8605,9223,9228,9233,9238,9243,9270,9273,9276,9281,9284,9287,9290,9293,9295,9300,9303,9308,9313,9318,9323,9328,9330,9333,9338,9343,9345,9348,9353,9358,9363,9368,9373,9376,9381,9384,9389,9394,9397,9402,9405,9410,9413,9418,9421,9426,9429,9434,9439,9444,9449,9454,9459,9464,9469,9474,9479,9481,9484,9489,9492,9495,9500,9503,9508,9511,9516,9521,9526,9529,9534,9539,9544,10756,10760,10765,10768,10773,11001,11006,11011,11016,11021,11024,11027,11030,11033,11038,11043,11048,11053,11056,11061,11064,11069,11071,11076,11079,11084,11087,11090,11093,11098,11103,11108,11113,11116,11121,11126,11131,11134,11137,11142,11147,11152,11157,11162,11165,11168,11171,11176,11181,11186,11191,11196,11198,11203,11206,11209,11212,11217,11222,11227,11232,11234,11237,11242,11245,11250,11255,11260,11263,11266,11269,11274,11279,11282,11284,11287,11290,11293,11298,11301,11304,11307,11310,11315,11320,11325,12460,12465,12470,12473,12475,12478,12481,12604,12608,12613,12618,12621,12623,12628,12633,12636,12641,12646,12651,12654,12659,12664,12669,12672,12677,12682,12687,12692,12697,12702,12707,12710,12713,12717,12722,12727,12730,12735,12740,12745,12750,12755,12758,12763,12768,12773,12778,13157,13162,13167,13172,13177,13179,13184,13189,13194,13197,13200,13205,13210,13622,13624,13629,13634,13639,13642,13645,13650,13653,13655,13660,13663,13668,13671,13676,13679,13684,13689,13694,13699,13704,13709,13711,13716,13719,13724,13727,13732,13737,13740,13745,13750,13755,13757,13762,13767,13770,13775,13780,14672,14676,14681,14686,14691,14696,14701,14706,14711,14716,14721,14726,14729,14732,14737,14740,14745,14750,15269,15271,15276,15281,15286,15289,15291,15296,15301,15306,15311,15314,15319,15324,15329,15334,15339,15344,15347,15352,15357,15360,15365,15370],[12,13,14],"h3",{"id":14},"通信机制简介与代码模板",[16,17,18],"p",{},[19,20],"img",{"alt":21,"src":22},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage332.webp",[24,25,29],"pre",{"className":26,"code":27,"language":28,"meta":21,"style":21},"language-cpp shiki shiki-themes github-light github-dark","#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass MyNode: public rclcpp::Node\n{\n  public:\n    MyNode():Node(\"mynode_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"Hello World!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CMyNode>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n","cpp",[30,31,32,45,52,78,84,90,111,117,144,150,156,161,192,197,211,216,245,250,263,275],"code",{"__ignoreMap":21},[33,34,37,41],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"szBVR","#include",[33,42,44],{"class":43},"sZZnC"," \"rclcpp\u002Frclcpp.hpp\"\n",[33,46,48],{"class":35,"line":47},2,[33,49,51],{"emptyLinePlaceholder":50},true,"\n",[33,53,55,58,62,66,69,72,75],{"class":35,"line":54},3,[33,56,57],{"class":39},"class",[33,59,61],{"class":60},"sScJk"," MyNode",[33,63,65],{"class":64},"sVt8B",": ",[33,67,68],{"class":39},"public",[33,70,71],{"class":60}," rclcpp",[33,73,74],{"class":64},"::",[33,76,77],{"class":60},"Node\n",[33,79,81],{"class":35,"line":80},4,[33,82,83],{"class":64},"{\n",[33,85,87],{"class":35,"line":86},5,[33,88,89],{"class":39},"  public:\n",[33,91,93,96,99,102,105,108],{"class":35,"line":92},6,[33,94,95],{"class":60},"    MyNode",[33,97,98],{"class":64},"():",[33,100,101],{"class":60},"Node",[33,103,104],{"class":64},"(",[33,106,107],{"class":43},"\"mynode_node_cpp\"",[33,109,110],{"class":64},")\n",[33,112,114],{"class":35,"line":113},7,[33,115,116],{"class":64},"    {\n",[33,118,120,123,125,129,132,135,138,141],{"class":35,"line":119},8,[33,121,122],{"class":60},"      RCLCPP_INFO",[33,124,104],{"class":64},[33,126,128],{"class":127},"sj4cs","this",[33,130,131],{"class":64},"->",[33,133,134],{"class":60},"get_logger",[33,136,137],{"class":64},"(),",[33,139,140],{"class":43},"\"Hello World!\"",[33,142,143],{"class":64},");\n",[33,145,147],{"class":35,"line":146},9,[33,148,149],{"class":64},"    }\n",[33,151,153],{"class":35,"line":152},10,[33,154,155],{"class":64},"};\n",[33,157,159],{"class":35,"line":158},11,[33,160,51],{"emptyLinePlaceholder":50},[33,162,164,167,170,172,174,178,181,184,187,190],{"class":35,"line":163},12,[33,165,166],{"class":39},"int",[33,168,169],{"class":60}," main",[33,171,104],{"class":64},[33,173,166],{"class":39},[33,175,177],{"class":176},"s4XuR"," argc",[33,179,180],{"class":64},", ",[33,182,183],{"class":39},"char",[33,185,186],{"class":39}," **",[33,188,189],{"class":176}," argv",[33,191,110],{"class":64},[33,193,195],{"class":35,"line":194},13,[33,196,83],{"class":64},[33,198,200,203,205,208],{"class":35,"line":199},14,[33,201,202],{"class":60},"  rclcpp",[33,204,74],{"class":64},[33,206,207],{"class":60},"init",[33,209,210],{"class":64},"(argc,argv);\n",[33,212,214],{"class":35,"line":213},15,[33,215,51],{"emptyLinePlaceholder":50},[33,217,219,221,223,226,228,231,233,236,239,242],{"class":35,"line":218},16,[33,220,202],{"class":60},[33,222,74],{"class":64},[33,224,225],{"class":60},"spin",[33,227,104],{"class":64},[33,229,230],{"class":60},"std",[33,232,74],{"class":64},[33,234,235],{"class":60},"make_shared",[33,237,238],{"class":64},"\u003C",[33,240,241],{"class":60},"MyNode",[33,243,244],{"class":64},">());\n",[33,246,248],{"class":35,"line":247},17,[33,249,51],{"emptyLinePlaceholder":50},[33,251,253,255,257,260],{"class":35,"line":252},18,[33,254,202],{"class":60},[33,256,74],{"class":64},[33,258,259],{"class":60},"shutdown",[33,261,262],{"class":64},"();\n",[33,264,266,269,272],{"class":35,"line":265},19,[33,267,268],{"class":39},"  return",[33,270,271],{"class":127}," 0",[33,273,274],{"class":64},";\n",[33,276,278],{"class":35,"line":277},20,[33,279,280],{"class":64},"}\n",[16,282,283],{},[19,284],{"alt":21,"src":285},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage333.webp",[16,287,288],{},[19,289],{"alt":21,"src":290},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage334.webp",[16,292,293],{},[294,295,296],"a",{"href":296,"rel":297},"https:\u002F\u002Fsnippet-generator.app\u002F",[298],"nofollow",[16,300,301],{},[19,302],{"alt":21,"src":303},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage335.webp",[16,305,306],{},[19,307],{"alt":21,"src":308},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage336.webp",[16,310,311],{},[19,312],{"alt":21,"src":313},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage337.webp",[24,315,319],{"className":316,"code":317,"language":318,"meta":21,"style":21},"language-JSON shiki shiki-themes github-light github-dark","{\n\"ROS2节点模板(C++)\": {\n    \"prefix\": \"ros2_node_cpp\",\n    \"body\": [\n      \"#include \\\"rclcpp\u002Frclcpp.hpp\\\"\",\n      \"\",\n      \"class MyNode: public rclcpp::Node\",\n      \"{\",\n      \"  public:\",\n      \"    MyNode():Node(\\\"mynode_node_cpp\\\")\",\n      \"    {\",\n      \"      RCLCPP_INFO(this->get_logger(),\\\"Hello World!\\\");\",\n      \"    }\",\n      \"};\",\n      \"\",\n      \"int main(int argc, char ** argv)\",\n      \"{\",\n      \"  rclcpp::init(argc,argv);\",\n      \"\",\n      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\",\n      \"\",\n      \"  rclcpp::shutdown();\",\n      \"  return 0;\",\n      \"}\"\n    ],\n    \"description\": \"ROS2节点模板(C++)\"\n  }\n}\n","JSON",[30,320,321,325,333,346,354,372,379,386,393,400,417,424,441,448,455,461,468,474,481,487,494,501,509,517,523,529,540,546],{"__ignoreMap":21},[33,322,323],{"class":35,"line":36},[33,324,83],{"class":64},[33,326,327,330],{"class":35,"line":47},[33,328,329],{"class":127},"\"ROS2节点模板(C++)\"",[33,331,332],{"class":64},": {\n",[33,334,335,338,340,343],{"class":35,"line":54},[33,336,337],{"class":127},"    \"prefix\"",[33,339,65],{"class":64},[33,341,342],{"class":43},"\"ros2_node_cpp\"",[33,344,345],{"class":64},",\n",[33,347,348,351],{"class":35,"line":80},[33,349,350],{"class":127},"    \"body\"",[33,352,353],{"class":64},": [\n",[33,355,356,359,362,365,367,370],{"class":35,"line":86},[33,357,358],{"class":43},"      \"#include ",[33,360,361],{"class":127},"\\\"",[33,363,364],{"class":43},"rclcpp\u002Frclcpp.hpp",[33,366,361],{"class":127},[33,368,369],{"class":43},"\"",[33,371,345],{"class":64},[33,373,374,377],{"class":35,"line":92},[33,375,376],{"class":43},"      \"\"",[33,378,345],{"class":64},[33,380,381,384],{"class":35,"line":113},[33,382,383],{"class":43},"      \"class MyNode: public rclcpp::Node\"",[33,385,345],{"class":64},[33,387,388,391],{"class":35,"line":119},[33,389,390],{"class":43},"      \"{\"",[33,392,345],{"class":64},[33,394,395,398],{"class":35,"line":146},[33,396,397],{"class":43},"      \"  public:\"",[33,399,345],{"class":64},[33,401,402,405,407,410,412,415],{"class":35,"line":152},[33,403,404],{"class":43},"      \"    MyNode():Node(",[33,406,361],{"class":127},[33,408,409],{"class":43},"mynode_node_cpp",[33,411,361],{"class":127},[33,413,414],{"class":43},")\"",[33,416,345],{"class":64},[33,418,419,422],{"class":35,"line":158},[33,420,421],{"class":43},"      \"    {\"",[33,423,345],{"class":64},[33,425,426,429,431,434,436,439],{"class":35,"line":163},[33,427,428],{"class":43},"      \"      RCLCPP_INFO(this->get_logger(),",[33,430,361],{"class":127},[33,432,433],{"class":43},"Hello World!",[33,435,361],{"class":127},[33,437,438],{"class":43},");\"",[33,440,345],{"class":64},[33,442,443,446],{"class":35,"line":194},[33,444,445],{"class":43},"      \"    }\"",[33,447,345],{"class":64},[33,449,450,453],{"class":35,"line":199},[33,451,452],{"class":43},"      \"};\"",[33,454,345],{"class":64},[33,456,457,459],{"class":35,"line":213},[33,458,376],{"class":43},[33,460,345],{"class":64},[33,462,463,466],{"class":35,"line":218},[33,464,465],{"class":43},"      \"int main(int argc, char ** argv)\"",[33,467,345],{"class":64},[33,469,470,472],{"class":35,"line":247},[33,471,390],{"class":43},[33,473,345],{"class":64},[33,475,476,479],{"class":35,"line":252},[33,477,478],{"class":43},"      \"  rclcpp::init(argc,argv);\"",[33,480,345],{"class":64},[33,482,483,485],{"class":35,"line":265},[33,484,376],{"class":43},[33,486,345],{"class":64},[33,488,489,492],{"class":35,"line":277},[33,490,491],{"class":43},"      \"  rclcpp::spin(std::make_shared\u003CMyNode>());\"",[33,493,345],{"class":64},[33,495,497,499],{"class":35,"line":496},21,[33,498,376],{"class":43},[33,500,345],{"class":64},[33,502,504,507],{"class":35,"line":503},22,[33,505,506],{"class":43},"      \"  rclcpp::shutdown();\"",[33,508,345],{"class":64},[33,510,512,515],{"class":35,"line":511},23,[33,513,514],{"class":43},"      \"  return 0;\"",[33,516,345],{"class":64},[33,518,520],{"class":35,"line":519},24,[33,521,522],{"class":43},"      \"}\"\n",[33,524,526],{"class":35,"line":525},25,[33,527,528],{"class":64},"    ],\n",[33,530,532,535,537],{"class":35,"line":531},26,[33,533,534],{"class":127},"    \"description\"",[33,536,65],{"class":64},[33,538,539],{"class":43},"\"ROS2节点模板(C++)\"\n",[33,541,543],{"class":35,"line":542},27,[33,544,545],{"class":64},"  }\n",[33,547,549],{"class":35,"line":548},28,[33,550,280],{"class":64},[16,552,553],{},[19,554],{"alt":21,"src":555},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage338.webp",[16,557,558],{},[19,559],{"alt":21,"src":560},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage339.webp",[562,563],"hr",{},[16,565,566],{},[19,567],{"alt":21,"src":568},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage340.webp",[16,570,571],{},[19,572],{"alt":21,"src":573},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage341.webp",[16,575,576],{},[19,577],{"alt":21,"src":578},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage342.webp",[16,580,581],{},"第一个窗口是服务端，第二个窗口是客户端。",[16,583,584],{},[19,585],{"alt":21,"src":586},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage343.webp",[16,588,589],{},[19,590],{"alt":21,"src":591},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage344.webp",[16,593,594],{},"通信至少要涉及两方，只是一个人算不上通信。",[16,596,597],{},[19,598],{"alt":21,"src":599},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage345.webp",[16,601,602],{},[19,603],{"alt":21,"src":604},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage346.webp",[16,606,607],{},[19,608],{"alt":21,"src":609},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage347.webp",[16,611,612],{},"面向接口，话题是一致的，数据载体也是一致的，就可以无缝对接",[16,614,615],{},[19,616],{"alt":21,"src":617},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage348.webp",[16,619,620],{},[19,621],{"alt":21,"src":622},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage349.webp",[16,624,625],{},"话题通信：只能单向传输数据",[16,627,628],{},"服务通信：双向通信，可以互为客户端和服务端，客户端给服务端发数据，服务端给客户端响应",[16,630,631],{},"动作通信：和服务通信很像，有服务端给客户端发的最终响应，但是中间也会连续发送反馈给客户端。",[16,633,634,635,639],{},"参数服务：参数服务是基于",[636,637,638],"strong",{},"服务通信","的，参数客户先发送一个请求，然后从参数服务的数据池里拿走数据。也可以更改数据池里的东西，但是不能删除。",[16,641,642],{},[19,643],{"alt":21,"src":644},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage350.webp",[16,646,647],{},[19,648],{"alt":21,"src":649},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage351.webp",[16,651,652],{},[19,653],{"alt":21,"src":654},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage352.webp",[16,656,657],{},[19,658],{"alt":21,"src":659},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage353.webp",[16,661,662],{},[19,663],{"alt":21,"src":664},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage354.webp",[16,666,667],{},[19,668],{"alt":21,"src":669},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage355.webp",[16,671,672],{},[19,673],{"alt":21,"src":674},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage356.webp",[16,676,677],{},"参数通信不用自己定义接口文件，系统会自己弄接口文件，但是开发者是看不到该文件的，该文件被封装了。",[16,679,680],{},"我们操作的数据被封装成参数对象了。",[562,682],{},[16,684,685],{},[19,686],{"alt":21,"src":687},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage357.webp",[16,689,690],{},"ros2 pkg create + 功能包名（可以写在前面或者） + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[16,692,693],{},[19,694],{"alt":21,"src":695},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage358.webp",[16,697,698],{},"在src里创建功能包",[16,700,701],{},[19,702],{"alt":21,"src":703},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage359.webp",[12,705,706],{"id":706},"话题通信_理论",[16,708,709],{},[19,710],{"alt":21,"src":711},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage360.webp",[16,713,714],{},[19,715],{"alt":21,"src":716},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage361.webp",[16,718,719],{},[19,720],{"alt":21,"src":721},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage362.webp",[16,723,724],{},[19,725],{"alt":21,"src":726},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage363.webp",[16,728,729],{},"在ROS1里，node和node之间通信需要经过master，每个传输数据的node都需要在master里注册相关数据，master再将信息进行匹配。",[16,731,732],{},[19,733],{"alt":21,"src":734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage364.webp",[16,736,737],{},[19,738],{"alt":21,"src":739},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage365.webp",[16,741,742],{},"一个publisher发布数据，两个subscriber都会接收到数据。",[16,744,745],{},[19,746],{"alt":21,"src":747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage366.webp",[16,749,750],{},[19,751],{"alt":21,"src":752},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage367.webp",[16,754,755],{},[19,756],{"alt":21,"src":757},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage368.webp",[12,759,761],{"id":760},"话题通信_实验1c","话题通信_实验1(C++)",[16,763,764],{},[19,765],{"alt":21,"src":766},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage369.webp",[16,768,769],{},[19,770],{"alt":21,"src":771},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage370.webp",[16,773,774],{},[19,775],{"alt":21,"src":776},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage371.webp",[16,778,779],{},[19,780],{"alt":21,"src":781},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage372.webp",[16,783,784],{},[19,785],{"alt":21,"src":786},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage373.webp",[16,788,789],{},[19,790],{"alt":21,"src":791},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage374.webp",[24,793,795],{"className":316,"code":794,"language":318,"meta":21,"style":21},"ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[30,796,797],{"__ignoreMap":21},[33,798,799,802,805,808,811],{"class":35,"line":36},[33,800,801],{"class":64},"ros",[33,803,804],{"class":127},"2",[33,806,807],{"class":64}," pkg create cpp",[33,809,810],{"class":127},"01",[33,812,813],{"class":64},"_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo\n",[16,815,816],{},"依赖还需要std_msgs，base_interfaces_demo（这里面存放了我们自己定义的所需的接口）",[16,818,819],{},"ros2 pkg create + 功能包名（可以写在前面或者最后面） + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[16,821,822],{},[19,823],{"alt":21,"src":824},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage375.webp",[562,826],{},[16,828,829],{},[19,830],{"alt":21,"src":831},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage376.webp",[16,833,834],{},[19,835],{"alt":21,"src":836},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage377.webp",[562,838],{},[16,840,841],{},"发布方",[16,843,844],{},[19,845],{"alt":21,"src":846},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage378.webp",[16,848,849],{},"定时器是用来控制发送频率的，定时器里还会执行一个回调函数timer_callback。",[16,851,852],{},[19,853],{"alt":21,"src":854},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage379.webp",[16,856,857],{},"count_是计数器，每执行一次这个回调函数，count_就++；",[16,859,860],{},[19,861],{"alt":21,"src":862},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage380.webp",[16,864,865],{},"spin函数是，程序一旦执行到这里，就返回到上面，返回到上面是为了调用回调函数，如果没有这个spin函数，那么我们这个回调函数是不会被执行的。",[16,867,868],{},"以后只要我们创建完节点类对象指针，就要把该指针传入spin()函数里。",[562,870],{},[16,872,873],{},[19,874],{"alt":21,"src":875},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage381.webp",[16,877,878],{},[19,879],{"alt":21,"src":880},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage382.webp",[16,882,883],{},[19,884],{"alt":21,"src":885},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage383.webp",[16,887,888],{},[19,889],{"alt":21,"src":890},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage384.webp",[16,892,893],{},[19,894],{"alt":21,"src":895},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage385.webp",[16,897,898],{},[19,899],{"alt":21,"src":900},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage386.webp",[24,902,904],{"className":26,"code":903,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass Talker: public rclcpp::Node\n{\n  public:\n    Talker():Node(\"talker_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalker>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,905,906,912,916,933,937,941,957,961,980,984,988,992,1014,1018,1028,1032,1055,1059,1069,1077],{"__ignoreMap":21},[33,907,908,910],{"class":35,"line":36},[33,909,40],{"class":39},[33,911,44],{"class":43},[33,913,914],{"class":35,"line":47},[33,915,51],{"emptyLinePlaceholder":50},[33,917,918,920,923,925,927,929,931],{"class":35,"line":54},[33,919,57],{"class":39},[33,921,922],{"class":60}," Talker",[33,924,65],{"class":64},[33,926,68],{"class":39},[33,928,71],{"class":60},[33,930,74],{"class":64},[33,932,77],{"class":60},[33,934,935],{"class":35,"line":80},[33,936,83],{"class":64},[33,938,939],{"class":35,"line":86},[33,940,89],{"class":39},[33,942,943,946,948,950,952,955],{"class":35,"line":92},[33,944,945],{"class":60},"    Talker",[33,947,98],{"class":64},[33,949,101],{"class":60},[33,951,104],{"class":64},[33,953,954],{"class":43},"\"talker_node_cpp\"",[33,956,110],{"class":64},[33,958,959],{"class":35,"line":113},[33,960,116],{"class":64},[33,962,963,965,967,969,971,973,975,978],{"class":35,"line":119},[33,964,122],{"class":60},[33,966,104],{"class":64},[33,968,128],{"class":127},[33,970,131],{"class":64},[33,972,134],{"class":60},[33,974,137],{"class":64},[33,976,977],{"class":43},"\"发布节点创建！\"",[33,979,143],{"class":64},[33,981,982],{"class":35,"line":146},[33,983,149],{"class":64},[33,985,986],{"class":35,"line":152},[33,987,155],{"class":64},[33,989,990],{"class":35,"line":158},[33,991,51],{"emptyLinePlaceholder":50},[33,993,994,996,998,1000,1002,1004,1006,1008,1010,1012],{"class":35,"line":163},[33,995,166],{"class":39},[33,997,169],{"class":60},[33,999,104],{"class":64},[33,1001,166],{"class":39},[33,1003,177],{"class":176},[33,1005,180],{"class":64},[33,1007,183],{"class":39},[33,1009,186],{"class":39},[33,1011,189],{"class":176},[33,1013,110],{"class":64},[33,1015,1016],{"class":35,"line":194},[33,1017,83],{"class":64},[33,1019,1020,1022,1024,1026],{"class":35,"line":199},[33,1021,202],{"class":60},[33,1023,74],{"class":64},[33,1025,207],{"class":60},[33,1027,210],{"class":64},[33,1029,1030],{"class":35,"line":213},[33,1031,51],{"emptyLinePlaceholder":50},[33,1033,1034,1036,1038,1040,1042,1044,1046,1048,1050,1053],{"class":35,"line":218},[33,1035,202],{"class":60},[33,1037,74],{"class":64},[33,1039,225],{"class":60},[33,1041,104],{"class":64},[33,1043,230],{"class":60},[33,1045,74],{"class":64},[33,1047,235],{"class":60},[33,1049,238],{"class":64},[33,1051,1052],{"class":60},"Talker",[33,1054,244],{"class":64},[33,1056,1057],{"class":35,"line":247},[33,1058,51],{"emptyLinePlaceholder":50},[33,1060,1061,1063,1065,1067],{"class":35,"line":252},[33,1062,202],{"class":60},[33,1064,74],{"class":64},[33,1066,259],{"class":60},[33,1068,262],{"class":64},[33,1070,1071,1073,1075],{"class":35,"line":265},[33,1072,268],{"class":39},[33,1074,271],{"class":127},[33,1076,274],{"class":64},[33,1078,1079],{"class":35,"line":277},[33,1080,280],{"class":64},[16,1082,1083],{},"此时程序处于挂起状态，会一直运行，因为spin函数。",[16,1085,1086],{},"想结束得按Ctrl+C。",[16,1088,1089],{},"我们想要的类型在std_msgs里，所以要加头文件。",[16,1091,1092],{},[19,1093],{"alt":21,"src":1094},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage387.webp",[16,1096,1097],{},"create_publisher()第一个入口参数是话题名称，是一个字符串",[16,1099,1100],{},"create_publisher()第二个入口参数是QOS服务质量有关的，是队列深度是一串数字，暂时可以先填10或者20等。",[16,1102,1103],{},"也就是当网络质量不好的时候，消息发不出去了，我们可以将数据先存到队列里，假设填10，最多就可以存10个数，当网络恢复了，我们就从队列里取数据，将其发出。",[16,1105,1106],{},"其他入口参数有默认值，可以暂时先不管。",[16,1108,1109],{},"返回值是一个publisher的指针。",[16,1111,1112],{},[19,1113],{"alt":21,"src":1114},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage388.webp",[16,1116,1117],{},[19,1118],{"alt":21,"src":1119},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage389.webp",[16,1121,1122],{},[19,1123],{"alt":21,"src":1124},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage390.webp",[16,1126,1127],{},[19,1128],{"alt":21,"src":1129},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage391.webp",[16,1131,1132],{},"创建定时器，这个函数有模板，但是模板有默认值可以不设置，",[16,1134,1135],{},"然后三个入口参数，",[16,1137,1138],{},"第一个入口参数是持续时间，也就是周期；",[16,1140,1141],{},"第二个入口参数是回调函数；",[16,1143,1144],{},"第三个入口参数有默认值，先不管。",[16,1146,1147],{},[19,1148],{"alt":21,"src":1149},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage392.webp",[16,1151,1152],{},"使用该命名空间的优势是，在第一个入口参数，可以直接填时间+单位。",[16,1154,1155],{},"如果是1s就写1s，是100ms就填100ms。",[16,1157,1158],{},[19,1159],{"alt":21,"src":1160},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage393.webp",[16,1162,1163],{},[19,1164],{"alt":21,"src":1165},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage394.webp",[16,1167,1168],{},"该函数还有个返回值，返回值是定时器相关的一个指针。",[16,1170,1171],{},[19,1172],{"alt":21,"src":1173},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage395.webp",[16,1175,1176],{},[19,1177],{"alt":21,"src":1178},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage396.webp",[16,1180,1181],{},[19,1182],{"alt":21,"src":1183},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage397.webp",[16,1185,1186],{},"该函数有多个重载，选择适合自己的一个函数。",[16,1188,1189],{},[19,1190],{"alt":21,"src":1191},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage398.webp",[16,1193,1194],{},"发布对象得先创建对象。",[16,1196,1197],{},[19,1198],{"alt":21,"src":1199},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage399.webp",[16,1201,1202],{},[19,1203],{"alt":21,"src":1204},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage400.webp",[16,1206,1207],{},[19,1208],{"alt":21,"src":1209},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage401.webp",[16,1211,1212],{},"把count转化成字符串并发送。",[16,1214,1215],{},[19,1216],{"alt":21,"src":1217},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage402.webp",[16,1219,1220],{},"因为它是一个std::string类型的，我们要转化成c风格的字符串。",[16,1222,1223],{},[19,1224],{"alt":21,"src":1225},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage403.webp",[16,1227,1228],{},[19,1229],{"alt":21,"src":1230},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage404.webp",[16,1232,1233],{},[19,1234],{"alt":21,"src":1235},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage405.webp",[16,1237,1238],{},"尽量在构造函数的时候，给count赋初值0.",[24,1240,1242],{"className":26,"code":1241,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass Talker: public rclcpp::Node\n{\n  public:\n    Talker():Node(\"talker_node_cpp\")，count(0)\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n      publisher_ = this->create_publisher\u003Cstd_msgs::msg::String>(\"chatter\",10);\n      timer_ = this->create_wall_timer(1s,std::bind(&Talker::on_timer,this));\n    }\n  private:\n    void on_timer()\n    {\n      auto message = std_msgs::msg::String();\n      message.data = \"hello world!\" + std::to_string(count++);\n      RCLCPP_INFO(this->get_logger(),\"发布方发布的消息：%s\",message.data.c_str());\n      publisher_->publish(message);\n    }\n    rclcpp::Publisher\u003Cstd_msgs::msg::String>::SharedPtr publisher_;\n    rclcpp::TimerBase::SharedPtr timer_;\n    size_t count;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalker>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,1243,1244,1250,1257,1261,1279,1283,1299,1303,1307,1332,1336,1354,1397,1443,1447,1452,1463,1467,1491,1519,1550,1561,1565,1590,1602,1610,1614,1618,1640,1645,1656,1661,1684,1689,1700,1709],{"__ignoreMap":21},[33,1245,1246,1248],{"class":35,"line":36},[33,1247,40],{"class":39},[33,1249,44],{"class":43},[33,1251,1252,1254],{"class":35,"line":47},[33,1253,40],{"class":39},[33,1255,1256],{"class":43}," \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n",[33,1258,1259],{"class":35,"line":54},[33,1260,51],{"emptyLinePlaceholder":50},[33,1262,1263,1266,1269,1272,1274,1277],{"class":35,"line":80},[33,1264,1265],{"class":39},"using",[33,1267,1268],{"class":39}," namespace",[33,1270,1271],{"class":60}," std",[33,1273,74],{"class":64},[33,1275,1276],{"class":60},"chrono_literals",[33,1278,274],{"class":64},[33,1280,1281],{"class":35,"line":86},[33,1282,51],{"emptyLinePlaceholder":50},[33,1284,1285,1287,1289,1291,1293,1295,1297],{"class":35,"line":92},[33,1286,57],{"class":39},[33,1288,922],{"class":60},[33,1290,65],{"class":64},[33,1292,68],{"class":39},[33,1294,71],{"class":60},[33,1296,74],{"class":64},[33,1298,77],{"class":60},[33,1300,1301],{"class":35,"line":113},[33,1302,83],{"class":64},[33,1304,1305],{"class":35,"line":119},[33,1306,89],{"class":39},[33,1308,1309,1311,1313,1315,1317,1319,1322,1325,1327,1330],{"class":35,"line":146},[33,1310,945],{"class":60},[33,1312,98],{"class":64},[33,1314,101],{"class":60},[33,1316,104],{"class":64},[33,1318,954],{"class":43},[33,1320,1321],{"class":64},")，",[33,1323,1324],{"class":60},"count",[33,1326,104],{"class":64},[33,1328,1329],{"class":127},"0",[33,1331,110],{"class":64},[33,1333,1334],{"class":35,"line":152},[33,1335,116],{"class":64},[33,1337,1338,1340,1342,1344,1346,1348,1350,1352],{"class":35,"line":158},[33,1339,122],{"class":60},[33,1341,104],{"class":64},[33,1343,128],{"class":127},[33,1345,131],{"class":64},[33,1347,134],{"class":60},[33,1349,137],{"class":64},[33,1351,977],{"class":43},[33,1353,143],{"class":64},[33,1355,1356,1359,1362,1365,1368,1370,1373,1375,1378,1381,1384,1386,1389,1392,1395],{"class":35,"line":163},[33,1357,1358],{"class":64},"      publisher_ ",[33,1360,1361],{"class":39},"=",[33,1363,1364],{"class":127}," this",[33,1366,1367],{"class":64},"->create_publisher",[33,1369,238],{"class":39},[33,1371,1372],{"class":60},"std_msgs",[33,1374,74],{"class":64},[33,1376,1377],{"class":60},"msg",[33,1379,1380],{"class":64},"::String",[33,1382,1383],{"class":39},">",[33,1385,104],{"class":64},[33,1387,1388],{"class":43},"\"chatter\"",[33,1390,1391],{"class":64},",",[33,1393,1394],{"class":127},"10",[33,1396,143],{"class":64},[33,1398,1399,1402,1404,1406,1408,1411,1413,1416,1419,1421,1423,1425,1428,1430,1433,1435,1438,1440],{"class":35,"line":194},[33,1400,1401],{"class":64},"      timer_ ",[33,1403,1361],{"class":39},[33,1405,1364],{"class":127},[33,1407,131],{"class":64},[33,1409,1410],{"class":60},"create_wall_timer",[33,1412,104],{"class":64},[33,1414,1415],{"class":127},"1",[33,1417,1418],{"class":39},"s",[33,1420,1391],{"class":64},[33,1422,230],{"class":60},[33,1424,74],{"class":64},[33,1426,1427],{"class":60},"bind",[33,1429,104],{"class":64},[33,1431,1432],{"class":39},"&",[33,1434,1052],{"class":60},[33,1436,1437],{"class":64},"::on_timer,",[33,1439,128],{"class":127},[33,1441,1442],{"class":64},"));\n",[33,1444,1445],{"class":35,"line":199},[33,1446,149],{"class":64},[33,1448,1449],{"class":35,"line":213},[33,1450,1451],{"class":39},"  private:\n",[33,1453,1454,1457,1460],{"class":35,"line":218},[33,1455,1456],{"class":39},"    void",[33,1458,1459],{"class":60}," on_timer",[33,1461,1462],{"class":64},"()\n",[33,1464,1465],{"class":35,"line":247},[33,1466,116],{"class":64},[33,1468,1469,1472,1475,1477,1480,1482,1484,1486,1489],{"class":35,"line":252},[33,1470,1471],{"class":39},"      auto",[33,1473,1474],{"class":64}," message ",[33,1476,1361],{"class":39},[33,1478,1479],{"class":60}," std_msgs",[33,1481,74],{"class":64},[33,1483,1377],{"class":60},[33,1485,74],{"class":64},[33,1487,1488],{"class":60},"String",[33,1490,262],{"class":64},[33,1492,1493,1496,1498,1501,1504,1506,1508,1511,1514,1517],{"class":35,"line":265},[33,1494,1495],{"class":64},"      message.data ",[33,1497,1361],{"class":39},[33,1499,1500],{"class":43}," \"hello world!\"",[33,1502,1503],{"class":39}," +",[33,1505,1271],{"class":60},[33,1507,74],{"class":64},[33,1509,1510],{"class":60},"to_string",[33,1512,1513],{"class":64},"(count",[33,1515,1516],{"class":39},"++",[33,1518,143],{"class":64},[33,1520,1521,1523,1525,1527,1529,1531,1533,1536,1539,1541,1544,1547],{"class":35,"line":277},[33,1522,122],{"class":60},[33,1524,104],{"class":64},[33,1526,128],{"class":127},[33,1528,131],{"class":64},[33,1530,134],{"class":60},[33,1532,137],{"class":64},[33,1534,1535],{"class":43},"\"发布方发布的消息：",[33,1537,1538],{"class":127},"%s",[33,1540,369],{"class":43},[33,1542,1543],{"class":64},",message.data.",[33,1545,1546],{"class":60},"c_str",[33,1548,1549],{"class":64},"());\n",[33,1551,1552,1555,1558],{"class":35,"line":496},[33,1553,1554],{"class":64},"      publisher_->",[33,1556,1557],{"class":60},"publish",[33,1559,1560],{"class":64},"(message);\n",[33,1562,1563],{"class":35,"line":503},[33,1564,149],{"class":64},[33,1566,1567,1570,1572,1575,1577,1579,1581,1583,1585,1587],{"class":35,"line":511},[33,1568,1569],{"class":60},"    rclcpp",[33,1571,74],{"class":64},[33,1573,1574],{"class":60},"Publisher",[33,1576,238],{"class":64},[33,1578,1372],{"class":60},[33,1580,74],{"class":64},[33,1582,1377],{"class":60},[33,1584,74],{"class":64},[33,1586,1488],{"class":60},[33,1588,1589],{"class":64},">::SharedPtr publisher_;\n",[33,1591,1592,1594,1596,1599],{"class":35,"line":519},[33,1593,1569],{"class":60},[33,1595,74],{"class":64},[33,1597,1598],{"class":60},"TimerBase",[33,1600,1601],{"class":64},"::SharedPtr timer_;\n",[33,1603,1604,1607],{"class":35,"line":525},[33,1605,1606],{"class":39},"    size_t",[33,1608,1609],{"class":64}," count;\n",[33,1611,1612],{"class":35,"line":531},[33,1613,155],{"class":64},[33,1615,1616],{"class":35,"line":542},[33,1617,51],{"emptyLinePlaceholder":50},[33,1619,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638],{"class":35,"line":548},[33,1621,166],{"class":39},[33,1623,169],{"class":60},[33,1625,104],{"class":64},[33,1627,166],{"class":39},[33,1629,177],{"class":176},[33,1631,180],{"class":64},[33,1633,183],{"class":39},[33,1635,186],{"class":39},[33,1637,189],{"class":176},[33,1639,110],{"class":64},[33,1641,1643],{"class":35,"line":1642},29,[33,1644,83],{"class":64},[33,1646,1648,1650,1652,1654],{"class":35,"line":1647},30,[33,1649,202],{"class":60},[33,1651,74],{"class":64},[33,1653,207],{"class":60},[33,1655,210],{"class":64},[33,1657,1659],{"class":35,"line":1658},31,[33,1660,51],{"emptyLinePlaceholder":50},[33,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682],{"class":35,"line":1663},32,[33,1665,202],{"class":60},[33,1667,74],{"class":64},[33,1669,225],{"class":60},[33,1671,104],{"class":64},[33,1673,230],{"class":60},[33,1675,74],{"class":64},[33,1677,235],{"class":60},[33,1679,238],{"class":64},[33,1681,1052],{"class":60},[33,1683,244],{"class":64},[33,1685,1687],{"class":35,"line":1686},33,[33,1688,51],{"emptyLinePlaceholder":50},[33,1690,1692,1694,1696,1698],{"class":35,"line":1691},34,[33,1693,202],{"class":60},[33,1695,74],{"class":64},[33,1697,259],{"class":60},[33,1699,262],{"class":64},[33,1701,1703,1705,1707],{"class":35,"line":1702},35,[33,1704,268],{"class":39},[33,1706,271],{"class":127},[33,1708,274],{"class":64},[33,1710,1712],{"class":35,"line":1711},36,[33,1713,280],{"class":64},[16,1715,1716],{},[19,1717],{"alt":21,"src":1718},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage406.webp",[16,1720,1721],{},"但是不一定消息真的发布出去了。",[16,1723,1724],{},"验证方法：",[24,1726,1730],{"className":1727,"code":1728,"language":1729,"meta":21,"style":21},"language-bash shiki shiki-themes github-light github-dark","ros2 topic echo \u002Fxxx\n","bash",[30,1731,1732],{"__ignoreMap":21},[33,1733,1734,1737,1740,1743],{"class":35,"line":36},[33,1735,1736],{"class":60},"ros2",[33,1738,1739],{"class":43}," topic",[33,1741,1742],{"class":43}," echo",[33,1744,1745],{"class":43}," \u002Fxxx\n",[16,1747,1748],{},[19,1749],{"alt":21,"src":1750},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage407.webp",[16,1752,1753],{},"这样才能确定消息被发到chatter话题上了。",[562,1755],{},[16,1757,1758],{},[19,1759],{"alt":21,"src":1760},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage408.webp",[16,1762,1763],{},[19,1764],{"alt":21,"src":1765},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage409.webp",[16,1767,1768],{},[19,1769],{"alt":21,"src":1770},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage410.webp",[16,1772,1773],{},[19,1774],{"alt":21,"src":1775},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage411.webp",[16,1777,1778],{},[19,1779],{"alt":21,"src":1780},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage412.webp",[16,1782,1783],{},[19,1784],{"alt":21,"src":1785},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage413.webp",[16,1787,1788],{},[19,1789],{"alt":21,"src":1790},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage414.webp",[16,1792,1793],{},[19,1794],{"alt":21,"src":1795},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage415.webp",[16,1797,1798],{},[19,1799],{"alt":21,"src":1800},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage416.webp",[16,1802,1803],{},[19,1804],{"alt":21,"src":1805},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage417.webp",[24,1807,1809],{"className":26,"code":1808,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass Listener: public rclcpp::Node\n{\npublic:\n    Listener():Node(\"listener_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n    }\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListener>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[30,1810,1811,1817,1821,1838,1842,1847,1863,1867,1887,1891,1895,1899,1923,1927,1937,1941,1964,1968,1978,1987],{"__ignoreMap":21},[33,1812,1813,1815],{"class":35,"line":36},[33,1814,40],{"class":39},[33,1816,44],{"class":43},[33,1818,1819],{"class":35,"line":47},[33,1820,51],{"emptyLinePlaceholder":50},[33,1822,1823,1825,1828,1830,1832,1834,1836],{"class":35,"line":54},[33,1824,57],{"class":39},[33,1826,1827],{"class":60}," Listener",[33,1829,65],{"class":64},[33,1831,68],{"class":39},[33,1833,71],{"class":60},[33,1835,74],{"class":64},[33,1837,77],{"class":60},[33,1839,1840],{"class":35,"line":80},[33,1841,83],{"class":64},[33,1843,1844],{"class":35,"line":86},[33,1845,1846],{"class":39},"public:\n",[33,1848,1849,1852,1854,1856,1858,1861],{"class":35,"line":92},[33,1850,1851],{"class":60},"    Listener",[33,1853,98],{"class":64},[33,1855,101],{"class":60},[33,1857,104],{"class":64},[33,1859,1860],{"class":43},"\"listener_node_cpp\"",[33,1862,110],{"class":64},[33,1864,1865],{"class":35,"line":113},[33,1866,116],{"class":64},[33,1868,1869,1872,1874,1876,1878,1880,1882,1885],{"class":35,"line":119},[33,1870,1871],{"class":60},"        RCLCPP_INFO",[33,1873,104],{"class":64},[33,1875,128],{"class":127},[33,1877,131],{"class":64},[33,1879,134],{"class":60},[33,1881,137],{"class":64},[33,1883,1884],{"class":43},"\"订阅方创建!\"",[33,1886,143],{"class":64},[33,1888,1889],{"class":35,"line":146},[33,1890,149],{"class":64},[33,1892,1893],{"class":35,"line":152},[33,1894,155],{"class":64},[33,1896,1897],{"class":35,"line":158},[33,1898,51],{"emptyLinePlaceholder":50},[33,1900,1901,1903,1905,1907,1909,1911,1913,1915,1918,1920],{"class":35,"line":163},[33,1902,166],{"class":39},[33,1904,169],{"class":60},[33,1906,104],{"class":64},[33,1908,166],{"class":39},[33,1910,177],{"class":176},[33,1912,180],{"class":64},[33,1914,183],{"class":39},[33,1916,1917],{"class":39}," *",[33,1919,189],{"class":176},[33,1921,1922],{"class":64},"[])\n",[33,1924,1925],{"class":35,"line":194},[33,1926,83],{"class":64},[33,1928,1929,1931,1933,1935],{"class":35,"line":199},[33,1930,1569],{"class":60},[33,1932,74],{"class":64},[33,1934,207],{"class":60},[33,1936,210],{"class":64},[33,1938,1939],{"class":35,"line":213},[33,1940,51],{"emptyLinePlaceholder":50},[33,1942,1943,1945,1947,1949,1951,1953,1955,1957,1959,1962],{"class":35,"line":218},[33,1944,1569],{"class":60},[33,1946,74],{"class":64},[33,1948,225],{"class":60},[33,1950,104],{"class":64},[33,1952,230],{"class":60},[33,1954,74],{"class":64},[33,1956,235],{"class":60},[33,1958,238],{"class":64},[33,1960,1961],{"class":60},"Listener",[33,1963,244],{"class":64},[33,1965,1966],{"class":35,"line":247},[33,1967,51],{"emptyLinePlaceholder":50},[33,1969,1970,1972,1974,1976],{"class":35,"line":252},[33,1971,1569],{"class":60},[33,1973,74],{"class":64},[33,1975,259],{"class":60},[33,1977,262],{"class":64},[33,1979,1980,1983,1985],{"class":35,"line":265},[33,1981,1982],{"class":39},"    return",[33,1984,271],{"class":127},[33,1986,274],{"class":64},[33,1988,1989],{"class":35,"line":277},[33,1990,280],{"class":64},[16,1992,1993],{},[19,1994],{"alt":21,"src":1995},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage418.webp",[16,1997,1998],{},"编译之前别忘了编辑配置文件",[16,2000,2001],{},[19,2002],{"alt":21,"src":2003},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage419.webp",[16,2005,2006],{},"依赖包已经自动生成了，不用管。",[16,2008,2009],{},[19,2010],{"alt":21,"src":2011},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage420.webp",[16,2013,2014],{},"主要改这三大部分",[16,2016,2017],{},[19,2018],{"alt":21,"src":2019},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage421.webp",[16,2021,2022],{},[19,2023],{"alt":21,"src":2024},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage422.webp",[16,2026,2027],{},[19,2028],{"alt":21,"src":2029},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage423.webp",[16,2031,2032],{},[19,2033],{"alt":21,"src":2034},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage424.webp",[16,2036,2037],{},[19,2038],{"alt":21,"src":2039},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage425.webp",[16,2041,2042],{},"一共有5个入口参数，后面两个入口参数有默认值。",[16,2044,2045],{},"第一个入口参数是话题名称，要保证和发布方一致；",[16,2047,2048],{},"第二个入口参数是QoS，就是服务质量管理，队列深度，10或者20暂时随便设置，可以看看发布方那边的QoS的解释;",[16,2050,2051],{},"第三个入口参数是回调函数，一旦接收到数据，就触发该回调函数。",[16,2053,2054],{},"返回值是一个订阅对象的指针。",[16,2056,2057],{},[19,2058],{"alt":21,"src":2059},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage426.webp",[16,2061,2062],{},[19,2063],{"alt":21,"src":2064},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage427.webp",[16,2066,2067],{},"std::placeholders::_1这个是占位符，_1是指一个。这个地方本应该填入消息。",[16,2069,2070],{},[19,2071],{"alt":21,"src":2072},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage428.webp",[16,2074,2075],{},[19,2076],{"alt":21,"src":2077},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage429.webp",[16,2079,2080],{},[19,2081],{"alt":21,"src":2082},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage430.webp",[16,2084,2085],{},[19,2086],{"alt":21,"src":2087},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage431.webp",[24,2089,2091],{"className":26,"code":2090,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"std_msgs\u002Fmsg\u002Fstring.hpp\"\n\nclass Listener: public rclcpp::Node\n{\npublic:\n    Listener():Node(\"listener_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n        subscription_ = this->create_subscription\u003Cstd_msgs::msg::String>(\"chatter\",10,std::bind(&Listener::do_callback,this,std::placeholders::_1));\n\n    }\nprivate:\n    void do_callback(const std_msgs::msg::String &msg)\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅到的消息是:%s\",msg.data.c_str());\n    }\n    rclcpp::Subscription\u003Cstd_msgs::msg::String>::SharedPtr subscription_;\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListener>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[30,2092,2093,2099,2105,2109,2125,2129,2133,2147,2151,2169,2232,2236,2240,2245,2274,2278,2306,2310,2334,2338,2342,2364,2368,2378,2382,2404,2408,2418,2426],{"__ignoreMap":21},[33,2094,2095,2097],{"class":35,"line":36},[33,2096,40],{"class":39},[33,2098,44],{"class":43},[33,2100,2101,2103],{"class":35,"line":47},[33,2102,40],{"class":39},[33,2104,1256],{"class":43},[33,2106,2107],{"class":35,"line":54},[33,2108,51],{"emptyLinePlaceholder":50},[33,2110,2111,2113,2115,2117,2119,2121,2123],{"class":35,"line":80},[33,2112,57],{"class":39},[33,2114,1827],{"class":60},[33,2116,65],{"class":64},[33,2118,68],{"class":39},[33,2120,71],{"class":60},[33,2122,74],{"class":64},[33,2124,77],{"class":60},[33,2126,2127],{"class":35,"line":86},[33,2128,83],{"class":64},[33,2130,2131],{"class":35,"line":92},[33,2132,1846],{"class":39},[33,2134,2135,2137,2139,2141,2143,2145],{"class":35,"line":113},[33,2136,1851],{"class":60},[33,2138,98],{"class":64},[33,2140,101],{"class":60},[33,2142,104],{"class":64},[33,2144,1860],{"class":43},[33,2146,110],{"class":64},[33,2148,2149],{"class":35,"line":119},[33,2150,116],{"class":64},[33,2152,2153,2155,2157,2159,2161,2163,2165,2167],{"class":35,"line":146},[33,2154,1871],{"class":60},[33,2156,104],{"class":64},[33,2158,128],{"class":127},[33,2160,131],{"class":64},[33,2162,134],{"class":60},[33,2164,137],{"class":64},[33,2166,1884],{"class":43},[33,2168,143],{"class":64},[33,2170,2171,2174,2176,2178,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2218,2220,2222,2224,2226,2229],{"class":35,"line":152},[33,2172,2173],{"class":64},"        subscription_ ",[33,2175,1361],{"class":39},[33,2177,1364],{"class":127},[33,2179,2180],{"class":64},"->create_subscription",[33,2182,238],{"class":39},[33,2184,1372],{"class":60},[33,2186,74],{"class":64},[33,2188,1377],{"class":60},[33,2190,1380],{"class":64},[33,2192,1383],{"class":39},[33,2194,104],{"class":64},[33,2196,1388],{"class":43},[33,2198,1391],{"class":64},[33,2200,1394],{"class":127},[33,2202,1391],{"class":64},[33,2204,230],{"class":60},[33,2206,74],{"class":64},[33,2208,1427],{"class":60},[33,2210,104],{"class":64},[33,2212,1432],{"class":39},[33,2214,1961],{"class":60},[33,2216,2217],{"class":64},"::do_callback,",[33,2219,128],{"class":127},[33,2221,1391],{"class":64},[33,2223,230],{"class":60},[33,2225,74],{"class":64},[33,2227,2228],{"class":60},"placeholders",[33,2230,2231],{"class":64},"::_1));\n",[33,2233,2234],{"class":35,"line":158},[33,2235,51],{"emptyLinePlaceholder":50},[33,2237,2238],{"class":35,"line":163},[33,2239,149],{"class":64},[33,2241,2242],{"class":35,"line":194},[33,2243,2244],{"class":39},"private:\n",[33,2246,2247,2249,2252,2254,2257,2259,2261,2263,2265,2267,2270,2272],{"class":35,"line":199},[33,2248,1456],{"class":39},[33,2250,2251],{"class":60}," do_callback",[33,2253,104],{"class":64},[33,2255,2256],{"class":39},"const",[33,2258,1479],{"class":60},[33,2260,74],{"class":64},[33,2262,1377],{"class":60},[33,2264,74],{"class":64},[33,2266,1488],{"class":60},[33,2268,2269],{"class":39}," &",[33,2271,1377],{"class":176},[33,2273,110],{"class":64},[33,2275,2276],{"class":35,"line":213},[33,2277,116],{"class":64},[33,2279,2280,2282,2284,2286,2288,2290,2292,2295,2297,2299,2302,2304],{"class":35,"line":218},[33,2281,1871],{"class":60},[33,2283,104],{"class":64},[33,2285,128],{"class":127},[33,2287,131],{"class":64},[33,2289,134],{"class":60},[33,2291,137],{"class":64},[33,2293,2294],{"class":43},"\"订阅到的消息是:",[33,2296,1538],{"class":127},[33,2298,369],{"class":43},[33,2300,2301],{"class":64},",msg.data.",[33,2303,1546],{"class":60},[33,2305,1549],{"class":64},[33,2307,2308],{"class":35,"line":247},[33,2309,149],{"class":64},[33,2311,2312,2314,2316,2319,2321,2323,2325,2327,2329,2331],{"class":35,"line":252},[33,2313,1569],{"class":60},[33,2315,74],{"class":64},[33,2317,2318],{"class":60},"Subscription",[33,2320,238],{"class":64},[33,2322,1372],{"class":60},[33,2324,74],{"class":64},[33,2326,1377],{"class":60},[33,2328,74],{"class":64},[33,2330,1488],{"class":60},[33,2332,2333],{"class":64},">::SharedPtr subscription_;\n",[33,2335,2336],{"class":35,"line":265},[33,2337,155],{"class":64},[33,2339,2340],{"class":35,"line":277},[33,2341,51],{"emptyLinePlaceholder":50},[33,2343,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":35,"line":496},[33,2345,166],{"class":39},[33,2347,169],{"class":60},[33,2349,104],{"class":64},[33,2351,166],{"class":39},[33,2353,177],{"class":176},[33,2355,180],{"class":64},[33,2357,183],{"class":39},[33,2359,1917],{"class":39},[33,2361,189],{"class":176},[33,2363,1922],{"class":64},[33,2365,2366],{"class":35,"line":503},[33,2367,83],{"class":64},[33,2369,2370,2372,2374,2376],{"class":35,"line":511},[33,2371,1569],{"class":60},[33,2373,74],{"class":64},[33,2375,207],{"class":60},[33,2377,210],{"class":64},[33,2379,2380],{"class":35,"line":519},[33,2381,51],{"emptyLinePlaceholder":50},[33,2383,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402],{"class":35,"line":525},[33,2385,1569],{"class":60},[33,2387,74],{"class":64},[33,2389,225],{"class":60},[33,2391,104],{"class":64},[33,2393,230],{"class":60},[33,2395,74],{"class":64},[33,2397,235],{"class":60},[33,2399,238],{"class":64},[33,2401,1961],{"class":60},[33,2403,244],{"class":64},[33,2405,2406],{"class":35,"line":531},[33,2407,51],{"emptyLinePlaceholder":50},[33,2409,2410,2412,2414,2416],{"class":35,"line":542},[33,2411,1569],{"class":60},[33,2413,74],{"class":64},[33,2415,259],{"class":60},[33,2417,262],{"class":64},[33,2419,2420,2422,2424],{"class":35,"line":548},[33,2421,1982],{"class":39},[33,2423,271],{"class":127},[33,2425,274],{"class":64},[33,2427,2428],{"class":35,"line":1642},[33,2429,280],{"class":64},[12,2431,2432],{"id":2432},"话题通信_自定义接口信息",[16,2434,2435],{},[19,2436],{"alt":21,"src":2437},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage432.webp",[16,2439,2440],{},[19,2441],{"alt":21,"src":2442},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage433.webp",[16,2444,2445],{},[19,2446],{"alt":21,"src":2447},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage434.webp",[16,2449,2450],{},[19,2451],{"alt":21,"src":2452},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage435.webp",[16,2454,2455],{},"构建依赖",[16,2457,2458],{},"执行依赖",[16,2460,2461],{},"当前功能包所属的功能包组",[16,2463,2464],{},[19,2465],{"alt":21,"src":2466},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage436.webp",[16,2468,2469],{},"find_package是要把构建依赖传递过来",[16,2471,2472],{},"然后还要指定当前被构建的接口文件的路径（通过这个设置，就可以把.msg转化成对应的C++和Python代码了）",[16,2474,2475],{},[19,2476],{"alt":21,"src":2477},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage437.webp",[16,2479,2480],{},[19,2481],{"alt":21,"src":2482},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage438.webp",[16,2484,2485],{},[19,2486],{"alt":21,"src":2487},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage439.webp",[16,2489,2490],{},"文件名可以自定义，但是首字母必须大写",[16,2492,2493],{},[19,2494],{"alt":21,"src":2495},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage440.webp",[16,2497,2498],{},[19,2499],{"alt":21,"src":2500},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage441.webp",[16,2502,2503],{},[19,2504],{"alt":21,"src":2505},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage442.webp",[16,2507,2508],{},"写完之后test_depend报错了",[16,2510,2511],{},[19,2512],{"alt":21,"src":2513},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage443.webp",[16,2515,2516],{},"删掉即可",[16,2518,2519],{},"编译依赖是rosidl开头的，我们通过grep查询一下",[24,2521,2523],{"className":1727,"code":2522,"language":1729,"meta":21,"style":21},"ros2 pkg list | grep -i rosidl\n",[30,2524,2525],{"__ignoreMap":21},[33,2526,2527,2529,2532,2535,2538,2541,2544],{"class":35,"line":36},[33,2528,1736],{"class":60},[33,2530,2531],{"class":43}," pkg",[33,2533,2534],{"class":43}," list",[33,2536,2537],{"class":39}," |",[33,2539,2540],{"class":60}," grep",[33,2542,2543],{"class":127}," -i",[33,2545,2546],{"class":43}," rosidl\n",[16,2548,2549],{},[19,2550],{"alt":21,"src":2551},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage444.webp",[16,2553,2554],{},[19,2555],{"alt":21,"src":2556},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage445.webp",[16,2558,2559],{},"我们用的是这一个，直接复制过来",[16,2561,2562],{},[19,2563],{"alt":21,"src":2564},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage446.webp",[16,2566,2567],{},[19,2568],{"alt":21,"src":2569},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage447.webp",[16,2571,2572],{},[19,2573],{"alt":21,"src":2574},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage448.webp",[16,2576,2577],{},[19,2578],{"alt":21,"src":2579},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage449.webp",[16,2581,2582],{},"在list里这个所属的功能包组就没有了，需要自己写rosidl_interface_packages",[16,2584,2585],{},[19,2586],{"alt":21,"src":2587},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage450.webp",[16,2589,2590],{},[19,2591],{"alt":21,"src":2592},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage451.webp",[16,2594,2595],{},"这个依赖要和构建依赖一样",[16,2597,2598],{},"然后我们要为接口文件生成源码",[16,2600,2601],{},"需要使用rosidl_generate_interfaces函数",[16,2603,2604],{},[19,2605],{"alt":21,"src":2606},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage452.webp",[16,2608,2609],{},[19,2610],{"alt":21,"src":2611},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage453.webp",[24,2613,2615],{"className":1727,"code":2614,"language":1729,"meta":21,"style":21},"colcon build --packages-select base_interfaces_demo\n",[30,2616,2617],{"__ignoreMap":21},[33,2618,2619,2622,2625,2628],{"class":35,"line":36},[33,2620,2621],{"class":60},"colcon",[33,2623,2624],{"class":43}," build",[33,2626,2627],{"class":127}," --packages-select",[33,2629,2630],{"class":43}," base_interfaces_demo\n",[16,2632,2633],{},[19,2634],{"alt":21,"src":2635},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage454.webp",[16,2637,2638],{},[19,2639],{"alt":21,"src":2640},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage455.webp",[16,2642,2643],{},"会在install空间下生成student.hpp代码",[16,2645,2646],{},[19,2647],{"alt":21,"src":2648},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage456.webp",[16,2650,2651],{},"以上.msg生成C++的",[16,2653,2654],{},[19,2655],{"alt":21,"src":2656},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage457.webp",[16,2658,2659],{},"然后这个是.msg生成的Python的源码",[16,2661,2662],{},[19,2663],{"alt":21,"src":2664},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage458.webp",[16,2666,2667],{},"也可以通过这个方式来检测是否编译正常",[16,2669,2670],{},"interface是接口",[16,2672,2673],{},[19,2674],{"alt":21,"src":2675},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage459.webp",[12,2677,2679],{"id":2678},"话题通信_实验2c","话题通信_实验2(C++)",[16,2681,2682],{},[19,2683],{"alt":21,"src":2684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage460.webp",[16,2686,2687],{},[19,2688],{"alt":21,"src":2689},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage461.webp",[16,2691,2692],{},[19,2693],{"alt":21,"src":2694},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage462.webp",[16,2696,2697],{},"新建完源文件之后，要配置CMakeLists",[16,2699,2700],{},[19,2701],{"alt":21,"src":2702},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage463.webp",[16,2704,2705],{},[19,2706],{"alt":21,"src":2707},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage464.webp",[16,2709,2710],{},[19,2711],{"alt":21,"src":2712},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage465.webp",[16,2714,2715],{},[19,2716],{"alt":21,"src":2717},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage466.webp",[16,2719,2720],{},"将最基本的框架直接复制过来",[16,2722,2723],{},[19,2724],{"alt":21,"src":2725},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage467.webp",[16,2727,2728],{},"然后替换类的名称",[16,2730,2731],{},[19,2732],{"alt":21,"src":2733},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage468.webp",[24,2735,2737],{"className":26,"code":2736,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass TalkerStu: public rclcpp::Node\n{\n  public:\n    TalkerStu():Node(\"talkerstu_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalkerStu>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,2738,2739,2745,2749,2766,2770,2774,2790,2794,2812,2816,2820,2824,2846,2850,2860,2864,2887,2891,2901,2909],{"__ignoreMap":21},[33,2740,2741,2743],{"class":35,"line":36},[33,2742,40],{"class":39},[33,2744,44],{"class":43},[33,2746,2747],{"class":35,"line":47},[33,2748,51],{"emptyLinePlaceholder":50},[33,2750,2751,2753,2756,2758,2760,2762,2764],{"class":35,"line":54},[33,2752,57],{"class":39},[33,2754,2755],{"class":60}," TalkerStu",[33,2757,65],{"class":64},[33,2759,68],{"class":39},[33,2761,71],{"class":60},[33,2763,74],{"class":64},[33,2765,77],{"class":60},[33,2767,2768],{"class":35,"line":80},[33,2769,83],{"class":64},[33,2771,2772],{"class":35,"line":86},[33,2773,89],{"class":39},[33,2775,2776,2779,2781,2783,2785,2788],{"class":35,"line":92},[33,2777,2778],{"class":60},"    TalkerStu",[33,2780,98],{"class":64},[33,2782,101],{"class":60},[33,2784,104],{"class":64},[33,2786,2787],{"class":43},"\"talkerstu_node_cpp\"",[33,2789,110],{"class":64},[33,2791,2792],{"class":35,"line":113},[33,2793,116],{"class":64},[33,2795,2796,2798,2800,2802,2804,2806,2808,2810],{"class":35,"line":119},[33,2797,122],{"class":60},[33,2799,104],{"class":64},[33,2801,128],{"class":127},[33,2803,131],{"class":64},[33,2805,134],{"class":60},[33,2807,137],{"class":64},[33,2809,977],{"class":43},[33,2811,143],{"class":64},[33,2813,2814],{"class":35,"line":146},[33,2815,149],{"class":64},[33,2817,2818],{"class":35,"line":152},[33,2819,155],{"class":64},[33,2821,2822],{"class":35,"line":158},[33,2823,51],{"emptyLinePlaceholder":50},[33,2825,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844],{"class":35,"line":163},[33,2827,166],{"class":39},[33,2829,169],{"class":60},[33,2831,104],{"class":64},[33,2833,166],{"class":39},[33,2835,177],{"class":176},[33,2837,180],{"class":64},[33,2839,183],{"class":39},[33,2841,186],{"class":39},[33,2843,189],{"class":176},[33,2845,110],{"class":64},[33,2847,2848],{"class":35,"line":194},[33,2849,83],{"class":64},[33,2851,2852,2854,2856,2858],{"class":35,"line":199},[33,2853,202],{"class":60},[33,2855,74],{"class":64},[33,2857,207],{"class":60},[33,2859,210],{"class":64},[33,2861,2862],{"class":35,"line":213},[33,2863,51],{"emptyLinePlaceholder":50},[33,2865,2866,2868,2870,2872,2874,2876,2878,2880,2882,2885],{"class":35,"line":218},[33,2867,202],{"class":60},[33,2869,74],{"class":64},[33,2871,225],{"class":60},[33,2873,104],{"class":64},[33,2875,230],{"class":60},[33,2877,74],{"class":64},[33,2879,235],{"class":60},[33,2881,238],{"class":64},[33,2883,2884],{"class":60},"TalkerStu",[33,2886,244],{"class":64},[33,2888,2889],{"class":35,"line":247},[33,2890,51],{"emptyLinePlaceholder":50},[33,2892,2893,2895,2897,2899],{"class":35,"line":252},[33,2894,202],{"class":60},[33,2896,74],{"class":64},[33,2898,259],{"class":60},[33,2900,262],{"class":64},[33,2902,2903,2905,2907],{"class":35,"line":265},[33,2904,268],{"class":39},[33,2906,271],{"class":127},[33,2908,274],{"class":64},[33,2910,2911],{"class":35,"line":277},[33,2912,280],{"class":64},[16,2914,2915],{},"为了编码规范，把talkerstu_node_cpp改成小写",[16,2917,2918],{},[19,2919],{"alt":21,"src":2920},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage469.webp",[16,2922,2923],{},"同样的，订阅方也是需要这样操作",[16,2925,2926],{},[19,2927],{"alt":21,"src":2928},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage470.webp",[24,2930,2932],{"className":26,"code":2931,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ListenerStu: public rclcpp::Node\n{\npublic:\n    ListenerStu():Node(\"listenerstu_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n    }\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListenerStu>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[30,2933,2934,2940,2944,2961,2965,2969,2985,2989,3007,3011,3015,3019,3041,3045,3055,3059,3082,3086,3096,3104],{"__ignoreMap":21},[33,2935,2936,2938],{"class":35,"line":36},[33,2937,40],{"class":39},[33,2939,44],{"class":43},[33,2941,2942],{"class":35,"line":47},[33,2943,51],{"emptyLinePlaceholder":50},[33,2945,2946,2948,2951,2953,2955,2957,2959],{"class":35,"line":54},[33,2947,57],{"class":39},[33,2949,2950],{"class":60}," ListenerStu",[33,2952,65],{"class":64},[33,2954,68],{"class":39},[33,2956,71],{"class":60},[33,2958,74],{"class":64},[33,2960,77],{"class":60},[33,2962,2963],{"class":35,"line":80},[33,2964,83],{"class":64},[33,2966,2967],{"class":35,"line":86},[33,2968,1846],{"class":39},[33,2970,2971,2974,2976,2978,2980,2983],{"class":35,"line":92},[33,2972,2973],{"class":60},"    ListenerStu",[33,2975,98],{"class":64},[33,2977,101],{"class":60},[33,2979,104],{"class":64},[33,2981,2982],{"class":43},"\"listenerstu_node_cpp\"",[33,2984,110],{"class":64},[33,2986,2987],{"class":35,"line":113},[33,2988,116],{"class":64},[33,2990,2991,2993,2995,2997,2999,3001,3003,3005],{"class":35,"line":119},[33,2992,1871],{"class":60},[33,2994,104],{"class":64},[33,2996,128],{"class":127},[33,2998,131],{"class":64},[33,3000,134],{"class":60},[33,3002,137],{"class":64},[33,3004,1884],{"class":43},[33,3006,143],{"class":64},[33,3008,3009],{"class":35,"line":146},[33,3010,149],{"class":64},[33,3012,3013],{"class":35,"line":152},[33,3014,155],{"class":64},[33,3016,3017],{"class":35,"line":158},[33,3018,51],{"emptyLinePlaceholder":50},[33,3020,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039],{"class":35,"line":163},[33,3022,166],{"class":39},[33,3024,169],{"class":60},[33,3026,104],{"class":64},[33,3028,166],{"class":39},[33,3030,177],{"class":176},[33,3032,180],{"class":64},[33,3034,183],{"class":39},[33,3036,1917],{"class":39},[33,3038,189],{"class":176},[33,3040,1922],{"class":64},[33,3042,3043],{"class":35,"line":194},[33,3044,83],{"class":64},[33,3046,3047,3049,3051,3053],{"class":35,"line":199},[33,3048,1569],{"class":60},[33,3050,74],{"class":64},[33,3052,207],{"class":60},[33,3054,210],{"class":64},[33,3056,3057],{"class":35,"line":213},[33,3058,51],{"emptyLinePlaceholder":50},[33,3060,3061,3063,3065,3067,3069,3071,3073,3075,3077,3080],{"class":35,"line":218},[33,3062,1569],{"class":60},[33,3064,74],{"class":64},[33,3066,225],{"class":60},[33,3068,104],{"class":64},[33,3070,230],{"class":60},[33,3072,74],{"class":64},[33,3074,235],{"class":60},[33,3076,238],{"class":64},[33,3078,3079],{"class":60},"ListenerStu",[33,3081,244],{"class":64},[33,3083,3084],{"class":35,"line":247},[33,3085,51],{"emptyLinePlaceholder":50},[33,3087,3088,3090,3092,3094],{"class":35,"line":252},[33,3089,1569],{"class":60},[33,3091,74],{"class":64},[33,3093,259],{"class":60},[33,3095,262],{"class":64},[33,3097,3098,3100,3102],{"class":35,"line":265},[33,3099,1982],{"class":39},[33,3101,271],{"class":127},[33,3103,274],{"class":64},[33,3105,3106],{"class":35,"line":277},[33,3107,280],{"class":64},[16,3109,3110],{},[19,3111],{"alt":21,"src":3112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage471.webp",[24,3114,3116],{"className":316,"code":3115,"language":318,"meta":21,"style":21},"{\n  \"configurations\": [\n    {\n      \"browse\": {\n        \"databaseFilename\": \"${default}\",\n        \"limitSymbolsToIncludedHeaders\": false\n      },\n      \"includePath\": [\n        \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\",\n        \"\u002Fhome\u002Ftungchiahui\u002Fmysource\u002Fros2src\u002F3.ws01_plumbing\u002Fsrc\u002Fbase_interfaces_demo\u002Finclude\u002F**\",\n        \"\u002Fusr\u002Finclude\u002F**\",\n        \"${workspaceFolder}\u002F\",\n**        \"${workspaceFolder}\u002Finstall\u002Fbase_interfaces_demo\u002Finclude\u002F**\"\n      ],\n      \"name\": \"ROS\",\n      \"intelliSenseMode\": \"gcc-x64\",\n      \"compilerPath\": \"\u002Fusr\u002Fbin\u002Fgcc\",\n      \"cStandard\": \"gnu11\",\n      \"cppStandard\": \"c++14\"\n    }\n  ],\n  \"version\": 4\n}\n",[30,3117,3118,3122,3129,3133,3140,3152,3162,3167,3174,3181,3188,3195,3202,3211,3216,3228,3240,3252,3264,3274,3278,3283,3293],{"__ignoreMap":21},[33,3119,3120],{"class":35,"line":36},[33,3121,83],{"class":64},[33,3123,3124,3127],{"class":35,"line":47},[33,3125,3126],{"class":127},"  \"configurations\"",[33,3128,353],{"class":64},[33,3130,3131],{"class":35,"line":54},[33,3132,116],{"class":64},[33,3134,3135,3138],{"class":35,"line":80},[33,3136,3137],{"class":127},"      \"browse\"",[33,3139,332],{"class":64},[33,3141,3142,3145,3147,3150],{"class":35,"line":86},[33,3143,3144],{"class":127},"        \"databaseFilename\"",[33,3146,65],{"class":64},[33,3148,3149],{"class":43},"\"${default}\"",[33,3151,345],{"class":64},[33,3153,3154,3157,3159],{"class":35,"line":92},[33,3155,3156],{"class":127},"        \"limitSymbolsToIncludedHeaders\"",[33,3158,65],{"class":64},[33,3160,3161],{"class":127},"false\n",[33,3163,3164],{"class":35,"line":113},[33,3165,3166],{"class":64},"      },\n",[33,3168,3169,3172],{"class":35,"line":119},[33,3170,3171],{"class":127},"      \"includePath\"",[33,3173,353],{"class":64},[33,3175,3176,3179],{"class":35,"line":146},[33,3177,3178],{"class":43},"        \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"",[33,3180,345],{"class":64},[33,3182,3183,3186],{"class":35,"line":152},[33,3184,3185],{"class":43},"        \"\u002Fhome\u002Ftungchiahui\u002Fmysource\u002Fros2src\u002F3.ws01_plumbing\u002Fsrc\u002Fbase_interfaces_demo\u002Finclude\u002F**\"",[33,3187,345],{"class":64},[33,3189,3190,3193],{"class":35,"line":158},[33,3191,3192],{"class":43},"        \"\u002Fusr\u002Finclude\u002F**\"",[33,3194,345],{"class":64},[33,3196,3197,3200],{"class":35,"line":163},[33,3198,3199],{"class":43},"        \"${workspaceFolder}\u002F\"",[33,3201,345],{"class":64},[33,3203,3204,3208],{"class":35,"line":194},[33,3205,3207],{"class":3206},"s7hpK","**",[33,3209,3210],{"class":43},"        \"${workspaceFolder}\u002Finstall\u002Fbase_interfaces_demo\u002Finclude\u002F**\"\n",[33,3212,3213],{"class":35,"line":199},[33,3214,3215],{"class":64},"      ],\n",[33,3217,3218,3221,3223,3226],{"class":35,"line":213},[33,3219,3220],{"class":127},"      \"name\"",[33,3222,65],{"class":64},[33,3224,3225],{"class":43},"\"ROS\"",[33,3227,345],{"class":64},[33,3229,3230,3233,3235,3238],{"class":35,"line":218},[33,3231,3232],{"class":127},"      \"intelliSenseMode\"",[33,3234,65],{"class":64},[33,3236,3237],{"class":43},"\"gcc-x64\"",[33,3239,345],{"class":64},[33,3241,3242,3245,3247,3250],{"class":35,"line":247},[33,3243,3244],{"class":127},"      \"compilerPath\"",[33,3246,65],{"class":64},[33,3248,3249],{"class":43},"\"\u002Fusr\u002Fbin\u002Fgcc\"",[33,3251,345],{"class":64},[33,3253,3254,3257,3259,3262],{"class":35,"line":252},[33,3255,3256],{"class":127},"      \"cStandard\"",[33,3258,65],{"class":64},[33,3260,3261],{"class":43},"\"gnu11\"",[33,3263,345],{"class":64},[33,3265,3266,3269,3271],{"class":35,"line":265},[33,3267,3268],{"class":127},"      \"cppStandard\"",[33,3270,65],{"class":64},[33,3272,3273],{"class":43},"\"c++14\"\n",[33,3275,3276],{"class":35,"line":277},[33,3277,149],{"class":64},[33,3279,3280],{"class":35,"line":496},[33,3281,3282],{"class":64},"  ],\n",[33,3284,3285,3288,3290],{"class":35,"line":503},[33,3286,3287],{"class":127},"  \"version\"",[33,3289,65],{"class":64},[33,3291,3292],{"class":127},"4\n",[33,3294,3295],{"class":35,"line":511},[33,3296,280],{"class":64},[16,3298,3299],{},[19,3300],{"alt":21,"src":3301},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage472.webp",[16,3303,3304],{},[19,3305],{"alt":21,"src":3306},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage473.webp",[16,3308,3309],{},[19,3310],{"alt":21,"src":3311},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage474.webp",[16,3313,3314],{},[19,3315],{"alt":21,"src":3316},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage475.webp",[562,3318],{},[16,3320,3321],{},[19,3322],{"alt":21,"src":3323},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage476.webp",[16,3325,3326],{},[19,3327],{"alt":21,"src":3328},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage477.webp",[16,3330,3331],{},[19,3332],{"alt":21,"src":3333},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage478.webp",[16,3335,3336],{},[19,3337],{"alt":21,"src":3338},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage479.webp",[16,3340,3341],{},"不要忘记字符串转成C风格的。",[16,3343,3344],{},[19,3345],{"alt":21,"src":3346},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage480.webp",[24,3348,3350],{"className":26,"code":3349,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass TalkerStu: public rclcpp::Node\n{\npublic:\n    TalkerStu():Node(\"talkerstu_node_cpp\"),age(0)\n    {\n      RCLCPP_INFO(this->get_logger(),\"发布节点创建！\");\n      publisher_ = this->create_publisher\u003Cbase_interfaces_demo::msg::Student>(\"chatter_stu\",10);\n      timer_ = this->create_wall_timer(500ms,std::bind(&TalkerStu::on_timer_callback,this));\n    }\nprivate:\n    void on_timer_callback()\n    {\n        auto stu = base_interfaces_demo::msg::Student();\n        stu.name = \"葫芦娃\";\n        stu.age = age;\n        stu.height = 2.20f;\n        age++;\n        publisher_->publish(stu);\n        RCLCPP_INFO(this->get_logger(),\"发布的消息:(%s,%d,%.2f)\",stu.name.c_str(),stu.age,stu.height);\n    }\n    rclcpp::Publisher\u003Cbase_interfaces_demo::msg::Student>::SharedPtr publisher_;\n    rclcpp::TimerBase::SharedPtr timer_;\n    int32_t age;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CTalkerStu>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,3351,3352,3358,3365,3369,3383,3387,3403,3407,3411,3435,3439,3457,3492,3533,3537,3541,3550,3554,3578,3590,3600,3615,3624,3634,3673,3677,3699,3709,3716,3720,3724,3746,3750,3760,3764,3786,3790,3801,3810],{"__ignoreMap":21},[33,3353,3354,3356],{"class":35,"line":36},[33,3355,40],{"class":39},[33,3357,44],{"class":43},[33,3359,3360,3362],{"class":35,"line":47},[33,3361,40],{"class":39},[33,3363,3364],{"class":43}," \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n",[33,3366,3367],{"class":35,"line":54},[33,3368,51],{"emptyLinePlaceholder":50},[33,3370,3371,3373,3375,3377,3379,3381],{"class":35,"line":80},[33,3372,1265],{"class":39},[33,3374,1268],{"class":39},[33,3376,1271],{"class":60},[33,3378,74],{"class":64},[33,3380,1276],{"class":60},[33,3382,274],{"class":64},[33,3384,3385],{"class":35,"line":86},[33,3386,51],{"emptyLinePlaceholder":50},[33,3388,3389,3391,3393,3395,3397,3399,3401],{"class":35,"line":92},[33,3390,57],{"class":39},[33,3392,2755],{"class":60},[33,3394,65],{"class":64},[33,3396,68],{"class":39},[33,3398,71],{"class":60},[33,3400,74],{"class":64},[33,3402,77],{"class":60},[33,3404,3405],{"class":35,"line":113},[33,3406,83],{"class":64},[33,3408,3409],{"class":35,"line":119},[33,3410,1846],{"class":39},[33,3412,3413,3415,3417,3419,3421,3423,3426,3429,3431,3433],{"class":35,"line":146},[33,3414,2778],{"class":60},[33,3416,98],{"class":64},[33,3418,101],{"class":60},[33,3420,104],{"class":64},[33,3422,2787],{"class":43},[33,3424,3425],{"class":64},"),",[33,3427,3428],{"class":60},"age",[33,3430,104],{"class":64},[33,3432,1329],{"class":127},[33,3434,110],{"class":64},[33,3436,3437],{"class":35,"line":152},[33,3438,116],{"class":64},[33,3440,3441,3443,3445,3447,3449,3451,3453,3455],{"class":35,"line":158},[33,3442,122],{"class":60},[33,3444,104],{"class":64},[33,3446,128],{"class":127},[33,3448,131],{"class":64},[33,3450,134],{"class":60},[33,3452,137],{"class":64},[33,3454,977],{"class":43},[33,3456,143],{"class":64},[33,3458,3459,3461,3463,3465,3467,3469,3472,3474,3476,3479,3481,3483,3486,3488,3490],{"class":35,"line":163},[33,3460,1358],{"class":64},[33,3462,1361],{"class":39},[33,3464,1364],{"class":127},[33,3466,1367],{"class":64},[33,3468,238],{"class":39},[33,3470,3471],{"class":60},"base_interfaces_demo",[33,3473,74],{"class":64},[33,3475,1377],{"class":60},[33,3477,3478],{"class":64},"::Student",[33,3480,1383],{"class":39},[33,3482,104],{"class":64},[33,3484,3485],{"class":43},"\"chatter_stu\"",[33,3487,1391],{"class":64},[33,3489,1394],{"class":127},[33,3491,143],{"class":64},[33,3493,3494,3496,3498,3500,3502,3504,3506,3509,3512,3514,3516,3518,3520,3522,3524,3526,3529,3531],{"class":35,"line":194},[33,3495,1401],{"class":64},[33,3497,1361],{"class":39},[33,3499,1364],{"class":127},[33,3501,131],{"class":64},[33,3503,1410],{"class":60},[33,3505,104],{"class":64},[33,3507,3508],{"class":127},"500",[33,3510,3511],{"class":39},"ms",[33,3513,1391],{"class":64},[33,3515,230],{"class":60},[33,3517,74],{"class":64},[33,3519,1427],{"class":60},[33,3521,104],{"class":64},[33,3523,1432],{"class":39},[33,3525,2884],{"class":60},[33,3527,3528],{"class":64},"::on_timer_callback,",[33,3530,128],{"class":127},[33,3532,1442],{"class":64},[33,3534,3535],{"class":35,"line":199},[33,3536,149],{"class":64},[33,3538,3539],{"class":35,"line":213},[33,3540,2244],{"class":39},[33,3542,3543,3545,3548],{"class":35,"line":218},[33,3544,1456],{"class":39},[33,3546,3547],{"class":60}," on_timer_callback",[33,3549,1462],{"class":64},[33,3551,3552],{"class":35,"line":247},[33,3553,116],{"class":64},[33,3555,3556,3559,3562,3564,3567,3569,3571,3573,3576],{"class":35,"line":252},[33,3557,3558],{"class":39},"        auto",[33,3560,3561],{"class":64}," stu ",[33,3563,1361],{"class":39},[33,3565,3566],{"class":60}," base_interfaces_demo",[33,3568,74],{"class":64},[33,3570,1377],{"class":60},[33,3572,74],{"class":64},[33,3574,3575],{"class":60},"Student",[33,3577,262],{"class":64},[33,3579,3580,3583,3585,3588],{"class":35,"line":265},[33,3581,3582],{"class":64},"        stu.name ",[33,3584,1361],{"class":39},[33,3586,3587],{"class":43}," \"葫芦娃\"",[33,3589,274],{"class":64},[33,3591,3592,3595,3597],{"class":35,"line":277},[33,3593,3594],{"class":64},"        stu.age ",[33,3596,1361],{"class":39},[33,3598,3599],{"class":64}," age;\n",[33,3601,3602,3605,3607,3610,3613],{"class":35,"line":496},[33,3603,3604],{"class":64},"        stu.height ",[33,3606,1361],{"class":39},[33,3608,3609],{"class":127}," 2.20",[33,3611,3612],{"class":39},"f",[33,3614,274],{"class":64},[33,3616,3617,3620,3622],{"class":35,"line":503},[33,3618,3619],{"class":64},"        age",[33,3621,1516],{"class":39},[33,3623,274],{"class":64},[33,3625,3626,3629,3631],{"class":35,"line":511},[33,3627,3628],{"class":64},"        publisher_->",[33,3630,1557],{"class":60},[33,3632,3633],{"class":64},"(stu);\n",[33,3635,3636,3638,3640,3642,3644,3646,3648,3651,3653,3655,3658,3660,3663,3665,3668,3670],{"class":35,"line":519},[33,3637,1871],{"class":60},[33,3639,104],{"class":64},[33,3641,128],{"class":127},[33,3643,131],{"class":64},[33,3645,134],{"class":60},[33,3647,137],{"class":64},[33,3649,3650],{"class":43},"\"发布的消息:(",[33,3652,1538],{"class":127},[33,3654,1391],{"class":43},[33,3656,3657],{"class":127},"%d",[33,3659,1391],{"class":43},[33,3661,3662],{"class":127},"%.2f",[33,3664,414],{"class":43},[33,3666,3667],{"class":64},",stu.name.",[33,3669,1546],{"class":60},[33,3671,3672],{"class":64},"(),stu.age,stu.height);\n",[33,3674,3675],{"class":35,"line":525},[33,3676,149],{"class":64},[33,3678,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697],{"class":35,"line":531},[33,3680,1569],{"class":60},[33,3682,74],{"class":64},[33,3684,1574],{"class":60},[33,3686,238],{"class":64},[33,3688,3471],{"class":60},[33,3690,74],{"class":64},[33,3692,1377],{"class":60},[33,3694,74],{"class":64},[33,3696,3575],{"class":60},[33,3698,1589],{"class":64},[33,3700,3701,3703,3705,3707],{"class":35,"line":542},[33,3702,1569],{"class":60},[33,3704,74],{"class":64},[33,3706,1598],{"class":60},[33,3708,1601],{"class":64},[33,3710,3711,3714],{"class":35,"line":548},[33,3712,3713],{"class":39},"    int32_t",[33,3715,3599],{"class":64},[33,3717,3718],{"class":35,"line":1642},[33,3719,155],{"class":64},[33,3721,3722],{"class":35,"line":1647},[33,3723,51],{"emptyLinePlaceholder":50},[33,3725,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744],{"class":35,"line":1658},[33,3727,166],{"class":39},[33,3729,169],{"class":60},[33,3731,104],{"class":64},[33,3733,166],{"class":39},[33,3735,177],{"class":176},[33,3737,180],{"class":64},[33,3739,183],{"class":39},[33,3741,186],{"class":39},[33,3743,189],{"class":176},[33,3745,110],{"class":64},[33,3747,3748],{"class":35,"line":1663},[33,3749,83],{"class":64},[33,3751,3752,3754,3756,3758],{"class":35,"line":1686},[33,3753,202],{"class":60},[33,3755,74],{"class":64},[33,3757,207],{"class":60},[33,3759,210],{"class":64},[33,3761,3762],{"class":35,"line":1691},[33,3763,51],{"emptyLinePlaceholder":50},[33,3765,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784],{"class":35,"line":1702},[33,3767,202],{"class":60},[33,3769,74],{"class":64},[33,3771,225],{"class":60},[33,3773,104],{"class":64},[33,3775,230],{"class":60},[33,3777,74],{"class":64},[33,3779,235],{"class":60},[33,3781,238],{"class":64},[33,3783,2884],{"class":60},[33,3785,244],{"class":64},[33,3787,3788],{"class":35,"line":1711},[33,3789,51],{"emptyLinePlaceholder":50},[33,3791,3793,3795,3797,3799],{"class":35,"line":3792},37,[33,3794,202],{"class":60},[33,3796,74],{"class":64},[33,3798,259],{"class":60},[33,3800,262],{"class":64},[33,3802,3804,3806,3808],{"class":35,"line":3803},38,[33,3805,268],{"class":39},[33,3807,271],{"class":127},[33,3809,274],{"class":64},[33,3811,3813],{"class":35,"line":3812},39,[33,3814,280],{"class":64},[16,3816,3817],{},[19,3818],{"alt":21,"src":3819},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage481.webp",[16,3821,3822],{},[19,3823],{"alt":21,"src":3824},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage482.webp",[16,3826,3827],{},[19,3828],{"alt":21,"src":3829},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage483.webp",[16,3831,3832],{},"虽然发布方可以打印日志，但是不代表信息被正常发出去了。",[16,3834,3835],{},[19,3836],{"alt":21,"src":3837},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage484.webp",[16,3839,3840],{},"这样检验才是真能确定数据被发送出去了。",[562,3842],{},[16,3844,3845],{},[19,3846],{"alt":21,"src":3847},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage485.webp",[16,3849,3850],{},[19,3851],{"alt":21,"src":3852},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage486.webp",[24,3854,3856],{"className":26,"code":3855,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fmsg\u002Fstudent.hpp\"\n\nusing base_interfaces_demo::msg::Student;\n\nclass ListenerStu: public rclcpp::Node\n{\npublic:\n    ListenerStu():Node(\"listenerstu_node_cpp\")\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅方创建!\");\n        Subscription_ = this->create_subscription\u003CStudent>(\"chatter_stu\",10,std::bind(&ListenerStu::do_callback,this,std::placeholders::1));\n    }\nprivate:\n    void do_callback(const Student &stu)\n    {\n        RCLCPP_INFO(this->get_logger(),\"订阅的学生信息:name=%s,age=%d,height=%.2f\",stu.name.c_str(),stu.age,stu.height);\n    }\n_    rclcpp::Subscription\u003CStudent>::SharedPtr Subscription_;\n};\n\nint main(int argc, char * argv[])\n{\n    rclcpp::init(argc,argv);\n\n    rclcpp::spin(std::make_shared\u003CListenerStu>());\n\n    rclcpp::shutdown();\n    return 0;\n}\n",[30,3857,3858,3864,3870,3874,3887,3891,3907,3911,3915,3929,3933,3951,4008,4012,4016,4036,4040,4077,4081,4100,4104,4108,4130,4134,4144,4148,4170,4174,4184,4192],{"__ignoreMap":21},[33,3859,3860,3862],{"class":35,"line":36},[33,3861,40],{"class":39},[33,3863,44],{"class":43},[33,3865,3866,3868],{"class":35,"line":47},[33,3867,40],{"class":39},[33,3869,3364],{"class":43},[33,3871,3872],{"class":35,"line":54},[33,3873,51],{"emptyLinePlaceholder":50},[33,3875,3876,3878,3880,3882,3884],{"class":35,"line":80},[33,3877,1265],{"class":39},[33,3879,3566],{"class":60},[33,3881,74],{"class":64},[33,3883,1377],{"class":60},[33,3885,3886],{"class":64},"::Student;\n",[33,3888,3889],{"class":35,"line":86},[33,3890,51],{"emptyLinePlaceholder":50},[33,3892,3893,3895,3897,3899,3901,3903,3905],{"class":35,"line":92},[33,3894,57],{"class":39},[33,3896,2950],{"class":60},[33,3898,65],{"class":64},[33,3900,68],{"class":39},[33,3902,71],{"class":60},[33,3904,74],{"class":64},[33,3906,77],{"class":60},[33,3908,3909],{"class":35,"line":113},[33,3910,83],{"class":64},[33,3912,3913],{"class":35,"line":119},[33,3914,1846],{"class":39},[33,3916,3917,3919,3921,3923,3925,3927],{"class":35,"line":146},[33,3918,2973],{"class":60},[33,3920,98],{"class":64},[33,3922,101],{"class":60},[33,3924,104],{"class":64},[33,3926,2982],{"class":43},[33,3928,110],{"class":64},[33,3930,3931],{"class":35,"line":152},[33,3932,116],{"class":64},[33,3934,3935,3937,3939,3941,3943,3945,3947,3949],{"class":35,"line":158},[33,3936,1871],{"class":60},[33,3938,104],{"class":64},[33,3940,128],{"class":127},[33,3942,131],{"class":64},[33,3944,134],{"class":60},[33,3946,137],{"class":64},[33,3948,1884],{"class":43},[33,3950,143],{"class":64},[33,3952,3953,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006],{"class":35,"line":163},[33,3954,3955],{"class":64},"        Subscription_ ",[33,3957,1361],{"class":39},[33,3959,1364],{"class":127},[33,3961,2180],{"class":64},[33,3963,238],{"class":39},[33,3965,3575],{"class":64},[33,3967,1383],{"class":39},[33,3969,104],{"class":64},[33,3971,3485],{"class":43},[33,3973,1391],{"class":64},[33,3975,1394],{"class":127},[33,3977,1391],{"class":64},[33,3979,230],{"class":60},[33,3981,74],{"class":64},[33,3983,1427],{"class":60},[33,3985,104],{"class":64},[33,3987,1432],{"class":39},[33,3989,3079],{"class":60},[33,3991,2217],{"class":64},[33,3993,128],{"class":127},[33,3995,1391],{"class":64},[33,3997,230],{"class":60},[33,3999,74],{"class":64},[33,4001,2228],{"class":60},[33,4003,74],{"class":64},[33,4005,1415],{"class":127},[33,4007,1442],{"class":64},[33,4009,4010],{"class":35,"line":194},[33,4011,149],{"class":64},[33,4013,4014],{"class":35,"line":199},[33,4015,2244],{"class":39},[33,4017,4018,4020,4022,4024,4026,4029,4031,4034],{"class":35,"line":213},[33,4019,1456],{"class":39},[33,4021,2251],{"class":60},[33,4023,104],{"class":64},[33,4025,2256],{"class":39},[33,4027,4028],{"class":60}," Student",[33,4030,2269],{"class":39},[33,4032,4033],{"class":176},"stu",[33,4035,110],{"class":64},[33,4037,4038],{"class":35,"line":218},[33,4039,116],{"class":64},[33,4041,4042,4044,4046,4048,4050,4052,4054,4057,4059,4062,4064,4067,4069,4071,4073,4075],{"class":35,"line":247},[33,4043,1871],{"class":60},[33,4045,104],{"class":64},[33,4047,128],{"class":127},[33,4049,131],{"class":64},[33,4051,134],{"class":60},[33,4053,137],{"class":64},[33,4055,4056],{"class":43},"\"订阅的学生信息:name=",[33,4058,1538],{"class":127},[33,4060,4061],{"class":43},",age=",[33,4063,3657],{"class":127},[33,4065,4066],{"class":43},",height=",[33,4068,3662],{"class":127},[33,4070,369],{"class":43},[33,4072,3667],{"class":64},[33,4074,1546],{"class":60},[33,4076,3672],{"class":64},[33,4078,4079],{"class":35,"line":252},[33,4080,149],{"class":64},[33,4082,4083,4086,4089,4091,4093,4095,4097],{"class":35,"line":265},[33,4084,4085],{"class":64},"_    ",[33,4087,4088],{"class":60},"rclcpp",[33,4090,74],{"class":64},[33,4092,2318],{"class":60},[33,4094,238],{"class":64},[33,4096,3575],{"class":60},[33,4098,4099],{"class":64},">::SharedPtr Subscription_;\n",[33,4101,4102],{"class":35,"line":277},[33,4103,155],{"class":64},[33,4105,4106],{"class":35,"line":496},[33,4107,51],{"emptyLinePlaceholder":50},[33,4109,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128],{"class":35,"line":503},[33,4111,166],{"class":39},[33,4113,169],{"class":60},[33,4115,104],{"class":64},[33,4117,166],{"class":39},[33,4119,177],{"class":176},[33,4121,180],{"class":64},[33,4123,183],{"class":39},[33,4125,1917],{"class":39},[33,4127,189],{"class":176},[33,4129,1922],{"class":64},[33,4131,4132],{"class":35,"line":511},[33,4133,83],{"class":64},[33,4135,4136,4138,4140,4142],{"class":35,"line":519},[33,4137,1569],{"class":60},[33,4139,74],{"class":64},[33,4141,207],{"class":60},[33,4143,210],{"class":64},[33,4145,4146],{"class":35,"line":525},[33,4147,51],{"emptyLinePlaceholder":50},[33,4149,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168],{"class":35,"line":531},[33,4151,1569],{"class":60},[33,4153,74],{"class":64},[33,4155,225],{"class":60},[33,4157,104],{"class":64},[33,4159,230],{"class":60},[33,4161,74],{"class":64},[33,4163,235],{"class":60},[33,4165,238],{"class":64},[33,4167,3079],{"class":60},[33,4169,244],{"class":64},[33,4171,4172],{"class":35,"line":542},[33,4173,51],{"emptyLinePlaceholder":50},[33,4175,4176,4178,4180,4182],{"class":35,"line":548},[33,4177,1569],{"class":60},[33,4179,74],{"class":64},[33,4181,259],{"class":60},[33,4183,262],{"class":64},[33,4185,4186,4188,4190],{"class":35,"line":1642},[33,4187,1982],{"class":39},[33,4189,271],{"class":127},[33,4191,274],{"class":64},[33,4193,4194],{"class":35,"line":1647},[33,4195,280],{"class":64},[16,4197,4198],{},[19,4199],{"alt":21,"src":4200},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage487.webp",[16,4202,4203],{},[19,4204],{"alt":21,"src":4205},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage488.webp",[12,4207,4208],{"id":4208},"话题通信_rqt查看计算图",[16,4210,4211],{},[19,4212],{"alt":21,"src":4213},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage489.webp",[16,4215,4216],{},[19,4217],{"alt":21,"src":4218},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage490.webp",[16,4220,4221],{},[19,4222],{"alt":21,"src":4223},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage491.webp",[16,4225,4226],{},[19,4227],{"alt":21,"src":4228},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage492.webp",[562,4230],{},[16,4232,4233],{},[19,4234],{"alt":21,"src":4235},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage493.webp",[16,4237,4238],{},"图形化工具RQT",[16,4240,4241],{},[19,4242],{"alt":21,"src":4243},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage494.webp",[16,4245,4246],{},[19,4247],{"alt":21,"src":4248},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage495.webp",[16,4250,4251],{},[19,4252],{"alt":21,"src":4253},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage496.webp",[16,4255,4256],{},[19,4257],{"alt":21,"src":4258},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage497.webp",[16,4260,4261],{},[19,4262],{"alt":21,"src":4263},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage498.webp",[12,4265,4266],{"id":4266},"服务通信_理论",[16,4268,4269],{},[19,4270],{"alt":21,"src":4271},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage499.webp",[16,4273,4274],{},[19,4275],{"alt":21,"src":4276},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage500.webp",[16,4278,4279],{},[19,4280],{"alt":21,"src":4281},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage501.webp",[16,4283,4284],{},"只能有一个服务端，可以有多个客户端，每个客户端都可以向服务端发送请求。（当然可以有多个服务端，但是会出很多逻辑问题，这是极其不合理的，禁止使用）",[16,4286,4287],{},[19,4288],{"alt":21,"src":4289},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage502.webp",[12,4291,4293],{"id":4292},"服务通信_实验1_服务端实现c","服务通信_实验1_服务端实现(C++)",[16,4295,4296],{},[19,4297],{"alt":21,"src":4298},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage503.webp",[16,4300,4301],{},[19,4302],{"alt":21,"src":4303},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage504.webp",[16,4305,4306],{},"先开服务端，然后从客户端提交两个整数，到服务端之后，服务端会解析数据，然后求和，并返回给客户端。",[16,4308,4309],{},[19,4310],{"alt":21,"src":4311},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage505.webp",[16,4313,4314],{},[19,4315],{"alt":21,"src":4316},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage506.webp",[16,4318,4319],{},[19,4320],{"alt":21,"src":4321},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage507.webp",[16,4323,4324],{},[19,4325],{"alt":21,"src":4326},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage508.webp",[24,4328,4330],{"className":1727,"code":4329,"language":1729,"meta":21,"style":21},"ros2 pkg create cpp02_service --build-type ament_cmake --dependencies rclcpp base_interfaces_demo --node-name demo01_server\n",[30,4331,4332],{"__ignoreMap":21},[33,4333,4334,4336,4338,4341,4344,4347,4350,4353,4355,4357,4360],{"class":35,"line":36},[33,4335,1736],{"class":60},[33,4337,2531],{"class":43},[33,4339,4340],{"class":43}," create",[33,4342,4343],{"class":43}," cpp02_service",[33,4345,4346],{"class":127}," --build-type",[33,4348,4349],{"class":43}," ament_cmake",[33,4351,4352],{"class":127}," --dependencies",[33,4354,71],{"class":43},[33,4356,3566],{"class":43},[33,4358,4359],{"class":127}," --node-name",[33,4361,4362],{"class":43}," demo01_server\n",[562,4364],{},[16,4366,4367],{},[19,4368],{"alt":21,"src":4369},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage509.webp",[16,4371,4372],{},[19,4373],{"alt":21,"src":4374},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage510.webp",[16,4376,4377],{},[19,4378],{"alt":21,"src":4379},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage511.webp",[16,4381,4382],{},"如果之前用过demo_interfaces_demo，那么一般是不用再配置package.xml了。",[16,4384,4385],{},[19,4386],{"alt":21,"src":4387},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage512.webp",[16,4389,4390],{},[19,4391],{"alt":21,"src":4392},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage513.webp",[16,4394,4395],{},[19,4396],{"alt":21,"src":4397},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage514.webp",[16,4399,4400],{},[19,4401],{"alt":21,"src":4402},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage515.webp",[16,4404,4405],{},[19,4406],{"alt":21,"src":4407},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage516.webp",[16,4409,4410],{},"记得文件名首字母要大写！",[16,4412,4413],{},[19,4414],{"alt":21,"src":4415},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage517.webp",[16,4417,4418],{},[19,4419],{"alt":21,"src":4420},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage518.webp",[16,4422,4423],{},[19,4424],{"alt":21,"src":4425},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage519.webp",[16,4427,4428],{},[19,4429],{"alt":21,"src":4430},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage520.webp",[16,4432,4433],{},[19,4434],{"alt":21,"src":4435},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage521.webp",[16,4437,4438],{},[19,4439],{"alt":21,"src":4440},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage522.webp",[16,4442,4443],{},[19,4444],{"alt":21,"src":4445},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage523.webp",[16,4447,4448],{},[19,4449],{"alt":21,"src":4450},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage524.webp",[16,4452,4453],{},[19,4454],{"alt":21,"src":4455},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage525.webp",[16,4457,4458],{},[19,4459],{"alt":21,"src":4460},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage526.webp",[16,4462,4463],{},[19,4464],{"alt":21,"src":4465},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage527.webp",[16,4467,4468],{},"这是另一个验证方式",[562,4470],{},[16,4472,4473],{},[19,4474],{"alt":21,"src":4475},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage528.webp",[16,4477,4478],{},[19,4479],{"alt":21,"src":4480},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage529.webp",[24,4482,4484],{"className":26,"code":4483,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsServer: public rclcpp::Node\n{\n  public:\n    AddIntsServer():Node(\"add_ints_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"服务端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CAddIntsServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,4485,4486,4492,4496,4513,4517,4521,4537,4541,4560,4564,4568,4572,4594,4598,4608,4612,4635,4639,4649,4657],{"__ignoreMap":21},[33,4487,4488,4490],{"class":35,"line":36},[33,4489,40],{"class":39},[33,4491,44],{"class":43},[33,4493,4494],{"class":35,"line":47},[33,4495,51],{"emptyLinePlaceholder":50},[33,4497,4498,4500,4503,4505,4507,4509,4511],{"class":35,"line":54},[33,4499,57],{"class":39},[33,4501,4502],{"class":60}," AddIntsServer",[33,4504,65],{"class":64},[33,4506,68],{"class":39},[33,4508,71],{"class":60},[33,4510,74],{"class":64},[33,4512,77],{"class":60},[33,4514,4515],{"class":35,"line":80},[33,4516,83],{"class":64},[33,4518,4519],{"class":35,"line":86},[33,4520,89],{"class":39},[33,4522,4523,4526,4528,4530,4532,4535],{"class":35,"line":92},[33,4524,4525],{"class":60},"    AddIntsServer",[33,4527,98],{"class":64},[33,4529,101],{"class":60},[33,4531,104],{"class":64},[33,4533,4534],{"class":43},"\"add_ints_server_node_cpp\"",[33,4536,110],{"class":64},[33,4538,4539],{"class":35,"line":113},[33,4540,116],{"class":64},[33,4542,4543,4545,4547,4549,4551,4553,4555,4558],{"class":35,"line":119},[33,4544,122],{"class":60},[33,4546,104],{"class":64},[33,4548,128],{"class":127},[33,4550,131],{"class":64},[33,4552,134],{"class":60},[33,4554,137],{"class":64},[33,4556,4557],{"class":43},"\"服务端节点创建！\"",[33,4559,143],{"class":64},[33,4561,4562],{"class":35,"line":146},[33,4563,149],{"class":64},[33,4565,4566],{"class":35,"line":152},[33,4567,155],{"class":64},[33,4569,4570],{"class":35,"line":158},[33,4571,51],{"emptyLinePlaceholder":50},[33,4573,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592],{"class":35,"line":163},[33,4575,166],{"class":39},[33,4577,169],{"class":60},[33,4579,104],{"class":64},[33,4581,166],{"class":39},[33,4583,177],{"class":176},[33,4585,180],{"class":64},[33,4587,183],{"class":39},[33,4589,186],{"class":39},[33,4591,189],{"class":176},[33,4593,110],{"class":64},[33,4595,4596],{"class":35,"line":194},[33,4597,83],{"class":64},[33,4599,4600,4602,4604,4606],{"class":35,"line":199},[33,4601,202],{"class":60},[33,4603,74],{"class":64},[33,4605,207],{"class":60},[33,4607,210],{"class":64},[33,4609,4610],{"class":35,"line":213},[33,4611,51],{"emptyLinePlaceholder":50},[33,4613,4614,4616,4618,4620,4622,4624,4626,4628,4630,4633],{"class":35,"line":218},[33,4615,202],{"class":60},[33,4617,74],{"class":64},[33,4619,225],{"class":60},[33,4621,104],{"class":64},[33,4623,230],{"class":60},[33,4625,74],{"class":64},[33,4627,235],{"class":60},[33,4629,238],{"class":64},[33,4631,4632],{"class":60},"AddIntsServer",[33,4634,244],{"class":64},[33,4636,4637],{"class":35,"line":247},[33,4638,51],{"emptyLinePlaceholder":50},[33,4640,4641,4643,4645,4647],{"class":35,"line":252},[33,4642,202],{"class":60},[33,4644,74],{"class":64},[33,4646,259],{"class":60},[33,4648,262],{"class":64},[33,4650,4651,4653,4655],{"class":35,"line":265},[33,4652,268],{"class":39},[33,4654,271],{"class":127},[33,4656,274],{"class":64},[33,4658,4659],{"class":35,"line":277},[33,4660,280],{"class":64},[16,4662,4663],{},[19,4664],{"alt":21,"src":4665},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage530.webp",[16,4667,4668],{},[19,4669],{"alt":21,"src":4670},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage531.webp",[16,4672,4673],{},"服务端是一直要挂起的",[16,4675,4676],{},[19,4677],{"alt":21,"src":4678},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage532.webp",[16,4680,4681],{},"客户端是执行完毕就结束返回到终端的",[16,4683,4684],{},[19,4685],{"alt":21,"src":4686},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage533.webp",[16,4688,4689],{},"所以客户端不用调用spin函数，直接创建对象即可。",[16,4691,4692],{},[19,4693],{"alt":21,"src":4694},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage534.webp",[24,4696,4698],{"className":26,"code":4697,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n\u002F\u002F   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,4699,4700,4706,4710,4727,4731,4735,4751,4755,4774,4778,4782,4786,4808,4812,4822,4826,4832,4856,4860,4870,4878],{"__ignoreMap":21},[33,4701,4702,4704],{"class":35,"line":36},[33,4703,40],{"class":39},[33,4705,44],{"class":43},[33,4707,4708],{"class":35,"line":47},[33,4709,51],{"emptyLinePlaceholder":50},[33,4711,4712,4714,4717,4719,4721,4723,4725],{"class":35,"line":54},[33,4713,57],{"class":39},[33,4715,4716],{"class":60}," AddIntsClient",[33,4718,65],{"class":64},[33,4720,68],{"class":39},[33,4722,71],{"class":60},[33,4724,74],{"class":64},[33,4726,77],{"class":60},[33,4728,4729],{"class":35,"line":80},[33,4730,83],{"class":64},[33,4732,4733],{"class":35,"line":86},[33,4734,89],{"class":39},[33,4736,4737,4740,4742,4744,4746,4749],{"class":35,"line":92},[33,4738,4739],{"class":60},"    AddIntsClient",[33,4741,98],{"class":64},[33,4743,101],{"class":60},[33,4745,104],{"class":64},[33,4747,4748],{"class":43},"\"add_ints_client_node_cpp\"",[33,4750,110],{"class":64},[33,4752,4753],{"class":35,"line":113},[33,4754,116],{"class":64},[33,4756,4757,4759,4761,4763,4765,4767,4769,4772],{"class":35,"line":119},[33,4758,122],{"class":60},[33,4760,104],{"class":64},[33,4762,128],{"class":127},[33,4764,131],{"class":64},[33,4766,134],{"class":60},[33,4768,137],{"class":64},[33,4770,4771],{"class":43},"\"客户端节点创建！\"",[33,4773,143],{"class":64},[33,4775,4776],{"class":35,"line":146},[33,4777,149],{"class":64},[33,4779,4780],{"class":35,"line":152},[33,4781,155],{"class":64},[33,4783,4784],{"class":35,"line":158},[33,4785,51],{"emptyLinePlaceholder":50},[33,4787,4788,4790,4792,4794,4796,4798,4800,4802,4804,4806],{"class":35,"line":163},[33,4789,166],{"class":39},[33,4791,169],{"class":60},[33,4793,104],{"class":64},[33,4795,166],{"class":39},[33,4797,177],{"class":176},[33,4799,180],{"class":64},[33,4801,183],{"class":39},[33,4803,186],{"class":39},[33,4805,189],{"class":176},[33,4807,110],{"class":64},[33,4809,4810],{"class":35,"line":194},[33,4811,83],{"class":64},[33,4813,4814,4816,4818,4820],{"class":35,"line":199},[33,4815,202],{"class":60},[33,4817,74],{"class":64},[33,4819,207],{"class":60},[33,4821,210],{"class":64},[33,4823,4824],{"class":35,"line":213},[33,4825,51],{"emptyLinePlaceholder":50},[33,4827,4828],{"class":35,"line":218},[33,4829,4831],{"class":4830},"sJ8bj","\u002F\u002F   rclcpp::spin(std::make_shared\u003CAddIntsClient>());\n",[33,4833,4834,4837,4840,4842,4844,4846,4848,4850,4853],{"class":35,"line":247},[33,4835,4836],{"class":39},"  auto",[33,4838,4839],{"class":64}," client ",[33,4841,1361],{"class":39},[33,4843,1271],{"class":60},[33,4845,74],{"class":64},[33,4847,235],{"class":60},[33,4849,238],{"class":64},[33,4851,4852],{"class":60},"AddIntsClient",[33,4854,4855],{"class":64},">();\n",[33,4857,4858],{"class":35,"line":252},[33,4859,51],{"emptyLinePlaceholder":50},[33,4861,4862,4864,4866,4868],{"class":35,"line":265},[33,4863,202],{"class":60},[33,4865,74],{"class":64},[33,4867,259],{"class":60},[33,4869,262],{"class":64},[33,4871,4872,4874,4876],{"class":35,"line":277},[33,4873,268],{"class":39},[33,4875,271],{"class":127},[33,4877,274],{"class":64},[33,4879,4880],{"class":35,"line":496},[33,4881,280],{"class":64},[16,4883,4884],{},"然后还要编辑配置文件",[16,4886,4887],{},[19,4888],{"alt":21,"src":4889},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage535.webp",[16,4891,4892],{},"package.xml现在不用修改",[16,4894,4895],{},[19,4896],{"alt":21,"src":4897},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage536.webp",[16,4899,4900],{},[19,4901],{"alt":21,"src":4902},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage537.webp",[16,4904,4905],{},[19,4906],{"alt":21,"src":4907},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage538.webp",[16,4909,4910],{},[19,4911],{"alt":21,"src":4912},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage539.webp",[16,4914,4915],{},[19,4916],{"alt":21,"src":4917},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage540.webp",[562,4919],{},[16,4921,4922],{},[19,4923],{"alt":21,"src":4924},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage541.webp",[16,4926,4927],{},[19,4928],{"alt":21,"src":4929},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage542.webp",[16,4931,4932],{},[19,4933],{"alt":21,"src":4934},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage543.webp",[16,4936,4937],{},[19,4938],{"alt":21,"src":4939},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage544.webp",[16,4941,4942],{},[19,4943],{"alt":21,"src":4944},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage545.webp",[16,4946,4947],{},"有4个入口参数，但是后两个有默认值，所以我们只用管前2个。",[16,4949,4950],{},"第一个入口参数就是一个话题名称，字符串",[16,4952,4953],{},"第二个入口参数是回调函数",[16,4955,4956],{},"返回值是一个service类型的智能指针",[16,4958,4959],{},[19,4960],{"alt":21,"src":4961},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage546.webp",[16,4963,4964],{},[19,4965],{"alt":21,"src":4966},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage547.webp",[16,4968,4969],{},[19,4970],{"alt":21,"src":4971},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage548.webp",[16,4973,4974],{},[19,4975],{"alt":21,"src":4976},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage549.webp",[16,4978,4979],{},[19,4980],{"alt":21,"src":4981},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage550.webp",[16,4983,4984],{},[19,4985],{"alt":21,"src":4986},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage551.webp",[16,4988,4989],{},[19,4990],{"alt":21,"src":4991},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage552.webp",[16,4993,4994],{},[19,4995],{"alt":21,"src":4996},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage553.webp",[24,4998,5000],{"className":26,"code":4999,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\n\nclass AddIntsServer: public rclcpp::Node\n{\n  public:\n    AddIntsServer():Node(\"add_ints_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"服务端节点创建！\");\n      server_ = this->create_service\u003Cbase_interfaces_demo::srv::AddInts>(\"add_ints\",std::bind(&AddIntsServer::add_callback,this,std::placeholders::_1,std::placeholders::2));\n    }\n  private:\n    void add_callback(const AddInts::Request::SharedPtr req,AddInts::Response::SharedPtr res)\n    {\n      res->sum = req->num1 + (*req).num2;\n      RCLCPP_INFO(this->get_logger(),\"%d + %d = %d\",req->num1,req->num2,res->sum);\n    }\n_    rclcpp::Service\u003Cbase_interfaces_demo::srv::AddInts>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CAddIntsServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,5001,5002,5008,5015,5019,5033,5037,5053,5057,5061,5075,5079,5097,5169,5173,5177,5223,5227,5249,5282,5286,5312,5316,5320,5342,5346,5356,5360,5382,5386,5396,5404],{"__ignoreMap":21},[33,5003,5004,5006],{"class":35,"line":36},[33,5005,40],{"class":39},[33,5007,44],{"class":43},[33,5009,5010,5012],{"class":35,"line":47},[33,5011,40],{"class":39},[33,5013,5014],{"class":43}," \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n",[33,5016,5017],{"class":35,"line":54},[33,5018,51],{"emptyLinePlaceholder":50},[33,5020,5021,5023,5025,5027,5030],{"class":35,"line":80},[33,5022,1265],{"class":39},[33,5024,3566],{"class":60},[33,5026,74],{"class":64},[33,5028,5029],{"class":60},"srv",[33,5031,5032],{"class":64},"::AddInts;\n",[33,5034,5035],{"class":35,"line":86},[33,5036,51],{"emptyLinePlaceholder":50},[33,5038,5039,5041,5043,5045,5047,5049,5051],{"class":35,"line":92},[33,5040,57],{"class":39},[33,5042,4502],{"class":60},[33,5044,65],{"class":64},[33,5046,68],{"class":39},[33,5048,71],{"class":60},[33,5050,74],{"class":64},[33,5052,77],{"class":60},[33,5054,5055],{"class":35,"line":113},[33,5056,83],{"class":64},[33,5058,5059],{"class":35,"line":119},[33,5060,89],{"class":39},[33,5062,5063,5065,5067,5069,5071,5073],{"class":35,"line":146},[33,5064,4525],{"class":60},[33,5066,98],{"class":64},[33,5068,101],{"class":60},[33,5070,104],{"class":64},[33,5072,4534],{"class":43},[33,5074,110],{"class":64},[33,5076,5077],{"class":35,"line":152},[33,5078,116],{"class":64},[33,5080,5081,5083,5085,5087,5089,5091,5093,5095],{"class":35,"line":158},[33,5082,122],{"class":60},[33,5084,104],{"class":64},[33,5086,128],{"class":127},[33,5088,131],{"class":64},[33,5090,134],{"class":60},[33,5092,137],{"class":64},[33,5094,4557],{"class":43},[33,5096,143],{"class":64},[33,5098,5099,5102,5104,5106,5109,5111,5113,5115,5117,5120,5122,5124,5127,5129,5131,5133,5135,5137,5139,5141,5144,5146,5148,5150,5152,5154,5157,5159,5161,5163,5165,5167],{"class":35,"line":163},[33,5100,5101],{"class":64},"      server_ ",[33,5103,1361],{"class":39},[33,5105,1364],{"class":127},[33,5107,5108],{"class":64},"->create_service",[33,5110,238],{"class":39},[33,5112,3471],{"class":60},[33,5114,74],{"class":64},[33,5116,5029],{"class":60},[33,5118,5119],{"class":64},"::AddInts",[33,5121,1383],{"class":39},[33,5123,104],{"class":64},[33,5125,5126],{"class":43},"\"add_ints\"",[33,5128,1391],{"class":64},[33,5130,230],{"class":60},[33,5132,74],{"class":64},[33,5134,1427],{"class":60},[33,5136,104],{"class":64},[33,5138,1432],{"class":39},[33,5140,4632],{"class":60},[33,5142,5143],{"class":64},"::add_callback,",[33,5145,128],{"class":127},[33,5147,1391],{"class":64},[33,5149,230],{"class":60},[33,5151,74],{"class":64},[33,5153,2228],{"class":60},[33,5155,5156],{"class":64},"::_1,",[33,5158,230],{"class":60},[33,5160,74],{"class":64},[33,5162,2228],{"class":60},[33,5164,74],{"class":64},[33,5166,804],{"class":127},[33,5168,1442],{"class":64},[33,5170,5171],{"class":35,"line":194},[33,5172,149],{"class":64},[33,5174,5175],{"class":35,"line":199},[33,5176,1451],{"class":39},[33,5178,5179,5181,5184,5186,5188,5191,5193,5196,5198,5201,5204,5206,5209,5211,5214,5216,5218,5221],{"class":35,"line":213},[33,5180,1456],{"class":39},[33,5182,5183],{"class":60}," add_callback",[33,5185,104],{"class":64},[33,5187,2256],{"class":39},[33,5189,5190],{"class":60}," AddInts",[33,5192,74],{"class":64},[33,5194,5195],{"class":60},"Request",[33,5197,74],{"class":64},[33,5199,5200],{"class":60},"SharedPtr",[33,5202,5203],{"class":176}," req",[33,5205,1391],{"class":64},[33,5207,5208],{"class":60},"AddInts",[33,5210,74],{"class":64},[33,5212,5213],{"class":60},"Response",[33,5215,74],{"class":64},[33,5217,5200],{"class":60},[33,5219,5220],{"class":176}," res",[33,5222,110],{"class":64},[33,5224,5225],{"class":35,"line":218},[33,5226,116],{"class":64},[33,5228,5229,5232,5234,5237,5240,5243,5246],{"class":35,"line":247},[33,5230,5231],{"class":64},"      res->sum ",[33,5233,1361],{"class":39},[33,5235,5236],{"class":64}," req->num1 ",[33,5238,5239],{"class":39},"+",[33,5241,5242],{"class":64}," (",[33,5244,5245],{"class":39},"*",[33,5247,5248],{"class":64},"req).num2;\n",[33,5250,5251,5253,5255,5257,5259,5261,5263,5265,5267,5270,5272,5275,5277,5279],{"class":35,"line":252},[33,5252,122],{"class":60},[33,5254,104],{"class":64},[33,5256,128],{"class":127},[33,5258,131],{"class":64},[33,5260,134],{"class":60},[33,5262,137],{"class":64},[33,5264,369],{"class":43},[33,5266,3657],{"class":127},[33,5268,5269],{"class":43}," + ",[33,5271,3657],{"class":127},[33,5273,5274],{"class":43}," = ",[33,5276,3657],{"class":127},[33,5278,369],{"class":43},[33,5280,5281],{"class":64},",req->num1,req->num2,res->sum);\n",[33,5283,5284],{"class":35,"line":265},[33,5285,149],{"class":64},[33,5287,5288,5290,5292,5294,5297,5299,5301,5303,5305,5307,5309],{"class":35,"line":277},[33,5289,4085],{"class":64},[33,5291,4088],{"class":60},[33,5293,74],{"class":64},[33,5295,5296],{"class":60},"Service",[33,5298,238],{"class":64},[33,5300,3471],{"class":60},[33,5302,74],{"class":64},[33,5304,5029],{"class":60},[33,5306,74],{"class":64},[33,5308,5208],{"class":60},[33,5310,5311],{"class":64},">::SharedPtr server_;\n",[33,5313,5314],{"class":35,"line":496},[33,5315,155],{"class":64},[33,5317,5318],{"class":35,"line":503},[33,5319,51],{"emptyLinePlaceholder":50},[33,5321,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340],{"class":35,"line":511},[33,5323,166],{"class":39},[33,5325,169],{"class":60},[33,5327,104],{"class":64},[33,5329,166],{"class":39},[33,5331,177],{"class":176},[33,5333,180],{"class":64},[33,5335,183],{"class":39},[33,5337,186],{"class":39},[33,5339,189],{"class":176},[33,5341,110],{"class":64},[33,5343,5344],{"class":35,"line":519},[33,5345,83],{"class":64},[33,5347,5348,5350,5352,5354],{"class":35,"line":525},[33,5349,202],{"class":60},[33,5351,74],{"class":64},[33,5353,207],{"class":60},[33,5355,210],{"class":64},[33,5357,5358],{"class":35,"line":531},[33,5359,51],{"emptyLinePlaceholder":50},[33,5361,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380],{"class":35,"line":542},[33,5363,202],{"class":60},[33,5365,74],{"class":64},[33,5367,225],{"class":60},[33,5369,104],{"class":64},[33,5371,230],{"class":60},[33,5373,74],{"class":64},[33,5375,235],{"class":60},[33,5377,238],{"class":64},[33,5379,4632],{"class":60},[33,5381,244],{"class":64},[33,5383,5384],{"class":35,"line":548},[33,5385,51],{"emptyLinePlaceholder":50},[33,5387,5388,5390,5392,5394],{"class":35,"line":1642},[33,5389,202],{"class":60},[33,5391,74],{"class":64},[33,5393,259],{"class":60},[33,5395,262],{"class":64},[33,5397,5398,5400,5402],{"class":35,"line":1647},[33,5399,268],{"class":39},[33,5401,271],{"class":127},[33,5403,274],{"class":64},[33,5405,5406],{"class":35,"line":1658},[33,5407,280],{"class":64},[16,5409,5410],{},[19,5411],{"alt":21,"src":5412},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage554.webp",[16,5414,5415],{},[19,5416],{"alt":21,"src":5417},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage555.webp",[16,5419,5420],{},"因为我们的客户端还没写，所以先暂时用ros2 service call这个小工具来查看服务端的情况",[16,5422,5423],{},[19,5424],{"alt":21,"src":5425},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage556.webp",[24,5427,5429],{"className":1727,"code":5428,"language":1729,"meta":21,"style":21},"ros2 service call \u002Fadd_ints base_interfaces_demo\u002Fsrv\u002FAddInts \"{'num1': 10,'num2': 30}\"\n",[30,5430,5431],{"__ignoreMap":21},[33,5432,5433,5435,5438,5441,5444,5447],{"class":35,"line":36},[33,5434,1736],{"class":60},[33,5436,5437],{"class":43}," service",[33,5439,5440],{"class":43}," call",[33,5442,5443],{"class":43}," \u002Fadd_ints",[33,5445,5446],{"class":43}," base_interfaces_demo\u002Fsrv\u002FAddInts",[33,5448,5449],{"class":43}," \"{'num1': 10,'num2': 30}\"\n",[16,5451,5452],{},"ros2 service call + 话题名 + 接口数据类型 + json代码(也可以理解成yaml格式的)",[16,5454,5455,5456,5459,5460,5462],{},"此json代码(yaml格式)格式: \"{'第一个数的名': ",[636,5457,5458],{},"空格"," +对应数值,'第二个数的名': ",[636,5461,5458],{}," +对应数的数值}\"",[12,5464,5466],{"id":5465},"服务通信_实验1_客户端实现c","服务通信_实验1_客户端实现(C++)",[16,5468,5469],{},[19,5470],{"alt":21,"src":5471},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage557.webp",[16,5473,5474],{},[19,5475],{"alt":21,"src":5476},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage558.webp",[16,5478,5479],{},[19,5480],{"alt":21,"src":5481},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage559.webp",[16,5483,5484],{},[19,5485],{"alt":21,"src":5486},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage560.webp",[16,5488,5489],{},"运行的时候后面跟了两个整形数据，",[16,5491,5492],{},"所以这个argc应该是等于3的。",[16,5494,5495],{},[19,5496],{"alt":21,"src":5497},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage561.webp",[16,5499,5500],{},[19,5501],{"alt":21,"src":5502},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage562.webp",[16,5504,5505],{},[19,5506],{"alt":21,"src":5507},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage563.webp",[16,5509,5510],{},[636,5511,5512],{},"argv[]:接收编译时的返回的argc的参数",[16,5514,5515],{},[636,5516,5517],{},"argc是命令行总的参数个数",[16,5519,5520],{},[636,5521,5522],{},"argv[]是argc个参数，其中第0个参数是程序的全名，以后的参数",[16,5524,5525],{},[19,5526],{"alt":21,"src":5527},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage564.webp",[16,5529,5530],{},[19,5531],{"alt":21,"src":5532},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage565.webp",[16,5534,5535],{},"必须得保证服务器开着，并且客户端能够连接服务器，如果服务器没开，那么发送的数据会丢失，但是一般使用服务通信的都是比较重要的信息，一定不要丢失了。",[16,5537,5538],{},[19,5539],{"alt":21,"src":5540},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage566.webp",[16,5542,5543],{},"客户端发送完数据后，会产生一个响应，这里直接当函数的返回值给返回了。",[16,5545,5546],{},[19,5547],{"alt":21,"src":5548},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage567.webp",[16,5550,5551],{},[19,5552],{"alt":21,"src":5553},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage568.webp",[16,5555,5556],{},[19,5557],{"alt":21,"src":5558},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage569.webp",[16,5560,5561],{},[19,5562],{"alt":21,"src":5563},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage570.webp",[16,5565,5566],{},[19,5567],{"alt":21,"src":5568},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage571.webp",[16,5570,5571],{},[19,5572],{"alt":21,"src":5573},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage572.webp",[24,5575,5576],{"className":26,"code":4697,"language":28,"meta":21,"style":21},[30,5577,5578,5584,5588,5604,5608,5612,5626,5630,5648,5652,5656,5660,5682,5686,5696,5700,5704,5724,5728,5738,5746],{"__ignoreMap":21},[33,5579,5580,5582],{"class":35,"line":36},[33,5581,40],{"class":39},[33,5583,44],{"class":43},[33,5585,5586],{"class":35,"line":47},[33,5587,51],{"emptyLinePlaceholder":50},[33,5589,5590,5592,5594,5596,5598,5600,5602],{"class":35,"line":54},[33,5591,57],{"class":39},[33,5593,4716],{"class":60},[33,5595,65],{"class":64},[33,5597,68],{"class":39},[33,5599,71],{"class":60},[33,5601,74],{"class":64},[33,5603,77],{"class":60},[33,5605,5606],{"class":35,"line":80},[33,5607,83],{"class":64},[33,5609,5610],{"class":35,"line":86},[33,5611,89],{"class":39},[33,5613,5614,5616,5618,5620,5622,5624],{"class":35,"line":92},[33,5615,4739],{"class":60},[33,5617,98],{"class":64},[33,5619,101],{"class":60},[33,5621,104],{"class":64},[33,5623,4748],{"class":43},[33,5625,110],{"class":64},[33,5627,5628],{"class":35,"line":113},[33,5629,116],{"class":64},[33,5631,5632,5634,5636,5638,5640,5642,5644,5646],{"class":35,"line":119},[33,5633,122],{"class":60},[33,5635,104],{"class":64},[33,5637,128],{"class":127},[33,5639,131],{"class":64},[33,5641,134],{"class":60},[33,5643,137],{"class":64},[33,5645,4771],{"class":43},[33,5647,143],{"class":64},[33,5649,5650],{"class":35,"line":146},[33,5651,149],{"class":64},[33,5653,5654],{"class":35,"line":152},[33,5655,155],{"class":64},[33,5657,5658],{"class":35,"line":158},[33,5659,51],{"emptyLinePlaceholder":50},[33,5661,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680],{"class":35,"line":163},[33,5663,166],{"class":39},[33,5665,169],{"class":60},[33,5667,104],{"class":64},[33,5669,166],{"class":39},[33,5671,177],{"class":176},[33,5673,180],{"class":64},[33,5675,183],{"class":39},[33,5677,186],{"class":39},[33,5679,189],{"class":176},[33,5681,110],{"class":64},[33,5683,5684],{"class":35,"line":194},[33,5685,83],{"class":64},[33,5687,5688,5690,5692,5694],{"class":35,"line":199},[33,5689,202],{"class":60},[33,5691,74],{"class":64},[33,5693,207],{"class":60},[33,5695,210],{"class":64},[33,5697,5698],{"class":35,"line":213},[33,5699,51],{"emptyLinePlaceholder":50},[33,5701,5702],{"class":35,"line":218},[33,5703,4831],{"class":4830},[33,5705,5706,5708,5710,5712,5714,5716,5718,5720,5722],{"class":35,"line":247},[33,5707,4836],{"class":39},[33,5709,4839],{"class":64},[33,5711,1361],{"class":39},[33,5713,1271],{"class":60},[33,5715,74],{"class":64},[33,5717,235],{"class":60},[33,5719,238],{"class":64},[33,5721,4852],{"class":60},[33,5723,4855],{"class":64},[33,5725,5726],{"class":35,"line":252},[33,5727,51],{"emptyLinePlaceholder":50},[33,5729,5730,5732,5734,5736],{"class":35,"line":265},[33,5731,202],{"class":60},[33,5733,74],{"class":64},[33,5735,259],{"class":60},[33,5737,262],{"class":64},[33,5739,5740,5742,5744],{"class":35,"line":277},[33,5741,268],{"class":39},[33,5743,271],{"class":127},[33,5745,274],{"class":64},[33,5747,5748],{"class":35,"line":496},[33,5749,280],{"class":64},[16,5751,5752],{},[19,5753],{"alt":21,"src":5754},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage573.webp",[16,5756,5757],{},"这一段就应该放在节点初始化前面，防止多作一些耗资源的操作再进行判断。",[16,5759,5760],{},[19,5761],{"alt":21,"src":5762},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage574.webp",[16,5764,5765],{},"因为RCLCPP_INFO在节点创建的前面，无法使用类和实例化方式进行get_logger，也就是无法使用this指针和节点智能指针来获取。",[16,5767,5768],{},"所以我们采用以下方式：",[16,5770,5771],{},[19,5772],{"alt":21,"src":5773},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage575.webp",[16,5775,5776],{},"这种方式通过rclcpp里的get_logger，但是需要给日志起个名字，放到入口参数里，我们就叫rclcpp吧。",[24,5778,5780],{"className":26,"code":5779,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,5781,5782,5788,5792,5808,5812,5816,5830,5834,5852,5856,5860,5864,5886,5890,5906,5911,5936,5945,5949,5959,5963,5983,5987,5997,6005],{"__ignoreMap":21},[33,5783,5784,5786],{"class":35,"line":36},[33,5785,40],{"class":39},[33,5787,44],{"class":43},[33,5789,5790],{"class":35,"line":47},[33,5791,51],{"emptyLinePlaceholder":50},[33,5793,5794,5796,5798,5800,5802,5804,5806],{"class":35,"line":54},[33,5795,57],{"class":39},[33,5797,4716],{"class":60},[33,5799,65],{"class":64},[33,5801,68],{"class":39},[33,5803,71],{"class":60},[33,5805,74],{"class":64},[33,5807,77],{"class":60},[33,5809,5810],{"class":35,"line":80},[33,5811,83],{"class":64},[33,5813,5814],{"class":35,"line":86},[33,5815,89],{"class":39},[33,5817,5818,5820,5822,5824,5826,5828],{"class":35,"line":92},[33,5819,4739],{"class":60},[33,5821,98],{"class":64},[33,5823,101],{"class":60},[33,5825,104],{"class":64},[33,5827,4748],{"class":43},[33,5829,110],{"class":64},[33,5831,5832],{"class":35,"line":113},[33,5833,116],{"class":64},[33,5835,5836,5838,5840,5842,5844,5846,5848,5850],{"class":35,"line":119},[33,5837,122],{"class":60},[33,5839,104],{"class":64},[33,5841,128],{"class":127},[33,5843,131],{"class":64},[33,5845,134],{"class":60},[33,5847,137],{"class":64},[33,5849,4771],{"class":43},[33,5851,143],{"class":64},[33,5853,5854],{"class":35,"line":146},[33,5855,149],{"class":64},[33,5857,5858],{"class":35,"line":152},[33,5859,155],{"class":64},[33,5861,5862],{"class":35,"line":158},[33,5863,51],{"emptyLinePlaceholder":50},[33,5865,5866,5868,5870,5872,5874,5876,5878,5880,5882,5884],{"class":35,"line":163},[33,5867,166],{"class":39},[33,5869,169],{"class":60},[33,5871,104],{"class":64},[33,5873,166],{"class":39},[33,5875,177],{"class":176},[33,5877,180],{"class":64},[33,5879,183],{"class":39},[33,5881,186],{"class":39},[33,5883,189],{"class":176},[33,5885,110],{"class":64},[33,5887,5888],{"class":35,"line":194},[33,5889,83],{"class":64},[33,5891,5892,5895,5898,5901,5904],{"class":35,"line":199},[33,5893,5894],{"class":39},"  if",[33,5896,5897],{"class":64},"(argc ",[33,5899,5900],{"class":39},"!=",[33,5902,5903],{"class":127}," 3",[33,5905,110],{"class":64},[33,5907,5908],{"class":35,"line":213},[33,5909,5910],{"class":64},"  {\n",[33,5912,5913,5916,5918,5920,5922,5924,5926,5929,5931,5934],{"class":35,"line":218},[33,5914,5915],{"class":60},"    RCLCPP_INFO",[33,5917,104],{"class":64},[33,5919,4088],{"class":60},[33,5921,74],{"class":64},[33,5923,134],{"class":60},[33,5925,104],{"class":64},[33,5927,5928],{"class":43},"\"rclcpp\"",[33,5930,3425],{"class":64},[33,5932,5933],{"class":43},"\"请提交两个整形数字!\"",[33,5935,143],{"class":64},[33,5937,5938,5940,5943],{"class":35,"line":247},[33,5939,1982],{"class":39},[33,5941,5942],{"class":127}," 1",[33,5944,274],{"class":64},[33,5946,5947],{"class":35,"line":252},[33,5948,545],{"class":64},[33,5950,5951,5953,5955,5957],{"class":35,"line":265},[33,5952,202],{"class":60},[33,5954,74],{"class":64},[33,5956,207],{"class":60},[33,5958,210],{"class":64},[33,5960,5961],{"class":35,"line":277},[33,5962,51],{"emptyLinePlaceholder":50},[33,5964,5965,5967,5969,5971,5973,5975,5977,5979,5981],{"class":35,"line":496},[33,5966,4836],{"class":39},[33,5968,4839],{"class":64},[33,5970,1361],{"class":39},[33,5972,1271],{"class":60},[33,5974,74],{"class":64},[33,5976,235],{"class":60},[33,5978,238],{"class":64},[33,5980,4852],{"class":60},[33,5982,4855],{"class":64},[33,5984,5985],{"class":35,"line":503},[33,5986,51],{"emptyLinePlaceholder":50},[33,5988,5989,5991,5993,5995],{"class":35,"line":511},[33,5990,202],{"class":60},[33,5992,74],{"class":64},[33,5994,259],{"class":60},[33,5996,262],{"class":64},[33,5998,5999,6001,6003],{"class":35,"line":519},[33,6000,268],{"class":39},[33,6002,271],{"class":127},[33,6004,274],{"class":64},[33,6006,6007],{"class":35,"line":525},[33,6008,280],{"class":64},[16,6010,6011],{},[19,6012],{"alt":21,"src":6013},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage576.webp",[16,6015,6016],{},[19,6017],{"alt":21,"src":6018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage577.webp",[16,6020,6021],{},[19,6022],{"alt":21,"src":6023},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage578.webp",[16,6025,6026],{},"如果我不提交参数，直接回车，然后这是一个异常，主函数返回值不是0",[16,6028,6029],{},[19,6030],{"alt":21,"src":6031},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage579.webp",[16,6033,6034],{},[19,6035],{"alt":21,"src":6036},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage580.webp",[16,6038,6039],{},"也可以把INFO改成ERROR",[16,6041,6042],{},[19,6043],{"alt":21,"src":6044},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage581.webp",[24,6046,6048],{"className":26,"code":6047,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"客户端节点创建！\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,6049,6050,6056,6060,6076,6080,6084,6098,6102,6120,6124,6128,6132,6154,6158,6170,6174,6197,6205,6209,6219,6223,6243,6247,6257,6265],{"__ignoreMap":21},[33,6051,6052,6054],{"class":35,"line":36},[33,6053,40],{"class":39},[33,6055,44],{"class":43},[33,6057,6058],{"class":35,"line":47},[33,6059,51],{"emptyLinePlaceholder":50},[33,6061,6062,6064,6066,6068,6070,6072,6074],{"class":35,"line":54},[33,6063,57],{"class":39},[33,6065,4716],{"class":60},[33,6067,65],{"class":64},[33,6069,68],{"class":39},[33,6071,71],{"class":60},[33,6073,74],{"class":64},[33,6075,77],{"class":60},[33,6077,6078],{"class":35,"line":80},[33,6079,83],{"class":64},[33,6081,6082],{"class":35,"line":86},[33,6083,89],{"class":39},[33,6085,6086,6088,6090,6092,6094,6096],{"class":35,"line":92},[33,6087,4739],{"class":60},[33,6089,98],{"class":64},[33,6091,101],{"class":60},[33,6093,104],{"class":64},[33,6095,4748],{"class":43},[33,6097,110],{"class":64},[33,6099,6100],{"class":35,"line":113},[33,6101,116],{"class":64},[33,6103,6104,6106,6108,6110,6112,6114,6116,6118],{"class":35,"line":119},[33,6105,122],{"class":60},[33,6107,104],{"class":64},[33,6109,128],{"class":127},[33,6111,131],{"class":64},[33,6113,134],{"class":60},[33,6115,137],{"class":64},[33,6117,4771],{"class":43},[33,6119,143],{"class":64},[33,6121,6122],{"class":35,"line":146},[33,6123,149],{"class":64},[33,6125,6126],{"class":35,"line":152},[33,6127,155],{"class":64},[33,6129,6130],{"class":35,"line":158},[33,6131,51],{"emptyLinePlaceholder":50},[33,6133,6134,6136,6138,6140,6142,6144,6146,6148,6150,6152],{"class":35,"line":163},[33,6135,166],{"class":39},[33,6137,169],{"class":60},[33,6139,104],{"class":64},[33,6141,166],{"class":39},[33,6143,177],{"class":176},[33,6145,180],{"class":64},[33,6147,183],{"class":39},[33,6149,186],{"class":39},[33,6151,189],{"class":176},[33,6153,110],{"class":64},[33,6155,6156],{"class":35,"line":194},[33,6157,83],{"class":64},[33,6159,6160,6162,6164,6166,6168],{"class":35,"line":199},[33,6161,5894],{"class":39},[33,6163,5897],{"class":64},[33,6165,5900],{"class":39},[33,6167,5903],{"class":127},[33,6169,110],{"class":64},[33,6171,6172],{"class":35,"line":213},[33,6173,5910],{"class":64},[33,6175,6176,6179,6181,6183,6185,6187,6189,6191,6193,6195],{"class":35,"line":218},[33,6177,6178],{"class":60},"    RCLCPP_ERROR",[33,6180,104],{"class":64},[33,6182,4088],{"class":60},[33,6184,74],{"class":64},[33,6186,134],{"class":60},[33,6188,104],{"class":64},[33,6190,5928],{"class":43},[33,6192,3425],{"class":64},[33,6194,5933],{"class":43},[33,6196,143],{"class":64},[33,6198,6199,6201,6203],{"class":35,"line":247},[33,6200,1982],{"class":39},[33,6202,5942],{"class":127},[33,6204,274],{"class":64},[33,6206,6207],{"class":35,"line":252},[33,6208,545],{"class":64},[33,6210,6211,6213,6215,6217],{"class":35,"line":265},[33,6212,202],{"class":60},[33,6214,74],{"class":64},[33,6216,207],{"class":60},[33,6218,210],{"class":64},[33,6220,6221],{"class":35,"line":277},[33,6222,51],{"emptyLinePlaceholder":50},[33,6224,6225,6227,6229,6231,6233,6235,6237,6239,6241],{"class":35,"line":496},[33,6226,4836],{"class":39},[33,6228,4839],{"class":64},[33,6230,1361],{"class":39},[33,6232,1271],{"class":60},[33,6234,74],{"class":64},[33,6236,235],{"class":60},[33,6238,238],{"class":64},[33,6240,4852],{"class":60},[33,6242,4855],{"class":64},[33,6244,6245],{"class":35,"line":503},[33,6246,51],{"emptyLinePlaceholder":50},[33,6248,6249,6251,6253,6255],{"class":35,"line":511},[33,6250,202],{"class":60},[33,6252,74],{"class":64},[33,6254,259],{"class":60},[33,6256,262],{"class":64},[33,6258,6259,6261,6263],{"class":35,"line":519},[33,6260,268],{"class":39},[33,6262,271],{"class":127},[33,6264,274],{"class":64},[33,6266,6267],{"class":35,"line":525},[33,6268,280],{"class":64},[562,6270],{},[16,6272,6273],{},[19,6274],{"alt":21,"src":6275},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage582.webp",[16,6277,6278],{},"一共3个入口参数，",[16,6280,6281],{},"第一个入口参数是话题名称，是字符串;",[16,6283,6284],{},"第二个入口参数和第三个入口参数有默认值，先不用管;",[16,6286,6287],{},"返回值是客户端的智能指针。",[16,6289,6290],{},[19,6291],{"alt":21,"src":6292},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage583.webp",[16,6294,6295],{},[19,6296],{"alt":21,"src":6297},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage584.webp",[16,6299,6300],{},[19,6301],{"alt":21,"src":6302},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage585.webp",[16,6304,6305],{},[19,6306],{"alt":21,"src":6307},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage586.webp",[16,6309,6310],{},[19,6311],{"alt":21,"src":6312},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage587.webp",[16,6314,6315],{},[19,6316],{"alt":21,"src":6317},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage588.webp",[16,6319,6320],{},[19,6321],{"alt":21,"src":6322},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage589.webp",[16,6324,6325],{},[19,6326],{"alt":21,"src":6327},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage590.webp",[16,6329,6330],{},[19,6331],{"alt":21,"src":6332},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage591.webp",[16,6334,6335],{},[19,6336],{"alt":21,"src":6337},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage592.webp",[16,6339,6340],{},[19,6341],{"alt":21,"src":6342},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage593.webp",[16,6344,6345],{},"一旦Ctrl+C关闭，则会疯狂爆INFO，且程序无法停止。",[16,6347,6348],{},[19,6349],{"alt":21,"src":6350},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage594.webp",[16,6352,6353],{},[19,6354],{"alt":21,"src":6355},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage595.webp",[16,6357,6358],{},"再按Ctrl+Z可以停止程序进行。",[16,6360,6361],{},[19,6362],{"alt":21,"src":6363},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage596.webp",[16,6365,6366],{},[19,6367],{"alt":21,"src":6368},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage597.webp",[16,6370,6371],{},"解决上面Ctrl+C的bug：",[16,6373,6374],{},[19,6375],{"alt":21,"src":6376},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage598.webp",[16,6378,6379],{},"rclcpp::ok()这个是判断当前程序是否正常运行，如果正常运行，则返回true，如果不正常运行则返回false，比如按下Ctrl+C就是不正常运行。",[16,6381,6382],{},"当rclcpp::ok() != true的时候，就是ctrl+c按下了。",[16,6384,6385],{},[19,6386],{"alt":21,"src":6387},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage599.webp",[16,6389,6390],{},"这样直接可以让函数结束。",[16,6392,6393],{},[19,6394],{"alt":21,"src":6395},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage600.webp",[16,6397,6398],{},[19,6399],{"alt":21,"src":6400},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage601.webp",[16,6402,6403],{},"这时按下ctrl+c会爆很多错误",[16,6405,6406],{},"这是因为",[16,6408,6409],{},"this->get_logger()",[16,6411,6412],{},"client->get_logger()",[16,6414,6415],{},"rclcpp::get_logger()",[16,6417,6418],{},"的不同",[16,6420,6421],{},"这个异常和context有关，初始化的时候会创建context对象，相当于是一个容器，可以往容器里放数据，也可以在容器里取数据。",[16,6423,6424],{},"当前，如果我们连接失败的话，打印日志。",[16,6426,6427],{},"按下ctrl+c会结束我们的ROS2程序，要释放资源，比如要关闭context，这时已经关掉了context，这样，我们再从client和this来获取日志，就不行了，所以建议用rclcpp::get_logger()。",[16,6429,6430],{},"因为rclcpp::get_logger()的调用和context没有关系。",[16,6432,6433],{},[19,6434],{"alt":21,"src":6435},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage602.webp",[16,6437,6438],{},"这样程序就正常了！",[24,6440,6442],{"className":26,"code":6441,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\nusing namespace std::chrono_literals;\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"客户端节点创建！\");\n      client_ = this->create_client\u003CAddInts>(\"add_ints\");\n    }\n\n    bool connect_server()\n    {\n      while(client_->wait_for_service(1s) != true)\n      {\n        RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务连接中!\");\n\n        if (rclcpp::ok() != true)\n        {\n          RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"强行终止客户端!\");\n          return false;\n        }\n      }\n      return true;\n    }\n\n  private:\n    rclcpp::Client\u003CAddInts>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  bool flag = client->connect_server();\n\n  if (flag != true)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务器连接失败，程序退出!\");\n    return 0;\n  }\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,6443,6444,6450,6456,6460,6472,6486,6490,6506,6510,6514,6528,6532,6554,6578,6582,6586,6596,6600,6627,6632,6655,6659,6682,6687,6711,6721,6726,6731,6740,6744,6748,6752,6768,6772,6776,6798,6802,6814,6818,6840,6849,6854,6865,6870,6891,6896,6915,6920,6934,6939,6963,6972,6977,6982,6993,7002],{"__ignoreMap":21},[33,6445,6446,6448],{"class":35,"line":36},[33,6447,40],{"class":39},[33,6449,44],{"class":43},[33,6451,6452,6454],{"class":35,"line":47},[33,6453,40],{"class":39},[33,6455,5014],{"class":43},[33,6457,6458],{"class":35,"line":54},[33,6459,51],{"emptyLinePlaceholder":50},[33,6461,6462,6464,6466,6468,6470],{"class":35,"line":80},[33,6463,1265],{"class":39},[33,6465,3566],{"class":60},[33,6467,74],{"class":64},[33,6469,5029],{"class":60},[33,6471,5032],{"class":64},[33,6473,6474,6476,6478,6480,6482,6484],{"class":35,"line":86},[33,6475,1265],{"class":39},[33,6477,1268],{"class":39},[33,6479,1271],{"class":60},[33,6481,74],{"class":64},[33,6483,1276],{"class":60},[33,6485,274],{"class":64},[33,6487,6488],{"class":35,"line":92},[33,6489,51],{"emptyLinePlaceholder":50},[33,6491,6492,6494,6496,6498,6500,6502,6504],{"class":35,"line":113},[33,6493,57],{"class":39},[33,6495,4716],{"class":60},[33,6497,65],{"class":64},[33,6499,68],{"class":39},[33,6501,71],{"class":60},[33,6503,74],{"class":64},[33,6505,77],{"class":60},[33,6507,6508],{"class":35,"line":119},[33,6509,83],{"class":64},[33,6511,6512],{"class":35,"line":146},[33,6513,89],{"class":39},[33,6515,6516,6518,6520,6522,6524,6526],{"class":35,"line":152},[33,6517,4739],{"class":60},[33,6519,98],{"class":64},[33,6521,101],{"class":60},[33,6523,104],{"class":64},[33,6525,4748],{"class":43},[33,6527,110],{"class":64},[33,6529,6530],{"class":35,"line":158},[33,6531,116],{"class":64},[33,6533,6534,6536,6538,6540,6542,6544,6546,6548,6550,6552],{"class":35,"line":163},[33,6535,122],{"class":60},[33,6537,104],{"class":64},[33,6539,4088],{"class":60},[33,6541,74],{"class":64},[33,6543,134],{"class":60},[33,6545,104],{"class":64},[33,6547,5928],{"class":43},[33,6549,3425],{"class":64},[33,6551,4771],{"class":43},[33,6553,143],{"class":64},[33,6555,6556,6559,6561,6563,6566,6568,6570,6572,6574,6576],{"class":35,"line":194},[33,6557,6558],{"class":64},"      client_ ",[33,6560,1361],{"class":39},[33,6562,1364],{"class":127},[33,6564,6565],{"class":64},"->create_client",[33,6567,238],{"class":39},[33,6569,5208],{"class":64},[33,6571,1383],{"class":39},[33,6573,104],{"class":64},[33,6575,5126],{"class":43},[33,6577,143],{"class":64},[33,6579,6580],{"class":35,"line":199},[33,6581,149],{"class":64},[33,6583,6584],{"class":35,"line":213},[33,6585,51],{"emptyLinePlaceholder":50},[33,6587,6588,6591,6594],{"class":35,"line":218},[33,6589,6590],{"class":39},"    bool",[33,6592,6593],{"class":60}," connect_server",[33,6595,1462],{"class":64},[33,6597,6598],{"class":35,"line":247},[33,6599,116],{"class":64},[33,6601,6602,6605,6608,6611,6613,6615,6617,6620,6622,6625],{"class":35,"line":252},[33,6603,6604],{"class":39},"      while",[33,6606,6607],{"class":64},"(client_->",[33,6609,6610],{"class":60},"wait_for_service",[33,6612,104],{"class":64},[33,6614,1415],{"class":127},[33,6616,1418],{"class":39},[33,6618,6619],{"class":64},") ",[33,6621,5900],{"class":39},[33,6623,6624],{"class":127}," true",[33,6626,110],{"class":64},[33,6628,6629],{"class":35,"line":265},[33,6630,6631],{"class":64},"      {\n",[33,6633,6634,6636,6638,6640,6642,6644,6646,6648,6650,6653],{"class":35,"line":277},[33,6635,1871],{"class":60},[33,6637,104],{"class":64},[33,6639,4088],{"class":60},[33,6641,74],{"class":64},[33,6643,134],{"class":60},[33,6645,104],{"class":64},[33,6647,5928],{"class":43},[33,6649,3425],{"class":64},[33,6651,6652],{"class":43},"\"服务连接中!\"",[33,6654,143],{"class":64},[33,6656,6657],{"class":35,"line":496},[33,6658,51],{"emptyLinePlaceholder":50},[33,6660,6661,6664,6666,6668,6670,6673,6676,6678,6680],{"class":35,"line":503},[33,6662,6663],{"class":39},"        if",[33,6665,5242],{"class":64},[33,6667,4088],{"class":60},[33,6669,74],{"class":64},[33,6671,6672],{"class":60},"ok",[33,6674,6675],{"class":64},"() ",[33,6677,5900],{"class":39},[33,6679,6624],{"class":127},[33,6681,110],{"class":64},[33,6683,6684],{"class":35,"line":511},[33,6685,6686],{"class":64},"        {\n",[33,6688,6689,6692,6694,6696,6698,6700,6702,6704,6706,6709],{"class":35,"line":519},[33,6690,6691],{"class":60},"          RCLCPP_INFO",[33,6693,104],{"class":64},[33,6695,4088],{"class":60},[33,6697,74],{"class":64},[33,6699,134],{"class":60},[33,6701,104],{"class":64},[33,6703,5928],{"class":43},[33,6705,3425],{"class":64},[33,6707,6708],{"class":43},"\"强行终止客户端!\"",[33,6710,143],{"class":64},[33,6712,6713,6716,6719],{"class":35,"line":525},[33,6714,6715],{"class":39},"          return",[33,6717,6718],{"class":127}," false",[33,6720,274],{"class":64},[33,6722,6723],{"class":35,"line":531},[33,6724,6725],{"class":64},"        }\n",[33,6727,6728],{"class":35,"line":542},[33,6729,6730],{"class":64},"      }\n",[33,6732,6733,6736,6738],{"class":35,"line":548},[33,6734,6735],{"class":39},"      return",[33,6737,6624],{"class":127},[33,6739,274],{"class":64},[33,6741,6742],{"class":35,"line":1642},[33,6743,149],{"class":64},[33,6745,6746],{"class":35,"line":1647},[33,6747,51],{"emptyLinePlaceholder":50},[33,6749,6750],{"class":35,"line":1658},[33,6751,1451],{"class":39},[33,6753,6754,6756,6758,6761,6763,6765],{"class":35,"line":1663},[33,6755,1569],{"class":60},[33,6757,74],{"class":64},[33,6759,6760],{"class":60},"Client",[33,6762,238],{"class":64},[33,6764,5208],{"class":60},[33,6766,6767],{"class":64},">::SharedPtr client_;\n",[33,6769,6770],{"class":35,"line":1686},[33,6771,155],{"class":64},[33,6773,6774],{"class":35,"line":1691},[33,6775,51],{"emptyLinePlaceholder":50},[33,6777,6778,6780,6782,6784,6786,6788,6790,6792,6794,6796],{"class":35,"line":1702},[33,6779,166],{"class":39},[33,6781,169],{"class":60},[33,6783,104],{"class":64},[33,6785,166],{"class":39},[33,6787,177],{"class":176},[33,6789,180],{"class":64},[33,6791,183],{"class":39},[33,6793,186],{"class":39},[33,6795,189],{"class":176},[33,6797,110],{"class":64},[33,6799,6800],{"class":35,"line":1711},[33,6801,83],{"class":64},[33,6803,6804,6806,6808,6810,6812],{"class":35,"line":3792},[33,6805,5894],{"class":39},[33,6807,5897],{"class":64},[33,6809,5900],{"class":39},[33,6811,5903],{"class":127},[33,6813,110],{"class":64},[33,6815,6816],{"class":35,"line":3803},[33,6817,5910],{"class":64},[33,6819,6820,6822,6824,6826,6828,6830,6832,6834,6836,6838],{"class":35,"line":3812},[33,6821,6178],{"class":60},[33,6823,104],{"class":64},[33,6825,4088],{"class":60},[33,6827,74],{"class":64},[33,6829,134],{"class":60},[33,6831,104],{"class":64},[33,6833,5928],{"class":43},[33,6835,3425],{"class":64},[33,6837,5933],{"class":43},[33,6839,143],{"class":64},[33,6841,6843,6845,6847],{"class":35,"line":6842},40,[33,6844,1982],{"class":39},[33,6846,5942],{"class":127},[33,6848,274],{"class":64},[33,6850,6852],{"class":35,"line":6851},41,[33,6853,545],{"class":64},[33,6855,6857,6859,6861,6863],{"class":35,"line":6856},42,[33,6858,202],{"class":60},[33,6860,74],{"class":64},[33,6862,207],{"class":60},[33,6864,210],{"class":64},[33,6866,6868],{"class":35,"line":6867},43,[33,6869,51],{"emptyLinePlaceholder":50},[33,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889],{"class":35,"line":6872},44,[33,6874,4836],{"class":39},[33,6876,4839],{"class":64},[33,6878,1361],{"class":39},[33,6880,1271],{"class":60},[33,6882,74],{"class":64},[33,6884,235],{"class":60},[33,6886,238],{"class":64},[33,6888,4852],{"class":60},[33,6890,4855],{"class":64},[33,6892,6894],{"class":35,"line":6893},45,[33,6895,51],{"emptyLinePlaceholder":50},[33,6897,6899,6902,6905,6907,6910,6913],{"class":35,"line":6898},46,[33,6900,6901],{"class":39},"  bool",[33,6903,6904],{"class":64}," flag ",[33,6906,1361],{"class":39},[33,6908,6909],{"class":64}," client->",[33,6911,6912],{"class":60},"connect_server",[33,6914,262],{"class":64},[33,6916,6918],{"class":35,"line":6917},47,[33,6919,51],{"emptyLinePlaceholder":50},[33,6921,6923,6925,6928,6930,6932],{"class":35,"line":6922},48,[33,6924,5894],{"class":39},[33,6926,6927],{"class":64}," (flag ",[33,6929,5900],{"class":39},[33,6931,6624],{"class":127},[33,6933,110],{"class":64},[33,6935,6937],{"class":35,"line":6936},49,[33,6938,5910],{"class":64},[33,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6961],{"class":35,"line":6941},50,[33,6943,5915],{"class":60},[33,6945,104],{"class":64},[33,6947,4088],{"class":60},[33,6949,74],{"class":64},[33,6951,134],{"class":60},[33,6953,104],{"class":64},[33,6955,5928],{"class":43},[33,6957,3425],{"class":64},[33,6959,6960],{"class":43},"\"服务器连接失败，程序退出!\"",[33,6962,143],{"class":64},[33,6964,6966,6968,6970],{"class":35,"line":6965},51,[33,6967,1982],{"class":39},[33,6969,271],{"class":127},[33,6971,274],{"class":64},[33,6973,6975],{"class":35,"line":6974},52,[33,6976,545],{"class":64},[33,6978,6980],{"class":35,"line":6979},53,[33,6981,51],{"emptyLinePlaceholder":50},[33,6983,6985,6987,6989,6991],{"class":35,"line":6984},54,[33,6986,202],{"class":60},[33,6988,74],{"class":64},[33,6990,259],{"class":60},[33,6992,262],{"class":64},[33,6994,6996,6998,7000],{"class":35,"line":6995},55,[33,6997,268],{"class":39},[33,6999,271],{"class":127},[33,7001,274],{"class":64},[33,7003,7005],{"class":35,"line":7004},56,[33,7006,280],{"class":64},[16,7008,7009],{},[19,7010],{"alt":21,"src":7011},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage603.webp",[562,7013],{},[16,7015,7016],{},[19,7017],{"alt":21,"src":7018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage604.webp",[16,7020,7021],{},[19,7022],{"alt":21,"src":7023},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage605.webp",[16,7025,7026],{},[19,7027],{"alt":21,"src":7028},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage606.webp",[16,7030,7031],{},"返回值类型有了，我们就粘贴过去，",[16,7033,7034],{},"因为using base_interfaces_demo::srv::AddInts所以可以省略成AddInts",[16,7036,7037],{},[19,7038],{"alt":21,"src":7039},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage607.webp",[16,7041,7042],{},[19,7043],{"alt":21,"src":7044},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage608.webp",[16,7046,7047],{},[19,7048],{"alt":21,"src":7049},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage609.webp",[16,7051,7052],{},"在主函数里要调用函数。",[16,7054,7055],{},[19,7056],{"alt":21,"src":7057},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage610.webp",[16,7059,7060],{},"atoi()是把数据转化成整形",[16,7062,7063],{},[19,7064],{"alt":21,"src":7065},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage611.webp",[16,7067,7068],{},"我们还要处理响应，响应有3个",[16,7070,7071],{},"第一个是中断，第二个是成功，第三个是超时;",[16,7073,7074],{},"我们一般只判断成功，其他两种情况都认为是失败。",[16,7076,7077],{},[19,7078],{"alt":21,"src":7079},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage612.webp",[16,7081,7082],{},"第一个入口参数是 节点的智能指针",[16,7084,7085],{},"第二个入口参数是future",[16,7087,7088],{},"第三个入口参数有默认值，先不用管",[16,7090,7091],{},[19,7092],{"alt":21,"src":7093},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage613.webp",[16,7095,7096],{},[19,7097],{"alt":21,"src":7098},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage614.webp",[16,7100,7101],{},[19,7102],{"alt":21,"src":7103},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage615.webp",[16,7105,7106],{},[19,7107],{"alt":21,"src":7108},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage616.webp",[16,7110,7111],{},[19,7112],{"alt":21,"src":7113},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage617.webp",[24,7115,7117],{"className":26,"code":7116,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"base_interfaces_demo\u002Fsrv\u002Fadd_ints.hpp\"\n\nusing base_interfaces_demo::srv::AddInts;\nusing namespace std::chrono_literals;\n\nclass AddIntsClient: public rclcpp::Node\n{\n  public:\n    AddIntsClient():Node(\"add_ints_client_node_cpp\")\n    {\n      RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"客户端节点创建！\");\n      client_ = this->create_client\u003CAddInts>(\"add_ints\");\n    }\n\n    bool connect_server()\n    {\n      while(client_->wait_for_service(1s) != true)\n      {\n        RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务连接中!\");\n\n        if (rclcpp::ok() != true)\n        {\n          RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"强行终止客户端!\");\n          return false;\n        }\n      }\n      return true;\n    }\n\n    rclcpp::Client\u003CAddInts>::FutureAndRequestId send_request(int32_t num1,int32_t num2)\n    {\n      \u002F*\n        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  \u002F\u002F其实就相当于AddInts::Request类型\n      *\u002F\n      auto request = std::make_sharedautolinkAddInts::Requestautolink();\n      request->num1 = num1;\n      request->num2 = num2;\n      return client_->async_send_request(request);\n    }\n\n  private:\n    rclcpp::Client\u003CAddInts>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 3)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcpp\"),\"请提交两个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CAddIntsClient>();\n\n  bool flag = client->connect_server();\n\n  if (flag != true)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcpp\"),\"服务器连接失败，程序退出!\");\n    return 0;\n  }\n  auto future = client->send_request(atoi(argv[1]),atoi(argv[2]));\n\n  if (rclcpp::spin_until_future_complete(client,future) == rclcpp::FutureReturnCode::SUCCESS)\n  {\n    RCLCPP_INFO(client->get_logger(),\"响应成功! sum = %d\",future.get()->sum);\n  }\n  else\n  {\n    RCLCPP_INFO(client->get_logger(),\"响应失败!\");\n  }\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,7118,7119,7125,7131,7135,7147,7161,7165,7181,7185,7189,7203,7207,7229,7251,7255,7259,7267,7271,7293,7297,7319,7323,7343,7347,7369,7377,7381,7385,7393,7397,7401,7439,7443,7448,7453,7458,7463,7486,7496,7506,7519,7523,7527,7531,7545,7549,7553,7575,7579,7591,7595,7617,7625,7629,7639,7643,7663,7668,7683,7688,7701,7706,7729,7738,7743,7780,7785,7815,7820,7848,7853,7859,7864,7880,7885,7890,7901,7910],{"__ignoreMap":21},[33,7120,7121,7123],{"class":35,"line":36},[33,7122,40],{"class":39},[33,7124,44],{"class":43},[33,7126,7127,7129],{"class":35,"line":47},[33,7128,40],{"class":39},[33,7130,5014],{"class":43},[33,7132,7133],{"class":35,"line":54},[33,7134,51],{"emptyLinePlaceholder":50},[33,7136,7137,7139,7141,7143,7145],{"class":35,"line":80},[33,7138,1265],{"class":39},[33,7140,3566],{"class":60},[33,7142,74],{"class":64},[33,7144,5029],{"class":60},[33,7146,5032],{"class":64},[33,7148,7149,7151,7153,7155,7157,7159],{"class":35,"line":86},[33,7150,1265],{"class":39},[33,7152,1268],{"class":39},[33,7154,1271],{"class":60},[33,7156,74],{"class":64},[33,7158,1276],{"class":60},[33,7160,274],{"class":64},[33,7162,7163],{"class":35,"line":92},[33,7164,51],{"emptyLinePlaceholder":50},[33,7166,7167,7169,7171,7173,7175,7177,7179],{"class":35,"line":113},[33,7168,57],{"class":39},[33,7170,4716],{"class":60},[33,7172,65],{"class":64},[33,7174,68],{"class":39},[33,7176,71],{"class":60},[33,7178,74],{"class":64},[33,7180,77],{"class":60},[33,7182,7183],{"class":35,"line":119},[33,7184,83],{"class":64},[33,7186,7187],{"class":35,"line":146},[33,7188,89],{"class":39},[33,7190,7191,7193,7195,7197,7199,7201],{"class":35,"line":152},[33,7192,4739],{"class":60},[33,7194,98],{"class":64},[33,7196,101],{"class":60},[33,7198,104],{"class":64},[33,7200,4748],{"class":43},[33,7202,110],{"class":64},[33,7204,7205],{"class":35,"line":158},[33,7206,116],{"class":64},[33,7208,7209,7211,7213,7215,7217,7219,7221,7223,7225,7227],{"class":35,"line":163},[33,7210,122],{"class":60},[33,7212,104],{"class":64},[33,7214,4088],{"class":60},[33,7216,74],{"class":64},[33,7218,134],{"class":60},[33,7220,104],{"class":64},[33,7222,5928],{"class":43},[33,7224,3425],{"class":64},[33,7226,4771],{"class":43},[33,7228,143],{"class":64},[33,7230,7231,7233,7235,7237,7239,7241,7243,7245,7247,7249],{"class":35,"line":194},[33,7232,6558],{"class":64},[33,7234,1361],{"class":39},[33,7236,1364],{"class":127},[33,7238,6565],{"class":64},[33,7240,238],{"class":39},[33,7242,5208],{"class":64},[33,7244,1383],{"class":39},[33,7246,104],{"class":64},[33,7248,5126],{"class":43},[33,7250,143],{"class":64},[33,7252,7253],{"class":35,"line":199},[33,7254,149],{"class":64},[33,7256,7257],{"class":35,"line":213},[33,7258,51],{"emptyLinePlaceholder":50},[33,7260,7261,7263,7265],{"class":35,"line":218},[33,7262,6590],{"class":39},[33,7264,6593],{"class":60},[33,7266,1462],{"class":64},[33,7268,7269],{"class":35,"line":247},[33,7270,116],{"class":64},[33,7272,7273,7275,7277,7279,7281,7283,7285,7287,7289,7291],{"class":35,"line":252},[33,7274,6604],{"class":39},[33,7276,6607],{"class":64},[33,7278,6610],{"class":60},[33,7280,104],{"class":64},[33,7282,1415],{"class":127},[33,7284,1418],{"class":39},[33,7286,6619],{"class":64},[33,7288,5900],{"class":39},[33,7290,6624],{"class":127},[33,7292,110],{"class":64},[33,7294,7295],{"class":35,"line":265},[33,7296,6631],{"class":64},[33,7298,7299,7301,7303,7305,7307,7309,7311,7313,7315,7317],{"class":35,"line":277},[33,7300,1871],{"class":60},[33,7302,104],{"class":64},[33,7304,4088],{"class":60},[33,7306,74],{"class":64},[33,7308,134],{"class":60},[33,7310,104],{"class":64},[33,7312,5928],{"class":43},[33,7314,3425],{"class":64},[33,7316,6652],{"class":43},[33,7318,143],{"class":64},[33,7320,7321],{"class":35,"line":496},[33,7322,51],{"emptyLinePlaceholder":50},[33,7324,7325,7327,7329,7331,7333,7335,7337,7339,7341],{"class":35,"line":503},[33,7326,6663],{"class":39},[33,7328,5242],{"class":64},[33,7330,4088],{"class":60},[33,7332,74],{"class":64},[33,7334,6672],{"class":60},[33,7336,6675],{"class":64},[33,7338,5900],{"class":39},[33,7340,6624],{"class":127},[33,7342,110],{"class":64},[33,7344,7345],{"class":35,"line":511},[33,7346,6686],{"class":64},[33,7348,7349,7351,7353,7355,7357,7359,7361,7363,7365,7367],{"class":35,"line":519},[33,7350,6691],{"class":60},[33,7352,104],{"class":64},[33,7354,4088],{"class":60},[33,7356,74],{"class":64},[33,7358,134],{"class":60},[33,7360,104],{"class":64},[33,7362,5928],{"class":43},[33,7364,3425],{"class":64},[33,7366,6708],{"class":43},[33,7368,143],{"class":64},[33,7370,7371,7373,7375],{"class":35,"line":525},[33,7372,6715],{"class":39},[33,7374,6718],{"class":127},[33,7376,274],{"class":64},[33,7378,7379],{"class":35,"line":531},[33,7380,6725],{"class":64},[33,7382,7383],{"class":35,"line":542},[33,7384,6730],{"class":64},[33,7386,7387,7389,7391],{"class":35,"line":548},[33,7388,6735],{"class":39},[33,7390,6624],{"class":127},[33,7392,274],{"class":64},[33,7394,7395],{"class":35,"line":1642},[33,7396,149],{"class":64},[33,7398,7399],{"class":35,"line":1647},[33,7400,51],{"emptyLinePlaceholder":50},[33,7402,7403,7405,7407,7409,7411,7413,7416,7419,7422,7424,7427,7430,7432,7434,7437],{"class":35,"line":1658},[33,7404,1569],{"class":60},[33,7406,74],{"class":64},[33,7408,6760],{"class":60},[33,7410,238],{"class":64},[33,7412,5208],{"class":60},[33,7414,7415],{"class":64},">::",[33,7417,7418],{"class":60},"FutureAndRequestId",[33,7420,7421],{"class":60}," send_request",[33,7423,104],{"class":64},[33,7425,7426],{"class":39},"int32_t",[33,7428,7429],{"class":176}," num1",[33,7431,1391],{"class":64},[33,7433,7426],{"class":39},[33,7435,7436],{"class":176}," num2",[33,7438,110],{"class":64},[33,7440,7441],{"class":35,"line":1663},[33,7442,116],{"class":64},[33,7444,7445],{"class":35,"line":1686},[33,7446,7447],{"class":4830},"      \u002F*\n",[33,7449,7450],{"class":35,"line":1691},[33,7451,7452],{"class":4830},"        返回值 rclcpp::Client\u003Cbase_interfaces_demo::srv::AddInts>::FutureAndRequestId\n",[33,7454,7455],{"class":35,"line":1702},[33,7456,7457],{"class":4830},"        入口参数 async_send_request(std::shared_ptr\u003Cbase_interfaces_demo::srv::AddInts_Request> request)  \u002F\u002F其实就相当于AddInts::Request类型\n",[33,7459,7460],{"class":35,"line":1711},[33,7461,7462],{"class":4830},"      *\u002F\n",[33,7464,7465,7467,7470,7472,7474,7476,7479,7481,7484],{"class":35,"line":3792},[33,7466,1471],{"class":39},[33,7468,7469],{"class":64}," request ",[33,7471,1361],{"class":39},[33,7473,1271],{"class":60},[33,7475,74],{"class":64},[33,7477,7478],{"class":60},"make_sharedautolinkAddInts",[33,7480,74],{"class":64},[33,7482,7483],{"class":60},"Requestautolink",[33,7485,262],{"class":64},[33,7487,7488,7491,7493],{"class":35,"line":3803},[33,7489,7490],{"class":64},"      request->num1 ",[33,7492,1361],{"class":39},[33,7494,7495],{"class":64}," num1;\n",[33,7497,7498,7501,7503],{"class":35,"line":3812},[33,7499,7500],{"class":64},"      request->num2 ",[33,7502,1361],{"class":39},[33,7504,7505],{"class":64}," num2;\n",[33,7507,7508,7510,7513,7516],{"class":35,"line":6842},[33,7509,6735],{"class":39},[33,7511,7512],{"class":64}," client_->",[33,7514,7515],{"class":60},"async_send_request",[33,7517,7518],{"class":64},"(request);\n",[33,7520,7521],{"class":35,"line":6851},[33,7522,149],{"class":64},[33,7524,7525],{"class":35,"line":6856},[33,7526,51],{"emptyLinePlaceholder":50},[33,7528,7529],{"class":35,"line":6867},[33,7530,1451],{"class":39},[33,7532,7533,7535,7537,7539,7541,7543],{"class":35,"line":6872},[33,7534,1569],{"class":60},[33,7536,74],{"class":64},[33,7538,6760],{"class":60},[33,7540,238],{"class":64},[33,7542,5208],{"class":60},[33,7544,6767],{"class":64},[33,7546,7547],{"class":35,"line":6893},[33,7548,155],{"class":64},[33,7550,7551],{"class":35,"line":6898},[33,7552,51],{"emptyLinePlaceholder":50},[33,7554,7555,7557,7559,7561,7563,7565,7567,7569,7571,7573],{"class":35,"line":6917},[33,7556,166],{"class":39},[33,7558,169],{"class":60},[33,7560,104],{"class":64},[33,7562,166],{"class":39},[33,7564,177],{"class":176},[33,7566,180],{"class":64},[33,7568,183],{"class":39},[33,7570,186],{"class":39},[33,7572,189],{"class":176},[33,7574,110],{"class":64},[33,7576,7577],{"class":35,"line":6922},[33,7578,83],{"class":64},[33,7580,7581,7583,7585,7587,7589],{"class":35,"line":6936},[33,7582,5894],{"class":39},[33,7584,5897],{"class":64},[33,7586,5900],{"class":39},[33,7588,5903],{"class":127},[33,7590,110],{"class":64},[33,7592,7593],{"class":35,"line":6941},[33,7594,5910],{"class":64},[33,7596,7597,7599,7601,7603,7605,7607,7609,7611,7613,7615],{"class":35,"line":6965},[33,7598,6178],{"class":60},[33,7600,104],{"class":64},[33,7602,4088],{"class":60},[33,7604,74],{"class":64},[33,7606,134],{"class":60},[33,7608,104],{"class":64},[33,7610,5928],{"class":43},[33,7612,3425],{"class":64},[33,7614,5933],{"class":43},[33,7616,143],{"class":64},[33,7618,7619,7621,7623],{"class":35,"line":6974},[33,7620,1982],{"class":39},[33,7622,5942],{"class":127},[33,7624,274],{"class":64},[33,7626,7627],{"class":35,"line":6979},[33,7628,545],{"class":64},[33,7630,7631,7633,7635,7637],{"class":35,"line":6984},[33,7632,202],{"class":60},[33,7634,74],{"class":64},[33,7636,207],{"class":60},[33,7638,210],{"class":64},[33,7640,7641],{"class":35,"line":6995},[33,7642,51],{"emptyLinePlaceholder":50},[33,7644,7645,7647,7649,7651,7653,7655,7657,7659,7661],{"class":35,"line":7004},[33,7646,4836],{"class":39},[33,7648,4839],{"class":64},[33,7650,1361],{"class":39},[33,7652,1271],{"class":60},[33,7654,74],{"class":64},[33,7656,235],{"class":60},[33,7658,238],{"class":64},[33,7660,4852],{"class":60},[33,7662,4855],{"class":64},[33,7664,7666],{"class":35,"line":7665},57,[33,7667,51],{"emptyLinePlaceholder":50},[33,7669,7671,7673,7675,7677,7679,7681],{"class":35,"line":7670},58,[33,7672,6901],{"class":39},[33,7674,6904],{"class":64},[33,7676,1361],{"class":39},[33,7678,6909],{"class":64},[33,7680,6912],{"class":60},[33,7682,262],{"class":64},[33,7684,7686],{"class":35,"line":7685},59,[33,7687,51],{"emptyLinePlaceholder":50},[33,7689,7691,7693,7695,7697,7699],{"class":35,"line":7690},60,[33,7692,5894],{"class":39},[33,7694,6927],{"class":64},[33,7696,5900],{"class":39},[33,7698,6624],{"class":127},[33,7700,110],{"class":64},[33,7702,7704],{"class":35,"line":7703},61,[33,7705,5910],{"class":64},[33,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727],{"class":35,"line":7708},62,[33,7710,5915],{"class":60},[33,7712,104],{"class":64},[33,7714,4088],{"class":60},[33,7716,74],{"class":64},[33,7718,134],{"class":60},[33,7720,104],{"class":64},[33,7722,5928],{"class":43},[33,7724,3425],{"class":64},[33,7726,6960],{"class":43},[33,7728,143],{"class":64},[33,7730,7732,7734,7736],{"class":35,"line":7731},63,[33,7733,1982],{"class":39},[33,7735,271],{"class":127},[33,7737,274],{"class":64},[33,7739,7741],{"class":35,"line":7740},64,[33,7742,545],{"class":64},[33,7744,7746,7748,7751,7753,7755,7758,7760,7763,7766,7768,7771,7773,7775,7777],{"class":35,"line":7745},65,[33,7747,4836],{"class":39},[33,7749,7750],{"class":64}," future ",[33,7752,1361],{"class":39},[33,7754,6909],{"class":64},[33,7756,7757],{"class":60},"send_request",[33,7759,104],{"class":64},[33,7761,7762],{"class":60},"atoi",[33,7764,7765],{"class":64},"(argv[",[33,7767,1415],{"class":127},[33,7769,7770],{"class":64},"]),",[33,7772,7762],{"class":60},[33,7774,7765],{"class":64},[33,7776,804],{"class":127},[33,7778,7779],{"class":64},"]));\n",[33,7781,7783],{"class":35,"line":7782},66,[33,7784,51],{"emptyLinePlaceholder":50},[33,7786,7788,7790,7792,7794,7796,7799,7802,7805,7807,7809,7812],{"class":35,"line":7787},67,[33,7789,5894],{"class":39},[33,7791,5242],{"class":64},[33,7793,4088],{"class":60},[33,7795,74],{"class":64},[33,7797,7798],{"class":60},"spin_until_future_complete",[33,7800,7801],{"class":64},"(client,future) ",[33,7803,7804],{"class":39},"==",[33,7806,71],{"class":60},[33,7808,74],{"class":64},[33,7810,7811],{"class":60},"FutureReturnCode",[33,7813,7814],{"class":64},"::SUCCESS)\n",[33,7816,7818],{"class":35,"line":7817},68,[33,7819,5910],{"class":64},[33,7821,7823,7825,7828,7830,7832,7835,7837,7839,7842,7845],{"class":35,"line":7822},69,[33,7824,5915],{"class":60},[33,7826,7827],{"class":64},"(client->",[33,7829,134],{"class":60},[33,7831,137],{"class":64},[33,7833,7834],{"class":43},"\"响应成功! sum = ",[33,7836,3657],{"class":127},[33,7838,369],{"class":43},[33,7840,7841],{"class":64},",future.",[33,7843,7844],{"class":60},"get",[33,7846,7847],{"class":64},"()->sum);\n",[33,7849,7851],{"class":35,"line":7850},70,[33,7852,545],{"class":64},[33,7854,7856],{"class":35,"line":7855},71,[33,7857,7858],{"class":39},"  else\n",[33,7860,7862],{"class":35,"line":7861},72,[33,7863,5910],{"class":64},[33,7865,7867,7869,7871,7873,7875,7878],{"class":35,"line":7866},73,[33,7868,5915],{"class":60},[33,7870,7827],{"class":64},[33,7872,134],{"class":60},[33,7874,137],{"class":64},[33,7876,7877],{"class":43},"\"响应失败!\"",[33,7879,143],{"class":64},[33,7881,7883],{"class":35,"line":7882},74,[33,7884,545],{"class":64},[33,7886,7888],{"class":35,"line":7887},75,[33,7889,51],{"emptyLinePlaceholder":50},[33,7891,7893,7895,7897,7899],{"class":35,"line":7892},76,[33,7894,202],{"class":60},[33,7896,74],{"class":64},[33,7898,259],{"class":60},[33,7900,262],{"class":64},[33,7902,7904,7906,7908],{"class":35,"line":7903},77,[33,7905,268],{"class":39},[33,7907,271],{"class":127},[33,7909,274],{"class":64},[33,7911,7913],{"class":35,"line":7912},78,[33,7914,280],{"class":64},[12,7916,7917],{"id":7917},"动作通信_理论",[16,7919,7920],{},[19,7921],{"alt":21,"src":7922},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage618.webp",[16,7924,7925],{},"让B一直给A返回当前机器人的状态信息，这样的行为通信更符合我们操控机器人的导航需求。",[16,7927,7928],{},[19,7929],{"alt":21,"src":7930},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage619.webp",[16,7932,7933],{},"输入10，会累加1-10的所有数，并且会遍历1-10所有的数，并进行累加，累加是需要耗时的，假设每累加一次，耗时一秒，",[16,7935,7936],{},"然后为了好看出来程序运行情况，在每累加的时候，都发一个INFO，代表当前进度。",[16,7938,7939],{},[19,7940],{"alt":21,"src":7941},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage620.webp",[16,7943,7944],{},"可以在进行任务时，把任务取消掉。",[16,7946,7947],{},"第一步，客户端给服务端发目标数据",[16,7949,7950],{},"第二步，服务端评估目标数据，并反馈给客户端这个评估结果(是否能够达到目标)",[16,7952,7953],{},"第三步，客户端再给服务端发最终确定的目标数据",[16,7955,7956],{},"第四步，服务端一直反馈给客户端执行的过程数据",[16,7958,7959],{},"第五步，结束之后，服务端反馈给客户端最终的结果",[16,7961,7962],{},[19,7963],{"alt":21,"src":7964},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage621.webp",[562,7966],{},[16,7968,7969],{},[19,7970],{"alt":21,"src":7971},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage622.webp",[16,7973,7974],{},[19,7975],{"alt":21,"src":7976},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage623.webp",[16,7978,7979],{},[19,7980],{"alt":21,"src":7981},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage624.webp",[16,7983,7984],{},[19,7985],{"alt":21,"src":7986},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage625.webp",[16,7988,7989],{},[19,7990],{"alt":21,"src":7991},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage626.webp",[16,7993,7994],{},"ros2 pkg create cpp03_action --build-type ament_cmake --dependencies rclcpp rclcpp_action base_interfaces_demo --node-name demo01_action_server",[562,7996],{},[16,7998,7999],{},[19,8000],{"alt":21,"src":8001},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage627.webp",[16,8003,8004],{},[19,8005],{"alt":21,"src":8006},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage628.webp",[16,8008,8009],{},"最顶上是请求数据，",[16,8011,8012],{},"中间是最终响应结果的数据，",[16,8014,8015],{},"最底下是连续反馈的数据。",[16,8017,8018],{},[19,8019],{"alt":21,"src":8020},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage629.webp",[16,8022,8023],{},[19,8024],{"alt":21,"src":8025},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage630.webp",[16,8027,8028],{},[19,8029],{"alt":21,"src":8030},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage631.webp",[16,8032,8033],{},[19,8034],{"alt":21,"src":8035},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage632.webp",[16,8037,8038],{},"depend是build depend,exe depend,export depend三者的集成。",[16,8040,8041],{},[19,8042],{"alt":21,"src":8043},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage633.webp",[16,8045,8046],{},[19,8047],{"alt":21,"src":8048},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage634.webp",[16,8050,8051],{},[19,8052],{"alt":21,"src":8053},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage635.webp",[16,8055,8056],{},[19,8057],{"alt":21,"src":8058},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage636.webp",[16,8060,8061],{},[19,8062],{"alt":21,"src":8063},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage637.webp",[16,8065,8066],{},[19,8067],{"alt":21,"src":8068},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage638.webp",[16,8070,8071],{},[19,8072],{"alt":21,"src":8073},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage639.webp",[16,8075,8076],{},[19,8077],{"alt":21,"src":8078},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage640.webp",[16,8080,8081],{},"ros2 interface show base_interfaces_demo\u002Faction\u002FProgress",[12,8083,8085],{"id":8084},"动作通信_实验1_服务端实现c","动作通信_实验1_服务端实现(C++)",[16,8087,8088],{},[19,8089],{"alt":21,"src":8090},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage641.webp",[24,8092,8094],{"className":26,"code":8093,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,8095,8096,8102,8106,8123,8127,8131,8147,8151,8170,8174,8178,8182,8204,8208,8218,8222,8245,8249,8259,8267],{"__ignoreMap":21},[33,8097,8098,8100],{"class":35,"line":36},[33,8099,40],{"class":39},[33,8101,44],{"class":43},[33,8103,8104],{"class":35,"line":47},[33,8105,51],{"emptyLinePlaceholder":50},[33,8107,8108,8110,8113,8115,8117,8119,8121],{"class":35,"line":54},[33,8109,57],{"class":39},[33,8111,8112],{"class":60}," ProgressActionServer",[33,8114,65],{"class":64},[33,8116,68],{"class":39},[33,8118,71],{"class":60},[33,8120,74],{"class":64},[33,8122,77],{"class":60},[33,8124,8125],{"class":35,"line":80},[33,8126,83],{"class":64},[33,8128,8129],{"class":35,"line":86},[33,8130,89],{"class":39},[33,8132,8133,8136,8138,8140,8142,8145],{"class":35,"line":92},[33,8134,8135],{"class":60},"    ProgressActionServer",[33,8137,98],{"class":64},[33,8139,101],{"class":60},[33,8141,104],{"class":64},[33,8143,8144],{"class":43},"\"progress_action_server_node_cpp\"",[33,8146,110],{"class":64},[33,8148,8149],{"class":35,"line":113},[33,8150,116],{"class":64},[33,8152,8153,8155,8157,8159,8161,8163,8165,8168],{"class":35,"line":119},[33,8154,122],{"class":60},[33,8156,104],{"class":64},[33,8158,128],{"class":127},[33,8160,131],{"class":64},[33,8162,134],{"class":60},[33,8164,137],{"class":64},[33,8166,8167],{"class":43},"\"action服务端创建!\"",[33,8169,143],{"class":64},[33,8171,8172],{"class":35,"line":146},[33,8173,149],{"class":64},[33,8175,8176],{"class":35,"line":152},[33,8177,155],{"class":64},[33,8179,8180],{"class":35,"line":158},[33,8181,51],{"emptyLinePlaceholder":50},[33,8183,8184,8186,8188,8190,8192,8194,8196,8198,8200,8202],{"class":35,"line":163},[33,8185,166],{"class":39},[33,8187,169],{"class":60},[33,8189,104],{"class":64},[33,8191,166],{"class":39},[33,8193,177],{"class":176},[33,8195,180],{"class":64},[33,8197,183],{"class":39},[33,8199,186],{"class":39},[33,8201,189],{"class":176},[33,8203,110],{"class":64},[33,8205,8206],{"class":35,"line":194},[33,8207,83],{"class":64},[33,8209,8210,8212,8214,8216],{"class":35,"line":199},[33,8211,202],{"class":60},[33,8213,74],{"class":64},[33,8215,207],{"class":60},[33,8217,210],{"class":64},[33,8219,8220],{"class":35,"line":213},[33,8221,51],{"emptyLinePlaceholder":50},[33,8223,8224,8226,8228,8230,8232,8234,8236,8238,8240,8243],{"class":35,"line":218},[33,8225,202],{"class":60},[33,8227,74],{"class":64},[33,8229,225],{"class":60},[33,8231,104],{"class":64},[33,8233,230],{"class":60},[33,8235,74],{"class":64},[33,8237,235],{"class":60},[33,8239,238],{"class":64},[33,8241,8242],{"class":60},"ProgressActionServer",[33,8244,244],{"class":64},[33,8246,8247],{"class":35,"line":247},[33,8248,51],{"emptyLinePlaceholder":50},[33,8250,8251,8253,8255,8257],{"class":35,"line":252},[33,8252,202],{"class":60},[33,8254,74],{"class":64},[33,8256,259],{"class":60},[33,8258,262],{"class":64},[33,8260,8261,8263,8265],{"class":35,"line":265},[33,8262,268],{"class":39},[33,8264,271],{"class":127},[33,8266,274],{"class":64},[33,8268,8269],{"class":35,"line":277},[33,8270,280],{"class":64},[16,8272,8273],{},[19,8274],{"alt":21,"src":8275},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage642.webp",[24,8277,8279],{"className":26,"code":8278,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionClient>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,8280,8281,8287,8291,8308,8312,8316,8331,8335,8354,8358,8362,8366,8388,8392,8402,8406,8429,8433,8443,8451],{"__ignoreMap":21},[33,8282,8283,8285],{"class":35,"line":36},[33,8284,40],{"class":39},[33,8286,44],{"class":43},[33,8288,8289],{"class":35,"line":47},[33,8290,51],{"emptyLinePlaceholder":50},[33,8292,8293,8295,8298,8300,8302,8304,8306],{"class":35,"line":54},[33,8294,57],{"class":39},[33,8296,8297],{"class":60}," ProgressActionClient",[33,8299,65],{"class":64},[33,8301,68],{"class":39},[33,8303,71],{"class":60},[33,8305,74],{"class":64},[33,8307,77],{"class":60},[33,8309,8310],{"class":35,"line":80},[33,8311,83],{"class":64},[33,8313,8314],{"class":35,"line":86},[33,8315,89],{"class":39},[33,8317,8318,8321,8323,8325,8327,8329],{"class":35,"line":92},[33,8319,8320],{"class":60},"    ProgressActionClient",[33,8322,98],{"class":64},[33,8324,101],{"class":60},[33,8326,104],{"class":64},[33,8328,8144],{"class":43},[33,8330,110],{"class":64},[33,8332,8333],{"class":35,"line":113},[33,8334,116],{"class":64},[33,8336,8337,8339,8341,8343,8345,8347,8349,8352],{"class":35,"line":119},[33,8338,122],{"class":60},[33,8340,104],{"class":64},[33,8342,128],{"class":127},[33,8344,131],{"class":64},[33,8346,134],{"class":60},[33,8348,137],{"class":64},[33,8350,8351],{"class":43},"\"action客户端创建!\"",[33,8353,143],{"class":64},[33,8355,8356],{"class":35,"line":146},[33,8357,149],{"class":64},[33,8359,8360],{"class":35,"line":152},[33,8361,155],{"class":64},[33,8363,8364],{"class":35,"line":158},[33,8365,51],{"emptyLinePlaceholder":50},[33,8367,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386],{"class":35,"line":163},[33,8369,166],{"class":39},[33,8371,169],{"class":60},[33,8373,104],{"class":64},[33,8375,166],{"class":39},[33,8377,177],{"class":176},[33,8379,180],{"class":64},[33,8381,183],{"class":39},[33,8383,186],{"class":39},[33,8385,189],{"class":176},[33,8387,110],{"class":64},[33,8389,8390],{"class":35,"line":194},[33,8391,83],{"class":64},[33,8393,8394,8396,8398,8400],{"class":35,"line":199},[33,8395,202],{"class":60},[33,8397,74],{"class":64},[33,8399,207],{"class":60},[33,8401,210],{"class":64},[33,8403,8404],{"class":35,"line":213},[33,8405,51],{"emptyLinePlaceholder":50},[33,8407,8408,8410,8412,8414,8416,8418,8420,8422,8424,8427],{"class":35,"line":218},[33,8409,202],{"class":60},[33,8411,74],{"class":64},[33,8413,225],{"class":60},[33,8415,104],{"class":64},[33,8417,230],{"class":60},[33,8419,74],{"class":64},[33,8421,235],{"class":60},[33,8423,238],{"class":64},[33,8425,8426],{"class":60},"ProgressActionClient",[33,8428,244],{"class":64},[33,8430,8431],{"class":35,"line":247},[33,8432,51],{"emptyLinePlaceholder":50},[33,8434,8435,8437,8439,8441],{"class":35,"line":252},[33,8436,202],{"class":60},[33,8438,74],{"class":64},[33,8440,259],{"class":60},[33,8442,262],{"class":64},[33,8444,8445,8447,8449],{"class":35,"line":265},[33,8446,268],{"class":39},[33,8448,271],{"class":127},[33,8450,274],{"class":64},[33,8452,8453],{"class":35,"line":277},[33,8454,280],{"class":64},[16,8456,8457],{},[19,8458],{"alt":21,"src":8459},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage643.webp",[16,8461,8462],{},[19,8463],{"alt":21,"src":8464},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage644.webp",[16,8466,8467],{},[19,8468],{"alt":21,"src":8469},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage645.webp",[16,8471,8472],{},[19,8473],{"alt":21,"src":8474},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage646.webp",[562,8476],{},[16,8478,8479],{},[19,8480],{"alt":21,"src":8481},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage647.webp",[16,8483,8484],{},[19,8485],{"alt":21,"src":8486},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage648.webp",[16,8488,8489],{},[19,8490],{"alt":21,"src":8491},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage649.webp",[16,8493,8494],{},"有俩模板，我们只需要设置action就行了，就是我们的动作接口类型。",[16,8496,8497],{},"第一个参数是node，在class里就用this指针，",[16,8499,8500],{},"第二个参数是话题，字符串，",[16,8502,8503],{},"第三个参数是回调函数用来处理目标值的，",[16,8505,8506],{},"第四个参数是回调函数用来处理取消请求的，",[16,8508,8509],{},"第五个参数是接收目标值之后，该回调函数生成连续反馈，",[16,8511,8512],{},"第六、第七个参数有默认值，先不管，",[16,8514,8515],{},"返回值是action智能指针。",[16,8517,8518],{},[19,8519],{"alt":21,"src":8520},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage650.webp",[16,8522,8523],{},[19,8524],{"alt":21,"src":8525},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage651.webp",[16,8527,8528],{},[19,8529],{"alt":21,"src":8530},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage652.webp",[16,8532,8533],{},[19,8534],{"alt":21,"src":8535},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage653.webp",[16,8537,8538],{},[19,8539],{"alt":21,"src":8540},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage654.webp",[16,8542,8543],{},[19,8544],{"alt":21,"src":8545},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage655.webp",[16,8547,8548],{},"Goal_callback解析：",[16,8550,8551],{},"第一个参数是GoalUUID，",[16,8553,8554],{},"第二个参数是我们动作接口下的Goal，",[16,8556,8557],{},"返回值是goalresponse，用的命名空间是rclcpp_action，底下封装了3个常量，",[16,8559,8560],{},"第一个是接收并马上执行，",[16,8562,8563],{},"第二个是接收并推迟执行，",[16,8565,8566],{},"第三个是拒绝。",[16,8568,8569],{},[19,8570],{"alt":21,"src":8571},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage656.webp",[16,8573,8574],{},[19,8575],{"alt":21,"src":8576},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage657.webp",[16,8578,8579],{},[19,8580],{"alt":21,"src":8581},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage658.webp",[16,8583,8584],{},[19,8585],{"alt":21,"src":8586},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage659.webp",[16,8588,8589],{},[19,8590],{"alt":21,"src":8591},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage660.webp",[16,8593,8594],{},"报错原因是没加占位符",[16,8596,8597],{},[19,8598],{"alt":21,"src":8599},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage661.webp",[16,8601,8602],{},[19,8603],{"alt":21,"src":8604},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage662.webp",[24,8606,8608],{"className":26,"code":8607,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n      \u002F*\n      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n      NodeT>(NodeT node,\n      const std::string &name,\n      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n      *\u002F\n      server_ = rclcpp_action::create_server\u003CProgress>(\n        this,\n        \"get_sum_topic\",\n        std::bind(&ProgressActionServer::handle_goal_callback,this,_1,_2),\n        std::bind(&ProgressActionServer::handle_cancel_callback,this,_1),\n        std::bind(&ProgressActionServer::handle_accepted_callback,this,_1)\n        );\n    }\n    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n    rclcpp_action::GoalResponse handle_goal_callback(const rclcpp_action::GoalUUID &, std::shared_ptr\u003Cconst Progress::Goal>)\n    {\n\n      return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE;\n    }\n\n    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    rclcpp_action::CancelResponse handle_cancel_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n\n      return rclcpp_action::CancelResponse::ACCEPT;\n    }\n\n    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    void handle_accepted_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n    }\n\n  private:\n    rclcpp_action::Server\u003CProgress>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,8609,8610,8616,8623,8630,8634,8648,8661,8674,8678,8694,8698,8702,8716,8720,8738,8742,8747,8752,8757,8762,8767,8772,8777,8782,8786,8808,8815,8822,8845,8867,8889,8894,8898,8903,8953,8957,8961,8974,8978,8982,8987,9029,9033,9037,9050,9054,9058,9063,9096,9100,9104,9108,9112,9127,9131,9135,9157,9161,9171,9175,9197,9201,9211,9219],{"__ignoreMap":21},[33,8611,8612,8614],{"class":35,"line":36},[33,8613,40],{"class":39},[33,8615,44],{"class":43},[33,8617,8618,8620],{"class":35,"line":47},[33,8619,40],{"class":39},[33,8621,8622],{"class":43}," \"rclcpp_action\u002Frclcpp_action.hpp\"\n",[33,8624,8625,8627],{"class":35,"line":54},[33,8626,40],{"class":39},[33,8628,8629],{"class":43}," \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n",[33,8631,8632],{"class":35,"line":80},[33,8633,51],{"emptyLinePlaceholder":50},[33,8635,8636,8638,8640,8642,8645],{"class":35,"line":86},[33,8637,1265],{"class":39},[33,8639,3566],{"class":60},[33,8641,74],{"class":64},[33,8643,8644],{"class":60},"action",[33,8646,8647],{"class":64},"::Progress;\n",[33,8649,8650,8652,8654,8656,8658],{"class":35,"line":92},[33,8651,1265],{"class":39},[33,8653,1271],{"class":60},[33,8655,74],{"class":64},[33,8657,2228],{"class":60},[33,8659,8660],{"class":64},"::_1;\n",[33,8662,8663,8665,8667,8669,8671],{"class":35,"line":113},[33,8664,1265],{"class":39},[33,8666,1271],{"class":60},[33,8668,74],{"class":64},[33,8670,2228],{"class":60},[33,8672,8673],{"class":64},"::_2;\n",[33,8675,8676],{"class":35,"line":119},[33,8677,51],{"emptyLinePlaceholder":50},[33,8679,8680,8682,8684,8686,8688,8690,8692],{"class":35,"line":146},[33,8681,57],{"class":39},[33,8683,8112],{"class":60},[33,8685,65],{"class":64},[33,8687,68],{"class":39},[33,8689,71],{"class":60},[33,8691,74],{"class":64},[33,8693,77],{"class":60},[33,8695,8696],{"class":35,"line":152},[33,8697,83],{"class":64},[33,8699,8700],{"class":35,"line":158},[33,8701,89],{"class":39},[33,8703,8704,8706,8708,8710,8712,8714],{"class":35,"line":163},[33,8705,8135],{"class":60},[33,8707,98],{"class":64},[33,8709,101],{"class":60},[33,8711,104],{"class":64},[33,8713,8144],{"class":43},[33,8715,110],{"class":64},[33,8717,8718],{"class":35,"line":194},[33,8719,116],{"class":64},[33,8721,8722,8724,8726,8728,8730,8732,8734,8736],{"class":35,"line":199},[33,8723,122],{"class":60},[33,8725,104],{"class":64},[33,8727,128],{"class":127},[33,8729,131],{"class":64},[33,8731,134],{"class":60},[33,8733,137],{"class":64},[33,8735,8167],{"class":43},[33,8737,143],{"class":64},[33,8739,8740],{"class":35,"line":213},[33,8741,7447],{"class":4830},[33,8743,8744],{"class":35,"line":218},[33,8745,8746],{"class":4830},"      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n",[33,8748,8749],{"class":35,"line":247},[33,8750,8751],{"class":4830},"      NodeT>(NodeT node,\n",[33,8753,8754],{"class":35,"line":252},[33,8755,8756],{"class":4830},"      const std::string &name,\n",[33,8758,8759],{"class":35,"line":265},[33,8760,8761],{"class":4830},"      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n",[33,8763,8764],{"class":35,"line":277},[33,8765,8766],{"class":4830},"      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n",[33,8768,8769],{"class":35,"line":496},[33,8770,8771],{"class":4830},"      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n",[33,8773,8774],{"class":35,"line":503},[33,8775,8776],{"class":4830},"      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n",[33,8778,8779],{"class":35,"line":511},[33,8780,8781],{"class":4830},"      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n",[33,8783,8784],{"class":35,"line":519},[33,8785,7462],{"class":4830},[33,8787,8788,8790,8792,8795,8797,8800,8802,8805],{"class":35,"line":525},[33,8789,5101],{"class":64},[33,8791,1361],{"class":39},[33,8793,8794],{"class":60}," rclcpp_action",[33,8796,74],{"class":64},[33,8798,8799],{"class":60},"create_server",[33,8801,238],{"class":64},[33,8803,8804],{"class":60},"Progress",[33,8806,8807],{"class":64},">(\n",[33,8809,8810,8813],{"class":35,"line":531},[33,8811,8812],{"class":127},"        this",[33,8814,345],{"class":64},[33,8816,8817,8820],{"class":35,"line":542},[33,8818,8819],{"class":43},"        \"get_sum_topic\"",[33,8821,345],{"class":64},[33,8823,8824,8827,8829,8831,8833,8835,8837,8840,8842],{"class":35,"line":548},[33,8825,8826],{"class":60},"        std",[33,8828,74],{"class":64},[33,8830,1427],{"class":60},[33,8832,104],{"class":64},[33,8834,1432],{"class":39},[33,8836,8242],{"class":60},[33,8838,8839],{"class":64},"::handle_goal_callback,",[33,8841,128],{"class":127},[33,8843,8844],{"class":64},",_1,_2),\n",[33,8846,8847,8849,8851,8853,8855,8857,8859,8862,8864],{"class":35,"line":1642},[33,8848,8826],{"class":60},[33,8850,74],{"class":64},[33,8852,1427],{"class":60},[33,8854,104],{"class":64},[33,8856,1432],{"class":39},[33,8858,8242],{"class":60},[33,8860,8861],{"class":64},"::handle_cancel_callback,",[33,8863,128],{"class":127},[33,8865,8866],{"class":64},",_1),\n",[33,8868,8869,8871,8873,8875,8877,8879,8881,8884,8886],{"class":35,"line":1647},[33,8870,8826],{"class":60},[33,8872,74],{"class":64},[33,8874,1427],{"class":60},[33,8876,104],{"class":64},[33,8878,1432],{"class":39},[33,8880,8242],{"class":60},[33,8882,8883],{"class":64},"::handle_accepted_callback,",[33,8885,128],{"class":127},[33,8887,8888],{"class":64},",_1)\n",[33,8890,8891],{"class":35,"line":1658},[33,8892,8893],{"class":64},"        );\n",[33,8895,8896],{"class":35,"line":1663},[33,8897,149],{"class":64},[33,8899,8900],{"class":35,"line":1686},[33,8901,8902],{"class":4830},"    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n",[33,8904,8905,8908,8910,8913,8916,8918,8920,8922,8924,8927,8929,8931,8933,8935,8938,8940,8942,8945,8947,8950],{"class":35,"line":1691},[33,8906,8907],{"class":60},"    rclcpp_action",[33,8909,74],{"class":64},[33,8911,8912],{"class":60},"GoalResponse",[33,8914,8915],{"class":60}," handle_goal_callback",[33,8917,104],{"class":64},[33,8919,2256],{"class":39},[33,8921,8794],{"class":60},[33,8923,74],{"class":64},[33,8925,8926],{"class":60},"GoalUUID",[33,8928,2269],{"class":39},[33,8930,180],{"class":64},[33,8932,230],{"class":60},[33,8934,74],{"class":64},[33,8936,8937],{"class":60},"shared_ptr",[33,8939,238],{"class":64},[33,8941,2256],{"class":39},[33,8943,8944],{"class":60}," Progress",[33,8946,74],{"class":64},[33,8948,8949],{"class":60},"Goal",[33,8951,8952],{"class":64},">)\n",[33,8954,8955],{"class":35,"line":1702},[33,8956,116],{"class":64},[33,8958,8959],{"class":35,"line":1711},[33,8960,51],{"emptyLinePlaceholder":50},[33,8962,8963,8965,8967,8969,8971],{"class":35,"line":3792},[33,8964,6735],{"class":39},[33,8966,8794],{"class":60},[33,8968,74],{"class":64},[33,8970,8912],{"class":60},[33,8972,8973],{"class":64},"::ACCEPT_AND_EXECUTE;\n",[33,8975,8976],{"class":35,"line":3803},[33,8977,149],{"class":64},[33,8979,8980],{"class":35,"line":3812},[33,8981,51],{"emptyLinePlaceholder":50},[33,8983,8984],{"class":35,"line":6842},[33,8985,8986],{"class":4830},"    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[33,8988,8989,8991,8993,8996,8999,9001,9003,9005,9007,9009,9012,9014,9017,9019,9021,9024,9027],{"class":35,"line":6851},[33,8990,8907],{"class":60},[33,8992,74],{"class":64},[33,8994,8995],{"class":60},"CancelResponse",[33,8997,8998],{"class":60}," handle_cancel_callback",[33,9000,104],{"class":64},[33,9002,230],{"class":60},[33,9004,74],{"class":64},[33,9006,8937],{"class":60},[33,9008,238],{"class":64},[33,9010,9011],{"class":60},"rclcpp_action",[33,9013,74],{"class":64},[33,9015,9016],{"class":60},"ServerGoalHandle",[33,9018,238],{"class":64},[33,9020,8804],{"class":60},[33,9022,9023],{"class":64},">> ",[33,9025,9026],{"class":176},"goal_handle",[33,9028,110],{"class":64},[33,9030,9031],{"class":35,"line":6856},[33,9032,116],{"class":64},[33,9034,9035],{"class":35,"line":6867},[33,9036,51],{"emptyLinePlaceholder":50},[33,9038,9039,9041,9043,9045,9047],{"class":35,"line":6872},[33,9040,6735],{"class":39},[33,9042,8794],{"class":60},[33,9044,74],{"class":64},[33,9046,8995],{"class":60},[33,9048,9049],{"class":64},"::ACCEPT;\n",[33,9051,9052],{"class":35,"line":6893},[33,9053,149],{"class":64},[33,9055,9056],{"class":35,"line":6898},[33,9057,51],{"emptyLinePlaceholder":50},[33,9059,9060],{"class":35,"line":6917},[33,9061,9062],{"class":4830},"    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n",[33,9064,9065,9067,9070,9072,9074,9076,9078,9080,9082,9084,9086,9088,9090,9092,9094],{"class":35,"line":6922},[33,9066,1456],{"class":39},[33,9068,9069],{"class":60}," handle_accepted_callback",[33,9071,104],{"class":64},[33,9073,230],{"class":60},[33,9075,74],{"class":64},[33,9077,8937],{"class":60},[33,9079,238],{"class":64},[33,9081,9011],{"class":60},[33,9083,74],{"class":64},[33,9085,9016],{"class":60},[33,9087,238],{"class":64},[33,9089,8804],{"class":60},[33,9091,9023],{"class":64},[33,9093,9026],{"class":176},[33,9095,110],{"class":64},[33,9097,9098],{"class":35,"line":6936},[33,9099,116],{"class":64},[33,9101,9102],{"class":35,"line":6941},[33,9103,149],{"class":64},[33,9105,9106],{"class":35,"line":6965},[33,9107,51],{"emptyLinePlaceholder":50},[33,9109,9110],{"class":35,"line":6974},[33,9111,1451],{"class":39},[33,9113,9114,9116,9118,9121,9123,9125],{"class":35,"line":6979},[33,9115,8907],{"class":60},[33,9117,74],{"class":64},[33,9119,9120],{"class":60},"Server",[33,9122,238],{"class":64},[33,9124,8804],{"class":60},[33,9126,5311],{"class":64},[33,9128,9129],{"class":35,"line":6984},[33,9130,155],{"class":64},[33,9132,9133],{"class":35,"line":6995},[33,9134,51],{"emptyLinePlaceholder":50},[33,9136,9137,9139,9141,9143,9145,9147,9149,9151,9153,9155],{"class":35,"line":7004},[33,9138,166],{"class":39},[33,9140,169],{"class":60},[33,9142,104],{"class":64},[33,9144,166],{"class":39},[33,9146,177],{"class":176},[33,9148,180],{"class":64},[33,9150,183],{"class":39},[33,9152,186],{"class":39},[33,9154,189],{"class":176},[33,9156,110],{"class":64},[33,9158,9159],{"class":35,"line":7665},[33,9160,83],{"class":64},[33,9162,9163,9165,9167,9169],{"class":35,"line":7670},[33,9164,202],{"class":60},[33,9166,74],{"class":64},[33,9168,207],{"class":60},[33,9170,210],{"class":64},[33,9172,9173],{"class":35,"line":7685},[33,9174,51],{"emptyLinePlaceholder":50},[33,9176,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195],{"class":35,"line":7690},[33,9178,202],{"class":60},[33,9180,74],{"class":64},[33,9182,225],{"class":60},[33,9184,104],{"class":64},[33,9186,230],{"class":60},[33,9188,74],{"class":64},[33,9190,235],{"class":60},[33,9192,238],{"class":64},[33,9194,8242],{"class":60},[33,9196,244],{"class":64},[33,9198,9199],{"class":35,"line":7703},[33,9200,51],{"emptyLinePlaceholder":50},[33,9202,9203,9205,9207,9209],{"class":35,"line":7708},[33,9204,202],{"class":60},[33,9206,74],{"class":64},[33,9208,259],{"class":60},[33,9210,262],{"class":64},[33,9212,9213,9215,9217],{"class":35,"line":7731},[33,9214,268],{"class":39},[33,9216,271],{"class":127},[33,9218,274],{"class":64},[33,9220,9221],{"class":35,"line":7740},[33,9222,280],{"class":64},[16,9224,9225],{},[19,9226],{"alt":21,"src":9227},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage663.webp",[16,9229,9230],{},[19,9231],{"alt":21,"src":9232},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage664.webp",[16,9234,9235],{},[19,9236],{"alt":21,"src":9237},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage665.webp",[16,9239,9240],{},[19,9241],{"alt":21,"src":9242},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage666.webp",[24,9244,9246],{"className":1727,"code":9245,"language":1729,"meta":21,"style":21},"ros2 action send_goal \u002Fget_sum_topic base_interfaces_demo\u002Faction\u002FProgress -f \"{'num': 10}\"\n",[30,9247,9248],{"__ignoreMap":21},[33,9249,9250,9252,9255,9258,9261,9264,9267],{"class":35,"line":36},[33,9251,1736],{"class":60},[33,9253,9254],{"class":43}," action",[33,9256,9257],{"class":43}," send_goal",[33,9259,9260],{"class":43}," \u002Fget_sum_topic",[33,9262,9263],{"class":43}," base_interfaces_demo\u002Faction\u002FProgress",[33,9265,9266],{"class":127}," -f",[33,9268,9269],{"class":43}," \"{'num': 10}\"\n",[16,9271,9272],{},"ros2 action send_goal \u002F话题名称 + 接口类型 + -f + 参数",[16,9274,9275],{},"-f是连续反馈，就是可以获取连续反馈。",[16,9277,9278],{},[19,9279],{"alt":21,"src":9280},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage667.webp",[16,9282,9283],{},"发送目标值为10",[16,9285,9286],{},"然后为我们客户端设置了一个ID，因为可能有多个客户端都访问这个服务端，所以我们要给每个客户端都设置一个唯一的ID",[16,9288,9289],{},"然后结果是0",[16,9291,9292],{},"因为我们程序暂时啥都还没写。",[562,9294],{},[16,9296,9297],{},[19,9298],{"alt":21,"src":9299},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage668.webp",[16,9301,9302],{},"uuid就是客户端ID，在此时没有使用，那就用(void)uuid，因为如果不用，编译器可能报警告。",[16,9304,9305],{},[19,9306],{"alt":21,"src":9307},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage669.webp",[16,9309,9310],{},[19,9311],{"alt":21,"src":9312},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage670.webp",[16,9314,9315],{},[19,9316],{"alt":21,"src":9317},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage671.webp",[16,9319,9320],{},[19,9321],{"alt":21,"src":9322},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage672.webp",[16,9324,9325],{},[19,9326],{"alt":21,"src":9327},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage673.webp",[562,9329],{},[16,9331,9332],{},"我们的这个任务是可以正常被取消的，所以直接return accept就可以，根据不同任务需求来在函数里做不同的事。",[16,9334,9335],{},[19,9336],{"alt":21,"src":9337},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage674.webp",[16,9339,9340],{},[19,9341],{"alt":21,"src":9342},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage675.webp",[562,9344],{},[16,9346,9347],{},"因为我们的连续反馈和最终响应的生成是耗时操作，为了避免主逻辑出现阻塞，建议单独再开一个线程。",[16,9349,9350],{},[19,9351],{"alt":21,"src":9352},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage676.webp",[16,9354,9355],{},[19,9356],{"alt":21,"src":9357},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage677.webp",[16,9359,9360],{},[19,9361],{"alt":21,"src":9362},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage678.webp",[16,9364,9365],{},[19,9366],{"alt":21,"src":9367},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage679.webp",[16,9369,9370],{},[19,9371],{"alt":21,"src":9372},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage680.webp",[16,9374,9375],{},"生成连续反馈的API，需要传参，传入的参数就是Progress里的Feedback对象。",[16,9377,9378],{},[19,9379],{"alt":21,"src":9380},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage681.webp",[16,9382,9383],{},"get_goal()可以获取目标值",[16,9385,9386],{},[19,9387],{"alt":21,"src":9388},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage682.webp",[16,9390,9391],{},[19,9392],{"alt":21,"src":9393},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage683.webp",[16,9395,9396],{},"因为这是个耗时操作，为了看出效果来，所以咱们每次循环的时候都给设置一下休眠。",[16,9398,9399],{},[19,9400],{"alt":21,"src":9401},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage684.webp",[16,9403,9404],{},"1.0是指1Hz，也就是每隔1秒执行一次。",[16,9406,9407],{},[19,9408],{"alt":21,"src":9409},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage685.webp",[16,9411,9412],{},"因为1Hz，所以我们这个rate.sleep()每次都会休眠1秒钟;",[16,9414,9415],{},[19,9416],{"alt":21,"src":9417},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage686.webp",[16,9419,9420],{},"生成最终结果的API，需要传参，传入的参数就是Progress里的Result对象。",[16,9422,9423],{},[19,9424],{"alt":21,"src":9425},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage687.webp",[16,9427,9428],{},"ok()函数的返回值：如果正常运行，则返回true，如果不正常运行则返回false",[16,9430,9431],{},[19,9432],{"alt":21,"src":9433},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage688.webp",[16,9435,9436],{},[19,9437],{"alt":21,"src":9438},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage689.webp",[16,9440,9441],{},[19,9442],{"alt":21,"src":9443},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage690.webp",[16,9445,9446],{},[19,9447],{"alt":21,"src":9448},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage691.webp",[16,9450,9451],{},[19,9452],{"alt":21,"src":9453},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage692.webp",[16,9455,9456],{},[19,9457],{"alt":21,"src":9458},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage693.webp",[16,9460,9461],{},[19,9462],{"alt":21,"src":9463},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage694.webp",[16,9465,9466],{},[19,9467],{"alt":21,"src":9468},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage695.webp",[16,9470,9471],{},[19,9472],{"alt":21,"src":9473},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage696.webp",[16,9475,9476],{},[19,9477],{"alt":21,"src":9478},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage697.webp",[562,9480],{},[16,9482,9483],{},"bug：当我们终止客户端之后，服务端没有停止运行。服务端要一直执行到程序结束。",[16,9485,9486],{},[19,9487],{"alt":21,"src":9488},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage698.webp",[16,9490,9491],{},"bug解决思路：",[16,9493,9494],{},"接收到取消请求后，就是中断我的主逻辑，也就是execute_callback被关闭，",[16,9496,9497],{},[19,9498],{"alt":21,"src":9499},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage699.webp",[16,9501,9502],{},"这个函数返回值是布尔值，如果接收到了取消请求就返回true，否则返回false，",[16,9504,9505],{},[19,9506],{"alt":21,"src":9507},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage700.webp",[16,9509,9510],{},"我们取消之后，其实仍然可以向客户端反应最终的结果，用canceled函数，",[16,9512,9513],{},[19,9514],{"alt":21,"src":9515},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage701.webp",[16,9517,9518],{},[19,9519],{"alt":21,"src":9520},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage702.webp",[16,9522,9523],{},[19,9524],{"alt":21,"src":9525},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage703.webp",[16,9527,9528],{},"要把定义result放在前面。",[16,9530,9531],{},[19,9532],{"alt":21,"src":9533},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage704.webp",[16,9535,9536],{},[19,9537],{"alt":21,"src":9538},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage705.webp",[16,9540,9541],{},[19,9542],{"alt":21,"src":9543},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage706.webp",[24,9545,9547],{"className":26,"code":9546,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionServer: public rclcpp::Node\n{\n  public:\n    ProgressActionServer():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action服务端创建!\");\n      \u002F*\n      rclcpp_action::Server\u003CActionT>::SharedPtr create_server\u003CActionT,\n      NodeT>(NodeT node,\n      const std::string &name,\n      rclcpp_action::Server\u003CActionT>::GoalCallback handle_goal,\n      rclcpp_action::Server\u003CActionT>::CancelCallback handle_cancel,\n      rclcpp_action::Server\u003CActionT>::AcceptedCallback handle_accepted,\n      const rcl_action_server_options_t &options = rcl_action_server_get_default_options(),\n      rclcpp::CallbackGroup::SharedPtr group = nullptr)\n      *\u002F\n      server_ = rclcpp_action::create_server\u003CProgress>(\n        this,\n        \"get_sum_topic\",\n        std::bind(&ProgressActionServer::handle_goal_callback,this,_1,_2),\n        std::bind(&ProgressActionServer::handle_cancel_callback,this,_1),\n        std::bind(&ProgressActionServer::handle_accepted_callback,this,_1)\n        );\n    }\n\n    \u002F\u002Fstd::function\u003CGoalResponse(const GoalUUID &, std::shared_ptr\u003Cconst typename ActionT::Goal>)>\n    rclcpp_action::GoalResponse handle_goal_callback(const rclcpp_action::GoalUUID &uuid, std::shared_ptr\u003Cconst Progress::Goal> goal)\n    {\n      (void)uuid;\n      if(goal->num \u003C= 1)\n      {\n        RCLCPP_INFO(this->get_logger(),\"提交的目标值必须大于1!\");\n        return rclcpp_action::GoalResponse::REJECT;\n      }\n      RCLCPP_INFO(this->get_logger(),\"提交的目标值合法!\");\n      return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE;\n    }\n\n    \u002F\u002Fstd::function\u003CCancelResponse(std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    rclcpp_action::CancelResponse handle_cancel_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      (void)goal_handle;\n      RCLCPP_INFO(this->get_logger(),\"接收到任务取消请求!\");\n      return rclcpp_action::CancelResponse::ACCEPT;\n    }\n\n    \u002F\u002Fstd::function\u003Cvoid (std::shared_ptr\u003CServerGoalHandle\u003CActionT>>)>\n    void execute_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      \u002F\u002Fvoid publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n      \u002F\u002Fgoal_handle->publish_feedback();\n      int num = goal_handle->get_goal()->num;\n      int sum = 0;\n      auto feedback = std::make_sharedautolinkProgress::Feedbackautolink();\n      auto result = std::make_sharedautolinkProgress::Resultautolink();\n      rclcpp::Rate rate(1.0);\n      for (int32_t i = 1; i \u003C= num; i++)\n      {\n        sum += i;\n        double progress = i \u002F (double)num;\n        feedback->progress = progress;\n\n        goal_handle->publish_feedback(feedback);\n        RCLCPP_INFO(this->get_logger(),\"连续反馈中，当前进度为:%.2f\",progress);\n\n        if(goal_handle->is_canceling() == true)\n        {\n          result->sum = sum;\n          goal_handle->canceled(result);\n          RCLCPP_INFO(this->get_logger(),\"任务被取消了!\");\n          return;\n        }\n\n        rate.sleep();\n      }\n\n      \u002F\u002Fvoid succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n      \u002F\u002Fgoal_handle->succeed();\n\n      if(rclcpp::ok() == true)\n      {\n        result->sum = sum;\n        goal_handle->succeed(result);\n        RCLCPP_INFO(this->get_logger(),\"最终响应结果为:%d\",sum);\n      }\n\n    }\n\n    void handle_accepted_callback(std::shared_ptr\u003Crclcpp_action::ServerGoalHandle\u003CProgress>> goal_handle)\n    {\n      std::thread(std::bind(&ProgressActionServer::execute_callback,this,goal_handle)).detach();\n    }\n\n  private:\n    rclcpp_action::Server\u003CProgress>::SharedPtr server_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionServer>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,9548,9549,9555,9561,9567,9571,9583,9595,9607,9611,9627,9631,9635,9649,9653,9671,9675,9679,9683,9687,9691,9695,9699,9703,9707,9711,9729,9735,9741,9761,9781,9801,9805,9809,9813,9817,9868,9872,9883,9898,9902,9921,9935,9939,9958,9970,9974,9978,9982,10018,10022,10031,10050,10062,10066,10070,10074,10107,10111,10116,10121,10140,10153,10176,10198,10216,10244,10248,10259,10282,10292,10296,10307,10331,10335,10353,10357,10367,10378,10397,10404,10409,10414,10425,10430,10435,10441,10447,10452,10473,10478,10488,10498,10523,10528,10533,10538,10543,10576,10581,10619,10624,10629,10634,10649,10654,10659,10682,10687,10698,10703,10726,10731,10742,10751],{"__ignoreMap":21},[33,9550,9551,9553],{"class":35,"line":36},[33,9552,40],{"class":39},[33,9554,44],{"class":43},[33,9556,9557,9559],{"class":35,"line":47},[33,9558,40],{"class":39},[33,9560,8622],{"class":43},[33,9562,9563,9565],{"class":35,"line":54},[33,9564,40],{"class":39},[33,9566,8629],{"class":43},[33,9568,9569],{"class":35,"line":80},[33,9570,51],{"emptyLinePlaceholder":50},[33,9572,9573,9575,9577,9579,9581],{"class":35,"line":86},[33,9574,1265],{"class":39},[33,9576,3566],{"class":60},[33,9578,74],{"class":64},[33,9580,8644],{"class":60},[33,9582,8647],{"class":64},[33,9584,9585,9587,9589,9591,9593],{"class":35,"line":92},[33,9586,1265],{"class":39},[33,9588,1271],{"class":60},[33,9590,74],{"class":64},[33,9592,2228],{"class":60},[33,9594,8660],{"class":64},[33,9596,9597,9599,9601,9603,9605],{"class":35,"line":113},[33,9598,1265],{"class":39},[33,9600,1271],{"class":60},[33,9602,74],{"class":64},[33,9604,2228],{"class":60},[33,9606,8673],{"class":64},[33,9608,9609],{"class":35,"line":119},[33,9610,51],{"emptyLinePlaceholder":50},[33,9612,9613,9615,9617,9619,9621,9623,9625],{"class":35,"line":146},[33,9614,57],{"class":39},[33,9616,8112],{"class":60},[33,9618,65],{"class":64},[33,9620,68],{"class":39},[33,9622,71],{"class":60},[33,9624,74],{"class":64},[33,9626,77],{"class":60},[33,9628,9629],{"class":35,"line":152},[33,9630,83],{"class":64},[33,9632,9633],{"class":35,"line":158},[33,9634,89],{"class":39},[33,9636,9637,9639,9641,9643,9645,9647],{"class":35,"line":163},[33,9638,8135],{"class":60},[33,9640,98],{"class":64},[33,9642,101],{"class":60},[33,9644,104],{"class":64},[33,9646,8144],{"class":43},[33,9648,110],{"class":64},[33,9650,9651],{"class":35,"line":194},[33,9652,116],{"class":64},[33,9654,9655,9657,9659,9661,9663,9665,9667,9669],{"class":35,"line":199},[33,9656,122],{"class":60},[33,9658,104],{"class":64},[33,9660,128],{"class":127},[33,9662,131],{"class":64},[33,9664,134],{"class":60},[33,9666,137],{"class":64},[33,9668,8167],{"class":43},[33,9670,143],{"class":64},[33,9672,9673],{"class":35,"line":213},[33,9674,7447],{"class":4830},[33,9676,9677],{"class":35,"line":218},[33,9678,8746],{"class":4830},[33,9680,9681],{"class":35,"line":247},[33,9682,8751],{"class":4830},[33,9684,9685],{"class":35,"line":252},[33,9686,8756],{"class":4830},[33,9688,9689],{"class":35,"line":265},[33,9690,8761],{"class":4830},[33,9692,9693],{"class":35,"line":277},[33,9694,8766],{"class":4830},[33,9696,9697],{"class":35,"line":496},[33,9698,8771],{"class":4830},[33,9700,9701],{"class":35,"line":503},[33,9702,8776],{"class":4830},[33,9704,9705],{"class":35,"line":511},[33,9706,8781],{"class":4830},[33,9708,9709],{"class":35,"line":519},[33,9710,7462],{"class":4830},[33,9712,9713,9715,9717,9719,9721,9723,9725,9727],{"class":35,"line":525},[33,9714,5101],{"class":64},[33,9716,1361],{"class":39},[33,9718,8794],{"class":60},[33,9720,74],{"class":64},[33,9722,8799],{"class":60},[33,9724,238],{"class":64},[33,9726,8804],{"class":60},[33,9728,8807],{"class":64},[33,9730,9731,9733],{"class":35,"line":531},[33,9732,8812],{"class":127},[33,9734,345],{"class":64},[33,9736,9737,9739],{"class":35,"line":542},[33,9738,8819],{"class":43},[33,9740,345],{"class":64},[33,9742,9743,9745,9747,9749,9751,9753,9755,9757,9759],{"class":35,"line":548},[33,9744,8826],{"class":60},[33,9746,74],{"class":64},[33,9748,1427],{"class":60},[33,9750,104],{"class":64},[33,9752,1432],{"class":39},[33,9754,8242],{"class":60},[33,9756,8839],{"class":64},[33,9758,128],{"class":127},[33,9760,8844],{"class":64},[33,9762,9763,9765,9767,9769,9771,9773,9775,9777,9779],{"class":35,"line":1642},[33,9764,8826],{"class":60},[33,9766,74],{"class":64},[33,9768,1427],{"class":60},[33,9770,104],{"class":64},[33,9772,1432],{"class":39},[33,9774,8242],{"class":60},[33,9776,8861],{"class":64},[33,9778,128],{"class":127},[33,9780,8866],{"class":64},[33,9782,9783,9785,9787,9789,9791,9793,9795,9797,9799],{"class":35,"line":1647},[33,9784,8826],{"class":60},[33,9786,74],{"class":64},[33,9788,1427],{"class":60},[33,9790,104],{"class":64},[33,9792,1432],{"class":39},[33,9794,8242],{"class":60},[33,9796,8883],{"class":64},[33,9798,128],{"class":127},[33,9800,8888],{"class":64},[33,9802,9803],{"class":35,"line":1658},[33,9804,8893],{"class":64},[33,9806,9807],{"class":35,"line":1663},[33,9808,149],{"class":64},[33,9810,9811],{"class":35,"line":1686},[33,9812,51],{"emptyLinePlaceholder":50},[33,9814,9815],{"class":35,"line":1691},[33,9816,8902],{"class":4830},[33,9818,9819,9821,9823,9825,9827,9829,9831,9833,9835,9837,9839,9842,9844,9846,9848,9850,9852,9854,9856,9858,9860,9863,9866],{"class":35,"line":1702},[33,9820,8907],{"class":60},[33,9822,74],{"class":64},[33,9824,8912],{"class":60},[33,9826,8915],{"class":60},[33,9828,104],{"class":64},[33,9830,2256],{"class":39},[33,9832,8794],{"class":60},[33,9834,74],{"class":64},[33,9836,8926],{"class":60},[33,9838,2269],{"class":39},[33,9840,9841],{"class":176},"uuid",[33,9843,180],{"class":64},[33,9845,230],{"class":60},[33,9847,74],{"class":64},[33,9849,8937],{"class":60},[33,9851,238],{"class":64},[33,9853,2256],{"class":39},[33,9855,8944],{"class":60},[33,9857,74],{"class":64},[33,9859,8949],{"class":60},[33,9861,9862],{"class":64},"> ",[33,9864,9865],{"class":176},"goal",[33,9867,110],{"class":64},[33,9869,9870],{"class":35,"line":1711},[33,9871,116],{"class":64},[33,9873,9874,9877,9880],{"class":35,"line":3792},[33,9875,9876],{"class":64},"      (",[33,9878,9879],{"class":39},"void",[33,9881,9882],{"class":64},")uuid;\n",[33,9884,9885,9888,9891,9894,9896],{"class":35,"line":3803},[33,9886,9887],{"class":39},"      if",[33,9889,9890],{"class":64},"(goal->num ",[33,9892,9893],{"class":39},"\u003C=",[33,9895,5942],{"class":127},[33,9897,110],{"class":64},[33,9899,9900],{"class":35,"line":3812},[33,9901,6631],{"class":64},[33,9903,9904,9906,9908,9910,9912,9914,9916,9919],{"class":35,"line":6842},[33,9905,1871],{"class":60},[33,9907,104],{"class":64},[33,9909,128],{"class":127},[33,9911,131],{"class":64},[33,9913,134],{"class":60},[33,9915,137],{"class":64},[33,9917,9918],{"class":43},"\"提交的目标值必须大于1!\"",[33,9920,143],{"class":64},[33,9922,9923,9926,9928,9930,9932],{"class":35,"line":6851},[33,9924,9925],{"class":39},"        return",[33,9927,8794],{"class":60},[33,9929,74],{"class":64},[33,9931,8912],{"class":60},[33,9933,9934],{"class":64},"::REJECT;\n",[33,9936,9937],{"class":35,"line":6856},[33,9938,6730],{"class":64},[33,9940,9941,9943,9945,9947,9949,9951,9953,9956],{"class":35,"line":6867},[33,9942,122],{"class":60},[33,9944,104],{"class":64},[33,9946,128],{"class":127},[33,9948,131],{"class":64},[33,9950,134],{"class":60},[33,9952,137],{"class":64},[33,9954,9955],{"class":43},"\"提交的目标值合法!\"",[33,9957,143],{"class":64},[33,9959,9960,9962,9964,9966,9968],{"class":35,"line":6872},[33,9961,6735],{"class":39},[33,9963,8794],{"class":60},[33,9965,74],{"class":64},[33,9967,8912],{"class":60},[33,9969,8973],{"class":64},[33,9971,9972],{"class":35,"line":6893},[33,9973,149],{"class":64},[33,9975,9976],{"class":35,"line":6898},[33,9977,51],{"emptyLinePlaceholder":50},[33,9979,9980],{"class":35,"line":6917},[33,9981,8986],{"class":4830},[33,9983,9984,9986,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008,10010,10012,10014,10016],{"class":35,"line":6922},[33,9985,8907],{"class":60},[33,9987,74],{"class":64},[33,9989,8995],{"class":60},[33,9991,8998],{"class":60},[33,9993,104],{"class":64},[33,9995,230],{"class":60},[33,9997,74],{"class":64},[33,9999,8937],{"class":60},[33,10001,238],{"class":64},[33,10003,9011],{"class":60},[33,10005,74],{"class":64},[33,10007,9016],{"class":60},[33,10009,238],{"class":64},[33,10011,8804],{"class":60},[33,10013,9023],{"class":64},[33,10015,9026],{"class":176},[33,10017,110],{"class":64},[33,10019,10020],{"class":35,"line":6936},[33,10021,116],{"class":64},[33,10023,10024,10026,10028],{"class":35,"line":6941},[33,10025,9876],{"class":64},[33,10027,9879],{"class":39},[33,10029,10030],{"class":64},")goal_handle;\n",[33,10032,10033,10035,10037,10039,10041,10043,10045,10048],{"class":35,"line":6965},[33,10034,122],{"class":60},[33,10036,104],{"class":64},[33,10038,128],{"class":127},[33,10040,131],{"class":64},[33,10042,134],{"class":60},[33,10044,137],{"class":64},[33,10046,10047],{"class":43},"\"接收到任务取消请求!\"",[33,10049,143],{"class":64},[33,10051,10052,10054,10056,10058,10060],{"class":35,"line":6974},[33,10053,6735],{"class":39},[33,10055,8794],{"class":60},[33,10057,74],{"class":64},[33,10059,8995],{"class":60},[33,10061,9049],{"class":64},[33,10063,10064],{"class":35,"line":6979},[33,10065,149],{"class":64},[33,10067,10068],{"class":35,"line":6984},[33,10069,51],{"emptyLinePlaceholder":50},[33,10071,10072],{"class":35,"line":6995},[33,10073,9062],{"class":4830},[33,10075,10076,10078,10081,10083,10085,10087,10089,10091,10093,10095,10097,10099,10101,10103,10105],{"class":35,"line":7004},[33,10077,1456],{"class":39},[33,10079,10080],{"class":60}," execute_callback",[33,10082,104],{"class":64},[33,10084,230],{"class":60},[33,10086,74],{"class":64},[33,10088,8937],{"class":60},[33,10090,238],{"class":64},[33,10092,9011],{"class":60},[33,10094,74],{"class":64},[33,10096,9016],{"class":60},[33,10098,238],{"class":64},[33,10100,8804],{"class":60},[33,10102,9023],{"class":64},[33,10104,9026],{"class":176},[33,10106,110],{"class":64},[33,10108,10109],{"class":35,"line":7665},[33,10110,116],{"class":64},[33,10112,10113],{"class":35,"line":7670},[33,10114,10115],{"class":4830},"      \u002F\u002Fvoid publish_feedback(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Feedback> feedback_msg)\n",[33,10117,10118],{"class":35,"line":7685},[33,10119,10120],{"class":4830},"      \u002F\u002Fgoal_handle->publish_feedback();\n",[33,10122,10123,10126,10129,10131,10134,10137],{"class":35,"line":7690},[33,10124,10125],{"class":39},"      int",[33,10127,10128],{"class":64}," num ",[33,10130,1361],{"class":39},[33,10132,10133],{"class":64}," goal_handle->",[33,10135,10136],{"class":60},"get_goal",[33,10138,10139],{"class":64},"()->num;\n",[33,10141,10142,10144,10147,10149,10151],{"class":35,"line":7703},[33,10143,10125],{"class":39},[33,10145,10146],{"class":64}," sum ",[33,10148,1361],{"class":39},[33,10150,271],{"class":127},[33,10152,274],{"class":64},[33,10154,10155,10157,10160,10162,10164,10166,10169,10171,10174],{"class":35,"line":7708},[33,10156,1471],{"class":39},[33,10158,10159],{"class":64}," feedback ",[33,10161,1361],{"class":39},[33,10163,1271],{"class":60},[33,10165,74],{"class":64},[33,10167,10168],{"class":60},"make_sharedautolinkProgress",[33,10170,74],{"class":64},[33,10172,10173],{"class":60},"Feedbackautolink",[33,10175,262],{"class":64},[33,10177,10178,10180,10183,10185,10187,10189,10191,10193,10196],{"class":35,"line":7731},[33,10179,1471],{"class":39},[33,10181,10182],{"class":64}," result ",[33,10184,1361],{"class":39},[33,10186,1271],{"class":60},[33,10188,74],{"class":64},[33,10190,10168],{"class":60},[33,10192,74],{"class":64},[33,10194,10195],{"class":60},"Resultautolink",[33,10197,262],{"class":64},[33,10199,10200,10203,10206,10209,10211,10214],{"class":35,"line":7740},[33,10201,10202],{"class":60},"      rclcpp",[33,10204,10205],{"class":64},"::Rate ",[33,10207,10208],{"class":60},"rate",[33,10210,104],{"class":64},[33,10212,10213],{"class":127},"1.0",[33,10215,143],{"class":64},[33,10217,10218,10221,10223,10225,10228,10230,10232,10235,10237,10240,10242],{"class":35,"line":7745},[33,10219,10220],{"class":39},"      for",[33,10222,5242],{"class":64},[33,10224,7426],{"class":39},[33,10226,10227],{"class":64}," i ",[33,10229,1361],{"class":39},[33,10231,5942],{"class":127},[33,10233,10234],{"class":64},"; i ",[33,10236,9893],{"class":39},[33,10238,10239],{"class":64}," num; i",[33,10241,1516],{"class":39},[33,10243,110],{"class":64},[33,10245,10246],{"class":35,"line":7782},[33,10247,6631],{"class":64},[33,10249,10250,10253,10256],{"class":35,"line":7787},[33,10251,10252],{"class":64},"        sum ",[33,10254,10255],{"class":39},"+=",[33,10257,10258],{"class":64}," i;\n",[33,10260,10261,10264,10267,10269,10271,10274,10276,10279],{"class":35,"line":7817},[33,10262,10263],{"class":39},"        double",[33,10265,10266],{"class":64}," progress ",[33,10268,1361],{"class":39},[33,10270,10227],{"class":64},[33,10272,10273],{"class":39},"\u002F",[33,10275,5242],{"class":64},[33,10277,10278],{"class":39},"double",[33,10280,10281],{"class":64},")num;\n",[33,10283,10284,10287,10289],{"class":35,"line":7822},[33,10285,10286],{"class":64},"        feedback->progress ",[33,10288,1361],{"class":39},[33,10290,10291],{"class":64}," progress;\n",[33,10293,10294],{"class":35,"line":7850},[33,10295,51],{"emptyLinePlaceholder":50},[33,10297,10298,10301,10304],{"class":35,"line":7855},[33,10299,10300],{"class":64},"        goal_handle->",[33,10302,10303],{"class":60},"publish_feedback",[33,10305,10306],{"class":64},"(feedback);\n",[33,10308,10309,10311,10313,10315,10317,10319,10321,10324,10326,10328],{"class":35,"line":7861},[33,10310,1871],{"class":60},[33,10312,104],{"class":64},[33,10314,128],{"class":127},[33,10316,131],{"class":64},[33,10318,134],{"class":60},[33,10320,137],{"class":64},[33,10322,10323],{"class":43},"\"连续反馈中，当前进度为:",[33,10325,3662],{"class":127},[33,10327,369],{"class":43},[33,10329,10330],{"class":64},",progress);\n",[33,10332,10333],{"class":35,"line":7866},[33,10334,51],{"emptyLinePlaceholder":50},[33,10336,10337,10339,10342,10345,10347,10349,10351],{"class":35,"line":7882},[33,10338,6663],{"class":39},[33,10340,10341],{"class":64},"(goal_handle->",[33,10343,10344],{"class":60},"is_canceling",[33,10346,6675],{"class":64},[33,10348,7804],{"class":39},[33,10350,6624],{"class":127},[33,10352,110],{"class":64},[33,10354,10355],{"class":35,"line":7887},[33,10356,6686],{"class":64},[33,10358,10359,10362,10364],{"class":35,"line":7892},[33,10360,10361],{"class":64},"          result->sum ",[33,10363,1361],{"class":39},[33,10365,10366],{"class":64}," sum;\n",[33,10368,10369,10372,10375],{"class":35,"line":7903},[33,10370,10371],{"class":64},"          goal_handle->",[33,10373,10374],{"class":60},"canceled",[33,10376,10377],{"class":64},"(result);\n",[33,10379,10380,10382,10384,10386,10388,10390,10392,10395],{"class":35,"line":7912},[33,10381,6691],{"class":60},[33,10383,104],{"class":64},[33,10385,128],{"class":127},[33,10387,131],{"class":64},[33,10389,134],{"class":60},[33,10391,137],{"class":64},[33,10393,10394],{"class":43},"\"任务被取消了!\"",[33,10396,143],{"class":64},[33,10398,10400,10402],{"class":35,"line":10399},79,[33,10401,6715],{"class":39},[33,10403,274],{"class":64},[33,10405,10407],{"class":35,"line":10406},80,[33,10408,6725],{"class":64},[33,10410,10412],{"class":35,"line":10411},81,[33,10413,51],{"emptyLinePlaceholder":50},[33,10415,10417,10420,10423],{"class":35,"line":10416},82,[33,10418,10419],{"class":64},"        rate.",[33,10421,10422],{"class":60},"sleep",[33,10424,262],{"class":64},[33,10426,10428],{"class":35,"line":10427},83,[33,10429,6730],{"class":64},[33,10431,10433],{"class":35,"line":10432},84,[33,10434,51],{"emptyLinePlaceholder":50},[33,10436,10438],{"class":35,"line":10437},85,[33,10439,10440],{"class":4830},"      \u002F\u002Fvoid succeed(std::shared_ptr\u003Cbase_interfaces_demo::action::Progress_Result> result_msg)\n",[33,10442,10444],{"class":35,"line":10443},86,[33,10445,10446],{"class":4830},"      \u002F\u002Fgoal_handle->succeed();\n",[33,10448,10450],{"class":35,"line":10449},87,[33,10451,51],{"emptyLinePlaceholder":50},[33,10453,10455,10457,10459,10461,10463,10465,10467,10469,10471],{"class":35,"line":10454},88,[33,10456,9887],{"class":39},[33,10458,104],{"class":64},[33,10460,4088],{"class":60},[33,10462,74],{"class":64},[33,10464,6672],{"class":60},[33,10466,6675],{"class":64},[33,10468,7804],{"class":39},[33,10470,6624],{"class":127},[33,10472,110],{"class":64},[33,10474,10476],{"class":35,"line":10475},89,[33,10477,6631],{"class":64},[33,10479,10481,10484,10486],{"class":35,"line":10480},90,[33,10482,10483],{"class":64},"        result->sum ",[33,10485,1361],{"class":39},[33,10487,10366],{"class":64},[33,10489,10491,10493,10496],{"class":35,"line":10490},91,[33,10492,10300],{"class":64},[33,10494,10495],{"class":60},"succeed",[33,10497,10377],{"class":64},[33,10499,10501,10503,10505,10507,10509,10511,10513,10516,10518,10520],{"class":35,"line":10500},92,[33,10502,1871],{"class":60},[33,10504,104],{"class":64},[33,10506,128],{"class":127},[33,10508,131],{"class":64},[33,10510,134],{"class":60},[33,10512,137],{"class":64},[33,10514,10515],{"class":43},"\"最终响应结果为:",[33,10517,3657],{"class":127},[33,10519,369],{"class":43},[33,10521,10522],{"class":64},",sum);\n",[33,10524,10526],{"class":35,"line":10525},93,[33,10527,6730],{"class":64},[33,10529,10531],{"class":35,"line":10530},94,[33,10532,51],{"emptyLinePlaceholder":50},[33,10534,10536],{"class":35,"line":10535},95,[33,10537,149],{"class":64},[33,10539,10541],{"class":35,"line":10540},96,[33,10542,51],{"emptyLinePlaceholder":50},[33,10544,10546,10548,10550,10552,10554,10556,10558,10560,10562,10564,10566,10568,10570,10572,10574],{"class":35,"line":10545},97,[33,10547,1456],{"class":39},[33,10549,9069],{"class":60},[33,10551,104],{"class":64},[33,10553,230],{"class":60},[33,10555,74],{"class":64},[33,10557,8937],{"class":60},[33,10559,238],{"class":64},[33,10561,9011],{"class":60},[33,10563,74],{"class":64},[33,10565,9016],{"class":60},[33,10567,238],{"class":64},[33,10569,8804],{"class":60},[33,10571,9023],{"class":64},[33,10573,9026],{"class":176},[33,10575,110],{"class":64},[33,10577,10579],{"class":35,"line":10578},98,[33,10580,116],{"class":64},[33,10582,10584,10587,10589,10592,10594,10596,10598,10600,10602,10604,10606,10609,10611,10614,10617],{"class":35,"line":10583},99,[33,10585,10586],{"class":60},"      std",[33,10588,74],{"class":64},[33,10590,10591],{"class":60},"thread",[33,10593,104],{"class":64},[33,10595,230],{"class":60},[33,10597,74],{"class":64},[33,10599,1427],{"class":60},[33,10601,104],{"class":64},[33,10603,1432],{"class":39},[33,10605,8242],{"class":60},[33,10607,10608],{"class":64},"::execute_callback,",[33,10610,128],{"class":127},[33,10612,10613],{"class":64},",goal_handle)).",[33,10615,10616],{"class":60},"detach",[33,10618,262],{"class":64},[33,10620,10622],{"class":35,"line":10621},100,[33,10623,149],{"class":64},[33,10625,10627],{"class":35,"line":10626},101,[33,10628,51],{"emptyLinePlaceholder":50},[33,10630,10632],{"class":35,"line":10631},102,[33,10633,1451],{"class":39},[33,10635,10637,10639,10641,10643,10645,10647],{"class":35,"line":10636},103,[33,10638,8907],{"class":60},[33,10640,74],{"class":64},[33,10642,9120],{"class":60},[33,10644,238],{"class":64},[33,10646,8804],{"class":60},[33,10648,5311],{"class":64},[33,10650,10652],{"class":35,"line":10651},104,[33,10653,155],{"class":64},[33,10655,10657],{"class":35,"line":10656},105,[33,10658,51],{"emptyLinePlaceholder":50},[33,10660,10662,10664,10666,10668,10670,10672,10674,10676,10678,10680],{"class":35,"line":10661},106,[33,10663,166],{"class":39},[33,10665,169],{"class":60},[33,10667,104],{"class":64},[33,10669,166],{"class":39},[33,10671,177],{"class":176},[33,10673,180],{"class":64},[33,10675,183],{"class":39},[33,10677,186],{"class":39},[33,10679,189],{"class":176},[33,10681,110],{"class":64},[33,10683,10685],{"class":35,"line":10684},107,[33,10686,83],{"class":64},[33,10688,10690,10692,10694,10696],{"class":35,"line":10689},108,[33,10691,202],{"class":60},[33,10693,74],{"class":64},[33,10695,207],{"class":60},[33,10697,210],{"class":64},[33,10699,10701],{"class":35,"line":10700},109,[33,10702,51],{"emptyLinePlaceholder":50},[33,10704,10706,10708,10710,10712,10714,10716,10718,10720,10722,10724],{"class":35,"line":10705},110,[33,10707,202],{"class":60},[33,10709,74],{"class":64},[33,10711,225],{"class":60},[33,10713,104],{"class":64},[33,10715,230],{"class":60},[33,10717,74],{"class":64},[33,10719,235],{"class":60},[33,10721,238],{"class":64},[33,10723,8242],{"class":60},[33,10725,244],{"class":64},[33,10727,10729],{"class":35,"line":10728},111,[33,10730,51],{"emptyLinePlaceholder":50},[33,10732,10734,10736,10738,10740],{"class":35,"line":10733},112,[33,10735,202],{"class":60},[33,10737,74],{"class":64},[33,10739,259],{"class":60},[33,10741,262],{"class":64},[33,10743,10745,10747,10749],{"class":35,"line":10744},113,[33,10746,268],{"class":39},[33,10748,271],{"class":127},[33,10750,274],{"class":64},[33,10752,10754],{"class":35,"line":10753},114,[33,10755,280],{"class":64},[12,10757,10759],{"id":10758},"动作通信_实验1_客户端实现c","动作通信_实验1_客户端实现(C++)",[16,10761,10762],{},[19,10763],{"alt":21,"src":10764},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage707.webp",[16,10766,10767],{},"这条红色的线是在action_client帮我们封装好的，所以可以不用管。",[16,10769,10770],{},[19,10771],{"alt":21,"src":10772},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage708.webp",[24,10774,10776],{"className":26,"code":10775,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 2)\n  {\n    RCLCPP_INFO(rclcpp::get_logger(\"rclcppp\"),\"请输入一个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  rclcpp::spin(std::make_shared\u003CProgressActionClient>());\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,10777,10778,10784,10788,10804,10808,10812,10826,10830,10848,10852,10856,10860,10882,10886,10899,10903,10927,10935,10939,10949,10953,10975,10979,10989,10997],{"__ignoreMap":21},[33,10779,10780,10782],{"class":35,"line":36},[33,10781,40],{"class":39},[33,10783,44],{"class":43},[33,10785,10786],{"class":35,"line":47},[33,10787,51],{"emptyLinePlaceholder":50},[33,10789,10790,10792,10794,10796,10798,10800,10802],{"class":35,"line":54},[33,10791,57],{"class":39},[33,10793,8297],{"class":60},[33,10795,65],{"class":64},[33,10797,68],{"class":39},[33,10799,71],{"class":60},[33,10801,74],{"class":64},[33,10803,77],{"class":60},[33,10805,10806],{"class":35,"line":80},[33,10807,83],{"class":64},[33,10809,10810],{"class":35,"line":86},[33,10811,89],{"class":39},[33,10813,10814,10816,10818,10820,10822,10824],{"class":35,"line":92},[33,10815,8320],{"class":60},[33,10817,98],{"class":64},[33,10819,101],{"class":60},[33,10821,104],{"class":64},[33,10823,8144],{"class":43},[33,10825,110],{"class":64},[33,10827,10828],{"class":35,"line":113},[33,10829,116],{"class":64},[33,10831,10832,10834,10836,10838,10840,10842,10844,10846],{"class":35,"line":119},[33,10833,122],{"class":60},[33,10835,104],{"class":64},[33,10837,128],{"class":127},[33,10839,131],{"class":64},[33,10841,134],{"class":60},[33,10843,137],{"class":64},[33,10845,8351],{"class":43},[33,10847,143],{"class":64},[33,10849,10850],{"class":35,"line":146},[33,10851,149],{"class":64},[33,10853,10854],{"class":35,"line":152},[33,10855,155],{"class":64},[33,10857,10858],{"class":35,"line":158},[33,10859,51],{"emptyLinePlaceholder":50},[33,10861,10862,10864,10866,10868,10870,10872,10874,10876,10878,10880],{"class":35,"line":163},[33,10863,166],{"class":39},[33,10865,169],{"class":60},[33,10867,104],{"class":64},[33,10869,166],{"class":39},[33,10871,177],{"class":176},[33,10873,180],{"class":64},[33,10875,183],{"class":39},[33,10877,186],{"class":39},[33,10879,189],{"class":176},[33,10881,110],{"class":64},[33,10883,10884],{"class":35,"line":194},[33,10885,83],{"class":64},[33,10887,10888,10890,10892,10894,10897],{"class":35,"line":199},[33,10889,5894],{"class":39},[33,10891,5897],{"class":64},[33,10893,5900],{"class":39},[33,10895,10896],{"class":127}," 2",[33,10898,110],{"class":64},[33,10900,10901],{"class":35,"line":213},[33,10902,5910],{"class":64},[33,10904,10905,10907,10909,10911,10913,10915,10917,10920,10922,10925],{"class":35,"line":218},[33,10906,5915],{"class":60},[33,10908,104],{"class":64},[33,10910,4088],{"class":60},[33,10912,74],{"class":64},[33,10914,134],{"class":60},[33,10916,104],{"class":64},[33,10918,10919],{"class":43},"\"rclcppp\"",[33,10921,3425],{"class":64},[33,10923,10924],{"class":43},"\"请输入一个整形数字!\"",[33,10926,143],{"class":64},[33,10928,10929,10931,10933],{"class":35,"line":247},[33,10930,1982],{"class":39},[33,10932,5942],{"class":127},[33,10934,274],{"class":64},[33,10936,10937],{"class":35,"line":252},[33,10938,545],{"class":64},[33,10940,10941,10943,10945,10947],{"class":35,"line":265},[33,10942,202],{"class":60},[33,10944,74],{"class":64},[33,10946,207],{"class":60},[33,10948,210],{"class":64},[33,10950,10951],{"class":35,"line":277},[33,10952,51],{"emptyLinePlaceholder":50},[33,10954,10955,10957,10959,10961,10963,10965,10967,10969,10971,10973],{"class":35,"line":496},[33,10956,202],{"class":60},[33,10958,74],{"class":64},[33,10960,225],{"class":60},[33,10962,104],{"class":64},[33,10964,230],{"class":60},[33,10966,74],{"class":64},[33,10968,235],{"class":60},[33,10970,238],{"class":64},[33,10972,8426],{"class":60},[33,10974,244],{"class":64},[33,10976,10977],{"class":35,"line":503},[33,10978,51],{"emptyLinePlaceholder":50},[33,10980,10981,10983,10985,10987],{"class":35,"line":511},[33,10982,202],{"class":60},[33,10984,74],{"class":64},[33,10986,259],{"class":60},[33,10988,262],{"class":64},[33,10990,10991,10993,10995],{"class":35,"line":519},[33,10992,268],{"class":39},[33,10994,271],{"class":127},[33,10996,274],{"class":64},[33,10998,10999],{"class":35,"line":525},[33,11000,280],{"class":64},[16,11002,11003],{},[19,11004],{"alt":21,"src":11005},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage709.webp",[16,11007,11008],{},[19,11009],{"alt":21,"src":11010},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage710.webp",[16,11012,11013],{},[19,11014],{"alt":21,"src":11015},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage711.webp",[16,11017,11018],{},[19,11019],{"alt":21,"src":11020},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage712.webp",[16,11022,11023],{},"第一个入口参数是node",[16,11025,11026],{},"第二个入口参数是话题名称，字符串",[16,11028,11029],{},"第三个入口参数和第四个入口参数都有默认值",[16,11031,11032],{},"返回值是客户端智能指针。",[16,11034,11035],{},[19,11036],{"alt":21,"src":11037},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage713.webp",[16,11039,11040],{},[19,11041],{"alt":21,"src":11042},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage714.webp",[16,11044,11045],{},[19,11046],{"alt":21,"src":11047},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage715.webp",[16,11049,11050],{},[19,11051],{"alt":21,"src":11052},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage716.webp",[16,11054,11055],{},"需要把一步分成两步。",[16,11057,11058],{},[19,11059],{"alt":21,"src":11060},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage717.webp",[16,11062,11063],{},"再把send_goal函数调用一下。",[16,11065,11066],{},[19,11067],{"alt":21,"src":11068},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage718.webp",[562,11070],{},[16,11072,11073],{},[19,11074],{"alt":21,"src":11075},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage719.webp",[16,11077,11078],{},"async_send_goal是异步发送目标值",[16,11080,11081],{},[19,11082],{"alt":21,"src":11083},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage720.webp",[16,11085,11086],{},"第一个入口参数是我们接口文件里的目标值",[16,11088,11089],{},"第二个入口参数是发送目标选项对象，我们可以设置这个目标发送过去之后，我们需要处理的一些回调函数",[16,11091,11092],{},"返回值是",[16,11094,11095],{},[19,11096],{"alt":21,"src":11097},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage721.webp",[16,11099,11100],{},[19,11101],{"alt":21,"src":11102},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage722.webp",[16,11104,11105],{},[19,11106],{"alt":21,"src":11107},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage723.webp",[16,11109,11110],{},[19,11111],{"alt":21,"src":11112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage724.webp",[16,11114,11115],{},"先不管其他的，先把函数随便定义上，什么返回值，入口参数都是void，先不让程序报错。",[16,11117,11118],{},[19,11119],{"alt":21,"src":11120},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage725.webp",[16,11122,11123],{},[19,11124],{"alt":21,"src":11125},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage726.webp",[16,11127,11128],{},[19,11129],{"alt":21,"src":11130},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage727.webp",[16,11132,11133],{},"得知，",[16,11135,11136],{},"GoalResponseCallback返回值是void，入口参数是goalhandle，goalhandle在本图的上面，是clientgoalhandle，然后这个clientgoalhandle属于rclcpp_action工作空间",[16,11138,11139],{},[19,11140],{"alt":21,"src":11141},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage728.webp",[16,11143,11144],{},[19,11145],{"alt":21,"src":11146},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage729.webp",[16,11148,11149],{},[19,11150],{"alt":21,"src":11151},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage730.webp",[16,11153,11154],{},[19,11155],{"alt":21,"src":11156},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage731.webp",[16,11158,11159],{},[19,11160],{"alt":21,"src":11161},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage732.webp",[16,11163,11164],{},"返回值是void",[16,11166,11167],{},"第一个入口参数是clientgoalhandle",[16,11169,11170],{},"第二个入口参数是feedback",[16,11172,11173],{},[19,11174],{"alt":21,"src":11175},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage733.webp",[16,11177,11178],{},[19,11179],{"alt":21,"src":11180},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage734.webp",[16,11182,11183],{},[19,11184],{"alt":21,"src":11185},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage735.webp",[16,11187,11188],{},[19,11189],{"alt":21,"src":11190},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage736.webp",[16,11192,11193],{},[19,11194],{"alt":21,"src":11195},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage737.webp",[562,11197],{},[16,11199,11200],{},[19,11201],{"alt":21,"src":11202},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage738.webp",[16,11204,11205],{},"发送一个数值给服务端，服务端要先拿到目标值进行判断，判断该目标值是否可以被接收，或者被拒绝，再把处理结果响应给客户端。",[16,11207,11208],{},"如果说这个目标值可处理，那么goal_handle里是有内容的;",[16,11210,11211],{},"如果不可以被处理，那么goal_handle是一个nullptr空指针。",[16,11213,11214],{},[19,11215],{"alt":21,"src":11216},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage739.webp",[16,11218,11219],{},[19,11220],{"alt":21,"src":11221},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage740.webp",[16,11223,11224],{},[19,11225],{"alt":21,"src":11226},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage741.webp",[16,11228,11229],{},[19,11230],{"alt":21,"src":11231},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage742.webp",[562,11233],{},[16,11235,11236],{},"接下来处理反馈数据：",[16,11238,11239],{},[19,11240],{"alt":21,"src":11241},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage743.webp",[16,11243,11244],{},"如果我们只是解析反馈的数据，那么goal_handle是用不上的。",[16,11246,11247],{},[19,11248],{"alt":21,"src":11249},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage744.webp",[16,11251,11252],{},[19,11253],{"alt":21,"src":11254},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage745.webp",[16,11256,11257],{},[19,11258],{"alt":21,"src":11259},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage746.webp",[16,11261,11262],{},"需要用俩%来转译%，如上图是打印百分比数据的案例。",[16,11264,11265],{},"假设progress_int是50，则会输出50%。",[16,11267,11268],{},"如果只想打印一个%，那就需要%%来转译。",[16,11270,11271],{},[19,11272],{"alt":21,"src":11273},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage747.webp",[16,11275,11276],{},[19,11277],{"alt":21,"src":11278},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage748.webp",[16,11280,11281],{},"回调函数是可能会数据丢失的。这是正常现象。",[562,11283],{},[16,11285,11286],{},"最终响应：",[16,11288,11289],{},"这个result最终结果的状态是不一定的，有可能任务被取消了，或被终止了，也有可能任务正常运行了。",[16,11291,11292],{},"所以我们要通过状态码来判断状态。",[16,11294,11295],{},[19,11296],{"alt":21,"src":11297},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage749.webp",[16,11299,11300],{},"第一个是被强行终止",[16,11302,11303],{},"第二个是取消",[16,11305,11306],{},"第三个是成功",[16,11308,11309],{},"第四个是未知",[16,11311,11312],{},[19,11313],{"alt":21,"src":11314},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage750.webp",[16,11316,11317],{},[19,11318],{"alt":21,"src":11319},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage751.webp",[16,11321,11322],{},[19,11323],{"alt":21,"src":11324},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage752.webp",[24,11326,11328],{"className":26,"code":11327,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rclcpp_action\u002Frclcpp_action.hpp\"\n#include \"base_interfaces_demo\u002Faction\u002Fprogress.hpp\"\n\nusing base_interfaces_demo::action::Progress;\nusing namespace std::chrono_literals;\nusing std::placeholders::_1;\nusing std::placeholders::_2;\n\nclass ProgressActionClient: public rclcpp::Node\n{\n  public:\n    ProgressActionClient():Node(\"progress_action_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"action客户端创建!\");\n      \u002F*\n      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n      NodeT>(NodeT node, const std::string &name,\n      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n      *\u002F\n      client_ = rclcpp_action::create_client\u003CProgress>(this,\"get_sum_topic\");\n    }\n\n    void send_goal(int32_t num)\n    {\n      if(client_->wait_for_action_server(1s) != true)\n      {\n        RCLCPP_ERROR(this->get_logger(),\"服务连接失败!\");\n        return;\n      }\n\n      \u002F*\n      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n      *\u002F\n      auto goal = Progress::Goal();\n      goal.num = num;\n\n      rclcpp_action::Client\u003CProgress>::SendGoalOptions options;\n      options.goal_response_callback = std::bind(&ProgressActionClient::goal_response_callback,this,_1);\n      options.feedback_callback = std::bind(&ProgressActionClient::feedback_callback,this,_1,_2);\n      options.result_callback = std::bind(&ProgressActionClient::result_callback,this,_1);\n\n      auto future = client_->async_send_goal(goal,options);\n    }\n\n  void goal_response_callback(rclcpp_action::ClientGoalHandle\u003CProgress>::SharedPtr goal_handle)\n  {\n    if(goal_handle == nullptr)\n    {\n      RCLCPP_INFO(this->get_logger(),\"目标请求被服务端拒绝!\");\n    }\n    else\n    {\n      RCLCPP_INFO(this->get_logger(),\"目标处理中!\");\n    }\n  }\n\n  void feedback_callback(rclcpp_action::ClientGoalHandle\u003CProgress>::SharedPtr goal_handle,std::shared_ptr\u003Cconst Progress::Feedback> feedback)\n  {\n    (void)goal_handle;\n    double progress = feedback->progress;\n    int progress_int = (int) (progress * 100);\n    RCLCPP_INFO(this->get_logger(),\"当前进度为:%d%%\",progress_int);\n  }\n\n  void result_callback(const rclcpp_action::ClientGoalHandle\u003CProgress>::WrappedResult & result)\n  {\n    if (result.code == rclcpp_action::ResultCode::SUCCEEDED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"最终结果为:%d\",result.result->sum);\n    }\n    else if(result.code == rclcpp_action::ResultCode::ABORTED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"过程被中断!\");\n    }\n    else if(result.code == rclcpp_action::ResultCode::CANCELED)\n    {\n      RCLCPP_INFO(this->get_logger(),\"任务被取消!\");\n    }\n    else\n    {\n      RCLCPP_INFO(this->get_logger(),\"未知异常!\");\n    }\n  }\n\n  private:\n    rclcpp_action::Client\u003CProgress>::SharedPtr client_;\n};\n\nint main(int argc, char ** argv)\n{\n  if(argc != 2)\n  {\n    RCLCPP_ERROR(rclcpp::get_logger(\"rclcppp\"),\"请输入一个整形数字!\");\n    return 1;\n  }\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CProgressActionClient>();\n\n  node->send_goal(atoi(argv[1]));\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,11329,11330,11336,11342,11348,11352,11364,11378,11390,11402,11406,11422,11426,11430,11444,11448,11466,11470,11475,11480,11485,11490,11494,11523,11527,11531,11546,11550,11573,11577,11597,11603,11607,11611,11615,11620,11625,11630,11634,11651,11661,11665,11681,11708,11735,11761,11765,11781,11785,11789,11819,11823,11838,11842,11861,11865,11870,11874,11893,11897,11901,11905,11956,11960,11969,11981,12005,12030,12034,12038,12071,12075,12094,12098,12122,12126,12148,12152,12171,12175,12194,12198,12217,12221,12225,12229,12248,12252,12256,12260,12264,12278,12282,12286,12308,12312,12324,12328,12350,12358,12362,12372,12376,12397,12401,12419,12423,12434,12438,12448,12456],{"__ignoreMap":21},[33,11331,11332,11334],{"class":35,"line":36},[33,11333,40],{"class":39},[33,11335,44],{"class":43},[33,11337,11338,11340],{"class":35,"line":47},[33,11339,40],{"class":39},[33,11341,8622],{"class":43},[33,11343,11344,11346],{"class":35,"line":54},[33,11345,40],{"class":39},[33,11347,8629],{"class":43},[33,11349,11350],{"class":35,"line":80},[33,11351,51],{"emptyLinePlaceholder":50},[33,11353,11354,11356,11358,11360,11362],{"class":35,"line":86},[33,11355,1265],{"class":39},[33,11357,3566],{"class":60},[33,11359,74],{"class":64},[33,11361,8644],{"class":60},[33,11363,8647],{"class":64},[33,11365,11366,11368,11370,11372,11374,11376],{"class":35,"line":92},[33,11367,1265],{"class":39},[33,11369,1268],{"class":39},[33,11371,1271],{"class":60},[33,11373,74],{"class":64},[33,11375,1276],{"class":60},[33,11377,274],{"class":64},[33,11379,11380,11382,11384,11386,11388],{"class":35,"line":113},[33,11381,1265],{"class":39},[33,11383,1271],{"class":60},[33,11385,74],{"class":64},[33,11387,2228],{"class":60},[33,11389,8660],{"class":64},[33,11391,11392,11394,11396,11398,11400],{"class":35,"line":119},[33,11393,1265],{"class":39},[33,11395,1271],{"class":60},[33,11397,74],{"class":64},[33,11399,2228],{"class":60},[33,11401,8673],{"class":64},[33,11403,11404],{"class":35,"line":146},[33,11405,51],{"emptyLinePlaceholder":50},[33,11407,11408,11410,11412,11414,11416,11418,11420],{"class":35,"line":152},[33,11409,57],{"class":39},[33,11411,8297],{"class":60},[33,11413,65],{"class":64},[33,11415,68],{"class":39},[33,11417,71],{"class":60},[33,11419,74],{"class":64},[33,11421,77],{"class":60},[33,11423,11424],{"class":35,"line":158},[33,11425,83],{"class":64},[33,11427,11428],{"class":35,"line":163},[33,11429,89],{"class":39},[33,11431,11432,11434,11436,11438,11440,11442],{"class":35,"line":194},[33,11433,8320],{"class":60},[33,11435,98],{"class":64},[33,11437,101],{"class":60},[33,11439,104],{"class":64},[33,11441,8144],{"class":43},[33,11443,110],{"class":64},[33,11445,11446],{"class":35,"line":199},[33,11447,116],{"class":64},[33,11449,11450,11452,11454,11456,11458,11460,11462,11464],{"class":35,"line":213},[33,11451,122],{"class":60},[33,11453,104],{"class":64},[33,11455,128],{"class":127},[33,11457,131],{"class":64},[33,11459,134],{"class":60},[33,11461,137],{"class":64},[33,11463,8351],{"class":43},[33,11465,143],{"class":64},[33,11467,11468],{"class":35,"line":218},[33,11469,7447],{"class":4830},[33,11471,11472],{"class":35,"line":247},[33,11473,11474],{"class":4830},"      rclcpp_action::Client\u003CActionT>::SharedPtr create_client\u003CActionT,\n",[33,11476,11477],{"class":35,"line":252},[33,11478,11479],{"class":4830},"      NodeT>(NodeT node, const std::string &name,\n",[33,11481,11482],{"class":35,"line":265},[33,11483,11484],{"class":4830},"      rclcpp::CallbackGroup::SharedPtr group = nullptr,\n",[33,11486,11487],{"class":35,"line":277},[33,11488,11489],{"class":4830},"      const rcl_action_client_options_t &options = rcl_action_client_get_default_options())\n",[33,11491,11492],{"class":35,"line":496},[33,11493,7462],{"class":4830},[33,11495,11496,11498,11500,11502,11504,11507,11509,11511,11514,11516,11518,11521],{"class":35,"line":503},[33,11497,6558],{"class":64},[33,11499,1361],{"class":39},[33,11501,8794],{"class":60},[33,11503,74],{"class":64},[33,11505,11506],{"class":60},"create_client",[33,11508,238],{"class":64},[33,11510,8804],{"class":60},[33,11512,11513],{"class":64},">(",[33,11515,128],{"class":127},[33,11517,1391],{"class":64},[33,11519,11520],{"class":43},"\"get_sum_topic\"",[33,11522,143],{"class":64},[33,11524,11525],{"class":35,"line":511},[33,11526,149],{"class":64},[33,11528,11529],{"class":35,"line":519},[33,11530,51],{"emptyLinePlaceholder":50},[33,11532,11533,11535,11537,11539,11541,11544],{"class":35,"line":525},[33,11534,1456],{"class":39},[33,11536,9257],{"class":60},[33,11538,104],{"class":64},[33,11540,7426],{"class":39},[33,11542,11543],{"class":176}," num",[33,11545,110],{"class":64},[33,11547,11548],{"class":35,"line":531},[33,11549,116],{"class":64},[33,11551,11552,11554,11556,11559,11561,11563,11565,11567,11569,11571],{"class":35,"line":542},[33,11553,9887],{"class":39},[33,11555,6607],{"class":64},[33,11557,11558],{"class":60},"wait_for_action_server",[33,11560,104],{"class":64},[33,11562,1415],{"class":127},[33,11564,1418],{"class":39},[33,11566,6619],{"class":64},[33,11568,5900],{"class":39},[33,11570,6624],{"class":127},[33,11572,110],{"class":64},[33,11574,11575],{"class":35,"line":548},[33,11576,6631],{"class":64},[33,11578,11579,11582,11584,11586,11588,11590,11592,11595],{"class":35,"line":1642},[33,11580,11581],{"class":60},"        RCLCPP_ERROR",[33,11583,104],{"class":64},[33,11585,128],{"class":127},[33,11587,131],{"class":64},[33,11589,134],{"class":60},[33,11591,137],{"class":64},[33,11593,11594],{"class":43},"\"服务连接失败!\"",[33,11596,143],{"class":64},[33,11598,11599,11601],{"class":35,"line":1647},[33,11600,9925],{"class":39},[33,11602,274],{"class":64},[33,11604,11605],{"class":35,"line":1658},[33,11606,6730],{"class":64},[33,11608,11609],{"class":35,"line":1663},[33,11610,51],{"emptyLinePlaceholder":50},[33,11612,11613],{"class":35,"line":1686},[33,11614,7447],{"class":4830},[33,11616,11617],{"class":35,"line":1691},[33,11618,11619],{"class":4830},"      std::shared_future\u003Crclcpp_action::ClientGoalHandle\u003Cbase_interfaces_demo::action::Progress>::SharedPtr>\n",[33,11621,11622],{"class":35,"line":1702},[33,11623,11624],{"class":4830},"      async_send_goal(const base_interfaces_demo::action::Progress::Goal &goal,\n",[33,11626,11627],{"class":35,"line":1711},[33,11628,11629],{"class":4830},"      const rclcpp_action::Client\u003Cbase_interfaces_demo::action::Progress>::SendGoalOptions &options)\n",[33,11631,11632],{"class":35,"line":3792},[33,11633,7462],{"class":4830},[33,11635,11636,11638,11641,11643,11645,11647,11649],{"class":35,"line":3803},[33,11637,1471],{"class":39},[33,11639,11640],{"class":64}," goal ",[33,11642,1361],{"class":39},[33,11644,8944],{"class":60},[33,11646,74],{"class":64},[33,11648,8949],{"class":60},[33,11650,262],{"class":64},[33,11652,11653,11656,11658],{"class":35,"line":3812},[33,11654,11655],{"class":64},"      goal.num ",[33,11657,1361],{"class":39},[33,11659,11660],{"class":64}," num;\n",[33,11662,11663],{"class":35,"line":6842},[33,11664,51],{"emptyLinePlaceholder":50},[33,11666,11667,11670,11672,11674,11676,11678],{"class":35,"line":6851},[33,11668,11669],{"class":60},"      rclcpp_action",[33,11671,74],{"class":64},[33,11673,6760],{"class":60},[33,11675,238],{"class":64},[33,11677,8804],{"class":60},[33,11679,11680],{"class":64},">::SendGoalOptions options;\n",[33,11682,11683,11686,11688,11690,11692,11694,11696,11698,11700,11703,11705],{"class":35,"line":6856},[33,11684,11685],{"class":64},"      options.goal_response_callback ",[33,11687,1361],{"class":39},[33,11689,1271],{"class":60},[33,11691,74],{"class":64},[33,11693,1427],{"class":60},[33,11695,104],{"class":64},[33,11697,1432],{"class":39},[33,11699,8426],{"class":60},[33,11701,11702],{"class":64},"::goal_response_callback,",[33,11704,128],{"class":127},[33,11706,11707],{"class":64},",_1);\n",[33,11709,11710,11713,11715,11717,11719,11721,11723,11725,11727,11730,11732],{"class":35,"line":6867},[33,11711,11712],{"class":64},"      options.feedback_callback ",[33,11714,1361],{"class":39},[33,11716,1271],{"class":60},[33,11718,74],{"class":64},[33,11720,1427],{"class":60},[33,11722,104],{"class":64},[33,11724,1432],{"class":39},[33,11726,8426],{"class":60},[33,11728,11729],{"class":64},"::feedback_callback,",[33,11731,128],{"class":127},[33,11733,11734],{"class":64},",_1,_2);\n",[33,11736,11737,11740,11742,11744,11746,11748,11750,11752,11754,11757,11759],{"class":35,"line":6872},[33,11738,11739],{"class":64},"      options.result_callback ",[33,11741,1361],{"class":39},[33,11743,1271],{"class":60},[33,11745,74],{"class":64},[33,11747,1427],{"class":60},[33,11749,104],{"class":64},[33,11751,1432],{"class":39},[33,11753,8426],{"class":60},[33,11755,11756],{"class":64},"::result_callback,",[33,11758,128],{"class":127},[33,11760,11707],{"class":64},[33,11762,11763],{"class":35,"line":6893},[33,11764,51],{"emptyLinePlaceholder":50},[33,11766,11767,11769,11771,11773,11775,11778],{"class":35,"line":6898},[33,11768,1471],{"class":39},[33,11770,7750],{"class":64},[33,11772,1361],{"class":39},[33,11774,7512],{"class":64},[33,11776,11777],{"class":60},"async_send_goal",[33,11779,11780],{"class":64},"(goal,options);\n",[33,11782,11783],{"class":35,"line":6917},[33,11784,149],{"class":64},[33,11786,11787],{"class":35,"line":6922},[33,11788,51],{"emptyLinePlaceholder":50},[33,11790,11791,11794,11797,11799,11801,11803,11806,11808,11810,11812,11814,11817],{"class":35,"line":6936},[33,11792,11793],{"class":39},"  void",[33,11795,11796],{"class":60}," goal_response_callback",[33,11798,104],{"class":64},[33,11800,9011],{"class":60},[33,11802,74],{"class":64},[33,11804,11805],{"class":60},"ClientGoalHandle",[33,11807,238],{"class":64},[33,11809,8804],{"class":60},[33,11811,7415],{"class":64},[33,11813,5200],{"class":60},[33,11815,11816],{"class":176}," goal_handle",[33,11818,110],{"class":64},[33,11820,11821],{"class":35,"line":6941},[33,11822,5910],{"class":64},[33,11824,11825,11828,11831,11833,11836],{"class":35,"line":6965},[33,11826,11827],{"class":39},"    if",[33,11829,11830],{"class":64},"(goal_handle ",[33,11832,7804],{"class":39},[33,11834,11835],{"class":127}," nullptr",[33,11837,110],{"class":64},[33,11839,11840],{"class":35,"line":6974},[33,11841,116],{"class":64},[33,11843,11844,11846,11848,11850,11852,11854,11856,11859],{"class":35,"line":6979},[33,11845,122],{"class":60},[33,11847,104],{"class":64},[33,11849,128],{"class":127},[33,11851,131],{"class":64},[33,11853,134],{"class":60},[33,11855,137],{"class":64},[33,11857,11858],{"class":43},"\"目标请求被服务端拒绝!\"",[33,11860,143],{"class":64},[33,11862,11863],{"class":35,"line":6984},[33,11864,149],{"class":64},[33,11866,11867],{"class":35,"line":6995},[33,11868,11869],{"class":39},"    else\n",[33,11871,11872],{"class":35,"line":7004},[33,11873,116],{"class":64},[33,11875,11876,11878,11880,11882,11884,11886,11888,11891],{"class":35,"line":7665},[33,11877,122],{"class":60},[33,11879,104],{"class":64},[33,11881,128],{"class":127},[33,11883,131],{"class":64},[33,11885,134],{"class":60},[33,11887,137],{"class":64},[33,11889,11890],{"class":43},"\"目标处理中!\"",[33,11892,143],{"class":64},[33,11894,11895],{"class":35,"line":7670},[33,11896,149],{"class":64},[33,11898,11899],{"class":35,"line":7685},[33,11900,545],{"class":64},[33,11902,11903],{"class":35,"line":7690},[33,11904,51],{"emptyLinePlaceholder":50},[33,11906,11907,11909,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946,11949,11951,11954],{"class":35,"line":7703},[33,11908,11793],{"class":39},[33,11910,11911],{"class":60}," feedback_callback",[33,11913,104],{"class":64},[33,11915,9011],{"class":60},[33,11917,74],{"class":64},[33,11919,11805],{"class":60},[33,11921,238],{"class":64},[33,11923,8804],{"class":60},[33,11925,7415],{"class":64},[33,11927,5200],{"class":60},[33,11929,11816],{"class":176},[33,11931,1391],{"class":64},[33,11933,230],{"class":60},[33,11935,74],{"class":64},[33,11937,8937],{"class":60},[33,11939,238],{"class":64},[33,11941,2256],{"class":39},[33,11943,8944],{"class":60},[33,11945,74],{"class":64},[33,11947,11948],{"class":60},"Feedback",[33,11950,9862],{"class":64},[33,11952,11953],{"class":176},"feedback",[33,11955,110],{"class":64},[33,11957,11958],{"class":35,"line":7708},[33,11959,5910],{"class":64},[33,11961,11962,11965,11967],{"class":35,"line":7731},[33,11963,11964],{"class":64},"    (",[33,11966,9879],{"class":39},[33,11968,10030],{"class":64},[33,11970,11971,11974,11976,11978],{"class":35,"line":7740},[33,11972,11973],{"class":39},"    double",[33,11975,10266],{"class":64},[33,11977,1361],{"class":39},[33,11979,11980],{"class":64}," feedback->progress;\n",[33,11982,11983,11986,11989,11991,11993,11995,11998,12000,12003],{"class":35,"line":7745},[33,11984,11985],{"class":39},"    int",[33,11987,11988],{"class":64}," progress_int ",[33,11990,1361],{"class":39},[33,11992,5242],{"class":64},[33,11994,166],{"class":39},[33,11996,11997],{"class":64},") (progress ",[33,11999,5245],{"class":39},[33,12001,12002],{"class":127}," 100",[33,12004,143],{"class":64},[33,12006,12007,12009,12011,12013,12015,12017,12019,12022,12025,12027],{"class":35,"line":7782},[33,12008,5915],{"class":60},[33,12010,104],{"class":64},[33,12012,128],{"class":127},[33,12014,131],{"class":64},[33,12016,134],{"class":60},[33,12018,137],{"class":64},[33,12020,12021],{"class":43},"\"当前进度为:",[33,12023,12024],{"class":127},"%d%%",[33,12026,369],{"class":43},[33,12028,12029],{"class":64},",progress_int);\n",[33,12031,12032],{"class":35,"line":7787},[33,12033,545],{"class":64},[33,12035,12036],{"class":35,"line":7817},[33,12037,51],{"emptyLinePlaceholder":50},[33,12039,12040,12042,12045,12047,12049,12051,12053,12055,12057,12059,12061,12064,12066,12069],{"class":35,"line":7822},[33,12041,11793],{"class":39},[33,12043,12044],{"class":60}," result_callback",[33,12046,104],{"class":64},[33,12048,2256],{"class":39},[33,12050,8794],{"class":60},[33,12052,74],{"class":64},[33,12054,11805],{"class":60},[33,12056,238],{"class":64},[33,12058,8804],{"class":60},[33,12060,7415],{"class":64},[33,12062,12063],{"class":60},"WrappedResult",[33,12065,2269],{"class":39},[33,12067,12068],{"class":176}," result",[33,12070,110],{"class":64},[33,12072,12073],{"class":35,"line":7850},[33,12074,5910],{"class":64},[33,12076,12077,12079,12082,12084,12086,12088,12091],{"class":35,"line":7855},[33,12078,11827],{"class":39},[33,12080,12081],{"class":64}," (result.code ",[33,12083,7804],{"class":39},[33,12085,8794],{"class":60},[33,12087,74],{"class":64},[33,12089,12090],{"class":60},"ResultCode",[33,12092,12093],{"class":64},"::SUCCEEDED)\n",[33,12095,12096],{"class":35,"line":7861},[33,12097,116],{"class":64},[33,12099,12100,12102,12104,12106,12108,12110,12112,12115,12117,12119],{"class":35,"line":7866},[33,12101,122],{"class":60},[33,12103,104],{"class":64},[33,12105,128],{"class":127},[33,12107,131],{"class":64},[33,12109,134],{"class":60},[33,12111,137],{"class":64},[33,12113,12114],{"class":43},"\"最终结果为:",[33,12116,3657],{"class":127},[33,12118,369],{"class":43},[33,12120,12121],{"class":64},",result.result->sum);\n",[33,12123,12124],{"class":35,"line":7882},[33,12125,149],{"class":64},[33,12127,12128,12131,12134,12137,12139,12141,12143,12145],{"class":35,"line":7887},[33,12129,12130],{"class":39},"    else",[33,12132,12133],{"class":39}," if",[33,12135,12136],{"class":64},"(result.code ",[33,12138,7804],{"class":39},[33,12140,8794],{"class":60},[33,12142,74],{"class":64},[33,12144,12090],{"class":60},[33,12146,12147],{"class":64},"::ABORTED)\n",[33,12149,12150],{"class":35,"line":7892},[33,12151,116],{"class":64},[33,12153,12154,12156,12158,12160,12162,12164,12166,12169],{"class":35,"line":7903},[33,12155,122],{"class":60},[33,12157,104],{"class":64},[33,12159,128],{"class":127},[33,12161,131],{"class":64},[33,12163,134],{"class":60},[33,12165,137],{"class":64},[33,12167,12168],{"class":43},"\"过程被中断!\"",[33,12170,143],{"class":64},[33,12172,12173],{"class":35,"line":7912},[33,12174,149],{"class":64},[33,12176,12177,12179,12181,12183,12185,12187,12189,12191],{"class":35,"line":10399},[33,12178,12130],{"class":39},[33,12180,12133],{"class":39},[33,12182,12136],{"class":64},[33,12184,7804],{"class":39},[33,12186,8794],{"class":60},[33,12188,74],{"class":64},[33,12190,12090],{"class":60},[33,12192,12193],{"class":64},"::CANCELED)\n",[33,12195,12196],{"class":35,"line":10406},[33,12197,116],{"class":64},[33,12199,12200,12202,12204,12206,12208,12210,12212,12215],{"class":35,"line":10411},[33,12201,122],{"class":60},[33,12203,104],{"class":64},[33,12205,128],{"class":127},[33,12207,131],{"class":64},[33,12209,134],{"class":60},[33,12211,137],{"class":64},[33,12213,12214],{"class":43},"\"任务被取消!\"",[33,12216,143],{"class":64},[33,12218,12219],{"class":35,"line":10416},[33,12220,149],{"class":64},[33,12222,12223],{"class":35,"line":10427},[33,12224,11869],{"class":39},[33,12226,12227],{"class":35,"line":10432},[33,12228,116],{"class":64},[33,12230,12231,12233,12235,12237,12239,12241,12243,12246],{"class":35,"line":10437},[33,12232,122],{"class":60},[33,12234,104],{"class":64},[33,12236,128],{"class":127},[33,12238,131],{"class":64},[33,12240,134],{"class":60},[33,12242,137],{"class":64},[33,12244,12245],{"class":43},"\"未知异常!\"",[33,12247,143],{"class":64},[33,12249,12250],{"class":35,"line":10443},[33,12251,149],{"class":64},[33,12253,12254],{"class":35,"line":10449},[33,12255,545],{"class":64},[33,12257,12258],{"class":35,"line":10454},[33,12259,51],{"emptyLinePlaceholder":50},[33,12261,12262],{"class":35,"line":10475},[33,12263,1451],{"class":39},[33,12265,12266,12268,12270,12272,12274,12276],{"class":35,"line":10480},[33,12267,8907],{"class":60},[33,12269,74],{"class":64},[33,12271,6760],{"class":60},[33,12273,238],{"class":64},[33,12275,8804],{"class":60},[33,12277,6767],{"class":64},[33,12279,12280],{"class":35,"line":10490},[33,12281,155],{"class":64},[33,12283,12284],{"class":35,"line":10500},[33,12285,51],{"emptyLinePlaceholder":50},[33,12287,12288,12290,12292,12294,12296,12298,12300,12302,12304,12306],{"class":35,"line":10525},[33,12289,166],{"class":39},[33,12291,169],{"class":60},[33,12293,104],{"class":64},[33,12295,166],{"class":39},[33,12297,177],{"class":176},[33,12299,180],{"class":64},[33,12301,183],{"class":39},[33,12303,186],{"class":39},[33,12305,189],{"class":176},[33,12307,110],{"class":64},[33,12309,12310],{"class":35,"line":10530},[33,12311,83],{"class":64},[33,12313,12314,12316,12318,12320,12322],{"class":35,"line":10535},[33,12315,5894],{"class":39},[33,12317,5897],{"class":64},[33,12319,5900],{"class":39},[33,12321,10896],{"class":127},[33,12323,110],{"class":64},[33,12325,12326],{"class":35,"line":10540},[33,12327,5910],{"class":64},[33,12329,12330,12332,12334,12336,12338,12340,12342,12344,12346,12348],{"class":35,"line":10545},[33,12331,6178],{"class":60},[33,12333,104],{"class":64},[33,12335,4088],{"class":60},[33,12337,74],{"class":64},[33,12339,134],{"class":60},[33,12341,104],{"class":64},[33,12343,10919],{"class":43},[33,12345,3425],{"class":64},[33,12347,10924],{"class":43},[33,12349,143],{"class":64},[33,12351,12352,12354,12356],{"class":35,"line":10578},[33,12353,1982],{"class":39},[33,12355,5942],{"class":127},[33,12357,274],{"class":64},[33,12359,12360],{"class":35,"line":10583},[33,12361,545],{"class":64},[33,12363,12364,12366,12368,12370],{"class":35,"line":10621},[33,12365,202],{"class":60},[33,12367,74],{"class":64},[33,12369,207],{"class":60},[33,12371,210],{"class":64},[33,12373,12374],{"class":35,"line":10626},[33,12375,51],{"emptyLinePlaceholder":50},[33,12377,12378,12380,12383,12385,12387,12389,12391,12393,12395],{"class":35,"line":10631},[33,12379,4836],{"class":39},[33,12381,12382],{"class":64}," node ",[33,12384,1361],{"class":39},[33,12386,1271],{"class":60},[33,12388,74],{"class":64},[33,12390,235],{"class":60},[33,12392,238],{"class":64},[33,12394,8426],{"class":60},[33,12396,4855],{"class":64},[33,12398,12399],{"class":35,"line":10636},[33,12400,51],{"emptyLinePlaceholder":50},[33,12402,12403,12406,12409,12411,12413,12415,12417],{"class":35,"line":10651},[33,12404,12405],{"class":64},"  node->",[33,12407,12408],{"class":60},"send_goal",[33,12410,104],{"class":64},[33,12412,7762],{"class":60},[33,12414,7765],{"class":64},[33,12416,1415],{"class":127},[33,12418,7779],{"class":64},[33,12420,12421],{"class":35,"line":10656},[33,12422,51],{"emptyLinePlaceholder":50},[33,12424,12425,12427,12429,12431],{"class":35,"line":10661},[33,12426,202],{"class":60},[33,12428,74],{"class":64},[33,12430,225],{"class":60},[33,12432,12433],{"class":64},"(node);\n",[33,12435,12436],{"class":35,"line":10684},[33,12437,51],{"emptyLinePlaceholder":50},[33,12439,12440,12442,12444,12446],{"class":35,"line":10689},[33,12441,202],{"class":60},[33,12443,74],{"class":64},[33,12445,259],{"class":60},[33,12447,262],{"class":64},[33,12449,12450,12452,12454],{"class":35,"line":10700},[33,12451,268],{"class":39},[33,12453,271],{"class":127},[33,12455,274],{"class":64},[33,12457,12458],{"class":35,"line":10705},[33,12459,280],{"class":64},[16,12461,12462],{},[19,12463],{"alt":21,"src":12464},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage753.webp",[16,12466,12467],{},[19,12468],{"alt":21,"src":12469},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage754.webp",[16,12471,12472],{},"此时我们取消客户端，反而服务端还在运行，这里的ctrl+c只是结束了我们的客户端，而不是指挥我们的客户端去下发取消请求指令，我们只有去捕获一下我们的键盘才能完成取消请求指令的发送。",[562,12474],{},[16,12476,12477],{},"修复bug:",[16,12479,12480],{},"还没修复好",[24,12482,12484],{"className":26,"code":12483,"language":28,"meta":21,"style":21},"\u002F\u002F 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\nrclcpp::spin_until_future_complete(this->get_node_base_interface(), future_cancel);\nif (future_cancel.wait_for(1s) == std::future_status::ready)\n{\n  RCLCPP_INFO(this->get_logger(), \"终止请求已发送!\");\n}\nelse\n{\n  RCLCPP_ERROR(this->get_logger(), \"无法发送终止请求...\");\n}\n",[30,12485,12486,12491,12511,12542,12546,12567,12571,12576,12580,12600],{"__ignoreMap":21},[33,12487,12488],{"class":35,"line":36},[33,12489,12490],{"class":4830},"\u002F\u002F 发送取消请求auto future_cancel = client_->async_cancel_goal(goal_handle);\n",[33,12492,12493,12495,12497,12499,12501,12503,12505,12508],{"class":35,"line":47},[33,12494,4088],{"class":60},[33,12496,74],{"class":64},[33,12498,7798],{"class":60},[33,12500,104],{"class":64},[33,12502,128],{"class":127},[33,12504,131],{"class":64},[33,12506,12507],{"class":60},"get_node_base_interface",[33,12509,12510],{"class":64},"(), future_cancel);\n",[33,12512,12513,12516,12519,12522,12524,12526,12528,12530,12532,12534,12536,12539],{"class":35,"line":54},[33,12514,12515],{"class":39},"if",[33,12517,12518],{"class":64}," (future_cancel.",[33,12520,12521],{"class":60},"wait_for",[33,12523,104],{"class":64},[33,12525,1415],{"class":127},[33,12527,1418],{"class":39},[33,12529,6619],{"class":64},[33,12531,7804],{"class":39},[33,12533,1271],{"class":60},[33,12535,74],{"class":64},[33,12537,12538],{"class":60},"future_status",[33,12540,12541],{"class":64},"::ready)\n",[33,12543,12544],{"class":35,"line":80},[33,12545,83],{"class":64},[33,12547,12548,12551,12553,12555,12557,12559,12562,12565],{"class":35,"line":86},[33,12549,12550],{"class":60},"  RCLCPP_INFO",[33,12552,104],{"class":64},[33,12554,128],{"class":127},[33,12556,131],{"class":64},[33,12558,134],{"class":60},[33,12560,12561],{"class":64},"(), ",[33,12563,12564],{"class":43},"\"终止请求已发送!\"",[33,12566,143],{"class":64},[33,12568,12569],{"class":35,"line":92},[33,12570,280],{"class":64},[33,12572,12573],{"class":35,"line":113},[33,12574,12575],{"class":39},"else\n",[33,12577,12578],{"class":35,"line":119},[33,12579,83],{"class":64},[33,12581,12582,12585,12587,12589,12591,12593,12595,12598],{"class":35,"line":146},[33,12583,12584],{"class":60},"  RCLCPP_ERROR",[33,12586,104],{"class":64},[33,12588,128],{"class":127},[33,12590,131],{"class":64},[33,12592,134],{"class":60},[33,12594,12561],{"class":64},[33,12596,12597],{"class":43},"\"无法发送终止请求...\"",[33,12599,143],{"class":64},[33,12601,12602],{"class":35,"line":152},[33,12603,280],{"class":64},[12,12605,12607],{"id":12606},"参数服务_理论与api介绍c","参数服务_理论与API介绍(C++)",[16,12609,12610],{},[19,12611],{"alt":21,"src":12612},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage755.webp",[16,12614,12615],{},[19,12616],{"alt":21,"src":12617},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage756.webp",[16,12619,12620],{},"当然还有特殊情况，比如把参数设置为私有的。",[562,12622],{},[16,12624,12625],{},[19,12626],{"alt":21,"src":12627},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage757.webp",[16,12629,12630],{},[19,12631],{"alt":21,"src":12632},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage758.webp",[16,12634,12635],{},"其他通信需要自己弄接口文件，但是参数服务不用自己弄接口文件，ROS2已经封装好了API，所以我们只需要调用API即可。",[16,12637,12638],{},[19,12639],{"alt":21,"src":12640},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage759.webp",[16,12642,12643],{},[19,12644],{"alt":21,"src":12645},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage760.webp",[16,12647,12648],{},[19,12649],{"alt":21,"src":12650},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage761.webp",[16,12652,12653],{},"只是想展示一下API，所以先创建参数功能包展示下API，先不创建客户端和服务端。",[16,12655,12656],{},[19,12657],{"alt":21,"src":12658},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage762.webp",[16,12660,12661],{},[19,12662],{"alt":21,"src":12663},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage763.webp",[16,12665,12666],{},[19,12667],{"alt":21,"src":12668},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage764.webp",[16,12670,12671],{},"rclcpp::parameter 对象(键,值);",[16,12673,12674],{},[19,12675],{"alt":21,"src":12676},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage765.webp",[16,12678,12679],{},[19,12680],{"alt":21,"src":12681},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage766.webp",[16,12683,12684],{},[19,12685],{"alt":21,"src":12686},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage767.webp",[16,12688,12689],{},[19,12690],{"alt":21,"src":12691},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage768.webp",[16,12693,12694],{},[19,12695],{"alt":21,"src":12696},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage769.webp",[16,12698,12699],{},[19,12700],{"alt":21,"src":12701},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage770.webp",[16,12703,12704],{},[19,12705],{"alt":21,"src":12706},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage771.webp",[16,12708,12709],{},"该函数是给parameter的值赋值的，有18个重载，各种类型。",[16,12711,12712],{},"其中空是说不给赋值，这样只有键，没有值。",[12,12714,12716],{"id":12715},"参数服务_实验1_服务端c","参数服务_实验1_服务端(C++)",[16,12718,12719],{},[19,12720],{"alt":21,"src":12721},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage772.webp",[16,12723,12724],{},[19,12725],{"alt":21,"src":12726},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage773.webp",[16,12728,12729],{},"这里有差异，在Node里传入了第二个参数，这句是专门用来允许删除参数的。undeclared解除声明。",[16,12731,12732],{},[19,12733],{"alt":21,"src":12734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage774.webp",[16,12736,12737],{},[19,12738],{"alt":21,"src":12739},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage775.webp",[16,12741,12742],{},[19,12743],{"alt":21,"src":12744},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage776.webp",[16,12746,12747],{},[19,12748],{"alt":21,"src":12749},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage777.webp",[16,12751,12752],{},[19,12753],{"alt":21,"src":12754},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage778.webp",[16,12756,12757],{},"只有查询和修改的接口API，并没有新增和删除的API，这是ROS2根据安全考虑的。",[16,12759,12760],{},[19,12761],{"alt":21,"src":12762},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage779.webp",[16,12764,12765],{},[19,12766],{"alt":21,"src":12767},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage780.webp",[16,12769,12770],{},[19,12771],{"alt":21,"src":12772},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage781.webp",[16,12774,12775],{},[19,12776],{"alt":21,"src":12777},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage782.webp",[24,12779,12781],{"className":26,"code":12780,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamClient: public rclcpp::Node\n{\n  public:\n    ParamClient():Node(\"param_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数客户端搭建!\");\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamClient>();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,12782,12783,12789,12793,12810,12814,12818,12834,12838,12857,12861,12865,12869,12891,12895,12905,12909,12930,12934,12944,12948,12958,12966,12970,12976,12980,12997,13001,13005,13021,13025,13044,13048,13052,13056,13078,13082,13092,13096,13117,13121,13131,13135,13145,13153],{"__ignoreMap":21},[33,12784,12785,12787],{"class":35,"line":36},[33,12786,40],{"class":39},[33,12788,44],{"class":43},[33,12790,12791],{"class":35,"line":47},[33,12792,51],{"emptyLinePlaceholder":50},[33,12794,12795,12797,12800,12802,12804,12806,12808],{"class":35,"line":54},[33,12796,57],{"class":39},[33,12798,12799],{"class":60}," ParamServer",[33,12801,65],{"class":64},[33,12803,68],{"class":39},[33,12805,71],{"class":60},[33,12807,74],{"class":64},[33,12809,77],{"class":60},[33,12811,12812],{"class":35,"line":80},[33,12813,83],{"class":64},[33,12815,12816],{"class":35,"line":86},[33,12817,89],{"class":39},[33,12819,12820,12823,12825,12827,12829,12832],{"class":35,"line":92},[33,12821,12822],{"class":60},"    ParamServer",[33,12824,98],{"class":64},[33,12826,101],{"class":60},[33,12828,104],{"class":64},[33,12830,12831],{"class":43},"\"param_server_node_cpp\"",[33,12833,110],{"class":64},[33,12835,12836],{"class":35,"line":113},[33,12837,116],{"class":64},[33,12839,12840,12842,12844,12846,12848,12850,12852,12855],{"class":35,"line":119},[33,12841,122],{"class":60},[33,12843,104],{"class":64},[33,12845,128],{"class":127},[33,12847,131],{"class":64},[33,12849,134],{"class":60},[33,12851,137],{"class":64},[33,12853,12854],{"class":43},"\"参数服务端搭建!\"",[33,12856,143],{"class":64},[33,12858,12859],{"class":35,"line":146},[33,12860,149],{"class":64},[33,12862,12863],{"class":35,"line":152},[33,12864,155],{"class":64},[33,12866,12867],{"class":35,"line":158},[33,12868,51],{"emptyLinePlaceholder":50},[33,12870,12871,12873,12875,12877,12879,12881,12883,12885,12887,12889],{"class":35,"line":163},[33,12872,166],{"class":39},[33,12874,169],{"class":60},[33,12876,104],{"class":64},[33,12878,166],{"class":39},[33,12880,177],{"class":176},[33,12882,180],{"class":64},[33,12884,183],{"class":39},[33,12886,186],{"class":39},[33,12888,189],{"class":176},[33,12890,110],{"class":64},[33,12892,12893],{"class":35,"line":194},[33,12894,83],{"class":64},[33,12896,12897,12899,12901,12903],{"class":35,"line":199},[33,12898,202],{"class":60},[33,12900,74],{"class":64},[33,12902,207],{"class":60},[33,12904,210],{"class":64},[33,12906,12907],{"class":35,"line":213},[33,12908,51],{"emptyLinePlaceholder":50},[33,12910,12911,12913,12915,12917,12919,12921,12923,12925,12928],{"class":35,"line":218},[33,12912,4836],{"class":39},[33,12914,12382],{"class":64},[33,12916,1361],{"class":39},[33,12918,1271],{"class":60},[33,12920,74],{"class":64},[33,12922,235],{"class":60},[33,12924,238],{"class":64},[33,12926,12927],{"class":60},"ParamServer",[33,12929,4855],{"class":64},[33,12931,12932],{"class":35,"line":247},[33,12933,51],{"emptyLinePlaceholder":50},[33,12935,12936,12938,12940,12942],{"class":35,"line":252},[33,12937,202],{"class":60},[33,12939,74],{"class":64},[33,12941,225],{"class":60},[33,12943,12433],{"class":64},[33,12945,12946],{"class":35,"line":265},[33,12947,51],{"emptyLinePlaceholder":50},[33,12949,12950,12952,12954,12956],{"class":35,"line":277},[33,12951,202],{"class":60},[33,12953,74],{"class":64},[33,12955,259],{"class":60},[33,12957,262],{"class":64},[33,12959,12960,12962,12964],{"class":35,"line":496},[33,12961,268],{"class":39},[33,12963,271],{"class":127},[33,12965,274],{"class":64},[33,12967,12968],{"class":35,"line":503},[33,12969,280],{"class":64},[33,12971,12972,12974],{"class":35,"line":511},[33,12973,40],{"class":39},[33,12975,44],{"class":43},[33,12977,12978],{"class":35,"line":519},[33,12979,51],{"emptyLinePlaceholder":50},[33,12981,12982,12984,12987,12989,12991,12993,12995],{"class":35,"line":525},[33,12983,57],{"class":39},[33,12985,12986],{"class":60}," ParamClient",[33,12988,65],{"class":64},[33,12990,68],{"class":39},[33,12992,71],{"class":60},[33,12994,74],{"class":64},[33,12996,77],{"class":60},[33,12998,12999],{"class":35,"line":531},[33,13000,83],{"class":64},[33,13002,13003],{"class":35,"line":542},[33,13004,89],{"class":39},[33,13006,13007,13010,13012,13014,13016,13019],{"class":35,"line":548},[33,13008,13009],{"class":60},"    ParamClient",[33,13011,98],{"class":64},[33,13013,101],{"class":60},[33,13015,104],{"class":64},[33,13017,13018],{"class":43},"\"param_client_node_cpp\"",[33,13020,110],{"class":64},[33,13022,13023],{"class":35,"line":1642},[33,13024,116],{"class":64},[33,13026,13027,13029,13031,13033,13035,13037,13039,13042],{"class":35,"line":1647},[33,13028,122],{"class":60},[33,13030,104],{"class":64},[33,13032,128],{"class":127},[33,13034,131],{"class":64},[33,13036,134],{"class":60},[33,13038,137],{"class":64},[33,13040,13041],{"class":43},"\"参数客户端搭建!\"",[33,13043,143],{"class":64},[33,13045,13046],{"class":35,"line":1658},[33,13047,149],{"class":64},[33,13049,13050],{"class":35,"line":1663},[33,13051,155],{"class":64},[33,13053,13054],{"class":35,"line":1686},[33,13055,51],{"emptyLinePlaceholder":50},[33,13057,13058,13060,13062,13064,13066,13068,13070,13072,13074,13076],{"class":35,"line":1691},[33,13059,166],{"class":39},[33,13061,169],{"class":60},[33,13063,104],{"class":64},[33,13065,166],{"class":39},[33,13067,177],{"class":176},[33,13069,180],{"class":64},[33,13071,183],{"class":39},[33,13073,186],{"class":39},[33,13075,189],{"class":176},[33,13077,110],{"class":64},[33,13079,13080],{"class":35,"line":1702},[33,13081,83],{"class":64},[33,13083,13084,13086,13088,13090],{"class":35,"line":1711},[33,13085,202],{"class":60},[33,13087,74],{"class":64},[33,13089,207],{"class":60},[33,13091,210],{"class":64},[33,13093,13094],{"class":35,"line":3792},[33,13095,51],{"emptyLinePlaceholder":50},[33,13097,13098,13100,13102,13104,13106,13108,13110,13112,13115],{"class":35,"line":3803},[33,13099,4836],{"class":39},[33,13101,12382],{"class":64},[33,13103,1361],{"class":39},[33,13105,1271],{"class":60},[33,13107,74],{"class":64},[33,13109,235],{"class":60},[33,13111,238],{"class":64},[33,13113,13114],{"class":60},"ParamClient",[33,13116,4855],{"class":64},[33,13118,13119],{"class":35,"line":3812},[33,13120,51],{"emptyLinePlaceholder":50},[33,13122,13123,13125,13127,13129],{"class":35,"line":6842},[33,13124,202],{"class":60},[33,13126,74],{"class":64},[33,13128,225],{"class":60},[33,13130,12433],{"class":64},[33,13132,13133],{"class":35,"line":6851},[33,13134,51],{"emptyLinePlaceholder":50},[33,13136,13137,13139,13141,13143],{"class":35,"line":6856},[33,13138,202],{"class":60},[33,13140,74],{"class":64},[33,13142,259],{"class":60},[33,13144,262],{"class":64},[33,13146,13147,13149,13151],{"class":35,"line":6867},[33,13148,268],{"class":39},[33,13150,271],{"class":127},[33,13152,274],{"class":64},[33,13154,13155],{"class":35,"line":6872},[33,13156,280],{"class":64},[16,13158,13159],{},[19,13160],{"alt":21,"src":13161},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage783.webp",[16,13163,13164],{},[19,13165],{"alt":21,"src":13166},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage784.webp",[16,13168,13169],{},[19,13170],{"alt":21,"src":13171},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage785.webp",[16,13173,13174],{},[19,13175],{"alt":21,"src":13176},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage786.webp",[562,13178],{},[16,13180,13181],{},[19,13182],{"alt":21,"src":13183},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage787.webp",[16,13185,13186],{},[19,13187],{"alt":21,"src":13188},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage788.webp",[16,13190,13191],{},[19,13192],{"alt":21,"src":13193},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage789.webp",[16,13195,13196],{},"链式编程。",[16,13198,13199],{},"一个普通的节点就可以当参数服务端，不需要另行创建参数服务端。",[16,13201,13202],{},[19,13203],{"alt":21,"src":13204},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage790.webp",[16,13206,13207],{},[19,13208],{"alt":21,"src":13209},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage791.webp",[24,13211,13213],{"className":26,"code":13212,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\",rclcpp::NodeOptions().allow_undeclared_parameters(true))\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n\n    void create_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------增操作--------------\");\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------查操作--------------\");\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------改操作--------------\");\n    }\n\n    void delete_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------删操作--------------\");\n    }\n\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  node->create_param();\n  node->get_param();\n  node->update_param();\n  node->delete_param();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,13214,13215,13221,13225,13241,13245,13249,13284,13288,13306,13310,13314,13323,13327,13346,13350,13354,13363,13367,13386,13390,13394,13403,13407,13426,13430,13434,13443,13447,13466,13470,13474,13478,13482,13504,13508,13518,13522,13542,13546,13555,13564,13573,13582,13586,13596,13600,13610,13618],{"__ignoreMap":21},[33,13216,13217,13219],{"class":35,"line":36},[33,13218,40],{"class":39},[33,13220,44],{"class":43},[33,13222,13223],{"class":35,"line":47},[33,13224,51],{"emptyLinePlaceholder":50},[33,13226,13227,13229,13231,13233,13235,13237,13239],{"class":35,"line":54},[33,13228,57],{"class":39},[33,13230,12799],{"class":60},[33,13232,65],{"class":64},[33,13234,68],{"class":39},[33,13236,71],{"class":60},[33,13238,74],{"class":64},[33,13240,77],{"class":60},[33,13242,13243],{"class":35,"line":80},[33,13244,83],{"class":64},[33,13246,13247],{"class":35,"line":86},[33,13248,89],{"class":39},[33,13250,13251,13253,13255,13257,13259,13261,13263,13265,13267,13270,13273,13276,13278,13281],{"class":35,"line":92},[33,13252,12822],{"class":60},[33,13254,98],{"class":64},[33,13256,101],{"class":60},[33,13258,104],{"class":64},[33,13260,12831],{"class":43},[33,13262,1391],{"class":64},[33,13264,4088],{"class":60},[33,13266,74],{"class":64},[33,13268,13269],{"class":60},"NodeOptions",[33,13271,13272],{"class":64},"().",[33,13274,13275],{"class":60},"allow_undeclared_parameters",[33,13277,104],{"class":64},[33,13279,13280],{"class":127},"true",[33,13282,13283],{"class":64},"))\n",[33,13285,13286],{"class":35,"line":113},[33,13287,116],{"class":64},[33,13289,13290,13292,13294,13296,13298,13300,13302,13304],{"class":35,"line":119},[33,13291,122],{"class":60},[33,13293,104],{"class":64},[33,13295,128],{"class":127},[33,13297,131],{"class":64},[33,13299,134],{"class":60},[33,13301,137],{"class":64},[33,13303,12854],{"class":43},[33,13305,143],{"class":64},[33,13307,13308],{"class":35,"line":146},[33,13309,149],{"class":64},[33,13311,13312],{"class":35,"line":152},[33,13313,51],{"emptyLinePlaceholder":50},[33,13315,13316,13318,13321],{"class":35,"line":158},[33,13317,1456],{"class":39},[33,13319,13320],{"class":60}," create_param",[33,13322,1462],{"class":64},[33,13324,13325],{"class":35,"line":163},[33,13326,116],{"class":64},[33,13328,13329,13331,13333,13335,13337,13339,13341,13344],{"class":35,"line":194},[33,13330,122],{"class":60},[33,13332,104],{"class":64},[33,13334,128],{"class":127},[33,13336,131],{"class":64},[33,13338,134],{"class":60},[33,13340,137],{"class":64},[33,13342,13343],{"class":43},"\"-------------增操作--------------\"",[33,13345,143],{"class":64},[33,13347,13348],{"class":35,"line":199},[33,13349,149],{"class":64},[33,13351,13352],{"class":35,"line":213},[33,13353,51],{"emptyLinePlaceholder":50},[33,13355,13356,13358,13361],{"class":35,"line":218},[33,13357,1456],{"class":39},[33,13359,13360],{"class":60}," get_param",[33,13362,1462],{"class":64},[33,13364,13365],{"class":35,"line":247},[33,13366,116],{"class":64},[33,13368,13369,13371,13373,13375,13377,13379,13381,13384],{"class":35,"line":252},[33,13370,122],{"class":60},[33,13372,104],{"class":64},[33,13374,128],{"class":127},[33,13376,131],{"class":64},[33,13378,134],{"class":60},[33,13380,137],{"class":64},[33,13382,13383],{"class":43},"\"-------------查操作--------------\"",[33,13385,143],{"class":64},[33,13387,13388],{"class":35,"line":265},[33,13389,149],{"class":64},[33,13391,13392],{"class":35,"line":277},[33,13393,51],{"emptyLinePlaceholder":50},[33,13395,13396,13398,13401],{"class":35,"line":496},[33,13397,1456],{"class":39},[33,13399,13400],{"class":60}," update_param",[33,13402,1462],{"class":64},[33,13404,13405],{"class":35,"line":503},[33,13406,116],{"class":64},[33,13408,13409,13411,13413,13415,13417,13419,13421,13424],{"class":35,"line":511},[33,13410,122],{"class":60},[33,13412,104],{"class":64},[33,13414,128],{"class":127},[33,13416,131],{"class":64},[33,13418,134],{"class":60},[33,13420,137],{"class":64},[33,13422,13423],{"class":43},"\"-------------改操作--------------\"",[33,13425,143],{"class":64},[33,13427,13428],{"class":35,"line":519},[33,13429,149],{"class":64},[33,13431,13432],{"class":35,"line":525},[33,13433,51],{"emptyLinePlaceholder":50},[33,13435,13436,13438,13441],{"class":35,"line":531},[33,13437,1456],{"class":39},[33,13439,13440],{"class":60}," delete_param",[33,13442,1462],{"class":64},[33,13444,13445],{"class":35,"line":542},[33,13446,116],{"class":64},[33,13448,13449,13451,13453,13455,13457,13459,13461,13464],{"class":35,"line":548},[33,13450,122],{"class":60},[33,13452,104],{"class":64},[33,13454,128],{"class":127},[33,13456,131],{"class":64},[33,13458,134],{"class":60},[33,13460,137],{"class":64},[33,13462,13463],{"class":43},"\"-------------删操作--------------\"",[33,13465,143],{"class":64},[33,13467,13468],{"class":35,"line":1642},[33,13469,149],{"class":64},[33,13471,13472],{"class":35,"line":1647},[33,13473,51],{"emptyLinePlaceholder":50},[33,13475,13476],{"class":35,"line":1658},[33,13477,155],{"class":64},[33,13479,13480],{"class":35,"line":1663},[33,13481,51],{"emptyLinePlaceholder":50},[33,13483,13484,13486,13488,13490,13492,13494,13496,13498,13500,13502],{"class":35,"line":1686},[33,13485,166],{"class":39},[33,13487,169],{"class":60},[33,13489,104],{"class":64},[33,13491,166],{"class":39},[33,13493,177],{"class":176},[33,13495,180],{"class":64},[33,13497,183],{"class":39},[33,13499,186],{"class":39},[33,13501,189],{"class":176},[33,13503,110],{"class":64},[33,13505,13506],{"class":35,"line":1691},[33,13507,83],{"class":64},[33,13509,13510,13512,13514,13516],{"class":35,"line":1702},[33,13511,202],{"class":60},[33,13513,74],{"class":64},[33,13515,207],{"class":60},[33,13517,210],{"class":64},[33,13519,13520],{"class":35,"line":1711},[33,13521,51],{"emptyLinePlaceholder":50},[33,13523,13524,13526,13528,13530,13532,13534,13536,13538,13540],{"class":35,"line":3792},[33,13525,4836],{"class":39},[33,13527,12382],{"class":64},[33,13529,1361],{"class":39},[33,13531,1271],{"class":60},[33,13533,74],{"class":64},[33,13535,235],{"class":60},[33,13537,238],{"class":64},[33,13539,12927],{"class":60},[33,13541,4855],{"class":64},[33,13543,13544],{"class":35,"line":3803},[33,13545,51],{"emptyLinePlaceholder":50},[33,13547,13548,13550,13553],{"class":35,"line":3812},[33,13549,12405],{"class":64},[33,13551,13552],{"class":60},"create_param",[33,13554,262],{"class":64},[33,13556,13557,13559,13562],{"class":35,"line":6842},[33,13558,12405],{"class":64},[33,13560,13561],{"class":60},"get_param",[33,13563,262],{"class":64},[33,13565,13566,13568,13571],{"class":35,"line":6851},[33,13567,12405],{"class":64},[33,13569,13570],{"class":60},"update_param",[33,13572,262],{"class":64},[33,13574,13575,13577,13580],{"class":35,"line":6856},[33,13576,12405],{"class":64},[33,13578,13579],{"class":60},"delete_param",[33,13581,262],{"class":64},[33,13583,13584],{"class":35,"line":6867},[33,13585,51],{"emptyLinePlaceholder":50},[33,13587,13588,13590,13592,13594],{"class":35,"line":6872},[33,13589,202],{"class":60},[33,13591,74],{"class":64},[33,13593,225],{"class":60},[33,13595,12433],{"class":64},[33,13597,13598],{"class":35,"line":6893},[33,13599,51],{"emptyLinePlaceholder":50},[33,13601,13602,13604,13606,13608],{"class":35,"line":6898},[33,13603,202],{"class":60},[33,13605,74],{"class":64},[33,13607,259],{"class":60},[33,13609,262],{"class":64},[33,13611,13612,13614,13616],{"class":35,"line":6917},[33,13613,268],{"class":39},[33,13615,271],{"class":127},[33,13617,274],{"class":64},[33,13619,13620],{"class":35,"line":6922},[33,13621,280],{"class":64},[562,13623],{},[16,13625,13626],{},[19,13627],{"alt":21,"src":13628},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage792.webp",[16,13630,13631],{},[19,13632],{"alt":21,"src":13633},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage793.webp",[16,13635,13636],{},[19,13637],{"alt":21,"src":13638},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage794.webp",[16,13640,13641],{},"ros2 param list",[16,13643,13644],{},"查询所有节点里的所有参数",[16,13646,13647],{},[19,13648],{"alt":21,"src":13649},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage795.webp",[16,13651,13652],{},"ros2 param get \u002F节点名称 参数键名 来查看参数的值",[562,13654],{},[16,13656,13657],{},[19,13658],{"alt":21,"src":13659},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage796.webp",[16,13661,13662],{},"可以通过键来查询参数的值",[16,13664,13665],{},[19,13666],{"alt":21,"src":13667},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage797.webp",[16,13669,13670],{},"带复数形式的函数可以通过由键组成的容器来获取一些参数对象。",[16,13672,13673],{},[19,13674],{"alt":21,"src":13675},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage798.webp",[16,13677,13678],{},"来判断是否有该参数的，入口参数也是键，返回值是布尔值。",[16,13680,13681],{},[19,13682],{"alt":21,"src":13683},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage799.webp",[16,13685,13686],{},[19,13687],{"alt":21,"src":13688},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage800.webp",[16,13690,13691],{},[19,13692],{"alt":21,"src":13693},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage801.webp",[16,13695,13696],{},[19,13697],{"alt":21,"src":13698},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage802.webp",[16,13700,13701],{},[19,13702],{"alt":21,"src":13703},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage803.webp",[16,13705,13706],{},[19,13707],{"alt":21,"src":13708},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage804.webp",[562,13710],{},[16,13712,13713],{},[19,13714],{"alt":21,"src":13715},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage805.webp",[16,13717,13718],{},"需要传入parameter对象。",[16,13720,13721],{},[19,13722],{"alt":21,"src":13723},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage806.webp",[16,13725,13726],{},"我们覆盖掉旧值即可。",[16,13728,13729],{},[19,13730],{"alt":21,"src":13731},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage807.webp",[16,13733,13734],{},[19,13735],{"alt":21,"src":13736},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage808.webp",[16,13738,13739],{},"通过set_parameter也可以创建参数,但是必须声明allow_undeclared_parameters(true)。",[16,13741,13742],{},[19,13743],{"alt":21,"src":13744},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage809.webp",[16,13746,13747],{},[19,13748],{"alt":21,"src":13749},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage810.webp",[16,13751,13752],{},[19,13753],{"alt":21,"src":13754},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage811.webp",[562,13756],{},[16,13758,13759],{},[19,13760],{"alt":21,"src":13761},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage812.webp",[16,13763,13764],{},[19,13765],{"alt":21,"src":13766},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage813.webp",[16,13768,13769],{},"这种声明的参数不可以被删除，只能删除未声明但设置的。",[16,13771,13772],{},[19,13773],{"alt":21,"src":13774},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage814.webp",[16,13776,13777],{},[19,13778],{"alt":21,"src":13779},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage815.webp",[24,13781,13783],{"className":26,"code":13782,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nclass ParamServer: public rclcpp::Node\n{\n  public:\n    ParamServer():Node(\"param_server_node_cpp\",rclcpp::NodeOptions().allow_undeclared_parameters(true))\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数服务端搭建!\");\n    }\n\n    void create_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------增操作--------------\");\n\n      this->declare_parameter(\"car_name\",\"ER\");\n      this->declare_parameter(\"width\",1.55);\n      this->declare_parameter(\"wheels\",5);\n\n      this->set_parameter(rclcpp::Parameter(\"height\",2.00));\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------查操作--------------\");\n\n      auto car = this->get_parameter(\"car_name\");\n      RCLCPP_INFO(this->get_logger(),\"key = %s,value = %s\",car.get_name().c_str(),car.as_string().c_str()); \n\n      auto params = this->get_parameters({\"car_name\",\"width\",\"wheels\"});\n      for(auto &¶m : params)\n      {\n        RCLCPP_INFO(this->get_logger(),\"key = %s,value = %s\",param.get_name().c_str(),param.value_to_string().c_str());\n      }\n      bool car_name_flag = this->has_parameter(\"car_name\");\n      bool height_flag = this->has_parameter(\"height\");\n      RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",car_name_flag);\n      RCLCPP_INFO(this->get_logger(),\"是否包含height? 答案:%d\",height_flag);\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------改操作--------------\");\n      this->set_parameter(rclcpp::Parameter(\"width\",1.85));\n      RCLCPP_INFO(this->get_logger(),\"width = %.2f\",this->get_parameter(\"width\").as_double());\n    }\n\n    void delete_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-------------删操作--------------\");\n    \u002F\u002F   this->undeclare_parameter(\"car_name\");\n    \u002F\u002F   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n      this->undeclare_parameter(\"height\");\n      RCLCPP_INFO(this->get_logger(),\"是否包含height? 答案:%d\",this->has_parameter(\"height\"));\n    }\n\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CParamServer>();\n\n  node->create_param();\n  node->get_param();\n  node->update_param();\n  node->delete_param();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,13784,13785,13791,13795,13811,13815,13819,13849,13853,13871,13875,13879,13887,13891,13909,13913,13935,13955,13975,13979,14009,14013,14017,14025,14029,14047,14051,14073,14122,14126,14158,14172,14176,14221,14225,14248,14269,14293,14317,14321,14325,14333,14337,14355,14382,14423,14427,14431,14439,14443,14461,14466,14471,14486,14520,14524,14528,14532,14536,14558,14562,14572,14576,14596,14600,14608,14616,14624,14632,14636,14646,14650,14660,14668],{"__ignoreMap":21},[33,13786,13787,13789],{"class":35,"line":36},[33,13788,40],{"class":39},[33,13790,44],{"class":43},[33,13792,13793],{"class":35,"line":47},[33,13794,51],{"emptyLinePlaceholder":50},[33,13796,13797,13799,13801,13803,13805,13807,13809],{"class":35,"line":54},[33,13798,57],{"class":39},[33,13800,12799],{"class":60},[33,13802,65],{"class":64},[33,13804,68],{"class":39},[33,13806,71],{"class":60},[33,13808,74],{"class":64},[33,13810,77],{"class":60},[33,13812,13813],{"class":35,"line":80},[33,13814,83],{"class":64},[33,13816,13817],{"class":35,"line":86},[33,13818,89],{"class":39},[33,13820,13821,13823,13825,13827,13829,13831,13833,13835,13837,13839,13841,13843,13845,13847],{"class":35,"line":92},[33,13822,12822],{"class":60},[33,13824,98],{"class":64},[33,13826,101],{"class":60},[33,13828,104],{"class":64},[33,13830,12831],{"class":43},[33,13832,1391],{"class":64},[33,13834,4088],{"class":60},[33,13836,74],{"class":64},[33,13838,13269],{"class":60},[33,13840,13272],{"class":64},[33,13842,13275],{"class":60},[33,13844,104],{"class":64},[33,13846,13280],{"class":127},[33,13848,13283],{"class":64},[33,13850,13851],{"class":35,"line":113},[33,13852,116],{"class":64},[33,13854,13855,13857,13859,13861,13863,13865,13867,13869],{"class":35,"line":119},[33,13856,122],{"class":60},[33,13858,104],{"class":64},[33,13860,128],{"class":127},[33,13862,131],{"class":64},[33,13864,134],{"class":60},[33,13866,137],{"class":64},[33,13868,12854],{"class":43},[33,13870,143],{"class":64},[33,13872,13873],{"class":35,"line":146},[33,13874,149],{"class":64},[33,13876,13877],{"class":35,"line":152},[33,13878,51],{"emptyLinePlaceholder":50},[33,13880,13881,13883,13885],{"class":35,"line":158},[33,13882,1456],{"class":39},[33,13884,13320],{"class":60},[33,13886,1462],{"class":64},[33,13888,13889],{"class":35,"line":163},[33,13890,116],{"class":64},[33,13892,13893,13895,13897,13899,13901,13903,13905,13907],{"class":35,"line":194},[33,13894,122],{"class":60},[33,13896,104],{"class":64},[33,13898,128],{"class":127},[33,13900,131],{"class":64},[33,13902,134],{"class":60},[33,13904,137],{"class":64},[33,13906,13343],{"class":43},[33,13908,143],{"class":64},[33,13910,13911],{"class":35,"line":199},[33,13912,51],{"emptyLinePlaceholder":50},[33,13914,13915,13918,13920,13923,13925,13928,13930,13933],{"class":35,"line":213},[33,13916,13917],{"class":127},"      this",[33,13919,131],{"class":64},[33,13921,13922],{"class":60},"declare_parameter",[33,13924,104],{"class":64},[33,13926,13927],{"class":43},"\"car_name\"",[33,13929,1391],{"class":64},[33,13931,13932],{"class":43},"\"ER\"",[33,13934,143],{"class":64},[33,13936,13937,13939,13941,13943,13945,13948,13950,13953],{"class":35,"line":218},[33,13938,13917],{"class":127},[33,13940,131],{"class":64},[33,13942,13922],{"class":60},[33,13944,104],{"class":64},[33,13946,13947],{"class":43},"\"width\"",[33,13949,1391],{"class":64},[33,13951,13952],{"class":127},"1.55",[33,13954,143],{"class":64},[33,13956,13957,13959,13961,13963,13965,13968,13970,13973],{"class":35,"line":247},[33,13958,13917],{"class":127},[33,13960,131],{"class":64},[33,13962,13922],{"class":60},[33,13964,104],{"class":64},[33,13966,13967],{"class":43},"\"wheels\"",[33,13969,1391],{"class":64},[33,13971,13972],{"class":127},"5",[33,13974,143],{"class":64},[33,13976,13977],{"class":35,"line":252},[33,13978,51],{"emptyLinePlaceholder":50},[33,13980,13981,13983,13985,13988,13990,13992,13994,13997,13999,14002,14004,14007],{"class":35,"line":265},[33,13982,13917],{"class":127},[33,13984,131],{"class":64},[33,13986,13987],{"class":60},"set_parameter",[33,13989,104],{"class":64},[33,13991,4088],{"class":60},[33,13993,74],{"class":64},[33,13995,13996],{"class":60},"Parameter",[33,13998,104],{"class":64},[33,14000,14001],{"class":43},"\"height\"",[33,14003,1391],{"class":64},[33,14005,14006],{"class":127},"2.00",[33,14008,1442],{"class":64},[33,14010,14011],{"class":35,"line":277},[33,14012,149],{"class":64},[33,14014,14015],{"class":35,"line":496},[33,14016,51],{"emptyLinePlaceholder":50},[33,14018,14019,14021,14023],{"class":35,"line":503},[33,14020,1456],{"class":39},[33,14022,13360],{"class":60},[33,14024,1462],{"class":64},[33,14026,14027],{"class":35,"line":511},[33,14028,116],{"class":64},[33,14030,14031,14033,14035,14037,14039,14041,14043,14045],{"class":35,"line":519},[33,14032,122],{"class":60},[33,14034,104],{"class":64},[33,14036,128],{"class":127},[33,14038,131],{"class":64},[33,14040,134],{"class":60},[33,14042,137],{"class":64},[33,14044,13383],{"class":43},[33,14046,143],{"class":64},[33,14048,14049],{"class":35,"line":525},[33,14050,51],{"emptyLinePlaceholder":50},[33,14052,14053,14055,14058,14060,14062,14064,14067,14069,14071],{"class":35,"line":531},[33,14054,1471],{"class":39},[33,14056,14057],{"class":64}," car ",[33,14059,1361],{"class":39},[33,14061,1364],{"class":127},[33,14063,131],{"class":64},[33,14065,14066],{"class":60},"get_parameter",[33,14068,104],{"class":64},[33,14070,13927],{"class":43},[33,14072,143],{"class":64},[33,14074,14075,14077,14079,14081,14083,14085,14087,14090,14092,14095,14097,14099,14102,14105,14107,14109,14112,14115,14117,14119],{"class":35,"line":542},[33,14076,122],{"class":60},[33,14078,104],{"class":64},[33,14080,128],{"class":127},[33,14082,131],{"class":64},[33,14084,134],{"class":60},[33,14086,137],{"class":64},[33,14088,14089],{"class":43},"\"key = ",[33,14091,1538],{"class":127},[33,14093,14094],{"class":43},",value = ",[33,14096,1538],{"class":127},[33,14098,369],{"class":43},[33,14100,14101],{"class":64},",car.",[33,14103,14104],{"class":60},"get_name",[33,14106,13272],{"class":64},[33,14108,1546],{"class":60},[33,14110,14111],{"class":64},"(),car.",[33,14113,14114],{"class":60},"as_string",[33,14116,13272],{"class":64},[33,14118,1546],{"class":60},[33,14120,14121],{"class":64},"()); \n",[33,14123,14124],{"class":35,"line":548},[33,14125,51],{"emptyLinePlaceholder":50},[33,14127,14128,14130,14133,14135,14137,14139,14142,14145,14147,14149,14151,14153,14155],{"class":35,"line":1642},[33,14129,1471],{"class":39},[33,14131,14132],{"class":64}," params ",[33,14134,1361],{"class":39},[33,14136,1364],{"class":127},[33,14138,131],{"class":64},[33,14140,14141],{"class":60},"get_parameters",[33,14143,14144],{"class":64},"({",[33,14146,13927],{"class":43},[33,14148,1391],{"class":64},[33,14150,13947],{"class":43},[33,14152,1391],{"class":64},[33,14154,13967],{"class":43},[33,14156,14157],{"class":64},"});\n",[33,14159,14160,14162,14164,14167,14169],{"class":35,"line":1647},[33,14161,10220],{"class":39},[33,14163,104],{"class":64},[33,14165,14166],{"class":39},"auto",[33,14168,2269],{"class":39},[33,14170,14171],{"class":64},"¶m : params)\n",[33,14173,14174],{"class":35,"line":1658},[33,14175,6631],{"class":64},[33,14177,14178,14180,14182,14184,14186,14188,14190,14192,14194,14196,14198,14200,14203,14205,14207,14209,14212,14215,14217,14219],{"class":35,"line":1663},[33,14179,1871],{"class":60},[33,14181,104],{"class":64},[33,14183,128],{"class":127},[33,14185,131],{"class":64},[33,14187,134],{"class":60},[33,14189,137],{"class":64},[33,14191,14089],{"class":43},[33,14193,1538],{"class":127},[33,14195,14094],{"class":43},[33,14197,1538],{"class":127},[33,14199,369],{"class":43},[33,14201,14202],{"class":64},",param.",[33,14204,14104],{"class":60},[33,14206,13272],{"class":64},[33,14208,1546],{"class":60},[33,14210,14211],{"class":64},"(),param.",[33,14213,14214],{"class":60},"value_to_string",[33,14216,13272],{"class":64},[33,14218,1546],{"class":60},[33,14220,1549],{"class":64},[33,14222,14223],{"class":35,"line":1686},[33,14224,6730],{"class":64},[33,14226,14227,14230,14233,14235,14237,14239,14242,14244,14246],{"class":35,"line":1691},[33,14228,14229],{"class":39},"      bool",[33,14231,14232],{"class":64}," car_name_flag ",[33,14234,1361],{"class":39},[33,14236,1364],{"class":127},[33,14238,131],{"class":64},[33,14240,14241],{"class":60},"has_parameter",[33,14243,104],{"class":64},[33,14245,13927],{"class":43},[33,14247,143],{"class":64},[33,14249,14250,14252,14255,14257,14259,14261,14263,14265,14267],{"class":35,"line":1702},[33,14251,14229],{"class":39},[33,14253,14254],{"class":64}," height_flag ",[33,14256,1361],{"class":39},[33,14258,1364],{"class":127},[33,14260,131],{"class":64},[33,14262,14241],{"class":60},[33,14264,104],{"class":64},[33,14266,14001],{"class":43},[33,14268,143],{"class":64},[33,14270,14271,14273,14275,14277,14279,14281,14283,14286,14288,14290],{"class":35,"line":1711},[33,14272,122],{"class":60},[33,14274,104],{"class":64},[33,14276,128],{"class":127},[33,14278,131],{"class":64},[33,14280,134],{"class":60},[33,14282,137],{"class":64},[33,14284,14285],{"class":43},"\"是否包含car_name? 答案:",[33,14287,3657],{"class":127},[33,14289,369],{"class":43},[33,14291,14292],{"class":64},",car_name_flag);\n",[33,14294,14295,14297,14299,14301,14303,14305,14307,14310,14312,14314],{"class":35,"line":3792},[33,14296,122],{"class":60},[33,14298,104],{"class":64},[33,14300,128],{"class":127},[33,14302,131],{"class":64},[33,14304,134],{"class":60},[33,14306,137],{"class":64},[33,14308,14309],{"class":43},"\"是否包含height? 答案:",[33,14311,3657],{"class":127},[33,14313,369],{"class":43},[33,14315,14316],{"class":64},",height_flag);\n",[33,14318,14319],{"class":35,"line":3803},[33,14320,149],{"class":64},[33,14322,14323],{"class":35,"line":3812},[33,14324,51],{"emptyLinePlaceholder":50},[33,14326,14327,14329,14331],{"class":35,"line":6842},[33,14328,1456],{"class":39},[33,14330,13400],{"class":60},[33,14332,1462],{"class":64},[33,14334,14335],{"class":35,"line":6851},[33,14336,116],{"class":64},[33,14338,14339,14341,14343,14345,14347,14349,14351,14353],{"class":35,"line":6856},[33,14340,122],{"class":60},[33,14342,104],{"class":64},[33,14344,128],{"class":127},[33,14346,131],{"class":64},[33,14348,134],{"class":60},[33,14350,137],{"class":64},[33,14352,13423],{"class":43},[33,14354,143],{"class":64},[33,14356,14357,14359,14361,14363,14365,14367,14369,14371,14373,14375,14377,14380],{"class":35,"line":6867},[33,14358,13917],{"class":127},[33,14360,131],{"class":64},[33,14362,13987],{"class":60},[33,14364,104],{"class":64},[33,14366,4088],{"class":60},[33,14368,74],{"class":64},[33,14370,13996],{"class":60},[33,14372,104],{"class":64},[33,14374,13947],{"class":43},[33,14376,1391],{"class":64},[33,14378,14379],{"class":127},"1.85",[33,14381,1442],{"class":64},[33,14383,14384,14386,14388,14390,14392,14394,14396,14399,14401,14403,14405,14407,14409,14411,14413,14415,14418,14421],{"class":35,"line":6872},[33,14385,122],{"class":60},[33,14387,104],{"class":64},[33,14389,128],{"class":127},[33,14391,131],{"class":64},[33,14393,134],{"class":60},[33,14395,137],{"class":64},[33,14397,14398],{"class":43},"\"width = ",[33,14400,3662],{"class":127},[33,14402,369],{"class":43},[33,14404,1391],{"class":64},[33,14406,128],{"class":127},[33,14408,131],{"class":64},[33,14410,14066],{"class":60},[33,14412,104],{"class":64},[33,14414,13947],{"class":43},[33,14416,14417],{"class":64},").",[33,14419,14420],{"class":60},"as_double",[33,14422,1549],{"class":64},[33,14424,14425],{"class":35,"line":6893},[33,14426,149],{"class":64},[33,14428,14429],{"class":35,"line":6898},[33,14430,51],{"emptyLinePlaceholder":50},[33,14432,14433,14435,14437],{"class":35,"line":6917},[33,14434,1456],{"class":39},[33,14436,13440],{"class":60},[33,14438,1462],{"class":64},[33,14440,14441],{"class":35,"line":6922},[33,14442,116],{"class":64},[33,14444,14445,14447,14449,14451,14453,14455,14457,14459],{"class":35,"line":6936},[33,14446,122],{"class":60},[33,14448,104],{"class":64},[33,14450,128],{"class":127},[33,14452,131],{"class":64},[33,14454,134],{"class":60},[33,14456,137],{"class":64},[33,14458,13463],{"class":43},[33,14460,143],{"class":64},[33,14462,14463],{"class":35,"line":6941},[33,14464,14465],{"class":4830},"    \u002F\u002F   this->undeclare_parameter(\"car_name\");\n",[33,14467,14468],{"class":35,"line":6965},[33,14469,14470],{"class":4830},"    \u002F\u002F   RCLCPP_INFO(this->get_logger(),\"是否包含car_name? 答案:%d\",this->has_parameter(\"car_name\"));\n",[33,14472,14473,14475,14477,14480,14482,14484],{"class":35,"line":6974},[33,14474,13917],{"class":127},[33,14476,131],{"class":64},[33,14478,14479],{"class":60},"undeclare_parameter",[33,14481,104],{"class":64},[33,14483,14001],{"class":43},[33,14485,143],{"class":64},[33,14487,14488,14490,14492,14494,14496,14498,14500,14502,14504,14506,14508,14510,14512,14514,14516,14518],{"class":35,"line":6979},[33,14489,122],{"class":60},[33,14491,104],{"class":64},[33,14493,128],{"class":127},[33,14495,131],{"class":64},[33,14497,134],{"class":60},[33,14499,137],{"class":64},[33,14501,14309],{"class":43},[33,14503,3657],{"class":127},[33,14505,369],{"class":43},[33,14507,1391],{"class":64},[33,14509,128],{"class":127},[33,14511,131],{"class":64},[33,14513,14241],{"class":60},[33,14515,104],{"class":64},[33,14517,14001],{"class":43},[33,14519,1442],{"class":64},[33,14521,14522],{"class":35,"line":6984},[33,14523,149],{"class":64},[33,14525,14526],{"class":35,"line":6995},[33,14527,51],{"emptyLinePlaceholder":50},[33,14529,14530],{"class":35,"line":7004},[33,14531,155],{"class":64},[33,14533,14534],{"class":35,"line":7665},[33,14535,51],{"emptyLinePlaceholder":50},[33,14537,14538,14540,14542,14544,14546,14548,14550,14552,14554,14556],{"class":35,"line":7670},[33,14539,166],{"class":39},[33,14541,169],{"class":60},[33,14543,104],{"class":64},[33,14545,166],{"class":39},[33,14547,177],{"class":176},[33,14549,180],{"class":64},[33,14551,183],{"class":39},[33,14553,186],{"class":39},[33,14555,189],{"class":176},[33,14557,110],{"class":64},[33,14559,14560],{"class":35,"line":7685},[33,14561,83],{"class":64},[33,14563,14564,14566,14568,14570],{"class":35,"line":7690},[33,14565,202],{"class":60},[33,14567,74],{"class":64},[33,14569,207],{"class":60},[33,14571,210],{"class":64},[33,14573,14574],{"class":35,"line":7703},[33,14575,51],{"emptyLinePlaceholder":50},[33,14577,14578,14580,14582,14584,14586,14588,14590,14592,14594],{"class":35,"line":7708},[33,14579,4836],{"class":39},[33,14581,12382],{"class":64},[33,14583,1361],{"class":39},[33,14585,1271],{"class":60},[33,14587,74],{"class":64},[33,14589,235],{"class":60},[33,14591,238],{"class":64},[33,14593,12927],{"class":60},[33,14595,4855],{"class":64},[33,14597,14598],{"class":35,"line":7731},[33,14599,51],{"emptyLinePlaceholder":50},[33,14601,14602,14604,14606],{"class":35,"line":7740},[33,14603,12405],{"class":64},[33,14605,13552],{"class":60},[33,14607,262],{"class":64},[33,14609,14610,14612,14614],{"class":35,"line":7745},[33,14611,12405],{"class":64},[33,14613,13561],{"class":60},[33,14615,262],{"class":64},[33,14617,14618,14620,14622],{"class":35,"line":7782},[33,14619,12405],{"class":64},[33,14621,13570],{"class":60},[33,14623,262],{"class":64},[33,14625,14626,14628,14630],{"class":35,"line":7787},[33,14627,12405],{"class":64},[33,14629,13579],{"class":60},[33,14631,262],{"class":64},[33,14633,14634],{"class":35,"line":7817},[33,14635,51],{"emptyLinePlaceholder":50},[33,14637,14638,14640,14642,14644],{"class":35,"line":7822},[33,14639,202],{"class":60},[33,14641,74],{"class":64},[33,14643,225],{"class":60},[33,14645,12433],{"class":64},[33,14647,14648],{"class":35,"line":7850},[33,14649,51],{"emptyLinePlaceholder":50},[33,14651,14652,14654,14656,14658],{"class":35,"line":7855},[33,14653,202],{"class":60},[33,14655,74],{"class":64},[33,14657,259],{"class":60},[33,14659,262],{"class":64},[33,14661,14662,14664,14666],{"class":35,"line":7861},[33,14663,268],{"class":39},[33,14665,271],{"class":127},[33,14667,274],{"class":64},[33,14669,14670],{"class":35,"line":7866},[33,14671,280],{"class":64},[12,14673,14675],{"id":14674},"参数服务_实验1_客户端c","参数服务_实验1_客户端(C++)",[16,14677,14678],{},[19,14679],{"alt":21,"src":14680},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage816.webp",[16,14682,14683],{},[19,14684],{"alt":21,"src":14685},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage817.webp",[16,14687,14688],{},[19,14689],{"alt":21,"src":14690},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage818.webp",[16,14692,14693],{},[19,14694],{"alt":21,"src":14695},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage819.webp",[16,14697,14698],{},[19,14699],{"alt":21,"src":14700},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage820.webp",[16,14702,14703],{},[19,14704],{"alt":21,"src":14705},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage821.webp",[16,14707,14708],{},[19,14709],{"alt":21,"src":14710},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage822.webp",[16,14712,14713],{},[19,14714],{"alt":21,"src":14715},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage823.webp",[16,14717,14718],{},[19,14719],{"alt":21,"src":14720},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage824.webp",[16,14722,14723],{},[19,14724],{"alt":21,"src":14725},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage825.webp",[16,14727,14728],{},"第一个入口参数是客户端节点对象，",[16,14730,14731],{},"第二个入口参数是需要连接的服务端的节点名称。",[16,14733,14734],{},[19,14735],{"alt":21,"src":14736},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage826.webp",[16,14738,14739],{},"如果1秒钟之内连接上了就返回true，如果超时1s没连接上就返回false。",[16,14741,14742],{},[19,14743],{"alt":21,"src":14744},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage827.webp",[16,14746,14747],{},[19,14748],{"alt":21,"src":14749},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage828.webp",[24,14751,14753],{"className":26,"code":14752,"language":28,"meta":21,"style":21},"#include \"rclcpp\u002Frclcpp.hpp\"\n\nusing namespace std::chrono_literals;\n\nclass ParamClient: public rclcpp::Node\n{\n  public:\n    ParamClient():Node(\"param_client_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"参数客户端搭建!\");\n      param_client_ = std::make_sharedautolinkrclcpp::SyncParametersClientautolink(this,\"param_server_node_cpp\");\n    }\n\n    bool connect_server()\n    {\n      while(param_client_->wait_for_service(1s) != true)\n      {\n        if(rclcpp::ok() != true)\n        {\n          return false;\n        }\n        RCLCPP_INFO(this->get_logger(),\"服务连接中!\");\n      }\n      return true;\n    }\n\n    void get_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-----------参数查询操作-------------\");\n    }\n\n    void update_param()\n    {\n      RCLCPP_INFO(this->get_logger(),\"-----------参数更新操作-------------\");\n    }\n\n  private:\n    rclcpp::SyncParametersClient::SharedPtr param_client_;\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto client = std::make_shared\u003CParamClient>();\n\n  bool flag = client->connect_server();\n\n  if(!flag)\n  {\n    return 0;\n  }\n\n  client->get_param();\n  client->update_param();\n  client->get_param();\n\n  \u002F\u002F rclcpp::spin(client);\n\n  rclcpp::shutdown();\n  return 0;\n}\n",[30,14754,14755,14761,14765,14779,14783,14799,14803,14807,14821,14825,14843,14872,14876,14880,14888,14892,14915,14919,14939,14943,14951,14955,14973,14977,14985,14989,14993,15001,15005,15024,15028,15032,15040,15044,15063,15067,15071,15075,15087,15091,15095,15117,15121,15131,15135,15155,15159,15173,15177,15189,15193,15201,15205,15209,15218,15226,15234,15238,15243,15247,15257,15265],{"__ignoreMap":21},[33,14756,14757,14759],{"class":35,"line":36},[33,14758,40],{"class":39},[33,14760,44],{"class":43},[33,14762,14763],{"class":35,"line":47},[33,14764,51],{"emptyLinePlaceholder":50},[33,14766,14767,14769,14771,14773,14775,14777],{"class":35,"line":54},[33,14768,1265],{"class":39},[33,14770,1268],{"class":39},[33,14772,1271],{"class":60},[33,14774,74],{"class":64},[33,14776,1276],{"class":60},[33,14778,274],{"class":64},[33,14780,14781],{"class":35,"line":80},[33,14782,51],{"emptyLinePlaceholder":50},[33,14784,14785,14787,14789,14791,14793,14795,14797],{"class":35,"line":86},[33,14786,57],{"class":39},[33,14788,12986],{"class":60},[33,14790,65],{"class":64},[33,14792,68],{"class":39},[33,14794,71],{"class":60},[33,14796,74],{"class":64},[33,14798,77],{"class":60},[33,14800,14801],{"class":35,"line":92},[33,14802,83],{"class":64},[33,14804,14805],{"class":35,"line":113},[33,14806,89],{"class":39},[33,14808,14809,14811,14813,14815,14817,14819],{"class":35,"line":119},[33,14810,13009],{"class":60},[33,14812,98],{"class":64},[33,14814,101],{"class":60},[33,14816,104],{"class":64},[33,14818,13018],{"class":43},[33,14820,110],{"class":64},[33,14822,14823],{"class":35,"line":146},[33,14824,116],{"class":64},[33,14826,14827,14829,14831,14833,14835,14837,14839,14841],{"class":35,"line":152},[33,14828,122],{"class":60},[33,14830,104],{"class":64},[33,14832,128],{"class":127},[33,14834,131],{"class":64},[33,14836,134],{"class":60},[33,14838,137],{"class":64},[33,14840,13041],{"class":43},[33,14842,143],{"class":64},[33,14844,14845,14848,14850,14852,14854,14857,14859,14862,14864,14866,14868,14870],{"class":35,"line":158},[33,14846,14847],{"class":64},"      param_client_ ",[33,14849,1361],{"class":39},[33,14851,1271],{"class":60},[33,14853,74],{"class":64},[33,14855,14856],{"class":60},"make_sharedautolinkrclcpp",[33,14858,74],{"class":64},[33,14860,14861],{"class":60},"SyncParametersClientautolink",[33,14863,104],{"class":64},[33,14865,128],{"class":127},[33,14867,1391],{"class":64},[33,14869,12831],{"class":43},[33,14871,143],{"class":64},[33,14873,14874],{"class":35,"line":163},[33,14875,149],{"class":64},[33,14877,14878],{"class":35,"line":194},[33,14879,51],{"emptyLinePlaceholder":50},[33,14881,14882,14884,14886],{"class":35,"line":199},[33,14883,6590],{"class":39},[33,14885,6593],{"class":60},[33,14887,1462],{"class":64},[33,14889,14890],{"class":35,"line":213},[33,14891,116],{"class":64},[33,14893,14894,14896,14899,14901,14903,14905,14907,14909,14911,14913],{"class":35,"line":218},[33,14895,6604],{"class":39},[33,14897,14898],{"class":64},"(param_client_->",[33,14900,6610],{"class":60},[33,14902,104],{"class":64},[33,14904,1415],{"class":127},[33,14906,1418],{"class":39},[33,14908,6619],{"class":64},[33,14910,5900],{"class":39},[33,14912,6624],{"class":127},[33,14914,110],{"class":64},[33,14916,14917],{"class":35,"line":247},[33,14918,6631],{"class":64},[33,14920,14921,14923,14925,14927,14929,14931,14933,14935,14937],{"class":35,"line":252},[33,14922,6663],{"class":39},[33,14924,104],{"class":64},[33,14926,4088],{"class":60},[33,14928,74],{"class":64},[33,14930,6672],{"class":60},[33,14932,6675],{"class":64},[33,14934,5900],{"class":39},[33,14936,6624],{"class":127},[33,14938,110],{"class":64},[33,14940,14941],{"class":35,"line":265},[33,14942,6686],{"class":64},[33,14944,14945,14947,14949],{"class":35,"line":277},[33,14946,6715],{"class":39},[33,14948,6718],{"class":127},[33,14950,274],{"class":64},[33,14952,14953],{"class":35,"line":496},[33,14954,6725],{"class":64},[33,14956,14957,14959,14961,14963,14965,14967,14969,14971],{"class":35,"line":503},[33,14958,1871],{"class":60},[33,14960,104],{"class":64},[33,14962,128],{"class":127},[33,14964,131],{"class":64},[33,14966,134],{"class":60},[33,14968,137],{"class":64},[33,14970,6652],{"class":43},[33,14972,143],{"class":64},[33,14974,14975],{"class":35,"line":511},[33,14976,6730],{"class":64},[33,14978,14979,14981,14983],{"class":35,"line":519},[33,14980,6735],{"class":39},[33,14982,6624],{"class":127},[33,14984,274],{"class":64},[33,14986,14987],{"class":35,"line":525},[33,14988,149],{"class":64},[33,14990,14991],{"class":35,"line":531},[33,14992,51],{"emptyLinePlaceholder":50},[33,14994,14995,14997,14999],{"class":35,"line":542},[33,14996,1456],{"class":39},[33,14998,13360],{"class":60},[33,15000,1462],{"class":64},[33,15002,15003],{"class":35,"line":548},[33,15004,116],{"class":64},[33,15006,15007,15009,15011,15013,15015,15017,15019,15022],{"class":35,"line":1642},[33,15008,122],{"class":60},[33,15010,104],{"class":64},[33,15012,128],{"class":127},[33,15014,131],{"class":64},[33,15016,134],{"class":60},[33,15018,137],{"class":64},[33,15020,15021],{"class":43},"\"-----------参数查询操作-------------\"",[33,15023,143],{"class":64},[33,15025,15026],{"class":35,"line":1647},[33,15027,149],{"class":64},[33,15029,15030],{"class":35,"line":1658},[33,15031,51],{"emptyLinePlaceholder":50},[33,15033,15034,15036,15038],{"class":35,"line":1663},[33,15035,1456],{"class":39},[33,15037,13400],{"class":60},[33,15039,1462],{"class":64},[33,15041,15042],{"class":35,"line":1686},[33,15043,116],{"class":64},[33,15045,15046,15048,15050,15052,15054,15056,15058,15061],{"class":35,"line":1691},[33,15047,122],{"class":60},[33,15049,104],{"class":64},[33,15051,128],{"class":127},[33,15053,131],{"class":64},[33,15055,134],{"class":60},[33,15057,137],{"class":64},[33,15059,15060],{"class":43},"\"-----------参数更新操作-------------\"",[33,15062,143],{"class":64},[33,15064,15065],{"class":35,"line":1702},[33,15066,149],{"class":64},[33,15068,15069],{"class":35,"line":1711},[33,15070,51],{"emptyLinePlaceholder":50},[33,15072,15073],{"class":35,"line":3792},[33,15074,1451],{"class":39},[33,15076,15077,15079,15081,15084],{"class":35,"line":3803},[33,15078,1569],{"class":60},[33,15080,74],{"class":64},[33,15082,15083],{"class":60},"SyncParametersClient",[33,15085,15086],{"class":64},"::SharedPtr param_client_;\n",[33,15088,15089],{"class":35,"line":3812},[33,15090,155],{"class":64},[33,15092,15093],{"class":35,"line":6842},[33,15094,51],{"emptyLinePlaceholder":50},[33,15096,15097,15099,15101,15103,15105,15107,15109,15111,15113,15115],{"class":35,"line":6851},[33,15098,166],{"class":39},[33,15100,169],{"class":60},[33,15102,104],{"class":64},[33,15104,166],{"class":39},[33,15106,177],{"class":176},[33,15108,180],{"class":64},[33,15110,183],{"class":39},[33,15112,186],{"class":39},[33,15114,189],{"class":176},[33,15116,110],{"class":64},[33,15118,15119],{"class":35,"line":6856},[33,15120,83],{"class":64},[33,15122,15123,15125,15127,15129],{"class":35,"line":6867},[33,15124,202],{"class":60},[33,15126,74],{"class":64},[33,15128,207],{"class":60},[33,15130,210],{"class":64},[33,15132,15133],{"class":35,"line":6872},[33,15134,51],{"emptyLinePlaceholder":50},[33,15136,15137,15139,15141,15143,15145,15147,15149,15151,15153],{"class":35,"line":6893},[33,15138,4836],{"class":39},[33,15140,4839],{"class":64},[33,15142,1361],{"class":39},[33,15144,1271],{"class":60},[33,15146,74],{"class":64},[33,15148,235],{"class":60},[33,15150,238],{"class":64},[33,15152,13114],{"class":60},[33,15154,4855],{"class":64},[33,15156,15157],{"class":35,"line":6898},[33,15158,51],{"emptyLinePlaceholder":50},[33,15160,15161,15163,15165,15167,15169,15171],{"class":35,"line":6917},[33,15162,6901],{"class":39},[33,15164,6904],{"class":64},[33,15166,1361],{"class":39},[33,15168,6909],{"class":64},[33,15170,6912],{"class":60},[33,15172,262],{"class":64},[33,15174,15175],{"class":35,"line":6922},[33,15176,51],{"emptyLinePlaceholder":50},[33,15178,15179,15181,15183,15186],{"class":35,"line":6936},[33,15180,5894],{"class":39},[33,15182,104],{"class":64},[33,15184,15185],{"class":39},"!",[33,15187,15188],{"class":64},"flag)\n",[33,15190,15191],{"class":35,"line":6941},[33,15192,5910],{"class":64},[33,15194,15195,15197,15199],{"class":35,"line":6965},[33,15196,1982],{"class":39},[33,15198,271],{"class":127},[33,15200,274],{"class":64},[33,15202,15203],{"class":35,"line":6974},[33,15204,545],{"class":64},[33,15206,15207],{"class":35,"line":6979},[33,15208,51],{"emptyLinePlaceholder":50},[33,15210,15211,15214,15216],{"class":35,"line":6984},[33,15212,15213],{"class":64},"  client->",[33,15215,13561],{"class":60},[33,15217,262],{"class":64},[33,15219,15220,15222,15224],{"class":35,"line":6995},[33,15221,15213],{"class":64},[33,15223,13570],{"class":60},[33,15225,262],{"class":64},[33,15227,15228,15230,15232],{"class":35,"line":7004},[33,15229,15213],{"class":64},[33,15231,13561],{"class":60},[33,15233,262],{"class":64},[33,15235,15236],{"class":35,"line":7665},[33,15237,51],{"emptyLinePlaceholder":50},[33,15239,15240],{"class":35,"line":7670},[33,15241,15242],{"class":4830},"  \u002F\u002F rclcpp::spin(client);\n",[33,15244,15245],{"class":35,"line":7685},[33,15246,51],{"emptyLinePlaceholder":50},[33,15248,15249,15251,15253,15255],{"class":35,"line":7690},[33,15250,202],{"class":60},[33,15252,74],{"class":64},[33,15254,259],{"class":60},[33,15256,262],{"class":64},[33,15258,15259,15261,15263],{"class":35,"line":7703},[33,15260,268],{"class":39},[33,15262,271],{"class":127},[33,15264,274],{"class":64},[33,15266,15267],{"class":35,"line":7708},[33,15268,280],{"class":64},[562,15270],{},[16,15272,15273],{},[19,15274],{"alt":21,"src":15275},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage829.webp",[16,15277,15278],{},[19,15279],{"alt":21,"src":15280},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage830.webp",[16,15282,15283],{},[19,15284],{"alt":21,"src":15285},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage831.webp",[16,15287,15288],{},"这些话题都是我们此节点名称下的。",[562,15290],{},[16,15292,15293],{},[19,15294],{"alt":21,"src":15295},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage832.webp",[16,15297,15298],{},[19,15299],{"alt":21,"src":15300},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage833.webp",[16,15302,15303],{},[19,15304],{"alt":21,"src":15305},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage834.webp",[16,15307,15308],{},[19,15309],{"alt":21,"src":15310},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage835.webp",[16,15312,15313],{},"要用高级for",[16,15315,15316],{},[19,15317],{"alt":21,"src":15318},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage836.webp",[16,15320,15321],{},[19,15322],{"alt":21,"src":15323},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage837.webp",[16,15325,15326],{},[19,15327],{"alt":21,"src":15328},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage838.webp",[16,15330,15331],{},[19,15332],{"alt":21,"src":15333},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage839.webp",[16,15335,15336],{},[19,15337],{"alt":21,"src":15338},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage840.webp",[16,15340,15341],{},[19,15342],{"alt":21,"src":15343},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage841.webp",[16,15345,15346],{},"入口参数填参数对象的容器。",[16,15348,15349],{},[19,15350],{"alt":21,"src":15351},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage842.webp",[16,15353,15354],{},[19,15355],{"alt":21,"src":15356},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage843.webp",[16,15358,15359],{},"我们不仅可以修改值，也可以创建新的参数，但是要保证服务端那边调用过undeclared......",[16,15361,15362],{},[19,15363],{"alt":21,"src":15364},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage844.webp",[16,15366,15367],{},[19,15368],{"alt":21,"src":15369},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage845.webp",[15371,15372,15373],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":21,"searchDepth":47,"depth":47,"links":15375},[15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388,15389,15390],{"id":14,"depth":54,"text":14},{"id":706,"depth":54,"text":706},{"id":760,"depth":54,"text":761},{"id":2432,"depth":54,"text":2432},{"id":2678,"depth":54,"text":2679},{"id":4208,"depth":54,"text":4208},{"id":4266,"depth":54,"text":4266},{"id":4292,"depth":54,"text":4293},{"id":5465,"depth":54,"text":5466},{"id":7917,"depth":54,"text":7917},{"id":8084,"depth":54,"text":8085},{"id":10758,"depth":54,"text":10759},{"id":12606,"depth":54,"text":12607},{"id":12715,"depth":54,"text":12716},{"id":14674,"depth":54,"text":14675},0,"0400","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin",{"title":5,"description":21},"wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","-Iya0iAyy5qvEIbE4S5P8btMXLHWGMMZC3KK1eV3mLU",[15405,15411,15417,15423,15425,15431,15437,15443,15449,15455,15461,15467,15473,15479,15485,15491,15497,15503,15509,15515,15521,15527,15533,15539,15545,15551,15557,15563,15569,15575,15581,15587,15593,15599,15605,15610,15616,15621,15627,15633,15639,15645,15651,15657,15663,15669,15675,15681,15687,15693,15699,15705,15711,15717,15723,15729,15735,15741,15747,15753,15759,15765,15771,15777,15783,15789,15795,15801,15807],{"path":15406,"stem":15407,"title":15408,"authors":15409,"date":15393,"chapterOrder":15410,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",{"path":15412,"stem":15413,"title":15414,"authors":15415,"date":15393,"chapterOrder":15416,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":15418,"stem":15419,"title":15420,"authors":15421,"date":15393,"chapterOrder":15422,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":15400,"stem":15402,"title":5,"authors":15424,"date":15393,"chapterOrder":15392,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},[7],{"path":15426,"stem":15427,"title":15428,"authors":15429,"date":15393,"chapterOrder":15430,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":15432,"stem":15433,"title":15434,"authors":15435,"date":15393,"chapterOrder":15436,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":15438,"stem":15439,"title":15440,"authors":15441,"date":15393,"chapterOrder":15442,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":15444,"stem":15445,"title":15446,"authors":15447,"date":15393,"chapterOrder":15448,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":15450,"stem":15451,"title":15452,"authors":15453,"date":15393,"chapterOrder":15454,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":15456,"stem":15457,"title":15458,"authors":15459,"date":15393,"chapterOrder":15460,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],"1000",{"path":15462,"stem":15463,"title":15464,"authors":15465,"date":15393,"chapterOrder":15466,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":15468,"stem":15469,"title":15470,"authors":15471,"date":15393,"chapterOrder":15472,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":15474,"stem":15475,"title":15476,"authors":15477,"date":15393,"chapterOrder":15478,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":15480,"stem":15481,"title":15482,"authors":15483,"date":15393,"chapterOrder":15484,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":15486,"stem":15487,"title":15488,"authors":15489,"date":15393,"chapterOrder":15490,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":15492,"stem":15493,"title":15494,"authors":15495,"date":15393,"chapterOrder":15496,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":15498,"stem":15499,"title":15500,"authors":15501,"date":15393,"chapterOrder":15502,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":15504,"stem":15505,"title":15506,"authors":15507,"date":15393,"chapterOrder":15508,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":15510,"stem":15511,"title":15512,"authors":15513,"date":15393,"chapterOrder":15514,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":15516,"stem":15517,"title":15518,"authors":15519,"date":15393,"chapterOrder":15520,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念","基本概念",[7],"1200-0400-0200-0100",{"path":15522,"stem":15523,"title":15524,"authors":15525,"date":15393,"chapterOrder":15526,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则","控制与装饰规则",[7],"1200-0400-0200-0200",{"path":15528,"stem":15529,"title":15530,"authors":15531,"date":15393,"chapterOrder":15532,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序","第一个完整程序",[7],"1200-0400-0200-0300",{"path":15534,"stem":15535,"title":15536,"authors":15537,"date":15393,"chapterOrder":15538,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据","节点之间传数据",[7],"1200-0400-0200-0400",{"path":15540,"stem":15541,"title":15542,"authors":15543,"date":15393,"chapterOrder":15544,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止","持续任务与中止",[7],"1200-0400-0200-0500",{"path":15546,"stem":15547,"title":15548,"authors":15549,"date":15393,"chapterOrder":15550,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务","组合实际任务",[7],"1200-0400-0200-0600",{"path":15552,"stem":15553,"title":15554,"authors":15555,"date":15393,"chapterOrder":15556,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":15558,"stem":15559,"title":15560,"authors":15561,"date":15393,"chapterOrder":15562,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":15564,"stem":15565,"title":15566,"authors":15567,"date":15393,"chapterOrder":15568,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":15570,"stem":15571,"title":15572,"authors":15573,"date":15393,"chapterOrder":15574,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":15576,"stem":15577,"title":15578,"authors":15579,"date":15393,"chapterOrder":15580,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":15582,"stem":15583,"title":15584,"authors":15585,"date":15393,"chapterOrder":15586,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":15588,"stem":15589,"title":15590,"authors":15591,"date":15393,"chapterOrder":15592,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":15594,"stem":15595,"title":15596,"authors":15597,"date":15393,"chapterOrder":15598,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":15600,"stem":15601,"title":15602,"authors":15603,"date":15393,"chapterOrder":15604,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":15606,"stem":15607,"title":15572,"authors":15608,"date":15393,"chapterOrder":15609,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":15611,"stem":15612,"title":15613,"authors":15614,"date":15393,"chapterOrder":15615,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":15617,"stem":15618,"title":15572,"authors":15619,"date":15393,"chapterOrder":15620,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":15622,"stem":15623,"title":15624,"authors":15625,"date":15393,"chapterOrder":15626,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":15628,"stem":15629,"title":15630,"authors":15631,"date":15393,"chapterOrder":15632,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":15634,"stem":15635,"title":15636,"authors":15637,"date":15393,"chapterOrder":15638,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":15640,"stem":15641,"title":15642,"authors":15643,"date":15393,"chapterOrder":15644,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":15646,"stem":15647,"title":15648,"authors":15649,"date":15393,"chapterOrder":15650,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":15652,"stem":15653,"title":15654,"authors":15655,"date":15393,"chapterOrder":15656,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":15658,"stem":15659,"title":15660,"authors":15661,"date":15393,"chapterOrder":15662,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":15664,"stem":15665,"title":15666,"authors":15667,"date":15393,"chapterOrder":15668,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":15670,"stem":15671,"title":15672,"authors":15673,"date":15393,"chapterOrder":15674,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":15676,"stem":15677,"title":15678,"authors":15679,"date":15393,"chapterOrder":15680,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":15682,"stem":15683,"title":15684,"authors":15685,"date":15393,"chapterOrder":15686,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU",[7],"1400-0600-0200",{"path":15688,"stem":15689,"title":15690,"authors":15691,"date":15393,"chapterOrder":15692,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":15694,"stem":15695,"title":15696,"authors":15697,"date":15393,"chapterOrder":15698,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":15700,"stem":15701,"title":15702,"authors":15703,"date":15393,"chapterOrder":15704,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":15706,"stem":15707,"title":15708,"authors":15709,"date":15393,"chapterOrder":15710,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":15712,"stem":15713,"title":15714,"authors":15715,"date":15393,"chapterOrder":15716,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":15718,"stem":15719,"title":15720,"authors":15721,"date":15393,"chapterOrder":15722,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":15724,"stem":15725,"title":15726,"authors":15727,"date":15393,"chapterOrder":15728,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":15730,"stem":15731,"title":15732,"authors":15733,"date":15393,"chapterOrder":15734,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":15736,"stem":15737,"title":15738,"authors":15739,"date":15393,"chapterOrder":15740,"chapterDepth":54,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":15742,"stem":15743,"title":15744,"authors":15745,"date":15393,"chapterOrder":15746,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":15748,"stem":15749,"title":15750,"authors":15751,"date":15393,"chapterOrder":15752,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":15754,"stem":15755,"title":15756,"authors":15757,"date":15393,"chapterOrder":15758,"chapterDepth":47,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":15760,"stem":15761,"title":15762,"authors":15763,"date":15393,"chapterOrder":15764,"chapterDepth":36,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":15766,"stem":15767,"title":15768,"authors":15769,"date":15393,"chapterOrder":15770,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":15772,"stem":15773,"title":15774,"authors":15775,"date":15393,"chapterOrder":15776,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":15778,"stem":15779,"title":15780,"authors":15781,"date":15393,"chapterOrder":15782,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":15784,"stem":15785,"title":15786,"authors":15787,"date":15393,"chapterOrder":15788,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":15790,"stem":15791,"title":15792,"authors":15793,"date":15393,"chapterOrder":15794,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":15796,"stem":15797,"title":15798,"authors":15799,"date":15393,"chapterOrder":15800,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":15802,"stem":15803,"title":15804,"authors":15805,"date":15393,"chapterOrder":15806,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":15398},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":15395,"stem":15808,"title":15809,"authors":15810,"date":15393,"chapterOrder":15811,"chapterDepth":15391,"docKey":15394,"docRoot":15395,"docTitle":15396,"isWikiDoc":50,"isWikiIndex":50},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[15813,15815,15818,15821],{"name":7,"image":15814},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":15816,"image":15817},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":15819,"image":15820},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":15822,"image":15823},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431901156]