update intermediate solution

This commit is contained in:
r.koeppe
2024-06-12 19:47:42 +02:00
parent 74509c8da3
commit 2cb8159470
56 changed files with 13176 additions and 9540 deletions

View File

@ -70,23 +70,24 @@ HAL_StatusTypeDef spi2can(SPI_HandleTypeDef *hspi, CAN_HandleTypeDef *hcan, cons
auto response = vn::pkg_response_t<payload_t>();
size_t datalen = 8;
uint16_t can_id = 0;
uint8_t *data = nullptr;
spi_read(hspi, &request, &response);
switch (id) {
case vn::YawPitchRollTrueBodyAccelerationAndAngularRatesRegisterID:
{
can_id = CAN1_VN200_YPR_FRAME_ID;
vn::YawPitchRollTrueBodyAccelerationAndAngularRatesRegister payload;
case vn::InsSolutionLlaRegisterID:
{
can_id = CAN1_VN200_INS_YPR_FRAME_ID;
vn::InsSolutionLlaRegister payload;
payload = response.payload;
//canlib::encode::can1::vn200_ypr(canlib::frame::decoded::can1::vn200_ypr_t((double) payload.yawPitchRoll.x, (double) payload.yawPitchRoll.y, (double) payload.yawPitchRoll.z));
}
auto data = canlib::encode::can1::vn200_ins_ypr(canlib::frame::decoded::can1::vn200_ins_ypr_t((double) payload.yawPitchRoll.x, (double) payload.yawPitchRoll.y, (double) payload.yawPitchRoll.z, (double) payload.attUncertainty));
ftcan_transmit(hcan, can_id, (uint8_t*)(&data), datalen);
}
break;
default:
break;
}
ftcan_transmit(hcan, can_id, data, datalen);
return HAL_OK;
}

File diff suppressed because it is too large Load Diff

View File

@ -9,71 +9,139 @@ namespace canlib {
namespace frame {
namespace decoded {
namespace can1 {
struct vn200_ins_t {
double yaw;
vn200_ins_t() {
this->yaw = 0.0;
struct vn200_gnss_ll_t {
double latitude;
double longitude;
double uncertainty_n;
double uncertainty_e;
vn200_gnss_ll_t() {
this->latitude = 0.0;
this->longitude = 0.0;
this->uncertainty_n = 0.0;
this->uncertainty_e = 0.0;
}
vn200_ins_t(
double yaw) {
this->yaw = yaw;
vn200_gnss_ll_t(
double latitude,
double longitude,
double uncertainty_n,
double uncertainty_e) {
this->latitude = latitude;
this->longitude = longitude;
this->uncertainty_n = uncertainty_n;
this->uncertainty_e = uncertainty_e;
}
};
struct vn200_imu_t {
double multiplexer;
double accx;
double accy;
double accz;
double angx;
double angy;
double angz;
vn200_imu_t() {
this->multiplexer = 0.0;
this->accx = 0.0;
this->accy = 0.0;
this->accz = 0.0;
this->angx = 0.0;
this->angy = 0.0;
this->angz = 0.0;
}
vn200_imu_t(
double multiplexer,
double accx,
double accy,
double accz,
double angx,
double angy,
double angz) {
this->multiplexer = multiplexer;
this->accx = accx;
this->accy = accy;
this->accz = accz;
this->angx = angx;
this->angy = angy;
this->angz = angz;
}
};
struct vn200_ypr_t {
struct vn200_ins_ypr_t {
double yaw;
double pitch;
double roll;
vn200_ypr_t() {
double uncertainty;
vn200_ins_ypr_t() {
this->yaw = 0.0;
this->pitch = 0.0;
this->roll = 0.0;
this->uncertainty = 0.0;
}
vn200_ypr_t(
vn200_ins_ypr_t(
double yaw,
double pitch,
double roll) {
double roll,
double uncertainty) {
this->yaw = yaw;
this->pitch = pitch;
this->roll = roll;
this->uncertainty = uncertainty;
}
};
struct vn200_imu_acc_lin_t {
double acc_lin_x;
double acc_lin_y;
double acc_lin_z;
vn200_imu_acc_lin_t() {
this->acc_lin_x = 0.0;
this->acc_lin_y = 0.0;
this->acc_lin_z = 0.0;
}
vn200_imu_acc_lin_t(
double acc_lin_x,
double acc_lin_y,
double acc_lin_z) {
this->acc_lin_x = acc_lin_x;
this->acc_lin_y = acc_lin_y;
this->acc_lin_z = acc_lin_z;
}
};
struct vn200_imu_acc_ang_t {
double acc_ang_x;
double acc_ang_y;
double acc_ang_z;
vn200_imu_acc_ang_t() {
this->acc_ang_x = 0.0;
this->acc_ang_y = 0.0;
this->acc_ang_z = 0.0;
}
vn200_imu_acc_ang_t(
double acc_ang_x,
double acc_ang_y,
double acc_ang_z) {
this->acc_ang_x = acc_ang_x;
this->acc_ang_y = acc_ang_y;
this->acc_ang_z = acc_ang_z;
}
};
struct vn200_ins_ll_t {
double latitude;
double longitude;
double uncertainty_n;
double uncertainty_e;
vn200_ins_ll_t() {
this->latitude = 0.0;
this->longitude = 0.0;
this->uncertainty_n = 0.0;
this->uncertainty_e = 0.0;
}
vn200_ins_ll_t(
double latitude,
double longitude,
double uncertainty_n,
double uncertainty_e) {
this->latitude = latitude;
this->longitude = longitude;
this->uncertainty_n = uncertainty_n;
this->uncertainty_e = uncertainty_e;
}
};
struct vn200_ins_vel_t {
double vel_lin_x;
double vel_lin_y;
double vel_lin_z;
double uncertainty;
vn200_ins_vel_t() {
this->vel_lin_x = 0.0;
this->vel_lin_y = 0.0;
this->vel_lin_z = 0.0;
this->uncertainty = 0.0;
}
vn200_ins_vel_t(
double vel_lin_x,
double vel_lin_y,
double vel_lin_z,
double uncertainty) {
this->vel_lin_x = vel_lin_x;
this->vel_lin_y = vel_lin_y;
this->vel_lin_z = vel_lin_z;
this->uncertainty = uncertainty;
}
};
@ -85,29 +153,55 @@ vn200_ypr_t(
// encode functions
namespace encode {
namespace can1 {
inline can1_vn200_ins_t vn200_ins(const frame::decoded::can1::vn200_ins_t frame_decoded) {
can1_vn200_ins_t frame_encoded;
frame_encoded.yaw = can1_vn200_ins_yaw_encode(frame_decoded.yaw);
inline can1_vn200_gnss_ll_t vn200_gnss_ll(const frame::decoded::can1::vn200_gnss_ll_t frame_decoded) {
can1_vn200_gnss_ll_t frame_encoded;
frame_encoded.latitude = can1_vn200_gnss_ll_latitude_encode(frame_decoded.latitude);
frame_encoded.longitude = can1_vn200_gnss_ll_longitude_encode(frame_decoded.longitude);
frame_encoded.uncertainty_n = can1_vn200_gnss_ll_uncertainty_n_encode(frame_decoded.uncertainty_n);
frame_encoded.uncertainty_e = can1_vn200_gnss_ll_uncertainty_e_encode(frame_decoded.uncertainty_e);
return frame_encoded;
}
inline can1_vn200_imu_t vn200_imu(const frame::decoded::can1::vn200_imu_t frame_decoded) {
can1_vn200_imu_t frame_encoded;
frame_encoded.multiplexer = can1_vn200_imu_multiplexer_encode(frame_decoded.multiplexer);
frame_encoded.accx = can1_vn200_imu_accx_encode(frame_decoded.accx);
frame_encoded.accy = can1_vn200_imu_accy_encode(frame_decoded.accy);
frame_encoded.accz = can1_vn200_imu_accz_encode(frame_decoded.accz);
frame_encoded.angx = can1_vn200_imu_angx_encode(frame_decoded.angx);
frame_encoded.angy = can1_vn200_imu_angy_encode(frame_decoded.angy);
frame_encoded.angz = can1_vn200_imu_angz_encode(frame_decoded.angz);
inline can1_vn200_ins_ypr_t vn200_ins_ypr(const frame::decoded::can1::vn200_ins_ypr_t frame_decoded) {
can1_vn200_ins_ypr_t frame_encoded;
frame_encoded.yaw = can1_vn200_ins_ypr_yaw_encode(frame_decoded.yaw);
frame_encoded.pitch = can1_vn200_ins_ypr_pitch_encode(frame_decoded.pitch);
frame_encoded.roll = can1_vn200_ins_ypr_roll_encode(frame_decoded.roll);
frame_encoded.uncertainty = can1_vn200_ins_ypr_uncertainty_encode(frame_decoded.uncertainty);
return frame_encoded;
}
inline can1_vn200_ypr_t vn200_ypr(const frame::decoded::can1::vn200_ypr_t frame_decoded) {
can1_vn200_ypr_t frame_encoded;
frame_encoded.yaw = can1_vn200_ypr_yaw_encode(frame_decoded.yaw);
frame_encoded.pitch = can1_vn200_ypr_pitch_encode(frame_decoded.pitch);
frame_encoded.roll = can1_vn200_ypr_roll_encode(frame_decoded.roll);
inline can1_vn200_imu_acc_lin_t vn200_imu_acc_lin(const frame::decoded::can1::vn200_imu_acc_lin_t frame_decoded) {
can1_vn200_imu_acc_lin_t frame_encoded;
frame_encoded.acc_lin_x = can1_vn200_imu_acc_lin_acc_lin_x_encode(frame_decoded.acc_lin_x);
frame_encoded.acc_lin_y = can1_vn200_imu_acc_lin_acc_lin_y_encode(frame_decoded.acc_lin_y);
frame_encoded.acc_lin_z = can1_vn200_imu_acc_lin_acc_lin_z_encode(frame_decoded.acc_lin_z);
return frame_encoded;
}
inline can1_vn200_imu_acc_ang_t vn200_imu_acc_ang(const frame::decoded::can1::vn200_imu_acc_ang_t frame_decoded) {
can1_vn200_imu_acc_ang_t frame_encoded;
frame_encoded.acc_ang_x = can1_vn200_imu_acc_ang_acc_ang_x_encode(frame_decoded.acc_ang_x);
frame_encoded.acc_ang_y = can1_vn200_imu_acc_ang_acc_ang_y_encode(frame_decoded.acc_ang_y);
frame_encoded.acc_ang_z = can1_vn200_imu_acc_ang_acc_ang_z_encode(frame_decoded.acc_ang_z);
return frame_encoded;
}
inline can1_vn200_ins_ll_t vn200_ins_ll(const frame::decoded::can1::vn200_ins_ll_t frame_decoded) {
can1_vn200_ins_ll_t frame_encoded;
frame_encoded.latitude = can1_vn200_ins_ll_latitude_encode(frame_decoded.latitude);
frame_encoded.longitude = can1_vn200_ins_ll_longitude_encode(frame_decoded.longitude);
frame_encoded.uncertainty_n = can1_vn200_ins_ll_uncertainty_n_encode(frame_decoded.uncertainty_n);
frame_encoded.uncertainty_e = can1_vn200_ins_ll_uncertainty_e_encode(frame_decoded.uncertainty_e);
return frame_encoded;
}
inline can1_vn200_ins_vel_t vn200_ins_vel(const frame::decoded::can1::vn200_ins_vel_t frame_decoded) {
can1_vn200_ins_vel_t frame_encoded;
frame_encoded.vel_lin_x = can1_vn200_ins_vel_vel_lin_x_encode(frame_decoded.vel_lin_x);
frame_encoded.vel_lin_y = can1_vn200_ins_vel_vel_lin_y_encode(frame_decoded.vel_lin_y);
frame_encoded.vel_lin_z = can1_vn200_ins_vel_vel_lin_z_encode(frame_decoded.vel_lin_z);
frame_encoded.uncertainty = can1_vn200_ins_vel_uncertainty_encode(frame_decoded.uncertainty);
return frame_encoded;
}
@ -117,29 +211,55 @@ inline can1_vn200_ypr_t vn200_ypr(const frame::decoded::can1::vn200_ypr_t frame_
// decode functions
namespace decode {
namespace can1 {
inline frame::decoded::can1::vn200_ins_t vn200_ins(const can1_vn200_ins_t frame_encoded) {
frame::decoded::can1::vn200_ins_t frame_decoded;
frame_decoded.yaw = can1_vn200_ins_yaw_decode(frame_encoded.yaw);
inline frame::decoded::can1::vn200_gnss_ll_t vn200_gnss_ll(const can1_vn200_gnss_ll_t frame_encoded) {
frame::decoded::can1::vn200_gnss_ll_t frame_decoded;
frame_decoded.latitude = can1_vn200_gnss_ll_latitude_decode(frame_encoded.latitude);
frame_decoded.longitude = can1_vn200_gnss_ll_longitude_decode(frame_encoded.longitude);
frame_decoded.uncertainty_n = can1_vn200_gnss_ll_uncertainty_n_decode(frame_encoded.uncertainty_n);
frame_decoded.uncertainty_e = can1_vn200_gnss_ll_uncertainty_e_decode(frame_encoded.uncertainty_e);
return frame_decoded;
}
inline frame::decoded::can1::vn200_imu_t vn200_imu(const can1_vn200_imu_t frame_encoded) {
frame::decoded::can1::vn200_imu_t frame_decoded;
frame_decoded.multiplexer = can1_vn200_imu_multiplexer_decode(frame_encoded.multiplexer);
frame_decoded.accx = can1_vn200_imu_accx_decode(frame_encoded.accx);
frame_decoded.accy = can1_vn200_imu_accy_decode(frame_encoded.accy);
frame_decoded.accz = can1_vn200_imu_accz_decode(frame_encoded.accz);
frame_decoded.angx = can1_vn200_imu_angx_decode(frame_encoded.angx);
frame_decoded.angy = can1_vn200_imu_angy_decode(frame_encoded.angy);
frame_decoded.angz = can1_vn200_imu_angz_decode(frame_encoded.angz);
inline frame::decoded::can1::vn200_ins_ypr_t vn200_ins_ypr(const can1_vn200_ins_ypr_t frame_encoded) {
frame::decoded::can1::vn200_ins_ypr_t frame_decoded;
frame_decoded.yaw = can1_vn200_ins_ypr_yaw_decode(frame_encoded.yaw);
frame_decoded.pitch = can1_vn200_ins_ypr_pitch_decode(frame_encoded.pitch);
frame_decoded.roll = can1_vn200_ins_ypr_roll_decode(frame_encoded.roll);
frame_decoded.uncertainty = can1_vn200_ins_ypr_uncertainty_decode(frame_encoded.uncertainty);
return frame_decoded;
}
inline frame::decoded::can1::vn200_ypr_t vn200_ypr(const can1_vn200_ypr_t frame_encoded) {
frame::decoded::can1::vn200_ypr_t frame_decoded;
frame_decoded.yaw = can1_vn200_ypr_yaw_decode(frame_encoded.yaw);
frame_decoded.pitch = can1_vn200_ypr_pitch_decode(frame_encoded.pitch);
frame_decoded.roll = can1_vn200_ypr_roll_decode(frame_encoded.roll);
inline frame::decoded::can1::vn200_imu_acc_lin_t vn200_imu_acc_lin(const can1_vn200_imu_acc_lin_t frame_encoded) {
frame::decoded::can1::vn200_imu_acc_lin_t frame_decoded;
frame_decoded.acc_lin_x = can1_vn200_imu_acc_lin_acc_lin_x_decode(frame_encoded.acc_lin_x);
frame_decoded.acc_lin_y = can1_vn200_imu_acc_lin_acc_lin_y_decode(frame_encoded.acc_lin_y);
frame_decoded.acc_lin_z = can1_vn200_imu_acc_lin_acc_lin_z_decode(frame_encoded.acc_lin_z);
return frame_decoded;
}
inline frame::decoded::can1::vn200_imu_acc_ang_t vn200_imu_acc_ang(const can1_vn200_imu_acc_ang_t frame_encoded) {
frame::decoded::can1::vn200_imu_acc_ang_t frame_decoded;
frame_decoded.acc_ang_x = can1_vn200_imu_acc_ang_acc_ang_x_decode(frame_encoded.acc_ang_x);
frame_decoded.acc_ang_y = can1_vn200_imu_acc_ang_acc_ang_y_decode(frame_encoded.acc_ang_y);
frame_decoded.acc_ang_z = can1_vn200_imu_acc_ang_acc_ang_z_decode(frame_encoded.acc_ang_z);
return frame_decoded;
}
inline frame::decoded::can1::vn200_ins_ll_t vn200_ins_ll(const can1_vn200_ins_ll_t frame_encoded) {
frame::decoded::can1::vn200_ins_ll_t frame_decoded;
frame_decoded.latitude = can1_vn200_ins_ll_latitude_decode(frame_encoded.latitude);
frame_decoded.longitude = can1_vn200_ins_ll_longitude_decode(frame_encoded.longitude);
frame_decoded.uncertainty_n = can1_vn200_ins_ll_uncertainty_n_decode(frame_encoded.uncertainty_n);
frame_decoded.uncertainty_e = can1_vn200_ins_ll_uncertainty_e_decode(frame_encoded.uncertainty_e);
return frame_decoded;
}
inline frame::decoded::can1::vn200_ins_vel_t vn200_ins_vel(const can1_vn200_ins_vel_t frame_encoded) {
frame::decoded::can1::vn200_ins_vel_t frame_decoded;
frame_decoded.vel_lin_x = can1_vn200_ins_vel_vel_lin_x_decode(frame_encoded.vel_lin_x);
frame_decoded.vel_lin_y = can1_vn200_ins_vel_vel_lin_y_decode(frame_encoded.vel_lin_y);
frame_decoded.vel_lin_z = can1_vn200_ins_vel_vel_lin_z_decode(frame_encoded.vel_lin_z);
frame_decoded.uncertainty = can1_vn200_ins_vel_uncertainty_decode(frame_encoded.uncertainty);
return frame_decoded;
}
@ -149,9 +269,12 @@ inline frame::decoded::can1::vn200_ypr_t vn200_ypr(const can1_vn200_ypr_t frame_
// callback structure
namespace callback {
namespace can1 {
inline std::function<void(can1_vn200_ins_t, frame::decoded::can1::vn200_ins_t)> vn200_ins = NULL;
inline std::function<void(can1_vn200_imu_t, frame::decoded::can1::vn200_imu_t)> vn200_imu = NULL;
inline std::function<void(can1_vn200_ypr_t, frame::decoded::can1::vn200_ypr_t)> vn200_ypr = NULL;
inline std::function<void(can1_vn200_gnss_ll_t, frame::decoded::can1::vn200_gnss_ll_t)> vn200_gnss_ll = NULL;
inline std::function<void(can1_vn200_ins_ypr_t, frame::decoded::can1::vn200_ins_ypr_t)> vn200_ins_ypr = NULL;
inline std::function<void(can1_vn200_imu_acc_lin_t, frame::decoded::can1::vn200_imu_acc_lin_t)> vn200_imu_acc_lin = NULL;
inline std::function<void(can1_vn200_imu_acc_ang_t, frame::decoded::can1::vn200_imu_acc_ang_t)> vn200_imu_acc_ang = NULL;
inline std::function<void(can1_vn200_ins_ll_t, frame::decoded::can1::vn200_ins_ll_t)> vn200_ins_ll = NULL;
inline std::function<void(can1_vn200_ins_vel_t, frame::decoded::can1::vn200_ins_vel_t)> vn200_ins_vel = NULL;
}
}
}