覚え書きブログ

ROSの覚え書き(usb_camノードのインストール)

ROSのusb_camノードをインストールしてみた。

> cd ~/catkin_work/src
> git clone https://github.com/bosch-ros-pkg/usb_cam.git
> cd ..
> catkin_make
...
Linking CXX executable /home/hachiya/catkin_ws/devel/lib/usb_cam/usb_cam_node
/home/hachiya/catkin_ws/devel/lib/libusb_cam.so: `av_frame_alloc' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
make[2]: *** [/home/hachiya/catkin_ws/devel/lib/usb_cam/usb_cam_node] エラー 1
make[1]: *** [usb_cam/CMakeFiles/usb_cam_node.dir/all] エラー 2
make: *** [all] エラー 2

リンクのエラーが出たので、以下を参考にusb_cam/CMakeLists.txtに以下を追加して、リンクしているavcodecのバージョンを確認する。
http://answers.ros.org/question/198018/pkg_check_modules-doesnt-get-the-right-libavcodec/

> vi src/usb_cam/CMakeLists.txt
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_LIBRARIES})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_LIBRARY_DIRS})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_LDFLAGS})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_INCLUDE_DIRS})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_CFLAGS})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_VERSION})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_PREFIX})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_INCLUDEDIR})
MESSAGE(STATUS "@@@@@@@@@@@@@@@@@ " ${avcodec_LIBDIR})
> catkin_make
...
-- ==> add_subdirectory(usb_cam)
-- @@@@@@@@@@@@@@@@@ avcodec
-- @@@@@@@@@@@@@@@@@ /usr/local/lib
-- @@@@@@@@@@@@@@@@@ -L/usr/local/lib-lavcodec
-- @@@@@@@@@@@@@@@@@ /usr/local/include
-- @@@@@@@@@@@@@@@@@ -I/usr/local/include
-- @@@@@@@@@@@@@@@@@ 56.41.100
-- @@@@@@@@@@@@@@@@@ /usr/local
-- @@@@@@@@@@@@@@@@@ /usr/local/include
-- @@@@@@@@@@@@@@@@@ /usr/local/lib
...

バージョン56.41.100で問題ないと思うが、とりあえず、バージョン57にリンクするように以下をusb_cam/CMakeLists.txtに追加する。
set(avcodec_LIBRARIES /usr/local/lib/libavcodec.so.57)を追加する。

> vi src/usb_cam/CMakeLists.txt
...
find_package(PkgConfig REQUIRED)
pkg_check_modules(avcodec libavcodec REQUIRED)
pkg_check_modules(swscale libswscale REQUIRED) 

set(avcodec_LIBRARIES /usr/local/lib/libavcodec.so.57)
...
> catkin_make
...
[ 80%] Built target usb_cam
Linking CXX executable /home/hachiya/catkin_ws/devel/lib/usb_cam/usb_cam_node
[100%] Built target usb_cam_node

これで、エラーがでずにmakeが完了した。

次に、roscoreを立ち上げてから、rosrunでusb_cam_nodeを実行してみる。

> roscore
> rosparam set /usb_cam/pixel_format yuyv
> rosrun usb_cam usb_cam_node
> rostopic list
/rosout
/rosout_agg
/usb_cam/camera_info
/usb_cam/image_raw
/usb_cam/image_raw/compressed
/usb_cam/image_raw/compressed/parameter_descriptions
/usb_cam/image_raw/compressed/parameter_updates
/usb_cam/image_raw/compressedDepth
/usb_cam/image_raw/compressedDepth/parameter_descriptions
/usb_cam/image_raw/compressedDepth/parameter_updates
/usb_cam/image_raw/theora
/usb_cam/image_raw/theora/parameter_descriptions
/usb_cam/image_raw/theora/parameter_updates

次に、rvizを起動し、「Add」をクリックし、「By Topic」から「Image Raw」を選択する。

> rosrun rviz rviz

f:id:hirotaka_hachiya:20170713120945p:plain