Sensors基础知识---

2023-10-24 06:30
文章标签 基础知识 sensors

本文主要是介绍Sensors基础知识---,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoosenpin/article/details/77798846

1 传感器选型
6 axis:Bosch BMI160(比较差),InvenSense MPU6050(DMP),ST LSM6Dxx
Acc:Freescale MMA,Kionix KXSD9,ST LIS3DH
Magnetic:AKM / ALPS / memsic
Gyro:ST,BMG160(包含FIFO模式)
Pedometer:DS3553,MMA9553L,STP201,ucomm提供计步算法
Pressure(barometer):Bosch BMP(差),Global mems
Sensorhub:Bosch BHI160(ARC EM4 CPU),Cywee cmh1000(tensilica CPU),MegaChips frizz,InvenSense ICM-30630(三轴加速度计 + 三轴陀螺仪 + sensorhub),ST-Movea_STM32_Sensor_Hub

BHI160 Datasheet
http://www.bosch-sensortec.com/bst/products/all_products/bhi160

ST-Movea_STM32_Sensor_Hub方案
http://www.docin.com/p-770378873.html

2 Acc-Mag-Gyro
2.1 MSM SSC
加速度、陀螺仪等数据量较大的最好使用FIFO(batch)模式,光线、距离等数据有变化才需要上报的传感器使用DRI(Data Ready Interrupt)模式。

SSC(Snapdragon Sensors Core)中带有uimg(__attribute__((section ("text.SMGR"))))标识的代码运行在缓存中,其中代码一般是做数据上报相关工作的,运行期间可以将外部ddr关闭以实现最低功耗的传感器运行;不带有uimg标识的代码运行期间是需要ddr开启的,其中代码一般做一些初始化相关的工作。

@ sensors/dsps/reg_defaults/sensor_def_qcomdev.conf
off_to_idle和idle_to_ready:单位为us,根据硬件spec获得
i2c_bus:0-based index
i2c_address:7位地址,没有左移一位

该文件标识方向的关键字是900,901,902,分别代表的是传感器的xyz方向,带个负号表示取反。
例如:
900    2
901    1
902    -3
表示x和y数据互换,z的方向取反。

2.2 Accelerometer
加速度计算公式:(16bit_ADC / 32768) * 量程,16bit_ADC的最高一位是符号位,量程选项有正负2g、正负4g、正负8g、正负16g。
例如量程取正负2g,那么计算公式是 (((signed short)16bit_ADC) / 0x8000) * (2 * 9.8)

低通滤波:多个采样值取平均值

Sensors 报点时的时间戳单位是ms。

2.2.1 如何判断ACC校准PASS
The norm of accelerometer coordiate value should be close (0, 0, +9.8) (m/s^2), when device Z-axis faces sky direction.
we have to calculate bias value that makes accelerometer coordiate value close the norm for each device.

How to get accelerometer bias value:
xdata[0:99] = xraw[0:99] + x_pervious_bias;
ydata[0:99] = yraw[0:99] + y_pervious_bias;
zdata[0:99] = zraw[0:99] + z_pervious_bias;

x_newbias = (xdata[0]+..+xdata[99])/100;
y_newbias = (ydata[0]+..+ydata[99])/100;
z_newbias = ((zdata[0]+..+zdata[99])/100);

if (absf(x_newbias) > 0.39f)
    return (x_newbias = 0.0f); /*that means bias value is not met criterion*/

if (absf(y_newbias) > 0.39f)
    return (y_newbias = 0.0f); /*that means bias value is not met criterion*/

if ((absf(z_newbias) > 10.2f) || (absf(z_newbias) < 9.0f)))
    return (z_newbias = 0.0f); /*that means bias value is not met criterion*/

2.2.2 Pedometer
人步行过程中,加速度三轴平方和后开根号大概呈现正弦波,每一个周期算一步。每秒步频就是正弦波的频率。区分行走还是跑步可以通过波峰的值来区分(跑步时,每秒步频也会变快),值大于2g认为在跑步(异常情况是:大于等于2.8g一般认为是跌倒了),值在[1.2g, 2g]之间认为是行走,小于1.2g认为是静态,不进行计步。

accumulated_step_count/步数:总共走或跑的步数 (unit: 步)
accumulated_step_length:所有步幅的总和,即所走的路程(unit:meter)
step_frequency/步频:每分钟走或跑的步数 (unit: 步/分钟)
step_length/步幅:每步的步长 (unit: centimeter)
step_type: 1 for walk, 2 for run, and 3 for jogging
配速的单位是min/KM,即为每公里的用时。

DirectionUp:加速度sqrt(x*x + y*y + z*z) 不断增加,往波峰爬坡
DirectionDown:加速度sqrt(x*x + y*y + z*z) 不断减少,往波谷下坡

2.2.3 根据加速度计算Azimuth-Pitch-Roll姿态角做跌倒检测
Gyro 绕z轴旋转的叫Azimuth(航向角,又叫Yaw或者Heading),绕x轴旋转的叫Pitch(俯仰),绕y轴旋转的叫Roll(翻滚,3个单词记忆缩写为APR),加速度只能计算出Pitch和Roll,航向角Azimuth必须通过Gyro或者Mag计算。

ρ、ψ、θ分别为传感器的xyz轴与重力加速度的夹角。传感器3个轴输出的加速度信号Ax、Ay、Az与重力加速度方向形成的夹角计算公式如下:


2.2.4 计步算法URLs
计步器算法是如何实现的
https://www.zhihu.com/question/28840089

基于加速度传感器的计步器设计与实现
https://wenku.baidu.com/view/c262e09809a1284ac850ad02de80d4d8d05a0145.html

一种基于自适应波峰检测的MEMS计步算法
https://wenku.baidu.com/view/46d0d91080eb6294dc886c80.html

基于加速度传感器的人体姿态识别系统
http://www.docin.com/p-1311770991.html

利用加速度求解位置的算法——三轴传感器
https://www.cnblogs.com/cposture/p/4378922.html

2.3 Gyro(陀螺仪)
unit: deg/s或者dps(degree per second)
陀螺仪计算公式:(16bit_ADC / 32768) * 量程,16bit_ADC的最高一位是符号位,量程选项有正负125dps、正负250dps、正负500dps、正负1000dps、正负2000dps。
例如量程取正负2000dps,那么计算公式是 (((signed short)16bit_ADC) / 0x8000) * 2000

陀螺仪耗流一般比较大,可达1mA。

陀螺仪的XYZ分别代表设备围绕XYZ三个轴旋转的角速度:deg/second。XYZ使用的坐标系与gsensor相同。Gyro校准时,X或者Y或者Z > 0.4會判fail。

azimuth方位角(PDR中叫heading):就是绕z轴转动的角度(顺时针为正),0度=正北,(假设Y轴指向地磁正北方);90度=正东;180度=正南;270度=正西。
pitch仰俯:绕X轴转动的角度(-180<=pitch<=180), 如果设备水平放置,前方向下俯就是正;前方向上仰就是负值。
roll滚转:绕Y轴转动(-90<=roll<=90),向左翻滚是正值。

Sample Rate(Output Data Rate,ODR):
ACC:50/100 Hz(PDR和指南针用100 Hz,其它场景切换到50 Hz)
MAG:25 Hz
GRYO:100 Hz
poll_interval为轮训周期,即odr输出速率的倒数1000 / odr(单位是ms)

DCM:Direction Cosine Matrix(参看四元数与旋转矩阵)

2.3.1 角速率零点漂移
将陀螺仪放置在水平的桌面上,读出(x0, y0, z0)这3个值,即为3个轴的0点漂移;运动状态读出的值(x, y, z)需要减去0点漂移的值,再做离散点积分计算。

零点漂移不断修正的公式:
gOffset = EMAOFFSET * gyroRaw + (1 - EMAOFFSET) * gOffset;
gyroSpeed = gyroRaw - gOffset;
gAngleGlobal += gyroSpeed * tInterval;
gyroAngle = gAngleGlobal;

其中EMAOFFSET = 0.0005
说明漂移也一直在修正。

2.3.2 陀螺仪积分
陀螺仪积分原理是使用离散点积分,根据ODR(Output Data Rate)的倒数,可以算出2个点的时间间隔(dt = 1 / ODR),将读取到的x或者y或者z减去offset(0点漂移)后乘以时间间隔(dt = 1 / ODR)即是2点之间的积分,加上上一次的旋转角度,就是新的角度。

例子:
#include <Wire.h>
#include <L3G4200D.h>
#define EMAoffset 0.05
#define Gyr_Gain 0.076335877862595  // 1/131,250dps
float angleG;
float G_offset;
float gyroSpeed;
unsigned long timer = 0;

L3G4200D gyro;

void setup() {
    Serial.begin(9600);
    Wire.begin();
    gyro.enableDefault();
    delay(500);
}

void loop() {
    long o_timer = timer;
    timer = millis();
    int dt = timer - o_timer;
    gyro.read();
    G_offset = EMAoffset *(gyro.g.x - 55) / 131 + (1-EMAoffset) * G_offset;
    gyroSpeed = (gyro.g.x - 55) / 131 - G_offset;
    angleG = angleG + gyroSpeed * dt / 1000;
    Serial.print("angle_x: ");
    Serial.print(angleG,6);
    Serial.println(";");   
    delay(100);
}

积分运算的累积误差:
PITCH/ROLL角速度积分->PITCH/ROLL姿态角,再结合加速度纠正累积误差。
AZIMUTH(YAW)角速度积分->方向角,再结合地磁传感器、GPS纠正累积误差。

2.3.3 URLs
简单介绍一下用加速度传感器修正角速度传感器(陀螺仪)累计误差的原理
https://blog.csdn.net/djimon/article/details/5815860

2.4 Magnetic(磁力计)
unit:microtesla
寄存器读出来的16bit_ADC值 (x, y, z),16bit_ADC是无符号数,换算成uT,分成3步。
第一步,无符号的16bit_ADC值范围是[0,65536],转换到有符号数,就是16bit_ADC-32768后的,范围就是[-32768,32768]
第二步,得出Gauss:((16bit_ADC - 32768)/ 1024),就是1Gauss的变化,需要ADC的值变化1024
第三步,得出uT:((16bit_ADC - 32768)/ 1024) * 100

 

地磁场是一个矢量,对于一个固定的地点来说,这个矢量可以被分解为两个与当地水平面平行的分量和一个与当地水平面垂直的分量。如果保持电子罗盘和当地的水平面平行,那么罗盘中磁力计的三个轴就和这三个分量对应起来,如下图所示。

 

实际上对水平方向的两个分量来说,他们的矢量和总是指向磁北的。罗盘中的航向角(Azimuth)就是当前方向和磁北的夹角。由于罗盘保持水平,只需要用磁力计水平方向两轴(通常为X轴和Y轴)的检测数据就可以计算出航向角。当罗盘水平旋转的时候,航向角在0°- 360°之间变化。

磁力计会上报 (x, y, z, accuracy),其中accuracy的范围在0-3之间,数字越大越精确,低了需要做8字校准。
采集地磁三个轴的数据,通过画八字的形式,用MATLAB做个空间球,未校准的数据是个椭球,校准后就是个球了。椭球或者球对应点的直径(三个轴的合成磁场强度)是sqrt(x*x + y*y + z*z)。

2.5 方位传感器(Orientation Sensors)


Android指南针应用就是用的这个类型。
这个传感器是virtual sensor,是通过Magnetic的 (x, y, z, accuracy) 计算出来的,其中azimuth作为指南针应用的指针方向来源。
azimuth方位角(PDR中叫heading):就是绕z轴转动的角度(顺时针为正),0度=正北,(假设Y轴指向地磁正北方);90度=正东;180度=正南;270度=正西。
pitch仰俯:绕X轴转动的角度 (-180<=pitch<=180), 如果设备水平放置,前方向下俯就是正;前方向上仰就是负值。
roll滚转:绕Y轴转动(-90<=roll<=90),向左翻滚是正值。

Android上报的3个数据格式如下所示(APR):
values[0]:azimuth, rotation around the Z axis
values[1]:pitch, rotation around the X axis
values[2]:roll, rotation around the Y axis

2.6 URLs
2.6.1 四元数与旋转矩阵
四元数AHRS姿态解算和IMU姿态解算分析
https://blog.csdn.net/xiaoxie613520/article/details/78227170

加速度计补偿陀螺仪漂移的原理
http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/

3 其他Sensor
3.1 心率
Beats Per Minute,每分钟心跳次数
3.1.1 光学HRM(心率监控)
IC:台湾原相
光学传感器(2个绿光LED和一个红外LED)会产生PPG1和TOUCH两个数据,基于这2个数据,计算得出HRM和TAKE_OFF数据。
HRM融合了G-sensor和光学传感器PPG1的数据。
TAKE_OFF(从手腕上脱下手表)检测是用G-sensor和红外TOUCH的数据计算而得。
SLEEPING检测是用G-sensor与HRM数据计算而得。

3.1.2 ECG(美国叫EKG,心电图,双电极技术)
IC:NeuroSky(神念科技)BMD101
aVR:augmented Voltage Right Hand,心电导联的一种接法
医疗器械三巨头:GE、飞利浦、西门子(GPS)

穿戴类ECG仅显示单通道心电图(第一导联,Lead I ECG)

3.1.3 HRV
HRV是指Heart Rate Variability(心率变异性),HRV的单位是ms(毫秒),HRV特指心跳时间间隔的微小变化。心率变异性变化越大,表明自主神经系统对身体协调作用越好、身体具备更多的活力。测量心率变异性(HRV)可以直观反映一个人的身体健康状况,并且也能够判断目前的训练方式对改善身体状态是否有效。
Figure 3-1 ECG心电图各种波段解析

Figure 3-2 RR间期、JJ间期和PP间期

Figure 3-3 2个不同的HRV比较

Figure 3-4 HRV测量的散点图

3.1.4 URLs
名副其实,专业级可穿戴设备参考方案——佳明Forerunner 630运动手表拆解
http://www.eeboard.com/teardown/garmin630/

佳明Forerunner 235拆解,超长待机、支持防水
http://www.eeboard.com/teardown/forerunner-235/2/

GARMIN 佳明 fenix3 HR 小银人(含拆解)
https://post.smzdm.com/p/595994/

3.2 Pressure(气压计)
单位hPa(hundred Pa,Android就是用这个:hardware/*/sensors.h),100帕斯卡
0.12 hPa = 1米

3.3 PDR(室内定位)
根据GPS输入的值(经度,维度,地面速度m/sec,定位精度GPACCURACY,真北True方位角-顺时针为正),sensorhub或者sensor fusion库返回经度和维度作为PDR的输出值。一般情况是GPS喂一次数据,sensorhub预测并给出接下来的几个GPS点。GPS不喂数据,sensorhub也不吐数据。
Cywee CMH1000 sensorhub(224KB DRAM,336KB IRAM,SRAM电压是1V)带有这个算法。
PDR实现方式
https://wenku.baidu.com/view/f2675c3010661ed9ad51f355.html

3.4 Sedentary reminder(久坐提醒)
Probability of sedentary reminder, the value range is from 0 to 100.
久坐一般由MMI层预设一个时间下到sensorhub中去,时间unit: minute
久坐的算法:一般是如果在触发时间到之前(譬如1小时),有累计行走一分钟就会解除久坐,并重新计算时间(还是按照1小时计算)。

3.5 Sleep
3.5.1 Sleep Cycle
睡眠监测过程分为:Awake、Light Sleep、Deep Sleep、REM(清醒、轻度睡眠、深度睡眠和快速动眼睡眠)
Sleep Cycle:睡眠质量(百分数),(快速动眼睡眠 + 深度睡眠) / 总睡眠

夜晚会翻身的那些时间就是睡眠质量不好(Light Sleep)的时间,算法将它扣除后,剩下的就是实打实睡眠质量好(快速动眼睡眠 + 深度睡眠)的时间段。

3.5.2 算法
主要判断入睡和出睡满足的条件。
包括SLEEP和SLEEP_STAGING(SLEEPING)
SLEEP:纯粹由G-sensor的数据计算而得
SLEEP_STAGING(SLEEPING):融合了G-sensor、光学传感器PPG1和BISI(Beat Interval and Signal Integrity detection)的数据;半小时以上的低运动量才会触发SLEEP_STAGING测量人的睡眠状态(进入睡眠、浅度睡眠、深度睡眠、状态切换或起床、结束睡眠);睡眠数据的几种状态都存储在sensorhub中(起床时会集中一次上报),如果中途有起床方便之类的(这个也会报一次数据),只要时间不大于30分钟,算法会认为仍然是一次睡眠过程,将起床前后的2个时间段一起计算睡眠数据。

SLEEPING算法需要data-time,这个需要每天都写入SLEEPING算法中。

睡眠状态值:
0:入睡,enter sleep
1:浅睡,light sleep
2:深睡,deep sleep
3:清醒或翻身,awake/stat change
4:出睡,leave sleep

3.6 Watch Hand up and down(抬手亮屏)
与之相类似的还有Android tilt和wrist传感器。
有2种实现方式:
- 使用ACC实现,需要分左右手,功耗较小
- 使用GYRO实现,不分左右手,功耗较大,很多GYRO启动后,最大耗流能达到1mA

3.7 血氧计(oximeter)
血氧饱和度(SpO2)是医学界最新确立的衡量人体健康与否的指标,用于标注动脉血液中氧合血红蛋白占总血红蛋白的比值。健康人群的血氧饱和度普遍在94%以上,脉搏在60到100之间。

代码中一般使用PPG2表示,PPG1表示的是光学心率的原始数据。一般使用红光LED来测量。

3.8 颗粒物传感器
测量颗粒物的等效粒径及单位体积内不同粒径的颗粒物数量。
主要输出数据一是PMx.x下的浓度,单位是ug/m3;二是表示0.1升空气中直径在x.x微米以上颗粒物个数。

3.9 湿度传感器
绝对湿度:每立方米大气所含水汽的克数来表示,单位为g/m3。
相对湿度:通常把大气的绝对湿度跟当时气温下饱和水汽压的百分比称为大气相对湿度,用%RH(Relative Humidity)表示,若大气中所含水汽的压强等于当时气温下的饱和水汽压时,这是大气的相对湿度等于100%RH。

4 URLs
博世BMI160六轴传感器I2C通信配置
https://blog.csdn.net/zzfenglin/article/details/52512871

linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)
https://blog.csdn.net/radianceblau/article/details/76180915

如何portingADSP中的sensor
https://blog.csdn.net/u011006622/article/details/54598426

高通平台android 环境配置编译及开发经验总结
https://blog.csdn.net/beyondioi/article/details/18675055

5 Abbreviations
AHRS:Automatic Heading Reference System,自动航向基准系统,广泛应用于四轴飞行器上
BISI:Beat interval (BI) and signal integrity (SI) detection. The BI is computed based on subtracting the peak position of the successive PPG beats. The SI is an indicator to identify the PPG signal integrity.
DDF:Device Driver Framework
EEG:Electroencephalography (EEG) is an electrophysiological monitoring method to record electrical activity of the brain.
EKG:Electrocardiography (ECG or EKG) is the process of recording the electrical activity of the heart over a period of time using electrodes placed on a patient's body.
EMG:Electromyography (EMG) is an electrodiagnostic medicine technique for evaluating and recording the electrical activity produced by skeletal muscles.
FSR:Full Scale Ranges,满量程范围
GSR:Galvanic skin response (GSR) is an electrophysiological monitoring method to record conductance of the skin.
HRV:Heart Rate Variability,心率变异性,需要ECG测量加算法
IMU:Inertial Measurement Units
MPU6050 DMP:Digital Motion Processing,数字运动处理器
ODR:Output Data Rate,for sensors sample rate(poll_interval = 1 / ODR),或者Output Data Register(STM32 GPIO)
PDR:Pedestrian dead reckoning, calculating one's current position by using a previously determined position or fix, and advancing that position based upon known or estimated speeds over elapsed time and course.
PPG:Photoplethysmogram (PPG) is an optical volumetric measurement of an organ. By illuminating skin with LED, the PPG is measured from the light transmitted or reflected to photodiode.

这篇关于Sensors基础知识---的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273323

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

Gitflow基础知识

0.理想状态 现状 听完后的理想状态 没使用过 git 知道 git 是什么,会用 git 基础流程命令 用过 git,但只通过图形化界面操作 脱离图形化界面操作,通过 git 命令操作 会 git 命令 掌握 gitflow 规范,合理使用 rebase 和解决代码冲突问题 1.Git 的基础流程&命令 1.1 基础概念 工作区:代码生产基地,pycharm

[JAVA基础知识汇总-1] 创建线程的几种方式

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 线程池 可以认为有四种方式,也可以认为有一种,因为都跟Runnable接口有关 1. 继承Thread类 代码 public class Thread1ExtendsThread extends Thread {// public Thread1(String n