我是pybind11的新手,我想修改structs.h和structs.cpp,使其适用于vector>;,但我不能完全正确地理解它。有人能帮我吗
struct GPSdata可以工作,但是struct GNSS_测量不工作。我真的不知道如何修复它,但我知道我只需要在一行上做一些事情。。。帮助:(
我的结构
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)
*/
};
My structs.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:注意:lambda没有捕获默认值 77 |[](全球导航卫星系统测量和全球导航卫星系统,常数:dict和d){
我的一个朋友帮了我:)
相关问题 更多 >
编程相关推荐