yoshimi.'s Diary

よしみ.が過去にやってきたことに掃き溜めです

ROS(Noetic)にopenposeのpackageを使ってみた

ROS(Noetic)にopenposeのpackageを使おうとしたら詰まったので、そのときのことを書き残しておきます。今回使用したものはこちら。

github.comInstallstion stepsの通りに行ったあとcatkin_makeを行ったら

CMake Error at openpose_ros/openpose_ros/CMakeLists.txt:23 (find_package):
  By not providing "FindOpenPose.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "OpenPose",
  but CMake did not find one.

  Could not find a package configuration file provided by "OpenPose" with any
  of the following names:

    OpenPoseConfig.cmake
    openpose-config.cmake

とか、

No rule to make target '/home/yoshimi/openpose/build/lib/libopenpose.so', needed by '/home/yoshimi/catkin_ws/devel/lib/openpose_ros/openpose_ros_node'.  Stop.

CMakeLists.txtを以下のように書き換えた(yoshimiの部分は各自のPCのユーザー名に変えて下さい)また、homeディレクトリにopenposeをインストールしていない人は適宜パスを変更してください

cmake_minimum_required(VERSION 3.12.0)
project(openpose_ros)

## Add support for C++11, supported in ROS Kinetic and newer
add_definitions(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  openpose_ros_msgs
  sensor_msgs
  cv_bridge
  image_transport
)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")

find_package(CUDA REQUIRED) # Uncomment this line if you have trouble compiling
find_package(OpenCV REQUIRED)
find_package(GFlags)
find_package(Glog)
#find_package(OpenPose REQUIRED) #comment

catkin_package(
   INCLUDE_DIRS include
   CATKIN_DEPENDS roscpp rospy std_msgs
)

set(OPENPOSE_DIR /home/yoshimi/openpose)
set(OPENPOSE_INCLUDE_DIRS ${OPENPOSE_DIR}/include) #add
#set(OPENPOSE_LINK_LIBRARY ${OPENPOSE_DIR}/build/lib/libopenpose.so) #comment
set(OPENPOSE_LINK_LIBRARY ${OPENPOSE_DIR}/build/src/openpose/libopenpose.so) #add

include_directories( 
  include
  ${catkin_INCLUDE_DIRS}
  ${CUDA_INCLUDE_DIRS}
  ${CAFFE_INCLUDE_DIRS}
  ${OPENPOSE_INCLUDE_DIRS} 
  ${GFLAGS_INCLUDE_DIR} 
  ${GLOG_INCLUDE_DIR} 
  ${OpenCV_INCLUDE_DIRS}
)

add_executable(${PROJECT_NAME}_node src/openpose_ros_node.cpp src/openpose.cpp src/openpose_ros_io.cpp 
                                    src/openpose_flags.cpp)

add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
  ${OPENPOSE_LINK_LIBRARY} 
  ${GFLAGS_LIBRARY} 
  ${GLOG_LIBRARY} 
)

また、

cpp:153:85: error: ‘CV_FOURCC’ was not declared in this scope
  153 |                 original_video_writer_ = cv::VideoWriter(original_video_file_name_, CV_FOURCC('M','J','P','G'), video_fps_, current_image.size());

こんなエラーが吐かれたらopenpose_ros_io.cppのCV_FOURCC, をcv::VideoWriter::fourcc に書き換えるとうまくいった(多分2箇所)

これでうまく行くと思う

Reference

find_package(OpenPose REQIRED) in CMakeLists.txt fails · Issue #10 · firephinx/openpose_ros · GitHub

error: ‘CV_FOURCC’ was not declared in this scope · Issue #42 · YuvalNirkin/face_swap · GitHub

【make】エラーメッセージ「make: *** No rule to make target `○○.c', needed by `××.exe'. Stop.」 - Muni Bus