Compare commits

..

1 Commits

Author SHA1 Message Date
Prabhaav Pillai 632db8bfd3 Add HybridExperimental mode 2026-08-25 04:42:59 -04:00
139 changed files with 4676 additions and 3657 deletions
+4 -51
View File
@@ -1,5 +1,4 @@
import os
import importlib
import shutil
import subprocess
import sys
@@ -129,41 +128,6 @@ elif arch == "aarch64" and AGNOS:
arch = "larch64"
assert arch in ["larch64", "aarch64", "x86_64", "Darwin"]
# AGNOS 19.6 ships native dependencies as versioned Python packages. Link
# Cap'n Proto statically from that managed package so release binaries don't
# depend on the removed libcapnp-1.0.2.so system library.
try:
capnproto = importlib.import_module("capnproto")
except ModuleNotFoundError:
capnproto = None
try:
ffmpeg = importlib.import_module("ffmpeg")
except ModuleNotFoundError:
ffmpeg = None
capnproto_include_dirs = [capnproto.INCLUDE_DIR] if capnproto is not None else []
capnproto_lib_dirs = [capnproto.LIB_DIR] if capnproto is not None else []
ffmpeg_include_dirs = [ffmpeg.INCLUDE_DIR] if ffmpeg is not None else []
ffmpeg_lib_dirs = [ffmpeg.LIB_DIR] if ffmpeg is not None else []
# Cross-builds install managed dependencies in /work/.venv-linux-arm64, but
# comma devices expose the same packages from /usr/local/venv. Never embed the
# host/container mount path in release binaries.
ffmpeg_runtime_lib_dirs = ffmpeg_lib_dirs
if arch == "larch64" and ffmpeg is not None:
ffmpeg_runtime_lib_dirs = [os.path.join("/usr/local/venv", os.path.relpath(ffmpeg.LIB_DIR, sys.prefix))]
# The managed native-dependency packages keep their tools inside the package
# instead of installing them into /usr/local/venv/bin. cereal invokes capnpc
# directly while SConscript files are evaluated, so make the packaged tools
# discoverable to both SCons actions and configure-time subprocesses.
dependency_bin_dirs = [
package.BIN_DIR for package in (capnproto, ffmpeg)
if package is not None and os.path.isdir(package.BIN_DIR)
]
if dependency_bin_dirs:
os.environ["PATH"] = os.pathsep.join([*dependency_bin_dirs, os.environ["PATH"]])
# Homebrew llvm can shadow Apple clang and break macOS SDK header resolution.
# Use the system toolchain explicitly on macOS for reliable local builds.
cc = '/usr/bin/clang' if arch == "Darwin" else 'clang'
@@ -305,10 +269,7 @@ env = Environment(
"-Wno-vla-cxx-extension",
] + cflags + ccflags,
# Managed dependencies must precede the compatibility sysroot. The sysroot
# can intentionally retain legacy libraries for C3 support, but new release
# binaries must link against the versions shipped in the managed venv.
CPPPATH=capnproto_include_dirs + ffmpeg_include_dirs + cpppath + [
CPPPATH=cpppath + [
"#",
"#third_party/acados/include",
"#third_party/acados/include/blasfeo/include",
@@ -327,11 +288,11 @@ env = Environment(
RANLIB=ranlib,
LINKFLAGS=ldflags,
RPATH=ffmpeg_runtime_lib_dirs + rpath,
RPATH=rpath,
CFLAGS=["-std=gnu11"] + cflags,
CXXFLAGS=["-std=c++1z"] + cxxflags,
LIBPATH=capnproto_lib_dirs + ffmpeg_lib_dirs + libpath + [
LIBPATH=libpath + [
"#msgq_repo",
"#third_party",
"#selfdrive/pandad",
@@ -410,15 +371,7 @@ SConscript(['opendbc_repo/SConscript'], exports={'env': env_swaglog})
SConscript(['cereal/SConscript'])
Import('socketmaster', 'msgq')
if capnproto is not None:
messaging = [
socketmaster,
msgq,
File(os.path.join(capnproto.LIB_DIR, "libcapnp.a")),
File(os.path.join(capnproto.LIB_DIR, "libkj.a")),
]
else:
messaging = [socketmaster, msgq, 'capnp', 'kj']
messaging = [socketmaster, msgq, 'capnp', 'kj',]
Export('messaging')
Binary file not shown.
+3
View File
@@ -238,6 +238,9 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
{"CommunityFavorites", {PERSISTENT, STRING, "", "", 1}},
{"ConditionalChill", {PERSISTENT, BOOL, "0", "0", 1}},
{"ConditionalExperimental", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}},
{"HybridExpBias", {PERSISTENT, FLOAT, "0", "0", 1}},
{"HybridExperimental", {PERSISTENT, BOOL, "0", "0", 1}},
{"HybridVisionBrakeSensitivity", {PERSISTENT, FLOAT, "1", "1", 1}},
{"CurvatureData", {PERSISTENT | DONT_LOG, JSON, "{}", "{}"}},
{"CurveSpeedController", {PERSISTENT, BOOL, "1", "0", 1, SETTINGS_SIMPLE}},
{"CurveSpeedControllerNoLead", {PERSISTENT, BOOL, "0", "0", 1, SETTINGS_SIMPLE}},
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -21,7 +21,7 @@ fi
export QCOM_PRIORITY=12
if [ -z "$AGNOS_VERSION" ]; then
export AGNOS_VERSION="19.6.10"
export AGNOS_VERSION="19.6.2"
fi
if [ -z "$AGNOS_ACCEPTED_VERSIONS" ]; then
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
extern const uint8_t gitversion[19];
const uint8_t gitversion[19] = "DEV-46ae2472-DEBUG";
const uint8_t gitversion[19] = "DEV-e28f72c6-DEBUG";
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
DEV-46ae2472-DEBUG
DEV-e28f72c6-DEBUG
-5
View File
@@ -29,11 +29,6 @@ dependencies = [
"setuptools",
"numpy >=2.0",
# AGNOS 19.6 native build dependencies
"comma-deps-capnproto; python_version >= '3.12'",
"comma-deps-ffmpeg; python_version >= '3.12'",
"libdatachannel-py>=2026.1.0.dev2; python_version >= '3.12'",
# body / webrtcd
"aiohttp",
"aiortc",
Binary file not shown.
-61
View File
@@ -467,66 +467,6 @@ EOF
echo "==> larch64 scons completed in $(( $(date +%s) - started_at ))s"
}
validate_larch64_artifacts() {
local engine
engine="$(detect_engine)"
echo "==> Validating larch64 runtime dependencies"
"${engine}" run --rm --platform linux/arm64 \
--user "${DOCKER_RUN_USER}" \
-v "${HOST_ROOT_DIR}:/work" \
-v "${HOST_VENV_DIR}:/work/.venv-linux-arm64:ro" \
-v "${HOST_SYSROOT_DIR}:/opt/tici-sysroot:ro" \
-v "${HOST_SYSROOT_DIR}/system/vendor/lib64:/system/vendor/lib64:ro" \
-w /work \
"${IMAGE_NAME}" bash -lc '
set -euo pipefail
ffmpeg_lib_dir="/work/.venv-linux-arm64/lib/python3.12/site-packages/ffmpeg/install/lib"
target_ffmpeg_runpath="/usr/local/venv/lib/python3.12/site-packages/ffmpeg/install/lib"
runtime_library_path="${ffmpeg_lib_dir}:/work/third_party/acados/larch64/lib:/work/third_party/libyuv/larch64/lib:/work/selfdrive/controls/lib/lateral_mpc_lib/c_generated_code:/work/selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code:/opt/tici-sysroot/usr/local/lib:/opt/tici-sysroot/lib/aarch64-linux-gnu:/opt/tici-sysroot/usr/lib/aarch64-linux-gnu:/system/vendor/lib64"
failures=0
while IFS= read -r -d "" artifact; do
if ! readelf -h "${artifact}" 2>/dev/null | grep -q "Machine:.*AArch64"; then
continue
fi
dynamic="$(readelf -d "${artifact}" 2>/dev/null || true)"
if grep -Eq "(RPATH|RUNPATH).*\/work\/" <<<"${dynamic}"; then
echo "ERROR: ${artifact} embeds a build-host runtime path" >&2
failures=1
fi
has_ffmpeg=0
while IFS= read -r needed; do
case "${needed}" in
libavformat.so.*|libavcodec.so.*|libswresample.so.*|libavutil.so.*)
has_ffmpeg=1
if [[ ! -e "${ffmpeg_lib_dir}/${needed}" ]]; then
echo "ERROR: ${artifact} links ${needed}, which is not shipped by the managed FFmpeg package" >&2
failures=1
fi
;;
esac
done < <(sed -n "s/.*Shared library: \[\([^]]*\)\].*/\1/p" <<<"${dynamic}")
if [[ "${has_ffmpeg}" -eq 1 ]] && ! grep -Fq "${target_ffmpeg_runpath}" <<<"${dynamic}"; then
echo "ERROR: ${artifact} links FFmpeg without the target managed-venv RUNPATH" >&2
failures=1
fi
missing="$(LD_LIBRARY_PATH="${runtime_library_path}" ldd "${artifact}" 2>&1 | grep "not found" || true)"
if [[ -n "${missing}" ]]; then
echo "ERROR: ${artifact} has unresolved target dependencies:" >&2
echo "${missing}" >&2
failures=1
fi
done < <(git ls-files -z)
exit "${failures}"
'
}
setup_host_venv() {
if [[ ! -f "${ROOT_DIR}/.venv/bin/activate" ]]; then
if [[ -x "${ROOT_DIR}/tools/install_python_dependencies.sh" ]]; then
@@ -576,7 +516,6 @@ run_larch64_build() {
cereal/messaging/bridge \
msgq_repo/msgq/ipc_pyx.so \
msgq_repo/msgq/visionipc/visionipc_pyx.so
validate_larch64_artifacts
touch "${ROOT_DIR}/prebuilt"
}
+11 -7
View File
@@ -298,17 +298,21 @@ class Car:
self.v_cruise_helper.v_cruise_cluster_kph = preap_v_cruise_kph
slc_force_speed = self.params_memory.get_float("SLCForceCruiseSpeed")
if slc_force_speed > 0:
if self.is_metric:
new_cruise_kph = round(slc_force_speed * CV.MS_TO_KPH)
else:
new_cruise_kph = round(slc_force_speed * CV.MS_TO_MPH) * IMPERIAL_INCREMENT
self.v_cruise_helper.v_cruise_kph = max(min(new_cruise_kph, V_CRUISE_MAX), V_CRUISE_MIN)
self.v_cruise_helper.v_cruise_cluster_kph = self.v_cruise_helper.v_cruise_kph
# Do not apply an adoption queued before SLC was switched off.
if self.starpilot_toggles.speed_limit_controller:
if self.is_metric:
new_cruise_kph = round(slc_force_speed * CV.MS_TO_KPH)
else:
new_cruise_kph = round(slc_force_speed * CV.MS_TO_MPH) * IMPERIAL_INCREMENT
self.v_cruise_helper.v_cruise_kph = max(min(new_cruise_kph, V_CRUISE_MAX), V_CRUISE_MIN)
self.v_cruise_helper.v_cruise_cluster_kph = self.v_cruise_helper.v_cruise_kph
self.params_memory.remove("SLCForceCruiseSpeed")
if self.sm['carControl'].enabled and not self.CC_prev.enabled and not preap_software_cruise:
# Use CarState w/ buttons from the step selfdrived enables on
desired_speed_limit = self.sm['starpilotPlan'].slcSpeedLimit + self.sm['starpilotPlan'].slcSpeedLimitOffset
desired_speed_limit = self.sm['starpilotPlan'].slcSpeedLimit
if self.starpilot_toggles.speed_limit_controller:
desired_speed_limit += self.sm['starpilotPlan'].slcSpeedLimitOffset
self.v_cruise_helper.initialize_v_cruise(
self.CS_prev,
self.experimental_mode,
+30 -11
View File
@@ -9,6 +9,7 @@ from openpilot.common.filter_simple import FirstOrderFilter
from openpilot.common.realtime import DT_MDL
from openpilot.selfdrive.modeld.constants import ModelConstants
from openpilot.starpilot.common.model_versions import is_tinygrad_model_version
from openpilot.starpilot.controls.lib.hybrid_experimental_mode import HybridExperimentalMode
from openpilot.selfdrive.controls.lib.longcontrol import LongCtrlState
from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import LongitudinalMpc
from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import desired_follow_distance
@@ -596,6 +597,7 @@ class LongitudinalPlanner:
self.duplicate_vision_comfort_lead_source = None
self.prev_experimental_mode = None
self.experimental_release_accel_until = 0.0
self.hybrid_controller = HybridExperimentalMode()
if self.is_preap:
try:
@@ -1936,6 +1938,7 @@ class LongitudinalPlanner:
self.a_desired = np.clip(sm['carState'].aEgo, accel_limits[0], accel_limits[1])
self.model_allow_throttle = True
self.model_allow_throttle_transition_t = 0.0
self.hybrid_controller.reset(float(self.a_desired))
# Prevent divergence, smooth in current v_ego
self.v_desired_filter.x = max(0.0, self.v_desired_filter.update(v_ego))
@@ -2284,26 +2287,42 @@ class LongitudinalPlanner:
model_launch_accel = self.get_model_launch_accel(model_launch_v, model_launch_a, action_t, scene_v_ego)
if classic_model:
output_a_target, output_should_stop = get_accel_from_plan_classic(
output_a_target_mpc, output_should_stop_mpc = get_accel_from_plan_classic(
self.CP, self.v_desired_trajectory, self.a_desired_trajectory, starpilot_toggles.vEgoStopping)
elif tinygrad_model:
output_a_target_mpc, output_should_stop_mpc = get_accel_from_plan(
self.v_desired_trajectory, self.a_desired_trajectory,
action_t=action_t, vEgoStopping=starpilot_toggles.vEgoStopping)
output_a_target_e2e = sm['modelV2'].action.desiredAcceleration
output_should_stop_e2e = sm['modelV2'].action.shouldStop
if self.mode == 'acc' or self.generation == 'v9':
output_a_target = output_a_target_mpc
output_should_stop = output_should_stop_mpc
else:
output_a_target = min(output_a_target_mpc, output_a_target_e2e)
output_should_stop = output_should_stop_e2e or output_should_stop_mpc
else:
output_a_target, output_should_stop = get_accel_from_plan(
output_a_target_mpc, output_should_stop_mpc = get_accel_from_plan(
self.v_desired_trajectory, self.a_desired_trajectory,
action_t=action_t, vEgoStopping=starpilot_toggles.vEgoStopping)
if bool(getattr(starpilot_toggles, "hybrid_experimental_mode", False)):
self.hybrid_controller.set_tuning(
getattr(starpilot_toggles, "hybrid_exp_bias", 0.0),
getattr(starpilot_toggles, "hybrid_vision_brake_sensitivity", 1.0),
)
output_a_target_e2e = sm['modelV2'].action.desiredAcceleration
output_should_stop_e2e = sm['modelV2'].action.shouldStop
output_a_target = self.hybrid_controller.update(
v_ego=scene_v_ego,
v_cruise=v_cruise,
lead_one=self.lead_one,
model_v2=sm['modelV2'],
a_chill=output_a_target_mpc,
a_exp=output_a_target_e2e,
)
output_should_stop = output_should_stop_mpc or output_should_stop_e2e
elif tinygrad_model and self.mode != 'acc' and self.generation != 'v9':
output_a_target_e2e = sm['modelV2'].action.desiredAcceleration
output_should_stop_e2e = sm['modelV2'].action.shouldStop
output_a_target = min(output_a_target_mpc, output_a_target_e2e)
output_should_stop = output_should_stop_e2e or output_should_stop_mpc
else:
output_a_target = output_a_target_mpc
output_should_stop = output_should_stop_mpc
comfort_output_accel_min = get_vehicle_min_accel(self.CP, v_ego) if experimental_mlsim else accel_limits_turns[0]
vision_cap_accel_min = min(comfort_output_accel_min, get_vehicle_min_accel(self.CP, v_ego))
output_accel_min = comfort_output_accel_min
@@ -514,6 +514,46 @@ def test_experimental_mlsim_uses_vehicle_min_accel_floor(model_version):
assert planner.output_a_target < comfort_min_accel
def test_hybrid_mode_shields_unconfirmed_vision_braking():
v_ego = 20.0
desired_accel = -2.0
CP = CarInterface.get_non_essential_params(CAR.HONDA_CIVIC)
# Hybrid mode clamps unconfirmed vision braking to a gentle coast (no lead,
# model not predicting a stop), instead of passing the raw E2E target.
hybrid_toggles = SimpleNamespace(**vars(make_toggles("v11")), hybrid_experimental_mode=True)
planner_hybrid = LongitudinalPlanner(CP, init_v=v_ego)
sm = make_sm(v_ego, desired_accel, -2.0, experimental_mode=False)
planner_hybrid.update(sm, hybrid_toggles)
assert planner_hybrid.mode == "acc"
assert planner_hybrid.output_a_target >= -0.6
# Without the hybrid shield, experimental mode lets the raw E2E target through.
planner_exp = LongitudinalPlanner(CP, init_v=v_ego)
sm_exp = make_sm(v_ego, desired_accel, -2.0, experimental_mode=True)
planner_exp.update(sm_exp, make_toggles("v11"))
assert planner_exp.output_a_target <= -1.5
def test_hybrid_mode_arbitrates_vision_braking_with_lead():
v_ego = 20.0
CP = CarInterface.get_non_essential_params(CAR.HONDA_CIVIC)
hybrid_toggles = SimpleNamespace(**vars(make_toggles("v11")), hybrid_experimental_mode=True)
# With a tracked lead, the hybrid grants full E2E braking authority.
planner = LongitudinalPlanner(CP, init_v=v_ego)
sm = make_sm(
v_ego,
desired_accel=-2.0,
min_accel=-2.0,
experimental_mode=False,
tracking_lead=True,
lead_one=make_lead(status=True, d_rel=30.0, v_lead=10.0),
)
planner.update(sm, hybrid_toggles)
assert planner.output_a_target < 0.0
def test_gm_pedal_vehicle_min_accel_uses_brand_when_car_name_is_missing():
CP = SimpleNamespace(
carName=None,
@@ -175,6 +175,23 @@ def test_lateral_resume_delay_ignores_signal_cycles_that_never_slow_enough(monke
planner.shutdown()
def test_hybrid_mode_runs_continuous_controller(monkeypatch):
planner = make_planner(monkeypatch)
monkeypatch.setattr(planner.starpilot_cem, "update", lambda *args, **kwargs: None)
try:
toggles = make_toggles(hybrid_experimental_mode=True)
planner.update(0.0, False, make_sm(planner, frame=1, v_ego=20.0, left_blinker=False), toggles)
assert planner.hybrid_controller is not None
assert planner.hybrid_acceleration != 0.0
assert planner.starpilot_ccm.experimental_mode is False
assert planner.starpilot_cem.experimental_mode is False
finally:
planner.shutdown()
def test_radarless_follow_hold_applies_to_tracked_vision_lead(monkeypatch):
planner = StarPilotPlanner(Path("/tmp/nonexistent"), DummyThemeManager())
+342 -342
View File
@@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
void err_fun(double *nom_x, double *delta_x, double *out_7084348270501559549) {
out_7084348270501559549[0] = delta_x[0] + nom_x[0];
out_7084348270501559549[1] = delta_x[1] + nom_x[1];
out_7084348270501559549[2] = delta_x[2] + nom_x[2];
out_7084348270501559549[3] = delta_x[3] + nom_x[3];
out_7084348270501559549[4] = delta_x[4] + nom_x[4];
out_7084348270501559549[5] = delta_x[5] + nom_x[5];
out_7084348270501559549[6] = delta_x[6] + nom_x[6];
out_7084348270501559549[7] = delta_x[7] + nom_x[7];
out_7084348270501559549[8] = delta_x[8] + nom_x[8];
void err_fun(double *nom_x, double *delta_x, double *out_8339538066892951453) {
out_8339538066892951453[0] = delta_x[0] + nom_x[0];
out_8339538066892951453[1] = delta_x[1] + nom_x[1];
out_8339538066892951453[2] = delta_x[2] + nom_x[2];
out_8339538066892951453[3] = delta_x[3] + nom_x[3];
out_8339538066892951453[4] = delta_x[4] + nom_x[4];
out_8339538066892951453[5] = delta_x[5] + nom_x[5];
out_8339538066892951453[6] = delta_x[6] + nom_x[6];
out_8339538066892951453[7] = delta_x[7] + nom_x[7];
out_8339538066892951453[8] = delta_x[8] + nom_x[8];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_693097121251649199) {
out_693097121251649199[0] = -nom_x[0] + true_x[0];
out_693097121251649199[1] = -nom_x[1] + true_x[1];
out_693097121251649199[2] = -nom_x[2] + true_x[2];
out_693097121251649199[3] = -nom_x[3] + true_x[3];
out_693097121251649199[4] = -nom_x[4] + true_x[4];
out_693097121251649199[5] = -nom_x[5] + true_x[5];
out_693097121251649199[6] = -nom_x[6] + true_x[6];
out_693097121251649199[7] = -nom_x[7] + true_x[7];
out_693097121251649199[8] = -nom_x[8] + true_x[8];
void inv_err_fun(double *nom_x, double *true_x, double *out_1869575881362213489) {
out_1869575881362213489[0] = -nom_x[0] + true_x[0];
out_1869575881362213489[1] = -nom_x[1] + true_x[1];
out_1869575881362213489[2] = -nom_x[2] + true_x[2];
out_1869575881362213489[3] = -nom_x[3] + true_x[3];
out_1869575881362213489[4] = -nom_x[4] + true_x[4];
out_1869575881362213489[5] = -nom_x[5] + true_x[5];
out_1869575881362213489[6] = -nom_x[6] + true_x[6];
out_1869575881362213489[7] = -nom_x[7] + true_x[7];
out_1869575881362213489[8] = -nom_x[8] + true_x[8];
}
void H_mod_fun(double *state, double *out_1623843232183312219) {
out_1623843232183312219[0] = 1.0;
out_1623843232183312219[1] = 0.0;
out_1623843232183312219[2] = 0.0;
out_1623843232183312219[3] = 0.0;
out_1623843232183312219[4] = 0.0;
out_1623843232183312219[5] = 0.0;
out_1623843232183312219[6] = 0.0;
out_1623843232183312219[7] = 0.0;
out_1623843232183312219[8] = 0.0;
out_1623843232183312219[9] = 0.0;
out_1623843232183312219[10] = 1.0;
out_1623843232183312219[11] = 0.0;
out_1623843232183312219[12] = 0.0;
out_1623843232183312219[13] = 0.0;
out_1623843232183312219[14] = 0.0;
out_1623843232183312219[15] = 0.0;
out_1623843232183312219[16] = 0.0;
out_1623843232183312219[17] = 0.0;
out_1623843232183312219[18] = 0.0;
out_1623843232183312219[19] = 0.0;
out_1623843232183312219[20] = 1.0;
out_1623843232183312219[21] = 0.0;
out_1623843232183312219[22] = 0.0;
out_1623843232183312219[23] = 0.0;
out_1623843232183312219[24] = 0.0;
out_1623843232183312219[25] = 0.0;
out_1623843232183312219[26] = 0.0;
out_1623843232183312219[27] = 0.0;
out_1623843232183312219[28] = 0.0;
out_1623843232183312219[29] = 0.0;
out_1623843232183312219[30] = 1.0;
out_1623843232183312219[31] = 0.0;
out_1623843232183312219[32] = 0.0;
out_1623843232183312219[33] = 0.0;
out_1623843232183312219[34] = 0.0;
out_1623843232183312219[35] = 0.0;
out_1623843232183312219[36] = 0.0;
out_1623843232183312219[37] = 0.0;
out_1623843232183312219[38] = 0.0;
out_1623843232183312219[39] = 0.0;
out_1623843232183312219[40] = 1.0;
out_1623843232183312219[41] = 0.0;
out_1623843232183312219[42] = 0.0;
out_1623843232183312219[43] = 0.0;
out_1623843232183312219[44] = 0.0;
out_1623843232183312219[45] = 0.0;
out_1623843232183312219[46] = 0.0;
out_1623843232183312219[47] = 0.0;
out_1623843232183312219[48] = 0.0;
out_1623843232183312219[49] = 0.0;
out_1623843232183312219[50] = 1.0;
out_1623843232183312219[51] = 0.0;
out_1623843232183312219[52] = 0.0;
out_1623843232183312219[53] = 0.0;
out_1623843232183312219[54] = 0.0;
out_1623843232183312219[55] = 0.0;
out_1623843232183312219[56] = 0.0;
out_1623843232183312219[57] = 0.0;
out_1623843232183312219[58] = 0.0;
out_1623843232183312219[59] = 0.0;
out_1623843232183312219[60] = 1.0;
out_1623843232183312219[61] = 0.0;
out_1623843232183312219[62] = 0.0;
out_1623843232183312219[63] = 0.0;
out_1623843232183312219[64] = 0.0;
out_1623843232183312219[65] = 0.0;
out_1623843232183312219[66] = 0.0;
out_1623843232183312219[67] = 0.0;
out_1623843232183312219[68] = 0.0;
out_1623843232183312219[69] = 0.0;
out_1623843232183312219[70] = 1.0;
out_1623843232183312219[71] = 0.0;
out_1623843232183312219[72] = 0.0;
out_1623843232183312219[73] = 0.0;
out_1623843232183312219[74] = 0.0;
out_1623843232183312219[75] = 0.0;
out_1623843232183312219[76] = 0.0;
out_1623843232183312219[77] = 0.0;
out_1623843232183312219[78] = 0.0;
out_1623843232183312219[79] = 0.0;
out_1623843232183312219[80] = 1.0;
void H_mod_fun(double *state, double *out_4134445094065349854) {
out_4134445094065349854[0] = 1.0;
out_4134445094065349854[1] = 0.0;
out_4134445094065349854[2] = 0.0;
out_4134445094065349854[3] = 0.0;
out_4134445094065349854[4] = 0.0;
out_4134445094065349854[5] = 0.0;
out_4134445094065349854[6] = 0.0;
out_4134445094065349854[7] = 0.0;
out_4134445094065349854[8] = 0.0;
out_4134445094065349854[9] = 0.0;
out_4134445094065349854[10] = 1.0;
out_4134445094065349854[11] = 0.0;
out_4134445094065349854[12] = 0.0;
out_4134445094065349854[13] = 0.0;
out_4134445094065349854[14] = 0.0;
out_4134445094065349854[15] = 0.0;
out_4134445094065349854[16] = 0.0;
out_4134445094065349854[17] = 0.0;
out_4134445094065349854[18] = 0.0;
out_4134445094065349854[19] = 0.0;
out_4134445094065349854[20] = 1.0;
out_4134445094065349854[21] = 0.0;
out_4134445094065349854[22] = 0.0;
out_4134445094065349854[23] = 0.0;
out_4134445094065349854[24] = 0.0;
out_4134445094065349854[25] = 0.0;
out_4134445094065349854[26] = 0.0;
out_4134445094065349854[27] = 0.0;
out_4134445094065349854[28] = 0.0;
out_4134445094065349854[29] = 0.0;
out_4134445094065349854[30] = 1.0;
out_4134445094065349854[31] = 0.0;
out_4134445094065349854[32] = 0.0;
out_4134445094065349854[33] = 0.0;
out_4134445094065349854[34] = 0.0;
out_4134445094065349854[35] = 0.0;
out_4134445094065349854[36] = 0.0;
out_4134445094065349854[37] = 0.0;
out_4134445094065349854[38] = 0.0;
out_4134445094065349854[39] = 0.0;
out_4134445094065349854[40] = 1.0;
out_4134445094065349854[41] = 0.0;
out_4134445094065349854[42] = 0.0;
out_4134445094065349854[43] = 0.0;
out_4134445094065349854[44] = 0.0;
out_4134445094065349854[45] = 0.0;
out_4134445094065349854[46] = 0.0;
out_4134445094065349854[47] = 0.0;
out_4134445094065349854[48] = 0.0;
out_4134445094065349854[49] = 0.0;
out_4134445094065349854[50] = 1.0;
out_4134445094065349854[51] = 0.0;
out_4134445094065349854[52] = 0.0;
out_4134445094065349854[53] = 0.0;
out_4134445094065349854[54] = 0.0;
out_4134445094065349854[55] = 0.0;
out_4134445094065349854[56] = 0.0;
out_4134445094065349854[57] = 0.0;
out_4134445094065349854[58] = 0.0;
out_4134445094065349854[59] = 0.0;
out_4134445094065349854[60] = 1.0;
out_4134445094065349854[61] = 0.0;
out_4134445094065349854[62] = 0.0;
out_4134445094065349854[63] = 0.0;
out_4134445094065349854[64] = 0.0;
out_4134445094065349854[65] = 0.0;
out_4134445094065349854[66] = 0.0;
out_4134445094065349854[67] = 0.0;
out_4134445094065349854[68] = 0.0;
out_4134445094065349854[69] = 0.0;
out_4134445094065349854[70] = 1.0;
out_4134445094065349854[71] = 0.0;
out_4134445094065349854[72] = 0.0;
out_4134445094065349854[73] = 0.0;
out_4134445094065349854[74] = 0.0;
out_4134445094065349854[75] = 0.0;
out_4134445094065349854[76] = 0.0;
out_4134445094065349854[77] = 0.0;
out_4134445094065349854[78] = 0.0;
out_4134445094065349854[79] = 0.0;
out_4134445094065349854[80] = 1.0;
}
void f_fun(double *state, double dt, double *out_1622952619636770739) {
out_1622952619636770739[0] = state[0];
out_1622952619636770739[1] = state[1];
out_1622952619636770739[2] = state[2];
out_1622952619636770739[3] = state[3];
out_1622952619636770739[4] = state[4];
out_1622952619636770739[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8100000000000005*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
out_1622952619636770739[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
out_1622952619636770739[7] = state[7];
out_1622952619636770739[8] = state[8];
void f_fun(double *state, double dt, double *out_1187519494066628558) {
out_1187519494066628558[0] = state[0];
out_1187519494066628558[1] = state[1];
out_1187519494066628558[2] = state[2];
out_1187519494066628558[3] = state[3];
out_1187519494066628558[4] = state[4];
out_1187519494066628558[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8100000000000005*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
out_1187519494066628558[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
out_1187519494066628558[7] = state[7];
out_1187519494066628558[8] = state[8];
}
void F_fun(double *state, double dt, double *out_7142842168519911469) {
out_7142842168519911469[0] = 1;
out_7142842168519911469[1] = 0;
out_7142842168519911469[2] = 0;
out_7142842168519911469[3] = 0;
out_7142842168519911469[4] = 0;
out_7142842168519911469[5] = 0;
out_7142842168519911469[6] = 0;
out_7142842168519911469[7] = 0;
out_7142842168519911469[8] = 0;
out_7142842168519911469[9] = 0;
out_7142842168519911469[10] = 1;
out_7142842168519911469[11] = 0;
out_7142842168519911469[12] = 0;
out_7142842168519911469[13] = 0;
out_7142842168519911469[14] = 0;
out_7142842168519911469[15] = 0;
out_7142842168519911469[16] = 0;
out_7142842168519911469[17] = 0;
out_7142842168519911469[18] = 0;
out_7142842168519911469[19] = 0;
out_7142842168519911469[20] = 1;
out_7142842168519911469[21] = 0;
out_7142842168519911469[22] = 0;
out_7142842168519911469[23] = 0;
out_7142842168519911469[24] = 0;
out_7142842168519911469[25] = 0;
out_7142842168519911469[26] = 0;
out_7142842168519911469[27] = 0;
out_7142842168519911469[28] = 0;
out_7142842168519911469[29] = 0;
out_7142842168519911469[30] = 1;
out_7142842168519911469[31] = 0;
out_7142842168519911469[32] = 0;
out_7142842168519911469[33] = 0;
out_7142842168519911469[34] = 0;
out_7142842168519911469[35] = 0;
out_7142842168519911469[36] = 0;
out_7142842168519911469[37] = 0;
out_7142842168519911469[38] = 0;
out_7142842168519911469[39] = 0;
out_7142842168519911469[40] = 1;
out_7142842168519911469[41] = 0;
out_7142842168519911469[42] = 0;
out_7142842168519911469[43] = 0;
out_7142842168519911469[44] = 0;
out_7142842168519911469[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
out_7142842168519911469[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_7142842168519911469[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_7142842168519911469[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_7142842168519911469[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
out_7142842168519911469[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_7142842168519911469[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_7142842168519911469[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_7142842168519911469[53] = -9.8100000000000005*dt;
out_7142842168519911469[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
out_7142842168519911469[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_7142842168519911469[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7142842168519911469[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7142842168519911469[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
out_7142842168519911469[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_7142842168519911469[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
out_7142842168519911469[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7142842168519911469[62] = 0;
out_7142842168519911469[63] = 0;
out_7142842168519911469[64] = 0;
out_7142842168519911469[65] = 0;
out_7142842168519911469[66] = 0;
out_7142842168519911469[67] = 0;
out_7142842168519911469[68] = 0;
out_7142842168519911469[69] = 0;
out_7142842168519911469[70] = 1;
out_7142842168519911469[71] = 0;
out_7142842168519911469[72] = 0;
out_7142842168519911469[73] = 0;
out_7142842168519911469[74] = 0;
out_7142842168519911469[75] = 0;
out_7142842168519911469[76] = 0;
out_7142842168519911469[77] = 0;
out_7142842168519911469[78] = 0;
out_7142842168519911469[79] = 0;
out_7142842168519911469[80] = 1;
void F_fun(double *state, double dt, double *out_638221139616797346) {
out_638221139616797346[0] = 1;
out_638221139616797346[1] = 0;
out_638221139616797346[2] = 0;
out_638221139616797346[3] = 0;
out_638221139616797346[4] = 0;
out_638221139616797346[5] = 0;
out_638221139616797346[6] = 0;
out_638221139616797346[7] = 0;
out_638221139616797346[8] = 0;
out_638221139616797346[9] = 0;
out_638221139616797346[10] = 1;
out_638221139616797346[11] = 0;
out_638221139616797346[12] = 0;
out_638221139616797346[13] = 0;
out_638221139616797346[14] = 0;
out_638221139616797346[15] = 0;
out_638221139616797346[16] = 0;
out_638221139616797346[17] = 0;
out_638221139616797346[18] = 0;
out_638221139616797346[19] = 0;
out_638221139616797346[20] = 1;
out_638221139616797346[21] = 0;
out_638221139616797346[22] = 0;
out_638221139616797346[23] = 0;
out_638221139616797346[24] = 0;
out_638221139616797346[25] = 0;
out_638221139616797346[26] = 0;
out_638221139616797346[27] = 0;
out_638221139616797346[28] = 0;
out_638221139616797346[29] = 0;
out_638221139616797346[30] = 1;
out_638221139616797346[31] = 0;
out_638221139616797346[32] = 0;
out_638221139616797346[33] = 0;
out_638221139616797346[34] = 0;
out_638221139616797346[35] = 0;
out_638221139616797346[36] = 0;
out_638221139616797346[37] = 0;
out_638221139616797346[38] = 0;
out_638221139616797346[39] = 0;
out_638221139616797346[40] = 1;
out_638221139616797346[41] = 0;
out_638221139616797346[42] = 0;
out_638221139616797346[43] = 0;
out_638221139616797346[44] = 0;
out_638221139616797346[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
out_638221139616797346[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_638221139616797346[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_638221139616797346[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_638221139616797346[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
out_638221139616797346[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_638221139616797346[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_638221139616797346[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_638221139616797346[53] = -9.8100000000000005*dt;
out_638221139616797346[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
out_638221139616797346[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_638221139616797346[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_638221139616797346[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_638221139616797346[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
out_638221139616797346[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_638221139616797346[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
out_638221139616797346[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_638221139616797346[62] = 0;
out_638221139616797346[63] = 0;
out_638221139616797346[64] = 0;
out_638221139616797346[65] = 0;
out_638221139616797346[66] = 0;
out_638221139616797346[67] = 0;
out_638221139616797346[68] = 0;
out_638221139616797346[69] = 0;
out_638221139616797346[70] = 1;
out_638221139616797346[71] = 0;
out_638221139616797346[72] = 0;
out_638221139616797346[73] = 0;
out_638221139616797346[74] = 0;
out_638221139616797346[75] = 0;
out_638221139616797346[76] = 0;
out_638221139616797346[77] = 0;
out_638221139616797346[78] = 0;
out_638221139616797346[79] = 0;
out_638221139616797346[80] = 1;
}
void h_25(double *state, double *unused, double *out_7699167154037203435) {
out_7699167154037203435[0] = state[6];
void h_25(double *state, double *unused, double *out_6007362445110034756) {
out_6007362445110034756[0] = state[6];
}
void H_25(double *state, double *unused, double *out_1899137417806179458) {
out_1899137417806179458[0] = 0;
out_1899137417806179458[1] = 0;
out_1899137417806179458[2] = 0;
out_1899137417806179458[3] = 0;
out_1899137417806179458[4] = 0;
out_1899137417806179458[5] = 0;
out_1899137417806179458[6] = 1;
out_1899137417806179458[7] = 0;
out_1899137417806179458[8] = 0;
void H_25(double *state, double *unused, double *out_5119110753731964525) {
out_5119110753731964525[0] = 0;
out_5119110753731964525[1] = 0;
out_5119110753731964525[2] = 0;
out_5119110753731964525[3] = 0;
out_5119110753731964525[4] = 0;
out_5119110753731964525[5] = 0;
out_5119110753731964525[6] = 1;
out_5119110753731964525[7] = 0;
out_5119110753731964525[8] = 0;
}
void h_24(double *state, double *unused, double *out_5775267180984789848) {
out_5775267180984789848[0] = state[4];
out_5775267180984789848[1] = state[5];
void h_24(double *state, double *unused, double *out_5449620096162801389) {
out_5449620096162801389[0] = state[4];
out_5449620096162801389[1] = state[5];
}
void H_24(double *state, double *unused, double *out_273512181199320108) {
out_273512181199320108[0] = 0;
out_273512181199320108[1] = 0;
out_273512181199320108[2] = 0;
out_273512181199320108[3] = 0;
out_273512181199320108[4] = 1;
out_273512181199320108[5] = 0;
out_273512181199320108[6] = 0;
out_273512181199320108[7] = 0;
out_273512181199320108[8] = 0;
out_273512181199320108[9] = 0;
out_273512181199320108[10] = 0;
out_273512181199320108[11] = 0;
out_273512181199320108[12] = 0;
out_273512181199320108[13] = 0;
out_273512181199320108[14] = 1;
out_273512181199320108[15] = 0;
out_273512181199320108[16] = 0;
out_273512181199320108[17] = 0;
void H_24(double *state, double *unused, double *out_2946461154726464959) {
out_2946461154726464959[0] = 0;
out_2946461154726464959[1] = 0;
out_2946461154726464959[2] = 0;
out_2946461154726464959[3] = 0;
out_2946461154726464959[4] = 1;
out_2946461154726464959[5] = 0;
out_2946461154726464959[6] = 0;
out_2946461154726464959[7] = 0;
out_2946461154726464959[8] = 0;
out_2946461154726464959[9] = 0;
out_2946461154726464959[10] = 0;
out_2946461154726464959[11] = 0;
out_2946461154726464959[12] = 0;
out_2946461154726464959[13] = 0;
out_2946461154726464959[14] = 1;
out_2946461154726464959[15] = 0;
out_2946461154726464959[16] = 0;
out_2946461154726464959[17] = 0;
}
void h_30(double *state, double *unused, double *out_940710322681338449) {
out_940710322681338449[0] = state[4];
void h_30(double *state, double *unused, double *out_2369912916856012406) {
out_2369912916856012406[0] = state[4];
}
void H_30(double *state, double *unused, double *out_8815827759297796213) {
out_8815827759297796213[0] = 0;
out_8815827759297796213[1] = 0;
out_8815827759297796213[2] = 0;
out_8815827759297796213[3] = 0;
out_8815827759297796213[4] = 1;
out_8815827759297796213[5] = 0;
out_8815827759297796213[6] = 0;
out_8815827759297796213[7] = 0;
out_8815827759297796213[8] = 0;
void H_30(double *state, double *unused, double *out_7637443712239213152) {
out_7637443712239213152[0] = 0;
out_7637443712239213152[1] = 0;
out_7637443712239213152[2] = 0;
out_7637443712239213152[3] = 0;
out_7637443712239213152[4] = 1;
out_7637443712239213152[5] = 0;
out_7637443712239213152[6] = 0;
out_7637443712239213152[7] = 0;
out_7637443712239213152[8] = 0;
}
void h_26(double *state, double *unused, double *out_1922794416016636561) {
out_1922794416016636561[0] = state[7];
void h_26(double *state, double *unused, double *out_6836290203325307661) {
out_6836290203325307661[0] = state[7];
}
void H_26(double *state, double *unused, double *out_1842365901067876766) {
out_1842365901067876766[0] = 0;
out_1842365901067876766[1] = 0;
out_1842365901067876766[2] = 0;
out_1842365901067876766[3] = 0;
out_1842365901067876766[4] = 0;
out_1842365901067876766[5] = 0;
out_1842365901067876766[6] = 0;
out_1842365901067876766[7] = 1;
out_1842365901067876766[8] = 0;
void H_26(double *state, double *unused, double *out_1377607434857908301) {
out_1377607434857908301[0] = 0;
out_1377607434857908301[1] = 0;
out_1377607434857908301[2] = 0;
out_1377607434857908301[3] = 0;
out_1377607434857908301[4] = 0;
out_1377607434857908301[5] = 0;
out_1377607434857908301[6] = 0;
out_1377607434857908301[7] = 1;
out_1377607434857908301[8] = 0;
}
void h_27(double *state, double *unused, double *out_3098231746361013839) {
out_3098231746361013839[0] = state[3];
void h_27(double *state, double *unused, double *out_2710474474758657570) {
out_2710474474758657570[0] = state[3];
}
void H_27(double *state, double *unused, double *out_6641064447497371302) {
out_6641064447497371302[0] = 0;
out_6641064447497371302[1] = 0;
out_6641064447497371302[2] = 0;
out_6641064447497371302[3] = 1;
out_6641064447497371302[4] = 0;
out_6641064447497371302[5] = 0;
out_6641064447497371302[6] = 0;
out_6641064447497371302[7] = 0;
out_6641064447497371302[8] = 0;
void H_27(double *state, double *unused, double *out_8585706290286395247) {
out_8585706290286395247[0] = 0;
out_8585706290286395247[1] = 0;
out_8585706290286395247[2] = 0;
out_8585706290286395247[3] = 1;
out_8585706290286395247[4] = 0;
out_8585706290286395247[5] = 0;
out_8585706290286395247[6] = 0;
out_8585706290286395247[7] = 0;
out_8585706290286395247[8] = 0;
}
void h_29(double *state, double *unused, double *out_539217781893008511) {
out_539217781893008511[0] = state[1];
void h_29(double *state, double *unused, double *out_1542363084005055587) {
out_1542363084005055587[0] = state[1];
}
void H_29(double *state, double *unused, double *out_4927701720627820269) {
out_4927701720627820269[0] = 0;
out_4927701720627820269[1] = 1;
out_4927701720627820269[2] = 0;
out_4927701720627820269[3] = 0;
out_4927701720627820269[4] = 0;
out_4927701720627820269[5] = 0;
out_4927701720627820269[6] = 0;
out_4927701720627820269[7] = 0;
out_4927701720627820269[8] = 0;
void H_29(double *state, double *unused, double *out_8147675056553605336) {
out_8147675056553605336[0] = 0;
out_8147675056553605336[1] = 1;
out_8147675056553605336[2] = 0;
out_8147675056553605336[3] = 0;
out_8147675056553605336[4] = 0;
out_8147675056553605336[5] = 0;
out_8147675056553605336[6] = 0;
out_8147675056553605336[7] = 0;
out_8147675056553605336[8] = 0;
}
void h_28(double *state, double *unused, double *out_822702928747961705) {
out_822702928747961705[0] = state[0];
void h_28(double *state, double *unused, double *out_7712147742419503215) {
out_7712147742419503215[0] = state[0];
}
void H_28(double *state, double *unused, double *out_154697296441710305) {
out_154697296441710305[0] = 1;
out_154697296441710305[1] = 0;
out_154697296441710305[2] = 0;
out_154697296441710305[3] = 0;
out_154697296441710305[4] = 0;
out_154697296441710305[5] = 0;
out_154697296441710305[6] = 0;
out_154697296441710305[7] = 0;
out_154697296441710305[8] = 0;
void H_28(double *state, double *unused, double *out_3065276039484074762) {
out_3065276039484074762[0] = 1;
out_3065276039484074762[1] = 0;
out_3065276039484074762[2] = 0;
out_3065276039484074762[3] = 0;
out_3065276039484074762[4] = 0;
out_3065276039484074762[5] = 0;
out_3065276039484074762[6] = 0;
out_3065276039484074762[7] = 0;
out_3065276039484074762[8] = 0;
}
void h_31(double *state, double *unused, double *out_6649273621392976317) {
out_6649273621392976317[0] = state[8];
void h_31(double *state, double *unused, double *out_6282556507394540645) {
out_6282556507394540645[0] = state[8];
}
void H_31(double *state, double *unused, double *out_1929783379683139886) {
out_1929783379683139886[0] = 0;
out_1929783379683139886[1] = 0;
out_1929783379683139886[2] = 0;
out_1929783379683139886[3] = 0;
out_1929783379683139886[4] = 0;
out_1929783379683139886[5] = 0;
out_1929783379683139886[6] = 0;
out_1929783379683139886[7] = 0;
out_1929783379683139886[8] = 1;
void H_31(double *state, double *unused, double *out_5149756715608924953) {
out_5149756715608924953[0] = 0;
out_5149756715608924953[1] = 0;
out_5149756715608924953[2] = 0;
out_5149756715608924953[3] = 0;
out_5149756715608924953[4] = 0;
out_5149756715608924953[5] = 0;
out_5149756715608924953[6] = 0;
out_5149756715608924953[7] = 0;
out_5149756715608924953[8] = 1;
}
#include <eigen3/Eigen/Dense>
#include <iostream>
@@ -518,68 +518,68 @@ void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_31, H_31, NULL, in_z, in_R, in_ea, MAHA_THRESH_31);
}
void car_err_fun(double *nom_x, double *delta_x, double *out_7084348270501559549) {
err_fun(nom_x, delta_x, out_7084348270501559549);
void car_err_fun(double *nom_x, double *delta_x, double *out_8339538066892951453) {
err_fun(nom_x, delta_x, out_8339538066892951453);
}
void car_inv_err_fun(double *nom_x, double *true_x, double *out_693097121251649199) {
inv_err_fun(nom_x, true_x, out_693097121251649199);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1869575881362213489) {
inv_err_fun(nom_x, true_x, out_1869575881362213489);
}
void car_H_mod_fun(double *state, double *out_1623843232183312219) {
H_mod_fun(state, out_1623843232183312219);
void car_H_mod_fun(double *state, double *out_4134445094065349854) {
H_mod_fun(state, out_4134445094065349854);
}
void car_f_fun(double *state, double dt, double *out_1622952619636770739) {
f_fun(state, dt, out_1622952619636770739);
void car_f_fun(double *state, double dt, double *out_1187519494066628558) {
f_fun(state, dt, out_1187519494066628558);
}
void car_F_fun(double *state, double dt, double *out_7142842168519911469) {
F_fun(state, dt, out_7142842168519911469);
void car_F_fun(double *state, double dt, double *out_638221139616797346) {
F_fun(state, dt, out_638221139616797346);
}
void car_h_25(double *state, double *unused, double *out_7699167154037203435) {
h_25(state, unused, out_7699167154037203435);
void car_h_25(double *state, double *unused, double *out_6007362445110034756) {
h_25(state, unused, out_6007362445110034756);
}
void car_H_25(double *state, double *unused, double *out_1899137417806179458) {
H_25(state, unused, out_1899137417806179458);
void car_H_25(double *state, double *unused, double *out_5119110753731964525) {
H_25(state, unused, out_5119110753731964525);
}
void car_h_24(double *state, double *unused, double *out_5775267180984789848) {
h_24(state, unused, out_5775267180984789848);
void car_h_24(double *state, double *unused, double *out_5449620096162801389) {
h_24(state, unused, out_5449620096162801389);
}
void car_H_24(double *state, double *unused, double *out_273512181199320108) {
H_24(state, unused, out_273512181199320108);
void car_H_24(double *state, double *unused, double *out_2946461154726464959) {
H_24(state, unused, out_2946461154726464959);
}
void car_h_30(double *state, double *unused, double *out_940710322681338449) {
h_30(state, unused, out_940710322681338449);
void car_h_30(double *state, double *unused, double *out_2369912916856012406) {
h_30(state, unused, out_2369912916856012406);
}
void car_H_30(double *state, double *unused, double *out_8815827759297796213) {
H_30(state, unused, out_8815827759297796213);
void car_H_30(double *state, double *unused, double *out_7637443712239213152) {
H_30(state, unused, out_7637443712239213152);
}
void car_h_26(double *state, double *unused, double *out_1922794416016636561) {
h_26(state, unused, out_1922794416016636561);
void car_h_26(double *state, double *unused, double *out_6836290203325307661) {
h_26(state, unused, out_6836290203325307661);
}
void car_H_26(double *state, double *unused, double *out_1842365901067876766) {
H_26(state, unused, out_1842365901067876766);
void car_H_26(double *state, double *unused, double *out_1377607434857908301) {
H_26(state, unused, out_1377607434857908301);
}
void car_h_27(double *state, double *unused, double *out_3098231746361013839) {
h_27(state, unused, out_3098231746361013839);
void car_h_27(double *state, double *unused, double *out_2710474474758657570) {
h_27(state, unused, out_2710474474758657570);
}
void car_H_27(double *state, double *unused, double *out_6641064447497371302) {
H_27(state, unused, out_6641064447497371302);
void car_H_27(double *state, double *unused, double *out_8585706290286395247) {
H_27(state, unused, out_8585706290286395247);
}
void car_h_29(double *state, double *unused, double *out_539217781893008511) {
h_29(state, unused, out_539217781893008511);
void car_h_29(double *state, double *unused, double *out_1542363084005055587) {
h_29(state, unused, out_1542363084005055587);
}
void car_H_29(double *state, double *unused, double *out_4927701720627820269) {
H_29(state, unused, out_4927701720627820269);
void car_H_29(double *state, double *unused, double *out_8147675056553605336) {
H_29(state, unused, out_8147675056553605336);
}
void car_h_28(double *state, double *unused, double *out_822702928747961705) {
h_28(state, unused, out_822702928747961705);
void car_h_28(double *state, double *unused, double *out_7712147742419503215) {
h_28(state, unused, out_7712147742419503215);
}
void car_H_28(double *state, double *unused, double *out_154697296441710305) {
H_28(state, unused, out_154697296441710305);
void car_H_28(double *state, double *unused, double *out_3065276039484074762) {
H_28(state, unused, out_3065276039484074762);
}
void car_h_31(double *state, double *unused, double *out_6649273621392976317) {
h_31(state, unused, out_6649273621392976317);
void car_h_31(double *state, double *unused, double *out_6282556507394540645) {
h_31(state, unused, out_6282556507394540645);
}
void car_H_31(double *state, double *unused, double *out_1929783379683139886) {
H_31(state, unused, out_1929783379683139886);
void car_H_31(double *state, double *unused, double *out_5149756715608924953) {
H_31(state, unused, out_5149756715608924953);
}
void car_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
+21 -21
View File
@@ -9,27 +9,27 @@ void car_update_27(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_29(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_err_fun(double *nom_x, double *delta_x, double *out_7084348270501559549);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_693097121251649199);
void car_H_mod_fun(double *state, double *out_1623843232183312219);
void car_f_fun(double *state, double dt, double *out_1622952619636770739);
void car_F_fun(double *state, double dt, double *out_7142842168519911469);
void car_h_25(double *state, double *unused, double *out_7699167154037203435);
void car_H_25(double *state, double *unused, double *out_1899137417806179458);
void car_h_24(double *state, double *unused, double *out_5775267180984789848);
void car_H_24(double *state, double *unused, double *out_273512181199320108);
void car_h_30(double *state, double *unused, double *out_940710322681338449);
void car_H_30(double *state, double *unused, double *out_8815827759297796213);
void car_h_26(double *state, double *unused, double *out_1922794416016636561);
void car_H_26(double *state, double *unused, double *out_1842365901067876766);
void car_h_27(double *state, double *unused, double *out_3098231746361013839);
void car_H_27(double *state, double *unused, double *out_6641064447497371302);
void car_h_29(double *state, double *unused, double *out_539217781893008511);
void car_H_29(double *state, double *unused, double *out_4927701720627820269);
void car_h_28(double *state, double *unused, double *out_822702928747961705);
void car_H_28(double *state, double *unused, double *out_154697296441710305);
void car_h_31(double *state, double *unused, double *out_6649273621392976317);
void car_H_31(double *state, double *unused, double *out_1929783379683139886);
void car_err_fun(double *nom_x, double *delta_x, double *out_8339538066892951453);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1869575881362213489);
void car_H_mod_fun(double *state, double *out_4134445094065349854);
void car_f_fun(double *state, double dt, double *out_1187519494066628558);
void car_F_fun(double *state, double dt, double *out_638221139616797346);
void car_h_25(double *state, double *unused, double *out_6007362445110034756);
void car_H_25(double *state, double *unused, double *out_5119110753731964525);
void car_h_24(double *state, double *unused, double *out_5449620096162801389);
void car_H_24(double *state, double *unused, double *out_2946461154726464959);
void car_h_30(double *state, double *unused, double *out_2369912916856012406);
void car_H_30(double *state, double *unused, double *out_7637443712239213152);
void car_h_26(double *state, double *unused, double *out_6836290203325307661);
void car_H_26(double *state, double *unused, double *out_1377607434857908301);
void car_h_27(double *state, double *unused, double *out_2710474474758657570);
void car_H_27(double *state, double *unused, double *out_8585706290286395247);
void car_h_29(double *state, double *unused, double *out_1542363084005055587);
void car_H_29(double *state, double *unused, double *out_8147675056553605336);
void car_h_28(double *state, double *unused, double *out_7712147742419503215);
void car_H_28(double *state, double *unused, double *out_3065276039484074762);
void car_h_31(double *state, double *unused, double *out_6282556507394540645);
void car_H_31(double *state, double *unused, double *out_5149756715608924953);
void car_predict(double *in_x, double *in_P, double *in_Q, double dt);
void car_set_mass(double x);
void car_set_rotational_inertia(double x);
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
+13 -13
View File
@@ -5,18 +5,18 @@ void pose_update_4(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void pose_update_10(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_err_fun(double *nom_x, double *delta_x, double *out_2551549382290402050);
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_3575109948453160374);
void pose_H_mod_fun(double *state, double *out_2954011976512996711);
void pose_f_fun(double *state, double dt, double *out_4081841541460951824);
void pose_F_fun(double *state, double dt, double *out_2326707394449301144);
void pose_h_4(double *state, double *unused, double *out_5242858642703077087);
void pose_H_4(double *state, double *unused, double *out_1660615060416319653);
void pose_h_10(double *state, double *unused, double *out_8287724405821980303);
void pose_H_10(double *state, double *unused, double *out_8634670991932313772);
void pose_h_13(double *state, double *unused, double *out_936388540160520926);
void pose_H_13(double *state, double *unused, double *out_4872888885748652454);
void pose_h_14(double *state, double *unused, double *out_3784911557802666238);
void pose_H_14(double *state, double *unused, double *out_5623855916755804182);
void pose_err_fun(double *nom_x, double *delta_x, double *out_8230036097863094971);
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_8741051770711475830);
void pose_H_mod_fun(double *state, double *out_1900632188772248703);
void pose_f_fun(double *state, double dt, double *out_3077738493587277525);
void pose_F_fun(double *state, double dt, double *out_474426866180563475);
void pose_h_4(double *state, double *unused, double *out_616527671886839495);
void pose_H_4(double *state, double *unused, double *out_702684706889350599);
void pose_h_10(double *state, double *unused, double *out_767369525646024651);
void pose_H_10(double *state, double *unused, double *out_8347276505705953254);
void pose_h_13(double *state, double *unused, double *out_7518652466578138352);
void pose_H_13(double *state, double *unused, double *out_2509589118442982202);
void pose_h_14(double *state, double *unused, double *out_7727744869207997497);
void pose_H_14(double *state, double *unused, double *out_8183830522169091023);
void pose_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More