From 5d57fa17dfd7db35762aa6dde57713929902a7e1 Mon Sep 17 00:00:00 2001 From: Stephan <1481786+stwirth@users.noreply.github.com> Date: Fri, 12 Feb 2021 14:56:11 +0100 Subject: [PATCH 1/9] Include noetic build in CI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 34dbc3df..f12456eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ env: matrix: # each line is a job - ROS_DISTRO="kinetic" - ROS_DISTRO="melodic" + - ROS_DISTRO="noetic" # clone and run industrial_ci install: From 146d077447ae19d818978ba03841faafae9bd5d5 Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Fri, 12 Feb 2021 16:06:54 +0100 Subject: [PATCH 2/9] Port download_spinnaker to python3 --- .../cmake/download_spinnaker | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index ee142c36..ee717021 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Software License Agreement (BSD) # @@ -26,15 +26,15 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -import cookielib -import cStringIO +import http.cookiejar +import io import logging import shutil import subprocess import sys import tarfile -import urllib -import urllib2 +import urllib.request, urllib.parse, urllib.error +import urllib.request, urllib.error, urllib.parse import os import glob @@ -167,8 +167,8 @@ logging.info("Destination folder is %s", destination_folder) if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): if not os.path.exists(os.path.join(os.getcwd(), folder_name)): - cj = cookielib.CookieJar() - opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) + cj = http.cookiejar.CookieJar() + opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) opener.addheaders = [ ('User-agent', 'Mozilla/5.0'), ('Referer', 'https://www.ptgrey.com')] @@ -177,7 +177,8 @@ if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): resp = opener.open(archive_url) logging.info("Unpacking tarball.") - with tarfile.open(mode="r:gz", fileobj=cStringIO.StringIO(resp.read())) as tar: + logging.info(resp.info()) + with tarfile.open(mode="r:gz", fileobj=io.BytesIO(resp.read())) as tar: tar.extractall() logging.info("Unpacking debs.") From d75a47c49b99d4926e4c8ffc6aba5143ec2f5102 Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Fri, 12 Feb 2021 17:06:08 +0100 Subject: [PATCH 3/9] Make download_spinnaker work for 20.04 --- .../cmake/download_spinnaker | 148 +++++------------- 1 file changed, 37 insertions(+), 111 deletions(-) diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index ee717021..23a347e2 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -40,113 +40,39 @@ import glob logging.basicConfig(level=logging.INFO) -URL_TEMPLATE = URL_TEMPLATES = { - 'deb': 'https://packages.clearpathrobotics.com/stable/flir/Spinnaker/Ubuntu{version}/spinnaker-1.27.0.48-Ubuntu{version}-{arch}-pkg.tar.gz', - 'src': None # if we ever have non-deb archives that require manual extraction, those package URLS will go here. -} +URL_TEMPLATE = 'https://packages.clearpathrobotics.com/stable/flir/Spinnaker/Ubuntu{os_version}/spinnaker-{spinnaker_version}-Ubuntu{os_version}-{arch}-pkg.tar.gz' ARCHS = { - 'i386': { - 'linux_arch': 'i386', - 'current': '16.04', - 'type': 'deb', - 'folder_name': 'spinnaker-1.27.0.48-i386', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48', - 'debs': [ - 'libspinnaker-1.27.0.48_i386.deb', - 'libspinnaker-1.27.0.48_i386-dev.deb', - 'libspinnaker-c-1.27.0.48_i386.deb', - 'libspinnaker-c-1.27.0.48_i386-dev.deb', - 'libspinvideo-1.27.0.48_i386.deb', - 'libspinvideo-1.27.0.48_i386-dev.deb', - 'libspinvideo-c-1.27.0.48_i386.deb', - 'libspinvideo-c-1.27.0.48_i386-dev.deb', - 'spinnaker-1.27.0.48_i386.deb', - 'spinnaker-doc-1.27.0.48_i386.deb', - 'spinupdate-1.27.0.48_i386.deb', - 'spinupdate-1.27.0.48_i386-dev.deb', - 'spinview-qt-1.27.0.48_i386.deb', - 'spinview-qt-1.27.0.48_i386-dev.deb' - ] - }, - 'x86_64': { - 'linux_arch': 'amd64', - 'current': '16.04', - 'future': '18.04', - 'type': 'deb', - 'folder_name': 'spinnaker-1.27.0.48-amd64', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48', - 'debs': [ - 'libspinnaker-1.27.0.48_amd64.deb', - 'libspinnaker-1.27.0.48_amd64-dev.deb', - 'libspinnaker-c-1.27.0.48_amd64.deb', - 'libspinnaker-c-1.27.0.48_amd64-dev.deb', - 'libspinvideo-1.27.0.48_amd64.deb', - 'libspinvideo-1.27.0.48_amd64-dev.deb', - 'libspinvideo-c-1.27.0.48_amd64.deb', - 'libspinvideo-c-1.27.0.48_amd64-dev.deb', - 'spinnaker-1.27.0.48_amd64.deb', - 'spinnaker-doc-1.27.0.48_amd64.deb', - 'spinupdate-1.27.0.48_amd64.deb', - 'spinupdate-1.27.0.48_amd64-dev.deb', - 'spinview-qt-1.27.0.48_amd64.deb', - 'spinview-qt-1.27.0.48_amd64-dev.deb' - ] - }, - 'armv7': { - 'linux_arch': 'armhf', - 'current': '16.04', - 'type': 'deb', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48', - 'folder_name': 'spinnaker-1.27.0.48_armhf', - 'debs': [ - 'libspinnaker-1.27.0.48_armhf.deb', - 'libspinnaker-1.27.0.48_armhf-dev.deb', - 'libspinnaker-c-1.27.0.48_armhf.deb', - 'libspinnaker-c-1.27.0.48_armhf-dev.deb', - 'libspinvideo-1.27.0.48_armhf.deb', - 'libspinvideo-1.27.0.48_armhf-dev.deb', - 'libspinvideo-c-1.27.0.48_armhf.deb', - 'libspinvideo-c-1.27.0.48_armhf-dev.deb', - 'spinnaker-1.27.0.48_armhf.deb', - 'spinnaker-doc-1.27.0.48_armhf.deb', - 'spinupdate-1.27.0.48_armhf.deb', - 'spinupdate-1.27.0.48_armhf-dev.deb', - 'spinview-qt-1.27.0.48_armhf.deb', - 'spinview-qt-1.27.0.48_armhf-dev.deb' - ] - }, - 'armv8': { - 'linux_arch': 'armh64', - 'current': '16.04', - 'future': '18.04', - 'type': 'deb', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48', - 'folder_name': 'spinnaker-1.27.0.48_arm64', - 'debs': [ - 'libspinnaker-1.27.0.48_arm64.deb', - 'libspinnaker-1.27.0.48_arm64-dev.deb', - 'libspinnaker-c-1.27.0.48_arm64.deb', - 'libspinnaker-c-1.27.0.48_arm64-dev.deb', - 'libspinvideo-1.27.0.48_arm64.deb', - 'libspinvideo-1.27.0.48_arm64-dev.deb', - 'libspinvideo-c-1.27.0.48_arm64.deb', - 'libspinvideo-c-1.27.0.48_arm64-dev.deb', - 'spinnaker-1.27.0.48_arm64.deb', - 'spinnaker-doc-1.27.0.48_arm64.deb', - 'spinupdate-1.27.0.48_arm64.deb', - 'spinupdate-1.27.0.48_arm64-dev.deb', - 'spinview-qt-1.27.0.48_arm64.deb', - 'spinview-qt-1.27.0.48_arm64-dev.deb' - ] - } + 'i386': 'i386', + 'x86_64': 'amd64', + 'armv7': 'armhf', + 'armv8': 'armh64' } - OS_LIBRARY_VERSION = { - 'jessie': 'current', - 'xenial': 'current', - 'bionic': 'future' + 'jessie': '16.04', + 'xenial': '16.04', + 'bionic': '18.04', + 'focal': '20.04' +} + +SPINNAKER_INFO = { + 'jessie': { + 'version': '1.27.0.48', + 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' + }, + 'xenial': { + 'version': '1.27.0.48', + 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' + }, + 'bionic': { + 'version': '1.27.0.48', + 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' + }, + 'focal': { + 'version': '2.2.0.48', + 'shared_library': 'opt/spinnaker/lib/libSpinnaker.so.2.2.0.48' + } } arch = sys.argv[1] @@ -154,12 +80,13 @@ destination_folder = sys.argv[2] os_code_name = sys.argv[3] os_version = OS_LIBRARY_VERSION[os_code_name] -archive_url = URL_TEMPLATES[ARCHS[arch]['type']].format( - arch=ARCHS[arch]['linux_arch'], - version=ARCHS[arch][os_version]) -folder_name = ARCHS[arch]['folder_name'] -shared_library = ARCHS[arch]['shared_library'] - +spinnaker_version = SPINNAKER_INFO[os_code_name]['version'] +archive_url = URL_TEMPLATE.format( + arch=ARCHS[arch], + os_version=os_version, + spinnaker_version=spinnaker_version) +folder_name = 'spinnaker-{}-{}'.format(spinnaker_version, ARCHS[arch]) +shared_library = SPINNAKER_INFO[os_code_name]['shared_library'] logging.info("CPU architecture is %s", arch) logging.info("OS code name is %s", os_code_name) @@ -177,12 +104,11 @@ if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): resp = opener.open(archive_url) logging.info("Unpacking tarball.") - logging.info(resp.info()) with tarfile.open(mode="r:gz", fileobj=io.BytesIO(resp.read())) as tar: tar.extractall() logging.info("Unpacking debs.") - debs = glob.glob(os.path.join(os.getcwd(), folder_name, "*spinnaker-*.deb")) + debs = glob.glob(os.path.join(os.getcwd(), folder_name, "*spinnaker*.deb")) unpack_dir = os.path.join(os.getcwd()) if not os.path.exists(unpack_dir): os.makedirs(unpack_dir) @@ -191,7 +117,7 @@ if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): subprocess.call(['dpkg', '--extract', deb, unpack_dir]) # finally, copy the shared libraries into the output folder - src_file = os.path.join(unpack_dir, ARCHS[arch]['shared_library']) + src_file = os.path.join(unpack_dir, shared_library) logging.info('Copying shared library to {0}'.format(destination_folder)) if not os.path.exists(destination_folder): os.makedirs(destination_folder) From 13b15c9d906785969c1fbcdc652617bcda458c5d Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:32:54 +0100 Subject: [PATCH 4/9] Make download work, use find_path and find_library afterwards --- .../cmake/DownloadSpinnaker.cmake | 23 ++++-- .../cmake/download_spinnaker | 82 +++++++------------ 2 files changed, 48 insertions(+), 57 deletions(-) diff --git a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake index 7c7bde5a..39130530 100644 --- a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake +++ b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake @@ -9,13 +9,24 @@ function(download_spinnaker FLIR_LIB_VAR FLIR_INCLUDE_DIR_VAR) OUTPUT_STRIP_TRAILING_WHITESPACE) include(cmake/TargetArch.cmake) - target_architecture(FLIR_ARCH) - set(FLIR_DIR ${CMAKE_CURRENT_BINARY_DIR}/usr/lib) + target_architecture(TARGET_ARCH) set(DOWNLOAD_SCRIPT "${PROJECT_SOURCE_DIR}/cmake/download_spinnaker") - message(STATUS "Running download_spinnaker script with arguments: ${FLIR_ARCH} ${FLIR_DIR} ${OS_CODE_NAME}") + set(SPINNAKER_SDK_DIR ${CMAKE_CURRENT_BINARY_DIR}/spinnaker-sdk) + + message(STATUS "Running download_spinnaker script with arguments: ${TARGET_ARCH} ${OS_CODE_NAME} ${SPINNAKER_SDK_DIR}") execute_process( - COMMAND ${DOWNLOAD_SCRIPT} ${FLIR_ARCH} "${FLIR_DIR}" ${OS_CODE_NAME}) - set(${FLIR_LIB_VAR} "${FLIR_DIR}/libSpinnaker.so" PARENT_SCOPE) - set(${FLIR_INCLUDE_DIR_VAR} "${CMAKE_CURRENT_BINARY_DIR}/usr/include/spinnaker" PARENT_SCOPE) + COMMAND ${DOWNLOAD_SCRIPT} ${TARGET_ARCH} ${FLIR_DIR} ${OS_CODE_NAME} ${SPINNAKER_SDK_DIR} + RESULT_VARIABLE DOWNLOAD_EXIT_CODE) + if(NOT DOWNLOAD_EXIT_CODE EQUAL "0") + message(FATAL_ERROR "Could not download Spinnaker SDK!") + endif() + + set(SPINNAKER_SEARCH_PATHS ${SPINNAKER_SDK_DIR}/usr ${SPINNAKER_SDK_DIR}/opt/spinnaker) + + find_path(Spinnaker_INCLUDE_DIR NAMES Spinnaker.h PATHS ${SPINNAKER_SEARCH_PATHS} PATH_SUFFIXES include include/spinnaker) + find_library(Spinnaker_LIBRARIES NAMES Spinnaker PATHS ${SPINNAKER_SEARCH_PATHS} PATH_SUFFIXES lib) + + set(${FLIR_INCLUDE_DIR_VAR} "${Spinnaker_INCLUDE_DIR}" PARENT_SCOPE) + set(${FLIR_LIB_VAR} "${Spinnaker_LIBRARIES}" PARENT_SCOPE) endfunction() diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index 23a347e2..fcd1d4a7 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -26,6 +26,7 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +import argparse import http.cookiejar import io import logging @@ -34,7 +35,6 @@ import subprocess import sys import tarfile import urllib.request, urllib.parse, urllib.error -import urllib.request, urllib.error, urllib.parse import os import glob @@ -42,7 +42,7 @@ logging.basicConfig(level=logging.INFO) URL_TEMPLATE = 'https://packages.clearpathrobotics.com/stable/flir/Spinnaker/Ubuntu{os_version}/spinnaker-{spinnaker_version}-Ubuntu{os_version}-{arch}-pkg.tar.gz' -ARCHS = { +ARCH_MAPPINGS = { 'i386': 'i386', 'x86_64': 'amd64', 'armv7': 'armhf', @@ -56,69 +56,49 @@ OS_LIBRARY_VERSION = { 'focal': '20.04' } -SPINNAKER_INFO = { - 'jessie': { - 'version': '1.27.0.48', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' - }, - 'xenial': { - 'version': '1.27.0.48', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' - }, - 'bionic': { - 'version': '1.27.0.48', - 'shared_library': 'usr/lib/libSpinnaker.so.1.27.0.48' - }, - 'focal': { - 'version': '2.2.0.48', - 'shared_library': 'opt/spinnaker/lib/libSpinnaker.so.2.2.0.48' - } +SPINNAKER_SDK_VERSIONS = { + 'jessie': '1.27.0.48', + 'xenial': '1.27.0.48', + 'bionic': '1.27.0.48', + 'focal': '2.2.0.48' } -arch = sys.argv[1] -destination_folder = sys.argv[2] -os_code_name = sys.argv[3] +parser = argparse.ArgumentParser() +parser.add_argument('arch', choices=ARCH_MAPPINGS.keys()) +parser.add_argument('os', choices=OS_LIBRARY_VERSION.keys()) +parser.add_argument('target_folder') +args = parser.parse_args() +arch = args.arch +os_code_name = args.os +target_folder = args.target_folder os_version = OS_LIBRARY_VERSION[os_code_name] -spinnaker_version = SPINNAKER_INFO[os_code_name]['version'] +spinnaker_version = SPINNAKER_SDK_VERSIONS[os_code_name] archive_url = URL_TEMPLATE.format( - arch=ARCHS[arch], + arch=ARCH_MAPPINGS[arch], os_version=os_version, spinnaker_version=spinnaker_version) -folder_name = 'spinnaker-{}-{}'.format(spinnaker_version, ARCHS[arch]) -shared_library = SPINNAKER_INFO[os_code_name]['shared_library'] logging.info("CPU architecture is %s", arch) logging.info("OS code name is %s", os_code_name) -logging.info("Destination folder is %s", destination_folder) if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): - if not os.path.exists(os.path.join(os.getcwd(), folder_name)): - cj = http.cookiejar.CookieJar() - opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) - opener.addheaders = [ - ('User-agent', 'Mozilla/5.0'), - ('Referer', 'https://www.ptgrey.com')] + cj = http.cookiejar.CookieJar() + opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) + opener.addheaders = [ + ('User-agent', 'Mozilla/5.0'), + ('Referer', 'https://www.ptgrey.com')] - logging.info("Downloading SDK archive from {0}...".format(archive_url)) - resp = opener.open(archive_url) + logging.info("Downloading SDK archive from {0}...".format(archive_url)) + resp = opener.open(archive_url) - logging.info("Unpacking tarball.") - with tarfile.open(mode="r:gz", fileobj=io.BytesIO(resp.read())) as tar: - tar.extractall() + with tarfile.open(mode="r:gz", fileobj=io.BytesIO(resp.read())) as tar: + tar.extractall() - logging.info("Unpacking debs.") - debs = glob.glob(os.path.join(os.getcwd(), folder_name, "*spinnaker*.deb")) - unpack_dir = os.path.join(os.getcwd()) - if not os.path.exists(unpack_dir): - os.makedirs(unpack_dir) + logging.info("Unpacking debs to {}.".format(target_folder)) + debs = glob.glob(os.path.join(os.getcwd(), "*", "*spinnaker*.deb")) + if not os.path.exists(target_folder): + os.makedirs(target_folder) for deb in debs: logging.info('Extracting {0}'.format(deb)) - subprocess.call(['dpkg', '--extract', deb, unpack_dir]) - - # finally, copy the shared libraries into the output folder - src_file = os.path.join(unpack_dir, shared_library) - logging.info('Copying shared library to {0}'.format(destination_folder)) - if not os.path.exists(destination_folder): - os.makedirs(destination_folder) - shutil.copyfile(src_file, os.path.join(destination_folder, 'libSpinnaker.so')) + subprocess.call(['dpkg', '--extract', deb, target_folder]) From dc33ec0ab6c27a4228ce1454d5f5ca729e4da16d Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:48:45 +0100 Subject: [PATCH 5/9] Don't install Spinnaker if downloaded --- spinnaker_camera_driver/CMakeLists.txt | 13 ------------- spinnaker_camera_driver/cmake/install_files | 1 - 2 files changed, 14 deletions(-) delete mode 100644 spinnaker_camera_driver/cmake/install_files diff --git a/spinnaker_camera_driver/CMakeLists.txt b/spinnaker_camera_driver/CMakeLists.txt index f4ad7e6f..b339d473 100644 --- a/spinnaker_camera_driver/CMakeLists.txt +++ b/spinnaker_camera_driver/CMakeLists.txt @@ -101,19 +101,6 @@ install(TARGETS RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -# Redistributing the flycapture .so file is permitted by the SDK EULA: -# http://www.ptgrey.com/support/kb/data/PGR-FlyCap-SDK-LA.pdf -if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/usr/lib) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/usr/lib/ DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - PATTERN libQt* EXCLUDE) -else() - get_filename_component(Spinnaker_LIB_DIR ${Spinnaker_LIBRARIES} DIRECTORY) - file(READ ${PROJECT_SOURCE_DIR}/cmake/install_files filenames) - foreach(filename ${filenames}) - install(FILES ${Spinnaker_LIB_DIR}/${filename} DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) - endforeach() -endif() - install(FILES nodelet_plugins.xml DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) diff --git a/spinnaker_camera_driver/cmake/install_files b/spinnaker_camera_driver/cmake/install_files deleted file mode 100644 index 94fdfa4f..00000000 --- a/spinnaker_camera_driver/cmake/install_files +++ /dev/null @@ -1 +0,0 @@ -libGCBase_gcc540_v3_0.so;libGenApi_gcc540_v3_0.so;liblog4cpp_gcc540_v3_0.so;libLog_gcc540_v3_0.so;libMathParser_gcc540_v3_0.so;libNodeMapData_gcc540_v3_0.so;libSpinnaker.so;libSpinnaker.so.1;libSpinnaker.so.1.13.0.31;libXmlParser_gcc540_v3_0.so;SFNC_GenTLDataStream_GigE_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLDataStream_Usb3_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLDevice_GigE_Version_1_0_0_Schema_1_1.xml;;SFNC_GenTLDevice_Reference_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLDevice_Usb3_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLInterface_GigE_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLInterface_Reference_Version_1_0_0_Schema_1_1.xml;SFNC_GenTLInterface_Usb3_Version_1_0_0_Schema_1_1.xml; \ No newline at end of file From 66ebe8749db79c7a1065bc49265c98bd0f0e3178 Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 12:07:25 +0100 Subject: [PATCH 6/9] Fix linter errors --- spinnaker_camera_driver/CMakeLists.txt | 2 +- .../include/spinnaker_camera_driver/SpinnakerCamera.h | 1 + .../include/spinnaker_camera_driver/diagnostics.h | 1 + spinnaker_camera_driver/src/diagnostics.cpp | 1 + spinnaker_camera_driver/src/nodelet.cpp | 2 ++ 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spinnaker_camera_driver/CMakeLists.txt b/spinnaker_camera_driver/CMakeLists.txt index b339d473..5dfdb700 100644 --- a/spinnaker_camera_driver/CMakeLists.txt +++ b/spinnaker_camera_driver/CMakeLists.txt @@ -16,7 +16,7 @@ generate_dynamic_reconfigure_options( ) catkin_package(CATKIN_DEPENDS - image_exposure_msgs nodelet roscpp sensor_msgs wfov_camera_msgs + image_exposure_msgs nodelet roscpp sensor_msgs wfov_camera_msgs dynamic_reconfigure ) diff --git a/spinnaker_camera_driver/include/spinnaker_camera_driver/SpinnakerCamera.h b/spinnaker_camera_driver/include/spinnaker_camera_driver/SpinnakerCamera.h index dd62905e..0cbb57b5 100644 --- a/spinnaker_camera_driver/include/spinnaker_camera_driver/SpinnakerCamera.h +++ b/spinnaker_camera_driver/include/spinnaker_camera_driver/SpinnakerCamera.h @@ -51,6 +51,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include // Header generated by dynamic_reconfigure #include diff --git a/spinnaker_camera_driver/include/spinnaker_camera_driver/diagnostics.h b/spinnaker_camera_driver/include/spinnaker_camera_driver/diagnostics.h index b9fc5f8c..84e3bb3a 100644 --- a/spinnaker_camera_driver/include/spinnaker_camera_driver/diagnostics.h +++ b/spinnaker_camera_driver/include/spinnaker_camera_driver/diagnostics.h @@ -50,6 +50,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include namespace spinnaker_camera_driver { diff --git a/spinnaker_camera_driver/src/diagnostics.cpp b/spinnaker_camera_driver/src/diagnostics.cpp index 18e8bfb2..acd25ed2 100644 --- a/spinnaker_camera_driver/src/diagnostics.cpp +++ b/spinnaker_camera_driver/src/diagnostics.cpp @@ -32,6 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include namespace spinnaker_camera_driver { diff --git a/spinnaker_camera_driver/src/nodelet.cpp b/spinnaker_camera_driver/src/nodelet.cpp index cc3e7908..003ee432 100644 --- a/spinnaker_camera_driver/src/nodelet.cpp +++ b/spinnaker_camera_driver/src/nodelet.cpp @@ -70,6 +70,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include +#include namespace spinnaker_camera_driver { From 89974a9efe7132551cc29c2647f28f65ce42a9d0 Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 13:58:33 +0100 Subject: [PATCH 7/9] Symlink problem --- spinnaker_camera_driver/CMakeLists.txt | 7 +++++-- .../cmake/DownloadSpinnaker.cmake | 20 +++++++++++++++---- .../cmake/download_spinnaker | 14 +++++++------ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/spinnaker_camera_driver/CMakeLists.txt b/spinnaker_camera_driver/CMakeLists.txt index 5dfdb700..0f64ad85 100644 --- a/spinnaker_camera_driver/CMakeLists.txt +++ b/spinnaker_camera_driver/CMakeLists.txt @@ -20,17 +20,20 @@ catkin_package(CATKIN_DEPENDS ) -# If Spinnacker is already present, use the found version. If not, download it. +# If Spinnaker is already present, use the found version. If not, download it. # We can't resolve this dependency using the usual rosdep means because # the Point Grey EULA prohibits redistributing the headers or the packages which # contains them. We work around this by downloading the archive directly from # their website during this step in the build process. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") -find_package(Spinnaker QUIET) +#find_package(Spinnaker QUIET) if(NOT Spinnaker_FOUND) message(STATUS "libSpinnaker not found in system library path") include(cmake/DownloadSpinnaker.cmake) download_spinnaker(Spinnaker_LIBRARIES Spinnaker_INCLUDE_DIRS) + #add_library(Spinnaker SHARED IMPORTED) + # set_target_properties(Spinnaker PROPERTIES IMPORTED_LOCATION ${Spinnaker_LIBRARY_LOCATION}) + #cmake_print_properties(Spinnaker PROPERTIES IMPORTED_LOCATION) endif() message(STATUS "libSpinnaker library: ${Spinnaker_LIBRARIES}") diff --git a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake index 39130530..996ff4a0 100644 --- a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake +++ b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake @@ -23,10 +23,22 @@ function(download_spinnaker FLIR_LIB_VAR FLIR_INCLUDE_DIR_VAR) endif() set(SPINNAKER_SEARCH_PATHS ${SPINNAKER_SDK_DIR}/usr ${SPINNAKER_SDK_DIR}/opt/spinnaker) + message("Downloaded Spinnaker search paths: ${SPINNAKER_SEARCH_PATHS}") - find_path(Spinnaker_INCLUDE_DIR NAMES Spinnaker.h PATHS ${SPINNAKER_SEARCH_PATHS} PATH_SUFFIXES include include/spinnaker) - find_library(Spinnaker_LIBRARIES NAMES Spinnaker PATHS ${SPINNAKER_SEARCH_PATHS} PATH_SUFFIXES lib) + find_path(_Spinnaker_INCLUDE_DIR NAMES Spinnaker.h PATHS ${SPINNAKER_SEARCH_PATHS} NO_DEFAULT_PATH PATH_SUFFIXES include include/spinnaker REQUIRED) + find_library(_Spinnaker_LIBRARY NAMES Spinnaker PATHS ${SPINNAKER_SEARCH_PATHS} NO_DEFAULT_PATH PATH_SUFFIXES lib REQUIRED) + get_filename_component(_Spinnaker_LIBRARY_RESOLVED ${_Spinnaker_LIBRARY} REALPATH) + if(IS_SYMLINK ${_Spinnaker_LIBRARY}) + message(STATUS "SYMLINK: ${_Spinnaker_LIBRARY}") + get_filename_component(test ${_Spinnaker_LIBRARY} REALPATH) + message(STATUS "Real Path: ${test}") + endif() + + message("Downloaded Spinnaker include dir: ${_Spinnaker_INCLUDE_DIR}") + message("Downloaded Spinnaker library: ${_Spinnaker_LIBRARY}") + message("Downloaded Spinnaker library resolved: ${_Spinnaker_LIBRARY_RESOLVED}") - set(${FLIR_INCLUDE_DIR_VAR} "${Spinnaker_INCLUDE_DIR}" PARENT_SCOPE) - set(${FLIR_LIB_VAR} "${Spinnaker_LIBRARIES}" PARENT_SCOPE) + set(${FLIR_INCLUDE_DIR_VAR} "${_Spinnaker_INCLUDE_DIR}" PARENT_SCOPE) + set(${FLIR_LIB_VAR} "${_Spinnaker_LIBRARY}" PARENT_SCOPE) + #set(${FLIR_LIB_VAR} "${SPINNAKER_SDK_DIR}/usr/lib/libSpinnaker.so.1.27.0.48" PARENT_SCOPE) endfunction() diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index fcd1d4a7..1bc21d91 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -43,24 +43,24 @@ logging.basicConfig(level=logging.INFO) URL_TEMPLATE = 'https://packages.clearpathrobotics.com/stable/flir/Spinnaker/Ubuntu{os_version}/spinnaker-{spinnaker_version}-Ubuntu{os_version}-{arch}-pkg.tar.gz' ARCH_MAPPINGS = { - 'i386': 'i386', + 'i386' : 'i386', 'x86_64': 'amd64', - 'armv7': 'armhf', - 'armv8': 'armh64' + 'armv7' : 'armhf', + 'armv8' : 'armh64' } OS_LIBRARY_VERSION = { 'jessie': '16.04', 'xenial': '16.04', 'bionic': '18.04', - 'focal': '20.04' + 'focal' : '20.04' } SPINNAKER_SDK_VERSIONS = { 'jessie': '1.27.0.48', 'xenial': '1.27.0.48', 'bionic': '1.27.0.48', - 'focal': '2.2.0.48' + 'focal' : '2.2.0.48' } parser = argparse.ArgumentParser() @@ -82,7 +82,7 @@ archive_url = URL_TEMPLATE.format( logging.info("CPU architecture is %s", arch) logging.info("OS code name is %s", os_code_name) -if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): +if not os.path.exists(target_folder): cj = http.cookiejar.CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) opener.addheaders = [ @@ -102,3 +102,5 @@ if not os.path.exists(os.path.join(os.getcwd(), "usr/lib/")): for deb in debs: logging.info('Extracting {0}'.format(deb)) subprocess.call(['dpkg', '--extract', deb, target_folder]) +else: + logging.info('Download folder {} already exists. Skipping.'.format(target_folder)) From baeb5edc8cf1cfe93bca13b78817f56d05fe93fd Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 15:49:53 +0100 Subject: [PATCH 8/9] Fix problem with symlinks --- spinnaker_camera_driver/CMakeLists.txt | 5 +---- .../cmake/DownloadSpinnaker.cmake | 12 ------------ spinnaker_camera_driver/cmake/download_spinnaker | 10 +++++++--- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/spinnaker_camera_driver/CMakeLists.txt b/spinnaker_camera_driver/CMakeLists.txt index 0f64ad85..cc689e17 100644 --- a/spinnaker_camera_driver/CMakeLists.txt +++ b/spinnaker_camera_driver/CMakeLists.txt @@ -26,14 +26,11 @@ catkin_package(CATKIN_DEPENDS # contains them. We work around this by downloading the archive directly from # their website during this step in the build process. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") -#find_package(Spinnaker QUIET) +find_package(Spinnaker QUIET) if(NOT Spinnaker_FOUND) message(STATUS "libSpinnaker not found in system library path") include(cmake/DownloadSpinnaker.cmake) download_spinnaker(Spinnaker_LIBRARIES Spinnaker_INCLUDE_DIRS) - #add_library(Spinnaker SHARED IMPORTED) - # set_target_properties(Spinnaker PROPERTIES IMPORTED_LOCATION ${Spinnaker_LIBRARY_LOCATION}) - #cmake_print_properties(Spinnaker PROPERTIES IMPORTED_LOCATION) endif() message(STATUS "libSpinnaker library: ${Spinnaker_LIBRARIES}") diff --git a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake index 996ff4a0..74bb12d8 100644 --- a/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake +++ b/spinnaker_camera_driver/cmake/DownloadSpinnaker.cmake @@ -23,22 +23,10 @@ function(download_spinnaker FLIR_LIB_VAR FLIR_INCLUDE_DIR_VAR) endif() set(SPINNAKER_SEARCH_PATHS ${SPINNAKER_SDK_DIR}/usr ${SPINNAKER_SDK_DIR}/opt/spinnaker) - message("Downloaded Spinnaker search paths: ${SPINNAKER_SEARCH_PATHS}") find_path(_Spinnaker_INCLUDE_DIR NAMES Spinnaker.h PATHS ${SPINNAKER_SEARCH_PATHS} NO_DEFAULT_PATH PATH_SUFFIXES include include/spinnaker REQUIRED) find_library(_Spinnaker_LIBRARY NAMES Spinnaker PATHS ${SPINNAKER_SEARCH_PATHS} NO_DEFAULT_PATH PATH_SUFFIXES lib REQUIRED) - get_filename_component(_Spinnaker_LIBRARY_RESOLVED ${_Spinnaker_LIBRARY} REALPATH) - if(IS_SYMLINK ${_Spinnaker_LIBRARY}) - message(STATUS "SYMLINK: ${_Spinnaker_LIBRARY}") - get_filename_component(test ${_Spinnaker_LIBRARY} REALPATH) - message(STATUS "Real Path: ${test}") - endif() - - message("Downloaded Spinnaker include dir: ${_Spinnaker_INCLUDE_DIR}") - message("Downloaded Spinnaker library: ${_Spinnaker_LIBRARY}") - message("Downloaded Spinnaker library resolved: ${_Spinnaker_LIBRARY_RESOLVED}") set(${FLIR_INCLUDE_DIR_VAR} "${_Spinnaker_INCLUDE_DIR}" PARENT_SCOPE) set(${FLIR_LIB_VAR} "${_Spinnaker_LIBRARY}" PARENT_SCOPE) - #set(${FLIR_LIB_VAR} "${SPINNAKER_SDK_DIR}/usr/lib/libSpinnaker.so.1.27.0.48" PARENT_SCOPE) endfunction() diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index 1bc21d91..99d1fa6f 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -83,6 +83,7 @@ logging.info("CPU architecture is %s", arch) logging.info("OS code name is %s", os_code_name) if not os.path.exists(target_folder): + os.makedirs(target_folder) cj = http.cookiejar.CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) opener.addheaders = [ @@ -95,12 +96,15 @@ if not os.path.exists(target_folder): with tarfile.open(mode="r:gz", fileobj=io.BytesIO(resp.read())) as tar: tar.extractall() - logging.info("Unpacking debs to {}.".format(target_folder)) debs = glob.glob(os.path.join(os.getcwd(), "*", "*spinnaker*.deb")) - if not os.path.exists(target_folder): - os.makedirs(target_folder) + logging.info('Unpacking debs to {}.'.format(target_folder)) for deb in debs: logging.info('Extracting {0}'.format(deb)) subprocess.call(['dpkg', '--extract', deb, target_folder]) + # SDK version 1.27.0.48 has broken symlinks + if spinnaker_version == '1.27.0.48': + lib_path = os.path.join(target_folder, 'usr', 'lib') + os.unlink(os.path.join(lib_path, 'libspinnaker.so.1')) + os.symlink(os.path.join(lib_path, 'libSpinnaker.so.1.27.0.48'), os.path.join(lib_path, 'libSpinnaker.so.1')) else: logging.info('Download folder {} already exists. Skipping.'.format(target_folder)) From a7dff89df2afd36a785e27fc1118bb605dcd12de Mon Sep 17 00:00:00 2001 From: Stephan Wirth <1481786+stwirth@users.noreply.github.com> Date: Thu, 25 Feb 2021 15:59:43 +0100 Subject: [PATCH 9/9] Log line for symlink patching --- spinnaker_camera_driver/cmake/download_spinnaker | 1 + 1 file changed, 1 insertion(+) diff --git a/spinnaker_camera_driver/cmake/download_spinnaker b/spinnaker_camera_driver/cmake/download_spinnaker index 99d1fa6f..7440282c 100755 --- a/spinnaker_camera_driver/cmake/download_spinnaker +++ b/spinnaker_camera_driver/cmake/download_spinnaker @@ -103,6 +103,7 @@ if not os.path.exists(target_folder): subprocess.call(['dpkg', '--extract', deb, target_folder]) # SDK version 1.27.0.48 has broken symlinks if spinnaker_version == '1.27.0.48': + logging.info('Patching broken symlink.') lib_path = os.path.join(target_folder, 'usr', 'lib') os.unlink(os.path.join(lib_path, 'libspinnaker.so.1')) os.symlink(os.path.join(lib_path, 'libSpinnaker.so.1.27.0.48'), os.path.join(lib_path, 'libSpinnaker.so.1'))