0
$\begingroup$

Rosanswers logo

Hello,

I have a ceiling camera that publishes images in the topic "/camera/image_raw" (working and publishing perfectly through the network). I have also calibrated this camera using openCV calibration procedures and saved this calibration in a .yaml file. I am trying to use ar_pose_multi to get the data published in /ar_pose_marker. When I run:

roslaunch ar_pose ar_pose_multi.launch

it opens rviz simulator and there is the following error:

ERROR: cannot launch node of type [usb_cam/usb_cam_node]: usb_cam

I ignored this error because I dont have usb_cam...I get my images from the ceiling camera (but I dont know if I can ignore this). Finally, I printed a pattern present in /ccny_vision/ar_pose/data/4x4/ and put bellow the camera and I have tried different heights and distances from the camera.

My questions are:

  1. I dont want to use the calibration procedure from ROS... Is it possible to use the .yaml calibration file that I already have to feed the topic /camera/camera_info, required by ar_pose_multi?

    1. I used rostopic echo with /camera/image_raw and /camera/camera_info and there are data (although calibration has the majority of data without any values), but when I used rostopic echo with /ar_pose_marker there is no output. Do you have any idea about how ar_pose publishes in /ar_pose_marker?

    2. Rviz opens normally, but it seems to be completely detached from the camera, so nothing appears on the screen.

    I dont know if I have no output because my marker is too small, or my calibration file is wrong, or the usb_cam error is relevant.. I am a little lost :(

================ BEGIN EDIT: Adding more information that can be helpful:

  1. I calibrated again the camera using the calibration procedure from ROS and now the calibration is successfully published in "camera/camera_info" topic.

  2. the topic "/camera/image_raw" is also OK and I can see the image if I add the component "Image" to Rviz. However with the component "Camera" I have a warning "No Image received"

  3. No error is triggered when I run the ar_pose_multi.launch node. But even so, when I put a marker below the camera, nothing happens, no marker seems to be tracked. Also, the topic "/ar_pose_makers" does not presents any value to me.

================ END EDIT

================ BEGIN EDIT: (2)

maybe it is helpful: I am using ROS indigo and Ubuntu 14.04

my ar_pose_multi-launch is:

<launch>
    <node pkg="rviz" type="rviz" name="rviz"/>
        args="-d $(find ar_pose)/launch/live_single.vcg"/>
    <node pkg="tf" type="static_transform_publisher" name="world_to_cam" 
        args="0 0 0.5 -1.57 0 -1.57 world usb_cam 1" />
    <node name="ar_pose" pkg="ar_pose" type="ar_multi" respawn="false" output="screen">
        <param name="marker_pattern_list" type="string" value="$(find ar_pose)/data/object_4x4"/>
        <param name="threshold" type="int" value="100"/>
    </node>
</launch>

The output of rostopic for /camera/camera_info is:

---
header: 
  seq: 131827
  stamp: 
    secs: 1422538316
    nsecs: 930701784
  frame_id: /camera
height: 1920
width: 2560
distortion_model: plumb_bob
D: [-0.477363, 0.142675, 0.003122, -0.00082, 0.0]
K: [1294.855301, 0.0, 1321.399243, 0.0, 1301.383895, 997.452667, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [1014.404846, 0.0, 1167.875787, 0.0, 0.0, 1033.669922, 907.315829, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0
binning_y: 0
roi: 
  x_offset: 0
  y_offset: 0
  height: 0
  width: 0
  do_rectify: False
---

and the rqt_graph can be found here: image description

END EDIT (2)

BEGIN EDIT(3) My new ar_pose_multi.lauch file is:

<launch>
  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find ar_pose)/launch/live_multi.rviz"/>
  <node pkg="tf" type="static_transform_publisher" name="world_to_cam" 
    args="0 0 0.5 -1.57 0 -1.57 world camera 1" />
  <node name="ar_pose" pkg="ar_pose" type="ar_multi" respawn="false"
    output="screen">
    <param name="marker_pattern_list" type="string"
      value="$(find ar_pose)/data/object_4x4"/>
    <param name="threshold" type="int" value="100"/>
  </node>
</launch>

I have just deleted the entry for uvc_cam since I don't have this and it was raising an error. I printed the Markers that are contained in the pattern_list object_4x4, I tried many distances from the camera but the markers were not identified.

I checked the name of the frames and I have four, but just "camera" and "world" appears in Rviz in TF components.

Am I doing something wrong?

Frames:
    /4x4_1:
      Value: true
    /4x4_2:
      Value: true
    /camera:
      Value: true
    /world:
      Value: true
    All Enabled: true

END EDIT(3)

BEGIN EDIT(4)

Here is the output for rosnode info ar_pose

rosnode info ar_pose

--------------------------------------------------------------------------------
Node [/ar_pose]
Publications: 
 * /visualization_marker [visualization_msgs/Marker]
 * /ar_pose_marker [ar_pose/ARMarkers]
 * /rosout [rosgraph_msgs/Log]
 * /tf [tf2_msgs/TFMessage]

Subscriptions: 
 * /usb_cam/camera_info [unknown type]

Services: 
 * /ar_pose/set_logger_level
 * /ar_pose/get_loggers


contacting node http://wtmpc28:57577/ ...
Pid: 16120
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /tf
    * to: /rviz
    * direction: outbound
    * transport: TCPROS
 * topic: /visualization_marker
    * to: /rviz
    * direction: outbound
    * transport: TCPROS

It seems that there is no subscription to /camera/image_raw, right? But at the same time I can get the image through Rviz...

END EDIT (4)

BEGIN EDIT (5)

Results with ar_pose_single: the figure from rqt_graph and the output from rosnode:

image description

--------------------------------------------------------------------------------
Node [/ar_pose]
Publications: 
 * /visualization_marker [visualization_msgs/Marker]
 * /ar_pose_marker [ar_pose/ARMarker]
 * /rosout [rosgraph_msgs/Log]
 * /tf [tf2_msgs/TFMessage]

Subscriptions: 
 * /usb_cam/image_raw [sensor_msgs/Image]
 * /usb_cam/camera_info [sensor_msgs/CameraInfo]

Services: 
 * /ar_pose/set_logger_level
 * /ar_pose/get_loggers


contacting node http://wtmpc28:43294/ ...
Pid: 19355
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /tf
    * to: /rviz_1422619910030224769
    * direction: outbound
    * transport: TCPROS
 * topic: /usb_cam/camera_info
    * to: /usb_cam (http://wtmpc28:55595/)
    * direction: inbound
    * transport: TCPROS
 * topic: /usb_cam/image_raw
    * to: /usb_cam (http://wtmpc28:55595/)
    * direction: inbound
    * transport: TCPROS

We can see that ar_pose is corrected subscribed to the topics of documentation. Although everything looks nice in the architecture the tracking is not reliable at all. The markers are not tracked correctly, but I don't know if this is due the calibration (that was performed using the calibration procedure from tutorials and is published in /usb_camera/camera_info). So I can say that is not correctly tracking the mark referenced in launch file (But at least we can see the axis changing the position in Rviz)

Concerning to demos, it was not possible to run because when we try to download the files from the repository, it says:

--2015-01-30 12:55:12--  http://robotics.ccny.cuny.edu/data/ROS/usb_cam_topics_ar_multi.bag.tar.gz
Resolving robotics.ccny.cuny.edu (robotics.ccny.cuny.edu)... 134.74.16.73
Connecting to robotics.ccny.cuny.edu (robotics.ccny.cuny.edu)|134.74.16.73|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2015-01-30 12:55:13 ERROR 404: Not Found.

tar (child): usb_cam_topics_ar_multi.bag.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

Finally, I returned to test the ar_pose_multi and include some remapping in the launch file:

       <remap from="camera/image_raw" to="usb_cam/image_raw"/>
       <remap from="camera/camera_info" to="usb_cam/camera_info"/>

and Rviz still works fine and now ar_pose seems to be corrected subscribed to the topics bellow:

--------------------------------------------------------------------------------
Node [/ar_pose]
Publications: 
 * /visualization_marker [visualization_msgs/Marker]
 * /ar_pose_marker [ar_pose/ARMarkers]
 * /rosout [rosgraph_msgs/Log]
 * /tf [tf2_msgs/TFMessage]

Subscriptions: 
 * /camera/camera_info [sensor_msgs/CameraInfo]
 * /camera/image_raw [sensor_msgs/Image]

Services: 
 * /ar_pose/set_logger_level
 * /ar_pose/get_loggers

But ar_pose stop working with the following message:

 [ar_pose-4] process has died [pid 13453, exit code -11, cmd /informatik/isr/wtm/home/borghetti/Development/catkin_ar_pose_ccny/devel/lib/ar_pose/ar_multi usb_cam/image_raw:=camera/image_raw usb_cam/camera_info:=camera/camera_info __name:=ar_pose __log:=/informatik/isr/wtm/home/borghetti/.ros/log/4452fd5e-a883-11e4-8ab6-a4badbefd0c9/ar_pose-4.log].
log file: /informatik/isr/wtm/home/borghetti/.ros/log/4452fd5e-a883-11e4-8ab6-a4badbefd0c9/ar_pose-4*.log

I have already sent the calibrations parameters, but maybe the resolution is too high for ar_pose?

END EDIT (5)

BEGIN EDIT(6)

I think I found the exact place in which the code is failing. The following error occurs when I try to run only the ar_multi node, alone:

[ INFO] [1423073315.446562548]:     Publish transforms: 1
[ INFO] [1423073315.448508337]:     Publish visual markers: 1
[ INFO] [1423073315.450429934]:     Threshold: 100
[ INFO] [1423073315.452378720]: Marker Pattern Filename: /informatik/isr/wtm/home/borghetti/Development/luci21/src/ar_pose/data/object_4x4
[ INFO] [1423073315.452445189]: Subscribing to info topic
[ INFO] [1423073315.988537258]: *** Camera Parameter ***
--------------------------------------
SIZE = 2560, 1920
Distortion factor = 1321.399243 997.452667 47.736300 1.000000
1014.40485 0.00000 1167.87579 0.00000 
0.00000 1033.66992 907.31583 0.00000 
0.00000 0.00000 1.00000 0.00000 
--------------------------------------
[ INFO] [1423073316.033386533]: Opening Data File /informatik/isr/wtm/home/borghetti/Development/luci21/src/ar_pose/data/object_4x4
[ INFO] [1423073316.037281338]: About to load 2 Models
[ INFO] [1423073316.037362556]: Read in No.1
[ INFO] [1423073316.045167230]: Read in No.2
[ INFO] [1423073316.051830901]: Subscribing to image topic
Segmentation fault

I made tests and debugged the code and the error occurs when it tries to convert from IplImage to ARUInt8 Image in ar_multi.cpp:

try
{
  capture_ = cv_bridge::toCvCopy (image_msg, sensor_msgs::image_encodings::BGR8);
}
catch (cv_bridge::Exception& e)
{
  ROS_ERROR("cv_bridge exception: %s", e.what()); 
}
dataPtr = (ARUint8 *) ((IplImage) capture_->image).imageData;

I am searching for solution, but anyone has suggestions? My Ubuntu is 14.04 and ROS Indigo.

END EDIT (6)

Thank you in advance!

Marcelo.


Originally posted by borghetti on ROS Answers with karma: 30 on 2015-01-27

Post score: 0


Original comments

Comment by Procópio on 2015-01-30:
yes, you are right, ar_pose is not subscribing to the image topic. but notice that it is subscribing to a topic that starts with "/usb_cam/" which is weird since it should start with "/camera/". did you manage to get the whole system working with ar_single or not? that was not clear.

Comment by Procópio on 2015-01-30:
checking ar_pose, did you tried to run the demos (as explained in the bottom of the page)? if so, did it work? can you run all the tools (rqt_graph, rosnode info, etc.) to see what are the topics names and the workflow?

Comment by borghetti on 2015-01-30:
Sorry for my delay, I was testing many things with my colleague to put the system to work. But it is still not working. I edited the post (5) with the questions you did...thanks

Comment by borghetti on 2015-02-13:
The problem is now solved. I am using now a usb camera that works OK with the usb_cam driver. Unfortunately I couldn't find the reason for the older camera don't work. I also changed ar_multi.h to publish in /usb_cam/camera_info and /usb_cam/image_raw and rebuilt the project. Thanks.

Comment by Procópio on 2015-02-16:
i'm glad you manage to solve your problem. maybe you can create an answer with the steps to solve the problem, so others can benefit from it.

Comment by borghetti on 2015-02-19:
Sure, I can do that. I will provide a detailed answer soon. Thanks again!

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

BTW, only the new directory is sourced, so when I type "roscd ar_pose", for example, it goes to the correct package. But something is trying to access the wrong one. Maybe this conflict is causing the wrong ar_pose being called?


Originally posted by borghetti with karma: 30 on 2015-02-03

This answer was ACCEPTED on the original site

Post score: 0


Original comments

Comment by tfoote on 2015-03-16:
You need to make sure all your terminal which are launching things are sourcing the new directory.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.