首页 > 其他分享 >Ros2- Moveit2 - Visualizing Collisions(可视化碰撞)

Ros2- Moveit2 - Visualizing Collisions(可视化碰撞)

时间:2024-09-09 15:25:31浏览次数:8  
标签:接触点 教程 cube res 碰撞 Collisions Visualizing world Moveit2

本节将引导您了解 C++ 示例代码,该代码可让您在 RViz 中移动和与机器人手臂交互时可视化机器人本身与世界之间的碰撞接触点。

入门

运行代码

使用 Roslaunch 启动文件直接从 moveit_tutorials 运行代码:

roslaunch moveit_tutorials visualizing_collisions_tutorial.launch

现在您应该看到 Panda 机器人有 2 个可拖动的交互式标记。

 

 

本教程的代码主要在 InteractiveRobot 类中,我们将详细讲解。InteractiveRobot 类维护了一个 RobotModel、一个 RobotState 和关于“世界”的信息(在这个案例中,“世界”是一个单独的黄色立方体)。

InteractiveRobot 类使用了 IMarker 类,该类维护了一个交互式标记。这个教程没有涵盖 IMarker 类(imarker.cpp)的实现,但大部分代码是从 basic_controls 教程中复制过来的。如果你感兴趣,可以阅读那个教程以了解更多关于交互式标记的内容。

交互

在 RViz 中,您将看到两组红/绿/蓝交互式标记箭头。用鼠标拖动它们。移动右臂,使其与左臂接触。您将看到洋红色球体标记接触点。如果您没有看到洋红色球体,请确保您已添加带有 interactive_robot_marray 主题的 MarkerArray 显示,如上所述。还要确保将 RobotAlpha 设置为 0.3(或小于 1 的其他值),以便机器人透明并且可以看到球体。移动右臂,使其与黄色立方体接触(您也可以移动黄色立方体)。您将看到洋红色球体标记接触点。

相关代码

完整代码可在 moveit_tutorials GitHub 项目中查看。使用的库可在此处找到使本教程重点关注碰撞接触,省略了大量理解此演示如何工作所需的信息。为了充分理解此演示,强烈建议您通读源代码。

初始化规划场景和标记

在本教程中,我们使用InteractiveRobot 对象作为包装器,将 robot_model 与立方体和交互式标记结合在一起。我们还创建了一个 PlanningScene 来进行碰撞检查。如果您尚未完成 规划场景教程,请先完成该教程。

InteractiveRobot robot;
g_planning_scene = new planning_scene::PlanningScene(robot.robotModel());

向 PlanningScene 添加几何图形

Eigen::Isometry3d world_cube_pose;
double world_cube_size;
robot.getWorldGeometry(world_cube_pose, world_cube_size);
g_world_cube_shape.reset(new shapes::Box(world_cube_size, world_cube_size, world_cube_size));
g_planning_scene->getWorldNonConst()->addToObject("world_cube", g_world_cube_shape, world_cube_pose);

碰撞请求

我们将为 Panda 机器人创建一个碰撞请求

collision_detection::CollisionRequest c_req;
collision_detection::CollisionResult c_res;
c_req.group_name = robot.getGroupName();
c_req.contacts = true;
c_req.max_contacts = 100;
c_req.max_contacts_per_pair = 5;
c_req.verbose = false;

检查碰撞

我们检查机器人与其自身或世界之间的碰撞。

g_planning_scene->checkCollision(c_req, c_res, *robot.robotState());

显示碰撞接触点

如果发生碰撞,我们会获取接触点并将其显示为标记。getCollisionMarkersFromContacts ()是一个辅助函数,它将碰撞接触点添加到 MarkerArray 消息中。如果您想将接触点用于除显示之外的其他用途,您可以遍历c_res.contacts ,它是接触点的 std::map。查看collision_tools.cpp中 getCollisionMarkersFromContacts() 的实现 以了解具体方法。

 

if (c_res.collision)
{
  ROS_INFO("COLLIDING contact_point_count=%d", (int)c_res.contact_count);
  if (c_res.contact_count > 0)
  {
    std_msgs::ColorRGBA color;
    color.r = 1.0;
    color.g = 0.0;
    color.b = 1.0;
    color.a = 0.5;
    visualization_msgs::MarkerArray markers;

    /* Get the contact points and display them as markers */
    collision_detection::getCollisionMarkersFromContacts(markers, "panda_link0", c_res.contacts, color,
                                                         ros::Duration(),  // remain until deleted
                                                         0.01);            // radius
    publishMarkers(markers);
  }
}

启动文件

整个启动文件位于 GitHub上。本教程中的所有代码都可以从 moveit_tutorials 包中编译和运行。

标签:接触点,教程,cube,res,碰撞,Collisions,Visualizing,world,Moveit2
From: https://www.cnblogs.com/ai-ldj/p/18404643

相关文章

  • ROS2 - Moveit2 - 创建Moveit插件(MoveIt Plugins)
    创建MoveIt插件本节详细说明了如何在ROS中添加插件。两个必需元素是基类和插件类。插件类继承自基类并覆盖其虚拟函数。用于此目的的主要库是pluginlib。本教程包含三种不同类型的插件,即运动规划器、控制器管理器和约束采样器。运动规划器插件在本节中,我们将展示如何将新......
  • 【Moveit2】MoveGroupInterface设置目标姿态,然后创建一个计划到该姿态的运动路径,stati
    PlanandExecuteusingMoveGroupInterface//CreatetheMoveItMoveGroupInterfaceusingmoveit::planning_interface::MoveGroupInterface;automove_group_interface=MoveGroupInterface(node,"panda_arm");//SetatargetPoseautoconsttarget_p......
  • ROS2- Moveit2 - 运动规划API(Motion Planning API)
     在MoveIt中,运动规划器使用插件基础结构加载。这允许MoveIt在运行时加载运动规划器。在此示例中,我们将运行执行此操作所需的C++代码。入门如果您还没有这样做,请确保您已经完成入门指南中的步骤。 运行演示打开两个shell。在第一个shell中启动RViz并等待所有内......
  • ROS2- Moveit2 -Planning Scene ROS API (规划场景 ROS API)
    在本教程中,我们将研究如何使用规划场景差异来执行两项操作:在世界中添加和移除物体将物体安装到机器人上或从机器人上卸下入门如果您还没有这样做,请确保您已经完成入门指南中的步骤。运行代码打开两个shell。在第一个shell中启动RViz并等待所有内容完成加载:ros......
  • Ros2-Moveit2-PlanningSceneMonitor(规划场景监控)
    PlanningSceneMonitor是维护最新规划场景的推荐接口。RobotState、CurrentStateMonitor、PlanningScene、PlanningSceneMonitor和PlanningSceneInterface之间的关系一开始可能非常令人困惑。本教程旨在阐明这些关键概念。机器人状态RobotState是机器人的快照。它包含RobotMod......
  • ROS2 Moveit2 - moveit_resources_panda_moveit_config包简介
    moveit_resources_panda_moveit_config是一个在MoveIt框架中常用的资源包,包含了Panda机器人模型(FrankaEmikaPanda)的配置文件。这个包用于测试和演示MoveIt的功能。它通常包含以下内容:URDF/XACRO文件:描述Panda机器人的几何、动力学和运动学模型。SRDF文件:描述Pand......
  • Ros2 Moveit2 编译安装报错解决方案 - By not providing "Findgz_sim_vendor.cmake" i
    moveit_resources---stderr:gz_ros2_controlCMakeErroratCMakeLists.txt:27(find_package):Bynotproviding"Findgz_sim_vendor.cmake"inCMAKE_MODULE_PATHthisprojecthasaskedCMaketofindapackageconfigurationfileprovidedby"gz......
  • Ros2 Moveit2 - Robot Model and Robot State
    RobotModelandRobotState 在本节中,我们将向您介绍用于在MoveIt中使用运动学的C++API。RobotModel和RobotState类RobotModel 和 RobotState 类是提供对机器人运动学访问权限的核心类。RobotModel 类包含所有链接和关节之间的关系,包括从URDF加载的关节限制属......
  • ROS2 Moveit2 - URDF 和 SRDF
    URDFMoveIt2从URDF(统一机器人描述格式)开始,这是用于在ROS和ROS2中描述机器人的原生格式。在本教程中,您将找到URDF的资源、重要提示以及MoveIt2特定要求的列表。URDF资源URDFROSWiki页面-URDF ROSWiki页面是关于URDF的大部分信息的来源。URDF教程-......
  • Ros2 MoveIt2 MoveGroup C++接口
     在MoveIt中,最简单的用户界面是通过 MoveGroupInterface 类。它为用户可能想要执行的大多数操作提供了易于使用的功能,特别是设置关节或姿势目标、创建运动计划、移动机器人、将对象添加到环境中以及从机器人上连接/分离对象。此接口通过ROS主题、服务和操作与 MoveGrou......