2 个版本

使用旧的 Rust 2015

0.1.1 2018 年 11 月 30 日
0.1.0 2018 年 11 月 29 日

机器人 类别中排名 #101

MIT 许可证

25KB
599

Rust Casadi 接口

Build Status

这是一个 CasADi 函数的接口,形式为 phi(u; p),其中 u 是决策变量,p 是参数。

  • 使用 CasADi 的 MATLAB 或 Python 接口,您可以定义一个成本函数
  • 我们提供了辅助函数,可以生成给定函数及其雅可比的 C 代码
  • 然后 icasadi 提供了从 Rust 到 C 代码的便捷接口
  • 这是一个 无 std 库,可以用于嵌入式设备
  • 并且 icasadi 可以用于用 Rust 编写的嵌入式数值优化模块

该库可在 crates.io 上找到,网址为 https://crates.io/crates/icasadi

Python 中的代码生成

即将推出

MATLAB 中的代码生成

这是一个此类函数的示例(MATLAB 示例)

% 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)

然后我们可以使用以下方法为该函数及其雅可比创建 C 代码

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

这将创建两个函数

  • cost:将 (u, p) 映射到 phi(u; p)
  • grad_cost:在 (u, p) 上评估的 phi 的雅可比矩阵

以下是一个使用示例

// File: main.rs
extern crate icasadi;

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
    icasadi_grad(u, p, cost_jacobian); // compute the Jacobian of the cost

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

编译、运行、测试

要构建项目,运行

$ cargo build

要编译主函数(main.rs),运行

$ cargo run

要运行单元测试,请执行

$ cargo test

依赖项

~210KB