Support enable stream and publish them in ros
This commit is contained in:
parent
f3d6fcdcb9
commit
f636ba3a86
|
@ -6,17 +6,40 @@
|
||||||
|
|
||||||
<arg name="left_topic" default="left" />
|
<arg name="left_topic" default="left" />
|
||||||
<arg name="right_topic" default="right" />
|
<arg name="right_topic" default="right" />
|
||||||
|
<arg name="left_rect_topic" default="left_rect" />
|
||||||
|
<arg name="right_rect_topic" default="right_rect" />
|
||||||
|
<arg name="disparity_topic" default="disparity" />
|
||||||
|
<arg name="disparity_norm_topic" default="disparity_norm" />
|
||||||
|
<arg name="points_topic" default="points" />
|
||||||
|
<arg name="depth_topic" default="depth" />
|
||||||
|
|
||||||
<arg name="imu_topic" default="imu" />
|
<arg name="imu_topic" default="imu" />
|
||||||
<arg name="temp_topic" default="temp" />
|
<arg name="temp_topic" default="temp" />
|
||||||
|
|
||||||
<arg name="base_frame_id" default="$(arg mynteye)_link" />
|
<arg name="base_frame_id" default="$(arg mynteye)_link" />
|
||||||
<arg name="left_frame_id" default="$(arg mynteye)_left_frame" />
|
<arg name="left_frame_id" default="$(arg mynteye)_left_frame" />
|
||||||
<arg name="right_frame_id" default="$(arg mynteye)_right_frame" />
|
<arg name="right_frame_id" default="$(arg mynteye)_right_frame" />
|
||||||
|
<arg name="left_rect_frame_id" default="$(arg mynteye)_left_rect_frame" />
|
||||||
|
<arg name="right_rect_frame_id" default="$(arg mynteye)_right_rect_frame" />
|
||||||
|
<arg name="disparity_frame_id" default="$(arg mynteye)_disparity_frame" />
|
||||||
|
<arg name="disparity_norm_frame_id" default="$(arg mynteye)_disparity_norm_frame" />
|
||||||
|
<arg name="points_frame_id" default="$(arg mynteye)_points_frame" />
|
||||||
|
<arg name="depth_frame_id" default="$(arg mynteye)_depth_frame" />
|
||||||
|
|
||||||
<arg name="imu_frame_id" default="$(arg mynteye)_imu_frame" />
|
<arg name="imu_frame_id" default="$(arg mynteye)_imu_frame" />
|
||||||
<arg name="temp_frame_id" default="$(arg mynteye)_temp_frame" />
|
<arg name="temp_frame_id" default="$(arg mynteye)_temp_frame" />
|
||||||
|
|
||||||
<arg name="gravity" default="9.8" />
|
<arg name="gravity" default="9.8" />
|
||||||
|
|
||||||
|
<!-- stream toggles -->
|
||||||
|
|
||||||
|
<arg name="enable_left_rect" default="false" />
|
||||||
|
<arg name="enable_right_rect" default="false" />
|
||||||
|
<arg name="enable_disparity" default="false" />
|
||||||
|
<arg name="enable_disparity_norm" default="false" />
|
||||||
|
<arg name="enable_points" default="false" />
|
||||||
|
<arg name="enable_depth" default="true" />
|
||||||
|
|
||||||
<!-- device options, -1 will not set the value -->
|
<!-- device options, -1 will not set the value -->
|
||||||
|
|
||||||
<!-- gain range: [0,48] -->
|
<!-- gain range: [0,48] -->
|
||||||
|
@ -56,7 +79,7 @@
|
||||||
<!-- <arg name="desired_brightness" default="192" /> -->
|
<!-- <arg name="desired_brightness" default="192" /> -->
|
||||||
|
|
||||||
<!-- ir_control range: [0,160] -->
|
<!-- ir_control range: [0,160] -->
|
||||||
<arg name="ir_control" default="-1" />
|
<arg name="ir_control" default="80" />
|
||||||
<!-- <arg name="ir_control" default="0" /> -->
|
<!-- <arg name="ir_control" default="0" /> -->
|
||||||
|
|
||||||
<!-- hdr_mode, 0: 10-bit, 1: 12-bit -->
|
<!-- hdr_mode, 0: 10-bit, 1: 12-bit -->
|
||||||
|
@ -73,17 +96,40 @@
|
||||||
|
|
||||||
<param name="left_topic" value="$(arg left_topic)" />
|
<param name="left_topic" value="$(arg left_topic)" />
|
||||||
<param name="right_topic" value="$(arg right_topic)" />
|
<param name="right_topic" value="$(arg right_topic)" />
|
||||||
|
<param name="left_rect_topic" value="$(arg left_rect_topic)" />
|
||||||
|
<param name="right_rect_topic" value="$(arg right_rect_topic)" />
|
||||||
|
<param name="disparity_topic" value="$(arg disparity_topic)" />
|
||||||
|
<param name="disparity_norm_topic" value="$(arg disparity_norm_topic)" />
|
||||||
|
<param name="points_topic" value="$(arg points_topic)" />
|
||||||
|
<param name="depth_topic" value="$(arg depth_topic)" />
|
||||||
|
|
||||||
<param name="imu_topic" value="$(arg imu_topic)" />
|
<param name="imu_topic" value="$(arg imu_topic)" />
|
||||||
<param name="temp_topic" value="$(arg temp_topic)" />
|
<param name="temp_topic" value="$(arg temp_topic)" />
|
||||||
|
|
||||||
<param name="base_frame_id" value="$(arg base_frame_id)" />
|
<param name="base_frame_id" value="$(arg base_frame_id)" />
|
||||||
<param name="left_frame_id" value="$(arg left_frame_id)" />
|
<param name="left_frame_id" value="$(arg left_frame_id)" />
|
||||||
<param name="right_frame_id" value="$(arg right_frame_id)" />
|
<param name="right_frame_id" value="$(arg right_frame_id)" />
|
||||||
|
<param name="left_rect_frame_id" value="$(arg left_rect_frame_id)" />
|
||||||
|
<param name="right_rect_frame_id" value="$(arg right_rect_frame_id)" />
|
||||||
|
<param name="disparity_frame_id" value="$(arg disparity_frame_id)" />
|
||||||
|
<param name="disparity_norm_frame_id" value="$(arg disparity_norm_frame_id)" />
|
||||||
|
<param name="points_frame_id" value="$(arg points_frame_id)" />
|
||||||
|
<param name="depth_frame_id" value="$(arg depth_frame_id)" />
|
||||||
|
|
||||||
<param name="imu_frame_id" value="$(arg imu_frame_id)" />
|
<param name="imu_frame_id" value="$(arg imu_frame_id)" />
|
||||||
<param name="temp_frame_id" value="$(arg temp_frame_id)" />
|
<param name="temp_frame_id" value="$(arg temp_frame_id)" />
|
||||||
|
|
||||||
<param name="gravity" value="$(arg gravity)" />
|
<param name="gravity" value="$(arg gravity)" />
|
||||||
|
|
||||||
|
<!-- stream toggles -->
|
||||||
|
|
||||||
|
<param name="enable_left_rect" value="$(arg enable_left_rect)" />
|
||||||
|
<param name="enable_right_rect" value="$(arg enable_right_rect)" />
|
||||||
|
<param name="enable_disparity" value="$(arg enable_disparity)" />
|
||||||
|
<param name="enable_disparity_norm" value="$(arg enable_disparity_norm)" />
|
||||||
|
<param name="enable_points" value="$(arg enable_points)" />
|
||||||
|
<param name="enable_depth" value="$(arg enable_depth)" />
|
||||||
|
|
||||||
<!-- device options -->
|
<!-- device options -->
|
||||||
|
|
||||||
<param name="gain" value="$(arg gain)" />
|
<param name="gain" value="$(arg gain)" />
|
||||||
|
|
|
@ -6,6 +6,9 @@ Panels:
|
||||||
Expanded:
|
Expanded:
|
||||||
- /Global Options1
|
- /Global Options1
|
||||||
- /Status1
|
- /Status1
|
||||||
|
- /Images1
|
||||||
|
- /Images1/Rectified1
|
||||||
|
- /Disparity1
|
||||||
Splitter Ratio: 0.5
|
Splitter Ratio: 0.5
|
||||||
Tree Height: 853
|
Tree Height: 853
|
||||||
- Class: rviz/Selection
|
- Class: rviz/Selection
|
||||||
|
@ -48,6 +51,132 @@ Visualization Manager:
|
||||||
Plane Cell Count: 10
|
Plane Cell Count: 10
|
||||||
Reference Frame: <Fixed Frame>
|
Reference Frame: <Fixed Frame>
|
||||||
Value: true
|
Value: true
|
||||||
|
- Class: rviz/Group
|
||||||
|
Displays:
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/left
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: Left
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/right
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: Right
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
- Class: rviz/Group
|
||||||
|
Displays:
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/left_rect
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: LeftRect
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/right_rect
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: RightRect
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
Enabled: false
|
||||||
|
Name: Rectified
|
||||||
|
Enabled: true
|
||||||
|
Name: Images
|
||||||
|
- Class: rviz/Group
|
||||||
|
Displays:
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/disparity
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: Disparity
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/disparity_norm
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: DisparityNorm
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
Enabled: false
|
||||||
|
Name: Disparity
|
||||||
|
- Class: rviz/Image
|
||||||
|
Enabled: true
|
||||||
|
Image Topic: /mynteye/depth
|
||||||
|
Max Value: 1
|
||||||
|
Median window: 5
|
||||||
|
Min Value: 0
|
||||||
|
Name: Depth
|
||||||
|
Normalize Range: true
|
||||||
|
Queue Size: 2
|
||||||
|
Transport Hint: raw
|
||||||
|
Unreliable: false
|
||||||
|
Value: true
|
||||||
|
- Alpha: 1
|
||||||
|
Autocompute Intensity Bounds: true
|
||||||
|
Autocompute Value Bounds:
|
||||||
|
Max Value: 10
|
||||||
|
Min Value: -10
|
||||||
|
Value: true
|
||||||
|
Axis: Z
|
||||||
|
Channel Name: intensity
|
||||||
|
Class: rviz/PointCloud2
|
||||||
|
Color: 255; 255; 255
|
||||||
|
Color Transformer: ""
|
||||||
|
Decay Time: 0
|
||||||
|
Enabled: true
|
||||||
|
Invert Rainbow: false
|
||||||
|
Max Color: 255; 255; 255
|
||||||
|
Max Intensity: 4096
|
||||||
|
Min Color: 0; 0; 0
|
||||||
|
Min Intensity: 0
|
||||||
|
Name: Points
|
||||||
|
Position Transformer: ""
|
||||||
|
Queue Size: 10
|
||||||
|
Selectable: true
|
||||||
|
Size (Pixels): 3
|
||||||
|
Size (m): 0.00999999978
|
||||||
|
Style: Flat Squares
|
||||||
|
Topic: /mynteye/points
|
||||||
|
Unreliable: false
|
||||||
|
Use Fixed Frame: true
|
||||||
|
Use rainbow: true
|
||||||
|
Value: true
|
||||||
- Alpha: 1
|
- Alpha: 1
|
||||||
Class: rviz_plugin_tutorials/Imu
|
Class: rviz_plugin_tutorials/Imu
|
||||||
Color: 204; 51; 204
|
Color: 204; 51; 204
|
||||||
|
@ -57,30 +186,6 @@ Visualization Manager:
|
||||||
Topic: /mynteye/imu
|
Topic: /mynteye/imu
|
||||||
Unreliable: false
|
Unreliable: false
|
||||||
Value: false
|
Value: false
|
||||||
- Class: rviz/Image
|
|
||||||
Enabled: true
|
|
||||||
Image Topic: /mynteye/left
|
|
||||||
Max Value: 1
|
|
||||||
Median window: 5
|
|
||||||
Min Value: 0
|
|
||||||
Name: Left
|
|
||||||
Normalize Range: true
|
|
||||||
Queue Size: 2
|
|
||||||
Transport Hint: raw
|
|
||||||
Unreliable: false
|
|
||||||
Value: true
|
|
||||||
- Class: rviz/Image
|
|
||||||
Enabled: true
|
|
||||||
Image Topic: /mynteye/right
|
|
||||||
Max Value: 1
|
|
||||||
Median window: 5
|
|
||||||
Min Value: 0
|
|
||||||
Name: Right
|
|
||||||
Normalize Range: true
|
|
||||||
Queue Size: 2
|
|
||||||
Transport Hint: raw
|
|
||||||
Unreliable: false
|
|
||||||
Value: true
|
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Global Options:
|
Global Options:
|
||||||
Background Color: 48; 48; 48
|
Background Color: 48; 48; 48
|
||||||
|
@ -127,6 +232,12 @@ Visualization Manager:
|
||||||
Yaw: 0.785398006
|
Yaw: 0.785398006
|
||||||
Saved: ~
|
Saved: ~
|
||||||
Window Geometry:
|
Window Geometry:
|
||||||
|
Depth:
|
||||||
|
collapsed: false
|
||||||
|
Disparity:
|
||||||
|
collapsed: false
|
||||||
|
DisparityNorm:
|
||||||
|
collapsed: false
|
||||||
Displays:
|
Displays:
|
||||||
collapsed: false
|
collapsed: false
|
||||||
Height: 1056
|
Height: 1056
|
||||||
|
@ -134,9 +245,13 @@ Window Geometry:
|
||||||
Hide Right Dock: false
|
Hide Right Dock: false
|
||||||
Left:
|
Left:
|
||||||
collapsed: false
|
collapsed: false
|
||||||
QMainWindow State: 000000ff00000000fd00000004000000000000016a00000396fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000396000000d700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb00000008004c00650066007403000001bb0000011e0000024f00000191fb0000000a00520069006700680074030000040c0000011e0000025000000190000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073f0000003efc0100000002fb0000000800540069006d006501000000000000073f0000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000004ba0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
LeftRect:
|
||||||
|
collapsed: false
|
||||||
|
QMainWindow State: 000000ff00000000fd00000004000000000000016a00000396fc020000000ffb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000396000000d700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb00000008004c00650066007403000001bd000000860000024e00000190fb0000000a00520069006700680074030000040c000000860000025000000190fb00000010004c006500660074005200650063007402000001bd000002170000024e00000190fb00000012005200690067006800740052006500630074020000040c000002170000024f00000190fb0000000a0044006500700074006803000001bc000002170000024f00000190fb0000001200440069007300700061007200690074007902000001bd000002170000024e0000018ffb0000001a004400690073007000610072006900740079004e006f0072006d020000040c000002170000025100000190000000010000010f00000396fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000002800000396000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073f0000003efc0100000002fb0000000800540069006d006501000000000000073f0000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000004ba0000039600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
||||||
Right:
|
Right:
|
||||||
collapsed: false
|
collapsed: false
|
||||||
|
RightRect:
|
||||||
|
collapsed: false
|
||||||
Selection:
|
Selection:
|
||||||
collapsed: false
|
collapsed: false
|
||||||
Time:
|
Time:
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
#include <cv_bridge/cv_bridge.h>
|
#include <cv_bridge/cv_bridge.h>
|
||||||
#include <image_transport/image_transport.h>
|
#include <image_transport/image_transport.h>
|
||||||
#include <sensor_msgs/Imu.h>
|
#include <sensor_msgs/Imu.h>
|
||||||
|
#include <sensor_msgs/PointCloud2.h>
|
||||||
#include <sensor_msgs/image_encodings.h>
|
#include <sensor_msgs/image_encodings.h>
|
||||||
|
#include <tf/tf.h>
|
||||||
#include <tf2_ros/static_transform_broadcaster.h>
|
#include <tf2_ros/static_transform_broadcaster.h>
|
||||||
|
|
||||||
#include <mynt_eye_ros_wrapper/Temp.h>
|
#include <mynt_eye_ros_wrapper/Temp.h>
|
||||||
|
@ -63,10 +65,21 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
|
|
||||||
// node params
|
// node params
|
||||||
|
|
||||||
std::string left_topic = "left";
|
std::map<Stream, std::string> stream_names{
|
||||||
std::string right_topic = "right";
|
{Stream::LEFT, "left"},
|
||||||
private_nh_.getParam("left_topic", left_topic);
|
{Stream::RIGHT, "right"},
|
||||||
private_nh_.getParam("right_topic", right_topic);
|
{Stream::LEFT_RECTIFIED, "left_rect"},
|
||||||
|
{Stream::RIGHT_RECTIFIED, "right_rect"},
|
||||||
|
{Stream::DISPARITY, "disparity"},
|
||||||
|
{Stream::DISPARITY_NORMALIZED, "disparity_norm"},
|
||||||
|
{Stream::DEPTH, "depth"},
|
||||||
|
{Stream::POINTS, "points"}};
|
||||||
|
|
||||||
|
std::map<Stream, std::string> stream_topics{};
|
||||||
|
for (auto &&it = stream_names.begin(); it != stream_names.end(); ++it) {
|
||||||
|
stream_topics[it->first] = it->second;
|
||||||
|
private_nh_.getParam(it->second + "_topic", stream_topics[it->first]);
|
||||||
|
}
|
||||||
|
|
||||||
std::string imu_topic = "imu";
|
std::string imu_topic = "imu";
|
||||||
std::string temp_topic = "temp";
|
std::string temp_topic = "temp";
|
||||||
|
@ -76,10 +89,10 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
base_frame_id_ = "camera_link";
|
base_frame_id_ = "camera_link";
|
||||||
private_nh_.getParam("base_frame_id", base_frame_id_);
|
private_nh_.getParam("base_frame_id", base_frame_id_);
|
||||||
|
|
||||||
camera_frame_ids_[Stream::LEFT] = "camera_left_frame";
|
for (auto &&it = stream_names.begin(); it != stream_names.end(); ++it) {
|
||||||
camera_frame_ids_[Stream::RIGHT] = "camera_right_frame";
|
frame_ids_[it->first] = "camera_" + it->second + "_frame";
|
||||||
private_nh_.getParam("left_frame_id", camera_frame_ids_[Stream::LEFT]);
|
private_nh_.getParam(it->second + "_frame_id", frame_ids_[it->first]);
|
||||||
private_nh_.getParam("right_frame_id", camera_frame_ids_[Stream::RIGHT]);
|
}
|
||||||
|
|
||||||
imu_frame_id_ = "camera_imu_frame";
|
imu_frame_id_ = "camera_imu_frame";
|
||||||
temp_frame_id_ = "camera_temp_frame";
|
temp_frame_id_ = "camera_temp_frame";
|
||||||
|
@ -91,55 +104,79 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
|
|
||||||
// device options
|
// device options
|
||||||
|
|
||||||
std::map<std::string, Option> option_map = {
|
std::map<Option, std::string> option_names = {
|
||||||
{"gain", Option::GAIN},
|
{Option::GAIN, "gain"},
|
||||||
{"brightness", Option::BRIGHTNESS},
|
{Option::BRIGHTNESS, "brightness"},
|
||||||
{"contrast", Option::CONTRAST},
|
{Option::CONTRAST, "contrast"},
|
||||||
{"frame_rate", Option::FRAME_RATE},
|
{Option::FRAME_RATE, "frame_rate"},
|
||||||
{"imu_frequency", Option::IMU_FREQUENCY},
|
{Option::IMU_FREQUENCY, "imu_frequency"},
|
||||||
{"exposure_mode", Option::EXPOSURE_MODE},
|
{Option::EXPOSURE_MODE, "exposure_mode"},
|
||||||
{"max_gain", Option::MAX_GAIN},
|
{Option::MAX_GAIN, "max_gain"},
|
||||||
{"max_exposure_time", Option::MAX_EXPOSURE_TIME},
|
{Option::MAX_EXPOSURE_TIME, "max_exposure_time"},
|
||||||
{"desired_brightness", Option::DESIRED_BRIGHTNESS},
|
{Option::DESIRED_BRIGHTNESS, "desired_brightness"},
|
||||||
{"ir_control", Option::IR_CONTROL},
|
{Option::IR_CONTROL, "ir_control"},
|
||||||
{"hdr_mode", Option::HDR_MODE},
|
{Option::HDR_MODE, "hdr_mode"},
|
||||||
};
|
};
|
||||||
int value;
|
for (auto &&it = option_names.begin(); it != option_names.end(); ++it) {
|
||||||
for (auto &&it = option_map.begin(); it != option_map.end(); it++) {
|
if (!api_->Supports(it->first))
|
||||||
value = -1;
|
continue;
|
||||||
private_nh_.getParam(it->first, value);
|
int value = -1;
|
||||||
|
private_nh_.getParam(it->second, value);
|
||||||
if (value != -1) {
|
if (value != -1) {
|
||||||
NODELET_INFO_STREAM("Set " << it->first << " to " << value);
|
NODELET_INFO_STREAM("Set " << it->second << " to " << value);
|
||||||
api_->SetOptionValue(it->second, value);
|
api_->SetOptionValue(it->first, value);
|
||||||
}
|
}
|
||||||
NODELET_INFO_STREAM(
|
NODELET_INFO_STREAM(it->first << ": " << api_->GetOptionValue(it->first));
|
||||||
it->second << ": " << api_->GetOptionValue(it->second));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// image publishers
|
// publishers
|
||||||
|
|
||||||
image_transport::ImageTransport it_mynteye(nh_);
|
image_transport::ImageTransport it_mynteye(nh_);
|
||||||
|
|
||||||
camera_encodings_[Stream::LEFT] = enc::MONO8;
|
for (auto &&it = stream_names.begin(); it != stream_names.end(); ++it) {
|
||||||
camera_publishers_[Stream::LEFT] =
|
auto &&topic = stream_topics[it->first];
|
||||||
it_mynteye.advertiseCamera(left_topic, 1);
|
if (it->first == Stream::LEFT || it->first == Stream::RIGHT) { // camera
|
||||||
NODELET_INFO_STREAM("Advertized on topic " << left_topic);
|
camera_publishers_[it->first] = it_mynteye.advertiseCamera(topic, 1);
|
||||||
|
} else if (it->first == Stream::POINTS) { // pointcloud
|
||||||
|
points_publisher_ = nh_.advertise<sensor_msgs::PointCloud2>(topic, 1);
|
||||||
|
} else { // image
|
||||||
|
image_publishers_[it->first] = it_mynteye.advertise(topic, 1);
|
||||||
|
}
|
||||||
|
NODELET_INFO_STREAM("Advertized on topic " << topic);
|
||||||
|
}
|
||||||
|
|
||||||
camera_encodings_[Stream::RIGHT] = enc::MONO8;
|
camera_encodings_ = {{Stream::LEFT, enc::MONO8},
|
||||||
camera_publishers_[Stream::RIGHT] =
|
{Stream::RIGHT, enc::MONO8}};
|
||||||
it_mynteye.advertiseCamera(right_topic, 1);
|
|
||||||
NODELET_INFO_STREAM("Advertized on topic " << right_topic);
|
|
||||||
|
|
||||||
// imu publisher
|
image_encodings_ = {{Stream::LEFT_RECTIFIED, enc::MONO8},
|
||||||
|
{Stream::RIGHT_RECTIFIED, enc::MONO8},
|
||||||
|
{Stream::DISPARITY, enc::MONO8}, // float
|
||||||
|
{Stream::DISPARITY_NORMALIZED, enc::MONO8},
|
||||||
|
{Stream::DEPTH, enc::MONO16}};
|
||||||
|
|
||||||
pub_imu_ = nh_.advertise<sensor_msgs::Imu>(imu_topic, 1);
|
pub_imu_ = nh_.advertise<sensor_msgs::Imu>(imu_topic, 1);
|
||||||
NODELET_INFO_STREAM("Advertized on topic " << imu_topic);
|
NODELET_INFO_STREAM("Advertized on topic " << imu_topic);
|
||||||
|
|
||||||
// temp publisher
|
|
||||||
|
|
||||||
pub_temp_ = nh_.advertise<mynt_eye_ros_wrapper::Temp>(temp_topic, 1);
|
pub_temp_ = nh_.advertise<mynt_eye_ros_wrapper::Temp>(temp_topic, 1);
|
||||||
NODELET_INFO_STREAM("Advertized on topic " << temp_topic);
|
NODELET_INFO_STREAM("Advertized on topic " << temp_topic);
|
||||||
|
|
||||||
|
// stream toggles
|
||||||
|
|
||||||
|
for (auto &&it = stream_names.begin(); it != stream_names.end(); ++it) {
|
||||||
|
if (it->first == Stream::LEFT || it->first == Stream::RIGHT) { // camera
|
||||||
|
continue;
|
||||||
|
} else { // image, pointcloud
|
||||||
|
if (!api_->Supports(it->first))
|
||||||
|
continue;
|
||||||
|
bool enabled = false;
|
||||||
|
private_nh_.getParam("enable_" + it->second, enabled);
|
||||||
|
if (enabled) {
|
||||||
|
api_->EnableStreamData(it->first);
|
||||||
|
NODELET_INFO_STREAM("Enable stream data of " << it->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
publishStaticTransforms();
|
publishStaticTransforms();
|
||||||
publishTopics();
|
publishTopics();
|
||||||
}
|
}
|
||||||
|
@ -151,7 +188,7 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
geometry_msgs::TransformStamped b2l_msg;
|
geometry_msgs::TransformStamped b2l_msg;
|
||||||
b2l_msg.header.stamp = tf_stamp;
|
b2l_msg.header.stamp = tf_stamp;
|
||||||
b2l_msg.header.frame_id = base_frame_id_;
|
b2l_msg.header.frame_id = base_frame_id_;
|
||||||
b2l_msg.child_frame_id = camera_frame_ids_[Stream::LEFT];
|
b2l_msg.child_frame_id = frame_ids_[Stream::LEFT];
|
||||||
b2l_msg.transform.translation.x = 0;
|
b2l_msg.transform.translation.x = 0;
|
||||||
b2l_msg.transform.translation.y = 0;
|
b2l_msg.transform.translation.y = 0;
|
||||||
b2l_msg.transform.translation.z = 0;
|
b2l_msg.transform.translation.z = 0;
|
||||||
|
@ -162,17 +199,24 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
static_tf_broadcaster_.sendTransform(b2l_msg);
|
static_tf_broadcaster_.sendTransform(b2l_msg);
|
||||||
|
|
||||||
// Transform base frame to right frame
|
// Transform base frame to right frame
|
||||||
|
auto &&b2r_ex = api_->GetExtrinsics(Stream::LEFT, Stream::RIGHT);
|
||||||
|
tf::Quaternion b2r_q;
|
||||||
|
tf::Matrix3x3 b2r_r(
|
||||||
|
b2r_ex.rotation[0][0], b2r_ex.rotation[0][1], b2r_ex.rotation[0][2],
|
||||||
|
b2r_ex.rotation[1][0], b2r_ex.rotation[1][1], b2r_ex.rotation[1][2],
|
||||||
|
b2r_ex.rotation[2][0], b2r_ex.rotation[2][1], b2r_ex.rotation[2][2]);
|
||||||
|
b2r_r.getRotation(b2r_q);
|
||||||
geometry_msgs::TransformStamped b2r_msg;
|
geometry_msgs::TransformStamped b2r_msg;
|
||||||
b2r_msg.header.stamp = tf_stamp;
|
b2r_msg.header.stamp = tf_stamp;
|
||||||
b2r_msg.header.frame_id = base_frame_id_;
|
b2r_msg.header.frame_id = base_frame_id_;
|
||||||
b2r_msg.child_frame_id = camera_frame_ids_[Stream::RIGHT];
|
b2r_msg.child_frame_id = frame_ids_[Stream::RIGHT];
|
||||||
b2r_msg.transform.translation.x = 0;
|
b2r_msg.transform.translation.x = b2r_ex.translation[0];
|
||||||
b2r_msg.transform.translation.y = 0;
|
b2r_msg.transform.translation.y = b2r_ex.translation[1];
|
||||||
b2r_msg.transform.translation.z = 0;
|
b2r_msg.transform.translation.z = b2r_ex.translation[2];
|
||||||
b2r_msg.transform.rotation.x = 0;
|
b2r_msg.transform.rotation.x = b2r_q.getX();
|
||||||
b2r_msg.transform.rotation.y = 0;
|
b2r_msg.transform.rotation.y = b2r_q.getY();
|
||||||
b2r_msg.transform.rotation.z = 0;
|
b2r_msg.transform.rotation.z = b2r_q.getZ();
|
||||||
b2r_msg.transform.rotation.w = 1;
|
b2r_msg.transform.rotation.w = b2r_q.getW();
|
||||||
static_tf_broadcaster_.sendTransform(b2r_msg);
|
static_tf_broadcaster_.sendTransform(b2r_msg);
|
||||||
|
|
||||||
// Transform base frame to imu frame
|
// Transform base frame to imu frame
|
||||||
|
@ -233,6 +277,19 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
<< ", exposure_time: " << data.img->exposure_time);
|
<< ", exposure_time: " << data.img->exposure_time);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
std::vector<Stream> image_streams{
|
||||||
|
Stream::LEFT_RECTIFIED, Stream::RIGHT_RECTIFIED, Stream::DISPARITY,
|
||||||
|
Stream::DISPARITY_NORMALIZED, Stream::DEPTH};
|
||||||
|
|
||||||
|
for (auto &&stream : image_streams) {
|
||||||
|
api_->SetStreamCallback(
|
||||||
|
stream, [this, stream](const api::StreamData &data) {
|
||||||
|
static std::size_t count = 0;
|
||||||
|
++count;
|
||||||
|
publishImage(stream, data, count, ros::Time::now());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
api_->SetMotionCallback([this](const api::MotionData &data) {
|
api_->SetMotionCallback([this](const api::MotionData &data) {
|
||||||
static double ros_time_beg = ros::Time::now().toSec();
|
static double ros_time_beg = ros::Time::now().toSec();
|
||||||
static double imu_time_beg = data.imu->timestamp;
|
static double imu_time_beg = data.imu->timestamp;
|
||||||
|
@ -277,15 +334,39 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
std_msgs::Header header;
|
std_msgs::Header header;
|
||||||
header.seq = seq;
|
header.seq = seq;
|
||||||
header.stamp = stamp;
|
header.stamp = stamp;
|
||||||
header.frame_id = camera_frame_ids_[stream];
|
header.frame_id = frame_ids_[stream];
|
||||||
|
cv::Mat img = data.frame;
|
||||||
|
if (stream == Stream::DISPARITY) { // 32FC1 > 8UC1 = MONO8
|
||||||
|
img.convertTo(img, CV_8UC1);
|
||||||
|
}
|
||||||
auto &&msg =
|
auto &&msg =
|
||||||
cv_bridge::CvImage(header, camera_encodings_[stream], data.frame)
|
cv_bridge::CvImage(header, camera_encodings_[stream], img).toImageMsg();
|
||||||
.toImageMsg();
|
|
||||||
auto &&info = getCameraInfo(stream);
|
auto &&info = getCameraInfo(stream);
|
||||||
info->header.stamp = msg->header.stamp;
|
info->header.stamp = msg->header.stamp;
|
||||||
camera_publishers_[stream].publish(msg, info);
|
camera_publishers_[stream].publish(msg, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void publishImage(
|
||||||
|
const Stream &stream, const api::StreamData &data, std::uint32_t seq,
|
||||||
|
ros::Time stamp) {
|
||||||
|
if (image_publishers_[stream].getNumSubscribers() == 0)
|
||||||
|
return;
|
||||||
|
std_msgs::Header header;
|
||||||
|
header.seq = seq;
|
||||||
|
header.stamp = stamp;
|
||||||
|
header.frame_id = frame_ids_[stream];
|
||||||
|
cv::Mat img = data.frame;
|
||||||
|
if (stream == Stream::DISPARITY) { // 32FC1 > 8UC1 = MONO8
|
||||||
|
img.convertTo(img, CV_8UC1);
|
||||||
|
}
|
||||||
|
auto &&msg =
|
||||||
|
cv_bridge::CvImage(header, image_encodings_[stream], img).toImageMsg();
|
||||||
|
image_publishers_[stream].publish(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// void publishPoints(
|
||||||
|
// )
|
||||||
|
|
||||||
void publishImu(
|
void publishImu(
|
||||||
const api::MotionData &data, std::uint32_t seq, ros::Time stamp) {
|
const api::MotionData &data, std::uint32_t seq, ros::Time stamp) {
|
||||||
if (pub_imu_.getNumSubscribers() == 0)
|
if (pub_imu_.getNumSubscribers() == 0)
|
||||||
|
@ -394,7 +475,7 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
|
|
||||||
auto &&in = api_->GetIntrinsics(stream);
|
auto &&in = api_->GetIntrinsics(stream);
|
||||||
|
|
||||||
camera_info->header.frame_id = camera_frame_ids_[stream];
|
camera_info->header.frame_id = frame_ids_[stream];
|
||||||
camera_info->width = in.width;
|
camera_info->width = in.width;
|
||||||
camera_info->height = in.height;
|
camera_info->height = in.height;
|
||||||
|
|
||||||
|
@ -456,10 +537,19 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
ros::NodeHandle nh_;
|
ros::NodeHandle nh_;
|
||||||
ros::NodeHandle private_nh_;
|
ros::NodeHandle private_nh_;
|
||||||
|
|
||||||
|
// camera: LEFT, RIGHT
|
||||||
std::map<Stream, image_transport::CameraPublisher> camera_publishers_;
|
std::map<Stream, image_transport::CameraPublisher> camera_publishers_;
|
||||||
std::map<Stream, sensor_msgs::CameraInfoPtr> camera_info_ptrs_;
|
std::map<Stream, sensor_msgs::CameraInfoPtr> camera_info_ptrs_;
|
||||||
std::map<Stream, std::string> camera_encodings_;
|
std::map<Stream, std::string> camera_encodings_;
|
||||||
|
|
||||||
|
// image: LEFT_RECTIFIED, RIGHT_RECTIFIED, DISPARITY, DISPARITY_NORMALIZED,
|
||||||
|
// DEPTH
|
||||||
|
std::map<Stream, image_transport::Publisher> image_publishers_;
|
||||||
|
std::map<Stream, std::string> image_encodings_;
|
||||||
|
|
||||||
|
// pointcloud: POINTS
|
||||||
|
ros::Publisher points_publisher_;
|
||||||
|
|
||||||
ros::Publisher pub_imu_;
|
ros::Publisher pub_imu_;
|
||||||
ros::Publisher pub_temp_;
|
ros::Publisher pub_temp_;
|
||||||
|
|
||||||
|
@ -470,7 +560,7 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
|
||||||
std::string base_frame_id_;
|
std::string base_frame_id_;
|
||||||
std::string imu_frame_id_;
|
std::string imu_frame_id_;
|
||||||
std::string temp_frame_id_;
|
std::string temp_frame_id_;
|
||||||
std::map<Stream, std::string> camera_frame_ids_;
|
std::map<Stream, std::string> frame_ids_;
|
||||||
|
|
||||||
double gravity_;
|
double gravity_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user