Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Using advanced control and computer vision techniques in an easy way for embedded

License

NotificationsYou must be signed in to change notification settings

DanielMartensson/CControl

Repository files navigation

CControl is a library written in 100% ANSI C (C89) code. No external libraries and 100% platform independent.The purpose with this library is to fit advanced tools for really small embedded systems or desktop as well.Here I have focused on practical numerical methods and selected the methods that works best in practice. It hasbeen a lot of work finding the best methods and best algorithms.

CLAPACK, Math Kernel Library, FFTPACK support

This library have different types of libraries. First library is the internal lightweight library that suits small embedded systems. The second library is higher lever library for larger matrices. The third library is libraries that are hardware independent. Set this as your math library insidedefines.h file. The Math Kernel Library is extremely optimized and it's suitable for operative systems such as Windows, Linux, Mac OS meanwhile the lightweight library or CLAPACK and FFTPACK is suitable for an Arduino, STM32, PIC etc because they are 100% portable. The internal library is suited for really small devices.

RoutinesFunctionComment
ssyevdsvd.cSingular value decomposition for symmetric matrices
ssyevdeig.cEigendecomposition for symmetric matrices
sgeeveig.cEigendecomposition for square matrices
sgessdsvd.cSingular value decomposition for general matrices
spotrfchol.cCholesky facorization for real symmetric matrices
sgetrflup.cLU factorization with pivoting for square matrices
sgetrslinsolve_lup.cSolve linear systemAx = b with LU factorization
sposvlinsolve_chol.cSolve linear systemAx = b with Cholesky factorization
sgetriinv.cInverse by using LU factorization for square matrices
sgeqrfsorgqrqr.cQR factorization for general matrices
sgemmssymmsgemvssymvmul.cMultiplication
sgesvdpca.cPrincipal component analysis
sggeveig_generalized.cGeneralized eigenvalue problem for non-symmetric matrices
ssygvdeig_generalized.cGeneralized eigenvalue problem for symmetric matrices
rfftffft.cCompute Fast Fourier Transform 1D
cfftbifft.cCompute Inverse Fast Fourier Transform 1D
rfftffft2.cCompute Fast Fourier Transform 2D
cfftbifft2.cCompute Inverse Fast Fourier Transform 2D

If you want to add more, just downloadclapack-3.2.1.zip fromNetlib and include necessary.c files inside theLapack folder of this project, for supporting your routine.

TypeInternalMLKCLapackFFTpack
SpeedSlow for large dataFast for large dataFaster than internalVery fast
PortabilityPlatform independentOnly Windows/Linux/ Mac OSPlatform independentPlatform independent
MissingEigenvectors for general matricesNothingNothingNothing
Memory requirementsLightweightLargeMediumLightweight

Computer vision support

CControl have sevral algorithms for computer vision. They are chosen and reduced so they will fit embedded systems.

NameModelMulti classificationLocalizationNoise invariantLummination invariantRotation invariantScale invariantTranslation invariantSuitable for
Fisherfaces1-Layer NNYesNoYesYesNoNoNoObjects
Viola JonesHaar-LikesNoNoYesYesNoNoNoObjects
Generalized Hough TransformHough modelNoYesNoYesYesYesYesObjects
Hough TransformHough modelYesYesYesYesYesYesYesLines
Harris corner detectionNoYesYesNoYesYesYesYesCorners
Feature detectionNoYesYesNoYesYesYesYesFeatures

Main focuses are:

  • Artificial Intelligence

    • Astar algorithm for quick path finding
    • Point-in-polygon algorithm for checking if a point is inside the area
  • Machine Learning

    • Density-Based Spatial Clustering of Applications with Noise
    • Support Vector Machine
    • Kernel for PCA and LDA
    • Neural network
    • Kernel Principal Component Analysis
    • K-means clustering
    • AdaBoost classifier
  • Control Engineering

    • Model Predictive Control with integral action, quadratic optimization, hard constraints on inputs and soft constraints on outputs
    • Stability check
    • Continuous to discrete
    • Observability matrix
    • Lower triangular toeplitz of extended observability matrix
    • Add integral action into a state space model
    • Linear kalman filter for microcontrollers
    • Discrete Algebraic Riccati Equations
    • Discrete Linear Quadratic Regulator
    • Discrete Linear Quadratic Estimator
  • Differential Equations

    • Fourth Order Runge-Kutta
    • Fourth Order Runge-Kutta with variable sized arguments
  • Computer Vision

    • Generalized Hough Transform for arbitrary shapes
    • Features From Accelerated Segment Test (FAST)
    • Hough Transform for line detection
    • Harris corner detection
    • Fisherfaces
    • Viola Jones for object detection (not only face detection)
  • Image Processing

    • Gaussian filtering for images
    • Robust Principal Component Analysis
    • Sobel filter
    • Harris corner score
    • Portable Gray Map (PGM) reader, print, write and free
    • Image resize
    • Pooling Max, Average and Shape
    • Orientation of a matrix by using Intensity Centroid
    • Integral image
    • Local Binary Pattern
    • Haar-Like features
  • Signal Processing

    • Fast Fourier Transform Shift
    • Fast Fourier Transform 1D
    • Fast Fourier Transform 2D
    • Inverse Fast Fourier Transform Shift
    • Inverse Fast Fourier Transform 1D
    • Inverse Fast Fourier Transform 2D
    • Particle filter
    • Cluster filter
    • Filtfilt
    • Square Root Unscented Kalman Filter for state estimation
  • Linear Algebra

    • Balance matrix
    • Cholesky decomposition
    • Cholesky update
    • QR decomposition
    • LUP decomposition
    • Determinant
    • Discrete Lyapunov solver
    • Eigenvalues and eigenvectors
    • Generalized eigenvalue problem
    • Hankel matrix
    • Inverse
    • Dot product
    • Pseudo inverse
    • Linear solver
    • Nonlinear solver
    • Multiplication
    • Singular Value Decomposition
    • Transpose
    • Norm
    • Matrix exponential
    • Rank
    • Convolution matrix multiplication
    • Convolution vector multiplication
  • Miscellaneous

    • Angle of two vectors
    • Concatenate
    • Cut matrix
    • Find
    • Matrix symmetric check
    • Insert sub matrix into matrix
    • Pdist2
    • Popcount
    • Print matrix or vector
    • Saturation
    • Sign
    • Value min
    • Value max
    • Sort
    • Sum
    • Unit vector
    • Vector rotation 2D
    • Vector scalar
    • Convert linear indices to subscripts
    • Float <-> uint8_t converter
    • Radian vector
    • Column summation
    • Normalize vector
    • Find unique numbers
    • Data shuffle
    • Union converters
  • Optimization

    • Linear programming
    • Non-Negative Least Squares
    • Quadratic programming
  • Statistics

    • Principal Component Analysis
    • Linear Discriminant Analysis
    • Randn
    • Randi
    • Mean
    • Average of the elements inside a form e.g circle
    • Max
    • Standard deviation
    • Variance
    • Covariance
    • Center
    • Ordinary Procrustes Analysis
    • Compute centroid of a cluster
    • Cluster distance
    • Cluster ratio
    • Normal propability density function
    • Gini impurity
  • System Identification

    • Observer Kalman Filter identification
    • Eigensystem Realization Algorithm
    • Recursive Least Square with forgetting factor and kalman filter identification
    • Square Root Unscented Kalman Filter for parameter estimation
    • Transfer function to state space
/* ============================================================================ Name        : Main.c Author      : <Your Name Here> Version     : 1.0 Copyright   : MIT Description : Initial template ============================================================================ */#include"CControl/ccontrol.h"intmain() {clock_tstart,end;floatcpu_time_used;start=clock();/* Your ANSI C logic here - All examples can be found at the folder src/CControl/Documents/Examples */end=clock();cpu_time_used= ((float) (end-start)) /CLOCKS_PER_SEC;printf("\nTotal speed  was %f\n",cpu_time_used);returnEXIT_SUCCESS;}

Projects made with CControl

Fan Controller with Linear Quadratic Integral Control

I have created a controller for a fan. The controller works as it read the temperature sensor and it compare the temperature sensor with the potentiometer, which is the reference set point. If the error is large between the temperature sensor and the potentiometer, then the fan is going to turn on high, or low, depending on if the error is negative or positive.

The goal with this system is that I'm going to implement this on a heat source. The fan is going to blow warm air onto a object and the object is holding the temperature sensor. If the fan is blowing to much warm air, then the controller is going to turn down the speed of the fan so the temperature of the object meets the reference

a

I have been using Matavecontrol and Mataveid to estimate and creating the kalman gain matrix and the LQR control law with integral action. I'm the author of both Matavecontrol and Mataveid.

Identification process. Here I have using the Observer Kalman Filter Identification and Eigen System Realization methods.

a

Simulation process:

a

Model Predictive Integral Temperature Controller

This is a Model Predictive Controller, with integral action. It uses linear programming instead of quadratic programming for the optimization. This controller works well.

This predictive controller have a wiring diagram if you want to build the same controller for your temperature project.

a

a

Step answer of first order model.

a

Model Reference Adaptive CAN-bus controller

This is a MRAC project, Model Reference Adaptive Controller. This controls the a Sonceboz stepper motor with CAN-bus J1939-21 protocol. The purpose is to control a big wheel with two multivariable hydraulical valves.

See the movie in the project folder.

Library for SAE J1939https://github.com/DanielMartensson/Open-SAE-J1939

a

Square Root Uncented Kalman Filter for state estimation and parameter estimation

This is the latest Uncented Kalman Filter. MATLAB is using the same algorithm. A.m file is available at theSR-UKF folder.

For state estimation

a

For parameter estimation

a

How to use this library with Eclipse CDT

I have made so both Microsoft Visual Studio users and Eclipce CDT can use this library without conflicts.Here is a tutorial how to configure your Eclipse CDT for this repository.

  1. I'd recommendEclipse IDE for compiling this software.Eclipse IDE is a very boring IDE, but it's robust and trustable. TheEclipse IDE is always going to be available for you.

a

  1. Once you haveEclipse IDE installed. Show Git perspective.

a

  1. SelectGit

a

  1. Copy ssh

a

  1. Clone git. Just press next and end with finish

a

  1. Import project

a

  1. Show view

a

  1. SelectGit staging

a

  1. Every time you change a file and you want to update your repository

a

  1. If you don't have aC-compiler, here is avideo how to set up a compiler

  2. Begin with yourmain.c file. Then go tosrc/CControl/Documents/Examples/ and select a.txt file and paste it intomain.c file and pressthe green circle with a white triangle inside

  3. If you got problem with push your updates to this repository, the you need to configure your authorization. See thislink

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp