Я новичок в pybind11 и хочу изменить Structs.h и Structs. cpp, чтобы он работал с вектором>, но я не могу понять это правильно. Кто-нибудь может мне помочь?
Структура GPSdata работает, но структура GNSS_measurement не работает. Я действительно не знаю, как это исправить, но я знаю, что мне просто нужно что-то сделать в одной строке ... Справка: (
Mystructs.h
struct GPSdata
{
float time; // seconds
double unix_sec; // seconds in unix time reference
double lat, lon; // rad
float alt; // meter
float vn, ve, vd; // m/sec
int sats;
};
struct GNSS_measurement
{
float time; // seconds
vector<vector<double>> gnss_measurement;
/*
GNSS_measurements GNSS measurement data:
Column 1 Pseudo-range measurements (m)
Column 2 Pseudo-range rate measurements (m/s)
Columns 3-5 Satellite ECEF position (m)
Columns 6-8 Satellite ECEF velocity (m/s)
*/
};
Мои структуры . cpp
#include "structs.h"
#ifdef HAVE_PYBIND11
#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
#include <pybind11/stl.h>
#include <pybind11/stl_bind.h>
#include <vector>
namespace py = pybind11;
PYBIND11_MODULE(structs, m) {
py::class_<GNSS_measurement>(m,"GNSS_measurement")
.def(py::init<>())
.def_readwrite("time", &GNSS_measurement::time)
.def_readwrite("gnss_measurement", &GNSS_measurement::gnss_measurement)
.def("as_dict",
[](const GNSS_measurement &gnss) {
py::dict result;
result["time"] = gnss.time;
result["gnss_measument"]= gnss.gnss_measurement;
return result;
}
)
.def("from_dict",
[](GNSS_measurement &gnss, const py::dict &d) {
gnss.time = py::float_(d["time"]);
//gnss.gnss_measurement = py::float_(d["gnss_measurement"]);
gnss.gnss_measurement = py::bind_vector<vector<double>>(m,d["gnss_measurement"]);
}
)
;
py::class_<GPSdata>(m, "GPSdata")
.def(py::init<>())
.def_readwrite("time", &GPSdata::time)
.def_readwrite("lat", &GPSdata::lat)
.def_readwrite("lon", &GPSdata::lon)
.def_readwrite("alt", &GPSdata::alt)
.def_readwrite("vn", &GPSdata::vn)
.def_readwrite("ve", &GPSdata::ve)
.def_readwrite("vd", &GPSdata::vd)
.def_readwrite("sats", &GPSdata::sats)
.def("as_dict",
[](const GPSdata &gps) {
py::dict result;
result["time"] = gps.time;
result["unix_sec"] = gps.unix_sec;
result["lat"] = gps.lat;
result["lon"] = gps.lon;
result["alt"] = gps.alt;
result["vn"] = gps.vn;
result["ve"] = gps.ve;
result["vd"] = gps.vd;
result["sats"] = gps.sats;
return result;
}
)
.def("from_dict",
[](GPSdata &gps, const py::dict &d) {
gps.time = py::float_(d["time"]);
gps.unix_sec = py::float_(d["unix_sec"]);
gps.lat = py::float_(d["lat"]);
gps.lon = py::float_(d["lon"]);
gps.alt = py::float_(d["alt"]);
gps.vn = py::float_(d["vn"]);
gps.ve = py::float_(d["ve"]);
gps.vd = py::float_(d["vd"]);
gps.sats = py::int_(d["sats"]);
}
)
;
}
Я получаю такую ошибку:
src / nav_common / Structs. cpp: 80: 74: ошибка: 'm' не фиксируется 80 | gnss.gnss_measurement = py :: bind_vector> (m, d ["gnss_measurement"]); | ^ src / nav_common / Structs. cpp: 77: 15: примечание: лямбда-функция не имеет значения по умолчанию 77 | [] (Измерение GNSS и gnss, const py :: dict & d) {