最新要闻
- Win7经典“顽疾”:微软确认Win11硬盘可能被错误识别|全球今热点
- “挖呀挖”黄老师开始转型:参与文旅宣传!曾否认辞职带货
- 焦点热文:小李子新片《花月杀手》M站91分 多家媒体给出满分
- 格致男排,夺冠! 每日速递
- 《利益区间》冲击金棕榈大奖
- 4999元起!小牛MQiL电动两轮车开售:顶配能骑170km_世界动态
- 对话盛希泰:“专精特新”企业给二三四线城市带来发展机会_世界视点
- 快报:河南局地大暴雨!女子家中厨房窗户被暴风雨整个吹掉:庆幸无人受伤
- 每日关注!李想:汽车行业规模要求太苛刻 更容易出问题的不是成本而是销量
- 快报:我国南海发现两处古代沉船
- 我国深海考古重大进展!首次发现大型古代沉船:水下第一视角太壮观 环球热文
- 因为AI 让80%的职业原画师下岗
- 自己办理深圳创业补贴难吗?创业开饭店有补贴吗深圳
- 爱驰汽车被曝经营困难:开通员工自费交社保通道 焦点热讯
- 中国取代日本成全球第一大汽车出口国 俄罗斯为最大买家|天天热门
- 每日观点:当日快讯:沙特外交大臣表示阿拉伯国家将继续在俄乌冲突中维持中立
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
IMU 积分进行航迹推算 天天快报
IMU 积分进行航迹推算
Referencehttps://github.com/gaoxiang12/slam_in_autonomous_driving
1.0 递推方程推导
\(\quad\)连续时间内的 IMU 运动学方程:
\[\dot{\mathbf{R}}=\mathbf{R}\omega ^{\wedge} \\\dot{\mathbf{q}=\frac{1}{2}\mathbf{q}\omega}\\\dot{\mathbf{p}}=v \\\dot{\mathbf{v}}=a\]\(\quad\)这些物理量带上角标之后应该写作 \(\mathbf{R_{wb},p_{wb}}\),对应世界坐标系,它在求导之后就是车辆在世界坐标系下的速度与加速度 \(\mathbf{v_w}, \mathbf{a_w}\) 。在不考虑地球自传的时候,也可以简单的将 车辆行驶的打的视为固定的世界坐标系,这时 IMU 的测量值 \(\widetilde{\omega } ,\widetilde{a}\) 就是车辆本身的角速度,以及车体系下的加速度:
(资料图片)
\[\begin{aligned}\tilde{\boldsymbol{a}} & =\boldsymbol{R}^{\top} \boldsymbol{a}, \\\tilde{\boldsymbol{\omega}} & =\boldsymbol{\omega} .\end{aligned}\]\(\quad\)注意 \(\mathbf{R}^{\top}\) 带下标之后就是 \(\mathbf{R_{bw}}\)。它将世界系下的物理量转换到车体系。然而,实际的车辆、机器人都在地球表面运行。这些系统受到重力的影响,所以我们应该把重 力写在系统方程中。在绝大多数 IMU 系统中,我们可以忽略地球自转的干扰,从而把 IMU 测量 值写为:
\[\begin{aligned}\tilde{\boldsymbol{a}} & =\boldsymbol{R}^{\top} \boldsymbol{(a-g)}, \\\tilde{\boldsymbol{\omega}} & =\boldsymbol{\omega} .\end{aligned}\]\(\quad\)\(\mathbf{g}\) 为地球的重力。当然,如果在无重力环境下测量物体加速度,就不会出现重力项。注意这里 \(\mathbf{g}\)的符号和坐标系定义相关。我们的车体系和世界系都是 \(Z\) 轴向上,于是 \(\mathbf{g}\) 通常取 值 \((0, 0, −9.8)^⊤\)。假设有一个水平放置的IMU,其读数此时应当为 \((0, 0, 9.8)^⊤\),为什么呢?因为此时真正的加速度应该为 \((0, 0, 0)^⊤\),但是由于地球重力的影响,其输出结果会减去 \(\mathbf{g}\) ,所以输出结果就是\((0, 0, 9.8)^⊤\)。
\(\quad\)在大多数系统中,我们认为 IMU 的噪声由两部分组成:测量噪声(measurement noise)与零偏(bias)。记陀螺仪和加速度计的测量噪声分别为 \(η_g\), \(η_a\),同时记零偏为 \(b_g\), \(b_a\),下标 \(g\) 表示陀螺仪,\(a\) 表示加速度计。那么这几个参数在测量方程中体现为:
\[\begin{aligned}\tilde{\boldsymbol{a}} & =\boldsymbol{R}^{\top}(\boldsymbol{a}-\boldsymbol{g})+\boldsymbol{b}_{a}+\boldsymbol{\eta}_{a} \\\tilde{\boldsymbol{\omega}} & =\boldsymbol{\omega}+\boldsymbol{b}_{g}+\boldsymbol{\eta}_{g} .\end{aligned}\]\(\quad\)于是,我们直接把测量模型代入运动学方程,忽略测量噪声影响,即可得到连续时间下的积分 模型:
\[\begin{aligned}\dot{\boldsymbol{R}} & =\boldsymbol{R}\left(\tilde{\boldsymbol{\omega}}-\boldsymbol{b}_{g}\right)^{\wedge}, \quad \text { 或 } \dot{\boldsymbol{q}}=\boldsymbol{q}\left[0, \frac{1}{2}\left(\tilde{\boldsymbol{\omega}}-\boldsymbol{b}_{g}\right)\right], \\\dot{\boldsymbol{p}} & =\boldsymbol{v}, \\\dot{\boldsymbol{v}} & =\boldsymbol{R}\left(\tilde{\boldsymbol{a}}-\boldsymbol{b}_{a}\right)+\boldsymbol{g} .\end{aligned}\]\(\quad\)有时候我们也把 \(p, v, q\) 称为 \(PVQ\) 状态。该方程可以从时间 \(t\)积分至 \(t + ∆t\),推出下一个时刻的状态情况:
\[\begin{aligned}\boldsymbol{R}(t+\Delta t) & =\boldsymbol{R}(t) \operatorname{Exp}\left(\left(\tilde{\boldsymbol{\omega}}-\boldsymbol{b}_{g}\right) \Delta t\right), \quad \text { 或 } \boldsymbol{q}(t+\Delta t)=\boldsymbol{q}(t)\left[1, \frac{1}{2}\left(\tilde{\boldsymbol{\omega}}-\boldsymbol{b}_{g}\right) \Delta t\right], \\\end{aligned}\]\(\quad\)这里我们先不考虑白噪声 \(\boldsymbol{\eta}_{a}\),则IMU的测量方程有:
\[\begin{aligned}\tilde{\boldsymbol{a}} &=\boldsymbol{R}^{\top}(\boldsymbol{a}-\boldsymbol{g})+\boldsymbol{b}_{a}+\boldsymbol{\eta}_{a}\\\tilde{\boldsymbol{a}} -\boldsymbol{b}_{a}&=\boldsymbol{R}^{\top}(\boldsymbol{a}-\boldsymbol{g}) \\\boldsymbol{R}(\tilde{\boldsymbol{a}} -\boldsymbol{b}_{a})&=\boldsymbol{a}-\boldsymbol{g}\\\boldsymbol{a}&=\boldsymbol{R}(\tilde{\boldsymbol{a}} -\boldsymbol{b}_{a}) + \boldsymbol{g} \end{aligned}\]\(\quad\)速度的递推,我们知道 \(\boldsymbol{v}(t+\Delta t) = \boldsymbol{v}(t) + \mathbf{a}t\)。
\[\begin{aligned}\boldsymbol{v}(t+\Delta t) & =\boldsymbol{v}(t)+ \mathbf{a}\Delta t \\& =\boldsymbol{v}(t)+ \left( \boldsymbol{R}(t)\left(\tilde{\boldsymbol{a}}-\boldsymbol{b}_{a}\right) +\boldsymbol{g} \right)\Delta t \\&=\boldsymbol{v}(t)+\boldsymbol{R}(t)\left(\tilde{\boldsymbol{a}}-\boldsymbol{b}_{a}\right) \Delta t+\boldsymbol{g} \Delta t .\end{aligned}\]\(\quad\)位置的递推,我们知道 \(\boldsymbol{p}(t+\Delta t) =\boldsymbol{p}(t)+\mathbf{v}\Delta t + \frac{1}{2}\mathbf{at^2}\),则有:
\[\begin{aligned}\boldsymbol{p}(t+\Delta t) & =\boldsymbol{p}(t)+\boldsymbol{v} \Delta t+\frac{1}{2} \mathbf{a}t^2\\& =\boldsymbol{p}(t)+\boldsymbol{v} \Delta t+\frac{1}{2} \left(\boldsymbol{R(t)}(\tilde{\boldsymbol{a}} -\boldsymbol{b}_{a}) + \boldsymbol{g} \right)t^2\\& =\boldsymbol{p}(t)+\boldsymbol{v} \Delta t+\frac{1}{2}\left(\boldsymbol{R}(t)\left(\tilde{\boldsymbol{a}}-\boldsymbol{b}_{a}\right)\right) \Delta t^{2}+\frac{1}{2} \boldsymbol{g} \Delta t^{2}\\\end{aligned}\]2.0 代码实现
2.1 数据集介绍
这里使用的高博书中带的数据集,数据集的格式为:
# timestamp gx gy gz ax ay az
2.2 具体代码实现
代码实现主要有三个文件
common.hpp
主要用户存放 IMU 数据结构体和读取和保存数据。imu_integration.hpp
主要存放 IMU数据的处理和航迹推算实现类。run_imu_integration.cpp
程序入口函数。
如下命令运行
./run_imu_integration --txt_file_path="../slam_in_auto_driving/chapter3/dataset/10.txt" --output_inter_trajectory_path="./output_trajectory.txt"
common.hpp
#ifndef COMMON_HPP#define COMMON_HPP#include #include #include #include #include #include #include struct IMUMsg{ IMUMsg() = default; IMUMsg(double timestamp, Eigen::Vector3d gyro, Eigen::Vector3d acc) : timestamp_(timestamp), acc_(acc), gyro_(gyro){}; double timestamp_{0.0}; Eigen::Vector3d acc_; Eigen::Vector3d gyro_;};struct IMUIntegrationResult{ IMUIntegrationResult() = default; IMUIntegrationResult(const double ×tamp, const Eigen::Vector3d &P, const Eigen::Quaterniond &Q, const Eigen::Vector3d &V) : timestamp_(timestamp), P_(P), V_(V), Q_(Q){}; double timestamp_{0.0}; Eigen::Vector3d P_; Eigen::Vector3d V_; Eigen::Quaterniond Q_;};inline void ReadImuMsg(std::ifstream &fin, std::vector &imu_msg){ if (!fin) { std::cerr << "Coule not find file\n"; return; } while (!fin.eof()) { std::string line; std::getline(fin, line); if (line.empty()) { continue; } if (line[0] == "#") { continue; } std::stringstream ss; ss << line; std::string data_type; ss >> data_type; if (data_type == "IMU") { double time, gx, gy, gz, ax, ay, az; ss >> time >> gx >> gy >> gz >> ax >> ay >> az; imu_msg.push_back(IMUMsg(time, Eigen::Vector3d(gx, gy, gz), Eigen::Vector3d(ax, ay, az))); } } std::cout << "Read IMU msgs success\n";}inline void SaveImuIntegrationResult( const std::string &file_path, const std::vector &imu_inte_result){ std::ofstream fout(file_path); for (const auto &imu_traj : imu_inte_result) { fout << std::setprecision(18) << imu_traj.timestamp_ << " " << std::setprecision(9); fout << imu_traj.P_(0) << " " << imu_traj.P_(1) << " " << imu_traj.P_(2) << " "; fout << imu_traj.Q_.w() << " " << imu_traj.Q_.x() << " " << imu_traj.Q_.y() << " " << imu_traj.Q_.z() << " "; fout << imu_traj.V_(0) << " " << imu_traj.V_(1) << " " << imu_traj.V_(2) << " "; fout << std::endl; }}#endif // COMMON_HPP
imu_integration.hpp
#include #include #include #include "common.hpp"class ImuIntegration{ public: ImuIntegration() = default; ~ImuIntegration() = default; ImuIntegration(const Eigen::Vector3d &gravity, const Eigen::Vector3d &init_bg, const Eigen::Vector3d &init_ba) : gravity_(gravity), init_ba_(init_ba), init_bg_(init_bg) { } void AddNewImgMessage(const IMUMsg &imu_msg) { // Final P: -3.38794e+06 5.73752e+06 -512933 // 其实第一帧 IMU 数据也可以不判断,因为后面有 dt<0.1 的判断 if (first_imu_) { first_imu_ = false; timestamp_ = imu_msg.timestamp_; } double dt = imu_msg.timestamp_ - timestamp_; if (dt > 0 && dt < 0.1) { P_ = P_ + V_ * dt + 0.5 * (R_ * (imu_msg.acc_ - init_ba_)) * dt * dt + 0.5 * gravity_ * dt * dt; V_ = V_ + R_ * (imu_msg.acc_ - init_ba_) * dt + gravity_ * dt; R_ = R_ * Sophus::SO3d::exp((imu_msg.gyro_ - init_bg_) * dt); } timestamp_ = imu_msg.timestamp_; } Eigen::Vector3d GetPosition() const { return P_; } Eigen::Vector3d GetVelocity() const { return V_; } Eigen::Quaterniond GetRotation() const { return R_.unit_quaternion(); } private: Sophus::SO3d R_; Eigen::Quaterniond R_quaternion_ = Eigen::Quaterniond::UnitRandom(); Eigen::Vector3d P_ = Eigen::Vector3d::Zero(); Eigen::Vector3d V_ = Eigen::Vector3d::Zero(); Eigen::Vector3d gravity_ = Eigen::Vector3d(0, 0, -9.81); Eigen::Vector3d init_ba_ = Eigen::Vector3d::Zero(); Eigen::Vector3d init_bg_ = Eigen::Vector3d::Zero(); double timestamp_{0.0}; bool first_imu_{true};};
run_imu_integration.cpp
#include #include #include #include #include #include "common.hpp"#include "imu_integration.hpp"DEFINE_string(txt_file_path, "../slam_in_auto_driving/chapter3/dataset/10.txt", "Imu integration file");DEFINE_string(output_inter_trajectory_path, "./output_trajectory.txt", "output trajectory file");int main(int argc, char *argv[]){ google::ParseCommandLineFlags(&argc, &argv, true); std::ifstream fin(FLAGS_txt_file_path); std::vector imu_msgs; std::vector imu_inter_result; ReadImuMsg(fin, imu_msgs); // 该实验中,我们假设零偏已知 Eigen::Vector3d gravity(0, 0, -9.8); // 重力方向 Eigen::Vector3d init_bg(00.000224886, -7.61038e-05, -0.000742259); Eigen::Vector3d init_ba(-0.165205, 0.0926887, 0.0058049); ImuIntegration imu_integration(gravity, init_bg, init_ba); for (auto &imu_msg : imu_msgs) { imu_integration.AddNewImgMessage(imu_msg); imu_inter_result.push_back(IMUIntegrationResult( imu_msg.timestamp_, imu_integration.GetPosition(), imu_integration.GetRotation(), imu_integration.GetVelocity())); } SaveImuIntegrationResult(FLAGS_output_inter_trajectory_path, imu_inter_result); // 高博书中程序输出的结果 // T: 1624429630.2702086 // P : -3387943.36 5737523.81 -512933.307 // Q : 0.982857044 -0.132676506 0.0940114453 0.0868954789 // V : -572.166705 4626.10758 -496.605214 std::cout << "Final P: " << imu_integration.GetPosition().transpose() << std::endl; std::cout << "Final V: " << imu_integration.GetVelocity().transpose() << std::endl; std::cout << "Final Q: " << imu_integration.GetRotation().coeffs().transpose() << std::endl; return 0;}
输出结果可视化:
可视化程序,运行:
python3 draw_imu_integration.py ./output_trajectory.txt
# coding=UTF-8import sysimport numpy as npimport matplotlib.pyplot as pltif __name__ == "__main__": if len(sys.argv) != 2: print("Please input valid file") exit(1) else: path = sys.argv[1] path_data = np.loadtxt(path) plt.rcParams["figure.figsize"] = (16.0, 12.0) # 轨迹 plt.subplot(121) plt.scatter(path_data[:, 1], path_data[:, 2], s=2) plt.xlabel("X") plt.ylabel("Y") plt.grid() plt.title("2D trajectory") # 姿态 plt.subplot(222) plt.plot(path_data[:, 0], path_data[:, 4], "r") plt.plot(path_data[:, 0], path_data[:, 5], "g") plt.plot(path_data[:, 0], path_data[:, 6], "b") plt.plot(path_data[:, 0], path_data[:, 7], "k") plt.title("q") plt.legend(["qx", "qy", "qz", "qw"]) # 速度 plt.subplot(224) plt.plot(path_data[:, 0], path_data[:, 8], "r") plt.plot(path_data[:, 0], path_data[:, 9], "g") plt.plot(path_data[:, 0], path_data[:, 10], "b") plt.title("v") plt.legend(["vx", "vy", "vz"]) plt.show() exit(1)
关键词:
-
IMU 积分进行航迹推算 天天快报
IMU积分进行航迹推算>**Reference**[https: github com gaoxiang12 slam_in_autonomous_driving](https:
来源: IMU 积分进行航迹推算 天天快报
Win7经典“顽疾”:微软确认Win11硬盘可能被错误识别|全球今热点
“挖呀挖”黄老师开始转型:参与文旅宣传!曾否认辞职带货
焦点热文:小李子新片《花月杀手》M站91分 多家媒体给出满分
格致男排,夺冠! 每日速递
CesiumJS 源码杂谈 - 时间与时钟系统_前沿热点
《利益区间》冲击金棕榈大奖
4999元起!小牛MQiL电动两轮车开售:顶配能骑170km_世界动态
对话盛希泰:“专精特新”企业给二三四线城市带来发展机会_世界视点
快报:河南局地大暴雨!女子家中厨房窗户被暴风雨整个吹掉:庆幸无人受伤
每日关注!李想:汽车行业规模要求太苛刻 更容易出问题的不是成本而是销量
04-多路选择器
快报:我国南海发现两处古代沉船
我国深海考古重大进展!首次发现大型古代沉船:水下第一视角太壮观 环球热文
因为AI 让80%的职业原画师下岗
帮助Linux管理员简化任务并实现自动化的七大工具
自己办理深圳创业补贴难吗?创业开饭店有补贴吗深圳
爱驰汽车被曝经营困难:开通员工自费交社保通道 焦点热讯
中国取代日本成全球第一大汽车出口国 俄罗斯为最大买家|天天热门
React闭包陷阱
每日观点:当日快讯:沙特外交大臣表示阿拉伯国家将继续在俄乌冲突中维持中立
全球快报:【财经分析】全球贸易增长正在恢复 应继续加强多边贸易合作
环球短讯!近视可用 特步0~700度专业大框泳镜狂促:12元包邮
店员称衣服掉地上摔个洞需赔款:最终结果让网友不淡定 速看
如何保存新鲜活虾 活虾怎么保存? 全球即时看
全球微动态丨体验阿斯顿·马丁DBX707 看看超跑品牌是怎么做SUV的
比亚迪首家全品牌体验中心开业:几万块到一百万的车全都有 当前简讯
第一批升级iOS 16.5正式版的用户被坑了!_要闻速递
学系统集成项目管理工程师(中项)系列23b_信息系统集成及服务管理(下)
【爬虫数据集】滇西小哥YouTube频道TOP10热门视频的热评数据,共2W条!_世界速看料
又有基金公司宣布:APP停止运营!_环球快看
清华大学女生获选美冠军 网友:全方位优秀
年轻人第一辆后驱SUV 长安深蓝S3预售:16.99万起-热议
全球信息:雨前高山春鲜 谢裕大珍珠绿茶60克到手29元
万达集团紧急声明!
03-点亮LED灯
热搜第一!BLG晋级 LPL提前锁定MSI三连冠 每日信息
全面了解华为全屋智能4.0:体验质变 最新快讯
母亲5点帮女儿排队领证结果走错地方:白排了一个小时队
当前快看:河海大学与华中师范大学签署战略合作协议
无论多少次,还是会为粉色疯狂心动!!!
文心一言 VS 讯飞星火 VS chatgpt (19)-- go语言的slice和rust语言的Vec的扩容流程是什么? 世界热文
阴阳师×GARNiDELiA决定展开合作 或为《极乐净土》高清重制版
索尼宣布将与WNBA达成合作伙伴关系 探索各种营销机会
环球今亮点!年终工作总结会议流程_年终工作总结会议通知
NASA发出警告称巨型小行星正在接近地球 大小为纽约地标自由女神像的两倍
网易旗下Jackalope Games宣布更名 正在开发一部基于“战锤”IP的游戏
苹果App商城现已有178万个应用程序 为有意义的统计数据
,影片《人生路不熟》票房突破9亿元大关 由马丽与乔杉等人主演
电视剧《仙剑奇侠传六》官微发布新海报 由许凯和虞书欣担任
顺丰控股公布4月快递物流业务经营 业务量同比增长29.59%
差价上千元该怎么选?13代酷睿i5和i7实测性能对比
华为把屏幕边框做到了1mm!畅享60 Pro即将开卖:1499元
国网东营供电公司开展全市电力设施和电能保护集中宣传活动
从350nm升到4nm 25年来AMD CPU性能已提升910倍
女子动车上提醒男子小声打电话被怼:你凭什么说我
520当天一女子逼停汽车泼粥骂渣男引围观:网友吐槽不该糟蹋粮食
由于半导体消费持续低迷 三星半导体将推迟平泽工厂4nm生产线设备投资
2023年DPC中国联赛夏季赛开战 Aster战队首秀大放异彩赢得首胜
阅读笔记:Sybilla DLT任务重启判定系统 焦点快看
首款天玑9200旗舰!vivo X90降价:256GB版3799元到手
网红三千哥直播PK饮酒过量去世 友人:喝了至少四瓶|当前通讯
英伟达RTX 4060 Ti显卡降临:关键参数已曝光 就差价格了
初三下册月考复习:第二单元知识点-天天快播报
Java生成二维码及条形码工具
python中的装饰器原理和作用 焦点热议
23款奔驰GLC评测_全球观焦点
有你家吗?杭州人均存款达16万元:全国住户存款最强8大城市 每日消息
华为笔记本性能怪兽!MateBook 16s下周首销:i7+1TB仅7999元 全球即时看
今日精选:20年来x86巨变 Intel将精简CPU架构:转向纯血64位
女子为骗男友结婚定制美颜假身份证引热议:网友感慨太假太美了 焦点报道
情侣筷子卖22元单身筷1元 超市:已下架-环球看点
双鸭山市气象台发布大风蓝色预警【IV级/一般】【2023-05-20】 全球热文
每日看点!Natasha 插件化之dll
天天最资讯丨暴雪又搞砸了 老外批《守望先锋2》太失败:浪费4年开发
桌面RTX 4070玩游戏 显示器选2K还是4K?来看对比实测 全球热推荐
远离元宇宙后 扎克伯格财富暴涨3000亿 全球最多!|全球新视野
小米两大技术接入联发科平台!卢伟冰:天玑芯片影像蜕变
37岁姐姐跟98年男友520领证 网友:羡慕了 天天讯息
全球观察:直通车是什么快递_直通车是什么
虎书 第一章 图形流水线_环球焦点
10.998万元 春风1250TR-G摩托价格公布:用上75°V型双缸发动机
焦点速看:丰田再批电动车毫无意义:烧煤发电不环保 氢燃料才合理
【环球时快讯】瓦伦丁·迪奥曼德_关于瓦伦丁·迪奥曼德介绍
C++ Today01
Kafka未触发消费异常排查实录-全球实时
基于python实现-根据Excel表格指定的UniqueKey的顺序-到另一个参考表格中查找-补全与自己相关的数据
Revit二次开发实战
天天观察:年轻人发完红包看电影 520单日总票房超1.5亿:速激10位列第一
网吧用“蛤蟆”、“天鹅”区分男女厕所 网友点赞直呼有才:官方回应
樱桃自由了!水果贵族樱桃一斤直降30元 六七月份还会继续降
B站CEO陈睿:年轻人爱学习 超8成985、211学生是B站用户 天天速递
三星独占结束!国产手机将用上“鸡血版”二代骁龙8-当前视点
浏阳:残疾人以“武”会友,散发的是自信和快乐-全球资讯
OPEN AI角色插件通道开放接入支持各种细分领域对话场角色景模型一键接入AI 智能 聚焦
记录--Vue中如何导出excel表格
马斯克回避的赛道蔚来进军了:可控核聚变20年内商用_环球热点
首发联发科8200-Ultra!小米Civi 3跑分出炉|全球即时
新疆乌鲁木齐达坂城姑娘特色农产品展示中心预计7月投用|当前速讯
网约车拒违停 2乘客赖车上超24小时还原地撒尿 官方通报:行拘-新要闻