text: /*******************************************************************************
   * Title     : collision_check_thread.h
   * Project   : moveit_jog_arm
   * Created   : 1/11/2019
   * Author    : Brian O'Neil, Andy Zelenak, Blake Anderson
   *
   * BSD 3-Clause License
   *
   * Copyright (c) 2019, Los Alamos National Security, LLC
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *
   * * Redistributions of source code must retain the above copyright notice, this
   *   list of conditions and the following disclaimer.
   *
   * * Redistributions in binary form must reproduce the above copyright notice,
   *   this list of conditions and the following disclaimer in the documentation
   *   and/or other materials provided with the distribution.
   *
   * * Neither the name of the copyright holder nor the names of its
   *   contributors may be used to endorse or promote products derived from
   *   this software without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE
   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *******************************************************************************/
  
  #pragma once
  
  #include <atomic>
  #include "jog_arm_data.h"
  #include "low_pass_filter.h"
  #include <moveit/robot_model_loader/robot_model_loader.h>
  #include <moveit/planning_scene_monitor/planning_scene_monitor.h>
  
  namespace moveit_jog_arm
  {
  enum CollisionCheckType
  {
    K_THRESHOLD_DISTANCE = 1,
    K_STOP_DISTANCE = 2
  };
  
  class CollisionCheckThread
  {
  public:
    /** \brief Constructor
     *  \param parameters: common settings of jog_arm
     *  \param planning_scene_monitor: PSM should have scene monitor and state monitor
     *                                 already started when passed into this class
     */
    CollisionCheckThread(const moveit_jog_arm::JogArmParameters& parameters,
                         const planning_scene_monitor::PlanningSceneMonitorPtr& planning_scene_monitor);
  
    // Get thread-safe read-only lock of planning scene
    planning_scene_monitor::LockedPlanningSceneRO getLockedPlanningSceneRO() const;
  
    void startMainLoop(moveit_jog_arm::JogArmShared& shared_variables);
  
  private:
    const moveit_jog_arm::JogArmParameters parameters_;
  
    CollisionCheckType collision_check_type_;
  
    // Pointer to the collision environment
    planning_scene_monitor::PlanningSceneMonitorPtr planning_scene_monitor_;
  };
  }  // namespace moveit_jog_arm
  