LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题

LIO-SAM 成功适配自己数据集

注意本文测试环境 Ubuntu18.04 ROS melodic版本
笔者用到的硬件以简单参数:
激光雷达:速腾聚创16线激光雷达(RS-Lidar-16)
IMU:超核电子CH110型 9轴惯导,使用频率100Hz
注意!!!!!! 该教程旨在引导安装运行,可能现在已经不具时效性了,笔者于2022年7月下载的LIO-SAM源码已经不需要更改 frame_id 了,主要工作在于标定。标定工具无需局限于以下笔者使用的工具,可以github上逛一逛。各种跑飞可以尝试不同的开源数据集,试过两种以上再尝试标定自己的数据,注意修改细节。

背景

  笔者一直在测试3D-SLAM算法中具有优异性能的建图算法,之前入门的时候测试了LOAM,LeGo-LOAM,BLAM等算法 。以上算法全是单激光雷达数据即可建图的算法,建图效果有差别但是不大。之前注意到了激光雷达融合IMU的优异性能,准备上手一试,没想到试了将近两月。之前的单激光雷达建图算法也遇到过坑,但是踩几天总能找到踩平的方法。LIO-SAM效果是目前见到建图效果最好的,也是我测试时间最长的,踩过的坑最多的算法。下面是我个人使用自己数据集的一些经验,与各位简单分享。(其他类型的激光雷达与IMU仅可做参考)
先放两张效果图:
在这里插入图片描述
在这里插入图片描述

一、数据格式要求

1.1IMU数据格式

  其实IMU对格式要求的坑还没踩到,但是采样频率要注意一下,原作使用的是500Hz的IMU,并且在源码中对其将行了处理,转为了REP-105格式的数据,原作建议使用者最低使用200HZ的IMU,但是笔者使用100HZ的IMU仍具有以上效果,测试吗,可以随便试。

1.2激光雷达数据格式

  LIO-SAM算法对激光雷达的数据格式有着较为严格的要求,以往的单激光雷达建图的算法没注意到这一点,一般要求的是XYZI(x, y, z, intensity ) 格式即可,但是LIO-SAM要求的是 XYZIRT(x, y, z, intensity, ring, timestamp) 格式,即算法内使用了激光雷达的通道数ring参数和时间戳timestep参数,启动算法时会检查是否具有这两个参数。那么如何获得这两个参数呢? 如果你同笔者使用的激光雷达一样,你可以将激光雷达的驱动更新到RSLidar-SDK版本即可采集,参考笔者另一篇教程安装速腾最新的驱动:Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据.
  但问题是采集到的数据仍然有不可直接用,速腾格式的点和Velodyne格式的点还是有问题的。这又如何解决呢?笔者在某hub上找到了一位大佬的转化节点,这一节点可将速腾格式的点转化为Velodyne格式的点,具体安装步骤参考笔者另一篇教程链接: 速腾聚创雷达点云格式转换为Velodyne雷达点云格式.
其他雷达笔者没有,无能为力了。

( 1.3GPS 数据格式要求)

  留个小坑吧,笔者还没试融入GPS的情况,但是GPS数据是要求sensor_msgs/NavSatFix这一格式的,GPS会有很多格式,原作使用的是这一个,如果有大佬测试其他格式成功的话可以留言讨论一下。

1.4坐标系的一致性要求(2022年7月之后的源码似乎不需要这一步骤,如果无法建图再尝试该小节步骤)

  简单说就是对 frame_id 有要求,不想改源代码只能在外部使劲了,这里面涉及到了内部坐标的映射关系,不一样的话可能ERROR 导致无法建图,原作给出的数据集中的 frame_id是这样对应的:

//激光雷达数据
/points_raw-----------frame_id:"velodyne"--------
//IMU数据
/imu_raw--------------frame_id:"imu-link"--------
//GPS数据
/gps/fix--------------frame_id:"navset_link"-----

查看自己数据包的frame_id

// 在播放数据包的时候使用如下指令查看某一Topic的frame_id:rostopic echo  /Topic    | grep   frame_id

如果与原作的不一样的话需要修改,具体修改方法可以在ROS的官方wiki下载一个工具包bag_tools,里面包含了许多关于数据包的操作工具,官方附带了使用教程,可自行百度下载解决。这里给一条印象中的转化指令:

 rosrun  bag_tools  change_frame_id.py  -t  /需要要改的topic   -f    新的frame_id    -i      旧.bag    -o    新.bag

二、lidar_align进行激光雷达与IMU外参标定

  以上第一步只是解决了数据格式的问题,两种传感器如何配合还要做进一步的标定,这一步采坑巨多。笔者使用的是瑞士苏黎世联邦理工大学自动驾驶实验室开发的标定工具:lidar_align,不多介绍了,有兴趣的朋友自行查阅吧。

2.1下载lidar_align

mkdir  -p  lidar_align/srccd lidar_align/srcgit clone https://github.com/ethz-asl/lidar_align.gitcatkin_make

首次编译会缺库报错

2.2安装nlopt库

sudo apt-get install libnlopt-dev

将NLOPTConfig.cmake文件移动到 lidar_align/src/下进行第二次编译
二次编译会报错

2.3 处理定义冲突问题

//依次运行以下指令
sudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.baksudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4.h.baksudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.hsudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.hcatkin_make

三次编译成功

2.4 改写IMU接口

  上面查阅过资料的朋友会知道,这一工具原本不是用来标定激光雷达和IMU的而是用来标定激光雷达和里程计的。所以需要改写IMU接口来替换掉里程计接口。所以这一工具一定程度上并不是精确标定上述两种传感器的,但不精确不代表不可用,能建图就很香。改写这一接口的大佬没找着,没法连接了所以侵删联系。以下是做法:
打开loader.cpp文件

找到以下odom部分注释删掉都可
/*  types.push_back(std::string("geometry_msgs/TransformStamped"));rosbag::View view(bag, rosbag::TypeQuery(types));size_t tform_num = 0;for (const rosbag::MessageInstance& m : view) {std::cout << " Loading transform: \e[1m" << tform_num++<< "\e[0m from ros bag" << '\r' << std::flush;geometry_msgs::TransformStamped transform_msg =*(m.instantiate<geometry_msgs::TransformStamped>());Timestamp stamp = transform_msg.header.stamp.sec * 1000000ll +transform_msg.header.stamp.nsec / 1000ll;Transform T(Transform::Translation(transform_msg.transform.translation.x,transform_msg.transform.translation.y,transform_msg.transform.translation.z),Transform::Rotation(transform_msg.transform.rotation.w,transform_msg.transform.rotation.x,transform_msg.transform.rotation.y,transform_msg.transform.rotation.z));odom->addTransformData(stamp, T);}
*/将以上部分替换为:types.push_back(std::string("sensor_msgs/Imu"));rosbag::View view(bag, rosbag::TypeQuery(types));size_t imu_num = 0;double shiftX=0,shiftY=0,shiftZ=0,velX=0,velY=0,velZ=0;ros::Time time;double timeDiff,lastShiftX,lastShiftY,lastShiftZ;for (const rosbag::MessageInstance& m : view){std::cout <<"Loading imu: \e[1m"<< imu_num++<<"\e[0m from ros bag"<<'\r'<< std::flush;sensor_msgs::Imu imu=*(m.instantiate<sensor_msgs::Imu>());Timestamp stamp = imu.header.stamp.sec * 1000000ll +imu.header.stamp.nsec / 1000ll;if(imu_num==1){time=imu.header.stamp;Transform T(Transform::Translation(0,0,0),Transform::Rotation(1,0,0,0));odom->addTransformData(stamp, T);}else{timeDiff=(imu.header.stamp-time).toSec();time=imu.header.stamp;velX=velX+imu.linear_acceleration.x*timeDiff;velY=velX+imu.linear_acceleration.y*timeDiff;velZ=velZ+(imu.linear_acceleration.z-9.801)*timeDiff;lastShiftX=shiftX;lastShiftY=shiftY;lastShiftZ=shiftZ;shiftX=lastShiftX+velX*timeDiff+imu.linear_acceleration.x*timeDiff*timeDiff/2;shiftY=lastShiftY+velY*timeDiff+imu.linear_acceleration.y*timeDiff*timeDiff/2;shiftZ=lastShiftZ+velZ*timeDiff+(imu.linear_acceleration.z-9.801)*timeDiff*timeDiff/2;Transform T(Transform::Translation(shiftX,shiftY,shiftZ),Transform::Rotation(imu.orientation.w,imu.orientation.x,imu.orientation.y,imu.orientation.z));odom->addTransformData(stamp, T);}}并在开头添加头文件:#include <sensor_msgs/Imu.h>

第四次catkin_make编译。

2.5 录制数据以及标定

  这一环节就较为简单了,只需同时录制激光雷达和IMU两分钟即可,最好将数据量控制到2G以内,超出2G之外可能出现未知错误无法标定。两分钟的数据应该尽量包含较大的旋转量和平移量(也就是先直线跑一段再转两圈),这样标出来的误差结果(据说)会收敛到几百以下(已经相当可以了),笔者随便找了数据包标了两三次,还是在17000左右吧,凑合用吧。(标定过程较为漫长,耐心等待)。

2.5.1 修改launch文件

打开lidar_align.launch文件,将两分钟的数据包路经copy到下方:
在这里插入图片描述
  改写了接口以后就不用以表格形式导入数据了,直接播放在launch文件里面修改你的数据包的路径即可,下面是一些过程展示,标定时间可能较长,一个小时多点吧,需要迭代将近300次左右吧。

2.5.2启动launch开始标定迭代
source devel/setup.bash 
roslaunch lidar_align lidar_align.launch

在这里插入图片描述
标定结束:
在这里插入图片描述

  标定好之后会在终端显示出标定结果,也会在result文件夹下面生成对应的标定文件。有了这个文件就可以提取数据写入LIO-SAM的配置参数文件了,具体提取什么数据后面详细解释。
在这里插入图片描述

三、imu_utils进行IMU内参标定

  IMU内参是一项非常重要的参数,建图的时候各种跑飞基本是这一项误差未标定的原因。笔者使用的标定工具是港科大的一个标定工具imu_utils,使用Allan方差来标定高斯白噪声和随机游走噪声(即零偏Bias)。有了这一项参数即可准备开始建图了。

3.1下载imu_utils

  具体操作步骤这里参考了大佬文章,可直接跳过去按照大佬教程安装用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定.

3.2准备标定需要的数据包

  这里要录制两个小时的IMU数据,注意!!!录制数据时必须保持IMU的静止状态,录制全程不可晃动只录制IMU的Topic即可,不过别担心内存,两小时下来只要300M多一点。并且这个数据包最好是放到你imu_utils的工作空间下(与src并列的地方)。最好是IMU上电10分钟之后在开始录制,上电瞬间开始录制会有较大误差。录制指令就不细说了,老司机基本功。

3.3修改launch文件

  打开imu_utils下面有一堆launch文件,将A3.launch复制并重命名为test.launch,打开,将下面的value换成你自己的IMU数据topic,下面的120是读取数据时间长度,录了俩小时就写120。
在这里插入图片描述

3.4开始标定

//启动launch
source  devel/setup.bash
roslaunch imu_utils test.launch 

在这里插入图片描述

//以两百倍速播放IMU数据包
rosbag play -r200  imu.bag

  终端接收到数据是没有反应的,结束时才会显示标定结果。同时在data文件夹下会生成一堆文件我们需要的是第一个。
在这里插入图片描述

四、修改LIO-SAM配置参数

  终于到了这里,终于获得了所需的所有的参数配置,打开config文件夹下params.yaml文件,(最好是copy一份源文件保存下来)。注意这里仅仅是使用了激光雷达和IMU,未配置GPS。

4.1 修改订阅话题

  在红框的地方修改雷达和IMU订阅话题
在这里插入图片描述

4.2修改IMU内参

在这里插入图片描述

  在上面IMU Settings的地方就是修改内参的地方,打开第三步标定好的IMU内参文件A3_imu_param.yaml找到以下参数:
在这里插入图片描述

对应关系为:

// Acc误差模型高斯白噪声imuAccNoise<---------->acc_n // Gyro误差模型高斯白噪声imuGyrNoise<----------> gyr_n// Acc误差模型随机游走噪声imuAccBiasN<---------->acc_w// Gyro误差模型随机游走噪声imuGyrBiasN<----------> gyr_wimuAccNoise: 1.5126001818597128e-02imuGyrNoise: 6.5980273374716312e-05imuAccBiasN: 2.3794907799562417e-04imuGyrBiasN: 8.9601374044261405e-07

按照以上对应关系修改参数即可

4.3修改Lidar–>IMU外参

  打开第二步标定好激光雷达和IMU外参的calibration_oprater_hp_5402_590670726118389616.txt文件找到以下参数:
在这里插入图片描述
将上述方框标注的参数对应写到下方配置文件中:

  extrinsicTrans: [0.00290376, -0.00715269, 0.0395843]extrinsicRot: [-0.975156 ,-0.221516 ,-0.000975888,0.221498  ,-0.975118 , 0.00911853,-0.00297151 ,0.00867584 ,0.999958]extrinsicRPY: [-0.975156 ,-0.221516 ,-0.000975888,0.221498  ,-0.975118 , 0.00911853,-0.00297151 ,0.00867584 ,0.999958]

其他参数最好是不要改动,修改完保存。最好是在编译一下,没有错误之后可运行launch文件启动,进行播包。(另外默认是不会保存pcd文件的,可以自己修改一下,但是每次运行都要修改路径,否则会覆盖掉上次的文件。)

五、起飞

  这一番操作可以跟下来还是很不容易的,放首歌舒缓一下 准备起飞 芜湖起飞.


source devel/setup.bash 
roslaunch lio_sam run.launch

启动之后可以播包试试了
下面是笔者自己数据包建图效果(室内):
在这里插入图片描述
在这里插入图片描述
保存到本地的pcd文件
在这里插入图片描述

六、总结

  本文仅描述了如何使用速腾激光雷达融合IMU并使用LIO-SAM算法进行建图的实操步骤,并未进行理论分析,下面将给出一些笔者参考过的文献。

  建图效果读者自评吧,参数还没有优化到最好,只进行了最粗略的标定,尤其是激光雷达与IMU的外参并没有收敛到三位数,但毕竟是融合了激光雷达和惯性导航的紧耦合算法,比起笔者测试过的其他单激光雷达传感器算法效果应该是上了一个台阶的。从看到LIO-SAM的建图效果开始尝试适配自己的数据集一直到出现上述效果大概断断续续经历了俩月吧,3D-SLAM的新手,以上结果只是笔者建图过程中遇到的问题以及解决方法,一定还有其他更优解,有更优秀的解法欢迎留言讨论。

以下是笔者参考过的文章,感谢各位大佬分享:

安装教程参考:

LIO-SAM:配置环境、安装测试、适配自己采集数据集.

各种知识点参考:

1.激光SLAM运行LIO-SAM时存在的一些问题.

2.LIO-SAM源码阅读分析(1)–配置文件Tips.

3.Lidar与IMU标定代码实战:lidar_align.

4.【学习总结】Lidar与IMU标定.

5.LIO-SAM论文翻译.

6.用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定.

7.IMU误差模型和校准.

8.lio-sam源码解析,重点:imu预积分.

9.激光雷达和IMU联合标定并运行LIOSAM.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42141088/article/details/118000544

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1622020.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

LIO-SAM:配置环境、安装测试、适配自己采集数据集

LIO-SAM是IROS 2020的一篇论文&#xff0c;目前已经开源&#xff0c;作者曾发表过Lego-loam&#xff0c;整体框架与Lego-loam结构相同&#xff0c;但是可读性感觉要比Lego-loam好的多&#xff0c;并添加了gps因子且真正融合了imu。 网上也已经出现了很多关于解读LIO-SAM的文章&…

基于华硕AX3000 WPA2-Personal认证方式,设备连接失败问题处理

1 问题背景 最近在XXX项目上&#xff0c;测试在做路由器兼容性测试&#xff0c;发现XX设备在连接ASUS TUF-AX3000型号路由器的WPA2-personal认证方式时&#xff0c;出现必现连接不上的现象&#xff0c;最后排查发现居然跟有多种Wpa2-personal有关。 本文主要结合该问题&#…

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets

本文主要面向UMG以及Common UI的初学者 文章目录 效果展示概要Activate和Deactivate可见性绑定UI动画设置Common Activatable Widget的默认焦点 效果展示 概要 这个例子非常简单&#xff0c;定义了13个Common Activatable Widget CommonUI_ActivatableWidgets相当于一个容器包…

win10链接无线打印服务器,win10怎么连接网络打印机 win10添加网络打印机详细教程...

自从有了win10系统&#xff0c;互联网变得越来越方便了&#xff0c;最近非常流行网络打印机&#xff0c;只需要共享IP就可以实现扩地区打印&#xff0c;那么该如何操作呢&#xff1f;首先让我们先添加一个网络打印机&#xff0c;怎么添加&#xff1f;大家只需要看看下方的win10…

计算机重新如何连接网络打印机,电脑怎样连接打印机,小编教你电脑如何连接网络打印机...

打印机是办公室里经常会用到的一种办公设备&#xff0c;由于工作性质的不同&#xff0c;以及其他原因&#xff0c;网络打印机可以实现多台电脑连接&#xff0c;实现资源共享。网络打印机自带ip&#xff0c;只需指定ip就可以快速连接。那电脑如何连接网络打印机&#xff1f;下面…

Linux之iptables防火墙

目录 一.网络安全技术 二.防火墙 2.1.防火墙分类 2.2.iptables工具简述 2.3.iptables基本语法 2.4.控制类型 2.5.查看规则 2.6.添加规则 2.7.黑白名单 2.8.根据规则编号删除 清空 替换规则 2.9.默认策略 2.10.隐藏扩展模块 2.11.显示扩展模块 三.iptables保存规则…

Qt应用开发(基础篇)——日历 QCalendarWidget

一、前言 QCalendarWidget类继承于QWidget&#xff0c;是Qt设计用来让用户更直观的选择日期的窗口部件。 时间微调输入框 QCalendarWidget根据年份和月份初始化&#xff0c;程序员也通过提供公共函数去改变他们&#xff0c;默认日期为当前的系统时间&#xff0c;用户通过鼠标和…

星际争霸之小霸王之小蜜蜂(七)--消失的子弹

目录 前言 一、删除子弹 二、限制子弹数量 三、继续重构代码 总结 前言 昨天我们已经让子弹飞了起来&#xff0c;但是会面临一个和之前小蜜蜂一样的问题&#xff0c;小蜜蜂的行动应该限制在窗口内&#xff0c;那么子弹也是有相同之处&#xff0c;也需要限制一个移动范围&…

《影响力》,到底有多可怕?

通过案例引出主题。介绍《影响力》的六大原理。附录: 本文书籍以及个人视频账号介绍。本文6300字左右&#xff0c;预计阅读时间10分钟。 上周&#xff0c;我到李宁专卖店买一双跑步鞋&#xff0c;挑来挑去看中了一双黑色的鞋&#xff0c;款式不错&#xff0c;穿起来也很舒服。…

谋定政策经信研究扶持-万祥军:对话李玉庭跨界电商重整

谋定政策经信研究扶持-万祥军&#xff1a;对话李玉庭跨界电商重整 中国经济和信息化网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采编&#xff1a;“企业抱团集群发展成趋势&#xff0c;扶持政策持续加码。业内有人戏称&#xff0…

临期食品,是否只是个“过期“市场?

如今的年轻人&#xff0c;越来越喜欢在生活上精打细算。 无论是知乎豆瓣&#xff0c;还是微博贴吧&#xff0c;在各类平台论坛之中&#xff0c;都会有着"省钱"相关的话题。如何用更少的钱过上更加精致充实的生活&#xff0c;成为了当代年轻人最受欢迎的生活方式。 在…

跨界巨头谋定现代农业-农民丰收节交易会:全产业链布局

跨界巨头谋定现代农业-农民丰收节交易会&#xff1a;全产业链布局 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万权采编&#xff1a;“既有农业的种植管理技术&#xff0c;又有食品深加工的能力&#xff0c;还有食品和农产品营销…

她在女性大会上请求马云“教育”老公,夫妻俩开店一年销售10个亿

“我是做淘宝的&#xff0c;然后我老公也是做淘宝的。我一年大概做两三个亿的销售额&#xff0c;我老公一年做七八个亿的销售额。我老公比较注重应酬&#xff0c;经常把自己灌醉。我老公非常想要宝宝&#xff0c;但是他每天因为生意&#xff0c;熬夜、应酬、喝醉&#xff0c;我…

深度:蒙牛老年高端产品营收增长9倍,中老年消费品市场趋势不变,创新机会涌现!

疫情仍在肆虐&#xff0c;许多行业和公司遭受重创&#xff0c;面临生死存亡的困境。 在一片悲观之下&#xff0c;中老年消费品市场凸显出顽强的生命力和独特价值&#xff0c;AgeClub在对电商平台数据和行业密切跟踪中发现&#xff1a; 蒙牛2019年“悠瑞”中老年高端系列营收增…

2021年中国奶粉行业发展现状分析,行业集中度不断提升,下沉市场发展空间广阔「图」

一、概述 奶粉是将动物奶除去水分后制成的粉末&#xff0c;它适宜保存。奶粉是以新鲜牛奶或羊奶为原料&#xff0c;用冷冻或加热的方法&#xff0c;除去乳中几乎全部的水分&#xff0c;干燥后添加适量的维生素、矿物质等加工而成的冲调食品。奶粉主要可分为全脂奶粉、脱脂奶粉…

乐高武汉楚河汉街授权专卖店重装焕新开业;玛氏中国“宠享潮生活”共建人宠友好新风尚 | 知消...

百威亚太携高端波本威士忌品牌助阵2021 Whisky L。2021年12月9日至11日&#xff0c;百威亚太携美国波本威士忌野牛仙踪亮相2021 Whisky L。与此同时&#xff0c;出产野牛仙踪威士忌的野牛仙踪蒸馏酒厂的高端线Bond and Royal也空降现场&#xff0c;参与此番共饮盛况。 伊利奶粉…

Drupal 安装语言时报错

中文下载地址: 下载 | Drupal 中文网 进入下载 | Drupal 中文网或者Chinese, Simplified overview | Translations下载语言包&#xff0c;根据你的Drupal版本下载相应的语言包 我选的是9.4.8版本&#xff0c;下载好后放到你的安装包里sites\default\files\translations 有什么…

Drupal安装配置文档(一)

Drupal安装配置文档 前段时间帮公司弄了个内部网站&#xff0c;作为一个内部信息交流平台&#xff0c;发现一个叫Drupal的内容管理系统很适合&#xff0c;于是研究了一番。由于篇幅有限&#xff0c;本文档分为&#xff08;一&#xff09;&#xff08;二&#xff09;两篇&#x…

Excel 2007

Excel 2007 一.数据的呈现与挖据 1. 开始->条件格式下 2.插入->数据透视表, 数据透视表工具->选项,&设计 二.数据的整理与分析 1.数据->分列; 2.数据的合并: 用函数公式(A1&"-"&A2) 3. 选中某个需要排序的cell, 数据->排序 4.数…

【【STM32分析IO该设置什么模式的问题】】

STM32分析IO该设置什么模式的问题 我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉&#xff0c;但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以…