Wie man richtig link opencv3 unter ROS Indigo (mit CMake)?
Bin nicht in der Lage, zu verknüpfen opencv3, dass ich installiert, mich getrennt von ros. Bin immer diese Fehlermeldung
../devel/lib/libirTest.so: undefined reference to `cv::ORB::create(int, float, int, int, int, int, int, int, int)'
../devel/lib/libirTest.so: undefined reference to `cv::calcOpticalFlowPyrLK(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::Size_<int>, int, cv::TermCriteria, int, double)'
Bin JEDOCH in der Lage, succefully kompilieren außerhalb ROS; das heißt, mit dem ähnlichen Paket ohne ROS.... Hier ist die CMake-Datei verwende unter ROS (das funktioniert nicht)
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 zu einem Konflikt zwischen den opencv-version verwende und dass (v2.4), die von ROS? Vielleicht cv_bridge oder image_transport erstellen, dieses problem... (???) Ich selbst gelöscht bauen/und devel/und versucht, erneut kompilieren, aber immer das gleiche problem..... Ich habe nie eine solche lange Zeit als dieses problem...
- Hier es scheint zu implizieren, OpenCV 3 sollte der Standardwert für ROS heute.
- Ich installierte ubuntu 14 und ROS Indigo und versucht zu kompilieren aber immer noch das gleiche Problem. JEDOCH, es funktionierte unter ubuntu 16 mit ROS Kinetische. Beachten Sie, dass ich das gleiche Paket, das nicht unter Indigo-Paket, das trotzdem funktioniert... Aber jetzt bin noch nicht in der Lage, meine ros-Paket mit der opencv ich ließ mich
- haben Sie jemals zu verwalten, um dieses Problem zu lösen, die auf ubuntu 14, oder hast du mit aktualisieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, eine ROS-Projekt mit opencv 3.1 unter ROS indigo. Beachten Sie, dass opencv 2.4 ist immer noch der Standard-version unter indigo, so dass dies schwierig wird, und so YMMV.
Erste, Sie brauchen, um
ros-indigo-opencv3
- Paket installiert. Es ist möglich, dass eine von der source-path kann arbeiten, indem Sie den Pfad manuell an die Sie getan haben, aber ich habe es noch nicht getestet.In Ihrem CMakeLists.txt stellen Sie sicher, dass Sie
${OpenCV_INCLUDE_DIRS}
und link mit${OpenCV_LIBRARIES}
:Zuletzt, weil die ros, opencv-Bindungen sind nur kompiliert für opencv 2.4, müssen Sie den Klon des vision_opencv repository (https://github.com/ros-perception/vision_opencv) in Ihrem Arbeitsbereich vor dem kompilieren. Damit werden die Bindungen link mit opencv 3.
sudo apt-get install ros-indigo-opencv3
2)roscd workspace/src
3)git clone https://github.com/ros-perception/vision_opencv.git
Ich bin mit beiden
Opencv2.4.8
undopencv3.1
mitros indigo
.Die
opencv3.1
ist aus dem source installiert unter home-Verzeichnis -/home/xxx/opencv3_install
.Der Vorteil ist, dass meine ältere Paket mit
opencv2.4.8
muss sich nicht zu ändern von code, da die Standard-opencv-version ist2.4.8
.Wenn
opencv3.1
erforderlich ist, dieCMAKE_PREFIX_PATH
sollte festgelegt werden, finden die lib.Darüber hinaus die
cv_bridge
muss neu kompiliert werden, nachdem die Installationopencv3.1
.