优美的曲线(含蝴蝶线)-CoCube

news2024/11/25 22:39:19

复现如下这篇:

优美的曲线-turtlesim


两段视频:

优美的曲线-CoCube

butterfly蝴蝶曲线之CoCube篇


如何更深入分析,获得更高精度曲线呢?

对比下面两幅图:

尤其需要注意右图,右下角。

什么原因导致这个控制量波动?

调整控制器参数后。

同样注意右下角:

参数调整对于控制器性能的影响也是非常显著的。

这也就是在机器人系统中为何要充分掌握好,反馈控制器设计的各种理论和方法。


蝴蝶线:

    goal_x=9.5+2.0*sin(curve_t/200.0)*(exp(cos(curve_t/200.0))-2.0*cos(curve_t/50.0)-pow(sin(curve_t/2400.0),5));
    goal_y=9.5+2.0*cos(curve_t/200.0)*(exp(cos(curve_t/200.0))-2.0*cos(curve_t/50.0)-pow(sin(curve_t/2400.0),5));

一个有bug需修改的移动到目标点的示例代码:

#include "ros/ros.h"
#include "turtlesim/Pose.h"
#include "geometry_msgs/Twist.h"
#include "math.h"
 
#include <sstream>
 
ros::Subscriber sub;
ros::Publisher pub;
float goal_x = 2;
float goal_y = 2;
 
void sendVel(const turtlesim::Pose::ConstPtr& data){
    ros::NodeHandle n;
 
    pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",100);
 
    float curr_x = data->x;
    float curr_y = data->y;
    float curr_ang = data->theta;
 
    float dist = sqrt(pow(goal_x-curr_x,2) + pow(goal_y-curr_y,2));
    std::cout << "Distance = " << dist << std::endl;
 
    if(dist > 0.01){
        double ang = atan2((float)(goal_y-curr_y),(float)(goal_x-curr_x));
 
        std::cout << "Curr_ang = " << curr_ang << " | ang = " << ang << std::endl;
 
        geometry_msgs::Twist t_msg;
 
        t_msg.linear.x = 1.0*(dist);
        t_msg.angular.z = 4.0*(ang-curr_ang);
 
        pub.publish(t_msg);
    }
    else
    {
    	std::cout << "Mission Completed" << std::endl;
    	std::cout << "Please enter new coordinates" << std::endl;
    	std::cout << "Please enter goal_x:" << std::endl;
    	std::cin >> goal_x;
    	std::cout << "Please enter goal_y:" << std::endl;
    	std::cin >> goal_y;
    }
 
}
 
int main(int argc, char **argv){
    ros::init(argc,argv,"goToGoal");
 
    ros::NodeHandle n;
 
    sub = n.subscribe("/turtle1/pose",100,sendVel);
 
    ros::spin();
 
 
    return 0;
}

机器人CoCube沿着这些点走起来,轨迹就是一条连续的曲线。

它的足迹就是依据数学公式描述之优美的曲线。

如下这篇是点:

从开环到闭环的旅程-CoCube


好算法好参数,对于机器人轨迹跟踪而言非常重要。

这些和实际系统有何关联呢?

迷宫逃离的问题-CoCube

将轨迹跟踪算法用于上图红色轨迹线,就可以实现机器人穿越迷宫哦。 


相关算法不断完善,就可以用于下图:

这类地图+动态环境识别,如果都能处理好,一个简易的自动导航机器人就完工啦。 


下一讲,不用下面这样的环境了:

目标实现不可能一帆风顺,在自由的环境中随心所欲的留下自己的足迹。

一定会遇到各种艰难险阻,有可预知的,静态障碍物,或不可预知的,动态障碍物,或者两者皆有。

怎么办? 

^_^ 


参考引用:

复杂环境移动机器人路径规划与轨迹跟踪研究
罗敏  
【摘要】:随着世界各国经济和科学技术的飞跃发展,移动机器人的应用领域越来越广泛,其应用场景也从室内环境拓展到了各种复杂环境,如野外、水下、空中甚至外太空等。目前,对于复杂环境的机器人系统仍存在许多尚待研究的课题。本文针对环境全局信息已知、地面崎岖不平的复杂环境条件下的轮式机器人的路径规划和轨迹跟踪控制技术进行研究。本文建立了崎岖地面的环境模型,针对曲面路径规划算法的时间复杂度改进问题,提出了多尺度技术。针对曲面路径规划算法的精度改进问题,提出了曲面的二维等效展开技术。在已规划的崎岖地面最优路径的基础上进行了曲面轨迹跟踪控制研究,在基于力矩受限的约束条件下,提出了基于梯度下降参数优化法的调节时间指标和最大力矩导数的优化改进方法。并对复杂环境下崎岖地面的不平性和机器人拐弯等产生的不确定性干扰影响进行了轨迹跟踪控制算法研究和分析。主要工作如下:首先,针对曲面轮式机器人的路径规划,提出了减小路径规划算法时间复杂度的多尺度图法。常用路径规划算法的时间复杂度会随着规划场景的节点规模增大呈指数性增长。对于复杂大规模场景的崎岖地面规划,运用这类路径规划算法时的时间成本代价太大。本文提出的多尺度法,通过在粗-细尺度图上求取最优路径,减小了节点数增多对时间复杂度增长的影响,从而减小了路径规划算法的时间成本。崎岖地面的节点规模越大,多尺度法在时间复杂度上的改善效果越好。本文还将多尺度法拓展应用到了多机器人的路径规划上。其次,针对曲面轮式机器人的路径规划,提出了减小路径规划算法的路径长度误差的二维等效展开方法。由于传统路径规划算法通常基于节点间的欧几里得距离公式计算最优路径,将传统算法应用于曲面最优路径规划时,曲面上节点之间的距离和节点间的空间欧几里得距离之间存在误差。二维等效展开方法通过计算二维等效曲面上的路径长度,减小了路径规划算法的最优路径长度误差。崎岖地面的凹凸不平度越大或崎岖地面的节点规模越大,二维等效展开方法在计算曲面最优路径长度时的误差改善效果越好。本文将二维等效展开方法也拓展应用到了多机器人的路径规划上。然后,针对曲面轮式机器人的轨迹跟踪,提出了具有力矩约束的调节时间优化方法。由于通常的轨迹跟踪控制算法设计得到的输入力矩常常超过实际应用中的最大饱和值,使得轨迹跟踪算法的实用性变差,所以在算法设计时应该控制输入力矩的峰值大小。减小力矩通常会牺牲系统调节时间指标,设计时不应因控制力矩使得调节时间过大而使算法无法实际应用。本文提出的具有力矩约束的调节时间优化法将输入力矩最大值控制在期望值上,同时得到尽可能小的调节时间,保证了算法的实用性。该优化方法通过将输入力矩最大值减小到理想的期望值上,节约了移动机器人运行时所需要的能源。输入力矩峰值的减小,也降低了机器人电机运行所需的功率,因而减小了电机等机械设备的物理尺寸。最后,针对曲面轮式机器人轨迹的跟踪,提出了具有力矩约束的力矩导数最大值优化方法。通常的轨迹跟踪算法设计得到的输入力矩在施加力的初始时刻会出现时间很短的突然变化很大的冲击负荷,这种冲击负荷对移动机器人的电力设备和机械结构都会产生危害,影响设备的使用寿命。力矩导数最大值优化方法在限制力矩最大值和系统调节时间的基础上,尽量地减小系统的最大力矩变化率,让机器人启动的起步过程平滑,降低了启动过程中的冲击负荷,减小了对机器人的电力设备和机械设备的负荷要求和机械尺寸要求。对输入力矩导数的最大值的优化,使得需要的力矩输入很小,可以有效地节约能源。
 


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

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

相关文章

一个元素纯CSS实现开关按钮【介绍box-shadow、单边或多重阴影、appearance属性】

借助checkbox表单元素、:checked伪类、::before/::after伪元素&#xff0c;就可以只需一个input[type"checkbox"]元素&#xff0c;通过纯CSS实现Switch开关效果的按钮。 主要用到的属性&#xff1a; appearance 默认css元素样式box-shadow 阴影效果transition css动…

ICG maleimide, ICG-MAL,2143933-81-5,ICG和PEG链接可在体内长循环.

英文名&#xff1a;ICG maleimide ICG-MAL CAS&#xff1a;2143933-81-5 分子式: C51H56N4O6S 分子量: 853.09 外 观&#xff1a;绿色粉末 溶解度&#xff1a;二氯甲烷 纯 度&#xff1a;95% 结构式&#xff1a; ICG is a tricarbocyanine-type dye with NIR-absorb…

Jenkins自动化测试Robot Framework详解

目录 1. Robot Framework 概念 2. Robot Framework 安装 3. Pycharm Robot Framework 环境搭建 4. Robot Framework 介绍 5. Jenkins 自动化测试 总结 重点&#xff1a;配套学习资料和视频教学 1. Robot Framework 概念 Robot Framework是一个基于Python的&#xff0c;…

MySQL——怎么给字符串字段加索引

现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引&#xff0c;是本篇文章要讨论的问题。 假设&#xff0c;现在维护一个支持邮箱登录的系统&#xff0c;用户表是这么定义的&#xff1a; mysql> create table SUser( ID big…

Hive 分析银行转账风险

文章目录创建数据源基于转账记录&#xff0c;计算 7 天内各个账号的转账金额找出相同收付款人 5 天内连续转账3次或以上的记录创建数据源 数据来源&#xff1a;数据源 drop table transfer_log;CREATE TABLE transfer_log ( log_id bigint, -- idlog_ts timestamp, -- 操作时…

128-152-spark-核心编程-源码

128-spark-核心编程-源码&#xff08;主要以了解基本原理和流程为主&#xff09;&#xff1a; 总体相关 ​ 1.环境准备(Yarn 集群) ​ (1) Driver, Executor ​ 2.组件通信 ​ (1) Driver > Executor ​ (2) Executor > Driver ​ (3) Executor > Executor ​ 3.应用…

Unity异步加载AB包

Unity异步加载AB包写在前面效果关键讲解项目地址写在后面写在前面 最近项目需要在Unity中完成一个非常耗时的工作&#xff0c;所以学习了下异步加载的流程&#xff0c;这里做了一个demo&#xff0c;异步加载AB包&#xff0c;其实异步加载场景等&#xff0c;原理差不多。 效果…

Tomcat的Maven插件使用方法(在idea里面运行Tomcat)

目录 一、概述 二、下载和导入插件 三、测试使用方式 四、总结 一、概述 使用这个插件可以快速的运行Tomcat&#xff0c;比在本地配置快得多。 二、下载和导入插件 1.下载插件Maven Helper ps&#xff1a;已经有下载过这个插件的可以跳过此步骤 &#xff08;1&#xff…

一、导论——可解释性机器学习(DataWhale组队学习)

目录导言一、什么是可解释人工智能?二、学可解释机器学习有什么用?2.1学习可解释机器学习的原因2.2 Machine Teaching :人工智能教人类学习2.3 细粒度图像分类2.4前沿AI三、本身可解释性好的机器学习模型四、传统机器学习算法的可解释性分析五、卷积神经网络的可解释性分析5.…

前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)

HTML常用标签 我们可以分为三类&#xff1a; 1.块级标签 2.行级标签 3.行块级标签 一、块级标签 1.1 h系类标签 标题标签 H1~h6 大到小 H1 在同一个页面中只能使用一次 其他标签可以重复 特点&#xff1a;默认宽度100% 高度自适应 独立成行 自带间距加粗 <body><…

java计算机毕业设计ssm制造型企业仓储管理系统i0180(附源码、数据库)

java计算机毕业设计ssm制造型企业仓储管理系统i0180&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&…

[附源码]计算机毕业设计的项目管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

基于小波变换的图像压缩解压缩的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 图像压缩的类别 对于图像压缩&#xff0c;主要有两类方法&#xff1a;无损的图像压缩以及有损的图像压缩&#xff0c;分别称为lossless image compression and lossy image compression。 对于无…

[附源码]Node.js计算机毕业设计动漫网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

第37篇 网络(七)TCP(一)

导语 TCP即TransmissionControl Protocol&#xff0c;传输控制协议。与UDP不同&#xff0c;它是面向连接和数据流的可靠传输协议。也就是说&#xff0c;它能使一台计算机上的数据无差错的发往网络上的其他计算机&#xff0c;所以当要传输大量数据时&#xff0c;我们选用TCP协议…

ssm+Vue计算机毕业设计校园生活服务预约管理系统(程序+LW文档)

ssmVue计算机毕业设计校园生活服务预约管理系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;…

spring切入点表达式(一)

前面写到切入点表达式&#xff0c;如果把全部方法都作为切入点的话&#xff0c;用execution(* *(..))表达式&#xff0c;这个表达式代表什么意思呢&#xff1f; public void login (String name,String address){} * * ( . . ) * *(..)对应方法如上图 * -------->代表修…

【GRU回归预测】基于鲸鱼算法优化门控循环单元WOA-GRU神经网络实现多输入单输出回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

网络协议—应用层的HTTPS协议

用 HTTP 协议&#xff0c;看个新闻还没有问题&#xff0c;但是换到更加严肃的场景中&#xff0c;就存在很多的安全风险。例如&#xff0c;你要下单做一次支付&#xff0c;如果还是使用普通的 HTTP 协议&#xff0c;那你很可能会被黑客盯上。例如在点外卖的环境中&#xff0c;发…

面试题 —— 真实面试题分享

文章目录 一、对BFC的理解。二、CSS中”::“和”:”的区别&#xff1f;三、对vue生命周期的理解&#xff1f; 四、vue组件通信的方式 五、vue中给data中的对象添加一个新的属性会发生什么&#xff0c;如何解决? 六.微信小程序组件的生命周期 七、javascript原型与继承的理解…