栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pygame轨迹跟踪仿真(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pygame轨迹跟踪仿真(一)

本文将讲解我的部分关键pygame轨迹跟踪仿真代码,想看完整的源码可以去下方的程序源码开源地址处领取,觉得好的话记得给我star,点赞哦~ 使用我的开源代码时请引用我的文章并表明出处,不得盗用! 一、所用环境和基础(程序源码开源地址)
  1. 一台电脑
  2. vscode
  3. python3.8.5
  4. 熟悉pygame模块的基本应用,pygame官网
二、常量设置
# 屏幕大小的常量
SCREEN_RECT = pygame.Rect(0, 0, 720, 720)
# 刷新的帧率
frame_PER_SEC = 60
# 创建小车的定时器常量
CREATE_CAR_EVENT = pygame.USEREVENT
# 定义目标点的位置
TARGET_POSITION = [600,150]
# 定义圆形小车的大小(直径)
CAR_SIZE = 10
# 圆形小车颜色
CAR_COLOUR = [0,0,0]
# 使用连线命令画小车移动轨迹时需要两个初始点(就是你定义的小车初始坐标点)
LINES_LIST = [(100,620),(100,620)]
三、小车精灵创建
  1. 创建小车精灵,可以在想要多个小车时,使用精灵组进行统一更改和调用。
  2. 本代码使用pygame.draw.circle创建的小车是一个圆,想要导入小车图片的可以去源码模仿游戏背景精灵创建方式,导入小车图片。
  3. 定义小车的加速,减速和带惯性的刹车
class CarSimulation(pygame.sprite.Sprite):
    """小车仿真精灵"""
    def __init__(self, positionx, positiony, car_speedx=1, car_speedy=1, k=1):     #car_speedx和car_speedy是小车的x和y方向的速度值,k是用来定义小车的速度变化值
        super().__init__()
        self.car_speedx = car_speedx
        self.car_speedy = car_speedy
        self.positionx = positionx
        self.positiony = positiony
        self.k = k
    
    def car_add(self,car_screen):
        pygame.draw.circle(car_screen,CAR_COLOUR,[self.positionx,self.positiony],CAR_SIZE,0)  #最后一个0表示填充,数字代表线宽
    
    def car_update(self):
        self.positionx += self.car_speedx
        self.positiony += self.car_speedy
        LINES_LIST.append((self.positionx,self.positiony))
        # 控制小车不能离开屏幕
        if (self.positionx - CAR_SIZE/2)< 0:
            self.positionx = CAR_SIZE/2
        elif (self.positionx + CAR_SIZE/2)> SCREEN_RECT.right:
            self.positionx = SCREEN_RECT.right - CAR_SIZE/2
        if (self.positiony - CAR_SIZE/2)< 0:
            self.positiony = CAR_SIZE/2
        elif (self.positiony + CAR_SIZE/2)> SCREEN_RECT.bottom:
            self.positiony = SCREEN_RECT.bottom - CAR_SIZE/2
    
    def accelerate(self):            #小车加速
        self.k += 1
    def moderate(self):              #小车减速
        self.k -= 1
        if self.k <=0:
            self.k=0
    def bracking(self):              #小车带有惯性的刹车
        pygame.time.delay(500)
        self.car_speedx = 0
        self.car_speedy = 0
四、键盘控制


键盘的上下左右控制小车移动,z加速,x减速,空格惯性刹车(刹车后可以看到小车向前动了一段距离)

        if keys_pressed[pygame.K_RIGHT]:
            self.car1.car_speedx = self.car1.k
        elif keys_pressed[pygame.K_LEFT]:
            self.car1.car_speedx = -self.car1.k
        else:
            self.car1.car_speedx = 0
        if keys_pressed[pygame.K_UP]:
            self.car1.car_speedy = -self.car1.k
        elif keys_pressed[pygame.K_DOWN]:
            self.car1.car_speedy = self.car1.k
        else:
            self.car1.car_speedy = 0
        
        if keys_pressed[pygame.K_z]:
            self.car1.accelerate()
        elif keys_pressed[pygame.K_x]:
            self.car1.moderate()
        elif keys_pressed[pygame.K_SPACE]:
            self.car1.bracking()
五、轨迹
  1. 画出需要跟踪的路径(这里使用的路径是贝塞尔曲线,详细用法可以去pygame官网文档查看)
pygame.gfxdraw.bezier(self.screen, [(100,620),(300,300),(400,600),(600,150)], 5, (255,0,0))

  1. 画出小车跟踪的路径
pygame.draw.lines(self.screen, (0,0,0), 0, LINES_LIST)

六、展示视频b站链接,知乎链接,youtube链接 七、预告
  1. 将使用本环境,结合深度强化学习代码,进行自主轨迹跟踪
  2. 将在本代码中加入可替换的路径规划程序,以代替自己设置的贝塞尔曲线
  3. 结合路径规划程序和深度强化学习程序,形成一套完整的轨迹规划仿真
如果以上的仿真有什么问题可以在下方的评论区里评论,我会帮大家解答和更改 pygame轨迹跟踪仿真到此结束,各位小伙伴觉得不错的话可以给我打赏哦 # 本篇文章在知乎,github和我的个人主页上同步上传,有兴趣的话点击链接,可以去我的个人主页观光哦~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/689145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号