MrLacquer / hj-object-detect

Object detecting and estimation pose using darknet_ros with jsk_pcl
Apache License 2.0
16 stars 5 forks source link

유튜브에 문의 드렸던 사항 입니다. #2

Closed santarone closed 4 years ago

santarone commented 4 years ago

안녕하세요. 바쁘신 와중에 도움 주신점 대단히 감사드립니다.

시스템 사양은 동일하게 Unbuntu 18.04LTS ROS - melodic D435 Yolo V3

입니다.

$roslaunch hj_object_detect hj_object_detect_rviz.launch git_img_1

$ roslaunch hj_object_detect hj_jsk_test.launch git_img_2

영상과 달리 검출한 대상에 대한 TF를 못 잡는 현상입니다.

Rviz의 상태입니다. git_img_3

추가로 $rostopic list 첨부해 봅니다.

gilren@gilren-H310MHP:~$ rostopic list /camera/aligned_depth_to_color/camera_info /camera/aligned_depth_to_color/image_raw /camera/aligned_depth_to_color/image_raw/compressed /camera/aligned_depth_to_color/image_raw/compressed/parameter_descriptions /camera/aligned_depth_to_color/image_raw/compressed/parameter_updates /camera/aligned_depth_to_color/image_raw/compressedDepth /camera/aligned_depth_to_color/image_raw/compressedDepth/parameter_descriptions /camera/aligned_depth_to_color/image_raw/compressedDepth/parameter_updates /camera/aligned_depth_to_color/image_raw/theora /camera/aligned_depth_to_color/image_raw/theora/parameter_descriptions /camera/aligned_depth_to_color/image_raw/theora/parameter_updates /camera/aligned_depth_to_infra1/camera_info /camera/aligned_depth_to_infra1/image_raw /camera/aligned_depth_to_infra1/image_raw/compressed /camera/aligned_depth_to_infra1/image_raw/compressed/parameter_descriptions /camera/aligned_depth_to_infra1/image_raw/compressed/parameter_updates /camera/aligned_depth_to_infra1/image_raw/compressedDepth /camera/aligned_depth_to_infra1/image_raw/compressedDepth/parameter_descriptions /camera/aligned_depth_to_infra1/image_raw/compressedDepth/parameter_updates /camera/aligned_depth_to_infra1/image_raw/theora /camera/aligned_depth_to_infra1/image_raw/theora/parameter_descriptions /camera/aligned_depth_to_infra1/image_raw/theora/parameter_updates /camera/color/camera_info /camera/color/image_raw /camera/color/image_raw/compressed /camera/color/image_raw/compressed/parameter_descriptions /camera/color/image_raw/compressed/parameter_updates /camera/color/image_raw/compressedDepth /camera/color/image_raw/compressedDepth/parameter_descriptions /camera/color/image_raw/compressedDepth/parameter_updates /camera/color/image_raw/theora /camera/color/image_raw/theora/parameter_descriptions /camera/color/image_raw/theora/parameter_updates /camera/color/image_rect_color /camera/color/image_rect_color/compressed /camera/color/image_rect_color/compressed/parameter_descriptions /camera/color/image_rect_color/compressed/parameter_updates /camera/color/image_rect_color/compressedDepth /camera/color/image_rect_color/compressedDepth/parameter_descriptions /camera/color/image_rect_color/compressedDepth/parameter_updates /camera/color/image_rect_color/theora /camera/color/image_rect_color/theora/parameter_descriptions /camera/color/image_rect_color/theora/parameter_updates /camera/color_rectify_color/parameter_descriptions /camera/color_rectify_color/parameter_updates /camera/depth/camera_info /camera/depth/image_rect_raw /camera/depth/image_rect_raw/compressed /camera/depth/image_rect_raw/compressed/parameter_descriptions /camera/depth/image_rect_raw/compressed/parameter_updates /camera/depth/image_rect_raw/compressedDepth /camera/depth/image_rect_raw/compressedDepth/parameter_descriptions /camera/depth/image_rect_raw/compressedDepth/parameter_updates /camera/depth/image_rect_raw/theora /camera/depth/image_rect_raw/theora/parameter_descriptions /camera/depth/image_rect_raw/theora/parameter_updates /camera/depth_registered/points /camera/extrinsics/depth_to_color /camera/extrinsics/depth_to_infra1 /camera/extrinsics/depth_to_infra2 /camera/infra1/camera_info /camera/infra1/image_rect_raw /camera/infra1/image_rect_raw/compressed /camera/infra1/image_rect_raw/compressed/parameter_descriptions /camera/infra1/image_rect_raw/compressed/parameter_updates /camera/infra1/image_rect_raw/compressedDepth /camera/infra1/image_rect_raw/compressedDepth/parameter_descriptions /camera/infra1/image_rect_raw/compressedDepth/parameter_updates /camera/infra1/image_rect_raw/theora /camera/infra1/image_rect_raw/theora/parameter_descriptions /camera/infra1/image_rect_raw/theora/parameter_updates /camera/infra2/camera_info /camera/infra2/image_rect_raw /camera/infra2/image_rect_raw/compressed /camera/infra2/image_rect_raw/compressed/parameter_descriptions /camera/infra2/image_rect_raw/compressed/parameter_updates /camera/infra2/image_rect_raw/compressedDepth /camera/infra2/image_rect_raw/compressedDepth/parameter_descriptions /camera/infra2/image_rect_raw/compressedDepth/parameter_updates /camera/infra2/image_rect_raw/theora /camera/infra2/image_rect_raw/theora/parameter_descriptions /camera/infra2/image_rect_raw/theora/parameter_updates /camera/realsense2_camera_manager/bond /camera/rgb_camera/auto_exposure_roi/parameter_descriptions /camera/rgb_camera/auto_exposure_roi/parameter_updates /camera/rgb_camera/parameter_descriptions /camera/rgb_camera/parameter_updates /camera/stereo_module/auto_exposure_roi/parameter_descriptions /camera/stereo_module/auto_exposure_roi/parameter_updates /camera/stereo_module/parameter_descriptions /camera/stereo_module/parameter_updates /clicked_point /cluster_decomposer/boxes /cluster_decomposer/centroid_pose_array /cluster_decomposer/cluster_indices /cluster_decomposer/debug_output /cluster_decomposer/label /cluster_decomposer/mask /cluster_decomposer/negative_indices /cluster_decomposer/parameter_descriptions /cluster_decomposer/parameter_updates /darknet_ros/bounding_boxes /darknet_ros/check_for_objects/cancel /darknet_ros/check_for_objects/feedback /darknet_ros/check_for_objects/goal /darknet_ros/check_for_objects/result /darknet_ros/check_for_objects/status /darknet_ros/cluster_points /darknet_ros/detection_image /darknet_ros/found_object /darknet_ros/label_image /detection_manager/bond /diagnostics /initialpose /label_mask/output/bg_indices /move_base_simple/goal /rosout /rosout_agg /tf /tf_static

감사합니다.

MrLacquer commented 4 years ago

확인해보니 topic 및 rviz 셋팅은 모두 잘된 것 같습니다.

YoloObjectDetector.cpp 파일의 34번째 줄을 보시면, YOLO로 검출된 물체의 bounding box를 기반으로 무게중심점을 좌표로 나타내는 부분입니다. 현재 본 repository에는 'hammer'로 되어있습니다. 아마 plier 대신에 hammer를 카메라에 비춰 준다면 좌표가 뜰 것입니다. 한번 시도해 보시기 바랍니다.

추가적으로, 현재 상태에서는 동시에 두 물체 이상을 검출하는 것은 안되더군요... 이부분은 아마 cpp랑 hpp 모두를 건드려야하는데... cpp는 제가 부족한 면이 없지 않아서 해결하지 못했습니다.

혹시라도 두 물체 이상의 좌표 출력에 성공하신다면 공유 부탁드리겠습니다.

santarone commented 4 years ago

답변 감사드립니다.

첫번째로YoloObjectDetector.cpp부분 확인하였습니다.

std::string targetObjectList[] = {"hammer", "plier"};

hammer와 piler 두 물체가 target으로 지정 되어있었습니다. 하지만 낮은 빈도로 screwdriver 검출되어 지는데 저도 초보자 인지라 YOLO상에 검출되는 것인지 이를 Rviz상에 표출 하는 것인지 잘 모르겠습니다.

두번째로 hammer는 시도하지 않아서 hammer와 piler를 따로, 혹은 같이 시도해 보았지만 git_img_4 사진과 같이 좌표 검출이 마찬가지로 이루어 지지 않았습니다.

하여 ~$ roslaunch hj_object_detect hj_jsk_test.launch 의 결과 값을 같이 첨부해 봅니다.

~$ roslaunch hj_object_detect hj_jsk_test.launch
... logging to /home/gilren/.ros/log/84c40ffe-77fe-11ea-b6e1-f4b5201bfdb1/roslaunch-gilren-H310MHP-3783.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/loader.py:412: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(text)
started roslaunch server http://gilren-H310MHP:43343/

SUMMARY
========

PARAMETERS
 * /cluster_decomposer/approximate_sync: True
 * /cluster_decomposer/publish_tf: True
 * /cluster_decomposer/tf_prefix: yolo_
 * /rosdistro: melodic
 * /rosversion: 1.14.3

NODES
  /
    cluster_decomposer (nodelet/nodelet)
    detection_manager (nodelet/nodelet)
    label_mask (nodelet/nodelet)

ROS_MASTER_URI=http://localhost:11311

process[detection_manager-1]: started with pid [3866]
process[label_mask-2]: started with pid [3867]
process[cluster_decomposer-3]: started with pid [3868]
[ INFO] [1586174669.495215431]: Initializing nodelet with 6 worker threads.
[ WARN] [1586174669.970906755]: [/detection_manager] '~input' has not been remapped.

지식이 짧아 추론할 수 있는 문제점에는 한계가 명확하지만

[ INFO] [1586174669.495215431]: Initializing nodelet with 6 worker threads.

부분인데 영상에서는 12 값인것을 토대로 생각하자면 melodic과 kinect상의 차이로 인한 몇 부분이 일치 하지 않아 몇가지 요소가 누락 된 것으로 생각됩니다.

하여 실행 예제 첨부해 주시면 비교 분석하여 어느정도 진척이 있을것이리라 생각됩니다.

마지막으로 요청 주신 두 물체 이상의 검출 또한 진척이 있을 시에 기쁜 마음으로 공유 드리고자 노력해 보겠습니다.

감사합니다.

MrLacquer commented 4 years ago

제가 한창 개발했을때에는 yolo로 물체 검출만 되면 jsk package 이용한 launch 파일만 작동시키면 됐었습니다(물론 topic 설정 등 모든 개발환경이 제대로 됐을 경우지요).

현재 저도 roslaunch hj_object_detect hj_jsk_test.launch 을 실행 했을때, [ WARN] [1586174669.970906755]: [/detection_manager] '~input' has not been remapped. 라는 에러가 뜹니다.

yolo는 이상 없는거 같고... jsk package에 뭔가 이슈가 있는것 같습니다(아직 정확하게 알아본 것은 아닙니다).

현재 저도 조만간 melodic으로 갈아탈 생각입니다. melodic에서 한번 해보고 문제 없이 잘되면 melodic branch를 만들어보겠습니다.

MrLacquer commented 4 years ago

melodic을 깔고 진행해봤는데요, 질문자님처럼 저도 같은 에러 상황입니다. jsk package에 뭔가 달라진것이 있나보네요. 이 부분은 해결해보고 해결되면 깃에 branch를 만들겠습니다.

본 issue는 일단 닫겠습니다.

MrLacquer commented 4 years ago

해결방법을 찾았습니다. jsk_common repository에서 git clone 후 아래와 같이 빌드와 같은 과정을 거친 후에 실행 해보니, hammer 좌표가 떴습니다.

mkdir -p catkin_ws/src
cd catkin_ws/src
git clone http://github.com/jsk-ros-pkg/jsk_common
cd jsk_common
---> 이 부분 이후가 빠져있었습니다.
rosdep install -y -r --from-path . --ignore-src
cd ~/catkin_ws && catkin_make

적용해 보세요. readme는 곧 수정할 계획입니다.

santarone commented 4 years ago

먼저 issue업데이트와 더불어 아낌없는 조언에 다시 한 번 감사드립니다. 최근 저만의 darknet 러닝을 하고 있던지라 확인이 늦어졌습니다.

말씀 주신 jsk_common의 재설치와 더불어 재 실행 해본 결과 입니다. git_img_6

이전과 다름없이 TF를 찾지 못하고 있습니다. 다만 rviz상에서 BoundingBoxArray라는 항목이 새로이 추가 되었습니다. 이에 Topic에러가 발생하고 있었습니다.

topic /cluster_decomposer/centroid_pose_array

Error subscribing: Tried to subscribe to a topic with the same name but different md5sum as a topic that was already subscribed [jsk_recognition_msgs/BoundingBoxArray/c8f4a8bb1acd18ce778d183912bb472d vs. geometry_msgs/PoseArray/916c28c5764443f268b296bb671b9d97]

새로보는 항목에 에러라 조금은 진전이 있던것으로 생각됩니다. 하여 제가 시도했던 방법은 기술해 놓겠습니다.

  1. 기존 jsk_common catkin_ws 폴더 삭제

  2. bashrc 에서 catkin_ws 제거

  3. jsk-recognition 및 jsk-topic-tools 두가지 항목에 대해

    sudo apt-get purge ros-melodic-jsk-recognition
    sudo apt-get purge ros-melodic-jsk-topic-tools

    삭제 하여

    sudo apt-get install ros-melodic-jsk-recognition
    sudo apt-get install ros-melodic-jsk-topic-tools

    재설치.

  4. 알려주신 방법으로 jsk_common을 catkin_ws 이용하여 catkin_make 하였습니다.

roslaunch hj_object_detect hj_jsk_test.launch 후 실행결과도 첨부해 봅니다.

$ roslaunch hj_object_detect hj_jsk_test.launch
... logging to /home/gilren/.ros/log/971c7966-86e5-11ea-b0de-f4b5201bfdb1/roslaunch-gilren-H310MHP-30035.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/loader.py:412: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(text)
started roslaunch server http://gilren-H310MHP:35337/

SUMMARY
========

PARAMETERS
 * /cluster_decomposer/approximate_sync: True
 * /cluster_decomposer/publish_to_tf: True
 * /cluster_decomposer/tf_prefix: yolo_
 * /rosdistro: melodic
 * /rosversion: 1.14.3

NODES
  /
    cluster_decomposer (nodelet/nodelet)
    detection_manager (nodelet/nodelet)
    label_mask (nodelet/nodelet)

ROS_MASTER_URI=http://localhost:11311

process[detection_manager-1]: started with pid [30185]
process[label_mask-2]: started with pid [30186]
process[cluster_decomposer-3]: started with pid [30189]
[ INFO] [1587814328.084431870]: Initializing nodelet with 6 worker threads.
[ WARN] [1587814328.765658744]: [/detection_manager] '~input' has not been remapped.

좋은 프로젝트 꾸준히 이어나가는 모습에 대해 존경드립니다. 저도 그 모습을 본받아 제 연구를 계속 이어나가도록 노력하겠습니다. 감사합니다.