Я знаю, используя #include <stlport.h>
и #include <Eigen30.h>
, чтобы заставить Eigen работать с Arduino - довольно старый способ получить работу Eigen .
Поэтому я пыталсятакже #include <ArduinoSTL.h>
с двумя либами Eigen Arduino, которые я там обнаружил (#include <Eigen30.h>
и #include <Eigen.h>
). Я оставлю здесь ссылки на репозитории GitHub всех библиотек.
#include <Eigen.h>
: https://github.com/bolderflight/Eigen
#include <Eigen30.h>
: https://github.com/vancegroup/EigenArduino/tree/Eigen30
#include <stlport.h>
: https://github.com/vancegroup/stlport-avr/tree/STLport-5.2-arduino-installed
#include <ArduinoSTL.h>
: https://github.com/mike-matera/ArduinoSTLТолько #include <stlport.h>
и #include <Eigen30.h>
фактически скомпилированы в IDE Arduino. На самом деле я version 1.6.20
из пакета AVR Boards , который мы можем изменить в Инструменты Доска Менеджер доски .
Когда я начал выполнять некоторые базовые операции для проверки Eigen , такие как добавление матриц и инициализация матриц. Затем я заметил, что всякий раз, когда я умножал 2 матрицы, независимо от того, какой метод я использовал (я пробовал каждый метод, который документация Eigen предлагает в качестве передового опыта), программа зависала в этой конкретной инструкции.
Вот пример:
#include <stlport.h>
#include <Eigen30.h>
#include <Eigen/Dense>
using namespace Eigen;
void setup()
{
Serial.begin(9600);
delay(2000);
Serial.print("Hi");
Matrix3f m;
MatrixXf b(2,2);
MatrixXf M1(2,2); //EDIT: I missed this last time.
MatrixXf matA(2, 2);
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
matA << 1, 2,
1, 2;
b = matA;
print_mtxf(b); // Goes ok
print_mtxf(matA); // Goes ok
Serial.print("M1:\n"); // Goes ok
M1.noalias() = matA*b; // Something wrong is going on here.
print_mtxf(M1); // Nerver gets to print this or the following
Serial.print("M1:\n");
Serial.print("M1:\n");
}
void loop()
{
}
void print_mtxf(const Eigen::MatrixXf &X)
{
int i, j, nrow, ncol;
nrow = X.rows();
ncol = X.cols();
Serial.print("nrow: "); Serial.println(nrow);
Serial.print("ncol: "); Serial.println(ncol);
Serial.println();
for (i=0; i<nrow; i++)
{
for (j=0; j<ncol; j++)
{
Serial.print(X(i,j), 6); // print 6 decimal places
Serial.print(", ");
}
Serial.println();
}
Serial.println();
}
Итак, какие у меня варианты? Я действительно хочу работать Eigen , потому что я собираюсь использовать базовую библиотеку c ++, которая зависит только от Eigen, она довольно проста, но Eigen не работает должным образом. Я думаю, что это жест к бесконечному циклу, потому что продолжающиеся печати никогда не заканчиваются.