如何使用 pybind11 在 Eigen::Quaternion 和 numpy ndarray 之间进行转换

she*_*per 7 c++ eigen3 pybind11

我正在尝试包装一个 C++ 函数,该函数接受 Eigen::Quaternion 作为 python 使用的参数。该函数定义如下:

void func(const Eigen::Quaternion<double> &rotation) {...}
Run Code Online (Sandbox Code Playgroud)

我正在使用 pybind11 将其包装为 python,在我的 pybind11 中我有:

#include <pybind11/eigen.h> // I have this included

PYBIND11_MODULE(example, m)
{
    m.def("func", &func, "example function");
}
Run Code Online (Sandbox Code Playgroud)

一切看起来都不错,它可以编译,但是当我通过以下方式调用它时:

func(np.array([0, 0, 0, 1]))
Run Code Online (Sandbox Code Playgroud)

我收到错误:

func():函数参数不兼容。支持以下参数类型: 1. (arg0: Eigen::Quaternion<double,0>) -> None

是否进行了一些谷歌搜索,但找不到关于 Eigen::Quaternion 是否可以转换为 numpy 数组/从 numpy 数组转换以及应该使用什么形状的数组的答案?我认为四元数可以从 4 元素 numpy ndarray 转换而来,但似乎不是,有人知道如何做到这一点吗?

小智 -2

我认为问题是 eigen quat 需要双精度,并且您已经用整数构造了 np.array 。

func(np.array([0.0, 0.0, 0.0, 1.0]))
Run Code Online (Sandbox Code Playgroud)

可能会起作用吗?