Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
larm-astro
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Inès EL HADRI
larm-astro
Commits
5d57b3fb
Commit
5d57b3fb
authored
Jan 10, 2024
by
Inès EL HADRI
💤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add IR to camera driver
parent
e747efb1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
11 deletions
+49
-11
cam_driver
cam_driver/scripts/cam_driver
+49
-11
No files found.
cam_driver/scripts/cam_driver
View file @
5d57b3fb
...
@@ -14,8 +14,10 @@ class CameraDriver(Node):
...
@@ -14,8 +14,10 @@ class CameraDriver(Node):
super
()
.
__init__
(
name
)
# Create the node
super
()
.
__init__
(
name
)
# Create the node
# Initialize publishers
# Initialize publishers
self
.
_rgb_publisher
=
self
.
create_publisher
(
Image
,
'rgb_cam'
,
10
)
self
.
_rgb_publisher
=
self
.
create_publisher
(
Image
,
'cam_rgb'
,
10
)
self
.
_depth_publisher
=
self
.
create_publisher
(
Image
,
'depth_cam'
,
10
)
self
.
_depth_publisher
=
self
.
create_publisher
(
Image
,
'cam_depth'
,
10
)
self
.
_infra_publisher_1
=
self
.
create_publisher
(
Image
,
'cam_infra_1'
,
10
)
self
.
_infra_publisher_2
=
self
.
create_publisher
(
Image
,
'cam_infra_2'
,
10
)
# Initialize a clock for the publisher
# Initialize a clock for the publisher
self
.
create_timer
(
timerFreq
,
self
.
publish_imgs
)
self
.
create_timer
(
timerFreq
,
self
.
publish_imgs
)
...
@@ -47,39 +49,65 @@ class CameraDriver(Node):
...
@@ -47,39 +49,65 @@ class CameraDriver(Node):
## Configure stream width, height, format and frequency
## Configure stream width, height, format and frequency
self
.
_config
.
enable_stream
(
rs
.
stream
.
color
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
bgr8
,
framerate
=
60
)
self
.
_config
.
enable_stream
(
rs
.
stream
.
color
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
bgr8
,
framerate
=
60
)
self
.
_config
.
enable_stream
(
rs
.
stream
.
depth
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
z16
,
framerate
=
60
)
self
.
_config
.
enable_stream
(
rs
.
stream
.
depth
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
z16
,
framerate
=
60
)
self
.
_config
.
enable_stream
(
rs
.
stream
.
infrared
,
1
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
y8
,
framerate
=
60
)
self
.
_config
.
enable_stream
(
rs
.
stream
.
infrared
,
2
,
width
=
848
,
height
=
480
,
format
=
rs
.
format
.
y8
,
framerate
=
60
)
## Start the acquisition
## Start the acquisition
self
.
_pipeline
.
start
(
self
.
_config
)
self
.
_pipeline
.
start
(
self
.
_config
)
def
read_imgs
(
self
):
def
read_imgs
(
self
):
"""lire et traduire images camera"""
"""lire et traduire images camera"""
# Get frames
frames
=
self
.
_pipeline
.
wait_for_frames
()
frames
=
self
.
_pipeline
.
wait_for_frames
()
# Split frames
color_frame
=
frames
.
first
(
rs
.
stream
.
color
)
color_frame
=
frames
.
first
(
rs
.
stream
.
color
)
depth_frame
=
frames
.
first
(
rs
.
stream
.
depth
)
depth_frame
=
frames
.
first
(
rs
.
stream
.
depth
)
if
not
(
depth_frame
and
color_frame
):
infra_frame_1
=
frames
.
get_infrared_frame
(
1
)
infra_frame_2
=
frames
.
get_infrared_frame
(
2
)
if
not
(
depth_frame
and
color_frame
and
infra_frame_1
and
infra_frame_2
):
print
(
"eh oh le truc y marche pas"
)
return
return
# Convert images to numpy arrays
# Convert images to numpy arrays
depth_image
=
np
.
asanyarray
(
depth_frame
.
get_data
())
depth_image
=
np
.
asanyarray
(
depth_frame
.
get_data
())
color_image
=
np
.
asanyarray
(
color_frame
.
get_data
())
color_image
=
np
.
asanyarray
(
color_frame
.
get_data
())
infra_image_1
=
np
.
asanyarray
(
infra_frame_1
.
get_data
())
infra_image_2
=
np
.
asanyarray
(
infra_frame_2
.
get_data
())
# Apply colormap on depth
image
(image must be converted to 8-bit per pixel first)
# Apply colormap on depth
and IR images
(image must be converted to 8-bit per pixel first)
depth_colormap
=
cv2
.
applyColorMap
(
cv2
.
convertScaleAbs
(
depth_image
,
alpha
=
0.03
),
cv2
.
COLORMAP_JET
)
depth_colormap
=
cv2
.
applyColorMap
(
cv2
.
convertScaleAbs
(
depth_image
,
alpha
=
0.03
),
cv2
.
COLORMAP_JET
)
infra_colormap_1
=
cv2
.
applyColorMap
(
cv2
.
convertScaleAbs
(
infra_image_1
,
alpha
=
1
),
cv2
.
COLORMAP_JET
)
infra_colormap_2
=
cv2
.
applyColorMap
(
cv2
.
convertScaleAbs
(
infra_image_2
,
alpha
=
1
),
cv2
.
COLORMAP_JET
)
bridge
=
CvBridge
()
bridge
=
CvBridge
()
# Convert to ROS2 Image type
# - RGB Image
self
.
_rgb_image
=
bridge
.
cv2_to_imgmsg
(
color_image
,
"bgr8"
)
self
.
_rgb_image
=
bridge
.
cv2_to_imgmsg
(
color_image
,
"bgr8"
)
self
.
_depth_image
=
bridge
.
cv2_to_imgmsg
(
depth_colormap
,
"bgr8"
)
self
.
_rgb_image
.
header
.
stamp
=
self
.
get_clock
()
.
now
()
.
to_msg
()
self
.
_rgb_image
.
header
.
stamp
=
self
.
get_clock
()
.
now
()
.
to_msg
()
self
.
_depth_image
.
header
.
stamp
=
self
.
_rgb_image
.
header
.
stamp
self
.
_rgb_image
.
header
.
frame_id
=
"image"
self
.
_rgb_image
.
header
.
frame_id
=
"image"
# - Depth Image
self
.
_depth_image
=
bridge
.
cv2_to_imgmsg
(
depth_colormap
,
"bgr8"
)
self
.
_depth_image
.
header
.
stamp
=
self
.
_rgb_image
.
header
.
stamp
self
.
_depth_image
.
header
.
frame_id
=
"depth"
self
.
_depth_image
.
header
.
frame_id
=
"depth"
# - IR1 Image
self
.
_infra1_image
=
bridge
.
cv2_to_imgmsg
(
infra_colormap_1
,
"bgr8"
)
self
.
_infra1_image
.
header
.
stamp
=
self
.
_rgb_image
.
header
.
stamp
self
.
_infra1_image
.
header
.
frame_id
=
"infrared_1"
# - IR2 Image
self
.
_infra2_image
=
bridge
.
cv2_to_imgmsg
(
infra_colormap_2
,
"bgr8"
)
self
.
_infra2_image
.
header
.
stamp
=
self
.
_rgb_image
.
header
.
stamp
self
.
_infra2_image
.
header
.
frame_id
=
"infrared_2"
return
self
.
_rgb_image
,
self
.
_depth_image
return
self
.
_rgb_image
,
self
.
_depth_image
,
self
.
_infra1_image
,
self
.
_infra2_image
def
publish_imgs
(
self
):
def
publish_imgs
(
self
):
self
.
publish_rgb
()
self
.
publish_rgb
()
self
.
publish_depth
()
self
.
publish_depth
()
self
.
publish_IR
()
def
publish_rgb
(
self
):
def
publish_rgb
(
self
):
...
@@ -100,6 +128,16 @@ class CameraDriver(Node):
...
@@ -100,6 +128,16 @@ class CameraDriver(Node):
return
0
return
0
def
publish_IR
(
self
):
"""
Publish infrared colormap image
"""
self
.
_infra_publisher_1
.
publish
(
self
.
_infra1_image
)
self
.
_infra_publisher_2
.
publish
(
self
.
_infra2_image
)
return
0
# Capture ctrl-c event
# Capture ctrl-c event
isOk
=
True
isOk
=
True
def
signalInterruption
(
signum
,
frame
):
def
signalInterruption
(
signum
,
frame
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment