Robotics System Lecture 4: Gyro Reading using Arduino

Slides:



Advertisements
Similar presentations
I2C bus Inter Integrated Circuits bus by Philips Semiconductors
Advertisements

Outline quad-copter Abstract Quad-Copter Movement Hand movement
Using the MPU-6050 Inertia Measurement Systems
Lecture 8: Serial Interfaces
Autonomous Helicopter: James Lyden Harris Okazaki EE 496 A project to create a system that would allow a remote- controlled helicopter to fly without user.
Ryan Roberts Gyroscopes.
OutLine Overview about Project Wii Robot Escaper Robot Problems and Solutions Demo.
Initial Position Orientation Tracking System (IPOTS) Group Members: Keiichi McGuireHenry Pham Marc TakamoriScott Spiro.
ME 224 Experimental Engineering: Professor Espinosa 2005 TEAM : Jamie Charles Carlo Niko Javier.
Formal Report #2 – Special Sensor Matthew Thompson EEL5666.
Gimbal contor & Analysis Applicatıon M.Özgür Ağcakaya
Lecture 111 Lecture 11: Lab 3 Overview, the ADV7183B Video Decoder and the I 2 C Bus ECE 412: Microcomputer Laboratory.
Team Spot A Cooperative Robotics Problem A Robotics Academy Project: Laurel Hesch Emily Mower Addie Sutphen.
Computer Vision Group Prof. Daniel Cremers Autonomous Navigation for Flying Robots Lecture 3.2: Sensors Jürgen Sturm Technische Universität München.
LSU 10/22/2004Serial I/O1 Programming Unit, Lecture 5.
IMU Guidance Servoblaster Code for the IMU Going mobile.
RC CAR CONTROLLER BASED ON INTEL GALILEO SOC PLATFORM Nadav Shiloach Sagi Sabag Supervisor: Idan Shmuel Spring 2014 One Semester Project PROJECT’S ENDING.
7/23 Inter-chip Serial Communication: SPI and I 2 C Computer Science & Engineering Department Arizona State University Tempe, AZ Dr. Yann-Hang Lee.
Lecture 20: Communications Lecturers: Professor John Devlin Mr Robert Ross.
Sérgio Ronaldo Barros dos Santos (ITA-Brazil)
DEVICES AND COMMUNICATION BUSES FOR DEVICES NETWORK
Autonomous Helicopter James LydenEE 496Harris Okazaki.
IMPROVE THE INNOVATION Today: High Performance Inertial Measurement Systems LI.COM.
Inertial Navigation System Overview – Mechanization Equation
PCA9557: REMOTE 8-BIT I 2 C AND SMBus LOW- POWER I/O EXPANDER.
ADCS Review – Attitude Determination Prof. Der-Ming Ma, Ph.D. Dept. of Aerospace Engineering Tamkang University.
©2008 R. Gupta, UCSD COSMOS Summer 2008 Peripheral Interfaces Rajesh K. Gupta Computer Science and Engineering University of California, San Diego.
HMC5883L TYWu.
Current Works Corrected unit conversions in code Found an error in calculating offset (to zero sensors) – Fixed error, but still not accurately integrating.
Essentials of Communication This simple model requires many guarantees. Sender Receiver Communication Link Data.
Current Works Determined drift during constant velocity test caused by slight rotation which results in gravity affecting accelerometers Analyzed data.
Objective: To develop a fully-autonomous control system for the Q-ball based on onboard IMU/Magnetometer/Ultrasound sensory information Summer Internship.
Quadcopters A CEV Talk. Agenda Flight PreliminariesWhy Quadcopters The Quadcopter SystemStability: The NotionSensors and FusionControl AlgorithmsThe Way.
SP13 ECE 445: Senior Design Sign Language Teaching Glove Project #29: Reebbhaa Mehta, Daniel Fong, Mayapati Tiwari TA: Igor Fedorov.
Microcontroller basics Embedded systems for mortals.
Magic Wand Battle Game Team 53 Shanoon Martin, Jialin Sun, Manfei Wu.
Final Report Idea and Overview 1 Scope 2 Hardware and software 3 Algorithm 4 Experiments & Results 5 Conclusion 6.
1 of 20 How to use the Compass A. Compass. 2 Compass: - Provides heading relative to Magnetic North, not true North HMC5883L V input - I2C (not.
The Equations of Motion Euler angle rate equations:
Components of Mechatronic Systems AUE 425 Week 2 Kerem ALTUN October 3, 2016.
Application Case Study Security Camera Controller
Outline Analog to digital conversion (ADC) of NuMaker TRIO
ARDUINO BASED AUTOMATIC TEMPERATURE BASED FAN SPEED CONTROLLER
CS 445 / 645 Introduction to Computer Graphics
The I2C Bus.
Chapter 11: Inter-Integrated Circuit (I2C) Interface
DIGITAL CALCULATOR USING 8051
Chapter D – Serial Connections to the RPi and Analog-to-Digital Converters
1 Input-Output Organization Computer Organization Computer Architectures Lab Peripheral Devices Input-Output Interface Asynchronous Data Transfer Modes.
‘SONAR’ using Arduino & ultrasonic distance sensor
I2C PROTOCOL SPECIFICATION
Communication Lines Fundamentals.
GPS + Inertial Sensor Fusion
Gyroscopes & Accelerometers Sensor fusion Using MPU-6050
Gyroscopes & Accelerometers Sensor fusion Using MPU-6050
8259 Chip The Intel 8259 is a family of Programmable Interrupt Controllers (PIC) designed and developed for use with the Intel 8085 and Intel 8086 microprocessors.
BJ Furman ME 106 Fundamentals of Mechatronics 15NOV2012
Internet-of-Things (IoT)
Asynchronous Serial Communications
Inertial Measurement Unit (IMU) Basics
Today’s Smart Sensors January 25, 2013 Randy Frank.
Closing the Gaps in Inertial Motion Tracking
Inertial Measurement Units
HD44780 LCD programming From the Hardware Side
In the land of the blind, the one eyed man is king
Image Acquisition and Processing of Remotely Sensed Data
Serial Communication 19th Han Seung Uk.
Introduction to Arduino
Serial Peripheral Interface Bus
IN5350 – CMOS Image Sensor Design
Presentation transcript:

Robotics System Lecture 4: Gyro Reading using Arduino By: Nur Uddin, Ph.D

IMUs There are small devices indicating changing orientation in smart phones, video game remotes, quad-copters, etc. These devices contains gyroscopes combined with accelerometers and/or compasses and are referred to as an IMU, or Inertial Measurement Unit The number of sensor inputs in an IMU are referred to as “DOF” (Degrees of Freedom), so a chip with a 3-axis gyroscope and a 3- axis accelerometer would be a 6- DOF IMU.

Accelerometers Each accelerometer has a zero-g voltage level, you can find it in spec Accelerometers also have a sensitivity, usually expressed in mV/g Divide the zero-g level corrected reading by the sensitivity to produce the final reading Image credit: http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf Proof mass deflection is measured as a change in capacitance between the proof mass and sensing plates Internal circuitry converts the tiny capacitance to a voltage signal which is digitized and output

Accelerometers Computing orientation from an accelerometer relies on a constant gravitational pull of 1g (9.8 m/s^2) downwards If no additional forces act on the accelerometer (a risky assumption), the magnitude of the acceleration is 1g, and the sensor’s rotation can be computed from the position of the acceleration vector  If the Z-axis is aligned along the gravitational acceleration vector, it is impossible to compute rotation around the Z-axis from the accelerometer. Digital accelerometers give information using a serial protocol like I2C , SPI or USART; analog accelerometers output a voltage level within a predefined range

Accelerometer cos(Axr) = Rx / R cos(Ayr) = Ry / R cos(Azr) = Rz / R R = SQRT( Rx^2 + Ry^2 + Rz^2) Find angles by using arccos() function (the inverse cos() function ): Axr = arccos(Rx/R) Ayr = arccos(Ry/R) Azr = arccos(Rz/R) Image credit: http://www.starlino.com/imu_guide.html

Gyroscope A gyroscope measures angular velocity (the rate of change in orientation angle), not angular orientation itself  Must first initialize the sensor position with a known value (possibly from the accelerometer), then measure the angular velocity (ω) around the X, Y and Z axes at measured intervals (Δt)   ω × Δt = change in angle  The new orientation angle is the original angle plus this change This is integrating - adding up many small computed intervals -  to find orientation   Repeatedly adding up increments of  ω × Δt results in small systematic errors becoming magnified over time  Gyroscopic drift---over long timescales the gyroscope data will become increasingly inaccurate

Gyroscope Uses Coriolis effect to transform an angular velocity into a displacement The Coriolis force acts perpendicular to the rotation axis and to the velocity of the body in the rotating frame Fc= -2m Ω x v The displacement induces a change in capacitance between the mass and the housing, thus transforming the angular rate input to the gyroscope into an electrical output Image credit: http://www.digikey.com/us/en/techzone/sensors/resources/articles/MEMS-Accelerometers.html

Gyroscopes Each gyroscope measures the rotation around one axis Axz – is the angle between the Rxz (projection of R on XZ plane) and Z axis Ayz – is the angle between the Ryz (projection of R on YZ plane) and Z axis Gyroscopes measure the rate of change of these angles. Image credit: http://www.starlino.com/imu_guide.html

Computing Rotation Angles Rotation from accelerometer data: tan(Axz) = Rx/Rz => Axz = atan2(Rx,Rz) Rotation from gyroscope data: Axz(n-1) = atan2( RxEst(n-1) , RzEst(n-1) ) Axz(n) = Axz(n-1) + RateAxz(n) * T Image credit: http://www.starlino.com/imu_guide.html

Sensor Fusion An accelerometer measures inertial force, such as gravity (and ideally only by gravity), but it might also be caused by acceleration (movement) of the device. Even if the accelerometer is relatively stable, it is very sensitive to vibration and mechanical noise. A gyroscope is less sensitive to linear mechanical movements, the type of noise that accelerometer suffers from. Gyroscopes have other types of problems like drift (not coming back to zero-rate value when rotation stops). Averaging the data that comes from accelerometers and gyroscopes can produce a better estimate of orientation than obtained using accelerometer data alone.

Fusion Algorithms Several choices: Kalman Filter, Complementary Filter, … Combine orientation estimated from Accelerometer readings with that estimated from the Gyroscope readings Racc – current readings from accelerometer Rgyro – obtained from Rest(n-1) and current gyroscope readings A weighted average: Rest(n) = (Racc * w1 + Rgyro * w2 ) / (w1 + w2)

Sensor Fusion Image credit: http://memscentral.com/Secondlayer/ mems_motion_sensor_perspectives-sensor-susion-high-res.htm

MPU-6050 The MPU-6050 is the world’s first integrated 6-axis MotionTracking device It combines a 3-axis gyroscope, 3-axis accelerometer, and a Digital Motion Processor™ (DMP) all in a small 4x4x0.9mm package. It uses a standard I2C bus for data transmission. With it’s I2C bus, it can accepts inputs from an external 3-axis compass to provide a complete 9-axis MotionFusion output. A number of different breakout boards are available containing the MPU-6050 chip, we have the GY-521.

I2C Understanding I2C A good Tutorial The physical I2C bus Masters and Slaves The physical protocol I2C device addressing The software protocol I2C support in the WiringPi Library A good Tutorial Image credit: http://quick2wire.com/articles/i2c-and-spi/

The physical I2C bus Two wires: SCL and SDA Image credit: http://electronics.stackexchange.com/questions/70312/n-ch-fet-with-open-drain-output Image credit: http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html Two wires: SCL and SDA SCL is the clock line: used to synchronize all data transfers SDA is the data line Both SCL and SDA lines are "open drain" drivers Can only be driven low For the line to go high provide a pull-up resistors to 5v

Masters and Slaves The devices on the I2C bus are either masters or slaves The master drives the clock & initiates the transfers Multiple slaves on the I2C bus, but there is typically only one master. Both master and slave can transfer data over the I2C bus, but that transfer is always controlled by the master.

The I2C Physical Protocol Data is transferred in sequences of 8 bits. Bits are sent with the MSB (Most Significant Bit) first. The SCL line is pulsed high, then low for each bit After each 8 bits transfer, the slave sends back an acknowledge bit It takes 9 SCL clock pulses to transfer 8 bytes of data The standard clock (SCL) speed for I2C is up to 100KHz Image credit: http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html Start and stop sequences mark the beginning and end of a transaction Initiated by the master The only time the SDA (data line) is changed while the SCL (clock line) is high. During data transfer, SDA must not change while SCL is high

I2C Device Addressing Image credit: http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html All I2C addresses are 7 bits or 10 bits---most are 7 (ours are) Can have up to 128 devices on the I2C bus Addresses are still sent in 8 bits The extra bit (the last bit) indicates read or write If the bit is zero the master is writing to the slave. If the bit is 1 the master is reading from the slave

The I2C Write Protocol Procedure to write to a slave device: 1. Send a start sequence 2. Send the I2C address of the slave with the R/W bit low (even address) 3. Send the internal register number you want to write to 4. Send the data byte 5. [Optionally, send any further data bytes] slave will automatically increment the internal register address after each byte 6. Send the stop sequence.

The I2C Write Protocol Image credit: http://invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf

The I2C Read Protocol A read is more complicated Procedure Before reading data from a slave device, you must tell it which of its internal addresses you want to read A read starts off by writing to the slave Procedure 1. Send a start sequence 2. Send I2C address of the device with the R/W bit low (even address) 3. Send the Internal register address 4. Send a start sequence again (repeated start) 5. Send the I2C address of the device with the R/W bit high (odd address) 6. Read data byte from the register 7. Send the stop sequence.

The I2C Read Protocol Image credit: http://invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf

A Read Example with MPU 6050 For MPU-6050: ACCEL_XOUT_H  register 3B ACCEL_XOUT_L  register 3C ACCEL_YOUT_H  register 3D ACCEL_YOUT_L  register 3E ACCEL_ZOUT_H  register 3F ACCEL_ZOUT_L  register 40

I2C read using WiringPi I2C Library … int fd; int16_t ax, ay, az; uint8_t MSB, LSB; fd = wiringPiI2CSetup(0x68); // I2C address of MPU6050 MSB = wiringPiI2CReadReg8(fd, 0x3B); LSB = wiringPiI2CReadReg8(fd, 0x3C); ax = (((uint16_t)MSB) << 8) | LSB; MSB = wiringPiI2CReadReg8(fd, 0x3D); LSB = wiringPiI2CReadReg8(fd, 0x3E); ay = (((uint16_t)MSB) << 8) | LSB;

I2C read using WiringPi I2C Library I2Ctest.cpp Install in PiBits/MPU6050-Pi-Demo directory (Installed later in lecture) A modified Makefile Replace the Makefile in the MPU6050-Pi-Demo package with this one Give the command: make I2Ctest to compile the program

MPU-6050

The Physical Connection Connecting the MPU to the Pi MPU6050 Pi Pin ID Pin ID VDD --> 3.3V on Pi GND --> GND on Pi SCL --> SCL on Pi SDA --> SDA on Pi XDA XCL ADO --> GND on Pi INT

The Code There is a library named I2Cdevlib for accessing the MPU-6050 and other I2C devices written by Jeff Rowberg. This code is for the Arduino. This code was ported to the RPi by Richard Ghrist of Servoblaster fame. It is available in the same PiBits GitHub repository. Look in directory MPU6050-Pi-Demo There are three demo programs one displays raw accel and gyro data from the MPU6050 another displays more useful data (angle of rotation, rotation matrix, quaternion, Euler Angle, for example) using the on-chip DMP to do the processing. the third demo draws a simple 3D wireframe model on the screen

Installation Instructions git clone git://github.com/richardghirst/PiBits.git cd 0PiBits/MPU6050-Pi-Demo sudo apt-get install libgtkmm-3.0-dev nano I2Cdev.cpp Change all occurrences of "/dev/i2c-0" to "/dev/i2c-1“ & save file nano setup-i2c.sh Change "/dev/i2c-0" to "/dev/i2c-1““ & save file make ./setup-i2c.sh sudo i2cdetect -y 1 (the IMU should use address 68) ./demo_raw Execute the version of program displaying raw accel and gyro values Output is Ax, Ay, Az, Gx, Gy, Gz ./demo_dmp Execute the version of program displaying output from the DMP Output is quaternions, & yaw (about z), pitch (about y), roll (about x) angles

Setting up a X11 Connection On a Windows platform Install MobaXterm (select the free version) & run In the /home/mobaxterm window, type: ssh –X pi@lastName.cs.unca.edu (or use your wireless IP) cd PiBits/MPU6050-Pi-Demo ./demo_3d Ctrl-C Ctrl-C to stop the program On Linux or Mac