碰撞检测 | 基于ROS Rviz插件的多边形碰撞检测仿真平台

news2024/12/23 10:21:22

目录

  • 0 专栏介绍
  • 1 基于多边形的碰撞检测
  • 2 碰撞检测仿真平台搭建
    • 2.1 多边形实例
    • 2.2 外部服务接口
    • 2.3 Rviz插件化
  • 3 案例演示
    • 3.1 功能介绍
    • 3.2 绘制多边形

0 专栏介绍

🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划算法轨迹优化实战,包括:曲线生成、碰撞检测、安全走廊、优化建模(QP、SQP、NMPC、iLQR等)、轨迹优化(梯度法、曲线法等),每个算法都包含代码实现加深理解

🚀详情:运动规划实战进阶:轨迹优化篇


1 基于多边形的碰撞检测

基于多边形的碰撞检测是游戏开发、物理模拟以及许多其他领域中的一个重要研究方向。在计算机图形学中,多边形是构建三维模型和场景的基本单位,多边形碰撞引擎有利于渲染优化、营造光照阴影和沙尘等效果。

在自动驾驶和机器人领域,多边形碰撞检测在保证规划控制安全性方面发挥了极大的作用。以自动驾驶系统为例,自车使用传感器(如激光雷达、摄像头、雷达等)来检测道路上的障碍物,识别和建模道路、车道线、交通标志等,在这个过程中,通常基于多边形构建障碍物的几何模型,并判断是否与车辆发生碰撞。

在这里插入图片描述

本文的目标就是搭建一个多边形构造仿真平台,为后续基于多边形的碰撞检测、TTC等算法提供验证环境

在这里插入图片描述

2 碰撞检测仿真平台搭建

2.1 多边形实例

本平台目前设计的多边形实例有:

  • 任意多边形
    在这里插入图片描述在这里插入图片描述
  • 矩形(支持任意角度)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
计划继续更新的实例包括:

  • N N N圆覆盖模型
  • 动态矩形
  • 动态圆形

2.2 外部服务接口

本文设计的仿真平台可以向外部程序提供多边形的具体信息,因此需要定义一个外部接口,这里采用自定义服务和消息的方式实现:

  1. 首先设计多边形请求服务

    ---
    PolygonStamped[] selection
    
  2. 接着设计多边形数据消息,包含头部帧和点数据

    # PolygonStamped.msg
    std_msgs/Header header
    
    Polygon polygon
    
    # Polygon.msg
    geometry_msgs/Point32[] points
    

通过上述接口串连其多边形数据,再设置服务器响应外部请求即可

bool PolygonSimulation::_callback(GetSelection::Request& /*req*/, GetSelection::Response& res)
{
  res.selection.reserve(polygons_.size());
  for (const auto& polygon : polygons_)
  {
    // Skip selections with fewer than 3 points
    if (polygon->size() < 3)
      continue;

    PolygonStamped polygon_stamped;
    polygon_stamped.header.frame_id = context_->getFixedFrame().toStdString();
    for (const Ogre::Vector3& pt : polygon->points())
    {
      geometry_msgs::Point32 msg;
      msg.x = pt.x;
      msg.y = pt.y;
      msg.z = pt.z;
      polygon_stamped.polygon.points.push_back(msg);
    }

    res.selection.push_back(polygon_stamped);
  }
  return true;
}

2.3 Rviz插件化

Rviz插件开发的详细教程详见:

  • ROS从入门到精通2-4:Rviz插件制作案例(以多点导航插件为例)
  • ROS2从入门到精通2-4:Rviz2插件制作案例(以工具栏和多点导航插件为例)

本文列举主要的步骤:

  1. 首先是CMakeLists.txt文件,因为Rviz实际上是采用QT开发的,所以和一般的ROS工程相比,要增加一些QT库的链接配置

    set(CMAKE_AUTOMOC ON)
    SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
    find_package(Qt5 COMPONENTS Core Gui Widgets UiTools REQUIRED)
    QT5_WRAP_CPP(QT_HEADERS ${MOC_HEADERS})
    set(QT_LIBRARIES Qt5::Widgets)
    
    ....
    
    target_link_libraries(${PROJECT_NAME}
      ${QT_LIBRARIES}
      ${catkin_LIBRARIES}
    )
    
  2. package.xml中配置插件导出

    <?xml version="1.0"?>
    <package format="2">
        <name>polygon_selection</name>
        <version>0.0.0</version>
        <description>Rviz polygon simulation tool</description>
        <maintainer email="913982779@qq.com">Winter</maintainer>
        <license>TODO</license>
    
        <buildtool_depend>catkin</buildtool_depend>
        <depend>roscpp</depend>
        <depend>pluginlib</depend>
        <depend>geometry_msgs</depend>
        <depend>actionlib_msgs</depend>
        <depend>rviz</depend>
        <depend>std_msgs</depend>
        <depend>message_generation</depend>
        <depend>message_runtime</depend>
    
        <export>
            <rviz plugin="${prefix}/polygon_simulation_plugin.xml"/>
        </export>
    </package>
    
  3. 配置插件说明文件

    <library path="lib/libpolygon_simulation">
      <class name="polygon_simulation/PolygonSimulation" type="polygon_simulation::PolygonSimulation" base_class_type="rviz::Tool">
        <description>
          Rviz tool for collecting a polygon selection boundary
        </description>
      </class>
    </library>
    

3 案例演示

3.1 功能介绍

通过Rviz2->Add New Tool添加Polygon Simulation插件

s
添加完毕后在Tool Properties面板可以看到Polygon Simulation插件的模板,其中Visualization是可视化属性,包括点的颜色大小、线的颜色、是否显示标记等;Polygon mode可以下拉选择采用哪种多边形实例

在这里插入图片描述

3.2 绘制多边形

以矩形为例,按住鼠标左键可以拉出一个矩形,在合适的位置松开,此时可以通过右侧面板的数值属性进行微调

在这里插入图片描述
比如我们调整一个45度的正方形出来

在这里插入图片描述
觉得满意后,点击鼠标右键确认绘图,产生标号

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ryzen 9000X3D还没来,先等来了R5 7600X3D

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; R5 7600X3D或于下月初推出&#xff0c;6核12线程102MB缓存 昨天我们刚刚聊过Ryzen 9000在欧洲部分地区开售即打折的“骚操作”&#xff0c;上周我们也曾分享过R9 9900X和R9 9950X首周在德不过50…

智慧水务平台主要帮助水司解决哪些问题,是如何解决的?

在快速发展的现代社会&#xff0c;水资源管理与服务面临着前所未有的挑战。传统水务管理模式已难以满足日益增长的需求与高标准的服务要求。正是基于此&#xff0c;我们隆重推出“智慧水务平台”&#xff0c;专为水司量身定制&#xff0c;一键式解决运营中的各类难题&#xff0…

easy click安卓版纯本地离线文字识别插件

目的 easy click是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。easy click也包含图色功能&#xff0c;识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解下更优…

EasyExcel_通过模板导出(多sheet、列表、图片)

文章目录 前言一、EasyExcel是什么&#xff1f;二、模板样式调整三、使用步骤1.引入jar包2.方法示例2.1 Controller&#xff1a;2.2 Service&#xff1a;2.3 ServiceImpl:2.4 合并策略&#xff1a;2.5 对应DTO 总结 前言 产品今天提了个需求&#xff0c;大概是这样的&#xff…

中秋节月饼销售利用106短信群发平台业绩翻倍案例分析

在中秋节这一传统佳节&#xff0c;月饼作为节日的标志性食品&#xff0c;其销售市场竞争尤为激烈。为了在众多品牌中脱颖而出&#xff0c;不少月饼销售企业开始探索创新的营销方式。其中&#xff0c;利用106短信群发平台进行精准营销&#xff0c;成为众多企业实现业绩翻倍的有效…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

思科设备静态路由实验

拓扑及需求 网络拓扑及 IP 编址如图所示&#xff1b;PC1 及 PC2 使用路由器模拟&#xff1b;在 R1、R2、R3 上配置静态路由&#xff0c;保证全网可达&#xff1b;在 R1、R3 上删掉上一步配置的静态路由&#xff0c;改用默认路由&#xff0c;仍然要求全网可达。 各设备具体配置…

UE5.4 - 内容浏览器

目录 一. 简介 二. 打开方式 1.顶部菜单栏打开 2.工具栏创建 3.底部工具栏按钮 三.界面详细介绍 1.导航栏 2.源面板 3.集合 4.筛选器 ​编辑 5.搜索栏 6.资产视图 7.设置按钮 四. 开发者内容 一. 简介 一种你可以用于查看、管理和处理项目中所有资产的工具。 二…

java 变量 基础类型及其转换

为什么需要变量 一个程序就是一个世界 变量是程序的基本组成单位 //不论是使用那种高级程序语言编写程序,变量都是其程序的基本组成单位,比如 //变量有三个基本要素(类型名称值) class Test{public static void main(String[] args) {//定义了一个变量,类型int整型,名称a,值…

哈工大 | 乐聚人形机器人 | 最新演讲

笔者是清华在读研究生&#xff0c;主要关注人形机器人、具身智能。将持续分享行业前沿动态、学者观点整理、论文阅读笔记、知识学习路线等。欢迎交流 最近听了乐聚的最新进展演讲&#xff0c;以下是学习整理。部分图截自直播&#xff0c;若模糊望见谅 基本信息&#xff1a; 【…

光影漫游者:创新球形设计,重新定义移动空间—轻空间

在现代城市中&#xff0c;空间的灵活性和视觉吸引力变得越来越重要。为满足多样化的需求&#xff0c;“光影漫游者”以其独特的球形设计和引人注目的视觉效果&#xff0c;成为了移动空间解决方案的新标杆。无论是商业活动、文化展览&#xff0c;还是沉浸式体验&#xff0c;“光…

文档翻译软件哪个好?这5款文档翻译器还不错

相信大家都有过看着大量外文文档资料而无从下手的经历&#xff0c;曾几何时&#xff0c;我也和大家一样深深困于这种烦恼之中。 好在后来&#xff0c;被我发现了5款趁手的文档翻译器&#xff0c;这才从根本上解决了不少麻烦~今天借此机会也将它们一并整理出来分享给大家&#…

仪器校准周期建议多长时间一次?仪器无校准后果怎么样?

自从国内建立计量以来&#xff0c;仪器计量校准就一直是企业定期进行的一种设备维护工作。定期进行校准已经是企业墨守成规的习惯&#xff0c;但是对于仪器校准周期是多久&#xff0c;具体多久校准一次&#xff0c;大家却不是很清楚&#xff0c;那么仪器校准周期建议多长时间一…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加&#xff0c;这次是引入thymeleaf渲染引擎。 使用这个引擎的很多&#xff0c;主要是以下几个优点&#xff1a; Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

华普微邀您共聚 2024 elexcon 深圳国际电子展!

elexcon2024深圳国际电子展将于2024年8月27日至29日在深圳会展中心&#xff08;福田&#xff09;开幕。汇聚全球优质品牌厂商齐聚现场&#xff0c;打造电子全产业链创新展示、一站式采购及技术交流平台。集中展示集成电路、嵌入式系统、电源管理/功率器件、电子元件与供应链、O…

气膜馆:亲子乐园中的新兴娱乐空间—轻空间

在亲子乐园中&#xff0c;气膜馆作为一种新兴的娱乐空间&#xff0c;凭借其独特的设计和灵活的功能&#xff0c;成为了孩子和家长们的理想去处。这个轻盈而充满趣味的空间&#xff0c;不仅让孩子们尽情玩耍&#xff0c;也为家长提供了舒适的陪伴环境。 全天候的舒适体验 气膜馆…

AOP+ 自定义注解 +SpringElExpress自研缓存组件

AOP 自定义注解 SpringElExpress自研缓存组件 背景前置知识改造代码 背景 思考下这段代码&#xff0c;想想项目中是不是到处存在 先查缓存&#xff0c;缓存里面有&#xff0c;直接返回&#xff1b;缓存没有&#xff0c;查数据库&#xff0c;并更新到缓存 思考&#xff1a;如何…

你遇到过哪些触发NPE的代码场景?

你遇到过哪些触发NPE的代码场景&#xff1f; NPE如何处理NPE 在Java编程实践中&#xff0c;空指针异常&#xff08;NPE&#xff09;是开发过程中常见的障碍&#xff0c;它不仅阻碍了代码的正常运行&#xff0c;还常常成为系统不稳定性的根源。那么如何识别那些潜藏于代码深处的…

6个你应该尝试Lens.org的理由:一个免费的文献可视化和专利网站

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 最近发现的一个免费的文献检索工具Lens.org介绍给大家&#xff0c;相比其他文献检索工具web of science、Scopus等&#xff0c;独到之处在于它对于搜索结果全面的可视化呈现效…

ubuntu右上角没有小键盘图标

这个比较奇怪&#xff0c;一开始好好的&#xff0c;用着用着就不行了。网上解决方案比较多&#xff0c;大多数能解决一部分问题。 1.设置“输入法系统” 2.在终端运行 sudo killall ibus-daemon&#xff08;结束进程&#xff09; bus-daemon -d&#xff08;重启ibus&#xff0…