JP2011503679A - ロール補償を提供する方法及び装置 - Google Patents
ロール補償を提供する方法及び装置 Download PDFInfo
- Publication number
- JP2011503679A JP2011503679A JP2010526879A JP2010526879A JP2011503679A JP 2011503679 A JP2011503679 A JP 2011503679A JP 2010526879 A JP2010526879 A JP 2010526879A JP 2010526879 A JP2010526879 A JP 2010526879A JP 2011503679 A JP2011503679 A JP 2011503679A
- Authority
- JP
- Japan
- Prior art keywords
- data
- roll
- roll compensation
- controller
- control device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
- G06F3/033—Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor
- G06F3/0346—Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor with detection of the device orientation or free movement in a 3D space, e.g. 3D mice, 6-DOF [six degrees of freedom] pointers using gyroscopes, accelerometers or tilt-sensors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M1/00—Substation equipment, e.g. for use by subscribers
- H04M1/72—Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
- H04M1/724—User interfaces specially adapted for cordless or mobile telephones
- H04M1/72403—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
- H04M1/72409—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality by interfacing with external accessories
- H04M1/72415—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality by interfacing with external accessories for remote control of appliances
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M2250/00—Details of telephonic subscriber devices
- H04M2250/12—Details of telephonic subscriber devices including a sensor for measuring a physical value, e.g. temperature or motion
Abstract
Description
コントローラ200のロール補償特徴を実施するソフトウエアモジュール:
***************************************************************/
外部宣言ファイルの包含(Inclusion of External Declaration Files)
***************************************************************/
#include "project_config.h"
#include <stdio.h>
#include <stdlib.h>
#include "spi.h"
//-------------------------------
// External Function Declarations
//-------------------------------
void Trap (unsigned char);
//-------------------------------
// Local Function Declarations
//-------------------------------
double Dabs(double x);
double Swine(double x);
double Root(double r);
double Get_Theta( double x, double y);
void Gyro_Off (void);
//-------------------------------
// Local Definitions
//-------------------------------
#define PI 3.141592654
#define PIBY2 1.5707963
#define COEFF_1 0.7854
#define COEFF_2 2.3562
#define COEFF_3 1.27323954474
#define COEFF_4 -0.4052847346
#define COEFF_5 0.225
#define READ_X 0x93
#define READ_Y 0xB3
#define ACTIVATE_INTERVAL 5
#define DESK_SENSE_INTERVAL 100
#define DESK_SENSE_PULSE 500
#define ADC_INTERVAL 6
#define GYRO_TIMER_INTERVAL 100
#define GYRO_SCALE_FACTOR 50
#define STEADY_THRESHOLD 20
#define MOTION_NOISE 0 //wmm 10 > 0 for testing
#define STEADY_SAMPLES 10
//#define CT 374//wmm 374 is theoretical center
//#define SPAN 8
#define GUL 406 //wmm G Vector Magnitude qualifier
Upper Limit +16VG
#define GLL 342 //wmm G Vector Magnitude qualifier
Lower Limit +16VG
// CT = 374.374 +/- 64 = 438,310
// CT = 374.374 +/- 32 = 406,342 proto values
// CT = 374.374 +/- 16 = 390,358
// CT = 374.374 +/- 8 = 382,366 = RC too small
#define GVECTOR_ZERO 3.0 //wmm 10*sqrt(Gain_AX)= ~ 15 deg.
/***************************************************************
* 変数記憶(Variable Storage)
****************************************************************/
//extern unsigned char self_steady_done_flag;
unsigned int rest_count_x, rest_count_y;
extern unsigned char Buf[];
signed int gyro_x, gyro_y;
signed int x_min, y_min, x_max, y_max;
signed int ax_min, ay_min, az_min, ax_max, ay_max, az_max;
signed long x_steady, y_steady;
unsigned char num_steady_samples;
signed int x_mickeys, y_mickeys;
unsigned long gyro_timer;
unsigned char turned_on;
signed int accel_x, accel_y, accel_z, gain_sum, sign;
signed int x sum, y_sum, z_sum;
double dax, day, daz;
double theta2, theta3, theta4;
double rrx, rry, rr_mag, gvisya;
double grv_axyz_mag;
double extra_yaw, extra_pitch;
extern unsigned char gyro_state;
//-------------------------------------------
// Gyro Support Routines
//-------------------------------------------
//-------------------------------------------
// Gyro_lnit
//-------------------------------------------
void Gyro_lnit(void)
{
ADC12CTL1 = (AdcClkDiv << 5) | (AdcClkSel << 3) | (CONSEQ0);
ADC12MCTL0 = 0x70;// 0x7x uses AVex as the reference so we are quiter
and temp stability is increased.
ADC12MCTL1 = 0x71 | EOS;
theta3 = 0;//wmm
// grv_axyz_mag_ref = 68;
}
//-------------------------------------------
// Read_XYZ
//-------------------------------------------
void Read_XYZ(void)
{
accel_x = spi_xyz_get (OUT_X_L);
accel_x |= (spi_xyz_get (OUT_X_H)) << 8;
accel y = spi_xyz_get (OUT_Y_L);
accel_y |= (spi_xyz_get (OUT_Y_H)) << 8;
accel_z = spi_xyz_get (OUT_Z_L);
accel_z |= (spi_xyz_get (OUT_Z_H)) << 8;
P2OUT ^= 1;
}
//-------------------------------------------
// Read_ADC
//-------------------------------------------
void Read_ADC(void)
{
gyro_x = Oxfff - ADC12MEM0;
gyro_y = Oxfff - ADC12MEM1;
ADC12CTL0 &= ~(ENC | ADC12SC); // Set the X enable and start conversion
sequence
asm ("dint");
Read_XYZ();
asm ("eint");
}
//-------------------------------------------
// Start_ADC
//-------------------------------------------
void Start_ADC(void)
{
if (gyro_timer)
{
ADC12CTL0 |= ENC | ADC12SC; // Set the X
enable and start conversion sequence
QueDelay (Read_ADC, 1 ); // Queue task to
read the results
}
}
void ClearWarmup (void)
{
if (STEADY_FLAG_TRUE)
{
SelfSteadyCounter--;
if (!SelfSteadyCounter)
{
CLR_STEADY_FLAG;
if (ProgramMode)
lcd_print (LEFT, 6, 1 , "Self Steady failed", 0, 0);
Gyro_Off();
}
}
CLR_WARMUP_FLAG;
}
//-------------------------------------------
// Gyro_On
//-------------------------------------------
void Gyro_On(void)
{
if (!gyro_timer)
{
P6DIR &= ~3;
P6OUT &= ~0x80; // Apply power to gyros and A/D
ADC12CTL0 = ADC12ON | (AdcRef << 6) | REFON | (SampleTime <<
8) | (AdcMulti << 7);
P6SEL |= 3; // Set the
port mode select bits
spi_xyz_put (CTRL1, POWUP | DEC0 | XENA | YENA | ZENA);
spi_xyz_put (CTRL2, MAX6G | BDU);
SampleDivider = 17;
SET_WARMUP_FLAG;
SET_SAMPLE_FLAG;
QueDelay (ClearWarmup, 250);
gyro_timer = GYRO_RUN_TIME;
}
}
//-------------------------------------------
// Gyro_Off
//-------------------------------------------
void Gyro_Off(void)
{
CLR_SAMPLE_FLAG;
spi_xyz_put(CTRL1 , 0);
ADC12CTL0 = 0;
P6SEL &= ~3; // Deactivate the A/D input pins
P6OUT |= 0x80; // Remove power from gyros and A/D
gyro_timer = 0;
}
//-------------------------------------------
// Calc_Mickeys
//-------------------------------------------
void Calc_Mickeys(void)
{
x_mickeys = ((gyro_x - x_offset));
y_mickeys = ((gyro_y - y_offset));
if((x_mickeys < G_MotionNoise)&&(x_mickeys > -G_MotionNoise) &&\
(y_mickeys < G_MotionNoise)&&(y_mickeys > -G_MotionNoise))
x_mickeys = y_mickeys = 0;
if(x_mickeys > (MaxMickeys * Gain_X))//wmm can't find where we limit to
maxmickeys so I added...
x_mickeys = MaxMickeys * Gain_X;
if(x_mickeys < (-MaxMickeys * Gain_X))
x_mickeys = -MaxMickeys * Gain_X;
if(y_mickeys > (MaxMickeys * Gain_Y))
y_mickeys = MaxMickeys * Gain_Y;
if(y_mickeys < (-MaxMickeys * Gain_Y))
y_mickeys = -MaxMickeys * Gain_Y;
}
//-------------------------------------------
// Reset_Self_Steady
//-------------------------------------------
void Reset_Self_Steady(void)
{
x_min = gyro_x;
y_min = gyro_y;
x_max = gyro_x;
y_max = gyro_y;
ax_min = accel_x;
ax_max = accel x;
ay_min = accel_y;
ay_max = accel_y;
az_min = accel_z;
az_max = accel z;
x_sum = accel_x;
y_sum = accel_y;
z_sum = accel_z;
x_steady = gyro_x;
y_steady = gyro y;
num_steady_samples = STEADY_SAMPLES - 1;
}
//-------------------------------------------
// Self_Steady
//-------------------------------------------
void Self_Steady(void)
{
x_steady += gyro_x;
y_steady += gyro_y;
x_sum += accel_x;
y_sum += accel_y;
z_sum += accel_z;
if (gyro_x > x_max) /* Adjust max & min values */
x_max = gyro_x;
if (gyro_x < x_min)
x_min = gyro_x;
if (gyro_y > y_max)
y_max = gyro_y;
if (gyro_y < y_min)
y_min = gyro_y;
if (((ax_max - ax_min) > A_SteadyThreshold) ||
((ay_max - ay_min) > A_SteadyThreshold) ||
((az_max - az_min) > A_SteadyThreshold))
{
SET_WARMUP_FLAG;
QueDelay (ClearWarmup, 1000);
sprintf (Buf, "Noise Z%c", 0x1c);
if (ProgramMode)
lcd_print(LEFT, 5, 1, Buf, 0, 0);
}
else
if ((x_max - x_min) > X_SteadyThreshold)
{
SET_WARMUP_FLAG;
QueDelay (ClearWarmup, 1000);
sprintf (Buf, "Noise X max:%x min:%x", x_max, x_min);
if (ProgramMode)
lcd_print (LEFT, 5, 1, Buf, 0, 0);
}
else
if ((y_max - y_min) > X_SteadyThreshold)
{
SET_WARMUP_FLAG;
QueDelay (ClearWarmup, 1000);
sprintf (Buf, "Noise Y max:%x min:%x", y_max, y_min);
if (ProgramMode)
lcd_print (LEFT, 5, 1, Buf, 0, 0);
}
else
{
num_steady_samples--;
if (num_steady_samples == 0)
{
if (x_steady < 0)
x_steady -= STEADY_SAMPLES / 2;
else
x_steady += STEADY_SAMPLES / 2;
if (y_steady < 0)
y_steady -= STEADY_SAMPLES / 2;
else
y_steady += STEADY_SAMPLES / 2;
x_offset = x_steady / STEADY_SAMPLES;
y_offset = y_steady / STEADY_SAMPLES;
x_sum += STEADY_SAMPLES / 2;
y_sum += STEADY_SAMPLES / 2;
z_sum += STEADY_SAMPLES / 2;
x_sum /= STEADY_SAMPLES;
y_sum /= STEADY_SAMPLES;
z_sum /= STEADY_SAMPLES;
dax = x_sum / Gain_AX;
day = y_sum / Gain_AX;
daz = z_sum / Gain_AX;
grv_axyz_mag_ref = Root((dax*dax) + (day*day) + (daz*daz));
sign = (int)(grv_axyz_mag_ref * 10);
sprintf (Buf, "X=%x Y=%x GV=%d", x_offset, y_offset, sign);
if (ProgramMode)
lcd_print (LEFT, 6, 1, Buf, 0, 0);
LED_PORT &= ~GRN_LED;
Write_NVRAM();
LED_PORT |= GRN_LED;
CLR_STEADY_FLAG;
Gyro_Off();
}
}
}
//-------------------------------------------
//gyro_get_report
//-------------------------------------------
unsigned char gyro_get_report(GYRO_REPORT *report)
{
if(WARMUP_FLAG_TRUE)
{
CLR_DATA_FLAG;
return (0);
}
if (DATA_FLAG_TRUE)
{
report->x = Xdata;
report->y = Ydata;
if(Xdata || Ydata)
return (1);
return (0);
}
return (2);
}
void DoCalcs (void)
{
if (STEADY_FLAG_TRUE)
{
CLR_RAW_FLAG;
if(WARMUP_FLAG_TRUE)
Reset_Self_Steady();
else
Self_Steady();
return;
}
P3OUT |= 0x20;
switch (CalcState)
{
case 0:
CLR_RAW_FLAG;
SET_CALC_FLAG;
dax = -accel_x/Gain_AX;
day = -accel_y/Gain_AX;
daz = accel_z/Gain_AX;
CalcState++;
break;
case 1 :
// Our roll compensation dead zone.
gvisya = ((gvisya*19) + (Dabs(day)/Root(dax*dax+daz*daz)))*0.05;
CalcState++;
break;
case 2:
if(gvisya <= GVECTOR_ZERO)
//V^2 magnitude cutoff. GUL limits roll compensation by additive
velocity in one
//direction of mag(AX,AY,AZ) relitive to G-vector, while GLL limits roll
//compensation by subtractive velocity of the total accelermeter
magnitude.
grv_axyz_mag = Root((dax*dax) + (day*day) + (daz*daz));
CalcState++;
break;
case 3:
//thetal = ((Dabs(theta1 * 1 ) + Dabs(theta3))/ 2);//////////////////
//if (theta3 < 0)///////////////
// thetal = -Dabs(theta3);/////////////////////
if((grv_axyz_mag <= (grv_axyz_mag_ref)+0.75)&&(grv_axyz_mag >=
(grv_axyz_mag_ref-0.75)))
theta2 = Get_Theta(dax, daz);//
CalcState++;
break;
case 4:
//Non-Linear Delta Decimation:Uber Good
/*
if((theta1 - theta2) >= 0)
theta2 = ((Root(Dabs(theta1 - theta2)) + (theta2)));
else
theta2 = ((theta2) - (Root(Dabs(theta1 - theta2))));
*/
//theta2 = theta1;///////////////// no non linear filter
//Add Simple Backward Weighted Averaging: OK, Done at last.
theta3 = ((Dabs(theta3 * 9) + Dabs(theta2))*0.1);
if(theta2 < 0)
theta3 = -Dabs(theta2);
/////////////theta3 = -PI/2;//////////// for debuging Epsons.
//theta3 = theta2;///////// for debuging theta 2,3 Filters
CalcState++;
break;
case 5:
// Change Yaw and Pitch into magnitude and angle.
Calc_Mickeys();
rrx = x_mickeys;
rry = y_mickeys;
rr_mag = Root(rrx*rrx + rry*rry);
CalcState++;
break;
case 6:
theta4 = Get_Theta(x_mickeys, y_mickeys);
CalcState++;
//if((rr_mag) > (double)(Gain_X))/////////////// theta3 restore from
thetal filter cutoff
//{
//theta3 = thetal;//////////////////
//}
break;
case 7:
//Roll compensate Yaw and Pitch calculations.
rrx = rr_mag * Swine(theta4 + Pl - theta3);
CalcState++;
break;
case 8:
rry = rr_mag * Swine(theta4 + PIBY2 - theta3 );
x_mickeys = (signed int)(rrx + extra_yaw);
y_mickeys = (signed int)(rry + extra_pitch);
CalcState++;
break;
case 9:
// Residual from gain division.
extra_yaw = ((x_mickeys) % Gain_X);
extra_pitch = ((y mickeys) % Gain_Y);
// Stop accumulating residual offset.
// extra_yaw = (double)((int)(extra_yaw * 0.1 ) * 10);
// extra_pitch = (double)((int)(extra_pitch * 0.1 ) * 10);
if(SENT_FLAG_TRUE || WARMUP_FLAG_TRUE)
{
CLR_SENT_FLAG;
CLR_UPDATE_FLAG;
Xdata = 0;
Ydata = 0;
}
else
SET_UPDATE_FLAG;
if(jerk_timer)
{
Xdata = 0;
Ydata = 0;
}
else
{
Xdata += (signed char)(x_mickeys / Gain_X);
Ydata += (signed char)(-y_mickeys / Gain_Y);
}
CalcState = 0;
CLR_CALC_FLAG;
SET_DATA_FLAG;
break;
default:
Trap (2);
}
P3OUT &= -0x20;
}
//-------------------------------------------
// Dabs
//-------------------------------------------
double Dabs(double x)
{
if(x < 0)
x = -x;
return x;
}
//-------------------------------------------
// Swine
//-------------------------------------------
double Swine(double x)
{
double even, y;
even = (int)(x/(Pl));
x = x - (Pl*even);
if((int)(even/2)!= (even/2))
{
x = -x;
}
y = COEFF_3 * x + COEFF_4 * x * Dabs(x);
//y = COEFF_5 * (y * Dabs(y) - y) + y;
return y;
}
//-------------------------------------------
// Get_Theta
//-------------------------------------------
double Get_Theta(double x, double y)
{
double abs_y, r, angle;
abs_y = Dabs(y) + 0.0000000001F; // Prevent /0 condition
if (x >= 0)
{
r = (x - abs_y)/(x + abs_y);
angle = COEFF_1 - COEFF_1 * r;
}
else
{
r = (x + abs_y) / (abs_y - x);
angle = COEFF_2 - COEFF_1 * r;
}
if (y < 0)
retum(-angle); // negate if in quad III or IV
else
retum(angle);
}
//-------------------------------------------
// Root
//-------------------------------------------
double Root(double number)
{
long i;
float x, y, z;
const float f = 1.5F;
z = (float)number;
x = z*0.5F;
y =z;
i = * (long *) &y;
i = Ox5f3759df - ( i >> 1 );
y = * (float *) &i;
//y =y*(f-(x*y*y));
//y =y*(f-(x*y*y));
return (double)(z*y);
}
Claims (21)
- 制御装置(110)においてロール補償を提供する方法であって、
前記制御装置(110)の動きを示す回転データ及び直線データを獲得するステップ(310)と、
獲得したデータにロール補償を適用するステップ(320)と、
ロール補償したデータからロール補償エラーを除去するステップ(330)と
を備えることを特徴とする方法。 - 前記回転データを獲得するステップ(310)は、ジャイロスコープセンサから回転データを受信するステップを含むことを特徴とする請求項1記載の方法。
- 前記直線データを獲得するステップ(310)は、加速度計から直線データを受信するステップを含むことを特徴とする請求項1記載の方法。
- 前記獲得したデータにロール補償を適用するステップ(320)は、獲得した前記回転データにロール補償を適用することを含むことを特徴とする請求項1記載の方法。
- 前記ロール補償エラーを除去するステップ(330)は、前記ロール補償エラーがロール補償した前記回転データから除去されるように前記獲得した直線データを処理することを含むことを特徴とする請求項5記載の方法。
- 前記ロール補償を適用するステップ(320)は、参照のフレームを変換することなく前記獲得したデータについてロール補償を適用することを含むことを特徴とする請求項1記載の方法。
- 前記ロール補償エラーを除去するステップ(330)は、制御装置(110)の遠心加速度及び直線加速度を計算することなく前記ロール補償したデータからロール補償エラーを除去することを含むことを特徴とする請求項1記載の方法。
- 前記ロール補償エラーが前記ロール補償したデータから除去された後、前記ロール補償したデータを用いてグラフィカル要素の移動を制御するステップを更に備えることを特徴とする請求項1記載の方法。
- 前記グラフィカル要素はカーソル、ハイライトボックス、メニュー、ゲームキャラクタ及びグラフィカル対象物のうちの1つであることを特徴とする請求項8記載の方法。
- 前記ロール補償エラーが前記ロール補償したデータから除去された後、前記ロール補償したデータを用いて移動可能な装置の移動を制御するステップを更に備えることを特徴とする請求項1記載の方法。
- 前記移動可能な装置は、リモート制御される自動車、リモート制御される飛行機、リモート制御されるボート、及びリモート制御される電気機械装置のうちの1つであることを特徴とする請求項10記載の方法。
- 前記制御装置(110)は、リモート制御装置、マウス、ゲームコントローラ、仮想現実コントローラ、ポインタ、モバイル装置、及びディジタルメディア入力装置のうちの1つであることを特徴とする請求項1記載の方法。
- 前記制御装置(110)は、ハンドヘルドプラットフォームに統合されていることを特徴とする請求項1記載の方法。
- 前記ハンドヘルドプラットフォームは、ゲームコンソール、PDA、携帯電話機、無線電話機、及びモバイルTVのうちの1つであることを特徴とする請求項13記載の方法。
- 制御装置(110)の動きを示す回転データ及び直線データを獲得する手段(230,240,250)と、
獲得したデータにロール補償を適用する手段(200)と、
ロール補償したデータからロール補償エラーを除去する手段(200)と
を備えることを特徴とする制御装置(110)。 - 前記回転データを獲得する手段は、ジャイロスコープセンサ(230,240)であることを特徴とする請求項15記載の制御装置(110)。
- 前記直線データを獲得する手段(250)は、加速度計を含むことを特徴とする請求項15記載の制御装置(110)。
- 前記獲得したデータに前記ロール補償を適用する手段(200)は、当該獲得した回転データにロール補償を適用する手段を含むことを特徴とする請求項15記載の制御装置(110)。
- 前記ロール補償エラーを除去する手段(200)は、前記ロール補償エラーが前記ロール補償した回転データから除去されるように、前記獲得した回転データを処理する手段を含むことを特徴とする請求項18記載の制御装置(110)。
- 前記ロール補償を適用する手段(2000)は、参照のフレームを変換することなく、前記獲得したデータについてロール補償を適用する手段を含むことを特徴とする請求項15記載の制御装置(110)。
- 前記ロール補償エラーを除去する手段(200)は、制御装置(110)の遠心加速度及び直線加速度を計算することなく、前記ロール補償したデータからロール補償エラーを除去する手段を含むことを特徴とする請求項15記載の制御装置(110)。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US99538207P | 2007-09-26 | 2007-09-26 | |
PCT/US2008/008026 WO2009042002A1 (en) | 2007-09-26 | 2008-06-26 | Method and apparatus for providing roll compensation |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011503679A true JP2011503679A (ja) | 2011-01-27 |
Family
ID=39739359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010526879A Pending JP2011503679A (ja) | 2007-09-26 | 2008-06-26 | ロール補償を提供する方法及び装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9052752B2 (ja) |
EP (1) | EP2193426A1 (ja) |
JP (1) | JP2011503679A (ja) |
KR (1) | KR101546845B1 (ja) |
CN (1) | CN101809528A (ja) |
BR (1) | BRPI0817191B1 (ja) |
WO (1) | WO2009042002A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807126A (zh) * | 2010-04-06 | 2010-08-18 | 华为终端有限公司 | 触摸笔及实现触摸功能的方法 |
CN101893898A (zh) * | 2010-07-15 | 2010-11-24 | 江苏科技大学 | 智能小车的重力感应控制装置 |
CN102306054B (zh) * | 2011-08-30 | 2014-12-31 | 江苏惠通集团有限责任公司 | 姿态感知设备及其定位、鼠标指针的控制方法和装置 |
ITTO20111144A1 (it) * | 2011-12-13 | 2013-06-14 | St Microelectronics Srl | Sistema e metodo di compensazione dell'orientamento di un dispositivo portatile |
CN103902038A (zh) * | 2012-12-28 | 2014-07-02 | 联想(北京)有限公司 | 一种控制方法及装置、电子设备 |
US10405440B2 (en) | 2017-04-10 | 2019-09-03 | Romello Burdoucci | System and method for interactive protection of a mobile electronic device |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH095352A (ja) * | 1995-06-15 | 1997-01-10 | Toyota Motor Corp | 車両の横加速度検出装置 |
JP2004150900A (ja) * | 2002-10-29 | 2004-05-27 | Japan Aviation Electronics Industry Ltd | 姿勢角検出装置および取付け角度補正量取得方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5574479A (en) | 1994-01-07 | 1996-11-12 | Selectech, Ltd. | Optical system for determining the roll orientation of a remote unit relative to a base unit |
US7106189B2 (en) * | 2004-04-29 | 2006-09-12 | Tracetech Incorporated | Tracking system and methods thereof |
KR100937572B1 (ko) * | 2004-04-30 | 2010-01-19 | 힐크레스트 래보래토리스, 인크. | 3d 포인팅 장치 및 방법 |
US20060164393A1 (en) * | 2005-01-24 | 2006-07-27 | Chic Technology Corp. | Highly sensitive inertial mouse |
CN101405685A (zh) | 2006-03-15 | 2009-04-08 | 皇家飞利浦电子股份有限公司 | 具有滚动检测的遥控指向技术 |
-
2008
- 2008-06-26 BR BRPI0817191-2A patent/BRPI0817191B1/pt active IP Right Grant
- 2008-06-26 WO PCT/US2008/008026 patent/WO2009042002A1/en active Application Filing
- 2008-06-26 US US12/680,256 patent/US9052752B2/en active Active
- 2008-06-26 EP EP08779823A patent/EP2193426A1/en not_active Withdrawn
- 2008-06-26 KR KR1020107005842A patent/KR101546845B1/ko active IP Right Grant
- 2008-06-26 CN CN200880109176A patent/CN101809528A/zh active Pending
- 2008-06-26 JP JP2010526879A patent/JP2011503679A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH095352A (ja) * | 1995-06-15 | 1997-01-10 | Toyota Motor Corp | 車両の横加速度検出装置 |
JP2004150900A (ja) * | 2002-10-29 | 2004-05-27 | Japan Aviation Electronics Industry Ltd | 姿勢角検出装置および取付け角度補正量取得方法 |
Also Published As
Publication number | Publication date |
---|---|
BRPI0817191A2 (pt) | 2015-03-17 |
BRPI0817191B1 (pt) | 2022-04-19 |
WO2009042002A1 (en) | 2009-04-02 |
US9052752B2 (en) | 2015-06-09 |
US20100328212A1 (en) | 2010-12-30 |
CN101809528A (zh) | 2010-08-18 |
EP2193426A1 (en) | 2010-06-09 |
KR20100063065A (ko) | 2010-06-10 |
KR101546845B1 (ko) | 2015-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8576168B2 (en) | Input apparatus, control apparatus, control system, control method, and handheld apparatus | |
JP5201146B2 (ja) | 入力装置、制御装置、制御システム、制御方法及びハンドヘルド装置 | |
US8957909B2 (en) | System and method for compensating for drift in a display of a user interface state | |
JP2011503679A (ja) | ロール補償を提供する方法及び装置 | |
US8994658B2 (en) | Input apparatus, control apparatus, control method, and handheld apparatus | |
US7489299B2 (en) | User interface devices and methods employing accelerometers | |
US20110307213A1 (en) | System and method of sensing attitude and angular rate using a magnetic field sensor and accelerometer for portable electronic devices | |
US20080042973A1 (en) | System for sensing yaw rate using a magnetic field sensor and portable electronic devices using the same | |
KR20100054701A (ko) | 움직임 감지를 통한 힘 강도 및 회전 강도를 입력하는 방법 및 디바이스 | |
US8896301B2 (en) | Portable electronic device adapted to compensate for gyroscope bias | |
JP2007535774A5 (ja) | ||
US8614671B2 (en) | Input apparatus, control apparatus, control system, and control method | |
EP2520903B1 (en) | Portable electronic device adapted to compensate for gyroscope bias | |
US20100259475A1 (en) | Angle sensor-based pointer and a cursor control system with the same | |
US8411030B2 (en) | Pointing and control device and method for a computer system | |
JPH10232739A (ja) | ペン型入力装置 | |
Nasiri et al. | Selection and integration of MEMS-based motion processing in consumer apps | |
CN112748259B (zh) | 物理量传感器、电子设备和移动体 | |
CN108375862A (zh) | 光学图像稳定器和操作该光学图像稳定器的方法 | |
EP3859498B1 (en) | Pointing electronic device with fast start-up recovery and corresponding method | |
JP2010157157A (ja) | 入力装置、制御装置、ハンドヘルド装置、制御システム及び制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110525 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120803 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20121105 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130301 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20130603 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20130610 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130902 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20131217 |