GIOS: Basic usage
gios::Variable
One to one mapping to solver data.
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
gios::Variable<double> x(solver.get())
step = 0; pos = 0;
x.linkState(step, pos);
x.set(4.0);
gios::VariableArray
Array for the same variable along the horizon.
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
gios::VariableArray<double> x(solver.get(), solver.getN()+1)
pos = 0;
x.linkState(pos);
x.set(4.0);
gios::Struct
Struct mapping to solver data.
struct MyState{
double x, y, z, yaw;
};
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
gios::Struct<MyState, double, &TestStruct::x,
&TestStruct::y,
&TestStruct::z,
&TestStruct::yaw > my_state (solver.get());
step = 0; pos = 0;
my_state.linkState(step,pos);
MyState another_state={0.0, 0.0, 1.5, 1.57};
my_state.set(another_state);
gios::StructArray
Linking Struct array to solver data
struct MyState{
double x, y, z, yaw;
};
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
gios::StructArray<MyState, double, &TestStruct::x,
&TestStruct::y,
&TestStruct::z,
&TestStruct::yaw > my_state (solver.get(), solver.getN());
pos = 0;
my_state.linkState(pos);
MyState another_state={0.0, 0.0, 1.5, 1.57};
my_state.set(another_state);
gios::NestedStruct
Linking nested struct (compatible with ROS msgs)
Globally, you can declare your state
using MyState = gios::NestedStruct<geometry_msgs::Pose, double,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::x>,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::y>,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::z>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::w>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::x>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::y>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::z>>;
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
Mystate my_state(solver.get());
step = 0; pos = 0;
my_state.linkState(step,pos);
geometry_msgs:: Pose my_pose;
my_state.set(my_pose);
gios::NestedStructArray
Linking nested struct array (compatible with ROS msgs)
Globally, you can declare your state
using MyState = gios::NestedStruct<geometry_msgs::Pose, double,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::x>,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::y>,
gios::Member<&geometry_msgs::Pose::position, &geometry_msgs::Point::z>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::w>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::x>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::y>,
gios::Member<&geometry_msgs::Pose::orientation, &geometry_msgs::Quaternion::z>>;
std::unique_ptr<gios::Solver> solver( new gios::AcadoSolver);
Mystate my_state(solver.get(), solver.getN());
step = 0; pos = 0;
my_state.linkState(pos);
geometry_msgs:: Pose my_pose;
my_state.set(my_pose);