2016-06-01 15 views
7

Ich bin nicht in der Lage, opencv3 zu verknüpfen, dass ich mich getrennt von ros installiert habe. Ich bekomme diesen FehlerWie opencv3 korrekt unter ROS Indigo (mit CMake) zu verknüpfen?

Aber ich bin in der Lage, erfolgreich kompilieren außerhalb von ROS; das heißt, das ähnliche Paket ohne ROS mit .... Hier wird die CMake-Datei unter ROS verwende (das nicht funktioniert)

cmake_minimum_required(VERSION 2.8.3) 
project(my_test_pkg) 

SET(SRC ${CMAKE_CURRENT_SOURCE_DIR}/src) 

find_package(catkin REQUIRED COMPONENTS 
    cv_bridge 
    image_transport 
    roscpp 
    rospy 
    std_msgs 
    message_generation 
    genmsg 
) 
find_package(nodelet REQUIRED) 

################################################ 
## Declare ROS messages, services and actions ## 
################################################ 

add_message_files(
    FILES 
    velocity_trsl.msg 
    ) 

    generate_messages(
    DEPENDENCIES 
    std_msgs 
    ) 

catkin_package(
    CATKIN_DEPENDS message_generation cv_bridge image_transport roscpp rospy std_msgs 
) 

########### 
## Build ## 
########### 
include_directories(
    ${catkin_INCLUDE_DIRS} 
) 


#*********************** 
#****** GSL 
#*********************** 
find_package(PkgConfig REQUIRED) 
pkg_check_modules(gsl REQUIRED gsl) 

#*********************** 
#****** Boost 
#*********************** 

SET (BOOST_DIR "/home/polar/soft/lib/boost/boost_1_61_0") 

FIND_PACKAGE(Boost 1.61.0 REQUIRED thread) 
if (NOT Boost_FOUND) 
    message(FATAL_ERROR " Fatal error: Boost (version >= 1.55) required.") 
else() 
    message(STATUS "Setting up BOOST") 
    message(STATUS " Includes - ${Boost_INCLUDE_DIRS}") 
    message(STATUS " Library - ${Boost_LIBRARY_DIRS}") 
    include_directories(${Boost_INCLUDE_DIRS}) 
    link_directories(${Boost_LIBRARY_DIRS}) 
endif (NOT Boost_FOUND) 

#*********************** 
#****** OpenCV 
#*********************** 
find_package(OpenCV 3.1.0 REQUIRED) 
find_package(OpenCV 3.1.0 REQUIRED PATHS /home/polar/soft/lib/opencv/opencv-3.1.0/cmake) 
if (NOT OpenCV_FOUND) 
    message(FATAL_ERROR "*****!!!!! opencv NOT found.") 
endif (NOT OpenCV_FOUND)  

#**************************************** 
include_directories(${SRC}/calculus) 
SET(MY_LIB 
    irTest 
) 

# ALL EXEC FILES... 
SET(EXE_TESTER 
    tester1 
    ) 

    add_executable(tester1 ${CMAKE_CURRENT_SOURCE_DIR}/exe-main-files-stdl/testdir/tester1.cpp) 

    SET(FILES_2_RUN 
    ${EXE_TESTER} 
    ) 


#-------------------------- 
foreach(file2link ${FILES_2_RUN}) 
    target_link_libraries(${file2link} 
    ${catkin_LIBRARIES} 
    ${Boost_LIBRARIES} 
    ${gsl_LIBRARIES} 
    ${OpenCV_LIBRARIES} 
    ${OpenCV_LIBS} 
    ${MY_LIB} 
    ) 

    add_dependencies(${file2link} my_test_pkg_generate_messages_cpp)# newlly added for messages!! 
endforeach(file2link) 

add_subdirectory(src) 

Sollte es ein Konflikt zwischen der opencv Version sein benutzt und dass (v2 .4) von ROS verwendet? Vielleicht erstellen cv_bridge oder image_transport dieses Problem ... (???) Ich habe sogar build/und devel/gelöscht und versucht erneut zu kompilieren, aber immer das gleiche Problem ..... Ich habe nie so viel Zeit mit diesem Problem verbracht ...

+0

[Hier] (http://wiki.ros.org/opencv3) scheint es zu bedeuten, dass OpenCV 3 der Standard für ROS heutzutage sein sollte. – Antonio

+0

Ich habe Ubuntu 14 und ROS Indigo neu installiert und versucht, aber immer noch das gleiche Problem zu kompilieren. Unter Ubuntu 16 mit ROS Kinetic lief es jedoch einwandfrei. Beachten Sie, dass ich das gleiche Paket genommen habe, das unter Indigo nicht funktionierte, das Paket funktioniert aber jetzt gut ... Aber bin immer noch nicht in der Lage, mein ros-Paket mit dem opencv zu verbinden Ich habe mich selbst installiert – Courier

+0

@polar hast du es jemals geschafft zu lösen Dies auf Ubuntu 14, oder hast du mit einem Upgrade abgeschlossen? – JTIM

Antwort

2

Ich konnte ein ROS-Projekt mit opencv 3.1 unter ROS indigo verbinden. Beachten Sie, dass opencv 2.4 immer noch die Standardversion unter Indigo ist, also wird dies schwierig und somit YMMV.

Zuerst müssen Sie ros-indigo-opencv3 Paket installiert haben. Es ist möglich, dass ein from-source-Pfad funktioniert, indem Sie den Pfad manuell angeben, wie Sie es getan haben, aber ich habe es nicht getestet.

In Ihrem CMakeLists.txt stellen Sie sicher, ${OpenCV_INCLUDE_DIRS} und Link sind mit ${OpenCV_LIBRARIES}:

find_package(OpenCV 3 REQUIRED) 
include_directories(
    ${catkin_INCLUDE_DIRS} 
    ${OpenCV_INCLUDE_DIRS} 
) 
add_library(your_node src/your_node.cpp) 
target_link_libraries(your_node ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) 

Schließlich, weil die ros opencv Bindungen nur für opencv 2.4 kompiliert werden, müssen Sie die vision_opencv Repository (https://github.com/ros-perception/vision_opencv) klonen in Ihren Arbeitsbereich vor dem Kompilieren. Dadurch wird sichergestellt, dass die Bindungen mit opencv 3 verbunden sind.

+0

Immer noch das gleiche Problem ... Hier ist die Zusammenfassung dessen, was ich getan habe: 1) 'sudo apt-get installieren ros-indigo-opencv3' 2)' roscd workspace/src' 3) 'git clone https: // github. com/ros-perception/vision_opencv.git' – Courier

+0

Sollte ich auch package.xml ändern? – Courier

+0

Ich versuchte dies http://answers.ros.org/question/214043/use-ross-indigo-opencv3-alongside-248/ ... aber immer noch nichts – Courier

1

Ich verwende sowohl Opencv2.4.8 als auch opencv3.1 mit ros indigo. Die opencv3.1 wird von der Quelle unter dem Home-Verzeichnis installiert: /home/xxx/opencv3_install.

Der Vorteil ist, dass mein älteres Paket mit opencv2.4.8 keinen Code ändern muss, weil die Standardversion von Opencv 2.4.8 ist.

Wenn opencv3.1 benötigt wird, sollte CMAKE_PREFIX_PATH eingestellt werden, um die lib zu finden.

set(CMAKE_PREFIX_PATH "/home/xxx/opencv3_install") 
find_package(OpenCV 3.1 REQUIRED) 
set(OpenCV_INCLUDE_DIRS "/home/xxx/opencv3_install/include") 

Darüber hinaus müssen die cv_bridge nach opencv3.1 Installation neu kompiliert werden.

Verwandte Themen