粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

viso2_ros installation in arm processor (Kinetic)

There is strong packages to get odometry from stereo and monocular cameras.
viso2_ros - ROS Wiki

It somehow causes compilation error with arm processor such as jetson TX series.
github.com

Brief overview

  • -msse3 compiler option is not supported for arm processor.

You should comment out that.

  • replace #include with #include "SSE-to-NEON/sse_to_neon.hpp"

Get SSE-to-NEON file

github.com

save this hpp file in your include library

cd /usr/include
git clone https://github.com/otim/SSE-to-NEON.git

Then you can include using #include "SSE-to-NEON/sse_to_neon.hpp".

change some part of SSE-to-NEON.hpp

in line 14 and line 46 like below

//#if defined(__MM_MALLOC_H)
// copied from mm_malloc.h {

~~~

// } copied from mm_malloc.h
//#endif

Change CmakeList and package.xml

comment out -msse3 description in every CMAKELIST file.

in viso2/viso2_ros ,viso2/viso2, viso2/libviso2

change package.xml in viso2/libviso2

change from

    <cpp lflags="-L${prefix}/lib -Wl,-rpath,${prefix}/lib -lviso2" cflags="-msse3 -I${prefix}/libviso2/src/"/>

to

    <cpp lflags="-L${prefix}/lib -Wl,-rpath,${prefix}/lib -lviso2" cflags="-I${prefix}/libviso2/src/"/>

Change source cord

You should change filter.h and matcher.h in libviso2/src.

comment out some emmintrin.h and pmmintrin.h and replace with SSE-to-NEON.hpp like below

//#include <emmintrin.h>
//#include <pmmintrin.h>
#include "SSE-to-NEON/sse_to_neon.hpp"

memo

This error is around _mm_malloc function.
Why do they use this package?