Robotics StackExchange | Archived questions

Collision not triggered

Hi, I am trying to implement node, that will check planning scene for a collision. I am successfully loading collision object on the scene and monitoring it with scene monitor. I can see sphere colliding with robot's body, and when I am moving sphere on a scene I can see its position output updated. But collision checking result is telling, that there is no collision, even when it is.

Here's code:

#include "moveit_test.h"


int main(int argc, char* argv[]) {
ros::init(argc, argv, "mvt");
ros::NodeHandle nh;

ros::AsyncSpinner spinner(1);
spinner.start();

robot_model_loader::RobotModelLoader robot_loader("robot_description");
auto kinematic_model = robot_loader.getModel();
ROS_INFO("Model frame: %s", kinematic_model->getModelFrame().c_str());

moveit::planning_interface::MoveGroupInterface move_group("manipulator");
planning_scene::PlanningScene planning_scene(kinematic_model);
moveit::planning_interface::PlanningSceneInterface planning_scene_interface;

const std::string ROBOT_DESCRIPTION{"robot_description"};

const moveit::core::JointModelGroup* joint_model_group;

auto psm = std::make_shared<planning_scene_monitor::PlanningSceneMonitor>(
    ROBOT_DESCRIPTION);

moveit_msgs::CollisionObject collision_object;
collision_object.header.frame_id = move_group.getPlanningFrame();
collision_object.id = "sphere2";

shape_msgs::SolidPrimitive primitive;
primitive.type = primitive.SPHERE;
primitive.dimensions.resize(1);
primitive.dimensions[0] = 0.5;


geometry_msgs::Pose box_pose;
box_pose.orientation.w = 1.0;
box_pose.position.x = 0.8;
box_pose.position.y = 0.0;
box_pose.position.z = 0.5;

collision_object.primitives.push_back(primitive);
collision_object.primitive_poses.push_back(box_pose);
collision_object.operation = collision_object.ADD;

std::vector<moveit_msgs::CollisionObject> collision_objects;
collision_objects.push_back(collision_object);

planning_scene_interface.addCollisionObjects(collision_objects);


// update the planning scene monitor with the current state
psm->startSceneMonitor("/move_group/monitored_planning_scene");
bool success = psm->requestPlanningSceneState("/get_planning_scene");
ROS_INFO_STREAM("Request planning scene "
                << (success ? "succeeded." : "failed."));


ros::Rate loop_rate(1);

    collision_detection::CollisionResult collision_result;
    collision_detection::CollisionRequest collision_request;

    collision_request.contacts = true;
    collision_request.max_contacts = 1000;
    collision_request.group_name = "manipulator";
    collision_request.distance = true;
    collision_request.cost = false;
    collision_request.verbose = false;

    collision_detection::AllowedCollisionMatrix acm =
        planning_scene.getAllowedCollisionMatrix();

    std::vector<std::string> obj_names;
    acm.getAllEntryNames(obj_names);
    for (int i = 0; i < obj_names.size(); i++)
        std::cout << obj_names[i] << std::endl;

    while (ros::ok()) {
        collision_result.clear();
        auto current_state = psm->getPlanningScene()->getCurrentState();

        // planning_scene.checkSelfCollision(collision_request, collision_result, current_state);

        auto objects = planning_scene_interface.getObjects();
        for(auto names : objects){
            std::cout << names.second.primitive_poses[0].position << std::endl;
        }

        planning_scene.checkCollision(collision_request, collision_result,
                                      current_state);

        ROS_INFO_STREAM(collision_result.distance);
        ROS_INFO_STREAM(planning_scene.isStateColliding());

        ROS_INFO_STREAM(
            "Collision check between robot and collision object "
            << (collision_result.collision ? "failed." : "succeeded."));

        loop_rate.sleep();
}

return 0;
}

Output:

x: 1.27
y: 0
z: 0.5

[ INFO] [1678115582.521497801]: 0.0347054
[ INFO] [1678115582.521577093]: 1
[ INFO] [1678115582.521594489]: Collision check between robot and collision object succeeded.

I want to add, that selfCollision detection is working

I dont have enough karma to upload photo, so here's link to image with rviz

image description

Asked by davida3334@gmail.com on 2023-03-06 10:21:26 UTC

Comments

Answers