Advancements with the Flexible Collision Checking Library (FCL)
First, he improved the efficiency of collision checking and distance computation. FCL now includes specialized algorithms for collision between geometric primitives and additional broadphase collision algorithms that are amenable for both collision checking and distance computation between many objects.
Secondly, for broadphase collision, Jia focused on the fast construction of broadphase structure. This is very important for collision with sensor data because slow construction of broadphase structures from sensor data received at high frame rates can severely reduce system performance. To reduce the construction overhead, a lazy construction strategy is used to balance the construction cost and collision speed.
Finally, FCL can now perform collision checking with octree representations of the world. In the previous arm_navigation pipeline, regions that are unknown to the robot or are obstructed, are considered as free. This could cause problems when the robot performs actions in the unknown space. To address this issue, FCL now includes the ability to perform collision checking directly with an octree representation of the world.
The octomap library is used to construct an octree representation of the robot's environment. Each cell specified in the octree includes a probability of occupancy. FCL uses the octree structure directly, without the need for an expensive broadphase structure construction step. During collision checking with an octree, FCL determines both whether a collision occurs and a set of cost volumes. A cost volume is represented by the probability of collision, given by the probability of occupancy, and by the volume of the octree cell that incurs that probability of collision.
This capability enables robot to reason about unknown space as well. In particular, when a motion plan is computed, the cost of this plan is evaluated by looking at the intersection of a plan's swept volume and the unknown space. Using this information the robot can decide whether to execute the plan or to perform sensing operations: for example, pointing the head towards the unknown areas of the environment. This loop of planning and sensing additional parts of the environment can be performed multiple times, until the computed motion plan can be executed.