diff --git a/spinnaker_camera_driver/CMakeLists.txt b/spinnaker_camera_driver/CMakeLists.txt
index 73c3f04f..f82e857e 100644
--- a/spinnaker_camera_driver/CMakeLists.txt
+++ b/spinnaker_camera_driver/CMakeLists.txt
@@ -65,6 +65,16 @@ message(STATUS "libSpinnaker include location: ${SPINNAKER_INCLUDE_DIRS}")
find_package(SPINNAKER REQUIRED)
+# special case the older Spinnaker API
+if(DEFINED ENV{ROS_DISTRO})
+ if($ENV{ROS_DISTRO} STREQUAL "foxy" OR
+ $ENV{ROS_DISTRO} STREQUAL "galactic")
+ add_definitions(-DUSE_OLD_SPINNAKER_API)
+ endif()
+else()
+ message(FATAL_ERROR "ROS_DISTRO environment variable is not set!")
+endif()
+
include_directories(SYSTEM
${SPINNAKER_INCLUDE_DIRS})
@@ -79,7 +89,6 @@ set(ROS_DEPENDENCIES
"image_transport"
"flir_camera_msgs")
-
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(ament_cmake_ros REQUIRED)
diff --git a/spinnaker_camera_driver/package.xml b/spinnaker_camera_driver/package.xml
index f893b1d4..1c479eed 100644
--- a/spinnaker_camera_driver/package.xml
+++ b/spinnaker_camera_driver/package.xml
@@ -16,6 +16,7 @@
ament_cmake
ament_cmake_ros
+ ros_environment
python3-distro
curl
diff --git a/spinnaker_camera_driver/src/spinnaker_wrapper_impl.cpp b/spinnaker_camera_driver/src/spinnaker_wrapper_impl.cpp
index 6d569028..e918a342 100644
--- a/spinnaker_camera_driver/src/spinnaker_wrapper_impl.cpp
+++ b/spinnaker_camera_driver/src/spinnaker_wrapper_impl.cpp
@@ -105,6 +105,12 @@ SpinnakerWrapperImpl::SpinnakerWrapperImpl()
void SpinnakerWrapperImpl::refreshCameraList()
{
+#ifdef USE_OLD_SPINNAKER_API
+ cameraList_ = system_->GetCameras();
+ for (size_t cam_idx = 0; cam_idx < cameraList_.GetSize(); cam_idx++) {
+ const auto cam = cameraList_[cam_idx];
+ }
+#else
cameraList_.Clear();
Spinnaker::InterfaceList interfaceList = system_->GetInterfaces();
@@ -150,6 +156,7 @@ void SpinnakerWrapperImpl::refreshCameraList()
} // end for interfaceList
interfaceList.Clear();
+#endif
}
SpinnakerWrapperImpl::~SpinnakerWrapperImpl()