翻译 - AEROSTACK - 添加一个新相机

翻译 - AEROSTACK - 添加一个新相机

声明:本文是一篇翻译文章,文章来源:https://github.com/Vision4UAV/Aerostack/wiki/Add-a-New-Camera

未经博主本人许可,文章禁止转载!!!

  
Aerostack 支持所有带USB的ueye相机。在Aerostack中有一些配合ueye相机的ROS包,它们将数据从相机提取出来并使用用户提供的对应的配置文件将相机数据发布出去。将一个新的相机添加到Aerostack中是相对来说简单的,可以按照下面的几个步骤进行。

  1. 安装ueyecamera驱动
  2. 获得camera_id
  3. 生成对应的配置文件
  4. 生成相机校准文件
  5. 启动ueyecamera节点

1.安装Ueyecamera驱动

在将一个新的相机添加到框架中最重要的一件事情就是给Ueyecamera相机安装驱动。注意在安装Aerostack时,安装Ueyecamera驱动是强制性的,因为如果没有它的话Aerostack不能构建出来。这里仅仅是帮助大家在万一ueyecamera没有安装成功时,怎么样去做。
下载ueyecamera的链接可以在下面找到:
https://en.ids-imaging.com/download-ueye-lin64.html.
用户需要为linux安装驱动。Ueyecamera的安装说明在和驱动一起的一个文本文件中有提及。

2.获得camera_id

在安装了ueyecamera的驱动之后,用户需要去检查连接的ueyecamera的camera_id,可以按照下面的步骤来做。打开Gnome终端,输入命令ueyecameramanager,然后会打开一个窗口显示所有与计算机相连的ueyecamera。
下面的图片展示了一个ueyecamera的例子,其连接了一个相机以及它所有的属性。camera_id可以在cam ID下看到。
在这里插入图片描述

3.生成一个适当的配置文件

配置文件是非常重要的,用户可以用它来定义相机的所有属性,例如亮度、帧率、曝光等参数。在设置相机参数之前需要先把相机打开。这可以通过右击上面图片中所示的屏幕上的可用的相机来完成。
在打开相机之后,所有的相机参数都可以由用户来设定。在设置完成相机参数之后,用户需要用所需的参数来保存配置文件。配置文件需要保存在文件夹DRONE_STACK/Configs/drone_id中。drone_id的数依赖与于用户正在用哪个无人机。例如,如果用户正在Asctec Pelican中使用相机,配置文件就需要存在文件夹drone0中,因为目前drone0就是Astec Pelican正在用的。
而且,现在有很多默认的ueyecamera配置文件已经在文件夹DRONE_STACK/Configs/drone_id中了。small_camera_RGB24_HUB.ini就是已经生成的有确切相机参数的配置文件。这完全由用户来选择哪个相机的配置是最最好的。

4.生成相机校准文件

相机校准文件包含了必要的相机校准数据,例如相机的焦距,投影矩阵等。相机校准文件可以用ROS相机校准包来生成,这个包可以在下面的链接中找到:
http://wiki.ros.org/camera_calibration.
在生成合适的相机校准文件之后,可以将其保存到与上面一致的文件夹DRONE_STACK/Configs/drone_id中。drone_id决定于用户正在使用的无人机。下面是一个校准文件的例子:

image_width: 640
image_height: 360
camera_name: front
camera_matrix:
  rows: 3
  cols: 3
  data: [466.6953647276067, 0, 306.515467461629, 0, 466.1550228548235, 169.6544700845251, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.3088667172761168, 0.1060937937543472, -0.001639357143514502, 0.0004536735112699787, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [391.9715881347656, 0, 301.7997751755956, 0, 0, 442.0516967773438, 167.6912864963015, 0, 0, 0, 1, 0]

注意,校准文件的格式应当与上面的文件一致,否则Aerostack中的ueye会启动失败。相机校准文件保存时需要和相机同名,这就是在用户使用的启动相机的launch文件中的。例如,如果相机的名字是front,那么校准文件的名字就应当为front.yaml。

5.启动Ueyecamera节点

用户需要写一个合适的启动文件以便使用正确的配置文件和校准文件来启动ueyecamera,当然还有相机的名字和camera_id。下面就是一个这样的启动文件:

<!-- launches: ueye_cvg node -->
<launch>
    <arg name="camera_id_num" default="1"/>
    <arg name="config_file" default="small_camera_RGB24.ini"/>
    <arg name="camera_name_str" default="front" />

    <arg name="drone_id_int" default="0" />
     <arg name="my_stack_directory" default="$(env DRONE_STACK)" />

    <group ns="drone$(arg drone_id_int)">
     <node name="cvg_ueye_cam$(arg camera_id_num)_$(arg camera_name_str)" pkg="driver_camera_ueye_ROSModule" type="driver_camera_ueye_ROSNode" output="screen">
      <param name="camera_ident_number" value="$(arg camera_id_num)" type="int"/>
      <param name="configuration_file" value="$(arg my_stack_directory)/configs/drone$(arg drone_id_int)/$(arg config_file)" type="string"/>
      <param name="camera_name"   value="$(arg camera_name_str)" type="string"/>
      <param name="topic_name" value="camera/$(arg camera_name_str)"  type="string"/>
      <param name="droneId" value="$(arg drone_id_int)" type="int"/>
      <param name="stackPath" value="$(arg my_stack_directory)" type="string"/>
      <param name="cam_intr_filename"  value="$(arg my_stack_directory)/configs/drone$(arg drone_id_int)/$(arg camera_name_str).yaml" type="string"/>
     </node>
   </group>
</launch>

上面的启动文件在Aerostak中启动ueyecamera节点,其参数和文件解释如下:

  • 启动文件的第一个参数是camera_id,这里用户应当输入从ueyecameramanager的cam ID中看到的。在这个例子中,camera_id是1。
  • 第二个参数定义了配置文件的名字,在上面的例子中是small_camera_RGB24.ini。
  • 第三个参数是相机名字,在上面的例子中是front
  • 第四个和第五个参数参数定义了在Aerostack环境中使用的drone_id。

在所有节点之后,ueyecamera的ROS节点以名称cvg_ueye_cam$(arg camera_id_num)_$(arg camera_name_str)启动。因此,这里上面的ueyenode名字可以为cvg_ueye_cam1_front。
在启动节点之后,节点的参数就被设置了:

  • 第一个参数是camera_id
  • 第二个参数是指定摄像机配置文件,其值为$(arg my_stack_directory)/configs/drone$(arg drone_id_int)/$(arg config_file),在上面的例子中,是$DRONE_STACK/configs/drone0/small_camera_RGB24.ini
  • 第三个参数是相机的名字,在上面的例子中相机的名字为front
  • 第四个参数定义了包含相机数据的主题名,其形式为camera/$(arg camera_name_str),在上面的例子中是camera/front
  • 第五个参数和第六个参数是drone_id和stack_path。
  • 第七个参数指定相机校准文件,其形式为$(arg my_stack_directory)/configs/drone$(arg drone_id_int)/$(arg camera_name_str).yaml。在上面的例子中,校准文件按照如下的方式指定$DRONE_STACK/configs/drone0/front.yaml

上面的启动(launch)文件可以使用指定了相机参数的roslaunch命令来启动,例如:

roslaunch driver_camera_ueye_ROSModule driver_camera_ueye_ROSNode 
--wait camera_id_num:=2 
         camera_name_str:="front" 
         config_file:="small_camera_RGB24_HUB.ini"

作者水平有限,文章翻译不能做到尽善尽美,如有纰漏或者谬误,还请大家评论指正。
同时大家可以通过邮箱[email protected]联系到我本人。

猜你喜欢

转载自blog.csdn.net/qq_33547243/article/details/88634283