最開始是出現問題:
from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
然後開始安裝cv_bridge
下面是安裝步驟:
1、相關依赖
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
2、創建工作空間,設置變量
注意架構,最好自己從路徑中確認一下
mkdir -p catkin_workspace/src
cd catkin_workspace
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
3、指示catkin将内置包安装到安装位置,这一步不成功也没关系,可不用。
catkin config --install
4、在catkin_workspace工作空间中克隆 cv_bridge src
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
5、在存储库中查找cv_bridge的版本, 我是melodic
apt-cache show ros-melodic-cv-bridge | grep Version
6、在git repo中签出正确的版本,我是1.13.0
cd src/vision_opencv/
git checkout 1.13.0
cd ../../
7、開始編譯
catkin build 或者 catkin build cv_bridge
編譯的時候出現了新的問題:
/home/nvidia/software/catkin_workspace/src/vision_opencv/cv_bridge/src/module_opencv2.cpp:151:16:
error: cannot declare variable ‘g_numpyAllocator’ to be of abstract
type ‘NumpyAllocator’
解決辦法:
In cv_bridge/src CMakeLists.txt line 35 change to if (OpenCV_VERSION_MAJOR VERSION_EQUAL 4)
In cv_bridge/src/module_opencv3.cpp change signature of two functions:
1:
UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, int flags, UMatUsageFlags usageFlags) const
to
UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, AccessFlag flags, UMatUsageFlags usageFlags) const
2:
bool allocate(UMatData* u, int accessFlags, UMatUsageFlags usageFlags) const
to
bool allocate(UMatData* u, AccessFlag accessFlags, UMatUsageFlags usageFlags) const
8、使用之前記得source
source install/setup.bash --extend
reference:
https://zhuanlan.zhihu.com/p/356441425
https://blog.csdn.net/weixin_42675603/article/details/107785376
https://www.guyuehome.com/34115