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