diff --git a/phonelibs/acados/build.sh b/phonelibs/acados/build.sh index add5686559..2d5690a891 100755 --- a/phonelibs/acados/build.sh +++ b/phonelibs/acados/build.sh @@ -18,7 +18,7 @@ if [ ! -d acados_repo/ ]; then fi cd acados_repo git fetch -git checkout 4869efc5cff54b656bcb99c1710fc1ed876e39eb +git checkout 4bfbdd7915d188cc2f56da10236c780460ed30f0 git submodule update --recursive --init # build diff --git a/pyextra/acados_template/acados_ocp_solver.py b/pyextra/acados_template/acados_ocp_solver.py index f9d92f1f98..449c89da1f 100644 --- a/pyextra/acados_template/acados_ocp_solver.py +++ b/pyextra/acados_template/acados_ocp_solver.py @@ -872,6 +872,15 @@ class AcadosOcpSolver: self.shared_lib.ocp_nlp_cost_model_set_slice.argtypes = \ [c_void_p, c_void_p, c_void_p, c_int, c_int, c_char_p, c_void_p, c_int] + self.shared_lib.ocp_nlp_constraints_model_set.argtypes = \ + [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] + self.shared_lib.ocp_nlp_cost_model_set.argtypes = \ + [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] + self.shared_lib.ocp_nlp_out_set.argtypes = \ + [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] + self.shared_lib.ocp_nlp_set.argtypes = \ + [c_void_p, c_void_p, c_int, c_char_p, c_void_p] + def solve(self): """ Solve the ocp with current input. @@ -1213,41 +1222,25 @@ class AcadosOcpSolver: msg += 'with dimension {} (you have {})'.format(dims, value_.shape) raise Exception(msg) - value_data = cast(value_.ctypes.data, POINTER(c_double)) - value_data_p = cast((value_data), c_void_p) - + value_data_p = cast(value_.ctypes.data, c_void_p) if field_ in constraints_fields: - self.shared_lib.ocp_nlp_constraints_model_set.argtypes = \ - [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] self.shared_lib.ocp_nlp_constraints_model_set(self.nlp_config, \ self.nlp_dims, self.nlp_in, stage, field, value_data_p) elif field_ in cost_fields: - self.shared_lib.ocp_nlp_cost_model_set.argtypes = \ - [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] self.shared_lib.ocp_nlp_cost_model_set(self.nlp_config, \ self.nlp_dims, self.nlp_in, stage, field, value_data_p) elif field_ in out_fields: - self.shared_lib.ocp_nlp_out_set.argtypes = \ - [c_void_p, c_void_p, c_void_p, c_int, c_char_p, c_void_p] self.shared_lib.ocp_nlp_out_set(self.nlp_config, \ self.nlp_dims, self.nlp_out, stage, field, value_data_p) elif field_ in mem_fields: - self.shared_lib.ocp_nlp_set.argtypes = \ - [c_void_p, c_void_p, c_int, c_char_p, c_void_p] self.shared_lib.ocp_nlp_set(self.nlp_config, \ self.nlp_solver, stage, field, value_data_p) return def set_param(self, stage_, value_): - # cast value_ to avoid conversion issues - #if isinstance(value_, (float, int)): - # value_ = np.array([value_]) - #value_ = value_.astype(float) - #stage = c_int(stage_) - - #value_data = cast(value_.ctypes.data, POINTER(c_double)) - self._set_param(self.capsule, stage_, cast(value_.ctypes.data, c_double), value_.shape[0]) + value_data = cast(value_.ctypes.data, POINTER(c_double)) + self._set_param(self.capsule, stage_, value_data, value_.shape[0]) def cost_set(self, start_stage_, field_, value_, api='warn'): self.cost_set_slice(start_stage_, start_stage_+1, field_, value_[None], api='warn')