Skip to content

Tutorial Vision System Interface

Daniel Ordonez edited this page Aug 13, 2019 · 2 revisions

CSDA10F - Vision System Interface

The CSDA10F robot at Invite uses two stereographic cameras (IDS N35) to map its workspace as a point-cloud.

The invite_vision package provides the executables and classes necessary to easily control the vision system.


initialize.launch

This file will start the necessary scripts to:

  1. Connect and load calibration parameters to both cameras.
  2. Start the pre-processing executables that will modify the incoming point clouds before using them.
  3. Align and concatenate both cameras point-cloud into a single message.

Output topics:

  • /joint_cameras_point_cloud/sor_filtered [sensor_msgs::PointCloud2]: Joined cameras pointcloud, filtered with a stadistical outliner removal and an area of interest pass-through filter.

  • /n35_upper_camera/point_cloud [sensor_msgs::PointCloud2]: Upper camera raw pointcloud.

  • /n35_lower_camera/point_cloud [sensor_msgs::PointCloud2]: Lower camera raw pointcloud.

Parameters:

  • continuous [boolean]: Whether to request point-clouds continuously or just connect and initialize the cameras, and wait for point-cloud scan requests.

Additional to the launch files, there is a class contained in the invite_vision/include/vision_system_interface.h that allow for inline code control of the system:

VisionInterface class:

This class provides the functionality to request single and multi-camera request by an internal use of the Ensenso N35 action servers.

The class does not return the PointCloud data from the request, these are published in the correspondent topis (see output topics of the initialize.launch) in order to allow for complete Nodelet processing of the clouds.

TO-DO: Change this functionality into a service.

Functions

  • requestDualCameraData(): Request both cameras pointcloud, concatenated and pre propecessed. Request ready when the system_status member enum variable is equal to IDLE (1).

Example Use:

invite_vision::VisionInterface vision_system_interface;

if (vision_system_interface.system_status != invite_vision::SystemStatus::IDLE)
  ROS_ERROR("Camera system initialization failed")
else 
  vision_system_interface.requestDualCameraData();

Self Filtered Cloud

The invite_motoman_moveit_config package is already configured to perform point cloud self filtering from the point cloud received on the /joint_cameras_point_cloud/sor_filtered topic, and the result is published in the /self_filtered_cloud topic.

bag4

White cloud: Points remove from the incoming cloud due to self-filtering (see the robot shape), Colored cloud: Remaining points in the cloud after self filtered