Tell me more ×
Physics Stack Exchange is a question and answer site for active researchers, academics and students of physics. It's 100% free, no registration required.

I'm struggling with a seemingly simple problem in 2D motion. It has been many years since I looked at basic kinematics and my mind seems to be too slow and confused now. Imagine we want to build a computer mouse using a 2D accelerometer and a 1D gyroscope. An accelerometer measures linear acceleration along a single axis so our 2D accelerometer measures $a_x$ and $a_y$. The Gyroscope measures angular velocity ($\omega$).

Whenever there is a movement, a computer mouse reports $\Delta x$ and $\Delta y$ for a sampling period $\Delta t$. So the problem is simply formulating the $\Delta x$ and $\Delta y$ in terms of $a_x$, $a_y$, $\omega$ and $\Delta t$. Let's assume sensors are ideal and we are starting to move from position $(0,0)$.

If there was no rotation involved, the solution would be very easy as I guess I could simply integrate the acceleration for each axis separately:

$ (1) \quad \left[ {\begin{array}{c} v_x \\ v_y \end{array}} \right]_{t+1} \leftarrow \left[ {\begin{array}{c} v_x \\ v_y \end{array}} \right]_{t} +\Delta t \left[ {\begin{array}{c} a_x \\ a_y \end{array}} \right]_{t} $

$ (2) \quad \left[ {\begin{array}{c} x \\ y \end{array}} \right]_{t+1} \leftarrow \left[ {\begin{array}{c} x \\ y \end{array}} \right]_{t} + \Delta t \left[ {\begin{array}{c} v_x \\ v_y \end{array}} \right]_{t} + \Delta t^2 \left[ {\begin{array}{c} a_x \\ a_y \end{array}} \right]_{t} $

Now if we add rotations, in the global frame I also seem to know how to solve the problem: the orientation of the sensor at any time $t$ can be represented using a rotation matrix $R$ as:

$ R= \left[ {\begin{array}{cc} \cos \alpha & -\sin \alpha \\ \sin \alpha & \cos \alpha \end{array}} \right] $

We observe that differentiating $R$ in time gives us:

$ \dot{R}= \left[ {\begin{array}{cc} -\omega\sin \alpha & -\omega \cos \alpha \\ \omega\cos \alpha & -\omega\sin \alpha \end{array}} \right] = R \times \left[ {\begin{array}{cc} 0 & -\omega \\ \omega & 0 \end{array}} \right] $

So we can simply write:

$ (3) \quad R_{t+1} \leftarrow R_t + \Delta t \cdot R_t \times \left[ {\begin{array}{cc} 0 & -\omega_t \\ \omega_t & 0 \end{array}} \right] $

Now all we need to do is to correct the direction of the accelerations according to $R$ at each step:

$ (4) \quad \left[ {\begin{array}{c} A_x \\ A_y \end{array}} \right]_{t+1} \leftarrow R_t \cdot \left[ {\begin{array}{c} a_x \\ a_y \end{array}} \right]_{t} $

After this correction we can re-use equations (1) and (2).

However, the thing is a computer mouse should report position in it's local frame (I hope I'm stating the problem correctly) so in this figure,

enter image description here

in case (a) it should only show movements in the $x$ axis while in case (b) it should report movements in both $x$ and $y$. The above equations work on a global frame so for both cases we get the same results.

For some reason I cannot turn my head round the problem and fail to get the right equations for the movement in the local frame. I guess what I want to do is to to move my equations from an inertial frame of motion to a non-inertial frame and I don't know how to do that. Any hints or solutions to go forward?

share|improve this question
You do know that, for a mouse, $\omega r_{ball}=\sqrt{v%x^t+v_y^2}$? Theres a similar relation for acceleration. My apologies if you did infact mention this, mathjax isn't working for me atn. – Manishearth Mar 15 '12 at 17:44
Fwiw, a mouse has no accelerometer/gyroscopes. It jas two wheels in contact with the roller. These wheels are attached a slotted wheel each. Lihht is passed through the wheel and a detector measures it. The frequency of oscillation of the light signal is proportional to the speed. Mind you, this is for a mechanical mouse. An optical mouse uses some nifty technique (akin to barcode scanners) that I forgot. – Manishearth Mar 15 '12 at 17:50
1  
@Manishhearh thanks for your comments. My question does not really concern existing computer mice. I am just thinking about building one only with accelerometers and gyros. – Shapul Mar 15 '12 at 18:07
Why the gyroscope? Just double-integrate x,y. Also, truncate small velocities to zero, to prevent drift. – Mike Dunlavey Mar 16 '12 at 12:39

1 Answer

up vote 0 down vote accepted

In this hypothetical situation, you can transform the unit vectors in the global reference frame $\hat{x}$ and $\hat{y}$ using the same rotation matrix, to the unit vectors in the transformed coordinate system:

$$ \hat{x}' = R \hat{x}\\ \hat{y}' = R \hat{y} $$

This is what you did implicitly by transforming $x\hat{x}+y\hat{y}$

In the same way, you can do the back transformation

$$ \hat{x}=R^{-1}\hat{x}'\\ \hat{y}=R^{-1}\hat{y}'$$

Which can be used for the back-transformation of the dislpacement in the local frame to displacement in the global frame.

A practical issue will be that errors in you integrated angle $\alpha$ will accumulate, making the mouse annoying to use.

share|improve this answer
Ah, yes, I think you are right. It is not really complicated but in my confusion after returning back to basic kinematics after many years, I totally missed it. You are right accumulation of errors in integration. Real sensors will also have drift making integration (and double integration) really difficult. – Shapul Mar 15 '12 at 19:48
@Shapul I'm glad I could help! – Bernhard Mar 15 '12 at 20:32

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.