Extend-Robotics / camera_aravis

A ROS1 driver for GenICam based GigE and USB3 cameras.
Other
1 stars 1 forks source link

performance tests with MotionCam3D 4.1.3 and later #21

Open bmegli opened 1 year ago

bmegli commented 1 year ago

Placeholder for results

If not specified:

Range only Range only, TS = Laser
10.26 14.66
Range + 1932x1096 ColorCamera Range + 1932x1096 ColorCamera, TS = Laser Range + 1932x1096 ColorCamera, TS = Laser + MTU=9000
8.25 8.45 9.95
Range + 1288x730 ColorCamera Range + 1288x730 ColorCamera, TS = Laser
9.86 9.9
Range + 3864x2192 ColorCamera, TS = Laser + MTU=9000
5.5
1680x1200 Scanner Range + 3864x2192 ColorCamera, TS = Laser + MTU=9000
2.2
Range + Intensity Range + Intensity from Laser Range + Intensity (chunked)
9.85 11.76 9.8

Device firmware notes

With MotionCam firmware 1.13.3 values I get are a bit lower, for example for

The reason seems to be device not accepting any MTU changes above 1500 (GevSCPPacketSize)

bmegli commented 1 year ago

Range only

I had to enforce multipart data, otherwise it is sent as chunk buffer (not supported yet)

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false
rostopic hz /camera/Range/image_raw

Result

10 FPS even without texture

average rate: 10.257
    min: 0.068s max: 0.180s std dev: 0.01178s window: 306
bmegli commented 1 year ago

Range but enforce texture from Laser (disabled)

Texture is not streamed. This is just to test if it affects anything.

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false texture_source:=Laser
rostopic hz /camera/Range/image_raw

Result

average rate: 14.663
    min: 0.054s max: 0.129s std dev: 0.00522s window: 467

Comment

Ok, this means that device computes texture even if streaming of that component is disabled.

Ideally we would want to disable texture computation completely for added fps in Range

bmegli commented 1 year ago

Asked Photoneo about possibility to disable texture source completely or fastest setting in the absence:

bmegli commented 1 year ago

This means that we should test Range + ColorCamera with texture source Laser

bmegli commented 1 year ago

Range + ColorCamera

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false enable_color_camera:=true
rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 8.260
    min: 0.090s max: 0.145s std dev: 0.01162s window: 213
average rate: 8.252
    min: 0.080s max: 0.160s std dev: 0.01720s window: 207
bmegli commented 1 year ago

Range + 1932x1096 ColorCamera + enforce texture from Laser

Intensity not streamed, Laser texture is only to get more FPS

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false enable_color_camera:=true texture_source:=Laser
rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 8.464
    min: 0.086s max: 0.235s std dev: 0.01461s window: 251
average rate: 8.449
    min: 0.072s max: 0.171s std dev: 0.01800s window: 177

Comment

Very small FPS gain.

Maybe chunked data would be better than multipart? (if sent before collecting everything

bmegli commented 1 year ago

Range + 1288x730 ColorCamera

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false enable_color_camera:=true color_resolution:=Resolution_1288x730
rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 9.866
    min: 0.067s max: 0.167s std dev: 0.01278s window: 224
average rate: 9.862
    min: 0.068s max: 0.172s std dev: 0.01102s window: 227

Comment

Quite close to device computed color texture

bmegli commented 1 year ago

Range + 1288x730 ColorCamera, enforce Laser texture

Intensity not streamed, Laser texture is only to get more FPS

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false enable_color_camera:=true color_resolution:=Resolution_1288x730 texture_source:=Laser
rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 9.899
    min: 0.056s max: 0.161s std dev: 0.01483s window: 278
average rate: 9.899
    min: 0.056s max: 0.161s std dev: 0.01483s window: 278

Comment

Unlike with Range only, texture source did very little difference

bmegli commented 1 year ago

Range + Intensity

The default

roslaunch camera_aravis photoneo_motioncam.launch
rostopic hz /camera/Range/image_raw
rostopic hz /camera/Intensity/image_raw

Result

average rate: 9.840
    min: 0.070s max: 0.159s std dev: 0.01294s window: 249
average rate: 9.863
    min: 0.064s max: 0.175s std dev: 0.01419s window: 237

Comment

Result like Range + 1288x730 ColorCamera but the other one should not need to align data

bmegli commented 1 year ago

Range + Intensity texture source Laser

roslaunch camera_aravis photoneo_motioncam.launch color_resolution:=Resolution_1288x730 texture_source:=Laser
rostopic hz /camera/Range/image_raw
rostopic hz /camera/Intensity/image_raw

Result

average rate: 11.758
    min: 0.066s max: 0.106s std dev: 0.00513s window: 210
average rate: 11.759
    min: 0.068s max: 0.103s std dev: 0.00476s window: 223
bmegli commented 1 year ago

Range + Intensity with chunked data (not multipart)

From:

roslaunch camera_aravis photoneo_motioncam.launch
rostopic hz /camera/Intensity/image_raw

Result

average rate: 9.805
    min: 0.069s max: 0.168s std dev: 0.01454s window: 222

We would not get anything in ROS Range as we are currently not testing for chunks attached to Image payload

Comment

This is exactly the same as multipart performance

bmegli commented 11 months ago

Range + 1932x1096 ColorCamera + enforce texture from Laser + jumbo frames OS MTU + jumbo frames aravis MTU

Setting MTU

sudo ifconfig enp60s0 mtu 9000
ip a
# ...
2: enp60s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
# ...

Driver

roslaunch camera_aravis photoneo_motioncam.launch enable_intensity:=false enable_color_camera:=true texture_source:=Laser mtu:=9000

Test

rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

Before adapting MTU in camera_aravis, after stabilizing

average rate: 8.024
    min: 0.039s max: 0.503s std dev: 0.02526s window: 385
average rate: 7.952
    min: 0.023s max: 0.829s std dev: 0.03735s window: 554

After adapting MTU in camera_aravis with rosrun rqt_reconfigure rqt_reconfigure to 9000

average rate: 9.957
    min: 0.049s max: 0.192s std dev: 0.01319s window: 1127
average rate: 9.953
    min: 0.064s max: 0.183s std dev: 0.00905s window: 1385

Comment

MTU affects result drastically.

Especially in high bandwidth case like this.

MotionCam Firmware 1.13.3

Repeating experiment with firmware 1.13.3

bmegli commented 11 months ago

Range + 3864x2192 ColorCamera + enforce texture from Laser + jumbo frames OS MTU + jumbo frames aravis MTU

Current extend branch (> 4.1.4)

Setup

sudo ip link set dev enp60s0 mtu 9000
roslaunch camera_aravis photoneo_motioncam.launch color_resolution:=Resolution_3864x2192 enable_color_camera:=true enable_intensity:=false texture_source:=Laser mtu:=9000

Test

rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 5.540
    min: 0.170s max: 0.230s std dev: 0.00711s window: 254
average rate: 5.535
    min: 0.155s max: 0.251s std dev: 0.01082s window: 205

Comment

~ 5.5 fps with 4K RGB

The bottleneck is probably link bandwidth

bmegli commented 11 months ago

1680x1200 Scanner Range + 3864x2192 ColorCamera + enforce texture from Laser + jumbo frames OS MTU + jumbo frames aravis MTU

Current extend branch (> 4.1.4)

Setup

sudo ip link set dev enp60s0 mtu 9000
roslaunch camera_aravis photoneo_motioncam.launch operation_mode:=Scanner color_resolution:=Resolution_3864x2192 enable_color_camera:=true enable_intensity:=false texture_source:=Laser mtu:=9000

Test

rostopic hz /camera/Range/image_raw
rostopic hz /camera/ColorCamera/image_raw

Result

average rate: 2.202
    min: 0.388s max: 0.543s std dev: 0.02330s window: 44
average rate: 2.201
    min: 0.372s max: 0.547s std dev: 0.02811s window: 55

Comment

~ 2.2 fps in scanner mode with 4K RGB

This is likely just scanning time result