Control System Packer is a lightweight, low-level program to transform energy equations into the compact libraries for control systems. Packer supports Python 🐍, C 💻 and C++ 💻libraries.
- Input the energy equations and get a compact library for the chosen language.
- Parametrize the system for usage with different parameters
- Get a control system out of robot's physical equations
Our goal is to make the lives of robotics developers easier, so you can just type in the energy equations and obtain ready-to-use libraries. You can import them straight away into the robot for the control!
- Our system works with any mechanical model. Every model has it's own general positions and energy equations.
- Most of the programmers used to code and transform these equations manually, there was no popular tool to solve this issue.
- Complex control tasks are done in high-level PLs (such as Python), but low-level computers usually work this C or C++. We provide fast and easy transition from Python to C or C++.
Packer now supports 2 types of the language libraries:
- Open the command line interface
- Using the command line, access a folder in which you want your project to be saved
- Type in:
git clone https://github.com/mirnanoukari/Control-System-Packer.git
You can install the package from our branch symbolical-dynamics/lib/dir by running the command:
sudo python3 setup.py develop # for Linux
python3 setup.py develop # for Windows
Then, you need to import Mechanicalsystem class from euler_lagrange
from lib.symbolical_dynamics.euler_lagrange import MechanicalSystem
name_of_your_system = MechanicalSystem(q,K,P,R)
- q (generalized coordinates)
- K (kinetic energy)
- P (potential energy)
- R (rayleigh dissipative function)
Or you can assign values to your mechanical system using set functions:
name_of_your_system = MechanicalSystem(q)
name_of_your_system.set_kinetic_energy(K)
name_of_your_system.set_potential_energy(P)
name_of_your_system.set_rayleigh(R)
name_of_your_system.get_lagrange_equations(simp=True)
The model then produces an equation, and results a combined terms of potential energy and inertia matrix.
Great! Now, your system is initialized with values. You can use them both in C, C++ and Python Below we present the usage of both cases.
print(f'\nEquations of motion:\n{name_of_your_system.Q}')
print(f'\nInertia matrix:\n{name_of_your_system.D}')
print(f'\nGeneralized momenta:\n{name_of_your_system.p}')
First of all, we should generate headers from Python code:
name_of_your_system.get_headers()
Now you can simply import these headers, and use built-in functions to find exact value for any point.
#include "numerical_combined.h"
#include <stdio.h>
int main(void) {
numerical_combined(2,3,4,5,6,7,8,9,0,12,21,result); // Example of usage of generated headers
printf("%d", result[0])
return 0;
}
Work in progress...
Want to contribute? Check out our contribution policy
Packer - a program that allows you to turn input (energy equations) into compact libraries for various programming languages.
Control system - a system, which provides the desired response by controlling the output.
Header - a file containing C language declarations and macro definitions to be shared between several source files.
Library - a collection of non-volatile resources used by computer programs for software development.
Energy equations - potential and kinetic energies equations in symbolic format.
Method of Lagrange multipliers - strategy for finding the local maxima and minima of a function subject to equality constraints.
Free Software, Hell Yeah!