[{"data":1,"prerenderedAt":3968},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu":3,"wiki-doc-items-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu":3604,"language-switcher-data-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu":3952,"wiki-i18n-paths-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu":3967},{"id":4,"title":5,"body":6,"canonicalPath":3586,"chapter":3587,"chapterSort":3588,"date":3589,"description":147,"docI18nKey":3590,"docKey":3591,"docRoot":3592,"docTitle":3593,"extension":3594,"i18nKey":3595,"isBlogPost":3596,"isWikiDoc":157,"isWikiIndex":3596,"layout":3597,"legacyPath":3598,"locale":3599,"localeSlug":3600,"meta":3601,"navigation":157,"path":3586,"seo":3602,"sourcePath":3598,"sourceStem":3595,"stem":3595,"wikiDepth":154,"__hash__":3603},"content/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU.md","惯性计IMU",{"type":7,"value":8,"toc":3580},"minimark",[9,13,20,23,26,39,42,47,50,55,58,61,94,97,123,126,129,141,460,463,466,506,509,528,531,3557,3563,3568,3571,3576],[10,11,12],"h3",{"id":12},"简介",[14,15,16],"p",{},[17,18,19],"strong",{},"概念",[14,21,22],{},"IMU是惯性测量单元（Inertial Measurement Unit）的缩写，它是一种集成了多个惯性传感器如加速度计、陀螺仪、磁力计等的导航传感器。IMU可以实时地测量和记录其所在物体的加速度、角速度和方向等信息，并通过信号处理和数学模型来计算出物体的姿态、位置和运动状态等。",[14,24,25],{},"IMU（惯性测量单元）主要由以下几种类型组成：",[27,28,29,33,36],"ol",{},[30,31,32],"li",{},"加速度计（Accelerometer）：用于测量物体的加速度，通常以三个轴向（X、Y、Z）提供加速度数据。加速度计可以帮助判断物体的线性运动和动作姿态变化。",[30,34,35],{},"陀螺仪（Gyroscope）：用于测量物体的角速度或角度变化率。陀螺仪可以提供关于物体旋转的信息，判断物体的角度、方向和转动动作。",[30,37,38],{},"磁力计（Magnetometer）：用于测量物体周围的磁场强度和方向（即测量场强）。磁力计可以帮助判断物体的方向和导航，尤其在地磁定位和航向控制中起重要作用。",[14,40,41],{},"这些传感器通常集成在一起形成IMU，并通过数据融合算法将它们的输出结合起来，提供综合的姿态、位置和运动信息。",[14,43,44],{},[17,45,46],{},"作用",[14,48,49],{},"IMU是一种重要的传感器组件，它在姿态感知、行驶状态监测、非GPS定位中发挥着重要的作用。",[14,51,52],{},[17,53,54],{},"特点",[14,56,57],{},"惯性测量单元（IMU）作为一种常见的传感器，在机器人领域中也有许多应用，下面是IMU在机器人领域的一些优点和缺点：",[14,59,60],{},"（1）优点：",[62,63,64,70,76,82,88],"ul",{},[30,65,66,69],{},[17,67,68],{},"实时性高："," IMU能够以很高的采样频率获取姿态和加速度数据，提供实时的运动信息。",[30,71,72,75],{},[17,73,74],{},"精度较高："," IMU可以测量物体的加速度和角速度，经过合成和滤波处理后，可提供较高精度的姿态估计和运动跟踪。",[30,77,78,81],{},[17,79,80],{},"不受光照条件限制："," IMU不依赖于光照条件，适用于各种环境，如室内、室外和低光条件。",[30,83,84,87],{},[17,85,86],{},"尺寸小巧："," IMU通常具有小型、轻量级和紧凑的设计，适合嵌入式系统和对空间要求较高的机器人平台。",[30,89,90,93],{},[17,91,92],{},"低功耗："," IMU的功耗相对较低，适合资源受限或需要长时间运行的应用。",[14,95,96],{},"（2）缺点：",[62,98,99,105,111,117],{},[30,100,101,104],{},[17,102,103],{},"累积误差："," 由于积分计算的误差会随时间累积，IMU的姿态估计随着时间推移可能会出现漂移，需要与其他传感器进行融合或采用校准方法进行补偿。",[30,106,107,110],{},[17,108,109],{},"受外部干扰影响："," IMU的测量结果容易受到振动、震动和温度变化等外界干扰的影响，可能导致姿态估计不稳定或不准确。",[30,112,113,116],{},[17,114,115],{},"不适用于绝对定位："," 单独使用IMU无法提供物体的绝对位置信息，需要结合其他传感器（如GNSS）来实现绝对定位。",[30,118,119,122],{},[17,120,121],{},"无法感知环境信息："," IMU只能提供自身的加速度和角速度数据，无法直接感知环境或检测周围物体。",[14,124,125],{},"综上所述，IMU在机器人领域具有实时性高、精度较高、不受光照条件限制、尺寸小巧和低功耗等优点。然而，它也存在累积误差、受外部干扰影响、不适用于绝对定位和无法感知环境信息等缺点。因此，在设计机器人系统时需综合考虑应用需求，并与其他传感器（如相机、激光雷达等）进行融合，以提升机器人的感知、定位和控制能力。",[10,127,128],{"id":128},"消息接口",[14,130,131,132,136,137,140],{},"在ROS2中imu消息被封装为了",[133,134,135],"code",{},"sensor_msgs/msg/Imu","接口，可通过指令",[133,138,139],{},"ros2 interface show sensor_msgs/msg/Imu","查看该接口的具体数据结构，结果如下：",[142,143,148],"pre",{"className":144,"code":145,"language":146,"meta":147,"style":147},"language-bash shiki shiki-themes github-light github-dark","\n# 这是一个从惯性测量单元（Inertial Measurement Unit，简称IMU）获取数据的消息。\n#\n\n# 加速度应该以米/秒^2为单位（不是以g为单位），旋转速度应该以弧度/秒为单位。\n#\n\n# 如果测量的协方差已知，则应该填写相应值。全零的协方差矩阵将被解释为“协方差未知”，必须从其他源获取协方差才能使用协方差数据。\n#\n\n# 如果没有其中一个数据元素的估计值（例如，你的IMU不会产生方向估计），请将相关协方差矩阵的第 0 个元素设置为 -1。\n\n# 如果你正在解析此消息，请检查每个协方差矩阵的第一个元素中是否有 -1 的值，并忽略相关的估计值。\n\nstd_msgs/Header header # 标头\n    builtin_interfaces/Time stamp # 时间戳\n        int32 sec\n        uint32 nanosec\n    string frame_id # imu坐标系\n\ngeometry_msgs/Quaternion orientation # 四元数姿态\n    float64 x 0\n    float64 y 0\n    float64 z 0\n    float64 w 1\nfloat64[9] orientation_covariance # 姿态协方差矩阵\n\ngeometry_msgs/Vector3 angular_velocity # 三轴角速度\n    float64 x\n    float64 y\n    float64 z\nfloat64[9] angular_velocity_covariance # 角速度协方差矩阵\n\ngeometry_msgs/Vector3 linear_acceleration # 三轴线性加速度\n    float64 x\n    float64 y\n    float64 z\nfloat64[9] linear_acceleration_covariance # 线性加速度协方差矩阵\n","bash","",[133,149,150,159,166,172,177,183,188,193,199,204,209,215,220,226,231,245,257,266,275,287,292,304,317,327,337,348,360,365,377,385,393,401,412,417,428,435,442,449],{"__ignoreMap":147},[151,152,155],"span",{"class":153,"line":154},"line",1,[151,156,158],{"emptyLinePlaceholder":157},true,"\n",[151,160,162],{"class":153,"line":161},2,[151,163,165],{"class":164},"sJ8bj","# 这是一个从惯性测量单元（Inertial Measurement Unit，简称IMU）获取数据的消息。\n",[151,167,169],{"class":153,"line":168},3,[151,170,171],{"class":164},"#\n",[151,173,175],{"class":153,"line":174},4,[151,176,158],{"emptyLinePlaceholder":157},[151,178,180],{"class":153,"line":179},5,[151,181,182],{"class":164},"# 加速度应该以米/秒^2为单位（不是以g为单位），旋转速度应该以弧度/秒为单位。\n",[151,184,186],{"class":153,"line":185},6,[151,187,171],{"class":164},[151,189,191],{"class":153,"line":190},7,[151,192,158],{"emptyLinePlaceholder":157},[151,194,196],{"class":153,"line":195},8,[151,197,198],{"class":164},"# 如果测量的协方差已知，则应该填写相应值。全零的协方差矩阵将被解释为“协方差未知”，必须从其他源获取协方差才能使用协方差数据。\n",[151,200,202],{"class":153,"line":201},9,[151,203,171],{"class":164},[151,205,207],{"class":153,"line":206},10,[151,208,158],{"emptyLinePlaceholder":157},[151,210,212],{"class":153,"line":211},11,[151,213,214],{"class":164},"# 如果没有其中一个数据元素的估计值（例如，你的IMU不会产生方向估计），请将相关协方差矩阵的第 0 个元素设置为 -1。\n",[151,216,218],{"class":153,"line":217},12,[151,219,158],{"emptyLinePlaceholder":157},[151,221,223],{"class":153,"line":222},13,[151,224,225],{"class":164},"# 如果你正在解析此消息，请检查每个协方差矩阵的第一个元素中是否有 -1 的值，并忽略相关的估计值。\n",[151,227,229],{"class":153,"line":228},14,[151,230,158],{"emptyLinePlaceholder":157},[151,232,234,238,242],{"class":153,"line":233},15,[151,235,237],{"class":236},"sScJk","std_msgs/Header",[151,239,241],{"class":240},"sZZnC"," header",[151,243,244],{"class":164}," # 标头\n",[151,246,248,251,254],{"class":153,"line":247},16,[151,249,250],{"class":236},"    builtin_interfaces/Time",[151,252,253],{"class":240}," stamp",[151,255,256],{"class":164}," # 时间戳\n",[151,258,260,263],{"class":153,"line":259},17,[151,261,262],{"class":236},"        int32",[151,264,265],{"class":240}," sec\n",[151,267,269,272],{"class":153,"line":268},18,[151,270,271],{"class":236},"        uint32",[151,273,274],{"class":240}," nanosec\n",[151,276,278,281,284],{"class":153,"line":277},19,[151,279,280],{"class":236},"    string",[151,282,283],{"class":240}," frame_id",[151,285,286],{"class":164}," # imu坐标系\n",[151,288,290],{"class":153,"line":289},20,[151,291,158],{"emptyLinePlaceholder":157},[151,293,295,298,301],{"class":153,"line":294},21,[151,296,297],{"class":236},"geometry_msgs/Quaternion",[151,299,300],{"class":240}," orientation",[151,302,303],{"class":164}," # 四元数姿态\n",[151,305,307,310,313],{"class":153,"line":306},22,[151,308,309],{"class":236},"    float64",[151,311,312],{"class":240}," x",[151,314,316],{"class":315},"sj4cs"," 0\n",[151,318,320,322,325],{"class":153,"line":319},23,[151,321,309],{"class":236},[151,323,324],{"class":240}," y",[151,326,316],{"class":315},[151,328,330,332,335],{"class":153,"line":329},24,[151,331,309],{"class":236},[151,333,334],{"class":240}," z",[151,336,316],{"class":315},[151,338,340,342,345],{"class":153,"line":339},25,[151,341,309],{"class":236},[151,343,344],{"class":240}," w",[151,346,347],{"class":315}," 1\n",[151,349,351,354,357],{"class":153,"line":350},26,[151,352,353],{"class":236},"float64[9]",[151,355,356],{"class":240}," orientation_covariance",[151,358,359],{"class":164}," # 姿态协方差矩阵\n",[151,361,363],{"class":153,"line":362},27,[151,364,158],{"emptyLinePlaceholder":157},[151,366,368,371,374],{"class":153,"line":367},28,[151,369,370],{"class":236},"geometry_msgs/Vector3",[151,372,373],{"class":240}," angular_velocity",[151,375,376],{"class":164}," # 三轴角速度\n",[151,378,380,382],{"class":153,"line":379},29,[151,381,309],{"class":236},[151,383,384],{"class":240}," x\n",[151,386,388,390],{"class":153,"line":387},30,[151,389,309],{"class":236},[151,391,392],{"class":240}," y\n",[151,394,396,398],{"class":153,"line":395},31,[151,397,309],{"class":236},[151,399,400],{"class":240}," z\n",[151,402,404,406,409],{"class":153,"line":403},32,[151,405,353],{"class":236},[151,407,408],{"class":240}," angular_velocity_covariance",[151,410,411],{"class":164}," # 角速度协方差矩阵\n",[151,413,415],{"class":153,"line":414},33,[151,416,158],{"emptyLinePlaceholder":157},[151,418,420,422,425],{"class":153,"line":419},34,[151,421,370],{"class":236},[151,423,424],{"class":240}," linear_acceleration",[151,426,427],{"class":164}," # 三轴线性加速度\n",[151,429,431,433],{"class":153,"line":430},35,[151,432,309],{"class":236},[151,434,384],{"class":240},[151,436,438,440],{"class":153,"line":437},36,[151,439,309],{"class":236},[151,441,392],{"class":240},[151,443,445,447],{"class":153,"line":444},37,[151,446,309],{"class":236},[151,448,400],{"class":240},[151,450,452,454,457],{"class":153,"line":451},38,[151,453,353],{"class":236},[151,455,456],{"class":240}," linear_acceleration_covariance",[151,458,459],{"class":164}," # 线性加速度协方差矩阵\n",[10,461,462],{"id":462},"功能包创建",[14,464,465],{},"首先先创建功能包",[142,467,469],{"className":144,"code":468,"language":146,"meta":147,"style":147},"ros2 pkg create imu_plumb --build-type ament_cmake --dependencies rclcpp sensor_msgs --node-name imu_node\n",[133,470,471],{"__ignoreMap":147},[151,472,473,476,479,482,485,488,491,494,497,500,503],{"class":153,"line":154},[151,474,475],{"class":236},"ros2",[151,477,478],{"class":240}," pkg",[151,480,481],{"class":240}," create",[151,483,484],{"class":240}," imu_plumb",[151,486,487],{"class":315}," --build-type",[151,489,490],{"class":240}," ament_cmake",[151,492,493],{"class":315}," --dependencies",[151,495,496],{"class":240}," rclcpp",[151,498,499],{"class":240}," sensor_msgs",[151,501,502],{"class":315}," --node-name",[151,504,505],{"class":240}," imu_node\n",[14,507,508],{},"先编译一下",[142,510,512],{"className":144,"code":511,"language":146,"meta":147,"style":147},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[133,513,514],{"__ignoreMap":147},[151,515,516,519,522,525],{"class":153,"line":154},[151,517,518],{"class":236},"colcon",[151,520,521],{"class":240}," build",[151,523,524],{"class":315}," --cmake-args",[151,526,527],{"class":315}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[10,529,530],{"id":530},"节点主要逻辑",[142,532,536],{"className":533,"code":534,"language":535,"meta":147,"style":147},"language-cpp shiki shiki-themes github-light github-dark","#include \"rclcpp/rclcpp.hpp\"\n#include \"serial_driver/serial_driver.hpp\"\n#include \"cyber_imu/WitStandardProtocol.h\"\n#include \"sensor_msgs/msg/imu.hpp\"\n#include \u003Ccstdint>\n#include \u003Crclcpp/logging.hpp>\n#include \u003Csensor_msgs/msg/detail/imu__struct.hpp>\n#include \u003Ctf2/LinearMath/Quaternion.h>\n\nclass ImuNode: public rclcpp::Node\n{\n  public:\n    ImuNode():Node(\"ImuNode_node_cpp\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"惯性计imu节点启动!\");\n\n      //创建odom话题通信发布方\n      imu_pub_ = this->create_publisher\u003Csensor_msgs::msg::Imu>(\"/imu\",10);\n\n    // 声明参数（带默认值）\n    // 串口默认设备名（根据实际设备调整）\n    this->declare_parameter(\"device_name\", \"/dev/ttyUSB0\");\n    //串口默认波特率\n    this->declare_parameter(\"baud_rate\", 115200);\n\n    // 获取参数值\n    const std::string device_name = this->get_parameter(\"device_name\").as_string();\n    const uint32_t baud_rate = this->get_parameter(\"baud_rate\").as_int();\n\n      // 创建串口配置对象\n      // 波特率默认115200；不开启流控制；无奇偶效验；停止位1。\n      drivers::serial_driver::SerialPortConfig config(\n          baud_rate,\n          drivers::serial_driver::FlowControl::NONE,\n          drivers::serial_driver::Parity::NONE,\n          drivers::serial_driver::StopBits::ONE);\n\n      // 初始化串口\n      try\n      {\n        io_context_ = std::make_shared\u003Cdrivers::common::IoContext>(1);\n        // 初始化 serial_driver_\n        serial_driver_ = std::make_shared\u003Cdrivers::serial_driver::SerialDriver>(*io_context_);\n        serial_driver_->init_port(device_name, config);\n        serial_driver_->port()->open();\n\n        RCLCPP_INFO(this->get_logger(), \"Serial port initialized successfully\");\n        RCLCPP_INFO(this->get_logger(), \"Using device: %s\", serial_driver_->port().get()->device_name().c_str());\n        RCLCPP_INFO(this->get_logger(), \"Baud_rate: %d\", config.get_baud_rate());\n      }\n      catch (const std::exception &ex)\n      {\n        RCLCPP_ERROR(this->get_logger(), \"Failed to initialize serial port: %s\", ex.what());\n        return;\n      }\n\n      async_receive_message();   //进入异步接收\n    }\n\n  private:\n    rclcpp::Publisher\u003Csensor_msgs::msg::Imu>::SharedPtr imu_pub_;\n\n    std::shared_ptr\u003Cdrivers::serial_driver::SerialDriver> serial_driver_;\n    std::shared_ptr\u003Cdrivers::common::IoContext> io_context_;\n\n    void async_receive_message()  //创建一个函数更方便重新调用\n    {\n      auto port = serial_driver_->port();\n\n      // 设置接收回调函数\n      port->async_receive([this](const std::vector\u003Cuint8_t> &data,const size_t &size) \n      {\n          if (size > 0)\n          {\n            RCLCPP_DEBUG(this->get_logger(),\"\\n\");\n            RCLCPP_DEBUG(this->get_logger(),\"以下是接收到的IMU惯性计数据:\");\n            //创建imu消息类型\n            auto imu_msg = sensor_msgs::msg::Imu();\n            bool valid_frame = false;  // 添加有效帧标志\n            bool valid_data = false;  // 添加有效帧标志\n\n            for(int16_t i = 0;i \u003C (int16_t)size;++i)\n            {\n              uint8_t data_buffer = data[i];\n              // RCLCPP_INFO(this->get_logger(),\"接收到的字节：%x\",data_buffer);\n              // 处理接收到的数据\n              if(wit_imu_.rx.Data_Analysis(&data_buffer) == true)\n              {\n                valid_frame = true;  // 标记有有效帧需要处理\n              }\n\n              if(valid_frame == true)\n              {\n                if(wit_imu_.rx.data.cmd == 0x51)\n                {\n                  // 存储加速度计数据\n                  wit_imu_.rx.data.imu.Accel.X = wit_imu_.rx.data.int16_buffer[0];\n                  wit_imu_.rx.data.imu.Accel.Y = wit_imu_.rx.data.int16_buffer[1];\n                  wit_imu_.rx.data.imu.Accel.Z = wit_imu_.rx.data.int16_buffer[2];\n                  wit_imu_.rx.data.imu.Temp    = wit_imu_.rx.data.int16_buffer[3];\n\n                  //加速度单位m/s2，温度单位℃摄氏度\n                  wit_imu_.rx.data.imu.Accel.X = wit_imu_.rx.data.imu.Accel.X / 32768.0f * 16.0f * 9.8f;\n                  wit_imu_.rx.data.imu.Accel.Y = wit_imu_.rx.data.imu.Accel.Y / 32768.0f * 16.0f * 9.8f;\n                  wit_imu_.rx.data.imu.Accel.Z = wit_imu_.rx.data.imu.Accel.Z / 32768.0f * 16.0f * 9.8f;\n                  wit_imu_.rx.data.imu.Temp    =  wit_imu_.rx.data.imu.Temp / 100.0f;\n\n                  // 打印加速度计数据\n                  RCLCPP_DEBUG(this->get_logger(), \"加速度(XYZ): %.6f, %.6f, %.6f\",\n                              wit_imu_.rx.data.imu.Accel.X, wit_imu_.rx.data.imu.Accel.Y, wit_imu_.rx.data.imu.Accel.Z);\n                  //减少时间戳带来的延迟\n                  imu_msg.header.stamp = this->get_clock()->now();\n                }\n\n                else if(wit_imu_.rx.data.cmd == 0x52)\n                {\n                  // 存储陀螺仪数据\n                  wit_imu_.rx.data.imu.Gyro.X = wit_imu_.rx.data.int16_buffer[0];\n                  wit_imu_.rx.data.imu.Gyro.Y = wit_imu_.rx.data.int16_buffer[1];\n                  wit_imu_.rx.data.imu.Gyro.Z = wit_imu_.rx.data.int16_buffer[2];\n\n                  //角速度单位rad/s\n                  wit_imu_.rx.data.imu.Gyro.X = wit_imu_.rx.data.imu.Gyro.X / 32768.0f * 2000.0f * (M_PI / 180.0f);\n                  wit_imu_.rx.data.imu.Gyro.Y = wit_imu_.rx.data.imu.Gyro.Y / 32768.0f * 2000.0f * (M_PI / 180.0f);\n                  wit_imu_.rx.data.imu.Gyro.Z = wit_imu_.rx.data.imu.Gyro.Z / 32768.0f * 2000.0f * (M_PI / 180.0f);\n\n                  // 打印陀螺仪数据\n                  RCLCPP_DEBUG(this->get_logger(), \"角速度(XYZ): %.6f, %.6f, %.6f\",\n                              wit_imu_.rx.data.imu.Gyro.X, wit_imu_.rx.data.imu.Gyro.Y, wit_imu_.rx.data.imu.Gyro.Z);\n                }\n\n                else if(wit_imu_.rx.data.cmd == 0x54)\n                {\n                  // 存储磁力计数据(单位lsb)\n                  wit_imu_.rx.data.imu.Magnet.X = wit_imu_.rx.data.int16_buffer[0];\n                  wit_imu_.rx.data.imu.Magnet.Y = wit_imu_.rx.data.int16_buffer[1];\n                  wit_imu_.rx.data.imu.Magnet.Z = wit_imu_.rx.data.int16_buffer[2];\n\n                  //磁场单位uT\n                  // wit_imu_.rx.data.imu.Magnet.X = wit_imu_.rx.data.imu.Magnet.X / 1.0f;\n                  // wit_imu_.rx.data.imu.Magnet.Y = wit_imu_.rx.data.imu.Magnet.Y / 1.0f;\n                  // wit_imu_.rx.data.imu.Magnet.Z = wit_imu_.rx.data.imu.Magnet.Z / 1.0f;\n\n                  // 打印磁力计数据\n                  RCLCPP_DEBUG(this->get_logger(), \"磁场(XYZ): %.6f, %.6f, %.6f\",\n                              wit_imu_.rx.data.imu.Magnet.X, wit_imu_.rx.data.imu.Magnet.Y, wit_imu_.rx.data.imu.Magnet.Z);\n                }\n\n                else if(wit_imu_.rx.data.cmd == 0x53)\n                {\n                  // 存储欧拉角数据\n                  wit_imu_.rx.data.imu.Euler.roll = wit_imu_.rx.data.int16_buffer[0];\n                  wit_imu_.rx.data.imu.Euler.pitch = wit_imu_.rx.data.int16_buffer[1];\n                  wit_imu_.rx.data.imu.Euler.yaw = wit_imu_.rx.data.int16_buffer[2];\n\n                  //欧拉角单位dec\n                  wit_imu_.rx.data.imu.Euler.roll = wit_imu_.rx.data.imu.Euler.roll / 32768.0f * 180.0f;\n                  wit_imu_.rx.data.imu.Euler.pitch = wit_imu_.rx.data.imu.Euler.pitch / 32768.0f * 180.0f;\n                  wit_imu_.rx.data.imu.Euler.yaw = wit_imu_.rx.data.imu.Euler.yaw / 32768.0f * 180.0f;\n\n                  // 打印欧拉角数据\n                  RCLCPP_DEBUG(this->get_logger(), \"欧拉角(XYZ_RPY): %.6f, %.6f, %.6f\",\n                              wit_imu_.rx.data.imu.Euler.roll, wit_imu_.rx.data.imu.Euler.pitch, wit_imu_.rx.data.imu.Euler.yaw);\n\n                  //欧拉角单位rad\n                  wit_imu_.rx.data.imu.Euler.roll = wit_imu_.rx.data.imu.Euler.roll * (M_PI / 180.0f);\n                  wit_imu_.rx.data.imu.Euler.pitch = wit_imu_.rx.data.imu.Euler.pitch  * (M_PI / 180.0f);\n                  wit_imu_.rx.data.imu.Euler.yaw = wit_imu_.rx.data.imu.Euler.yaw  * (M_PI / 180.0f);\n                }\n\n                else if(wit_imu_.rx.data.cmd == 0x59)\n                {\n                  for(int16_t i = 0 ; i \u003C 4 ; i++)\n                  {\n                    // 存储四元数数据\n                    wit_imu_.rx.data.imu.Quat.q[i] = wit_imu_.rx.data.int16_buffer[i];\n\n                    //四元数是归一化的四元数\n                    wit_imu_.rx.data.imu.Quat.q[i] = wit_imu_.rx.data.imu.Quat.q[i] / 32768.0f;\n                  }\n\n                  // 打印四元数数据\n                  //注意，0对应y，1对应x，-2才对应z。\n                  RCLCPP_DEBUG(this->get_logger(), \"四元数(xyzw): %.6f, %.6f, %.6f, %.6f\",\n                              wit_imu_.rx.data.imu.Quat.q[1],wit_imu_.rx.data.imu.Quat.q[0],-wit_imu_.rx.data.imu.Quat.q[2],wit_imu_.rx.data.imu.Quat.q[3]);\n                  valid_data = true;\n                }\n                wit_imu_.rx.data.cmd = 0x00;   //跑过一次就进行清0\n                valid_frame = false;\n              }\n            }\n\n            if(valid_data == true)\n            {\n              //时间戳\n              // imu_msg.header.stamp = this->get_clock()->now();\n              //位姿信息所参考的坐标系\n              imu_msg.header.frame_id = \"imu\";\n\n              // tf2::Quaternion q;\n              // //DOF欧拉角单位rad\n              // q.setRPY(roll_, pitch_, yaw_);\n              // //DOF欧拉角（四元数）\n              // imu_msg.orientation.x = q.x();\n              // imu_msg.orientation.y = q.y();\n              // imu_msg.orientation.z = q.z();\n              // imu_msg.orientation.w = q.w();\n\n              //DOF欧拉角（四元数）\n              //注意对应关系\n              // 传感器坐标系 -> ROS坐标系：\n              // X -> Y\n              // Y -> X\n              // Z -> -Z\n              imu_msg.orientation.x =   wit_imu_.rx.data.imu.Quat.q[1];\n              imu_msg.orientation.y =   wit_imu_.rx.data.imu.Quat.q[0];\n              imu_msg.orientation.z = - wit_imu_.rx.data.imu.Quat.q[2];\n              imu_msg.orientation.w =   wit_imu_.rx.data.imu.Quat.q[3];\n\n              //加速度\n              imu_msg.linear_acceleration.x = wit_imu_.rx.data.imu.Accel.X;\n              imu_msg.linear_acceleration.y = wit_imu_.rx.data.imu.Accel.Y;\n              imu_msg.linear_acceleration.z = wit_imu_.rx.data.imu.Accel.Z;\n\n              //角速度\n              imu_msg.angular_velocity.x = wit_imu_.rx.data.imu.Gyro.X;\n              imu_msg.angular_velocity.y = wit_imu_.rx.data.imu.Gyro.Y;\n              imu_msg.angular_velocity.z = wit_imu_.rx.data.imu.Gyro.Z;\n\n              imu_pub_->publish(imu_msg);\n              valid_data = false;\n            }\n\n          }\n          // 继续监听新的数据\n          async_receive_message();\n      }\n      );\n    }\n};\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = std::make_shared\u003CImuNode>();\n\n  rclcpp::spin(node);\n\n  rclcpp::shutdown();\n  return 0;\n}\n","cpp",[133,537,538,547,554,561,568,575,582,589,596,600,623,628,633,653,658,683,687,692,736,740,745,750,773,778,798,802,807,840,869,873,878,883,902,907,924,939,955,959,964,970,976,1014,1020,1055,1067,1083,1088,1110,1158,1189,1195,1218,1223,1254,1263,1268,1273,1285,1291,1296,1302,1329,1334,1359,1382,1387,1402,1407,1425,1430,1436,1492,1497,1513,1519,1544,1564,1570,1593,1613,1629,1634,1670,1676,1690,1696,1702,1729,1735,1750,1756,1761,1775,1780,1799,1805,1811,1828,1842,1857,1872,1877,1883,1919,1949,1979,1998,2003,2009,2044,2050,2056,2078,2084,2089,2109,2114,2120,2134,2148,2162,2167,2173,2210,2244,2278,2283,2289,2321,2327,2332,2337,2355,2360,2366,2380,2394,2408,2413,2419,2425,2431,2437,2442,2448,2480,2486,2491,2496,2514,2519,2525,2539,2553,2567,2572,2578,2602,2626,2650,2655,2661,2693,2699,2704,2710,2731,2753,2775,2780,2785,2803,2808,2839,2845,2851,2862,2867,2873,2891,2897,2902,2908,2914,2950,2981,2993,2998,3016,3027,3032,3038,3043,3058,3063,3069,3075,3081,3094,3099,3105,3114,3120,3128,3134,3140,3146,3152,3157,3163,3169,3175,3181,3187,3193,3208,3222,3240,3254,3259,3265,3276,3287,3298,3303,3309,3320,3331,3342,3347,3359,3371,3376,3381,3387,3393,3401,3406,3412,3417,3423,3428,3457,3462,3476,3481,3506,3511,3524,3529,3541,3551],{"__ignoreMap":147},[151,539,540,544],{"class":153,"line":154},[151,541,543],{"class":542},"szBVR","#include",[151,545,546],{"class":240}," \"rclcpp/rclcpp.hpp\"\n",[151,548,549,551],{"class":153,"line":161},[151,550,543],{"class":542},[151,552,553],{"class":240}," \"serial_driver/serial_driver.hpp\"\n",[151,555,556,558],{"class":153,"line":168},[151,557,543],{"class":542},[151,559,560],{"class":240}," \"cyber_imu/WitStandardProtocol.h\"\n",[151,562,563,565],{"class":153,"line":174},[151,564,543],{"class":542},[151,566,567],{"class":240}," \"sensor_msgs/msg/imu.hpp\"\n",[151,569,570,572],{"class":153,"line":179},[151,571,543],{"class":542},[151,573,574],{"class":240}," \u003Ccstdint>\n",[151,576,577,579],{"class":153,"line":185},[151,578,543],{"class":542},[151,580,581],{"class":240}," \u003Crclcpp/logging.hpp>\n",[151,583,584,586],{"class":153,"line":190},[151,585,543],{"class":542},[151,587,588],{"class":240}," \u003Csensor_msgs/msg/detail/imu__struct.hpp>\n",[151,590,591,593],{"class":153,"line":195},[151,592,543],{"class":542},[151,594,595],{"class":240}," \u003Ctf2/LinearMath/Quaternion.h>\n",[151,597,598],{"class":153,"line":201},[151,599,158],{"emptyLinePlaceholder":157},[151,601,602,605,608,612,615,617,620],{"class":153,"line":206},[151,603,604],{"class":542},"class",[151,606,607],{"class":236}," ImuNode",[151,609,611],{"class":610},"sVt8B",": ",[151,613,614],{"class":542},"public",[151,616,496],{"class":236},[151,618,619],{"class":610},"::",[151,621,622],{"class":236},"Node\n",[151,624,625],{"class":153,"line":211},[151,626,627],{"class":610},"{\n",[151,629,630],{"class":153,"line":217},[151,631,632],{"class":542},"  public:\n",[151,634,635,638,641,644,647,650],{"class":153,"line":222},[151,636,637],{"class":236},"    ImuNode",[151,639,640],{"class":610},"():",[151,642,643],{"class":236},"Node",[151,645,646],{"class":610},"(",[151,648,649],{"class":240},"\"ImuNode_node_cpp\"",[151,651,652],{"class":610},")\n",[151,654,655],{"class":153,"line":228},[151,656,657],{"class":610},"    {\n",[151,659,660,663,665,668,671,674,677,680],{"class":153,"line":233},[151,661,662],{"class":236},"      RCLCPP_INFO",[151,664,646],{"class":610},[151,666,667],{"class":315},"this",[151,669,670],{"class":610},"->",[151,672,673],{"class":236},"get_logger",[151,675,676],{"class":610},"(),",[151,678,679],{"class":240},"\"惯性计imu节点启动!\"",[151,681,682],{"class":610},");\n",[151,684,685],{"class":153,"line":247},[151,686,158],{"emptyLinePlaceholder":157},[151,688,689],{"class":153,"line":259},[151,690,691],{"class":164},"      //创建odom话题通信发布方\n",[151,693,694,697,700,703,706,709,712,714,717,720,723,725,728,731,734],{"class":153,"line":268},[151,695,696],{"class":610},"      imu_pub_ ",[151,698,699],{"class":542},"=",[151,701,702],{"class":315}," this",[151,704,705],{"class":610},"->create_publisher",[151,707,708],{"class":542},"\u003C",[151,710,711],{"class":236},"sensor_msgs",[151,713,619],{"class":610},[151,715,716],{"class":236},"msg",[151,718,719],{"class":610},"::Imu",[151,721,722],{"class":542},">",[151,724,646],{"class":610},[151,726,727],{"class":240},"\"/imu\"",[151,729,730],{"class":610},",",[151,732,733],{"class":315},"10",[151,735,682],{"class":610},[151,737,738],{"class":153,"line":277},[151,739,158],{"emptyLinePlaceholder":157},[151,741,742],{"class":153,"line":289},[151,743,744],{"class":164},"    // 声明参数（带默认值）\n",[151,746,747],{"class":153,"line":294},[151,748,749],{"class":164},"    // 串口默认设备名（根据实际设备调整）\n",[151,751,752,755,757,760,762,765,768,771],{"class":153,"line":306},[151,753,754],{"class":315},"    this",[151,756,670],{"class":610},[151,758,759],{"class":236},"declare_parameter",[151,761,646],{"class":610},[151,763,764],{"class":240},"\"device_name\"",[151,766,767],{"class":610},", ",[151,769,770],{"class":240},"\"/dev/ttyUSB0\"",[151,772,682],{"class":610},[151,774,775],{"class":153,"line":319},[151,776,777],{"class":164},"    //串口默认波特率\n",[151,779,780,782,784,786,788,791,793,796],{"class":153,"line":329},[151,781,754],{"class":315},[151,783,670],{"class":610},[151,785,759],{"class":236},[151,787,646],{"class":610},[151,789,790],{"class":240},"\"baud_rate\"",[151,792,767],{"class":610},[151,794,795],{"class":315},"115200",[151,797,682],{"class":610},[151,799,800],{"class":153,"line":339},[151,801,158],{"emptyLinePlaceholder":157},[151,803,804],{"class":153,"line":350},[151,805,806],{"class":164},"    // 获取参数值\n",[151,808,809,812,815,818,820,822,824,827,829,831,834,837],{"class":153,"line":362},[151,810,811],{"class":542},"    const",[151,813,814],{"class":236}," std",[151,816,817],{"class":610},"::string device_name ",[151,819,699],{"class":542},[151,821,702],{"class":315},[151,823,670],{"class":610},[151,825,826],{"class":236},"get_parameter",[151,828,646],{"class":610},[151,830,764],{"class":240},[151,832,833],{"class":610},").",[151,835,836],{"class":236},"as_string",[151,838,839],{"class":610},"();\n",[151,841,842,844,847,850,852,854,856,858,860,862,864,867],{"class":153,"line":367},[151,843,811],{"class":542},[151,845,846],{"class":542}," uint32_t",[151,848,849],{"class":610}," baud_rate ",[151,851,699],{"class":542},[151,853,702],{"class":315},[151,855,670],{"class":610},[151,857,826],{"class":236},[151,859,646],{"class":610},[151,861,790],{"class":240},[151,863,833],{"class":610},[151,865,866],{"class":236},"as_int",[151,868,839],{"class":610},[151,870,871],{"class":153,"line":379},[151,872,158],{"emptyLinePlaceholder":157},[151,874,875],{"class":153,"line":387},[151,876,877],{"class":164},"      // 创建串口配置对象\n",[151,879,880],{"class":153,"line":395},[151,881,882],{"class":164},"      // 波特率默认115200；不开启流控制；无奇偶效验；停止位1。\n",[151,884,885,888,890,893,896,899],{"class":153,"line":403},[151,886,887],{"class":236},"      drivers",[151,889,619],{"class":610},[151,891,892],{"class":236},"serial_driver",[151,894,895],{"class":610},"::SerialPortConfig ",[151,897,898],{"class":236},"config",[151,900,901],{"class":610},"(\n",[151,903,904],{"class":153,"line":414},[151,905,906],{"class":610},"          baud_rate,\n",[151,908,909,912,914,916,918,921],{"class":153,"line":419},[151,910,911],{"class":236},"          drivers",[151,913,619],{"class":610},[151,915,892],{"class":236},[151,917,619],{"class":610},[151,919,920],{"class":236},"FlowControl",[151,922,923],{"class":610},"::NONE,\n",[151,925,926,928,930,932,934,937],{"class":153,"line":430},[151,927,911],{"class":236},[151,929,619],{"class":610},[151,931,892],{"class":236},[151,933,619],{"class":610},[151,935,936],{"class":236},"Parity",[151,938,923],{"class":610},[151,940,941,943,945,947,949,952],{"class":153,"line":437},[151,942,911],{"class":236},[151,944,619],{"class":610},[151,946,892],{"class":236},[151,948,619],{"class":610},[151,950,951],{"class":236},"StopBits",[151,953,954],{"class":610},"::ONE);\n",[151,956,957],{"class":153,"line":444},[151,958,158],{"emptyLinePlaceholder":157},[151,960,961],{"class":153,"line":451},[151,962,963],{"class":164},"      // 初始化串口\n",[151,965,967],{"class":153,"line":966},39,[151,968,969],{"class":542},"      try\n",[151,971,973],{"class":153,"line":972},40,[151,974,975],{"class":610},"      {\n",[151,977,979,982,984,986,988,991,993,996,998,1001,1003,1006,1009,1012],{"class":153,"line":978},41,[151,980,981],{"class":610},"        io_context_ ",[151,983,699],{"class":542},[151,985,814],{"class":236},[151,987,619],{"class":610},[151,989,990],{"class":236},"make_shared",[151,992,708],{"class":610},[151,994,995],{"class":236},"drivers",[151,997,619],{"class":610},[151,999,1000],{"class":236},"common",[151,1002,619],{"class":610},[151,1004,1005],{"class":236},"IoContext",[151,1007,1008],{"class":610},">(",[151,1010,1011],{"class":315},"1",[151,1013,682],{"class":610},[151,1015,1017],{"class":153,"line":1016},42,[151,1018,1019],{"class":164},"        // 初始化 serial_driver_\n",[151,1021,1023,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1047,1049,1052],{"class":153,"line":1022},43,[151,1024,1025],{"class":610},"        serial_driver_ ",[151,1027,699],{"class":542},[151,1029,814],{"class":236},[151,1031,619],{"class":610},[151,1033,990],{"class":236},[151,1035,708],{"class":610},[151,1037,995],{"class":236},[151,1039,619],{"class":610},[151,1041,892],{"class":236},[151,1043,619],{"class":610},[151,1045,1046],{"class":236},"SerialDriver",[151,1048,1008],{"class":610},[151,1050,1051],{"class":542},"*",[151,1053,1054],{"class":610},"io_context_);\n",[151,1056,1058,1061,1064],{"class":153,"line":1057},44,[151,1059,1060],{"class":610},"        serial_driver_->",[151,1062,1063],{"class":236},"init_port",[151,1065,1066],{"class":610},"(device_name, config);\n",[151,1068,1070,1072,1075,1078,1081],{"class":153,"line":1069},45,[151,1071,1060],{"class":610},[151,1073,1074],{"class":236},"port",[151,1076,1077],{"class":610},"()->",[151,1079,1080],{"class":236},"open",[151,1082,839],{"class":610},[151,1084,1086],{"class":153,"line":1085},46,[151,1087,158],{"emptyLinePlaceholder":157},[151,1089,1091,1094,1096,1098,1100,1102,1105,1108],{"class":153,"line":1090},47,[151,1092,1093],{"class":236},"        RCLCPP_INFO",[151,1095,646],{"class":610},[151,1097,667],{"class":315},[151,1099,670],{"class":610},[151,1101,673],{"class":236},[151,1103,1104],{"class":610},"(), ",[151,1106,1107],{"class":240},"\"Serial port initialized successfully\"",[151,1109,682],{"class":610},[151,1111,1113,1115,1117,1119,1121,1123,1125,1128,1131,1134,1137,1139,1142,1145,1147,1150,1152,1155],{"class":153,"line":1112},48,[151,1114,1093],{"class":236},[151,1116,646],{"class":610},[151,1118,667],{"class":315},[151,1120,670],{"class":610},[151,1122,673],{"class":236},[151,1124,1104],{"class":610},[151,1126,1127],{"class":240},"\"Using device: ",[151,1129,1130],{"class":315},"%s",[151,1132,1133],{"class":240},"\"",[151,1135,1136],{"class":610},", serial_driver_->",[151,1138,1074],{"class":236},[151,1140,1141],{"class":610},"().",[151,1143,1144],{"class":236},"get",[151,1146,1077],{"class":610},[151,1148,1149],{"class":236},"device_name",[151,1151,1141],{"class":610},[151,1153,1154],{"class":236},"c_str",[151,1156,1157],{"class":610},"());\n",[151,1159,1161,1163,1165,1167,1169,1171,1173,1176,1179,1181,1184,1187],{"class":153,"line":1160},49,[151,1162,1093],{"class":236},[151,1164,646],{"class":610},[151,1166,667],{"class":315},[151,1168,670],{"class":610},[151,1170,673],{"class":236},[151,1172,1104],{"class":610},[151,1174,1175],{"class":240},"\"Baud_rate: ",[151,1177,1178],{"class":315},"%d",[151,1180,1133],{"class":240},[151,1182,1183],{"class":610},", config.",[151,1185,1186],{"class":236},"get_baud_rate",[151,1188,1157],{"class":610},[151,1190,1192],{"class":153,"line":1191},50,[151,1193,1194],{"class":610},"      }\n",[151,1196,1198,1201,1204,1207,1209,1212,1215],{"class":153,"line":1197},51,[151,1199,1200],{"class":542},"      catch",[151,1202,1203],{"class":610}," (",[151,1205,1206],{"class":542},"const",[151,1208,814],{"class":236},[151,1210,1211],{"class":610},"::exception ",[151,1213,1214],{"class":542},"&",[151,1216,1217],{"class":610},"ex)\n",[151,1219,1221],{"class":153,"line":1220},52,[151,1222,975],{"class":610},[151,1224,1226,1229,1231,1233,1235,1237,1239,1242,1244,1246,1249,1252],{"class":153,"line":1225},53,[151,1227,1228],{"class":236},"        RCLCPP_ERROR",[151,1230,646],{"class":610},[151,1232,667],{"class":315},[151,1234,670],{"class":610},[151,1236,673],{"class":236},[151,1238,1104],{"class":610},[151,1240,1241],{"class":240},"\"Failed to initialize serial port: ",[151,1243,1130],{"class":315},[151,1245,1133],{"class":240},[151,1247,1248],{"class":610},", ex.",[151,1250,1251],{"class":236},"what",[151,1253,1157],{"class":610},[151,1255,1257,1260],{"class":153,"line":1256},54,[151,1258,1259],{"class":542},"        return",[151,1261,1262],{"class":610},";\n",[151,1264,1266],{"class":153,"line":1265},55,[151,1267,1194],{"class":610},[151,1269,1271],{"class":153,"line":1270},56,[151,1272,158],{"emptyLinePlaceholder":157},[151,1274,1276,1279,1282],{"class":153,"line":1275},57,[151,1277,1278],{"class":236},"      async_receive_message",[151,1280,1281],{"class":610},"();",[151,1283,1284],{"class":164},"   //进入异步接收\n",[151,1286,1288],{"class":153,"line":1287},58,[151,1289,1290],{"class":610},"    }\n",[151,1292,1294],{"class":153,"line":1293},59,[151,1295,158],{"emptyLinePlaceholder":157},[151,1297,1299],{"class":153,"line":1298},60,[151,1300,1301],{"class":542},"  private:\n",[151,1303,1305,1308,1310,1313,1315,1317,1319,1321,1323,1326],{"class":153,"line":1304},61,[151,1306,1307],{"class":236},"    rclcpp",[151,1309,619],{"class":610},[151,1311,1312],{"class":236},"Publisher",[151,1314,708],{"class":610},[151,1316,711],{"class":236},[151,1318,619],{"class":610},[151,1320,716],{"class":236},[151,1322,619],{"class":610},[151,1324,1325],{"class":236},"Imu",[151,1327,1328],{"class":610},">::SharedPtr imu_pub_;\n",[151,1330,1332],{"class":153,"line":1331},62,[151,1333,158],{"emptyLinePlaceholder":157},[151,1335,1337,1340,1343,1345,1347,1349,1351,1354,1356],{"class":153,"line":1336},63,[151,1338,1339],{"class":236},"    std",[151,1341,1342],{"class":610},"::shared_ptr",[151,1344,708],{"class":542},[151,1346,995],{"class":236},[151,1348,619],{"class":610},[151,1350,892],{"class":236},[151,1352,1353],{"class":610},"::SerialDriver",[151,1355,722],{"class":542},[151,1357,1358],{"class":610}," serial_driver_;\n",[151,1360,1362,1364,1366,1368,1370,1372,1374,1377,1379],{"class":153,"line":1361},64,[151,1363,1339],{"class":236},[151,1365,1342],{"class":610},[151,1367,708],{"class":542},[151,1369,995],{"class":236},[151,1371,619],{"class":610},[151,1373,1000],{"class":236},[151,1375,1376],{"class":610},"::IoContext",[151,1378,722],{"class":542},[151,1380,1381],{"class":610}," io_context_;\n",[151,1383,1385],{"class":153,"line":1384},65,[151,1386,158],{"emptyLinePlaceholder":157},[151,1388,1390,1393,1396,1399],{"class":153,"line":1389},66,[151,1391,1392],{"class":542},"    void",[151,1394,1395],{"class":236}," async_receive_message",[151,1397,1398],{"class":610},"()",[151,1400,1401],{"class":164},"  //创建一个函数更方便重新调用\n",[151,1403,1405],{"class":153,"line":1404},67,[151,1406,657],{"class":610},[151,1408,1410,1413,1416,1418,1421,1423],{"class":153,"line":1409},68,[151,1411,1412],{"class":542},"      auto",[151,1414,1415],{"class":610}," port ",[151,1417,699],{"class":542},[151,1419,1420],{"class":610}," serial_driver_->",[151,1422,1074],{"class":236},[151,1424,839],{"class":610},[151,1426,1428],{"class":153,"line":1427},69,[151,1429,158],{"emptyLinePlaceholder":157},[151,1431,1433],{"class":153,"line":1432},70,[151,1434,1435],{"class":164},"      // 设置接收回调函数\n",[151,1437,1439,1442,1445,1448,1450,1453,1455,1457,1459,1462,1464,1467,1470,1472,1476,1478,1480,1483,1486,1489],{"class":153,"line":1438},71,[151,1440,1441],{"class":610},"      port->",[151,1443,1444],{"class":236},"async_receive",[151,1446,1447],{"class":610},"([",[151,1449,667],{"class":315},[151,1451,1452],{"class":610},"](",[151,1454,1206],{"class":542},[151,1456,814],{"class":236},[151,1458,619],{"class":610},[151,1460,1461],{"class":236},"vector",[151,1463,708],{"class":610},[151,1465,1466],{"class":542},"uint8_t",[151,1468,1469],{"class":610},"> ",[151,1471,1214],{"class":542},[151,1473,1475],{"class":1474},"s4XuR","data",[151,1477,730],{"class":610},[151,1479,1206],{"class":542},[151,1481,1482],{"class":542}," size_t",[151,1484,1485],{"class":542}," &",[151,1487,1488],{"class":1474},"size",[151,1490,1491],{"class":610},") \n",[151,1493,1495],{"class":153,"line":1494},72,[151,1496,975],{"class":610},[151,1498,1500,1503,1506,1508,1511],{"class":153,"line":1499},73,[151,1501,1502],{"class":542},"          if",[151,1504,1505],{"class":610}," (size ",[151,1507,722],{"class":542},[151,1509,1510],{"class":315}," 0",[151,1512,652],{"class":610},[151,1514,1516],{"class":153,"line":1515},74,[151,1517,1518],{"class":610},"          {\n",[151,1520,1522,1525,1527,1529,1531,1533,1535,1537,1540,1542],{"class":153,"line":1521},75,[151,1523,1524],{"class":236},"            RCLCPP_DEBUG",[151,1526,646],{"class":610},[151,1528,667],{"class":315},[151,1530,670],{"class":610},[151,1532,673],{"class":236},[151,1534,676],{"class":610},[151,1536,1133],{"class":240},[151,1538,1539],{"class":315},"\\n",[151,1541,1133],{"class":240},[151,1543,682],{"class":610},[151,1545,1547,1549,1551,1553,1555,1557,1559,1562],{"class":153,"line":1546},76,[151,1548,1524],{"class":236},[151,1550,646],{"class":610},[151,1552,667],{"class":315},[151,1554,670],{"class":610},[151,1556,673],{"class":236},[151,1558,676],{"class":610},[151,1560,1561],{"class":240},"\"以下是接收到的IMU惯性计数据:\"",[151,1563,682],{"class":610},[151,1565,1567],{"class":153,"line":1566},77,[151,1568,1569],{"class":164},"            //创建imu消息类型\n",[151,1571,1573,1576,1579,1581,1583,1585,1587,1589,1591],{"class":153,"line":1572},78,[151,1574,1575],{"class":542},"            auto",[151,1577,1578],{"class":610}," imu_msg ",[151,1580,699],{"class":542},[151,1582,499],{"class":236},[151,1584,619],{"class":610},[151,1586,716],{"class":236},[151,1588,619],{"class":610},[151,1590,1325],{"class":236},[151,1592,839],{"class":610},[151,1594,1596,1599,1602,1604,1607,1610],{"class":153,"line":1595},79,[151,1597,1598],{"class":542},"            bool",[151,1600,1601],{"class":610}," valid_frame ",[151,1603,699],{"class":542},[151,1605,1606],{"class":315}," false",[151,1608,1609],{"class":610},";",[151,1611,1612],{"class":164},"  // 添加有效帧标志\n",[151,1614,1616,1618,1621,1623,1625,1627],{"class":153,"line":1615},80,[151,1617,1598],{"class":542},[151,1619,1620],{"class":610}," valid_data ",[151,1622,699],{"class":542},[151,1624,1606],{"class":315},[151,1626,1609],{"class":610},[151,1628,1612],{"class":164},[151,1630,1632],{"class":153,"line":1631},81,[151,1633,158],{"emptyLinePlaceholder":157},[151,1635,1637,1640,1642,1645,1648,1650,1652,1655,1657,1659,1661,1664,1667],{"class":153,"line":1636},82,[151,1638,1639],{"class":542},"            for",[151,1641,646],{"class":610},[151,1643,1644],{"class":542},"int16_t",[151,1646,1647],{"class":610}," i ",[151,1649,699],{"class":542},[151,1651,1510],{"class":315},[151,1653,1654],{"class":610},";i ",[151,1656,708],{"class":542},[151,1658,1203],{"class":610},[151,1660,1644],{"class":542},[151,1662,1663],{"class":610},")size;",[151,1665,1666],{"class":542},"++",[151,1668,1669],{"class":610},"i)\n",[151,1671,1673],{"class":153,"line":1672},83,[151,1674,1675],{"class":610},"            {\n",[151,1677,1679,1682,1685,1687],{"class":153,"line":1678},84,[151,1680,1681],{"class":542},"              uint8_t",[151,1683,1684],{"class":610}," data_buffer ",[151,1686,699],{"class":542},[151,1688,1689],{"class":610}," data[i];\n",[151,1691,1693],{"class":153,"line":1692},85,[151,1694,1695],{"class":164},"              // RCLCPP_INFO(this->get_logger(),\"接收到的字节：%x\",data_buffer);\n",[151,1697,1699],{"class":153,"line":1698},86,[151,1700,1701],{"class":164},"              // 处理接收到的数据\n",[151,1703,1705,1708,1711,1714,1716,1718,1721,1724,1727],{"class":153,"line":1704},87,[151,1706,1707],{"class":542},"              if",[151,1709,1710],{"class":610},"(wit_imu_.rx.",[151,1712,1713],{"class":236},"Data_Analysis",[151,1715,646],{"class":610},[151,1717,1214],{"class":542},[151,1719,1720],{"class":610},"data_buffer) ",[151,1722,1723],{"class":542},"==",[151,1725,1726],{"class":315}," true",[151,1728,652],{"class":610},[151,1730,1732],{"class":153,"line":1731},88,[151,1733,1734],{"class":610},"              {\n",[151,1736,1738,1741,1743,1745,1747],{"class":153,"line":1737},89,[151,1739,1740],{"class":610},"                valid_frame ",[151,1742,699],{"class":542},[151,1744,1726],{"class":315},[151,1746,1609],{"class":610},[151,1748,1749],{"class":164},"  // 标记有有效帧需要处理\n",[151,1751,1753],{"class":153,"line":1752},90,[151,1754,1755],{"class":610},"              }\n",[151,1757,1759],{"class":153,"line":1758},91,[151,1760,158],{"emptyLinePlaceholder":157},[151,1762,1764,1766,1769,1771,1773],{"class":153,"line":1763},92,[151,1765,1707],{"class":542},[151,1767,1768],{"class":610},"(valid_frame ",[151,1770,1723],{"class":542},[151,1772,1726],{"class":315},[151,1774,652],{"class":610},[151,1776,1778],{"class":153,"line":1777},93,[151,1779,1734],{"class":610},[151,1781,1783,1786,1789,1791,1794,1797],{"class":153,"line":1782},94,[151,1784,1785],{"class":542},"                if",[151,1787,1788],{"class":610},"(wit_imu_.rx.data.cmd ",[151,1790,1723],{"class":542},[151,1792,1793],{"class":542}," 0x",[151,1795,1796],{"class":315},"51",[151,1798,652],{"class":610},[151,1800,1802],{"class":153,"line":1801},95,[151,1803,1804],{"class":610},"                {\n",[151,1806,1808],{"class":153,"line":1807},96,[151,1809,1810],{"class":164},"                  // 存储加速度计数据\n",[151,1812,1814,1817,1819,1822,1825],{"class":153,"line":1813},97,[151,1815,1816],{"class":610},"                  wit_imu_.rx.data.imu.Accel.X ",[151,1818,699],{"class":542},[151,1820,1821],{"class":610}," wit_imu_.rx.data.int16_buffer[",[151,1823,1824],{"class":315},"0",[151,1826,1827],{"class":610},"];\n",[151,1829,1831,1834,1836,1838,1840],{"class":153,"line":1830},98,[151,1832,1833],{"class":610},"                  wit_imu_.rx.data.imu.Accel.Y ",[151,1835,699],{"class":542},[151,1837,1821],{"class":610},[151,1839,1011],{"class":315},[151,1841,1827],{"class":610},[151,1843,1845,1848,1850,1852,1855],{"class":153,"line":1844},99,[151,1846,1847],{"class":610},"                  wit_imu_.rx.data.imu.Accel.Z ",[151,1849,699],{"class":542},[151,1851,1821],{"class":610},[151,1853,1854],{"class":315},"2",[151,1856,1827],{"class":610},[151,1858,1860,1863,1865,1867,1870],{"class":153,"line":1859},100,[151,1861,1862],{"class":610},"                  wit_imu_.rx.data.imu.Temp    ",[151,1864,699],{"class":542},[151,1866,1821],{"class":610},[151,1868,1869],{"class":315},"3",[151,1871,1827],{"class":610},[151,1873,1875],{"class":153,"line":1874},101,[151,1876,158],{"emptyLinePlaceholder":157},[151,1878,1880],{"class":153,"line":1879},102,[151,1881,1882],{"class":164},"                  //加速度单位m/s2，温度单位℃摄氏度\n",[151,1884,1886,1888,1890,1893,1896,1899,1902,1905,1908,1910,1912,1915,1917],{"class":153,"line":1885},103,[151,1887,1816],{"class":610},[151,1889,699],{"class":542},[151,1891,1892],{"class":610}," wit_imu_.rx.data.imu.Accel.X ",[151,1894,1895],{"class":542},"/",[151,1897,1898],{"class":315}," 32768.0",[151,1900,1901],{"class":542},"f",[151,1903,1904],{"class":542}," *",[151,1906,1907],{"class":315}," 16.0",[151,1909,1901],{"class":542},[151,1911,1904],{"class":542},[151,1913,1914],{"class":315}," 9.8",[151,1916,1901],{"class":542},[151,1918,1262],{"class":610},[151,1920,1922,1924,1926,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947],{"class":153,"line":1921},104,[151,1923,1833],{"class":610},[151,1925,699],{"class":542},[151,1927,1928],{"class":610}," wit_imu_.rx.data.imu.Accel.Y ",[151,1930,1895],{"class":542},[151,1932,1898],{"class":315},[151,1934,1901],{"class":542},[151,1936,1904],{"class":542},[151,1938,1907],{"class":315},[151,1940,1901],{"class":542},[151,1942,1904],{"class":542},[151,1944,1914],{"class":315},[151,1946,1901],{"class":542},[151,1948,1262],{"class":610},[151,1950,1952,1954,1956,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977],{"class":153,"line":1951},105,[151,1953,1847],{"class":610},[151,1955,699],{"class":542},[151,1957,1958],{"class":610}," wit_imu_.rx.data.imu.Accel.Z ",[151,1960,1895],{"class":542},[151,1962,1898],{"class":315},[151,1964,1901],{"class":542},[151,1966,1904],{"class":542},[151,1968,1907],{"class":315},[151,1970,1901],{"class":542},[151,1972,1904],{"class":542},[151,1974,1914],{"class":315},[151,1976,1901],{"class":542},[151,1978,1262],{"class":610},[151,1980,1982,1984,1986,1989,1991,1994,1996],{"class":153,"line":1981},106,[151,1983,1862],{"class":610},[151,1985,699],{"class":542},[151,1987,1988],{"class":610},"  wit_imu_.rx.data.imu.Temp ",[151,1990,1895],{"class":542},[151,1992,1993],{"class":315}," 100.0",[151,1995,1901],{"class":542},[151,1997,1262],{"class":610},[151,1999,2001],{"class":153,"line":2000},107,[151,2002,158],{"emptyLinePlaceholder":157},[151,2004,2006],{"class":153,"line":2005},108,[151,2007,2008],{"class":164},"                  // 打印加速度计数据\n",[151,2010,2012,2015,2017,2019,2021,2023,2025,2028,2031,2033,2035,2037,2039,2041],{"class":153,"line":2011},109,[151,2013,2014],{"class":236},"                  RCLCPP_DEBUG",[151,2016,646],{"class":610},[151,2018,667],{"class":315},[151,2020,670],{"class":610},[151,2022,673],{"class":236},[151,2024,1104],{"class":610},[151,2026,2027],{"class":240},"\"加速度(XYZ): ",[151,2029,2030],{"class":315},"%.6f",[151,2032,767],{"class":240},[151,2034,2030],{"class":315},[151,2036,767],{"class":240},[151,2038,2030],{"class":315},[151,2040,1133],{"class":240},[151,2042,2043],{"class":610},",\n",[151,2045,2047],{"class":153,"line":2046},110,[151,2048,2049],{"class":610},"                              wit_imu_.rx.data.imu.Accel.X, wit_imu_.rx.data.imu.Accel.Y, wit_imu_.rx.data.imu.Accel.Z);\n",[151,2051,2053],{"class":153,"line":2052},111,[151,2054,2055],{"class":164},"                  //减少时间戳带来的延迟\n",[151,2057,2059,2062,2064,2066,2068,2071,2073,2076],{"class":153,"line":2058},112,[151,2060,2061],{"class":610},"                  imu_msg.header.stamp ",[151,2063,699],{"class":542},[151,2065,702],{"class":315},[151,2067,670],{"class":610},[151,2069,2070],{"class":236},"get_clock",[151,2072,1077],{"class":610},[151,2074,2075],{"class":236},"now",[151,2077,839],{"class":610},[151,2079,2081],{"class":153,"line":2080},113,[151,2082,2083],{"class":610},"                }\n",[151,2085,2087],{"class":153,"line":2086},114,[151,2088,158],{"emptyLinePlaceholder":157},[151,2090,2092,2095,2098,2100,2102,2104,2107],{"class":153,"line":2091},115,[151,2093,2094],{"class":542},"                else",[151,2096,2097],{"class":542}," if",[151,2099,1788],{"class":610},[151,2101,1723],{"class":542},[151,2103,1793],{"class":542},[151,2105,2106],{"class":315},"52",[151,2108,652],{"class":610},[151,2110,2112],{"class":153,"line":2111},116,[151,2113,1804],{"class":610},[151,2115,2117],{"class":153,"line":2116},117,[151,2118,2119],{"class":164},"                  // 存储陀螺仪数据\n",[151,2121,2123,2126,2128,2130,2132],{"class":153,"line":2122},118,[151,2124,2125],{"class":610},"                  wit_imu_.rx.data.imu.Gyro.X ",[151,2127,699],{"class":542},[151,2129,1821],{"class":610},[151,2131,1824],{"class":315},[151,2133,1827],{"class":610},[151,2135,2137,2140,2142,2144,2146],{"class":153,"line":2136},119,[151,2138,2139],{"class":610},"                  wit_imu_.rx.data.imu.Gyro.Y ",[151,2141,699],{"class":542},[151,2143,1821],{"class":610},[151,2145,1011],{"class":315},[151,2147,1827],{"class":610},[151,2149,2151,2154,2156,2158,2160],{"class":153,"line":2150},120,[151,2152,2153],{"class":610},"                  wit_imu_.rx.data.imu.Gyro.Z ",[151,2155,699],{"class":542},[151,2157,1821],{"class":610},[151,2159,1854],{"class":315},[151,2161,1827],{"class":610},[151,2163,2165],{"class":153,"line":2164},121,[151,2166,158],{"emptyLinePlaceholder":157},[151,2168,2170],{"class":153,"line":2169},122,[151,2171,2172],{"class":164},"                  //角速度单位rad/s\n",[151,2174,2176,2178,2180,2183,2185,2187,2189,2191,2194,2196,2198,2201,2203,2206,2208],{"class":153,"line":2175},123,[151,2177,2125],{"class":610},[151,2179,699],{"class":542},[151,2181,2182],{"class":610}," wit_imu_.rx.data.imu.Gyro.X ",[151,2184,1895],{"class":542},[151,2186,1898],{"class":315},[151,2188,1901],{"class":542},[151,2190,1904],{"class":542},[151,2192,2193],{"class":315}," 2000.0",[151,2195,1901],{"class":542},[151,2197,1904],{"class":542},[151,2199,2200],{"class":610}," (M_PI ",[151,2202,1895],{"class":542},[151,2204,2205],{"class":315}," 180.0",[151,2207,1901],{"class":542},[151,2209,682],{"class":610},[151,2211,2213,2215,2217,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242],{"class":153,"line":2212},124,[151,2214,2139],{"class":610},[151,2216,699],{"class":542},[151,2218,2219],{"class":610}," wit_imu_.rx.data.imu.Gyro.Y ",[151,2221,1895],{"class":542},[151,2223,1898],{"class":315},[151,2225,1901],{"class":542},[151,2227,1904],{"class":542},[151,2229,2193],{"class":315},[151,2231,1901],{"class":542},[151,2233,1904],{"class":542},[151,2235,2200],{"class":610},[151,2237,1895],{"class":542},[151,2239,2205],{"class":315},[151,2241,1901],{"class":542},[151,2243,682],{"class":610},[151,2245,2247,2249,2251,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276],{"class":153,"line":2246},125,[151,2248,2153],{"class":610},[151,2250,699],{"class":542},[151,2252,2253],{"class":610}," wit_imu_.rx.data.imu.Gyro.Z ",[151,2255,1895],{"class":542},[151,2257,1898],{"class":315},[151,2259,1901],{"class":542},[151,2261,1904],{"class":542},[151,2263,2193],{"class":315},[151,2265,1901],{"class":542},[151,2267,1904],{"class":542},[151,2269,2200],{"class":610},[151,2271,1895],{"class":542},[151,2273,2205],{"class":315},[151,2275,1901],{"class":542},[151,2277,682],{"class":610},[151,2279,2281],{"class":153,"line":2280},126,[151,2282,158],{"emptyLinePlaceholder":157},[151,2284,2286],{"class":153,"line":2285},127,[151,2287,2288],{"class":164},"                  // 打印陀螺仪数据\n",[151,2290,2292,2294,2296,2298,2300,2302,2304,2307,2309,2311,2313,2315,2317,2319],{"class":153,"line":2291},128,[151,2293,2014],{"class":236},[151,2295,646],{"class":610},[151,2297,667],{"class":315},[151,2299,670],{"class":610},[151,2301,673],{"class":236},[151,2303,1104],{"class":610},[151,2305,2306],{"class":240},"\"角速度(XYZ): ",[151,2308,2030],{"class":315},[151,2310,767],{"class":240},[151,2312,2030],{"class":315},[151,2314,767],{"class":240},[151,2316,2030],{"class":315},[151,2318,1133],{"class":240},[151,2320,2043],{"class":610},[151,2322,2324],{"class":153,"line":2323},129,[151,2325,2326],{"class":610},"                              wit_imu_.rx.data.imu.Gyro.X, wit_imu_.rx.data.imu.Gyro.Y, wit_imu_.rx.data.imu.Gyro.Z);\n",[151,2328,2330],{"class":153,"line":2329},130,[151,2331,2083],{"class":610},[151,2333,2335],{"class":153,"line":2334},131,[151,2336,158],{"emptyLinePlaceholder":157},[151,2338,2340,2342,2344,2346,2348,2350,2353],{"class":153,"line":2339},132,[151,2341,2094],{"class":542},[151,2343,2097],{"class":542},[151,2345,1788],{"class":610},[151,2347,1723],{"class":542},[151,2349,1793],{"class":542},[151,2351,2352],{"class":315},"54",[151,2354,652],{"class":610},[151,2356,2358],{"class":153,"line":2357},133,[151,2359,1804],{"class":610},[151,2361,2363],{"class":153,"line":2362},134,[151,2364,2365],{"class":164},"                  // 存储磁力计数据(单位lsb)\n",[151,2367,2369,2372,2374,2376,2378],{"class":153,"line":2368},135,[151,2370,2371],{"class":610},"                  wit_imu_.rx.data.imu.Magnet.X ",[151,2373,699],{"class":542},[151,2375,1821],{"class":610},[151,2377,1824],{"class":315},[151,2379,1827],{"class":610},[151,2381,2383,2386,2388,2390,2392],{"class":153,"line":2382},136,[151,2384,2385],{"class":610},"                  wit_imu_.rx.data.imu.Magnet.Y ",[151,2387,699],{"class":542},[151,2389,1821],{"class":610},[151,2391,1011],{"class":315},[151,2393,1827],{"class":610},[151,2395,2397,2400,2402,2404,2406],{"class":153,"line":2396},137,[151,2398,2399],{"class":610},"                  wit_imu_.rx.data.imu.Magnet.Z ",[151,2401,699],{"class":542},[151,2403,1821],{"class":610},[151,2405,1854],{"class":315},[151,2407,1827],{"class":610},[151,2409,2411],{"class":153,"line":2410},138,[151,2412,158],{"emptyLinePlaceholder":157},[151,2414,2416],{"class":153,"line":2415},139,[151,2417,2418],{"class":164},"                  //磁场单位uT\n",[151,2420,2422],{"class":153,"line":2421},140,[151,2423,2424],{"class":164},"                  // wit_imu_.rx.data.imu.Magnet.X = wit_imu_.rx.data.imu.Magnet.X / 1.0f;\n",[151,2426,2428],{"class":153,"line":2427},141,[151,2429,2430],{"class":164},"                  // wit_imu_.rx.data.imu.Magnet.Y = wit_imu_.rx.data.imu.Magnet.Y / 1.0f;\n",[151,2432,2434],{"class":153,"line":2433},142,[151,2435,2436],{"class":164},"                  // wit_imu_.rx.data.imu.Magnet.Z = wit_imu_.rx.data.imu.Magnet.Z / 1.0f;\n",[151,2438,2440],{"class":153,"line":2439},143,[151,2441,158],{"emptyLinePlaceholder":157},[151,2443,2445],{"class":153,"line":2444},144,[151,2446,2447],{"class":164},"                  // 打印磁力计数据\n",[151,2449,2451,2453,2455,2457,2459,2461,2463,2466,2468,2470,2472,2474,2476,2478],{"class":153,"line":2450},145,[151,2452,2014],{"class":236},[151,2454,646],{"class":610},[151,2456,667],{"class":315},[151,2458,670],{"class":610},[151,2460,673],{"class":236},[151,2462,1104],{"class":610},[151,2464,2465],{"class":240},"\"磁场(XYZ): ",[151,2467,2030],{"class":315},[151,2469,767],{"class":240},[151,2471,2030],{"class":315},[151,2473,767],{"class":240},[151,2475,2030],{"class":315},[151,2477,1133],{"class":240},[151,2479,2043],{"class":610},[151,2481,2483],{"class":153,"line":2482},146,[151,2484,2485],{"class":610},"                              wit_imu_.rx.data.imu.Magnet.X, wit_imu_.rx.data.imu.Magnet.Y, wit_imu_.rx.data.imu.Magnet.Z);\n",[151,2487,2489],{"class":153,"line":2488},147,[151,2490,2083],{"class":610},[151,2492,2494],{"class":153,"line":2493},148,[151,2495,158],{"emptyLinePlaceholder":157},[151,2497,2499,2501,2503,2505,2507,2509,2512],{"class":153,"line":2498},149,[151,2500,2094],{"class":542},[151,2502,2097],{"class":542},[151,2504,1788],{"class":610},[151,2506,1723],{"class":542},[151,2508,1793],{"class":542},[151,2510,2511],{"class":315},"53",[151,2513,652],{"class":610},[151,2515,2517],{"class":153,"line":2516},150,[151,2518,1804],{"class":610},[151,2520,2522],{"class":153,"line":2521},151,[151,2523,2524],{"class":164},"                  // 存储欧拉角数据\n",[151,2526,2528,2531,2533,2535,2537],{"class":153,"line":2527},152,[151,2529,2530],{"class":610},"                  wit_imu_.rx.data.imu.Euler.roll ",[151,2532,699],{"class":542},[151,2534,1821],{"class":610},[151,2536,1824],{"class":315},[151,2538,1827],{"class":610},[151,2540,2542,2545,2547,2549,2551],{"class":153,"line":2541},153,[151,2543,2544],{"class":610},"                  wit_imu_.rx.data.imu.Euler.pitch ",[151,2546,699],{"class":542},[151,2548,1821],{"class":610},[151,2550,1011],{"class":315},[151,2552,1827],{"class":610},[151,2554,2556,2559,2561,2563,2565],{"class":153,"line":2555},154,[151,2557,2558],{"class":610},"                  wit_imu_.rx.data.imu.Euler.yaw ",[151,2560,699],{"class":542},[151,2562,1821],{"class":610},[151,2564,1854],{"class":315},[151,2566,1827],{"class":610},[151,2568,2570],{"class":153,"line":2569},155,[151,2571,158],{"emptyLinePlaceholder":157},[151,2573,2575],{"class":153,"line":2574},156,[151,2576,2577],{"class":164},"                  //欧拉角单位dec\n",[151,2579,2581,2583,2585,2588,2590,2592,2594,2596,2598,2600],{"class":153,"line":2580},157,[151,2582,2530],{"class":610},[151,2584,699],{"class":542},[151,2586,2587],{"class":610}," wit_imu_.rx.data.imu.Euler.roll ",[151,2589,1895],{"class":542},[151,2591,1898],{"class":315},[151,2593,1901],{"class":542},[151,2595,1904],{"class":542},[151,2597,2205],{"class":315},[151,2599,1901],{"class":542},[151,2601,1262],{"class":610},[151,2603,2605,2607,2609,2612,2614,2616,2618,2620,2622,2624],{"class":153,"line":2604},158,[151,2606,2544],{"class":610},[151,2608,699],{"class":542},[151,2610,2611],{"class":610}," wit_imu_.rx.data.imu.Euler.pitch ",[151,2613,1895],{"class":542},[151,2615,1898],{"class":315},[151,2617,1901],{"class":542},[151,2619,1904],{"class":542},[151,2621,2205],{"class":315},[151,2623,1901],{"class":542},[151,2625,1262],{"class":610},[151,2627,2629,2631,2633,2636,2638,2640,2642,2644,2646,2648],{"class":153,"line":2628},159,[151,2630,2558],{"class":610},[151,2632,699],{"class":542},[151,2634,2635],{"class":610}," wit_imu_.rx.data.imu.Euler.yaw ",[151,2637,1895],{"class":542},[151,2639,1898],{"class":315},[151,2641,1901],{"class":542},[151,2643,1904],{"class":542},[151,2645,2205],{"class":315},[151,2647,1901],{"class":542},[151,2649,1262],{"class":610},[151,2651,2653],{"class":153,"line":2652},160,[151,2654,158],{"emptyLinePlaceholder":157},[151,2656,2658],{"class":153,"line":2657},161,[151,2659,2660],{"class":164},"                  // 打印欧拉角数据\n",[151,2662,2664,2666,2668,2670,2672,2674,2676,2679,2681,2683,2685,2687,2689,2691],{"class":153,"line":2663},162,[151,2665,2014],{"class":236},[151,2667,646],{"class":610},[151,2669,667],{"class":315},[151,2671,670],{"class":610},[151,2673,673],{"class":236},[151,2675,1104],{"class":610},[151,2677,2678],{"class":240},"\"欧拉角(XYZ_RPY): ",[151,2680,2030],{"class":315},[151,2682,767],{"class":240},[151,2684,2030],{"class":315},[151,2686,767],{"class":240},[151,2688,2030],{"class":315},[151,2690,1133],{"class":240},[151,2692,2043],{"class":610},[151,2694,2696],{"class":153,"line":2695},163,[151,2697,2698],{"class":610},"                              wit_imu_.rx.data.imu.Euler.roll, wit_imu_.rx.data.imu.Euler.pitch, wit_imu_.rx.data.imu.Euler.yaw);\n",[151,2700,2702],{"class":153,"line":2701},164,[151,2703,158],{"emptyLinePlaceholder":157},[151,2705,2707],{"class":153,"line":2706},165,[151,2708,2709],{"class":164},"                  //欧拉角单位rad\n",[151,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729],{"class":153,"line":2712},166,[151,2714,2530],{"class":610},[151,2716,699],{"class":542},[151,2718,2587],{"class":610},[151,2720,1051],{"class":542},[151,2722,2200],{"class":610},[151,2724,1895],{"class":542},[151,2726,2205],{"class":315},[151,2728,1901],{"class":542},[151,2730,682],{"class":610},[151,2732,2734,2736,2738,2741,2743,2745,2747,2749,2751],{"class":153,"line":2733},167,[151,2735,2544],{"class":610},[151,2737,699],{"class":542},[151,2739,2740],{"class":610}," wit_imu_.rx.data.imu.Euler.pitch  ",[151,2742,1051],{"class":542},[151,2744,2200],{"class":610},[151,2746,1895],{"class":542},[151,2748,2205],{"class":315},[151,2750,1901],{"class":542},[151,2752,682],{"class":610},[151,2754,2756,2758,2760,2763,2765,2767,2769,2771,2773],{"class":153,"line":2755},168,[151,2757,2558],{"class":610},[151,2759,699],{"class":542},[151,2761,2762],{"class":610}," wit_imu_.rx.data.imu.Euler.yaw  ",[151,2764,1051],{"class":542},[151,2766,2200],{"class":610},[151,2768,1895],{"class":542},[151,2770,2205],{"class":315},[151,2772,1901],{"class":542},[151,2774,682],{"class":610},[151,2776,2778],{"class":153,"line":2777},169,[151,2779,2083],{"class":610},[151,2781,2783],{"class":153,"line":2782},170,[151,2784,158],{"emptyLinePlaceholder":157},[151,2786,2788,2790,2792,2794,2796,2798,2801],{"class":153,"line":2787},171,[151,2789,2094],{"class":542},[151,2791,2097],{"class":542},[151,2793,1788],{"class":610},[151,2795,1723],{"class":542},[151,2797,1793],{"class":542},[151,2799,2800],{"class":315},"59",[151,2802,652],{"class":610},[151,2804,2806],{"class":153,"line":2805},172,[151,2807,1804],{"class":610},[151,2809,2811,2814,2816,2818,2820,2822,2824,2827,2829,2832,2835,2837],{"class":153,"line":2810},173,[151,2812,2813],{"class":542},"                  for",[151,2815,646],{"class":610},[151,2817,1644],{"class":542},[151,2819,1647],{"class":610},[151,2821,699],{"class":542},[151,2823,1510],{"class":315},[151,2825,2826],{"class":610}," ; i ",[151,2828,708],{"class":542},[151,2830,2831],{"class":315}," 4",[151,2833,2834],{"class":610}," ; i",[151,2836,1666],{"class":542},[151,2838,652],{"class":610},[151,2840,2842],{"class":153,"line":2841},174,[151,2843,2844],{"class":610},"                  {\n",[151,2846,2848],{"class":153,"line":2847},175,[151,2849,2850],{"class":164},"                    // 存储四元数数据\n",[151,2852,2854,2857,2859],{"class":153,"line":2853},176,[151,2855,2856],{"class":610},"                    wit_imu_.rx.data.imu.Quat.q[i] ",[151,2858,699],{"class":542},[151,2860,2861],{"class":610}," wit_imu_.rx.data.int16_buffer[i];\n",[151,2863,2865],{"class":153,"line":2864},177,[151,2866,158],{"emptyLinePlaceholder":157},[151,2868,2870],{"class":153,"line":2869},178,[151,2871,2872],{"class":164},"                    //四元数是归一化的四元数\n",[151,2874,2876,2878,2880,2883,2885,2887,2889],{"class":153,"line":2875},179,[151,2877,2856],{"class":610},[151,2879,699],{"class":542},[151,2881,2882],{"class":610}," wit_imu_.rx.data.imu.Quat.q[i] ",[151,2884,1895],{"class":542},[151,2886,1898],{"class":315},[151,2888,1901],{"class":542},[151,2890,1262],{"class":610},[151,2892,2894],{"class":153,"line":2893},180,[151,2895,2896],{"class":610},"                  }\n",[151,2898,2900],{"class":153,"line":2899},181,[151,2901,158],{"emptyLinePlaceholder":157},[151,2903,2905],{"class":153,"line":2904},182,[151,2906,2907],{"class":164},"                  // 打印四元数数据\n",[151,2909,2911],{"class":153,"line":2910},183,[151,2912,2913],{"class":164},"                  //注意，0对应y，1对应x，-2才对应z。\n",[151,2915,2917,2919,2921,2923,2925,2927,2929,2932,2934,2936,2938,2940,2942,2944,2946,2948],{"class":153,"line":2916},184,[151,2918,2014],{"class":236},[151,2920,646],{"class":610},[151,2922,667],{"class":315},[151,2924,670],{"class":610},[151,2926,673],{"class":236},[151,2928,1104],{"class":610},[151,2930,2931],{"class":240},"\"四元数(xyzw): ",[151,2933,2030],{"class":315},[151,2935,767],{"class":240},[151,2937,2030],{"class":315},[151,2939,767],{"class":240},[151,2941,2030],{"class":315},[151,2943,767],{"class":240},[151,2945,2030],{"class":315},[151,2947,1133],{"class":240},[151,2949,2043],{"class":610},[151,2951,2953,2956,2958,2961,2963,2966,2969,2972,2974,2976,2978],{"class":153,"line":2952},185,[151,2954,2955],{"class":610},"                              wit_imu_.rx.data.imu.Quat.q[",[151,2957,1011],{"class":315},[151,2959,2960],{"class":610},"],wit_imu_.rx.data.imu.Quat.q[",[151,2962,1824],{"class":315},[151,2964,2965],{"class":610},"],",[151,2967,2968],{"class":542},"-",[151,2970,2971],{"class":610},"wit_imu_.rx.data.imu.Quat.q[",[151,2973,1854],{"class":315},[151,2975,2960],{"class":610},[151,2977,1869],{"class":315},[151,2979,2980],{"class":610},"]);\n",[151,2982,2984,2987,2989,2991],{"class":153,"line":2983},186,[151,2985,2986],{"class":610},"                  valid_data ",[151,2988,699],{"class":542},[151,2990,1726],{"class":315},[151,2992,1262],{"class":610},[151,2994,2996],{"class":153,"line":2995},187,[151,2997,2083],{"class":610},[151,2999,3001,3004,3006,3008,3011,3013],{"class":153,"line":3000},188,[151,3002,3003],{"class":610},"                wit_imu_.rx.data.cmd ",[151,3005,699],{"class":542},[151,3007,1793],{"class":542},[151,3009,3010],{"class":315},"00",[151,3012,1609],{"class":610},[151,3014,3015],{"class":164},"   //跑过一次就进行清0\n",[151,3017,3019,3021,3023,3025],{"class":153,"line":3018},189,[151,3020,1740],{"class":610},[151,3022,699],{"class":542},[151,3024,1606],{"class":315},[151,3026,1262],{"class":610},[151,3028,3030],{"class":153,"line":3029},190,[151,3031,1755],{"class":610},[151,3033,3035],{"class":153,"line":3034},191,[151,3036,3037],{"class":610},"            }\n",[151,3039,3041],{"class":153,"line":3040},192,[151,3042,158],{"emptyLinePlaceholder":157},[151,3044,3046,3049,3052,3054,3056],{"class":153,"line":3045},193,[151,3047,3048],{"class":542},"            if",[151,3050,3051],{"class":610},"(valid_data ",[151,3053,1723],{"class":542},[151,3055,1726],{"class":315},[151,3057,652],{"class":610},[151,3059,3061],{"class":153,"line":3060},194,[151,3062,1675],{"class":610},[151,3064,3066],{"class":153,"line":3065},195,[151,3067,3068],{"class":164},"              //时间戳\n",[151,3070,3072],{"class":153,"line":3071},196,[151,3073,3074],{"class":164},"              // imu_msg.header.stamp = this->get_clock()->now();\n",[151,3076,3078],{"class":153,"line":3077},197,[151,3079,3080],{"class":164},"              //位姿信息所参考的坐标系\n",[151,3082,3084,3087,3089,3092],{"class":153,"line":3083},198,[151,3085,3086],{"class":610},"              imu_msg.header.frame_id ",[151,3088,699],{"class":542},[151,3090,3091],{"class":240}," \"imu\"",[151,3093,1262],{"class":610},[151,3095,3097],{"class":153,"line":3096},199,[151,3098,158],{"emptyLinePlaceholder":157},[151,3100,3102],{"class":153,"line":3101},200,[151,3103,3104],{"class":164},"              // tf2::Quaternion q;\n",[151,3106,3108,3111],{"class":153,"line":3107},201,[151,3109,3110],{"class":164},"              //",[151,3112,3113],{"class":164}," //DOF欧拉角单位rad\n",[151,3115,3117],{"class":153,"line":3116},202,[151,3118,3119],{"class":164},"              // q.setRPY(roll_, pitch_, yaw_);\n",[151,3121,3123,3125],{"class":153,"line":3122},203,[151,3124,3110],{"class":164},[151,3126,3127],{"class":164}," //DOF欧拉角（四元数）\n",[151,3129,3131],{"class":153,"line":3130},204,[151,3132,3133],{"class":164},"              // imu_msg.orientation.x = q.x();\n",[151,3135,3137],{"class":153,"line":3136},205,[151,3138,3139],{"class":164},"              // imu_msg.orientation.y = q.y();\n",[151,3141,3143],{"class":153,"line":3142},206,[151,3144,3145],{"class":164},"              // imu_msg.orientation.z = q.z();\n",[151,3147,3149],{"class":153,"line":3148},207,[151,3150,3151],{"class":164},"              // imu_msg.orientation.w = q.w();\n",[151,3153,3155],{"class":153,"line":3154},208,[151,3156,158],{"emptyLinePlaceholder":157},[151,3158,3160],{"class":153,"line":3159},209,[151,3161,3162],{"class":164},"              //DOF欧拉角（四元数）\n",[151,3164,3166],{"class":153,"line":3165},210,[151,3167,3168],{"class":164},"              //注意对应关系\n",[151,3170,3172],{"class":153,"line":3171},211,[151,3173,3174],{"class":164},"              // 传感器坐标系 -> ROS坐标系：\n",[151,3176,3178],{"class":153,"line":3177},212,[151,3179,3180],{"class":164},"              // X -> Y\n",[151,3182,3184],{"class":153,"line":3183},213,[151,3185,3186],{"class":164},"              // Y -> X\n",[151,3188,3190],{"class":153,"line":3189},214,[151,3191,3192],{"class":164},"              // Z -> -Z\n",[151,3194,3196,3199,3201,3204,3206],{"class":153,"line":3195},215,[151,3197,3198],{"class":610},"              imu_msg.orientation.x ",[151,3200,699],{"class":542},[151,3202,3203],{"class":610},"   wit_imu_.rx.data.imu.Quat.q[",[151,3205,1011],{"class":315},[151,3207,1827],{"class":610},[151,3209,3211,3214,3216,3218,3220],{"class":153,"line":3210},216,[151,3212,3213],{"class":610},"              imu_msg.orientation.y ",[151,3215,699],{"class":542},[151,3217,3203],{"class":610},[151,3219,1824],{"class":315},[151,3221,1827],{"class":610},[151,3223,3225,3228,3230,3233,3236,3238],{"class":153,"line":3224},217,[151,3226,3227],{"class":610},"              imu_msg.orientation.z ",[151,3229,699],{"class":542},[151,3231,3232],{"class":542}," -",[151,3234,3235],{"class":610}," wit_imu_.rx.data.imu.Quat.q[",[151,3237,1854],{"class":315},[151,3239,1827],{"class":610},[151,3241,3243,3246,3248,3250,3252],{"class":153,"line":3242},218,[151,3244,3245],{"class":610},"              imu_msg.orientation.w ",[151,3247,699],{"class":542},[151,3249,3203],{"class":610},[151,3251,1869],{"class":315},[151,3253,1827],{"class":610},[151,3255,3257],{"class":153,"line":3256},219,[151,3258,158],{"emptyLinePlaceholder":157},[151,3260,3262],{"class":153,"line":3261},220,[151,3263,3264],{"class":164},"              //加速度\n",[151,3266,3268,3271,3273],{"class":153,"line":3267},221,[151,3269,3270],{"class":610},"              imu_msg.linear_acceleration.x ",[151,3272,699],{"class":542},[151,3274,3275],{"class":610}," wit_imu_.rx.data.imu.Accel.X;\n",[151,3277,3279,3282,3284],{"class":153,"line":3278},222,[151,3280,3281],{"class":610},"              imu_msg.linear_acceleration.y ",[151,3283,699],{"class":542},[151,3285,3286],{"class":610}," wit_imu_.rx.data.imu.Accel.Y;\n",[151,3288,3290,3293,3295],{"class":153,"line":3289},223,[151,3291,3292],{"class":610},"              imu_msg.linear_acceleration.z ",[151,3294,699],{"class":542},[151,3296,3297],{"class":610}," wit_imu_.rx.data.imu.Accel.Z;\n",[151,3299,3301],{"class":153,"line":3300},224,[151,3302,158],{"emptyLinePlaceholder":157},[151,3304,3306],{"class":153,"line":3305},225,[151,3307,3308],{"class":164},"              //角速度\n",[151,3310,3312,3315,3317],{"class":153,"line":3311},226,[151,3313,3314],{"class":610},"              imu_msg.angular_velocity.x ",[151,3316,699],{"class":542},[151,3318,3319],{"class":610}," wit_imu_.rx.data.imu.Gyro.X;\n",[151,3321,3323,3326,3328],{"class":153,"line":3322},227,[151,3324,3325],{"class":610},"              imu_msg.angular_velocity.y ",[151,3327,699],{"class":542},[151,3329,3330],{"class":610}," wit_imu_.rx.data.imu.Gyro.Y;\n",[151,3332,3334,3337,3339],{"class":153,"line":3333},228,[151,3335,3336],{"class":610},"              imu_msg.angular_velocity.z ",[151,3338,699],{"class":542},[151,3340,3341],{"class":610}," wit_imu_.rx.data.imu.Gyro.Z;\n",[151,3343,3345],{"class":153,"line":3344},229,[151,3346,158],{"emptyLinePlaceholder":157},[151,3348,3350,3353,3356],{"class":153,"line":3349},230,[151,3351,3352],{"class":610},"              imu_pub_->",[151,3354,3355],{"class":236},"publish",[151,3357,3358],{"class":610},"(imu_msg);\n",[151,3360,3362,3365,3367,3369],{"class":153,"line":3361},231,[151,3363,3364],{"class":610},"              valid_data ",[151,3366,699],{"class":542},[151,3368,1606],{"class":315},[151,3370,1262],{"class":610},[151,3372,3374],{"class":153,"line":3373},232,[151,3375,3037],{"class":610},[151,3377,3379],{"class":153,"line":3378},233,[151,3380,158],{"emptyLinePlaceholder":157},[151,3382,3384],{"class":153,"line":3383},234,[151,3385,3386],{"class":610},"          }\n",[151,3388,3390],{"class":153,"line":3389},235,[151,3391,3392],{"class":164},"          // 继续监听新的数据\n",[151,3394,3396,3399],{"class":153,"line":3395},236,[151,3397,3398],{"class":236},"          async_receive_message",[151,3400,839],{"class":610},[151,3402,3404],{"class":153,"line":3403},237,[151,3405,1194],{"class":610},[151,3407,3409],{"class":153,"line":3408},238,[151,3410,3411],{"class":610},"      );\n",[151,3413,3415],{"class":153,"line":3414},239,[151,3416,1290],{"class":610},[151,3418,3420],{"class":153,"line":3419},240,[151,3421,3422],{"class":610},"};\n",[151,3424,3426],{"class":153,"line":3425},241,[151,3427,158],{"emptyLinePlaceholder":157},[151,3429,3431,3434,3437,3439,3441,3444,3446,3449,3452,3455],{"class":153,"line":3430},242,[151,3432,3433],{"class":542},"int",[151,3435,3436],{"class":236}," main",[151,3438,646],{"class":610},[151,3440,3433],{"class":542},[151,3442,3443],{"class":1474}," argc",[151,3445,767],{"class":610},[151,3447,3448],{"class":542},"char",[151,3450,3451],{"class":542}," **",[151,3453,3454],{"class":1474}," argv",[151,3456,652],{"class":610},[151,3458,3460],{"class":153,"line":3459},243,[151,3461,627],{"class":610},[151,3463,3465,3468,3470,3473],{"class":153,"line":3464},244,[151,3466,3467],{"class":236},"  rclcpp",[151,3469,619],{"class":610},[151,3471,3472],{"class":236},"init",[151,3474,3475],{"class":610},"(argc,argv);\n",[151,3477,3479],{"class":153,"line":3478},245,[151,3480,158],{"emptyLinePlaceholder":157},[151,3482,3484,3487,3490,3492,3494,3496,3498,3500,3503],{"class":153,"line":3483},246,[151,3485,3486],{"class":542},"  auto",[151,3488,3489],{"class":610}," node ",[151,3491,699],{"class":542},[151,3493,814],{"class":236},[151,3495,619],{"class":610},[151,3497,990],{"class":236},[151,3499,708],{"class":610},[151,3501,3502],{"class":236},"ImuNode",[151,3504,3505],{"class":610},">();\n",[151,3507,3509],{"class":153,"line":3508},247,[151,3510,158],{"emptyLinePlaceholder":157},[151,3512,3514,3516,3518,3521],{"class":153,"line":3513},248,[151,3515,3467],{"class":236},[151,3517,619],{"class":610},[151,3519,3520],{"class":236},"spin",[151,3522,3523],{"class":610},"(node);\n",[151,3525,3527],{"class":153,"line":3526},249,[151,3528,158],{"emptyLinePlaceholder":157},[151,3530,3532,3534,3536,3539],{"class":153,"line":3531},250,[151,3533,3467],{"class":236},[151,3535,619],{"class":610},[151,3537,3538],{"class":236},"shutdown",[151,3540,839],{"class":610},[151,3542,3544,3547,3549],{"class":153,"line":3543},251,[151,3545,3546],{"class":542},"  return",[151,3548,1510],{"class":315},[151,3550,1262],{"class":610},[151,3552,3554],{"class":153,"line":3553},252,[151,3555,3556],{"class":610},"}\n",[14,3558,3559],{},[3560,3561],"img",{"alt":147,"src":3562},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1800.webp",[14,3564,3565],{},[3560,3566],{"alt":147,"src":3567},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1801.webp",[14,3569,3570],{},"这种框架对于一个250Hz（每4ms输出一次）的陀螺仪来说,最后/imu的发布频率是100Hz（每10ms发布一次）,效率也是还可以接受的.",[14,3572,3573],{},[3560,3574],{"alt":147,"src":3575},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1802.webp",[3577,3578,3579],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":147,"searchDepth":161,"depth":161,"links":3581},[3582,3583,3584,3585],{"id":12,"depth":168,"text":12},{"id":128,"depth":168,"text":128},{"id":462,"depth":168,"text":462},{"id":530,"depth":168,"text":530},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","14.6.2",14060200,"2023-12-30","wiki/2023-12-30-ros2-tutorial","zh-cn:2023-12-30-ros2-tutorial","/zh-cn/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU",false,null,"/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","zh-CN","zh-cn",{},{"title":5,"description":147},"a1YK6IN7C7KyP1D4rrpxpRHgQl3cTmEhMsgdG1kXYPo",[3605,3610,3615,3621,3627,3633,3639,3645,3651,3657,3663,3669,3675,3681,3687,3693,3699,3705,3710,3716,3721,3727,3733,3739,3745,3751,3757,3763,3769,3775,3781,3782,3788,3794,3800,3806,3812,3818,3824,3830,3836,3842,3848,3854,3860,3866,3872,3878,3884,3890,3896,3901,3907,3912,3918,3924,3930,3936,3942,3948],{"path":3606,"stem":3607,"title":3608,"date":3589,"chapter":1011,"chapterSort":3609,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍",1000000,{"path":3611,"stem":3612,"title":3613,"date":3589,"chapter":733,"chapterSort":3614,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":3616,"stem":3617,"title":3618,"date":3589,"chapter":3619,"chapterSort":3620,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":3622,"stem":3623,"title":3624,"date":3589,"chapter":3625,"chapterSort":3626,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":3628,"stem":3629,"title":3630,"date":3589,"chapter":3631,"chapterSort":3632,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":3634,"stem":3635,"title":3636,"date":3589,"chapter":3637,"chapterSort":3638,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":3640,"stem":3641,"title":3642,"date":3589,"chapter":3643,"chapterSort":3644,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":3646,"stem":3647,"title":3648,"date":3589,"chapter":3649,"chapterSort":3650,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble导航仿真","12.1",12010000,{"path":3652,"stem":3653,"title":3654,"date":3589,"chapter":3655,"chapterSort":3656,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy导航仿真","12.2",12020000,{"path":3658,"stem":3659,"title":3660,"date":3589,"chapter":3661,"chapterSort":3662,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Humble与Jazzy导航的差异","12.3",12030000,{"path":3664,"stem":3665,"title":3666,"date":3589,"chapter":3667,"chapterSort":3668,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":3670,"stem":3671,"title":3672,"date":3589,"chapter":3673,"chapterSort":3674,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":3676,"stem":3677,"title":3678,"date":3589,"chapter":3679,"chapterSort":3680,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver库","13.1.2",13010200,{"path":3682,"stem":3683,"title":3684,"date":3589,"chapter":3685,"chapterSort":3686,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART串口通信","13.1",13010000,{"path":3688,"stem":3689,"title":3690,"date":3589,"chapter":3691,"chapterSort":3692,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":3694,"stem":3695,"title":3696,"date":3589,"chapter":3697,"chapterSort":3698,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":3700,"stem":3701,"title":3702,"date":3589,"chapter":3703,"chapterSort":3704,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN通信","13.2",13020000,{"path":3706,"stem":3707,"title":3672,"date":3589,"chapter":3708,"chapterSort":3709,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":3711,"stem":3712,"title":3713,"date":3589,"chapter":3714,"chapterSort":3715,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP通信","13.3",13030000,{"path":3717,"stem":3718,"title":3672,"date":3589,"chapter":3719,"chapterSort":3720,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":3722,"stem":3723,"title":3724,"date":3589,"chapter":3725,"chapterSort":3726,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP通信","13.4",13040000,{"path":3728,"stem":3729,"title":3730,"date":3589,"chapter":3731,"chapterSort":3732,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux硬件通信","13",13000000,{"path":3734,"stem":3735,"title":3736,"date":3589,"chapter":3737,"chapterSort":3738,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","机器人组成","14.1",14010000,{"path":3740,"stem":3741,"title":3742,"date":3589,"chapter":3743,"chapterSort":3744,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","远程开发SSH","14.2.1",14020100,{"path":3746,"stem":3747,"title":3748,"date":3589,"chapter":3749,"chapterSort":3750,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","远程访问桌面","14.2.2",14020200,{"path":3752,"stem":3753,"title":3754,"date":3589,"chapter":3755,"chapterSort":3756,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","工控机之远程开发环境","14.2",14020000,{"path":3758,"stem":3759,"title":3760,"date":3589,"chapter":3761,"chapterSort":3762,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","工控机之外接USB设备","14.3",14030000,{"path":3764,"stem":3765,"title":3766,"date":3589,"chapter":3767,"chapterSort":3768,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","分布式搭建","14.4",14040000,{"path":3770,"stem":3771,"title":3772,"date":3589,"chapter":3773,"chapterSort":3774,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","优化日志","14.5",14050000,{"path":3776,"stem":3777,"title":3778,"date":3589,"chapter":3779,"chapterSort":3780,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","里程计Odom","14.6.1",14060100,{"path":3586,"stem":3595,"title":5,"date":3589,"chapter":3587,"chapterSort":3588,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},{"path":3783,"stem":3784,"title":3785,"date":3589,"chapter":3786,"chapterSort":3787,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","激光雷达LiDAR","14.6.3",14060300,{"path":3789,"stem":3790,"title":3791,"date":3589,"chapter":3792,"chapterSort":3793,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","相机Camera","14.6.4",14060400,{"path":3795,"stem":3796,"title":3797,"date":3589,"chapter":3798,"chapterSort":3799,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","全球定位GNSS","14.6.5",14060500,{"path":3801,"stem":3802,"title":3803,"date":3589,"chapter":3804,"chapterSort":3805,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","手柄JOY","14.6.6",14060600,{"path":3807,"stem":3808,"title":3809,"date":3589,"chapter":3810,"chapterSort":3811,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","键盘控制节点","14.6.7",14060700,{"path":3813,"stem":3814,"title":3815,"date":3589,"chapter":3816,"chapterSort":3817,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","硬件平台","14.6",14060000,{"path":3819,"stem":3820,"title":3821,"date":3589,"chapter":3822,"chapterSort":3823,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","坐标系与话题关系","14.7",14070000,{"path":3825,"stem":3826,"title":3827,"date":3589,"chapter":3828,"chapterSort":3829,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","轮式里程计标定","14.8.1.1",14080101,{"path":3831,"stem":3832,"title":3833,"date":3589,"chapter":3834,"chapterSort":3835,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","轮式里程计与IMU融合","14.8.1.2",14080102,{"path":3837,"stem":3838,"title":3839,"date":3589,"chapter":3840,"chapterSort":3841,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","轮式里程计标定与融合","14.8.1",14080100,{"path":3843,"stem":3844,"title":3845,"date":3589,"chapter":3846,"chapterSort":3847,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","激光雷达工具","14.8.2",14080200,{"path":3849,"stem":3850,"title":3851,"date":3589,"chapter":3852,"chapterSort":3853,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","相机使用进阶","14.8.3",14080300,{"path":3855,"stem":3856,"title":3857,"date":3589,"chapter":3858,"chapterSort":3859,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","硬件平台进阶","14.8",14080000,{"path":3861,"stem":3862,"title":3863,"date":3589,"chapter":3864,"chapterSort":3865,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":3867,"stem":3868,"title":3869,"date":3589,"chapter":3870,"chapterSort":3871,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":3873,"stem":3874,"title":3875,"date":3589,"chapter":3876,"chapterSort":3877,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":3879,"stem":3880,"title":3881,"date":3589,"chapter":3882,"chapterSort":3883,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":3885,"stem":3886,"title":3887,"date":3589,"chapter":3888,"chapterSort":3889,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":3891,"stem":3892,"title":3893,"date":3589,"chapter":3894,"chapterSort":3895,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":3897,"stem":3898,"title":3899,"date":3589,"chapter":1854,"chapterSort":3900,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作",2000000,{"path":3902,"stem":3903,"title":3904,"date":3589,"chapter":3905,"chapterSort":3906,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":3908,"stem":3909,"title":3910,"date":3589,"chapter":1869,"chapterSort":3911,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包",3000000,{"path":3913,"stem":3914,"title":3915,"date":3589,"chapter":3916,"chapterSort":3917,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":3919,"stem":3920,"title":3921,"date":3589,"chapter":3922,"chapterSort":3923,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":3925,"stem":3926,"title":3927,"date":3589,"chapter":3928,"chapterSort":3929,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":3931,"stem":3932,"title":3933,"date":3589,"chapter":3934,"chapterSort":3935,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":3937,"stem":3938,"title":3939,"date":3589,"chapter":3940,"chapterSort":3941,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":3943,"stem":3944,"title":3945,"date":3589,"chapter":3946,"chapterSort":3947,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":3596},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":3592,"stem":3949,"title":3950,"date":3589,"chapter":3597,"chapterSort":3951,"docKey":3591,"docRoot":3592,"docTitle":3593,"isWikiDoc":157,"isWikiIndex":157},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,{"variants":3953},[3954,3957,3960,3963,3966],{"path":3955,"localeSlug":3956,"i18nKey":3595},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","en-us",{"path":3958,"localeSlug":3959,"i18nKey":3595},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","zh-hant",{"path":3961,"localeSlug":3962,"i18nKey":3595},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","zh-hk",{"path":3964,"localeSlug":3965,"i18nKey":3595},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","zh-tw",{"path":3586,"localeSlug":3600,"i18nKey":3595},[3955,3598,3958,3598,3961,3598,3964,3598,3586,3598],1780663050820]