1. エラーメッセージ
まず、catkin_make による関数パッケージのコンパイルには問題がなく、ターゲット ファイルが 100% 生成されますが、警告が報告されます。ライブラリ ファイル libmyslam.so には libopencv_core.so.3.4 が必要であり、libopencv_core.so と競合する可能性があります。 3.2. エンジニアリングの経験によれば、警告を無視して直接実行してください。
[100%] Linking CXX executable /home/dzh/Demo/VO/devel/lib/ros_vo/run_vo
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /home/dzh/Demo/VO/src/ros_vo/lib/libmyslam.so, may conflict with libopencv_core.so.3.2
/usr/bin/ld: warning: libopencv_imgcodecs.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.5, may conflict with libopencv_imgcodecs.so.3.2
/usr/bin/ld: warning: libopencv_imgproc.so.3.4, needed by /usr/local/lib/libopencv_highgui.so.3.4.5, may conflict with libopencv_imgproc.so.3.2
[100%] Built target run_vo
roscoreとrosrunを実行すると、コアがダンプされたというエラーが発生します。検索のエラー分析は、cv_bridge がデフォルトで ros に付属する OpenCV バージョン 3.2.0 を呼び出すことです。OpenCV3.4.5 をローカルにインストールしましたが、関数パッケージの下の CMakeLists.txt にあるパッケージも 3.4.5 です。 cv_bridge はエラーを報告します。
OpenCV Error: Bad argument (Unknown interpolation method) in resize,
file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp, line 3367
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp:3367:
error: (-5) Unknown interpolation method in function resize
已放弃 (核心已转储)
2. 解決策
1. まず、 cv_bridgeプロジェクトをダウンロードする必要があります(cv_bridge
その中のフォルダーのみ)。
2. これをプロジェクトの src ディレクトリに置きます。これは関数パッケージに相当します。
cv_bridge/CMakeLists.txt ファイル内のプロジェクトの名前を変更します。
project(cv_bridge) 改为 project(cv_bridge_1)
cv_bridge/package.xml のパッケージ名を変更します。
<name>cv_bridge</name> 改为 <name>cv_bridge_1</name>
cv_bridge/CMakeLists.txt ファイルで必要な OpenCV バージョンをローカル バージョンに変更します。
find_package(OpenCV 3.4.5 REQUIRED
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
3. 次に、catkin_make を実行して、プロジェクトのルート ディレクトリ/src にある関数パッケージをコンパイルします。
4. libcv_bridge_1.so ファイルが devel/lib ディレクトリに生成されます。これが必要なライブラリ ファイルです。ros に付属の OpenCV は使用されなくなりました。
独自の関数パッケージの下に新しい lib ディレクトリを作成し、上記の共有ライブラリを配置し、ヘッダー ファイルをlibcv_bridge_1.so
include に配置します。cv_bridge
5. 最も重要なことを開始します。独自の関数パッケージの下にある CMakeLists.txt を変更します。
- 以前に検索した cv_bridge ライブラリを削除します。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
sensor_msgs
image_transport
message_generation
)
- ヘッダー ファイル パス インクルードを追加
include_directories(
include
${
catkin_INCLUDE_DIRS}
)
- ディレクトリ lib を含める
link_directories(
lib
${
catkin_LIB_DIRS}
)
- リンクライブラリファイル libcv_bridge_1.so
target_link_libraries(run_vo
${
catkin_LIBRARIES}
${
OpenCV_LIBS}
libcv_bridge_1.so
)
6. catkin_make を再実行すると、rosrun が正常に実行され、コア ダンプ エラーは発生しません。
1 時間探索し、さまざまな方法を試した後、最終的に私自身の一連の方法をまとめました。