Skip to content

Commit 84b410b

Browse files
authored
[ROS2] port package to ament_cmake / ROS 2 API (#69)
* switch from catkin to ament_cmake * update code to use ROS 2 API * use ament_cmake_ros * remove Travis for now * set CMAKE_CXX_STANDARD * use API closer to ROS 1 * fix type format match bug in ros2 (#79) * add node to Executor (#80) * using shared_ptr to manage the cleanup_timer (#81) * fix argument mismatch
1 parent 97ac8e4 commit 84b410b

21 files changed

+185
-184
lines changed

.travis.yml

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

CMakeLists.txt

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
cmake_minimum_required(VERSION 2.8.3)
1+
cmake_minimum_required(VERSION 3.5)
22
project(web_video_server)
33

4-
## Find catkin macros and libraries
5-
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
6-
## is used, also find other catkin packages
7-
find_package(catkin REQUIRED COMPONENTS roscpp roslib cv_bridge image_transport async_web_server_cpp sensor_msgs)
4+
find_package(ament_cmake_ros REQUIRED)
5+
6+
find_package(async_web_server_cpp REQUIRED)
7+
find_package(cv_bridge REQUIRED)
8+
find_package(image_transport REQUIRED)
9+
find_package(rclcpp REQUIRED)
10+
find_package(sensor_msgs REQUIRED)
11+
812
find_package(OpenCV REQUIRED)
913
find_package(Boost REQUIRED COMPONENTS thread)
1014

@@ -14,22 +18,20 @@ pkg_check_modules(avformat libavformat REQUIRED)
1418
pkg_check_modules(avutil libavutil REQUIRED)
1519
pkg_check_modules(swscale libswscale REQUIRED)
1620

21+
if(NOT CMAKE_CXX_STANDARD)
22+
set(CMAKE_CXX_STANDARD 14)
23+
endif()
24+
1725
###################################################
1826
## Declare things to be passed to other projects ##
1927
###################################################
2028

21-
## LIBRARIES: libraries you create in this project that dependent projects also need
22-
## CATKIN_DEPENDS: catkin_packages dependent projects also need
23-
## DEPENDS: system dependencies of this project that dependent projects also need
24-
catkin_package()
25-
2629
###########
2730
## Build ##
2831
###########
2932

3033
## Specify additional locations of header files
3134
include_directories(include
32-
${catkin_INCLUDE_DIRS}
3335
${Boost_INCLUDE_DIRS}
3436
${avcodec_INCLUDE_DIRS}
3537
${avformat_INCLUDE_DIRS}
@@ -49,9 +51,11 @@ add_executable(${PROJECT_NAME}
4951
src/ros_compressed_streamer.cpp
5052
src/jpeg_streamers.cpp)
5153

54+
ament_target_dependencies(${PROJECT_NAME}
55+
async_web_server_cpp cv_bridge image_transport rclcpp sensor_msgs)
56+
5257
## Specify libraries to link a library or executable target against
5358
target_link_libraries(${PROJECT_NAME}
54-
${catkin_LIBRARIES}
5559
${Boost_LIBRARIES}
5660
${OpenCV_LIBS}
5761
${avcodec_LIBRARIES}
@@ -60,18 +64,18 @@ target_link_libraries(${PROJECT_NAME}
6064
${swscale_LIBRARIES}
6165
)
6266

67+
ament_package()
68+
6369
#############
6470
## Install ##
6571
#############
6672

6773
## Mark executables and/or libraries for installation
6874
install(TARGETS ${PROJECT_NAME}
69-
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
70-
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
71-
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
75+
DESTINATION lib/${PROJECT_NAME}
7276
)
7377

74-
install(DIRECTORY include/
75-
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
78+
install(DIRECTORY include/${PROJECT_NAME}/
79+
DESTINATION include/${PROJECT_NAME}
7680
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
7781
)

include/web_video_server/h264_streamer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class H264Streamer : public LibavStreamer
1313
{
1414
public:
1515
H264Streamer(const async_web_server_cpp::HttpRequest& request, async_web_server_cpp::HttpConnectionPtr connection,
16-
ros::NodeHandle& nh);
16+
rclcpp::Node::SharedPtr nh);
1717
~H264Streamer();
1818
protected:
1919
virtual void initializeEncoder();
@@ -26,7 +26,7 @@ class H264StreamerType : public LibavStreamerType
2626
H264StreamerType();
2727
virtual boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest& request,
2828
async_web_server_cpp::HttpConnectionPtr connection,
29-
ros::NodeHandle& nh);
29+
rclcpp::Node::SharedPtr nh);
3030
};
3131

3232
}

include/web_video_server/image_streamer.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#ifndef IMAGE_STREAMER_H_
22
#define IMAGE_STREAMER_H_
33

4-
#include <ros/ros.h>
4+
#include <rclcpp/rclcpp.hpp>
55
#include <image_transport/image_transport.h>
6+
#include <image_transport/transport_hints.h>
67
#include <opencv2/opencv.hpp>
78
#include "async_web_server_cpp/http_server.hpp"
89
#include "async_web_server_cpp/http_request.hpp"
@@ -15,7 +16,7 @@ class ImageStreamer
1516
public:
1617
ImageStreamer(const async_web_server_cpp::HttpRequest &request,
1718
async_web_server_cpp::HttpConnectionPtr connection,
18-
ros::NodeHandle& nh);
19+
rclcpp::Node::SharedPtr nh);
1920

2021
virtual void start() = 0;
2122

@@ -33,7 +34,7 @@ class ImageStreamer
3334
protected:
3435
async_web_server_cpp::HttpConnectionPtr connection_;
3536
async_web_server_cpp::HttpRequest request_;
36-
ros::NodeHandle nh_;
37+
rclcpp::Node::SharedPtr nh_;
3738
bool inactive_;
3839
image_transport::Subscriber image_sub_;
3940
std::string topic_;
@@ -44,12 +45,12 @@ class ImageTransportImageStreamer : public ImageStreamer
4445
{
4546
public:
4647
ImageTransportImageStreamer(const async_web_server_cpp::HttpRequest &request, async_web_server_cpp::HttpConnectionPtr connection,
47-
ros::NodeHandle& nh);
48+
rclcpp::Node::SharedPtr nh);
4849

4950
virtual void start();
5051

5152
protected:
52-
virtual void sendImage(const cv::Mat &, const ros::Time &time) = 0;
53+
virtual void sendImage(const cv::Mat &, const rclcpp::Time &time) = 0;
5354

5455
virtual void initialize(const cv::Mat &);
5556

@@ -62,15 +63,15 @@ class ImageTransportImageStreamer : public ImageStreamer
6263
image_transport::ImageTransport it_;
6364
bool initialized_;
6465

65-
void imageCallback(const sensor_msgs::ImageConstPtr &msg);
66+
void imageCallback(const sensor_msgs::msg::Image::ConstSharedPtr &msg);
6667
};
6768

6869
class ImageStreamerType
6970
{
7071
public:
7172
virtual boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest &request,
7273
async_web_server_cpp::HttpConnectionPtr connection,
73-
ros::NodeHandle& nh) = 0;
74+
rclcpp::Node::SharedPtr nh) = 0;
7475

7576
virtual std::string create_viewer(const async_web_server_cpp::HttpRequest &request) = 0;
7677
};

include/web_video_server/jpeg_streamers.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ class MjpegStreamer : public ImageTransportImageStreamer
1414
{
1515
public:
1616
MjpegStreamer(const async_web_server_cpp::HttpRequest &request, async_web_server_cpp::HttpConnectionPtr connection,
17-
ros::NodeHandle& nh);
17+
rclcpp::Node::SharedPtr nh);
1818

1919
protected:
20-
virtual void sendImage(const cv::Mat &, const ros::Time &time);
20+
virtual void sendImage(const cv::Mat &, const rclcpp::Time &time);
2121

2222
private:
2323
MultipartStream stream_;
@@ -29,18 +29,18 @@ class MjpegStreamerType : public ImageStreamerType
2929
public:
3030
boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest &request,
3131
async_web_server_cpp::HttpConnectionPtr connection,
32-
ros::NodeHandle& nh);
32+
rclcpp::Node::SharedPtr nh);
3333
std::string create_viewer(const async_web_server_cpp::HttpRequest &request);
3434
};
3535

3636
class JpegSnapshotStreamer : public ImageTransportImageStreamer
3737
{
3838
public:
3939
JpegSnapshotStreamer(const async_web_server_cpp::HttpRequest &request,
40-
async_web_server_cpp::HttpConnectionPtr connection, ros::NodeHandle& nh);
40+
async_web_server_cpp::HttpConnectionPtr connection, rclcpp::Node::SharedPtr nh);
4141

4242
protected:
43-
virtual void sendImage(const cv::Mat &, const ros::Time &time);
43+
virtual void sendImage(const cv::Mat &, const rclcpp::Time &time);
4444

4545
private:
4646
int quality_;

include/web_video_server/libav_streamer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ class LibavStreamer : public ImageTransportImageStreamer
2525
{
2626
public:
2727
LibavStreamer(const async_web_server_cpp::HttpRequest &request, async_web_server_cpp::HttpConnectionPtr connection,
28-
ros::NodeHandle& nh, const std::string &format_name, const std::string &codec_name,
28+
rclcpp::Node::SharedPtr nh, const std::string &format_name, const std::string &codec_name,
2929
const std::string &content_type);
3030

3131
~LibavStreamer();
3232

3333
protected:
3434
virtual void initializeEncoder();
35-
virtual void sendImage(const cv::Mat&, const ros::Time& time);
35+
virtual void sendImage(const cv::Mat&, const rclcpp::Time& time);
3636
virtual void initialize(const cv::Mat&);
3737
AVOutputFormat* output_format_;
3838
AVFormatContext* format_context_;
@@ -45,7 +45,7 @@ class LibavStreamer : public ImageTransportImageStreamer
4545
private:
4646
AVFrame* frame_;
4747
struct SwsContext* sws_context_;
48-
ros::Time first_image_timestamp_;
48+
rclcpp::Time first_image_timestamp_;
4949
boost::mutex encode_mutex_;
5050

5151
std::string format_name_;
@@ -66,7 +66,7 @@ class LibavStreamerType : public ImageStreamerType
6666

6767
boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest &request,
6868
async_web_server_cpp::HttpConnectionPtr connection,
69-
ros::NodeHandle& nh);
69+
rclcpp::Node::SharedPtr nh);
7070

7171
std::string create_viewer(const async_web_server_cpp::HttpRequest &request);
7272

include/web_video_server/multipart_stream.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef MULTIPART_STREAM_H_
22
#define MULTIPART_STREAM_H_
33

4-
#include <ros/ros.h>
4+
#include <rclcpp/rclcpp.hpp>
55
#include <async_web_server_cpp/http_connection.hpp>
66

77
#include <queue>
@@ -16,10 +16,10 @@ class MultipartStream {
1616
std::size_t max_queue_size=1);
1717

1818
void sendInitialHeader();
19-
void sendPartHeader(const ros::Time &time, const std::string& type, size_t payload_size);
19+
void sendPartHeader(const rclcpp::Time &time, const std::string& type, size_t payload_size);
2020
void sendPartFooter();
21-
void sendPartAndClear(const ros::Time &time, const std::string& type, std::vector<unsigned char> &data);
22-
void sendPart(const ros::Time &time, const std::string& type, const boost::asio::const_buffer &buffer,
21+
void sendPartAndClear(const rclcpp::Time &time, const std::string& type, std::vector<unsigned char> &data);
22+
void sendPart(const rclcpp::Time &time, const std::string& type, const boost::asio::const_buffer &buffer,
2323
async_web_server_cpp::HttpConnection::ResourcePtr resource);
2424

2525
private:
@@ -29,7 +29,7 @@ class MultipartStream {
2929
const std::size_t max_queue_size_;
3030
async_web_server_cpp::HttpConnectionPtr connection_;
3131
std::string boundry_;
32-
std::queue<boost::weak_ptr<const void> > pending_footers_;
32+
std::queue<std::weak_ptr<const void> > pending_footers_;
3333
};
3434

3535
}

include/web_video_server/ros_compressed_streamer.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef ROS_COMPRESSED_STREAMERS_H_
22
#define ROS_COMPRESSED_STREAMERS_H_
33

4-
#include <sensor_msgs/CompressedImage.h>
4+
#include <sensor_msgs/msg/compressed_image.hpp>
55
#include "web_video_server/image_streamer.h"
66
#include "async_web_server_cpp/http_request.hpp"
77
#include "async_web_server_cpp/http_connection.hpp"
@@ -14,22 +14,22 @@ class RosCompressedStreamer : public ImageStreamer
1414
{
1515
public:
1616
RosCompressedStreamer(const async_web_server_cpp::HttpRequest &request, async_web_server_cpp::HttpConnectionPtr connection,
17-
ros::NodeHandle& nh);
17+
rclcpp::Node::SharedPtr nh);
1818
virtual void start();
1919

2020
private:
21-
void imageCallback(const sensor_msgs::CompressedImageConstPtr &msg);
21+
void imageCallback(const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg);
2222

2323
MultipartStream stream_;
24-
ros::Subscriber image_sub_;
24+
rclcpp::Subscription<sensor_msgs::msg::CompressedImage>::SharedPtr image_sub_;
2525
};
2626

2727
class RosCompressedStreamerType : public ImageStreamerType
2828
{
2929
public:
3030
boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest &request,
3131
async_web_server_cpp::HttpConnectionPtr connection,
32-
ros::NodeHandle& nh);
32+
rclcpp::Node::SharedPtr nh);
3333
std::string create_viewer(const async_web_server_cpp::HttpRequest &request);
3434
};
3535

include/web_video_server/vp8_streamer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class Vp8Streamer : public LibavStreamer
4949
{
5050
public:
5151
Vp8Streamer(const async_web_server_cpp::HttpRequest& request, async_web_server_cpp::HttpConnectionPtr connection,
52-
ros::NodeHandle& nh);
52+
rclcpp::Node::SharedPtr nh);
5353
~Vp8Streamer();
5454
protected:
5555
virtual void initializeEncoder();
@@ -63,7 +63,7 @@ class Vp8StreamerType : public LibavStreamerType
6363
Vp8StreamerType();
6464
virtual boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest& request,
6565
async_web_server_cpp::HttpConnectionPtr connection,
66-
ros::NodeHandle& nh);
66+
rclcpp::Node::SharedPtr nh);
6767
};
6868

6969
}

include/web_video_server/vp9_streamer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Vp9Streamer : public LibavStreamer
1313
{
1414
public:
1515
Vp9Streamer(const async_web_server_cpp::HttpRequest& request, async_web_server_cpp::HttpConnectionPtr connection,
16-
ros::NodeHandle& nh);
16+
rclcpp::Node::SharedPtr nh);
1717
~Vp9Streamer();
1818
protected:
1919
virtual void initializeEncoder();
@@ -25,7 +25,7 @@ class Vp9StreamerType : public LibavStreamerType
2525
Vp9StreamerType();
2626
virtual boost::shared_ptr<ImageStreamer> create_streamer(const async_web_server_cpp::HttpRequest& request,
2727
async_web_server_cpp::HttpConnectionPtr connection,
28-
ros::NodeHandle& nh);
28+
rclcpp::Node::SharedPtr nh);
2929
};
3030

3131
}

0 commit comments

Comments
 (0)