1. 首先让两个摄像头的usb_cam加载不同的标定文件.
vertical_ttq.launch
点击(此处)折叠或打开
-
<launch>
-
<node name="v_ttq" pkg="usb_cam" type="usb_cam_node" output="screen" > //节点名会被 ARTAG 使用. 输出的报文为节点名为group的域.
-
<param name="video_device" value="/dev/video0" />
-
<param name="image_width" value="640" />
-
<param name="image_height" value="480" />
-
<param name="pixel_format" value="yuyv" />
-
<param name="camera_frame_id" value="vertical_ttq " /> 图像报文的 frame_id,在ARTAG进行报文坐标转化时用到.
-
<param name="io_method" value="mmap"/>
-
<param name="autofocus" value="false"/> <!-- default: 是否自动对焦 -->
-
<param name="framerate" value="10"/> <!-- default: 30 -->
-
<param name="camera_name" value="ttq_v"/> <!-- 摄像头名字, 标定后的校准文件也需要是这个名字 -->
-
</node>
-
-
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
-
<remap from="image" to="/v_ttq/image_raw"/>
-
<param name="autosize" value="true" />
-
</node>
- </launch>
点击(此处)折叠或打开
- 把对应的标定校准文件命名为 ~/.ros/camera_info/ttq_v.yaml ttq_v的名字必须摄像头说明的标定文件
-
-
image_width: 640
image_height: 480
camera_name: ttq_v 名字必须和文件名相同
camera_matrix:
rows: 3
cols: 3
data: [937.201327980486, 0, 311.1737643945229, 0, 933.1201188723156, 261.7306612787383, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [-0.3359625974294541, 0.3303787971606723, 0.001045630984260697, -0.00343677576556448, 0]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [901.9790649414062, 0, 309.2476349179378, 0, 0, 912.2044067382812, 262.8613621604109, 0, 0, 0, 1, 0]
点击(此处)折叠或打开
-
<launch>
-
<node pkg="tf" type="static_transform_publisher" name="world_to_cam_v_ttq" args="0 0 0 0 0 0 ar_output_v_ttq vertical_ttq 10" /> 坐标转化: 报文的frame_id
-
-
<arg name="marker_size" default="9.0" /> //要检测的码的边长.
-
<arg name="max_new_marker_error" default="0.05" />
-
<arg name="max_track_error" default="0.05" />
-
<arg name="cam_image_topic" default="/v_ttq/image_raw" />
-
<arg name="cam_info_topic" default="/v_ttq/camera_info" /> v_ttq 为 摄像头的 node 名字.
-
<arg name="output_frame" default="/ar_output_v_ttq" /> 这个用于不同frame_id的报文进行坐标转化时用
-
<node name="ar_track_alvar_v_ttq" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen">
-
<param name="marker_size" type="double" value="$(arg marker_size)" />
-
<param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" />
-
<param name="max_track_error" type="double" value="$(arg max_track_error)" />
-
<param name="output_frame" type="string" value="$(arg output_frame)" />
-
<remap from="camera_image" to="$(arg cam_image_topic)" />
-
<remap from="camera_info" to="$(arg cam_info_topic)" />
- <remap from="ar_pose_marker" to="ar_pose_marker_v_ttq" /> 这是检测到的tag的姿态话题
-
</node>
- </launch>
另外一个摄像头同理.
ar_track_alvar 占用的资源很大, 如果摄像头相同, 并且Tag也相同的情况, 但是可以考虑把多个 image_raw组装在一起, 让后统一给一个 ar_track_alvar 处理, 应该会省很多资源.