Skip to content

Commit e45fe8d

Browse files
authored
Feature/cleanup nodelets (#55)
* wip cleaned constructor, nodelet class * updated Readme, changed names of launch files for ease of access and name of manager to standard name manager, removed nodelet exmaples and utils * added example subscriber nodelet as requested in pr #55
1 parent 8ee3779 commit e45fe8d

23 files changed

+160
-734
lines changed

CMakeLists.txt

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,27 +112,20 @@ add_library (acquilib SHARED
112112
src/capture.cpp
113113
src/camera.cpp
114114
)
115-
116115
add_dependencies(acquilib ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
117116
target_link_libraries(acquilib ${LIBS} ${catkin_LIBRARIES})
118117

119-
add_library(capture_nodelet src/capture_nodelet.cpp src/subscriber_nodelet.cpp)
120-
target_link_libraries(capture_nodelet acquilib ${catkin_LIBRARIES})
121-
122118
add_executable (acquisition_node src/acquisition_node.cpp)
123119
add_dependencies(acquisition_node acquilib ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
124120
target_link_libraries (acquisition_node acquilib ${LIBS} ${catkin_LIBRARIES})
125121

122+
## subscriber_example for subscribing as nodelet
123+
add_library (subscriber_example examples/subscriber_nodelet.cpp)
124+
add_dependencies(subscriber_example ${catkin_EXPORTED_TARGETS})
125+
target_link_libraries(subscriber_example ${catkin_LIBRARIES})
126126

127-
add_executable (acquisition_nodelet src/acquisition_nodelet.cpp)
128-
add_dependencies(acquisition_nodelet acquilib capture_nodelet ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
129-
target_link_libraries (acquisition_nodelet acquilib capture_nodelet ${LIBS} ${catkin_LIBRARIES})
130-
131-
add_executable (nodelet_test src/nodelet_test.cpp)
132-
add_dependencies(nodelet_test ${catkin_EXPORTED_TARGETS})
133-
target_link_libraries (nodelet_test capture_nodelet ${LIBS} ${catkin_LIBRARIES})
134127

135-
install(TARGETS acquilib acquisition_node capture_nodelet acquisition_nodelet nodelet_test
128+
install(TARGETS acquilib acquisition_node subscriber_example
136129
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
137130
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
138131
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
@@ -142,3 +135,7 @@ install(DIRECTORY include
142135
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
143136
FILES_MATCHING PATTERN "*.h"
144137
)
138+
139+
install(FILES nodelet_plugins.xml
140+
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
141+
)

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ Modify the `params/test_params.yaml` file replacing the cam-ids and master cam s
4747
```bash
4848
# To launch nodelet verison of driver, use #
4949

50-
roslaunch spinnaker_camera_driver acquisition_nodelet.launch
50+
roslaunch spinnaker_camera_driver acquisition.launch
5151

5252
# To launch node version of driver, use
5353

54-
roslaunch spinnaker_camera_driver acquisition.launch
54+
roslaunch spinnaker_camera_driver node_acquisition.launch
5555
# Test that the images are being published by running
5656
rqt_image_view
5757
```
@@ -130,11 +130,11 @@ This is the names that would be given to the cameras for filenames and rostopics
130130
When exposure_time is set to 0(zero), the ExposureAuto is set to 'Continuous', enabling auto exposure.
131131

132132
### nodelet details
133-
* ~nodelet_manager_name (string, default: vision_nodelet_manager)
133+
* ~manager (string, default: vision_nodelet_manager)
134134
Specify the name of the nodelet_manager under which nodelet to be launched.
135-
* ~start_nodelet_manager (bool, default: false)
136-
If set True, nodelet_manager of name $(arg nodelet_manager_name) will be launched.
137-
If set False(default), the acquisition/capture_nodelet waits for the nodelet_manager name $(arg nodelet_manager_name).
135+
* ~external_manager (bool, default: false)
136+
If set False(default), nodelet_manager of name $(arg manager) will be launched.
137+
If set True, the acquisition/Capture waits for the nodelet_manager name $(arg manager).
138138

139139
### Camera info message details
140140
* ~image_width (int)

examples/subscriber_nodelet.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//
2+
// Created by pushyami on 1/15/19.
3+
//
4+
//cpp
5+
#include <iostream>
6+
// ROS
7+
#include <ros/ros.h>
8+
#include <image_transport/image_transport.h>
9+
//#include <cv_bridge/cv_bridge.h>
10+
// msgs
11+
#include "sensor_msgs/Image.h"
12+
//#include "sensor_msgs/CameraInfo.h"
13+
14+
// nodelets
15+
#include <nodelet/nodelet.h>
16+
#include <pluginlib/class_list_macros.h>
17+
18+
19+
20+
namespace subscriber_nodelet_ns
21+
{
22+
class subscriber_nodelet: public nodelet::Nodelet
23+
{
24+
//This is a test nodelet for measuring nodelet performance
25+
public:
26+
subscriber_nodelet(){}
27+
~subscriber_nodelet()
28+
{
29+
it_.reset();
30+
}
31+
32+
std::shared_ptr<image_transport::ImageTransport> it_;
33+
image_transport::Subscriber image_sub_;
34+
35+
virtual void onInit()
36+
{
37+
NODELET_INFO("Initializing Subscriber nodelet");
38+
ros::NodeHandle& node = getNodeHandle();
39+
ros::NodeHandle& private_nh = getPrivateNodeHandle();
40+
41+
it_.reset(new image_transport::ImageTransport(node));
42+
image_sub_ = it_->subscribe("/camera_array/cam0/image_raw",1, &subscriber_nodelet::imgCallback, this);
43+
NODELET_INFO("onInit for Subscriber nodelet Initialized");
44+
}
45+
46+
void imgCallback(const sensor_msgs::Image::ConstPtr& msg)
47+
{
48+
// dont modify the input msg in any way
49+
sensor_msgs::Image tmp_img = *msg;
50+
NODELET_INFO_STREAM("diff time is "<< ros::Time::now().toSec() - tmp_img.header.stamp.toSec());
51+
// copy input img to cv::mat and do any cv stuff
52+
// dont do time intense stuff in callbacks
53+
}
54+
};
55+
}
56+
57+
PLUGINLIB_EXPORT_CLASS(subscriber_nodelet_ns::subscriber_nodelet, nodelet::Nodelet)

include/spinnaker_sdk_camera_driver/capture.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818

1919
#include <sstream>
2020
#include <image_transport/image_transport.h>
21+
// nodelets
22+
#include <nodelet/nodelet.h>
23+
#include <nodelet/loader.h>
24+
#include "pluginlib/class_list_macros.h"
2125

2226
using namespace Spinnaker;
2327
using namespace Spinnaker::GenApi;
@@ -27,16 +31,18 @@ using namespace std;
2731

2832
namespace acquisition {
2933

30-
class Capture {
34+
class Capture : public nodelet::Nodelet {
3135

3236
public:
3337

3438
~Capture();
3539
Capture();
36-
Capture( ros::NodeHandle node,ros::NodeHandle private_nh);
40+
virtual void onInit();
41+
42+
std::shared_ptr<boost::thread> pubThread_;
3743

3844
void load_cameras();
39-
45+
void init_variables_register_to_ros();
4046
void init_array();
4147
void init_cameras(bool);
4248
void start_acquisition();
@@ -146,8 +152,8 @@ namespace acquisition {
146152
// ros variables
147153
ros::NodeHandle nh_;
148154
ros::NodeHandle nh_pvt_;
149-
//image_transport::ImageTransport it_;
150-
image_transport::ImageTransport it_;
155+
std::shared_ptr<image_transport::ImageTransport> it_;
156+
151157
dynamic_reconfigure::Server<spinnaker_sdk_camera_driver::spinnaker_camConfig>* dynamicReCfgServer_;
152158

153159
ros::Publisher acquisition_pub;

include/spinnaker_sdk_camera_driver/capture_nodelet.h

Lines changed: 0 additions & 32 deletions
This file was deleted.

include/spinnaker_sdk_camera_driver/subscriber_nodelet.h

Lines changed: 0 additions & 26 deletions
This file was deleted.

include/spinnaker_sdk_camera_driver/utils.h

Lines changed: 0 additions & 25 deletions
This file was deleted.

launch/acquisition.launch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,20 @@
2323

2424

2525
<!-- nodelet manager params-->
26-
<arg name="nodelet_manager_name" default="vision_nodelet_manager" doc="name of the nodelet manager, comes handy when launching multiple nodelets from different launch files" />
27-
<arg name="start_nodelet_manager" default="true" doc="If set to True(default), creates a nodelet manager with $(arg nodelet_manager_name).
28-
If False, the acquisition/capture_nodelet waits for the nodelet_manager name $(arg nodelet_manager_name)" />
26+
<arg name="manager" default="vision_nodelet_manager" doc="name of the nodelet manager, comes handy when launching multiple nodelets from different launch files" />
27+
<arg name="external_manager" default="false" doc="If set to False(default), creates a nodelet manager with $(arg manager).
28+
If True, the acquisition/Capture waits for the nodelet_manager name $(arg manager)" />
2929

3030
<!-- Capture nodelet params-->
3131
<arg name="tf_prefix" default="" doc="will prefix (arg tf_prefix)/ to existing frame_id in Image msg and camerainfo msg" />
3232
<arg name="config_file" default="$(find spinnaker_sdk_camera_driver)/params/test_params.yaml" doc="File specifying the parameters of the camera_array"/>
3333

3434
<!-- start the nodelet manager if $(arg start_nodelet_manager) is true-->
35-
<node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager_name)" args="manager" output="screen" if="$(arg start_nodelet_manager)" />
35+
<node pkg="nodelet" type="nodelet" name="$(arg manager)" args="manager" output="screen" unless="$(arg external_manager)" />
3636

3737
<!-- load the acquisition nodelet -->
3838
<node pkg="nodelet" type="nodelet" name="acquisition_node"
39-
args="load acquisition/capture_nodelet $(arg nodelet_manager_name)" >
39+
args="load acquisition/Capture $(arg manager)" >
4040
<!-- load the acquisition node parameters file. Note any parameters provided in this file will
4141
override what is in the yaml file. Thus use it to set parameters camer_array configuration params -->
4242
<rosparam command="load" file="$(arg config_file)" />
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<launch>
22
<!-- args namespacing -->
3-
<arg name="robot_ns" default="$(env ROBOT_NAME)" />
4-
<arg name="vision_nm" default="vision_nodelet_manager_uas" doc="name of the nodelet manager" />
3+
<arg name="robot_ns" default="$(optenv ROBOT_NAME uas2)" />
4+
<arg name="vision_nm" default="vision_nodelet_manager_ext" doc="name of the nodelet manager" />
55
<arg name="camera_tf_prefix" default="" />
66

77

@@ -10,14 +10,18 @@
1010
<node pkg="nodelet" type="nodelet" name="$(arg vision_nm)" args="manager" output="screen"/>
1111
<!-- launch camera nodelet -->
1212
<include file="$(find spinnaker_sdk_camera_driver)/launch/acquisition.launch" >
13-
<arg name="nodelet_manager_name" value="$(arg vision_nm)" />
14-
<arg name="start_nodelet_manager" value="false" />
13+
<arg name="manager" value="$(arg vision_nm)" />
14+
<arg name="external_manager" value="true" />
1515
<arg name="tf_prefix" value="$(arg camera_tf_prefix)" />
1616
</include>
1717

1818
<!-- launch apriltag_ros nodelet -->
1919
<!-- include file="$(find apriltag_ros)/launch/continuous_detection_nodelet.launch" >
2020
<arg name="nodelet_manager_name" value="$(arg vision_nm)" />
2121
</include -->
22-
</group>
22+
23+
<!-- launch example_subscriber_nodelet -->
24+
<node pkg="nodelet" type="nodelet" name="subscriber_nodelet"
25+
args="load subscriber_nodelet_ns/subscriber_nodelet $(arg vision_nm)" />
26+
</group >
2327
</launch>

0 commit comments

Comments
 (0)