Ros2 Moveit2 之 围绕对象进行规划 - 添加障碍物

news/2025/3/16 18:48:02/文章来源:https://www.cnblogs.com/ai-ldj/p/18342948

本教程将向您介绍如何将对象插入规划场景并围绕它们进行规划。

先决条件

如果您还没有这样做,请确保您已完成RViz 中的可视化hello_moveit中的步骤。本项目假设您从上一个教程结束的地方开始。如果您只想运行本教程,您可以按照Docker 指南启动一个包含已完成教程的容器。

步骤

1 添加规划场景接口

在源文件的顶部,将其添加到包含列表中:

#include <moveit/planning_scene_interface/planning_scene_interface.h>

2 改变目标姿势

首先,通过以下更改更新目标姿势,使机器人规划到不同的位置:

// Set a target Pose with updated values !!!
auto const target_pose = [] {geometry_msgs::msg::Pose msg;msg.orientation.y = 0.8;msg.orientation.w = 0.6;msg.position.x = 0.1;msg.position.y = 0.4;msg.position.z = 0.4;return msg;
}();
move_group_interface.setPoseTarget(target_pose);

3 创建碰撞对象

在下一个代码块中,我们创建一个碰撞对象。首先要注意的是,它被放置在机器人的坐标系中。如果我们有一个感知系统来报告场景中障碍物的位置,那么这就是它会构建的消息类型。因为这只是一个示例,所以我们是手动创建的。在这个代码块的末尾要注意的一件事是,我们将此消息上的操作设置为ADD。这会导致对象被添加到碰撞场景中。将此代码块放在上一步设置目标姿势和创建计划之间。

// Create collision object for the robot to avoid
auto const collision_object = [frame_id =move_group_interface.getPlanningFrame()] {moveit_msgs::msg::CollisionObject collision_object;collision_object.header.frame_id = frame_id;collision_object.id = "box1";shape_msgs::msg::SolidPrimitive primitive;// Define the size of the box in metersprimitive.type = primitive.BOX;primitive.dimensions.resize(3);primitive.dimensions[primitive.BOX_X] = 0.5;primitive.dimensions[primitive.BOX_Y] = 0.1;primitive.dimensions[primitive.BOX_Z] = 0.5;// Define the pose of the box (relative to the frame_id)
  geometry_msgs::msg::Pose box_pose;box_pose.orientation.w = 1.0;  // We can leave out the x, y, and z components of the quaternion since they are initialized to 0box_pose.position.x = 0.2;box_pose.position.y = 0.2;box_pose.position.z = 0.25;collision_object.primitives.push_back(primitive);collision_object.primitive_poses.push_back(box_pose);collision_object.operation = collision_object.ADD;return collision_object;
}();

4 将对象添加到规划场景

最后,我们需要将此对象添加到碰撞场景中。为此,我们使用一个名为的对象,该对象PlanningSceneInterface使用 ROS 接口将规划场景的更改传达给MoveGroup。此代码块应直接跟在创建碰撞对象的代码块后面。

// Add the collision object to the scene
moveit::planning_interface::PlanningSceneInterface planning_scene_interface;
planning_scene_interface.applyCollisionObject(collision_object);

5 运行程序并观察变化

就像我们在上一个教程中所做的那样,使用demo.launch.py脚本启动 RViz 并运行我们的程序。如果您使用的是 Docker 教程容器之一,则可以指定已添加 RvizVisualToolsGui 面板的其他 RViz 配置:

ros2 launch moveit2_tutorials demo.launch.py rviz_config:=kinova_hello_moveit.rviz

 

../../../_images/planning_around_object.png

概括

  • 您使用 MoveIt 扩展了编写的程序,以便围绕场景中的对象进行规划。

  • 这是完整 hello_moveit.cpp 源代码的副本

  •  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 clearError 清除已处理的错误

title: 使用 clearError 清除已处理的错误 date: 2024/8/5 updated: 2024/8/5 author: cmdragon excerpt: 摘要:“文章介绍了clearError函数的作用与用法,用于清除已处理的错误并可实现页面重定向,提升用户体验。通过示例展示了在表单提交场景中如何应用此函数进行错误处理…

破局SAP实施难题、降低开发难度,定制化需求怎样快速上线?

前言 SAP 是全球领先的业务流程管理软件供应商之一,其提供广泛的模块化解决方案和套件,所开发的软件解决方案面向各种规模的企业,帮助客户规划和设计业务流程、分析并高效设计整个价值链,以更好的了解和响应客户需求。ERP 是企业资源规划的简称,ERP 软件涵盖所有核心业务领…

ComplatebleFuture异步调用方法,喝茶你也可以很快

ComplatebleFuture的异步用法: ComplateFuture.supplyAsync()方法会将方法体里面的方法进行异步调用,不用一直等待; ComplateFuture.allof()方法用于等待所有complatebleFutrue方法执行完毕。

若依框架导入阿里OSS报错问题解决方案

1、首先使用终端查看java JDK版本号 java -version 输出结果: java version "1.8.0_361" Java(TM) SE Runtime Environment (build 1.8.0_361-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode) javac-version 输出结果: javac 1.8.0_361 如…

php---空合并运算符

在做PHP开发的过程中,在引入SDK做项目开发的时候,经常会遇到一些不常见的运算符,正好自己也学习一下。运行的结果:就比如上面看到的运算符 ?: 和 ?? 运算符和我们常见的三目运算符不同,但是也有点类似。 三目运算符是这样的:$abs = !empty($list) ? a : b;而空合并运…

玄机

第一章 应急响应-webshell查杀 靶机账号密码 root xjwebshell 1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 2.黑客使用的什么工具的shell github地址的md5 flag{md5} 3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx 4.黑客免杀马完整…

Spring Boot 基于 SCRAM 认证集成 Kafka 的详解

在本篇文章中,我们将探讨如何在Spring Boot应用中集成Kafka并使用SCRAM认证机制进行安全连接;并实现动态创建账号、ACL 权限、Topic,以及生产者和消费者等操作。一、说明 在现代微服务架构中,Kafka 作为消息中间件被广泛使用,而安全性则是其中的一个关键因素。在本篇文章中…

win系统下 由于管理员设置的策略,该磁盘处于脱机状态解决办法

1.运行:cmd 2.输入:DISKPART.exe 3.DISKPART> san 4.DISKPART> san policy=onlineall 5.DISKPART>list disk 6.DISKPART> select disk 1 7.DISKPART>attributes disk clear readonly 8.DISKPART>online disk

Ros2 Moveit2 之 在Riz2中可视化

本教程将向您介绍一个工具,通过在 RViz 中呈现可视化效果,该工具可以帮助您更轻松地了解 MoveIt 应用程序正在做什么。 先决条件 如果你还没有完成,请确保你已经完成了你的第一个项目hello_moveit中的步骤。这个项目假设你从上一个教程结束的地方开始。 步骤 1 添加依赖 mov…

后端开发学习敏捷需求--产品价值的定位

产品价值的定位 为什么要写这一系列文章2023年网上报名学习了,敏捷软件需求的培训课程 ,一直都没有进行回顾,回顾学习,总结 业务分析的能力偏弱,学习和了解关于业务需求相关的方法和理论 每一年都有一段时间的清醒期,不做点啥事情,容易迷茫和精神内耗 很多视角都是通过自…

模型剪枝大揭秘-以LeNet为例

本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18342820,如有侵权联系删除

免费领取云主机,在华为开发者空间玩转YOLOV3

摘要:YOLOv3(You Only Look Once version 3)是一种高效的目标检测算法,旨在实现快速而准确的对象检测。 本文分享自华为云社区《华为云开发者云主机体验【玩转华为云】》,作者: DS小龙哥。 一、前言 云主机是华为云为全球开发者打造的专属开发空间,汇聚了华为优质开发资…