Showing posts with label Tutorials. Show all posts
Showing posts with label Tutorials. Show all posts

Saturday, June 13, 2015

Computer Vision - SURF Feature Extraction and Object Tracking using MATLAB

I am currently working on a Mobile robot which will use Vision based Navigation for automatically finding Charging spots when the battery is low and get attached to itself.

For this task first the steps are broken down into following pieces:

  • Taking a number of reference images of the object to be detected. (For checking purpose of my code i took a "POW"(power) written on a notebook and tracking those characters. Depending on the location of "POW" in the image, i will generate the control command for the robot, whether it should go left or right and by how much amount using PID controller.) 


  • Detection and Extraction of SURF features (which is faster version of SIFT features) from the reference images and making a feature vector by stacking features from different reference images. In my case, I have only taken a single reference image shown below but you take multiple images and create the feature vector.
  • Detection and Extraction of SURF features from the images captured from camera in real-time.
  • Matching of those features using different algorithms. In MATLAB, there is only one feature matching function which is very robust, but if you using openCV, you can go for Brute-Force Matcher of FLANN based matcher. I have done this same thing in openCV. If anyone want the code using openCV, comment below in comment section.
  • Depending on the matched feature, Calculate centroid of the "POW" symbol and if the symbol is right half plane, generate right command to the motor otherwise left command.
The MATLAB code is embedded below,


Here is a working demo of my code:

For any suggestion, comment below. Thanks!


Thursday, July 17, 2014

Blink Led Project in CCS 5 with TivaWare C library for Tiva-C Launchpad Microcontrollers

TivaWare Library:
TivaWare Peripheral Driver Library is an extensive C library for accessing the peripherals on Tiva C launchpad microcontrolller. This library makes it easy to use the device peripherals without knowing a lot about the internal registers. So, it is helpful as you don't need to look at the datasheet and bit banging for programming a simple application like blinking an led.
TivaWare Library can be downloaded from here: http://www.ti.com/tool/sw-tm4c 

Complete TivaWare Library includes:

  • Royalty free libraries(Peripheral, USB, Graphics , Sensor)
  • Kit and peripheral specific code
  • Release note and other documentation
Documentation for TivaWare Library could be downloaded from here: http://www.ti.com/lit/pdf/spmu298

Code Composer Studio is and Integrated development environment that supports Texas Instruments Microcontrolllers and Processors. CCS could e downloaded freely from here: http://www.ti.com/tool/ccstudio

How to build and debug a new project in CCS with TivaWare C library:
  1. Open Code Composer Studio. 
  2. Click on the New -> CCS Project.

  3. Give a Project Name, Select Family -> ARM, Variant -> Tiva TM4C123GH6PM, Connection -> Stellaris ICDI then click on Finish.

Now for Adding the TivaWare Library in your newly created project 
  1. Right Click on your Project and then goto Properties. A properties window will open like the shown below
  1.  
  2. Then goto Build -> ARM Compiler -> Include Options in the list Add dir to #include search path click on Add.

  3. A Add directory path dialog box will open. Click on File System , Browse to TivaWare installed location (by default it go to C:\ti\TivaWare_C_Series_version_no.) Click on Ok and then again OK.

  4. Now go to ARM Linker option, then File Search Path. Click on Add -> File System and then search for driverlib.lib in your installedLibraryPath\driverlib\ccs\debug\driverlib.lib , then Click on OK.

     
  5. If you don't do this linker step the you will get a linking error.

Compiling and Debugging the Code:

  • In this tutorial i will be compiling a simple blinking code given below. For Compiling and Debugging your Code. Right Click on Project then Click on Build Project.

     
  • After compiling and building has been finished . Click on Run -> Debug to start debugging of your program. Tiva C lets you debug your code while running it on real hardware so that you can know whats going on inside.



Debugger on Tiva C Launchpad is very helpful in finding small bugs as we can see full registers value and memory location. And Here is my Blinking LED on Tiva C Launchpad.


Thank you , comments to improve this article will be appreciated.

Tuesday, July 15, 2014

Arduino vs. TI's TM4C123 Launchpad Board

Hi,
If you are wondering which micro controller board you should use for your next hobby project you may be confused between which boards to use Arduino or TI's Launchpad. If you are a beginner then of course arduino will be the best choice as it is easy to program and use while Ti's Launchpad  boards provide better flexibility and power which could be used in your project.


First of all, lets take a look at the specification of both boards and then i will describe about the pros and cons about both boards.
  

Arduino Uno R3
  • ATMEGA328 Micro controller , 16 MHz clock speed
  • Number of Digital IO - 20
  • Flash Memory - 32 KB
  • SRAM - 2 KB , EEPROM 1-KB
  • 1 SPI,1 I2C, 1 UART
  • 6 PWM
  • 6 ADCs etc.

 TI's TM4C123G Launchpad  Board
  • Based on ARM Cortex M4 Microcontroller, 80MHz clock  speed
  • Flash Memory - 256 KB , SRAM - 32KB , EEPROM - 2KB
  • 46 GPIOs , 8 UARTs , 4 SPIs, 4 I2C
  • 2 CAN controllers, USB Host/Device/OTG
  • 16 PWM outputs , 2 Quadrature Encoder Module for advanced motion control
  • ADCs , Analog Comparators and DMA controller etc.
Now lets compare both,
Pros of Arduino :
  • Easier to Program
  • Simple functions like digital read and write and Libraries from Arduino
  • A very good community support
Cons of Arduino:
  • Lower clock speed as compared to launchpad and also no control over the clock speed.
  • Lesser memory , GPIO and peripherals
  • no USB
Pros of TI's launcpad:
  • 32-bit ARM based architecture, faster speed and control over the clock speed of the uC
  • More GPIOs and peripherals to play with.
  • Much larger memory and RAM
  • USB and CAN are extra
  •  Sleep mode support for saving power when system remain idle
  • TivaWare C - Extensive C library for programming microcontroller by TI 
Cons of Launcpad:
  • Programming requires knowledge about registers and interal working of microcontroller
  • Community support is not there but the product has good documentation