Intel sensor что это
Перейти к содержимому

Intel sensor что это

  • автор:

Все в порядке, но.

Этот текст мало кто будет читать и мы можем написать здесь все, что угодно, например.
Вы живете в неведении. Роботы уже вторглись в нашу жизнь и быстро захватывают мир, но мы встали на светлый путь и боремся за выживание человечества. А если серьезно, то.

В целях обеспечения безопасности сайта от кибератак нам необходимо убедиться, что вы человек. Если данная страница выводится вам часто, есть вероятность, что ваш компьютер заражен или вы используете для доступа IP адрес зараженных компьютеров.

Если это ваш частный компьютер и вы пытаетесь зайти на сайт, например, из дома — мы рекомендуем вам проверить ваш компьютер на наличие вирусов.

Если вы пытаетесь зайти на сайт, например, с работы или открытых сетей — вам необходимо обратиться с системному администратору и сообщить, что о возможном заражении компьютеров в вашей сети.

  • © 2005-2023, «4PDA». 4PDA® — зарегистрированный товарный знак.

Intel Integrated Sensor Hub (ISH)¶

A sensor hub enables the ability to offload sensor polling and algorithm processing to a dedicated low power co-processor. This allows the core processor to go into low power modes more often, resulting in increased battery life.

There are many vendors providing external sensor hubs conforming to HID Sensor usage tables. These may be found in tablets, 2-in-1 convertible laptops and embedded products. Linux has had this support since Linux 3.9.

Intel® introduced integrated sensor hubs as a part of the SoC starting from Cherry Trail and now supported on multiple generations of CPU packages. There are many commercial devices already shipped with Integrated Sensor Hubs (ISH). These ISH also comply to HID sensor specification, but the difference is the transport protocol used for communication. The current external sensor hubs mainly use HID over I2C or USB. But ISH doesn’t use either I2C or USB.

1. Overview¶

Using a analogy with a usbhid implementation, the ISH follows a similar model for a very high speed communication:

----------------- ---------------------- | USB HID | --> | ISH HID | ----------------- ---------------------- ----------------- ---------------------- | USB protocol | --> | ISH Transport | ----------------- ---------------------- ----------------- ---------------------- | EHCI/XHCI | --> | ISH IPC | ----------------- ---------------------- PCI PCI ----------------- ---------------------- |Host controller| --> | ISH processor | ----------------- ---------------------- USB Link ----------------- ---------------------- | USB End points| --> | ISH Clients | ----------------- ----------------------

Like USB protocol provides a method for device enumeration, link management and user data encapsulation, the ISH also provides similar services. But it is very light weight tailored to manage and communicate with ISH client applications implemented in the firmware.

The ISH allows multiple sensor management applications executing in the firmware. Like USB endpoints the messaging can be to/from a client. As part of enumeration process, these clients are identified. These clients can be simple HID sensor applications, sensor calibration applications or sensor firmware update applications.

The implementation model is similar, like USB bus, ISH transport is also implemented as a bus. Each client application executing in the ISH processor is registered as a device on this bus. The driver, which binds each device (ISH HID driver) identifies the device type and registers with the HID core.

2. ISH Implementation: Block Diagram¶

--------------------------- | User Space Applications | --------------------------- ----------------IIO ABI---------------- -------------------------- | IIO Sensor Drivers | -------------------------- -------------------------- | IIO core | -------------------------- -------------------------- | HID Sensor Hub MFD | -------------------------- -------------------------- | HID Core | -------------------------- -------------------------- | HID over ISH Client | -------------------------- -------------------------- | ISH Transport (ISHTP) | -------------------------- -------------------------- | IPC Drivers | -------------------------- OS ---------------- PCI ----------------- Hardware + Firmware ---------------------------- | ISH Hardware/Firmware(FW) | ----------------------------

3. High level processing in above blocks¶

3.1 Hardware Interface¶

The ISH is exposed as «Non-VGA unclassified PCI device» to the host. The PCI product and vendor IDs are changed from different generations of processors. So the source code which enumerates drivers needs to update from generation to generation.

3.2 Inter Processor Communication (IPC) driver¶

The IPC message uses memory mapped I/O. The registers are defined in hw-ish-regs.h.

3.2.1 IPC/FW message types¶

There are two types of messages, one for management of link and another for messages to and from transport layers.

TX and RX of Transport messages¶

A set of memory mapped register offers support of multi-byte messages TX and RX (e.g. IPC_REG_ISH2HOST_MSG, IPC_REG_HOST2ISH_MSG). The IPC layer maintains internal queues to sequence messages and send them in order to the firmware. Optionally the caller can register handler to get notification of completion. A doorbell mechanism is used in messaging to trigger processing in host and client firmware side. When ISH interrupt handler is called, the ISH2HOST doorbell register is used by host drivers to determine that the interrupt is for ISH.

Each side has 32 32-bit message registers and a 32-bit doorbell. Doorbell register has the following format:

Bits 0..6: fragment length (7 bits are used) Bits 10..13: encapsulated protocol Bits 16..19: management command (for IPC management protocol) Bit 31: doorbell trigger (signal H/W interrupt to the other side) Other bits are reserved, should be 0.
3.2.2 Transport layer interface¶

To abstract HW level IPC communication, a set of callbacks is registered. The transport layer uses them to send and receive messages. Refer to struct ishtp_hw_ops for callbacks.

3.3 ISH Transport layer¶

3.3.1 A Generic Transport Layer¶

The transport layer is a bi-directional protocol, which defines: — Set of commands to start, stop, connect, disconnect and flow control (see ishtp/hbm.h for details) — A flow control mechanism to avoid buffer overflows

This protocol resembles bus messages described in the following document: http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/dcmi-hi-1-0-spec.pdf «Chapter 7: Bus Message Layer»

3.3.2 Connection and Flow Control Mechanism¶

Each FW client and a protocol is identified by a UUID. In order to communicate to a FW client, a connection must be established using connect request and response bus messages. If successful, a pair (host_client_id and fw_client_id) will identify the connection.

Once connection is established, peers send each other flow control bus messages independently. Every peer may send a message only if it has received a flow-control credit before. Once it has sent a message, it may not send another one before receiving the next flow control credit. Either side can send disconnect request bus message to end communication. Also the link will be dropped if major FW reset occurs.

3.3.3 Peer to Peer data transfer¶

Peer to Peer data transfer can happen with or without using DMA. Depending on the sensor bandwidth requirement DMA can be enabled by using module parameter ishtp_use_dma under intel_ishtp.

Each side (host and FW) manages its DMA transfer memory independently. When an ISHTP client from either host or FW side wants to send something, it decides whether to send over IPC or over DMA; for each transfer the decision is independent. The sending side sends DMA_XFER message when the message is in the respective host buffer (TX when host client sends, RX when FW client sends). The recipient of DMA message responds with DMA_XFER_ACK, indicating the sender that the memory region for that message may be reused.

DMA initialization is started with host sending DMA_ALLOC_NOTIFY bus message (that includes RX buffer) and FW responds with DMA_ALLOC_NOTIFY_ACK. Additionally to DMA address communication, this sequence checks capabilities: if the host doesn’t support DMA, then it won’t send DMA allocation, so FW can’t send DMA; if FW doesn’t support DMA then it won’t respond with DMA_ALLOC_NOTIFY_ACK, in which case host will not use DMA transfers. Here ISH acts as busmaster DMA controller. Hence when host sends DMA_XFER, it’s request to do host->ISH DMA transfer; when FW sends DMA_XFER, it means that it already did DMA and the message resides at host. Thus, DMA_XFER and DMA_XFER_ACK act as ownership indicators.

At initial state all outgoing memory belongs to the sender (TX to host, RX to FW), DMA_XFER transfers ownership on the region that contains ISHTP message to the receiving side, DMA_XFER_ACK returns ownership to the sender. A sender need not wait for previous DMA_XFER to be ack’ed, and may send another message as long as remaining continuous memory in its ownership is enough. In principle, multiple DMA_XFER and DMA_XFER_ACK messages may be sent at once (up to IPC MTU), thus allowing for interrupt throttling. Currently, ISH FW decides to send over DMA if ISHTP message is more than 3 IPC fragments and via IPC otherwise.

3.3.4 Ring Buffers¶

When a client initiates a connection, a ring of RX and TX buffers is allocated. The size of ring can be specified by the client. HID client sets 16 and 32 for TX and RX buffers respectively. On send request from client, the data to be sent is copied to one of the send ring buffer and scheduled to be sent using bus message protocol. These buffers are required because the FW may have not have processed the last message and may not have enough flow control credits to send. Same thing holds true on receive side and flow control is required.

3.3.5 Host Enumeration¶

The host enumeration bus command allows discovery of clients present in the FW. There can be multiple sensor clients and clients for calibration function.

To ease implementation and allow independent drivers to handle each client, this transport layer takes advantage of Linux Bus driver model. Each client is registered as device on the transport bus (ishtp bus).

Enumeration sequence of messages:

  • Host sends HOST_START_REQ_CMD, indicating that host ISHTP layer is up.
  • FW responds with HOST_START_RES_CMD
  • Host sends HOST_ENUM_REQ_CMD (enumerate FW clients)
  • FW responds with HOST_ENUM_RES_CMD that includes bitmap of available FW client IDs
  • For each FW ID found in that bitmap host sends HOST_CLIENT_PROPERTIES_REQ_CMD
  • FW responds with HOST_CLIENT_PROPERTIES_RES_CMD. Properties include UUID, max ISHTP message size, etc.
  • Once host received properties for that last discovered client, it considers ISHTP device fully functional (and allocates DMA buffers)

3.4 HID over ISH Client¶

The ISHTP client driver is responsible for:

  • enumerate HID devices under FW ISH client
  • Get Report descriptor
  • Register with HID core as a LL driver
  • Process Get/Set feature request
  • Get input reports

3.5 HID Sensor Hub MFD and IIO sensor drivers¶

The functionality in these drivers is the same as an external sensor hub. Refer to HID Sensors Framework for HID sensor Documentation/ABI/testing/sysfs-bus-iio for IIO ABIs to user space.

3.6 End to End HID transport Sequence Diagram¶

HID-ISH-CLN ISHTP IPC HW | | | | | | |-----WAKE UP------------------>| | | | | | | |-----HOST READY--------------->| | | | | | | || | | | | | |------------------HOST_ENUM_REQ_CMD------------------->| | | | | | |<-----------------HOST_ENUM_RES_CMD--------------------| | | | | | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| | | | | | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| | Create new device on in ishtp bus | | | | | | | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| | | | | | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| | Create new device on in ishtp bus | | | | | | | |--Repeat HOST_CLIENT_PROPERTIES_REQ_CMD-till last one--| | | | | probed() |----ishtp_cl_connect--->|----------------- CLIENT_CONNECT_REQ_CMD-------------->| | | | | | |<----------------CLIENT_CONNECT_RES_CMD----------------| | | | | |register event callback | | | | | | | |ishtp_cl_send( HOSTIF_DM_ENUM_DEVICES) |----------fill ishtp_msg_hdr struct write to HW----- >| | | | | | | |<-----IRQ(IPC_PROTOCOL_ISHTP---| | | | | |<--ENUM_DEVICE RSP------| | | | | | | for each enumerated device |ishtp_cl_send( HOSTIF_GET_HID_DESCRIPTOR|----------fill ishtp_msg_hdr struct write to HW----- >| | | | | . Response | | | | for each enumerated device |ishtp_cl_send( HOSTIF_GET_REPORT_DESCRIPTOR|--------------fill ishtp_msg_hdr struct write to HW-- >| | | | | | | | | hid_allocate_device | | | | hid_add_device | | | | | | |

3.7 ISH Debugging¶

To debug ISH, event tracing mechanism is used. To enable debug logs:

echo 1 > /sys/kernel/tracing/events/intel_ish/enable cat /sys/kernel/tracing/trace

3.8 ISH IIO sysfs Example on Lenovo thinkpad Yoga 260¶

root@otcpl-ThinkPad-Yoga-260:~# tree -l /sys/bus/iio/devices/ /sys/bus/iio/devices/ ├── iio:device0 -> ../../../devices/0044:8086:22D8.0001/HID-SENSOR-200073.9.auto/iio:device0 │ ├── buffer │ │ ├── enable │ │ ├── length │ │ └── watermark . │ ├── in_accel_hysteresis │ ├── in_accel_offset │ ├── in_accel_sampling_frequency │ ├── in_accel_scale │ ├── in_accel_x_raw │ ├── in_accel_y_raw │ ├── in_accel_z_raw │ ├── name │ ├── scan_elements │ │ ├── in_accel_x_en │ │ ├── in_accel_x_index │ │ ├── in_accel_x_type │ │ ├── in_accel_y_en │ │ ├── in_accel_y_index │ │ ├── in_accel_y_type │ │ ├── in_accel_z_en │ │ ├── in_accel_z_index │ │ └── in_accel_z_type . │ │ ├── devices │ │ │ │ ├── buffer │ │ │ │ │ ├── enable │ │ │ │ │ ├── length │ │ │ │ │ └── watermark │ │ │ │ ├── dev │ │ │ │ ├── in_intensity_both_raw │ │ │ │ ├── in_intensity_hysteresis │ │ │ │ ├── in_intensity_offset │ │ │ │ ├── in_intensity_sampling_frequency │ │ │ │ ├── in_intensity_scale │ │ │ │ ├── name │ │ │ │ ├── scan_elements │ │ │ │ │ ├── in_intensity_both_en │ │ │ │ │ ├── in_intensity_both_index │ │ │ │ │ └── in_intensity_both_type │ │ │ │ ├── trigger │ │ │ │ │ └── current_trigger . │ │ │ │ ├── buffer │ │ │ │ │ ├── enable │ │ │ │ │ ├── length │ │ │ │ │ └── watermark │ │ │ │ ├── dev │ │ │ │ ├── in_magn_hysteresis │ │ │ │ ├── in_magn_offset │ │ │ │ ├── in_magn_sampling_frequency │ │ │ │ ├── in_magn_scale │ │ │ │ ├── in_magn_x_raw │ │ │ │ ├── in_magn_y_raw │ │ │ │ ├── in_magn_z_raw │ │ │ │ ├── in_rot_from_north_magnetic_tilt_comp_raw │ │ │ │ ├── in_rot_hysteresis │ │ │ │ ├── in_rot_offset │ │ │ │ ├── in_rot_sampling_frequency │ │ │ │ ├── in_rot_scale │ │ │ │ ├── name . │ │ │ │ ├── scan_elements │ │ │ │ │ ├── in_magn_x_en │ │ │ │ │ ├── in_magn_x_index │ │ │ │ │ ├── in_magn_x_type │ │ │ │ │ ├── in_magn_y_en │ │ │ │ │ ├── in_magn_y_index │ │ │ │ │ ├── in_magn_y_type │ │ │ │ │ ├── in_magn_z_en │ │ │ │ │ ├── in_magn_z_index │ │ │ │ │ ├── in_magn_z_type │ │ │ │ │ ├── in_rot_from_north_magnetic_tilt_comp_en │ │ │ │ │ ├── in_rot_from_north_magnetic_tilt_comp_index │ │ │ │ │ └── in_rot_from_north_magnetic_tilt_comp_type │ │ │ │ ├── trigger │ │ │ │ │ └── current_trigger . │ │ │ │ ├── buffer │ │ │ │ │ ├── enable │ │ │ │ │ ├── length │ │ │ │ │ └── watermark │ │ │ │ ├── dev │ │ │ │ ├── in_anglvel_hysteresis │ │ │ │ ├── in_anglvel_offset │ │ │ │ ├── in_anglvel_sampling_frequency │ │ │ │ ├── in_anglvel_scale │ │ │ │ ├── in_anglvel_x_raw │ │ │ │ ├── in_anglvel_y_raw │ │ │ │ ├── in_anglvel_z_raw │ │ │ │ ├── name │ │ │ │ ├── scan_elements │ │ │ │ │ ├── in_anglvel_x_en │ │ │ │ │ ├── in_anglvel_x_index │ │ │ │ │ ├── in_anglvel_x_type │ │ │ │ │ ├── in_anglvel_y_en │ │ │ │ │ ├── in_anglvel_y_index │ │ │ │ │ ├── in_anglvel_y_type │ │ │ │ │ ├── in_anglvel_z_en │ │ │ │ │ ├── in_anglvel_z_index │ │ │ │ │ └── in_anglvel_z_type │ │ │ │ ├── trigger │ │ │ │ │ └── current_trigger . │ │ │ │ ├── buffer │ │ │ │ │ ├── enable │ │ │ │ │ ├── length │ │ │ │ │ └── watermark │ │ │ │ ├── dev │ │ │ │ ├── in_anglvel_hysteresis │ │ │ │ ├── in_anglvel_offset │ │ │ │ ├── in_anglvel_sampling_frequency │ │ │ │ ├── in_anglvel_scale │ │ │ │ ├── in_anglvel_x_raw │ │ │ │ ├── in_anglvel_y_raw │ │ │ │ ├── in_anglvel_z_raw │ │ │ │ ├── name │ │ │ │ ├── scan_elements │ │ │ │ │ ├── in_anglvel_x_en │ │ │ │ │ ├── in_anglvel_x_index │ │ │ │ │ ├── in_anglvel_x_type │ │ │ │ │ ├── in_anglvel_y_en │ │ │ │ │ ├── in_anglvel_y_index │ │ │ │ │ ├── in_anglvel_y_type │ │ │ │ │ ├── in_anglvel_z_en │ │ │ │ │ ├── in_anglvel_z_index │ │ │ │ │ └── in_anglvel_z_type │ │ │ │ ├── trigger │ │ │ │ │ └── current_trigger .

Повышение удобства работы с Android-приложениями: распознавание жестов и не только

Пользователь перевернул телефон, когда поступил входящий вызов? Уберём звук. Устройство подняли так, будто хотят сделать фото? Включим, если за нас это ещё не сделали по старинке, камеру. Как? Сенсоры нам в помощь.

image

Обзор

В мобильных устройствах обычно присутствует немало сенсоров. Среди них можно найти акселерометр, гироскоп, магнетометр, барометр, датчик освещенности и другие.

Владельцы смартфонов и планшетов физически взаимодействуют с ними: перемещают, встряхивают, наклоняют. Сведения, которые поступают при этом от различных датчиков, вполне подходят для распознавания действий, происходящих в физическом мире. Когда же действие распознано, на него можно отреагировать. Использование показаний сенсоров при разработке приложений позволяет оснащать программы по-настоящему удобными функциями, которые не оставят пользователей равнодушными.

С выходом Intel Context Sensing SDK для Android* v1.6.7 у создателей приложений появилась возможность работать с несколькими новыми типами контекстно-зависимых данных. То есть – данных, основанных на сведениях об окружении и о действиях пользователя. Среди них – положение устройства в пространстве (position), подъём его к уху, как при начале разговора (ear touch), быстрое перемещение с возвратом в исходную позицию (flick). Не стоит путать жест перемещения в пространстве с одноимённым flick’ом, имеющим отношение к работе с сенсорным дисплеем. Так же новая библиотека поддерживает распознавание рисования устройством различных символов (glyph) в воздухе.

Из этого материала вы узнаете, как извлечь из показаний сенсоров ценные сведения о том, что происходит с устройством. Кроме того, мы рассмотрим примеры использования Context Sensing SDK в деле детектирования перемещений, встряхиваний устройства и распознавания символов.

Однако, Context Sensing SDK, даже если ограничиться вопросами пространственного положения устройства, может намного больше. Например – определить, какой именно физической деятельностью занят пользователь. Он идёт пешком, отдыхает, едет на велосипеде? А может, бегает, путешествует на машине или на поезде? Обладая такими сведениями о происходящем, можно вывести взаимодействие пользователя и его мобильного устройства, на котором установлено ваше приложение, на совершенно новый уровень.

Предварительные сведения

Обычный вопрос, который возникает при работе с датчиками, состоит в их соединении с процессором приложений (application processor, AP) на аппаратном уровне. Ниже вы можете видеть три способа подключения. А именно, это прямое подключение, использование выделенного концентратора датчиков (discrete sensor hub) и встроенного в процессор концентратора (integrated sensor hub, ISH).

Сравнение различных подходов к сопряжению датчиков с процессором приложений.

Если датчики присоединяются напрямую к AP, это называется прямым подключением. Однако здесь есть одна проблема. Заключается она в том, что датчики потребляют ресурсы процессора для выполнения измерений.

Следующий, более совершенный способ, заключается в использовании выделенного концентратора датчиков. В результате датчики могут работать постоянно, не перегружая процессор. Даже если процессор переходит в спящий режим (S3), концентратор датчиков может «разбудить» его, используя механизм прерываний.

Следующий шаг развития взаимодействия процессоров и датчиков состоит в использовании встроенного концентратора. Это, кроме прочих преимуществ, приводит к уменьшению количества используемых дискретных компонентов и к снижению стоимости устройства.
Концентратор датчиков – это, по сути, микрочип, служащий для организации сопряжения множества устройств (Multipoint Control Unit, MCU). Для него можно писать программы на языках C/C++ и загружать скомпилированный код в MCU.

В 2015 году Intel выпускает платформу CherryTrail-T, предназначенную для планшетов, и платформу SkyLake, рассчитанную на устройства «два в одном». Эти решения используют концентраторы датчиков. Подробнее об интегрированных концентраторах вы можете узнать, пройдя по ссылке.

Ниже системы координат сенсоров. В частности, здесь показан акселерометр, который способен измерять ускорение по осям X, Y и Z, и гироскоп, отслеживающий положение устройства в пространстве, в частности – повороты вокруг тех же осей.

Системы координат акселерометра и гироскопа.

Значения ускорения по осям акселерометра при различных положениях устройства в состоянии покоя. Читать в PDF , без регистрации и смс.

В таблице приведены новые события, вызываемые физическими перемещениями устройств, включённые в ОС Android Lollipop.

Новые события, поддерживаемые в Android Lollipop

Название Описание
SENSOR_STRING_TYPE_PICK_UP_GESTURE Вызывается, когда устройство берут в руку, независимо от того, где оно было до этого (на столе, в кармане, в сумке)
SENSOR_STRING_TYPE_GLANCE_GESTURE Позволяет, основываясь на специфическом движении, включить на короткое время экран для того, чтобы пользователь мог взглянуть на него.
SENSOR_STRING_TYPE_WAKE_GESTURE Позволяет разблокировать устройство, основываясь на определенном перемещении этого устройства в пространстве.
SENSOR_STRING_TYPE_TILT_DETECTOR Соответствующие событие генерируется каждый раз при наклоне устройства.

Определение этих событий можно найти в папке с исходным кодом Android Lollipop: /hardware/libhardware/include/hardware/sensor.h.

Процесс распознавания жестов

Процесс распознавания жестов можно разделить на следующие стадии: предварительная обработка исходных данных (preprocessing), выделение характерных признаков (feature extraction) и сравнение с шаблонами (template matching).

Процесс распознавания жестов.

Рассмотрим стадии процесса распознавания жестов подробнее.

Предварительная обработка исходных данных

Предварительная обработка начинается после того, как исходные данные (raw data) получены с сенсора. Ниже вы можете видеть графическое представление данных, полученных с гироскопа после того, как устройство было один раз быстро наклонено вправо и возвращено в прежнее состояние (жест flick). Далее показан график для аналогичного жеста, но уже построенный по данным, полученным с акселерометра.

Данные, полученные с гироскопа (однократный наклон устройства вправо и быстрый возврат в исходное положение, RIGHT FLICK ONCE).

Данные, полученные с акселерометра (однократный наклон устройства вправо и быстрый возврат в исходное положение, RIGHT FLICK ONCE).

Можно создать программу, которая будет отправлять через сеть данные, полученные с сенсора на Android-устройстве, затем – написать скрипт на Python*, предназначенный для работы на PC. Это позволить получать, например, со смартфона, изменяющиеся данные сенсоров и строить графики.

Итак, на данном шаге задействовано следующее:

  • Компьютер, на котором выполняется Python-скрипт, получающий данные с сенсоров.
  • Приложение, которое выполняется на тестируемом устройстве (DUT-run application). Оно собирает информацию с датчиков и отправляет её по сети.
  • Тестовый мост Android (android debug bridge, ADB), сконфигурированный так, чтобы можно было отправлять данные на устройство и принимать их. При его настройке используется команда вида: adb forward tcp: port tcp: port

Динамическое отображение данных, полученных с датчиков.

На данном этапе мы убираем необычные значения сигналов, и, как это часто делается, используем фильтр для подавления помех. График ниже показывает данные сенсоров, полученные после того, как устройство было повёрнуто на 90°, после чего возвращено в исходное положение.

Устранение ухода гироскопа и шума.

Выделение характерных признаков

В сигнале, который выдаёт сенсор, могут присутствовать шумы, это способно повлиять на результаты распознавания. Например, такие характеристики, как FAR (False Acceptance Rate, коэффициент ложного пропуска) и FRR (False Rejection Rate, коэффициент ложного отказа) показывают уровень возникновения отказов в распознавании сигналов. Объединяя данные различных сенсоров, мы можем повысить точность распознавания событий. Комбинирование данных сенсоров (sensor fusion; раз полезная ссылка и два) нашло применение во многих мобильных устройствах. Ниже показан пример использования акселерометра, магнетометра и гироскопа для получения сведений об ориентации устройства в пространстве. Обычно в процессе выделения характерных признаков сигналов используются метод FFT (Fast Fourier Transform, быстрое преобразование Фурье) и анализ перехода через ноль (zero-crossing). Акселерометр и магнитометр подвержены воздействию электромагнитных излучений. Обычно эти сенсоры нуждаются в калибровке.

Получение сведений об ориентации устройства в пространстве с использованием объединения данных сенсоров.

Характерные признаки сигнала включают в себя минимальные и максимальные значения, пики и впадины. Получив эти сведения, переходим к следующему шагу.

Сравнение с шаблонами

Проанализировав график данных с акселерометра, можно обнаружить следующее:

  • Типичный наклон устройства вправо с возвратом в исходную позицию даёт график с двумя впадинами и одним пиком.
  • Такой же жест, но исполненный дважды, содержит три впадины и два пика.

Графики данных с акселерометра и гироскопа, полученные при однократном или двукратном наклоне устройства с возвратом в исходную позицию.

Примеры: Intel® Context Sensing SDK в действии

Intel Context Sensing SDK использует информацию, получаемую от сенсоров и выступает в качестве поставщика данных для контекстно-ориентированных служб. Ниже вы можете видеть схему архитектуры системы, на которой представлено традиционное приложение и приложение, ориентированное на использование сведений о контексте.

Сравнение Intel Context Sensing SDK и традиционной архитектуры Android.

В настоящий момент SDK поддерживает распознавание символов, которые можно рисовать устройством в воздухе (glyph), жестов наклона с возвратом в исходное состояние (flick) и жеста касания устройством уха (ear_touch). Демонстрация этих функций реализована в примере ContextSensingApiFlowSample, который рассчитан на работу с Android-устройствами.

Для того чтобы испытать этот и другие примеры использования Intel Context Sensing SDK, нужно загрузить Context Sensing SDK, который поставляется в составе Intel Integrated Native Developer Experience (Intel INDE). После загрузки и установки пакета, при условии использования стандартных путей, всё необходимое можно найти по адресу C:\Intel\INDE\context_sdk_1.6.7.x. В частности, здесь имеется JAVA-библиотека intel-context-sensing-1.6.7.x.jar, предназначенная для подключение к Android-проектам, и папка Samples, содержащая код демонстрационных Android-приложений.

Поддержка жеста наклона с возвратом в исходное состояние в Intel Context SDK.

Intel Context Sensing SDK поддерживает распознавание жеста наклона с возвратом в исходное состояние в четырёх направлениях. А именно – наклоны влево, вправо, вверх и вниз.

Поддержка жеста касания уха в Intel Context SDK.

Поддержка рисования символов в воздухе в Intel Context SDK.

Демонстрационное приложение ContextSensingApiFlowSample, использующее Intel Context SDK.

Взглянем теперь на приложение-пример PhysicalActivitySensingSample. Как следует из названия, оно позволяет задействовать возможности Intel Context SDK по распознаванию физической активности пользователя (Activity Recognition). Данные с сенсоров анализируются, после чего система выдаёт прогноз, указывая вероятности для различных видов деятельности в процентах.
Реализован пример в виде Eclipse-проекта. Его можно импортировать в Android Studio, а для того, чтобы код заработал, надо добавить в проект вышеупомянутую библиотеку intel-context-sensing-1.6.7.x.jar и подключить её в build.gradle:

Подготовка проекта PhysicalActivitySensingSample к запуску в Android Studio.

Проект содержит в себе два основных элемента. Первый – Activity, реализующая пользовательский интерфейс. Второй – класс, унаследованный от Application, содержащий несколько вспомогательных внутренних классов. Его основная задача – поддерживать работу с объектом класса com.intel.context.Sensing, к которому мы обращаемся, нажимая на кнопки, и который поставляет сведения о физической активности пользователя.
Испытание проходило на планшете ASUS Fonepad 8, который построен на основе CPU Intel Atom Z3530. После запуска приложения нам понадобятся две кнопки. Сначала надо нажать кнопку Start Daemon, потом – Enable Sensing (соответственно, после завершения экспериментов – Disable Sensing и Stop Daemon). Теперь можно ожидать сообщения со сведениями о том, чем, по мнению программы, мы заняты.

Анализ физической активности пользователя.

В ходе экспериментов планшет был взят на прогулку. Как видно из сообщения, программа предположила, что пользователь, с вероятностью 87%, ходит пешком (параметр WALKING). Если устройство лежит без движения, то система решает, что пользователь отдыхает, устанавливая очень высокий показатель у параметра SEDENTARY (100% при полном отсутствии движения). Если же потрясти и повертеть устройство случайным образом, обычно можно наблюдать довольно высокий показатель параметра RANDOM.

Итоги

Сенсоры широко используются в современных вычислительных системах. Реализованное на их базе распознавание движений, примененное в мобильных устройствах, способно стать ценным конкурентным преимуществом приложений, привлекающим пользователей. Работа с датчиками – это очень важная возможность, которая позволяет значительно повысить удобство использования мобильных устройств и приложений. Недавно выпущенный Intel Context Sensing SDK v1.6.7 позволяет укорить и упростить создание приложений, которые используют данные сенсоров. Это хорошо и для разработчиков, и для тех, кто пользуется их приложениями.

Intel sensor что это

тариф от 0 рублей

Вы размещаете свою продукцию от единицы до тысячи.
У Вас будут заказчики

Продать

Заказчикам

Вы добавляете заказы и находите новых надеждных поставщиков. Поставщики оборудования увидят Вашу заявку.
Заключаете выгодные сделки.

Заказать

Преимущества регистрации на Neftegaz.RU

Удобная покупка / продажа товаров и услуг в различных сферах

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *