Elevation Mapping cupy安装踩坑

环境:ros melodic

参考:



Installation — elevation_mapping_cupy documentation

https://github.com/leggedrobotics/elevation_mapping_cupy

https://github.com/leggedrobotics/elevation_mapping_cupy/issues/41

1.按照官方文档安装,pip3对应版本安装不上的删除版本号

2.opencv需要自己编译opencv4版本的

3.本人安装的cuda为10.2,对应pytorch安装为

pip3 install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 --extra-index-url https://download.pytorch.org/whl/cu102

4.踩坑点:

elevation_mapping_cupy

在编译完之后运行报错如下

[elevation_mapping-6] process has died [pid 12587, exit code -6, cmd /home/fsy/code/ocs2_ws/devel/lib/elevation_mapping_cupy/elevation_mapping_node __name:=elevation_mapping __log:=/home/fsy/.ros/log/f1bc0966-6211-11ef-9197-ac675d6d428c/elevation_mapping-6.log].
log file: /home/fsy/.ros/log/f1bc0966-6211-11ef-9197-ac675d6d428c/elevation_mapping-6*.log

寻找bug过程.......

切换成编译为debug模式

catkin build elevation_mapping_cupy --cmake-args -DCMAKE_BUILD_TYPE=Debug

在turtlesim_simple_example.launch文件中加入debug参数

    <node pkg="elevation_mapping_cupy" type="elevation_mapping_node" name="elevation_mapping" output="screen" launch-prefix="">
        <rosparam command="load" file="$(find elevation_mapping_cupy)/config/core/core_param.yaml"/>
        <rosparam command="load" file="$(find elevation_mapping_cupy)/config/setups/turtle_bot/turtle_bot_simple.yaml"/>
    </node>

改为

    <node pkg="elevation_mapping_cupy" type="elevation_mapping_node" name="elevation_mapping" output="screen" launch-prefix="gdb -ex run --args">
        <rosparam command="load" file="$(find elevation_mapping_cupy)/config/core/core_param.yaml"/>
        <rosparam command="load" file="$(find elevation_mapping_cupy)/config/setups/turtle_bot/turtle_bot_simple.yaml"/>
    </node>

进入gdb,在程序挂掉后执行backtrace,定位到

Thread 1 "elevation_mappi" received signal SIGSEGV, Segmentation fault.
0x00007ffff66ad15d in std::istream::sentry::sentry(std::istream&, bool) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) backtrace 
#0  0x00007ffff66ad15d in std::istream::sentry::sentry(std::istream&, bool) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1  0x00007ffff66ae2bb in std::istream::read(char*, long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2  0x00007fffdc593e68 in geos::io::WKBReader::readGeometry() () from /usr/lib/x86_64-linux-gnu/libgeos-3.6.2.so
#3  0x00007fff5728e236 in GEOSGeomFromWKB_buf_r () from /home/fsy/.local/lib/python3.6/site-packages/shapely/.libs/libgeos_c-a68605fd.so.1.13.1
#4  0x00007fffd3e64dae in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#5  0x00007fffd3e6471f in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#6  0x00007fff9db965a4 in _ctypes_callproc () from /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
#7  0x00007fff9db96d34 in ?? () from /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
#8  0x00007ffff7692768 in PyObject_Call () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#9  0x00007ffff75459fb in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#10 0x00007ffff7691f29 in _PyObject_FastCallDict () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#11 0x00007ffff75a6ec8 in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#12 0x00007ffff75ad303 in _PyEval_EvalFrameDefault () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#13 0x00007ffff75a5803 in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#14 0x00007ffff75a72be in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#15 0x00007ffff75ad303 in _PyEval_EvalFrameDefault () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#16 0x00007ffff75a6a0f in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#17 0x00007ffff75a74ce in PyEval_EvalCodeEx () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#18 0x00007ffff75a824b in PyEval_EvalCode () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#19 0x00007ffff75b355d in ?? () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#20 0x00007ffff763e761 in PyCFunction_Call () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#21 0x00007ffff75afb20 in _PyEval_EvalFrameDefault () from /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#22 0x00007ffff75a6a0f in ?? () from /usr/lib/x86_64-linux-gnu/libpython3
### 如何编译 Elevation Mapping 相关项目 #### 依赖项安装 在编译任何 Elevation Mapping 项目之前,需要先确保系统上已正确安装所需的依赖项。对于基于 C++ 的实现(如 `elevation_mapping`),通常需要以下软件包: - **Eigen 库**: Eigen 是一个高性能的线性代数库,在许多机器人应用中被广泛使用。可以通过以下命令安装: ```bash sudo apt-get install libeigen3-dev ``` - **Kindr**: Kindr 提供了旋转和平移操作的支持,可以简化几何计算。其安装方法可能因具体版本而异,但一般可通过源码构建或预编译包完成。 上述两个依赖项均已在文档中提及[^5]。 #### 编译流程 以下是针对不同项目的通用编译指南: ##### 1. `elevation_mapping` 此项目是一个专注于地形导航的地图生成工具。假设已经克隆了仓库到本地,则按照如下方式执行编译过程: ```bash cd /path/to/elevation_mapping mkdir build && cd build cmake .. make -j$(nproc) sudo make install ``` 注意:如果遇到错误提示缺少某些头文件或者链接器无法找到特定函数,请确认所有必需组件均已成功部署并可访问。 ##### 2. `elevation_mapping_cupy` 这是一个利用 GPU 加速功能改进性能的新版高程图方案。由于部分逻辑采用 Python 实现,因此除了常规 Catkin 工作流外还需要额外配置虚拟环境以及 pip 安装 cupy 等扩展模块[^4]: ```bash pip install numpy scipy matplotlib cython pyyaml tf_conversions rospkg catkin_pkg cv_bridge sensor_msgs std_msgs geometry_msgs message_generation message_runtime actionlib_msgs move_base_msgs nav_msgs visualization_msgs interactive_markers eigenpy pinocchio modern_robotics kindr pip install --pre cupy-cudaXXX # XXX 表示 CUDA 版本号, 需要根据实际硬件情况调整 catkin_make_isolated --install-space=/opt/ros/<distro>/cupy_ws/install source /opt/ros/<distro>/cupy_ws/install/setup.bash ``` > 替换 `<distro>` 成对应的 ROS 发布名称 (melodic/noetic) 并依据个人显卡驱动状况选取合适的 cuda toolkit release tag. 最后一步是从零创建一个新的隔离型工作区来容纳这些新增加的内容以防污染全局命名空间。 #### 常见问题排查 当尝试编译过程中可能会碰到各种异常情形比如找不到 symbol 或者 mismatched ABI version number etc., 下面列举几个常见解决办法: - 如果报错关于 boost library path not found 可能是因为默认寻找路径不对导致; 明确指定 `-DBOOST_ROOT=/usr/local/boost_1_xx_xxx` 参数给 cmake. - 对于 python binding 类型的应用程序而言经常会出现 import error due to incompatible versions between packages installed via system package manager vs those managed by virtualenvs separately so always double check consistency among them before running anything serious. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值