Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port usb_cam to ROS2 #106

Closed
wants to merge 20 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
84 changes: 46 additions & 38 deletions CMakeLists.txt
@@ -1,72 +1,80 @@
cmake_minimum_required(VERSION 2.8.3)
cmake_minimum_required(VERSION 3.5)
project(usb_cam)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS image_transport roscpp std_msgs std_srvs sensor_msgs camera_info_manager)
# Default ro C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rmw_implementation REQUIRED)
find_package(std_msgs REQUIRED)
find_package(std_srvs REQUIRED)
find_package(sensor_msgs REQUIRED)

## pkg-config libraries
find_package(PkgConfig REQUIRED)
pkg_check_modules(avcodec libavcodec REQUIRED)
pkg_check_modules(swscale libswscale REQUIRED)

###################################################
## Declare things to be passed to other projects ##
###################################################

## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
)

###########
## Build ##
###########

include_directories(include
${catkin_INCLUDE_DIRS}
${avcodec_INCLUDE_DIRS}
${swscale_INCLUDE_DIRS}
)
include_directories(include)

## Build the USB camera library
add_library(${PROJECT_NAME} src/usb_cam.cpp)
target_link_libraries(${PROJECT_NAME}
${avcodec_LIBRARIES}
${swscale_LIBRARIES}
${catkin_LIBRARIES}
)
ament_target_dependencies(${PROJECT_NAME}
"rclcpp"
"rmw_implementation"
"std_msgs"
"std_srvs"
"sensor_msgs"
"avcodec"
"swscale")
list(APPEND ${PROJECT_NAME}_LIBRARIES "${PROJECT_NAME}")

## Declare a cpp executable
add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp)
target_link_libraries(${PROJECT_NAME}_node
ament_target_dependencies(${PROJECT_NAME}_node
${PROJECT_NAME}
${avcodec_LIBRARIES}
${swscale_LIBRARIES}
${catkin_LIBRARIES}
)

"rclcpp"
"rmw_implementation"
"std_msgs"
"std_srvs"
"sensor_msgs"
"avcodec"
"swscale")
target_link_libraries(${PROJECT_NAME}_node
avutil)

#############
## Install ##
#############

## Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME}_node ${PROJECT_NAME}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
install(TARGETS
${PROJECT_NAME}_node
RUNTIME DESTINATION lib/${PROJECT_NAME}
)

## Copy launch files
install(DIRECTORY launch/
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
FILES_MATCHING PATTERN "*.launch"
DESTINATION share/${PROJECT_NAME}
FILES_MATCHING PATTERN "*.launch.py" PATTERN "*.yaml"
)

install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
DESTINATION include
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)

ament_package()
4 changes: 2 additions & 2 deletions include/usb_cam/usb_cam.h
Expand Up @@ -55,7 +55,7 @@ extern "C"
#include <string>
#include <sstream>

#include <sensor_msgs/Image.h>
#include <sensor_msgs/msg/image.hpp>

namespace usb_cam {

Expand All @@ -81,7 +81,7 @@ class UsbCam {
void shutdown(void);

// grabs a new image from the camera
void grab_image(sensor_msgs::Image* image);
void grab_image(sensor_msgs::msg::Image* image);

// enables/disable auto focus
void set_auto_focus(int value);
Expand Down
8 changes: 8 additions & 0 deletions launch/test_params.yaml
@@ -0,0 +1,8 @@
usb_cam:
ros__parameters:
video_device: "/dev/video0"
image_width: 640
image_height: 480
pixel_format: "yuyv"
camera_frame_id: "usb_cam"
io_method: "mmap"
14 changes: 0 additions & 14 deletions launch/usb_cam-test.launch

This file was deleted.

14 changes: 14 additions & 0 deletions launch/usb_cam-test.launch.py
@@ -0,0 +1,14 @@
import os

import launch
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.substitutions import ThisLaunchFileDir

def generate_launch_description():
return LaunchDescription([
Node(package='usb_cam', node_executable='usb_cam_node',
output='screen', arguments=[['__params:=', ThisLaunchFileDir(), '/test_params.yaml']]),
Node(package='image_tools', node_executable='showimage',
output='screen', arguments=['-t', '/image_raw', '-r', '0'])
])