Eigen在ARM上的使用

Eigen是有关线性代数(矩阵、向量等)的c++模板库。支持SSE2/3/4,ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bit and 64-bit) instruction sets, S390x SIMD (ZVector).

x86使用-msse2编译选项 
x86-64默认支持SSE2 
32-bit ARM NEON使用-mfpu=neon -mfloat-abi=softfp|hard 
64-bit ARM SIMD默认支持

http://blog.youkuaiyun.com/xmdxcsj/article/details/52643891

On GCC and clang you can simply pass -march=native to let the compiler enables all instruction set that are supported by your CPU.

n 32-bit ARM NEON, the following: -mfpu=neon -mfloat-abi=softfp|hard, depending if you are on a softfp/hardfp system. Most current distributions are using a hard floating-point ABI, so go for the latter, or just leave the default and just pass -mfpu=neon.

Make sure the EIGEN_DONT_VECTORIZE preprocessor symbol not defined.


-mfloat-abi=softfp的问题,指定fpu为neon

### 如何在 ARM 架构上运行 R3Live 要在 ARM 构架上成功运行 R3Live,需完成一系列配置和调整工作。以下是详细的说明: #### 1. 安装依赖项 R3Live 需要一些必要的依赖库才能正常编译和运行。其中 Eigen 库是一个重要的依赖项。Eigen 是 C++ 的线性代数模板库,而 Ceres Solver(用于非线性优化)也依赖于它。 可以通过以下命令安装 Eigen 和其他必要工具: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install libeigen3-dev build-essential cmake git pkg-config python3-pip -y pip3 install numpy scipy matplotlib opencv-python-headless ros-noetic-catkin ``` 上述操作确保了开发环境具备构建 ROS 包所需的基础组件以及 Python 工具链[^3]。 #### 2. 修改源码适配 ARM 平台 由于 R3Live 原生支持的是基于 X86 的 SSE 指令集优化,因此当移植到 ARM 设备时需要禁用这些特定硬件加速功能。具体做法如下: 编辑 `CMakeLists.txt` 文件或相关头文件中的宏定义区域,找到类似于下面这样的预处理语句: ```cpp #if CV_SSE2 || defined(__SSE2__) // 使用 SSE2 加速逻辑... #endif ``` 将其改为无条件启用状态或者直接移除该片段以避免因缺少对应 CPU 扩展而导致错误[^1]。 另外需要注意的是,关闭这部分可能会稍微降低性能表现;但这是为了兼容不同类型的处理器所做出的妥协方案之一。 #### 3. 编写启动脚本 创建一个新的 shell 脚本来简化整个流程。假设我们已经有了一个名为 `start_r3live.sh` 的脚本,则其内容大致如下所示: ```bash #!/bin/bash source /opt/ros/noetic/setup.bash cd ~/catkin_ws/src/r3live/ roslaunch r3live r3live_bag.launch & rosbag play YOUR_DOWNLOADED.bag --clock wait $! echo "Process finished." ``` 记得赋予执行权限后再调用此脚本即可一键开启服务。 #### 4. 处理 Linux 内核级初始化细节 (可选) 对于某些高度定制化的嵌入式系统而言,可能还需要深入理解底层机制比如 MMU 设置过程等知识点以便更好地调试问题所在之处。例如,在加载过程中涉及到查找合适的核心版本号这一环节里使用的汇编技巧就很有代表性——通过读取寄存器值并与预期模式逐一比较直至发现最佳匹配对象为止[^2]。 --- ### 总结 综上所述,虽然将原本面向 Intel/AMD 系列设计的应用程序迁移到 ARM 上存在一定挑战,但是只要按照以上步骤逐步实施就能顺利达成目标!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值