具有平滑正曲线边界的一般凸体的精确闭式闵可夫斯基研究(Matlab代码实现)

news2024/11/15 11:42:35

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

欧几里得空间的闭式参数公式,边界是平滑的,并且每个点都有正截面曲率。在这些条件下,每个边界点的位置与表面法线之间存在唯一的关系。

主要结果表示为两个定理:

  • 定理 1(文章中的定理 4.1):使用每个表面点的单位法向量直接参数化闵可夫斯基和。虽然在数学上表达起来很简单,但这种参数化并不总是实用的计算方式;
  • 定理 2(文章中的定理 4.3):使用未归一化的梯度推导出一个更有用的参数闭式表达式。

在两个椭球体的特殊情况下,建议的表达式与以前使用几何解释导出的表达式相同。为了检验结果,对两个超二次体之间的闵可夫斯基和进行了数值验证和比较。

讨论并演示了两种应用:

  • 在运动规划问题中产生配置空间障碍;
  • 提高基于优化的碰撞检测算法的性能。

📚2 运行结果

  

  

  

  

  

这里仅展现部分运行结果。 

部分代码:

close all; clear; clc;

add_paths();

% Robot
N_vtx = 50;
robot = SuperEllipse([5*rand, 3*rand, rand, 0, 0, 0, pi*rand, N_vtx]);
robot_config = [robot.a, robot.eps, robot.tc', robot.ang];

% Generate environment
N = [1,10,50,200,500,1e3,5e3,1e4];
% N = [1,10,50,200,500];
N_ang = 50;
c_obs = cell(1,length(N));
obstacle = cell(1,length(N));
obs_config = cell(1,length(N));

run_time = zeros(1,length(N));

%% Main routine
disp('****************************************************************')
disp('Application on configuration-space obstacle generations in SE(2)')
disp('****************************************************************')
for i = 1:length(N)
    disp(['Number of obstacles: ', num2str(N(i))])
    
    [obstacle{i}, obs_config{i}] = generate_obstacle(N(i));
    
    % Minkowski sums
    mink = cell(N(i), N_ang);
    ti = tic;
    for k = 1:N_ang
        robot_ang = (k-1)*pi/N_ang;
        for j = 1:N(i)
            minkObj = MinkSumClosedForm(robot, obstacle{i}{j},...
                rot2(robot_ang), rot2(obstacle{i}{j}.ang));
            m1 = robot.GetGradients();
            mink{j,k} = minkObj.GetMinkSumFromGradient(m1) +...
                obstacle{i}{j}.tc;
        end
    end
    run_time(i) = toc(ti);
    
    c_obs{i} = mink;
end

%% Plots
figure; hold on; grid on; axis off;
idx = 5;
bd = 220;

for i = 1:N(idx)
    % obstacles in workspace
    obstacle = SuperEllipse([obs_config{idx}(i,1:3), 0,...
        obs_config{idx}(i,4:end), N_vtx]);
    obstacle.PlotShape('k');
end

figure; hold on; grid on; axis off;
for i = 1:N(idx)
    % obstacles in workspace
    obstacle = SuperEllipse([obs_config{idx}(i,1:3), 0,...
        obs_config{idx}(i,4:end), N_vtx]);
    obstacle.PlotShape('k');
    
    for k = 1:5:N_ang
        % c-obstacles
        robot_ang = (k-1)*pi/N_ang;
        plot3(c_obs{idx}{i,k}(1,:), c_obs{idx}{i,k}(2,:),...
            robot_ang*ones(1,50), 'r-', 'LineWidth', 0.1)
        
        % arena boundary
        arena = [[-bd;-bd;robot_ang], [-bd;bd;robot_ang],...
            [bd;bd;robot_ang], [bd;-bd;robot_ang]];
        patch(arena(1,:), arena(2,:), arena(3,:), 'w')
    end
end

xlabel('x')
ylabel('y')
zlabel('\theta')

figure; hold on;
plot(N, run_time);

%% Subroutine for generate N random obstacles
function [obstacle, obs_config] = generate_obstacle(N)
obs_a = 10*rand(2,N);
obs_eps = 2 * rand(1,N);
obs_taper = zeros(1,N);
obs_tx = 200 * (2*rand(2,N)-1);
obs_th = pi * rand(1,N);

obstacle = cell(1,N);
for i = 1:N
    obstacle{i} = SuperEllipse([obs_a(:,i)', obs_eps(i), obs_taper(i),...
        obs_tx(1,i), obs_tx(2,i), obs_th(i), 50]);
end

obs_config = [obs_a; obs_eps; obs_tx; obs_th]';
end

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

 [1]Ruan, S. and Chirikjian, G.S., 2021. Closed-Form Minkowski Sums of Convex Bodies with Smooth Positively Curved Boundaries. Computer-Aided Design, p.103133. 

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

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

相关文章

Minecraft 1.19.2 Forge模组开发 04.动画效果物品

我们本次实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Forge模组开发 03.动画生物实体 1.首先我们要使用geckolib制…

(三)操作系统的运行环境

文章目录一、操作系统的运行机制1. 时钟管理2. 中断机制3. 原语4. 系统数据结构5. 系统调用二、操作系统体系结构1. 传统的操作系统结构(大内核)第一代:无结构OS第二代:模块化结构OS:模块-接口法OS第三代:分…

[附源码]计算机毕业设计springboot学习帮扶网站设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

坦克大战②

1. 我方坦克发射单颗子弹 当发射一颗子弹后,就相当于启动一个线程来控制它的位置坐标;Hero[我方坦克]有子弹的对象,当按下J时,就创建一个发射子弹的线程,通过坐标变化让子弹不停的移动,形成一个射击的效果&…

redis 集群搭建的三种方式

文章目录一、Redis主从二、Redis哨兵三、Redis集群一、Redis主从 二、Redis哨兵 三、Redis集群 下载redis wget http://download.redis.io/releases/redis-5.0.3.tar.gz解压redis tar zxvf redis-5.0.3.tar.gz进行重命名 mv redis-5.0.3 redis安装gcc yum install gcc进入red…

如何学习一门技术

如何学习一门技术 同样的生活,在你经历了一些意外和不如意之后,你再回过头来看,之前你所抱怨的生活其实是一个蛮不错的生活。 罗翔:每一个人都应该拥有学习的能力和权力,真正的知识要能走出书斋,去影响每…

StarkNet 性能路线图

目录 前言 区块限制:Validity Rollups vs L1 为什么 L1 吞吐量有限? 为什么相同的障碍不影响validity rollups? Sequencer 并行化 Cairo-VM 的新 Rust 实现 Rust 对 sequencer重新实现 Provers呢? Summary 参考 前言 St…

详解设计模式:迭代器模式

迭代器模式(Iterator Pattern)也被称为游标模式(Cursor Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。是一种最简单也最常见的设计模式。 迭代器模式 可以让用户透过特定的接口巡访容器中的每一个元素而不用…

HTML5期末大作业:美食网页主题网站设计与实现——HTML+CSS+JavaScript月饼美食食品企业网站html模板9页面

👨‍🎓静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的…

[附源码]计算机毕业设计校园运动会管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux基本工具——vim

Linux编辑器vim什么是vimvim的三种常用模式vim的基本操作命令模式插入模式底行模式搭配vim环境sudo怎么才能让普通用户使用什么是vim vim是linux下一款功能强大,多模式的编辑器。 现阶段有13种模式。 这就是进入vim的方式。 vim的三种常用模式 命令模式 我们第一…

CentOS7 编译安装最新的Linux Kernel 6.0 rc3

哪个男孩不想手动编译一份自己的内核呢?安装编译环境 CentOS7安装必要的包 yum groupinstall "Development Tools" -y && yum install openssl-devel -y && yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-…

Java核心技术卷Ⅰ-第四章对象和类

重点 1.使用预定义类 2.方法参数 3.对象构造 4.包 5.类设计技巧 1.使用预定义类 一个源文件只能有一个公共类,可以有任意数目的非公共类可以使用通配符调用Java编译器:javac Test*.java使用var声明局部变量就不用担心0、0L和0.0之间的区别,因…

找出链表中间结点的三种解法

初阶链表刷题注意!!!学习的是解题的思维! 找出链表的中间结点(链接在末尾) 解题思路 数组解法 由于链表不能通过下标访问对应的结点,所以我们将所有的结点存储在数组中,这样就可以通…

测试开发怎么学?

随着互联网行业的高速发展,快速高质量的产品版本迭代成为企业始终立于不败之地的迫切需求,而在短期迭代的快节奏中.传统测试工作面对更大压力,无法持续提供高效率高质量的人力支撑,所以越来越多的企业需要技术更为全面的测试开发工程师。 测试开发本质上属于测试,区…

【数据结构】二叉树链式结构的实现

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:数据结构 文章目录一、二叉树的链式存储二、二叉树链式结构的实现结构设计手动构建二叉树前序遍历中序遍历…

游戏思考26:游戏服务器压力测试文档(最近在忙这个,这个会更新频繁,12/03未完待续)

文章目录一、压力测试关注点二、计算最耗时的加载操作1)从数据库读取数据,对加载的类型进一步划分各种类型,计算最耗时操作2)查看CPU随着在线人数的变化所占百分比3)查看内存变化4)备注一、压力测试关注点 …

【C语言字符串】一道题检验你的字符串学习情况

作者:匿名者Unit 目录 一.字符串引言1.字符串基础二.洛谷P5734详解1.字符串相关库函数(1) strcpy函数 (2) strcat函数 (3)strstr函数 2.题目讲解一.字符串引言 1.字符串基础 字符串通常以\0作为…

008. 子集

1.题目链接: 78. 子集 2.解题思路: 2.1.题目要求: 给一个元素各不相同的数组 nums,返回各种可能的子集(子集不能重复) 比如: 输入:nums [1,2,3] 输出:[[],[1],[2],[…

做了8年前端,感谢那些优秀的后端,陪伴我工作,教会我成长

☆ 前段时间由于一时的头脑发热,写了一篇《做了8年前端,细说那些曾经让你浴霸不能的后端》的博客,虽然每个细节也都属实吧,但始终是一些负能量的东西,建议大家不要去看了,今年互联网情况已经这样了&#xf…