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