berndpfrommer / flir_spinnaker_ros2

ros2 driver for flir spinnaker SDK
26 stars 27 forks source link

Running driver with Ubuntu 22.04 and ROS2 Humble #43

Closed tomaszkapron closed 1 year ago

tomaszkapron commented 1 year ago

Hi there!

I've been trying to run flir_spinnaker_ros2 under Ubuntu 22.04. It requires installing a newer version of Spinnaker SDK v3.0.0.118. My camera model is Point Grey Flea3 FL3-U3-13E4C connected via USB3. (I've been using this camera in exactly the same hardware setup, but with Ubuntu 20 and the spinnaker SDK that You suggest). I am using the docker container. Inside the spinview tool camera gets nicely recognized and I can capture the image at a full frame rate.

When I launch flir_spinnaker_ros2 camera also is recognized, the spinnaker lib version is correctly found and parameters are correctly set. Unfortunately, any of Image ever get published on the topic. Framerate in is correct but out is always 0.0 so every Image gets dropped if I understand correctly.

This is the output of the terminal:

[INFO] [launch]: All log files can be found below /home/adas/.ros/log/2023-04-06-14-53-48-165848-adas3-61734
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [camera_driver_node-1]: process started with pid [61741]
[camera_driver_node-1] [INFO 1680785628.283895966] [blackfly_s]: adjusting time stamps! (readParameters() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:197)
[camera_driver_node-1] [INFO 1680785628.284130885] [blackfly_s]: looking for serial number: 14092854 (readParameters() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:211)
[camera_driver_node-1] [INFO 1680785628.285539730] [blackfly_s]: using default calibration URL (loadCalibration() at ./src/camera_info_manager.cpp:223)
[camera_driver_node-1] [INFO 1680785628.285563919] [blackfly_s]: camera calibration URL: file:///home/adas/.ros/camera_info/blackfly_s.yaml (loadCalibration() at ./src/camera_info_manager.cpp:217)
[camera_driver_node-1] [ERROR 1680785628.285604073] [camera_calibration_parsers]: Unable to open camera calibration file [/home/adas/.ros/camera_info/blackfly_s.yaml] (readCalibrationYml() at ./src/parse_yml.cpp:244)
[camera_driver_node-1] [WARN 1680785628.285612923] [blackfly_s]: Camera calibration file /home/adas/.ros/camera_info/blackfly_s.yaml not found (loadCalibrationFile() at ./src/camera_info_manager.cpp:289)
[camera_driver_node-1] [INFO 1680785630.183370193] [blackfly_s]: using spinnaker lib version: 3.0.0.118 (start() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:670)
[camera_driver_node-1] [INFO 1680785630.184053866] [blackfly_s]: found camera with serial number: 14092854 (start() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:683)
[camera_driver_node-1] [INFO 1680785630.223641859] [blackfly_s]: setting AnalogControl/GainAuto to: Continuous (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [INFO 1680785630.224539186] [blackfly_s]: setting AcquisitionControl/ExposureAuto to: Continuous (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [INFO 1680785630.225502369] [blackfly_s]: setting AcquisitionControl/AcquisitionFrameRateEnable to: 1 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [WARN 1680785630.225597406] [blackfly_s]: setting AcquisitionControl/AcquisitionFrameRateEnable failed: node AcquisitionControl/AcquisitionFrameRateEnable does not exist! (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:324)
[camera_driver_node-1] [INFO 1680785630.225668651] [blackfly_s]: setting AcquisitionControl/AcquisitionFrameRate to: 20 (setDouble() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:285)
[camera_driver_node-1] [WARN 1680785630.226094028] [blackfly_s]: setting AcquisitionControl/AcquisitionFrameRate failed: node AcquisitionControl/AcquisitionFrameRate not available! (setDouble() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:290)
[camera_driver_node-1] [INFO 1680785630.226195357] [blackfly_s]: setting AcquisitionControl/TriggerMode to: Off (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [INFO 1680785630.226461437] [blackfly_s]: setting ChunkDataControl/ChunkModeActive to: 0 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [INFO 1680785630.226757207] [blackfly_s]: setting ChunkDataControl/ChunkSelector to: FrameID (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [WARN 1680785630.226967795] [blackfly_s]: setting ChunkDataControl/ChunkSelector failed: node ChunkDataControl/ChunkSelector invalid enum: FrameID (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:273)
[camera_driver_node-1] [WARN 1680785630.226986591] [blackfly_s]: ChunkDataControl/ChunkSelector set to: Gain instead of: FrameID (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:277)
[camera_driver_node-1] [INFO 1680785630.227082398] [blackfly_s]: setting ChunkDataControl/ChunkEnable to: 1 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [INFO 1680785630.227514244] [blackfly_s]: setting ChunkDataControl/ChunkSelector to: ExposureTime (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [INFO 1680785630.227793204] [blackfly_s]: setting ChunkDataControl/ChunkEnable to: 1 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [INFO 1680785630.228066840] [blackfly_s]: setting ChunkDataControl/ChunkSelector to: Gain (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [INFO 1680785630.228285766] [blackfly_s]: setting ChunkDataControl/ChunkEnable to: 1 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [INFO 1680785630.228517091] [blackfly_s]: setting ChunkDataControl/ChunkSelector to: Timestamp (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:268)
[camera_driver_node-1] [WARN 1680785630.228715782] [blackfly_s]: setting ChunkDataControl/ChunkSelector failed: node ChunkDataControl/ChunkSelector invalid enum: Timestamp (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:273)
[camera_driver_node-1] [WARN 1680785630.228733270] [blackfly_s]: ChunkDataControl/ChunkSelector set to: Gain instead of: Timestamp (setEnum() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:277)
[camera_driver_node-1] [INFO 1680785630.228775961] [blackfly_s]: setting ChunkDataControl/ChunkEnable to: 1 (setBool() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:319)
[camera_driver_node-1] [INFO 1680785630.232830681] [blackfly_s]: camera has pixel format: BayerRG8 (printCameraInfo() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:606)
[camera_driver_node-1] [INFO 1680785630.232889849] [blackfly_s]: camera_driver_node started up! (main() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver_node.cpp:27)
[camera_driver_node-1] [INFO 1680785633.283929927] [blackfly_s]: rate [Hz] in  59.94 out   0.00 drop   0% (printStatus() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:171)
[camera_driver_node-1] [INFO 1680785638.283972218] [blackfly_s]: rate [Hz] in  59.94 out   0.00 drop   0% (printStatus() at /home/adas/radar-rgb-fusion/src/external/sensor_component/flir_spinnaker_ros2/src/camera_driver.cpp:171)

I am launching blackfly_s.launch.py file with one camera param changed: 'chunk_mode_active': False.

I suspect that there are some changes inside the spinnaker SDK that are not compatible with flir_spinnaker_common, but before I start digging into I wanted to ask You for suggestions. What could be the problem? Where should I start looking?

berndpfrommer commented 1 year ago

Frame rate out looks good -> the spinnaker SDK is probably not the problem. The ROS driver is getting images, it just doesn't publish them. But why? To me this feels like a ROS2 issue Couple of things: 1) the default ros middleware has changed from Galactic (on Ubuntu 20.04) to Humble (on Ubuntu 22.04). It was cyclonedds, now Humble uses fastrtps. I'm not sure the two can talk to each other, but you can configure either Galactic to use fastrtps or Humble to use cyclonedds, the choice is yours. 2) Before you go down that route though, do a simple check: run "ros2 topic hz" on your Ubuntu 22.04 machine under Humble. Do you get any rate, and does the driver then show "out" rate? Also run "ros2 node list" and then " ros2 node info " to see that you are subscribing to the right topics etc. 3) I find ROS2 rmws exceedingly finicky. Sometimes I run a publisher on the same node, same middleware, and it just doesn't show up. I have to "ros2 daemon stop" to clear state. Then for fastrtps I have to set ROS_DOMAIN_ID (see here( to make things work. Usually after some hit and miss I get it to work, at least on the same node.

tomaszkapron commented 1 year ago

I don't have access to the camera right now. I will give some feedback soon. For now, I switched back to ROS Galactic and the previous version of spinnaker SDK and it works smoothly.

berndpfrommer commented 1 year ago

Seems to be workable, see PR #46