在f1tenth仿真中如何实现更快速的跑圈-曲线分析篇

news/2024/5/8 11:21:24/文章来源:https://blog.csdn.net/ZhangRelay/article/details/130384727

本文使用蓝桥云课,即开即用,如果配置第三方课程资源,通常也在10分钟内完成。

效果如下:


全部参考资料如下:

蓝桥ROS之f1tenth案例学习与调试(失败)

蓝桥ROS之f1tenth案例学习与调试(成功) 

蓝桥ROS之f1tenth简单PID沿墙跑起来(Python) 

蓝桥ROS云课→一键配置←f1tenth和PID绕圈 

蓝桥ROS→f1tenth和PID绕圈←外传 

只需完成加粗博文即可完成基础配置。

如何利用蓝桥云课提升学习ROS机器人的效率 


本文只给出思路,不给源码,可以“自己动手丰衣足食”。

数学基础:

1 米/秒(米每秒)=3.6 千米/时(千米每小时)

实测极限速度8米/秒。直线或弧度小于10度的赛道。此速度不稳定。

可靠性高稳定跑完全程速度峰值6.2米/秒。

前轮转向角度控制量需要依据物理机械特性进行约束设定在左右45°之内。


给定控制算法如下:

#!/usr/bin/env python
from __future__ import print_function
import sys
import math
import numpy as np#ROS Imports
import rospy
from sensor_msgs.msg import Image, LaserScan
from ackermann_msgs.msg import AckermannDriveStamped, AckermannDrive#PID CONTROL PARAMS
kp = 1.0
kd = 0.001
ki = 0.005
servo_offset = 0.0
prev_error = 0.0 
error = 0.0
integral = 0.0
prev_time = 0.0#WALL FOLLOW PARAMS
ANGLE_RANGE = 270 # Hokuyo 10LX has 270 degrees scan
DESIRED_DISTANCE_RIGHT = 0.9 # meters
DESIRED_DISTANCE_LEFT = 0.85
VELOCITY = 1.5 # meters per second
CAR_LENGTH = 1.0 # Traxxas Rally is 20 inches or 0.5 metersclass WallFollow:""" Implement Wall Following on the car"""def __init__(self):global prev_time#Topics & Subs, Pubslidarscan_topic = '/scan'drive_topic = '/nav'prev_time = rospy.get_time()self.lidar_sub = rospy.Subscriber(lidarscan_topic, LaserScan, self.lidar_callback)self.drive_pub = rospy.Publisher(drive_topic, AckermannDriveStamped, queue_size = 10)def getRange(self, data, angle):# data: single message from topic /scan# angle: between -45 to 225 degrees, where 0 degrees is directly to the right# Outputs length in meters to object with angle in lidar scan field of view#make sure to take care of nans etc.#TODO: implementif angle >= -45 and angle <= 225:iterator = len(data) * (angle + 90) / 360if not np.isnan(data[int(iterator)]) and not np.isinf(data[int(iterator)]):return data[int(iterator)]def pid_control(self, error, velocity):global integralglobal prev_errorglobal kpglobal kiglobal kdglobal prev_timeangle = 0.0current_time = rospy.get_time()del_time = current_time - prev_time#TODO: Use kp, ki & kd to implement a PID controller for integral += prev_error * del_timeangle = kp * error + ki * integral + kd * (error - prev_error) / del_timeprev_error = errorprev_time = current_timedrive_msg = AckermannDriveStamped()drive_msg.header.stamp = rospy.Time.now()drive_msg.header.frame_id = "laser"drive_msg.drive.steering_angle = -angleif abs(angle) > math.radians(0) and abs(angle) <= math.radians(10):drive_msg.drive.speed = velocityelif abs(angle) > math.radians(10) and abs (angle) <= math.radians(20):drive_msg.drive.speed = 1.0else:drive_msg.drive.speed = 0.5self.drive_pub.publish(drive_msg)def followLeft(self, data, leftDist):#Follow left wall as per the algorithm #TODO:implementfront_scan_angle = 125back_scan_angle = 180teta = math.radians(abs(front_scan_angle - back_scan_angle))front_scan_dist = self.getRange(data, front_scan_angle)back_scan_dist = self.getRange(data, back_scan_angle)alpha = math.atan2(front_scan_dist * math.cos(teta) - back_scan_dist, front_scan_dist * math.sin(teta))wall_dist = back_scan_dist * math.cos(alpha)ahead_wall_dist = wall_dist + CAR_LENGTH * math.sin(alpha)return leftDist - ahead_wall_distdef lidar_callback(self, data):""" """error = self.followLeft(data.ranges, DESIRED_DISTANCE_LEFT) #TODO: replace with error returned by followLeft#send error to pid_controlself.pid_control(error, VELOCITY)def main(args):rospy.init_node("WallFollow_node", anonymous=True)wf = WallFollow()rospy.sleep(0.1)rospy.spin()if __name__=='__main__':main(sys.argv)

在完成实验1-4的基础上,修改f1tenth功能包,实现如下功能:

前轮转向角度控制量的曲线使用rqt中plot工具绘制。

原始:

曲线毛刺非常多

提速不改进:

曲线毛刺非常多,波动范围更大!比上一个曲线还要差 

改进1:

曲线波动范围大,但是已经有改善,并且毛刺大幅度降低 

改进2:

改善更为明显。

前轮转向角度控制量曲线的平滑度可以从上述四幅图的进行对比。

使用这些图表可以帮助改进算法。


通过控制量曲线进行算法改进和优化,提升局部规划器效果。 

f1tenth仿真转向角曲线绘制


同样的分析方法也可以用于两轮差速机器人:

 


AI提示(感觉基本不能用…………):

要提高F1赛车在比赛中的圈速,以下是一些可能的技巧和建议:

  1. 调整胎压:胎压是影响圈速的关键因素之一,赛车通常配备超级强大的轮胎,以提高抓地力和制动性能。要提高圈速,请确保您的轮胎压力保持在适当的水平。
  2. 调整悬挂:悬挂系统对于赛车的操控性和圈速表现有很大的影响。为了获得最佳性能,您应该根据比赛道路和天气条件,调整悬挂系统以提高赛车的稳定性和灵活性。
  3. 正确的进站策略:进站策略对于赛车的圈速也有很大的影响。在比赛中,您应该根据比赛形势和车队战术,选择合适的进站时机和方式,以获得最佳的圈速和竞争优势。
  4. 提高技术水平:熟练掌握基本驾驶技巧,例如正确的油门、刹车和换档操作,以及对赛道的熟悉程度,都是提高圈速的重要因素。
  5. 战术:战术可以在一定程度上影响圈速。在比赛中,您可以根据车队战术和对手表现,灵活运用技术和策略,以争取更多的机会和优势。

总之,要提高F1赛车在比赛中的圈速,需要综合考虑技术、战术和车队战略等多个因素。需要不断练习、尝试和调整,逐步提高自己的驾驶技能和竞争水平。

如果想要消除速度控制量曲线中的毛刺和曲线不平滑的现象,可以考虑以下几种方法:

  1. 调整进气量:如果进气量不均匀,可能会导致速度控制量曲线中出现毛刺和不平滑的现象。因此,您可以检查并调整空气滤清器和空气流量计的位置,以确保进气量的均匀性。
  2. 调整节气门:节气门的开度不均匀也可能导致速度控制量曲线中出现毛刺和不平滑的现象。您可以检查并调整节气门的位置,以确保开度的均匀性。
  3. 调整点火时间:点火时间不正确也可能会导致速度控制量曲线中出现毛刺和不平滑的现象。您可以检查并调整点火时间,以确保点火正时的准确性。
  4. 调整喷油量:喷油量不均匀也可能会导致速度控制量曲线中出现毛刺和不平滑的现象。您可以检查并调整喷油量,以确保油门响应的平稳性和曲线的平滑度。
  5. 调整进气温度:进气温度过高或过低都可能导致速度控制量曲线中出现毛刺和不平滑的现象。您可以检查并调整进气温度,以确保进气温度的适宜性和曲线的平滑度。

综上所述,调整以上因素可以消除速度控制量曲线中的毛刺和曲线不平滑的现象,提高赛车的性能和竞争力。

提高机器人巡线速度的方法有以下几种:

  1. 选择合适的无人机机型:根据不同的任务及线路环境特点,采用不同的机型进行作业,实现精准作业效果。
  2. 检查电池的数量与状态:在数量方面,电池数量与作业量要足够匹配。在电池状态方面,需要注意检查电池的外观是否有损坏、变形,电池接口的金属片是否存在破损、烧蚀等。
  3. 事先调查巡检线路的现场环境:出发前,可通过卫星图、地形图等多种资料,对所要巡视的线路的以下环境要素进行事先调查:地形条件状况、有无允许起降的场地、飞行空域有无遮挡物等,充分了解现场环境,还可对进一步的线路分段规划提供依据。
  4. 制定巡检飞行计划:在航线规划时,需要兼顾顺序安排、对于线路塔上关键部位(绝缘子、销钉或者螺母等)顺逆光的拍摄手法选择、曝光补偿的控制等。
  5. 采用多旋翼无人机倾斜摄影技术:可以从7个方面快速提升多旋翼无人机巡线效率:包括选择合适的无人机机型、检查电池的数量与状态、事先调查巡检线路的现场环境、制定巡检飞行计划、采用多旋翼无人机倾斜摄影技术、检查起降场地和飞行空域、以及对关键部位进行顺逆光拍摄等。

通过以上方法可以提高机器人巡线速度,但是需要注意,在提高速度的同时,要保证巡线的安全性和精准性。

为了降低机器人速度控制量曲线毛刺和控制不平滑的现象,可以采取以下措施:

  1. 选择合适的传感器:根据机器人所要检测的工件表面形状和尺寸,选择合适的传感器,并确保传感器的灵敏度和精度符合要求。
  2. 调整控制器参数:根据机器人所要执行的任务和环境条件,调整控制器的参数,如比例增益、积分增益和微分增益等,以提高机器人的控制精度和稳定性。
  3. 采用浮动加工技术:在机器人加工过程中,采用浮动加工技术,即将工件分为多个区域,对每个区域进行独立加工,然后将各个区域的加工结果拼接起来,以达到减少曲线毛刺的目的。
  4. 采用多轴加工技术:在机器人加工过程中,采用多轴加工技术,即将工件分为多个轴,同时对多个轴进行加工,以达到减少不平滑现象的目的。
  5. 优化加工程序:通过对加工程序进行优化,可以减少程序中的错误和不稳定因素,从而减少毛刺和不平滑现象的产生。
  6. 定期维护和保养:机器人的维护和保养工作对于其性能和稳定性至关重要,定期进行维护和保养可以有效地减少机器人故障的发生率,从而减少毛刺和不平滑现象的产生。

代码基本也是报废的:

#!/usr/bin/env python  import rospy  
from control_msgs.msg import FollowJointTrajectory, FollowJointTrajectoryPoint  
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint  rospy.init_node('laser_navigation_node')  # 定义PID参数  
kp = 1.0  # 比例常数  
ki = 0.1  # 积分常数  
kd = 0.1  # 微分常数  # 定义机器人末端执行器  
motor = rospy.get_param('~motor', bool)  
if not motor:  rospy.loginfo('No motor node provided')  exit()  # 定义目标位姿和机器人末端执行器  
target_pose = JointTrajectory()  
target_pose.joint_names = ['joint_1', 'joint_2', 'joint_3', 'joint_4', 'joint_5', 'joint_6']  
target_pose.positions = [0.0, 0.0, 10.0, 10.0, 0.0, 0.0]  # 初始化机器人末端执行器位姿  # 定义机器人初始位姿  
init_pose = JointTrajectory()  
init_pose.joint_names = ['joint_1', 'joint_2', 'joint_3', 'joint_4', 'joint_5', 'joint_6']  
init_pose.positions = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]  # 定义PID控制器  
def pid_controller(traj, kp, ki, kd, target_pose):  error = target_pose - traj  integral = error * kp  derivative = (error - integral) * kd  return error + integral + derivative  # 定义PID控制器的调用函数  
def run_laser_navigation():  rospy.loginfo('Starting laser navigation')  # 设置PID参数  kp = 1.0  ki = 0.1

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

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

相关文章

Salesforce官方_中文学习、考证资源

Salesforce将Trailhead描述为学习热门技能的有趣且免费的平台。该平台有助于缩小技能差距&#xff0c;是所有Salesforce用户的宝藏资源。 Trailhead适合所有学习者。它涵盖了适用于Salesforce任何角色的主题和学习模块&#xff0c;从管理员、开发人员、销售主管到最终用户。学…

第7章 “字典”

1.字典简介 字典是什么&#xff1f; 解答&#xff1a;与集合类似&#xff0c;也是一种存储唯一值的数据结构&#xff0c;但它是以键值对的形式来存储。(键值对是最重要的特性)在Es6中新增了字典&#xff0c;名为Map字典的常用操作&#xff1a;增删改查 const map new Map()/…

免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名

网站怎么接入chatGPT 要将ChatGPT集成到您的网站中&#xff0c;需要进行以下步骤&#xff1a; 注册一个OpenAI账户&#xff1a;访问OpenAI网站并创建一个账户。这将提供访问API密钥所需的身份验证凭据。 获取API密钥&#xff1a;在您的OpenAI控制台中&#xff0c;您可以找到您…

OSCP-Nickel(爆破pdf、本地http提权)

目录 扫描 HTTP 提权 扫描 FileZilla不接受匿名FTP登录。 端口21上的SSH和3389上的RDP很少是初始入口点,但是如果遇到一些凭据,可以记住这一点。 HTTP 打开Web浏览器并导航到端口8089和3333,用于的HTTP服务器。端口8089似乎是某种类型的开发环境。 单击一个按钮重定向到…

Tomcat 配置与部署

http 协议就是 http 客户端和 http 服务器之间通信的协议 , 而Tomcat 就是 java 圈子中最广泛使用的 http 服务器. 下载Tomcat Tomcat官网 Tomcat 的版本 , 和后续的 servlet 版本是强相关的 , 此处使用 tomcat 8 , 对应的 servlet 就是 3.1 下载一个 zip 压缩包解压缩即可 T…

输入 jupyter notebook 报错 ModuleNotFoundError: No module named ‘pysqlite2‘ 解决方案

今天在cmd命令行中输入jupyter notebook想要打开jupyter时&#xff0c;出现了以下问题&#xff1a;即找不到模块‘pysqlite2’。 找到出问题的文件“sessionmanager.py”&#xff0c;发现出问题的地方在于&#xff1a;尝试导入sqlite3没有导致失败 因此&#xff0c;以下是解决…

java反转字符串的方法

1、首先我们定义一个方法&#xff0c;用来反转字符串。用 public static void &#xff08;String&#xff09;方法初始化一个对象&#xff0c;然后使用 private static &#xff08;&#xff09;方法对该对象进行初始化&#xff0c;并检查是否有某个字符串和字符串本身相同&am…

复现Nginx 解析漏洞

目录 漏洞原理 漏洞复现 编译环境 制作图片马 一&#xff1a;随便弄一张图片 二&#xff1a;准备写一个.php文件&#xff0c;写上木马 三&#xff1a;合成图片马 上传图片马 修复漏洞 漏洞原理 1、 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fast…

科大讯飞版ChatGPT开始内测《讯飞星火》

科大讯飞版ChatGPT产品&#xff0c;提前交卷了&#xff01; 就在昨夜&#xff0c;讯飞骤然向开发者提供了内测通道&#xff0c;取名为讯飞星火认知大模型对外开启内测。 还有个神奇的英文名字Spark Desk&#xff0c;据说有“火花桌面智能助手”的意思。 申请的过程很简单。用…

leetcode21 - - 合并两个有序链表

文章目录 1.题目描述2.解题思路方法1&#xff1a;方法2&#xff1a; 1.题目描述 题目链接&#xff1a;力扣21&#xff0c;合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1&#xff1a;…

Docker安装mysql8.0文档

第一步需要安装Docker基础环境&#xff0c;具体可以看看这篇 docker基础篇 第二步&#xff0c;拉取mysql8.0的镜像 docker pull mysql:8.0 第三步&#xff0c;镜像启动和文件挂载 复制下面命令执行&#xff0c;33006是对外访问暴露的端口&#xff0c;当然你也可以设置为3306…

这个假期有这些游戏就不怕无聊了

1、塞尔达传说旷野之息 Switch端的优秀游戏体验不容错过&#xff01; 人气王《塞尔达传说》&#xff01; 被玩家誉为“唯一让人长大后有种回到童年的感觉的作品”。 豆瓣网友写道&#xff1a;“在雨夜&#xff0c;我在寺庙里看到了一条白龙划过天空&#xff0c;在岩壁上看到了…

SpringBoot拦截器的使用

Hi I’m Shendi SpringBoot拦截器的使用 简介 最近要实现一个全局对象的传递&#xff0c;在接口中直接通过增加函数参数来直接使用的这种方式 之前一直使用的是过滤器&#xff0c;但这种需求过滤器是没有办法实现的&#xff0c;过滤器可以给请求注入字符串&#xff0c;但不能…

JavaEE初阶学习:初识网络

1.网络发展史 1.独立模式 独立模式:计算机之间相互独立&#xff1b; 2.网络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成业务&#xff0c;就有了网络互连。 网络互连&#xff1a;将多…

yolov5半自动打标签(opencv版本),识别目标画框并将坐标信息保存在xml中

文章目录 1.yolov5预训练模型推理2. opencv边缘检测结果展示 yolov5训练数据集时&#xff0c;需要对数据进行打标签&#xff0c;可以通过两种方法进行半自动化打标签。 1.yolov5预训练模型推理 yolov5预训练模型&#xff1a;将待打标签的图片输入预训练模型中进行推理&#xf…

深入分析,Redis为什么这么快?

我们都知道Redis很快&#xff0c;它QPS可达10万&#xff08;每秒请求数&#xff09; Redis为什么这么快&#xff1f; 基于内存实现高效的数据结构合理的数据编码合理的线程模型虚拟内存机制 基于内存实现 我们都知道内存读写是比磁盘读写快很多的。Redis是基于内存存储实现的…

除了Figma,再给你介绍10款好用的协同设计软件

组织结构越来越复杂&#xff0c;团队中的每个人都有独特的技能、经验和专业知识。我们怎样才能让团队更好地合作&#xff1f;在这种情况下&#xff0c;协同设计应运而生。 UI的未来是协同设计&#xff01;如果你想把握未来的设计趋势&#xff0c;不妨从使用高效的协同设计软件…

Figma导出源文件的方法,用这个方法快速转换其它格式

市场上设计工具层出不穷&#xff0c;Sketch、AdobeXD、Axure、InVision、Figma、Pixso等都是优秀的设计工具&#xff0c;设计师经常面临如何从设计工具中导出文件的问题。 Figma软件的导出功能非常强大&#xff0c;因为轻量化体验受到很多设计师的喜爱。如何保存导出Figma源文…

一键免费部署你的私人 ChatGPT 网页应用

主要功能 在 1 分钟内使用 Vercel &#xff08;https://vercel.com/&#xff09;免费一键部署精心设计的 UI&#xff0c;响应式设计&#xff0c;支持深色模式极快的首屏加载速度&#xff08;~100kb&#xff09;海量的内置 prompt 列表&#xff0c;来自中文和英文自动压缩上下文…

【JavaScript】new命令精华总结

相关概念 对象是什么? 1.对象是单个实物的抽象 2.对象是一个容器&#xff0c;封装了属性和方法 属性是对象的状态&#xff0c;方法是对象的行为&#xff0c;把对象中的函数一般称为方法 构造函数 专门用来生成实例对象的函数&#xff0c;是对象的模板&#xff0c;第一个字…