### 2 releases

Uses old Rust 2015

 0.1.1 Nov 30, 2018 Nov 29, 2018

#129 in Robotics

25KB
599 lines

This is an interface to CasADi functions of the form `phi(u; p)`, where `u` is a decision variable and `p` a parameter.

• Using CasADi's MATLAB or Python interface, you may define a cost function
• We provide helper functions which generate C code for the given function and its Jacobian
• Then `icasadi` offers a convenient interface to the C code from Rust
• This is a `no-std` library which can be used on embedded devices
• And `icasadi` can be used in embedded numerical optimization modules written in Rust

This library is available on crates.io at https://crates.io/crates/icasadi

Coming very soon

## Code generation in MATLAB

Here is an example of such a function (MATLAB example)

``````% File: matlab/example.m
nu = 10;                           % number of decision variables
np = 2;                            % number of parameters

u = casadi.SX.sym('u', nu);        % decision variables
p = casadi.SX.sym('p', np);        % parameters

phi = (p'*p) * cos(sin(u))' * u;   % cost function phi(u; p)
``````

We may then create C code for this function and its Jacobian using

``````[cost, grad_cost] = casadi_generate_c_code(u, p, phi);
``````

This will create two functions:

• `cost` : which maps `(u, p)` to `phi(u; p)`,
• `grad_cost` : the Jacobian matrix of `phi` with respect to `u` evaluated at `(u, p)`

Here is an example of use:

``````// File: main.rs

fn main() {
let u = [1.0, 2.0, 3.0, -5.0, 1.0, 10.0, 14.0, 17.0, 3.0, 5.0];
let p = [1.0, -1.0];

let mut cost_value = 0.0;
let mut jac = [0.0; 10];

icasadi_cost(u, p, &phival);       // compute the cost

println!("cost value = {}", cost_value);
println!("jacobian   = {:#?}", jac);
}
``````

## Compiling, Running, Testing

To build the project, run

``````\$ cargo build
``````

To compile the main function (`main.rs`), run

``````\$ cargo run
``````

To run the unit tests, do

``````\$ cargo test
``````

~220KB