学校项目培训之Carla仿真平台之Carla学习内容

一、Blender

Blender入门:https://www.bilibili.com/video/BV1fb4y1e7PD/
Blender导入骨骼:https://www.bilibili.com/video/BV1hc41157nL
做一个车:https://www.bilibili.com/video/BV1hY411q7w2

收获:

学习Blender建模的使用,从案例中学习:建模/动画/雕刻/渲染等,仍在不断的学习当中。
对于车辆等大型物件的建模,还需要一些完整的三视图。
请添加图片描述
请添加图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Blender子弹冲击

Blender积木组合

二、Roadrunner

RoadRunner Scenario+CARLA联合仿真

收获:

在roadrunner中构建道路场景使得路网的设置进程加快。
在这里插入图片描述

三、Blender中导入汽车骨骼

carla仿真器搭建及特定车辆模型的导入
里面有两个视频,无声的看小车的骨骼构建,有声的看小车导入UE:
How to add a vehicle/truck in carla using Unreal Engine Editor 4 + Blender for beginners
How to rig vehicle in Blender 2.8 for UE4 [No Sound] _ Blender 2.8, Unreal Engine 4
建议先做一个简单的小车学习导入流程,汽车做的太豪华,导入的时候没卡出来

以下过程中,每个步骤有编译的的地方点一下,有保存的地方点一下

  1. UE4中导入小车的fbx在这里插入图片描述

  2. 在物理资产中设置骨骼
    在这里插入图片描述
    进入编辑:
    在这里插入图片描述
    在这里插入图片描述

  3. 添加动画蓝图,直接去现有的车辆动画蓝图复制过来
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

进入编辑:在这里插入图片描述

  1. 添加轮子的蓝图
    在这里插入图片描述
    在这里插入图片描述
    进入编辑:
    前轮胎:在这里插入图片描述
    后轮胎:在这里插入图片描述

  2. 新建汽车蓝图类
    在这里插入图片描述
    进入编辑:
    在这里插入图片描述
    在这里插入图片描述

  3. 编辑汽车资产库
    在这里插入图片描述
    进入编辑:
    (这里写错了,是 SimpleCar和SimpleCar01)在这里插入图片描述好了,此时就可以运行看看了。

python manual_control.py --filter SimplerCar01

四、小车等待红绿灯code

# ==============================================================================
# -- find carla module ---------------------------------------------------------
# ==============================================================================
import glob
import math
import os
import random
import systry:sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (sys.version_info.major,sys.version_info.minor,'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:passimport carladef hld(world, vehicle, vehicle_max_speed):global vehicle_current_locationglobal way_near_pointglobal distance_to_intersection# if vehicle:#     # 获取汽车当前位置#     vehicle_current_location = vehicle.get_location()#     # 使用Carla的道路地图获取最近的路口(交叉口)Waypoint#     waypoint_location = world.get_map().get_waypoint(vehicle_current_location).transform.location#     # 使用Waypoint的distance属性获取距离路口的距离#     print(vehicle_current_location)#     print(waypoint_location)#     distance_to_intersection = math.sqrt((vehicle_current_location.x - waypoint_location.x) ** 2 + (#                 vehicle_current_location.y - waypoint_location.y) ** 2)#     print("The neaerest way point's distance is:", distance_to_intersection, "meters")# else:#     print("_________________Not found the vehicle !_________________")#     return# 获取汽车的速度vehicle_current_velocity = vehicle.get_velocity()vehicle_current_speed = vehicle_current_velocity.length()  # 线速度print("vehicle_current_speed______", vehicle_current_speed)# 判断汽车当前是否处于红绿灯影响范围if vehicle.is_at_traffic_light():# 获取红绿灯traffic_light = vehicle.get_traffic_light()print("traffic_light.get_state()______", traffic_light.get_state())# 如果前方是红灯并且距离路口只有0.5m了,制动汽车if traffic_light and traffic_light.get_state() == carla.TrafficLightState.Red:print("红灯请停车!")# target_velocity = max(vehicle_current_speed - 5.0, 0.0)  # 以5m/s的速度减速,vehicle.apply_control(carla.VehicleControl(throttle=-0.0, steer=0, brake=1.0))# 如果前方是绿灯elif traffic_light and traffic_light.get_state() == carla.TrafficLightState.Green:# 如果当前是静止的状态,则让汽车启动if vehicle_current_speed == 0.0:print("绿灯请行驶!")vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0, brake=0.0))# 如果当前是行驶状态并且速度大于最大速度限制的一半,则让其保持当前速度行驶elif vehicle_current_speed > (vehicle_max_speed / 2.0):print("路口请缓行!")vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=0.0))# 其他情况,则保持当前速度行驶else :print("绿灯请缓行!")vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0, brake=0.0))# 如果前方是黄灯,则汽车开始制动elif traffic_light and traffic_light.get_state() == carla.TrafficLightState.Yellow:print("黄灯请停车!")vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0))else:print("直线行驶中~~~")# 如果汽车的速度超过了最大速度,则让他保持当前速度行驶speed_tolerance = 0.5  # 设置速度容忍范围,可以根据需要调整# 计算油门值,使车辆保持在最大速度附近if vehicle_current_speed < vehicle_max_speed - speed_tolerance:# print("start throttle")throttle = 1.0  # 假设油门力度为1.0else:# print("stop throttle")throttle = 0.0  # 达到最大速度时,停止加油门vehicle.apply_control(carla.VehicleControl(throttle=throttle, steer=0.0, brake=0.0))def main():actor_list = []client = carla.Client('127.0.0.1', 2000)client.set_timeout(2.0)try:# 获取世界world = client.get_world()# 创建汽车蓝图# vehicle_blueprint = random.choice(world.get_blueprint_library().filter('vehicle.*'))# 选用自定义小车蓝图vehicle_blueprint = world.get_blueprint_library().filter('vehicle.simplecar.simplecar')# vehicle_spawn_points = random.choice(world.get_map().get_spawn_points())vehicle_spawn_points = carla.Transform(carla.Location(x=20.235275, y=13.414804, z=0.600000),  # 设置初始位置的x、y和z坐标carla.Rotation(pitch=0.000000, yaw=-179.840790, roll=0.000000)  # 设置初始方向的pitch、yaw和roll角度)print("vehicle_spawn_points: ",vehicle_spawn_points)vehicle = world.spawn_actor(vehicle_blueprint, vehicle_spawn_points)# 设置最大车速vehicle_max_speed = 7.0actor_list.append(vehicle)# 创建相机蓝图camera_blueprint = world.get_blueprint_library().find('sensor.camera.rgb')camera_spawn_points = carla.Transform(carla.Location(x=-5, z=4), carla.Rotation(pitch=-20))camera = world.spawn_actor(camera_blueprint, camera_spawn_points, attach_to=vehicle)# camera.listen(lambda image: image.save_to_disk(os.path.join('_out', '%06d.png' % image.frame)))actor_list.append(camera)while True:# 设置相机视角world.get_spectator().set_transform(camera.get_transform())hld(world, vehicle, vehicle_max_speed)# 优化循环性能world.tick()finally:client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])print("All the actors have already been destroied !")if __name__ == "__main__":main()

五、两个小车跟车code

import carla
import math
import random
import time# 创建CARLA仿真客户端
client = carla.Client('127.0.0.1', 2000)
client.set_timeout(2.0)
actor_list=[]try:# ======================================获取CARLA世界和地图======================================world = client.get_world()blueprint_library = world.get_blueprint_library()map = world.get_map()# ======================================创建两辆车======================================# 位置设置# spawn_points = map.get_spawn_points()spawn_points = carla.Transform(carla.Location(x=20.235275, y=13.414804, z=0.600000),  # 设置初始位置的x、y和z坐标carla.Rotation(pitch=0.000000, yaw=-179.840790, roll=0.000000)  # 设置初始方向的pitch、yaw和roll角度)# 主车# vehicle_bp1 = blueprint_library.filter('vehicle')[0]# vehicle_bp1.set_attribute('color', '255,0,0')# 自定义小车vehicle_bp1 = blueprint_library.find('vehicle.simplecar.simplecar')# vehicle1_spawn_point = random.choice(spawn_points)vehicle1_spawn_point = spawn_pointsvehicle1 = world.spawn_actor(vehicle_bp1, vehicle1_spawn_point)# 跟车# vehicle_bp2 = blueprint_library.filter('vehicle')[0]# vehicle_bp2.set_attribute('color', '0,0,255')# 自定义小车vehicle_bp2 = blueprint_library.find('vehicle.simplecar3.simplecar3')vehicle2_spawn_point = carla.Transform(vehicle1_spawn_point.location + carla.Location(x=10.0),carla.Rotation(pitch=0.000000, yaw=-179.840790, roll=0.000000))vehicle2 = world.spawn_actor(vehicle_bp2, vehicle2_spawn_point)# 设置车辆的初始速度vehicle1.apply_control(carla.VehicleControl(throttle=0.5, steer=0, brake=0)) # 车1的初始速度为10 m/svehicle2.apply_control(carla.VehicleControl(throttle=0, steer=0, brake=0))actor_list.append(vehicle1)actor_list.append(vehicle2)# # 给两个车设置自动驾驶# vehicle1.set_autopilot(True)# vehicle2.set_autopilot(True)# ======================================创建相机蓝图======================================camera_blueprint = world.get_blueprint_library().find('sensor.camera.rgb')camera_transform = carla.Transform(carla.Location(x=-5, z=4), carla.Rotation(pitch=-10))camera1 = world.spawn_actor(camera_blueprint, camera_transform, attach_to=vehicle1)camera2 = world.spawn_actor(camera_blueprint, camera_transform, attach_to=vehicle2)# camera.listen(lambda image: image.save_to_disk(os.path.join('_out', '%06d.png' % image.frame)))actor_list.append(camera1)actor_list.append(camera2)# ======================================定义跟车参数======================================desired_distance = 20.0  # 期望的跟车距离max_velocity = 1.0  # 最大速度 (m/s)while True:# 设置相机视角world.get_spectator().set_transform(camera2.get_transform())# 获取车辆的位置location1 = vehicle1.get_location()location2 = vehicle2.get_location()# 计算车辆之间的距离distance = math.sqrt((location1.x - location2.x)**2 + (location1.y - location2.y)**2)# 计算车辆2的期望速度,使其保持在期望跟车距离内target_speed = 0.0 if desired_distance > distance else max_velocity# 设置车辆2的速度vehicle2.apply_control(carla.VehicleControl(throttle=target_speed, steer=0, brake=0))# 打印信息print(f"Distance between vehicles: {distance:.2f} m, Target Speed for Vehicle 2: {vehicle2.get_velocity().length():.2f} m/s")world.tick()finally:client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])print("All the actors have already been destroied !")

六、前车实现等红绿灯+后车实现跟车code


import glob
import math
import os
import random
import systry:sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (sys.version_info.major,sys.version_info.minor,'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:passimport carla# ======================================后车执行跟车逻辑======================================def follow(vehicle1, vehicle2, max_speed, desired_distance,):# 获取车辆的位置location1 = vehicle1.get_location()location2 = vehicle2.get_location()# 获取汽车的速度vehicle2_current_velocity = vehicle2.get_velocity()vehicle2_current_speed = vehicle2_current_velocity.length()  # 线速度# 计算车辆之间的距离distance = math.sqrt((location1.x - location2.x) ** 2 + (location1.y - location2.y) ** 2)# 设置车辆2的速度if desired_distance>distance:vehicle2.apply_control(carla.VehicleControl(throttle=0.0, steer=0, brake=0))else:# 如果汽车的速度超过了最大速度,则让他保持当前速度行驶speed_tolerance = 0  # 设置速度容忍范围,可以根据需要调整# 计算油门值,使车辆保持在最大速度附近if vehicle2_current_speed < max_speed - speed_tolerance or desired_distance>distance:# print("start throttle")throttle = 1.0  # 假设油门力度为1.0else:# print("stop throttle")throttle = 0.1  # 达到最大速度时,停止加油门vehicle2.apply_control(carla.VehicleControl(throttle=throttle, steer=0.0, brake=0.0))# 打印信息print(f"Distance between vehicles: {distance:.2f} m, Target Speed for Vehicle 2: {vehicle2.get_velocity().length():.2f} m/s")# ======================================主车执行红绿灯逻辑======================================
def hld(world, vehicle, vehicle_max_speed):global vehicle_current_locationglobal way_near_pointglobal distance_to_intersection# if vehicle:#     # 获取汽车当前位置#     vehicle_current_location = vehicle.get_location()#     # 使用Carla的道路地图获取最近的路口(交叉口)Waypoint#     waypoint_location = world.get_map().get_waypoint(vehicle_current_location).transform.location#     # 使用Waypoint的distance属性获取距离路口的距离#     print(vehicle_current_location)#     print(waypoint_location)#     distance_to_intersection = math.sqrt((vehicle_current_location.x - waypoint_location.x) ** 2 + (#                 vehicle_current_location.y - waypoint_location.y) ** 2)#     print("The neaerest way point's distance is:", distance_to_intersection, "meters")# else:#     print("_________________Not found the vehicle !_________________")#     return# 获取汽车的速度vehicle_current_velocity = vehicle.get_velocity()vehicle_current_speed = vehicle_current_velocity.length()  # 线速度print("vehicle_current_speed______", vehicle_current_speed)# 判断汽车当前是否处于红绿灯影响范围if vehicle.is_at_traffic_light():# 获取红绿灯traffic_light = vehicle.get_traffic_light()print("traffic_light.get_state()______", traffic_light.get_state())# 如果前方是红灯并且距离路口只有0.5m了,制动汽车if traffic_light and traffic_light.get_state() == carla.TrafficLightState.Red:print("红灯请停车!")# target_velocity = max(vehicle_current_speed - 5.0, 0.0)  # 以5m/s的速度减速,vehicle.apply_control(carla.VehicleControl(throttle=-0.0, steer=0, brake=1.0))# 如果前方是绿灯elif traffic_light and traffic_light.get_state() == carla.TrafficLightState.Green:# 如果当前是静止的状态,则让汽车启动if vehicle_current_speed == 0.0:print("绿灯请行驶!")vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0, brake=0.0))# 如果当前是行驶状态并且速度大于最大速度限制的一半,则让其保持当前速度行驶elif vehicle_current_speed > (vehicle_max_speed / 2.0):print("路口请缓行!")vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=0.0))# 其他情况,则保持当前速度行驶else:print("绿灯请缓行!")vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0, brake=0.0))# 如果前方是黄灯,则汽车开始制动elif traffic_light and traffic_light.get_state() == carla.TrafficLightState.Yellow:print("黄灯请停车!")vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0))else:print("直线行驶中~~~")# 如果汽车的速度超过了最大速度,则让他保持当前速度行驶speed_tolerance = 0.5  # 设置速度容忍范围,可以根据需要调整# 计算油门值,使车辆保持在最大速度附近if vehicle_current_speed < vehicle_max_speed - speed_tolerance:# print("start throttle")throttle = 1.0  # 假设油门力度为1.0else:# print("stop throttle")throttle = 0.0  # 达到最大速度时,停止加油门vehicle.apply_control(carla.VehicleControl(throttle=throttle, steer=0.0, brake=0.0))# 创建CARLA仿真客户端
client = carla.Client('127.0.0.1', 2000)
client.set_timeout(2.0)
actor_list = []try:# ======================================获取CARLA世界和地图======================================world = client.get_world()blueprint_library = world.get_blueprint_library()map = world.get_map()# ======================================创建两辆车======================================# 位置设置# spawn_points = map.get_spawn_points()# vehicle1_spawn_point = random.choice(spawn_points)# print(vehicle1_spawn_point)# 自定义小车位置spawn_points = carla.Transform(carla.Location(x=400, y=-0.6, z=4.000000), carla.Rotation(pitch=0.000000, yaw=-180, roll=0.000000))vehicle1_spawn_point = spawn_pointsprint(vehicle1_spawn_point)# 主车# vehicle_bp1 = blueprint_library.filter('vehicle')[0]# vehicle_bp1.set_attribute('color', '255,0,0')# 自定义小车vehicle_bp1 = blueprint_library.find('vehicle.simplecar.simplecar')vehicle1 = world.spawn_actor(vehicle_bp1, vehicle1_spawn_point)# 跟车# vehicle_bp2 = blueprint_library.filter('vehicle')[0]# vehicle_bp2.set_attribute('color', '0,0,255')# 自定义小车vehicle_bp2 = blueprint_library.find('vehicle.simplecar3.simplecar3')vehicle2_spawn_point = carla.Transform(vehicle1_spawn_point.location + carla.Location(x=10.0),carla.Rotation(pitch=0.000000, yaw=-180, roll=0.000000))vehicle2 = world.spawn_actor(vehicle_bp2, vehicle2_spawn_point)# 设置车辆的初始速度vehicle1.apply_control(carla.VehicleControl(throttle=0.5, steer=0, brake=0))  # 车1的初始速度为10 m/svehicle2.apply_control(carla.VehicleControl(throttle=0, steer=0, brake=0))actor_list.append(vehicle1)actor_list.append(vehicle2)# # 给两个车设置自动驾驶# vehicle1.set_autopilot(True)# vehicle2.set_autopilot(True)# ======================================创建相机蓝图======================================camera_blueprint = world.get_blueprint_library().find('sensor.camera.rgb')camera_transform = carla.Transform(carla.Location(x=-5, z=4), carla.Rotation(pitch=-10))camera1 = world.spawn_actor(camera_blueprint, camera_transform, attach_to=vehicle1)camera2 = world.spawn_actor(camera_blueprint, camera_transform, attach_to=vehicle2)# camera.listen(lambda image: image.save_to_disk(os.path.join('_out', '%06d.png' % image.frame)))actor_list.append(camera1)actor_list.append(camera2)# ======================================定义跟车参数======================================desired_distance = 15.0  # 期望的跟车距离max_velocity = 1.0  # 最大速度 (m/s)max_speed = 7.0  # 最大速度 (m/s)while True:# 设置相机视角world.get_spectator().set_transform(camera2.get_transform())# 主车执行红绿灯hld(world, vehicle1, max_speed)# 后车执行跟车follow(vehicle1, vehicle2, max_speed, desired_distance)world.tick()finally:client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])print("All the actors have already been destroied !")

七、跟车+红绿灯+roadRunner+有红灯停下绿灯减速实现效果

跟车+红绿灯+roadRunner+有红灯停下效果 15m

注意,这个实现效果暂且仅限于车辆直线行动中

八、blender建模导入UE5

Blender放入UE5

八、UE4学习

【虚幻4教程05】UE4零基础入门到独立游戏开发【蓝图基础篇】
UE4 ——使用动画蓝图及混合空间(实现控制人物站立、走、跑效果)

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

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

相关文章

OpenResty编译安装详解

文章目录 一、概述1、OpenResty是什么2、官方文档 二、cengos安装OpenResty1、从官网下载2、目录结构3、编译安装 一、概述 1、OpenResty是什么 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖…

Springboot使用Aop保存接口请求日志到mysql

1、添加aop依赖 <!-- aop日志 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2、新建接口保存数据库的实体类RequestLog.java package com.example…

【算法】关于排序你应该知道的一切(下)

和光同尘_我的个人主页 单程孤舟&#xff0c;出云入霞&#xff0c;如歌如吟。 --门孔 八大排序 &#x1f56f;️前言1. 常见排序算法2. 常见排序算法实现2.1. 冒泡排序2.1.1. 基本思想2.1.2. 代码实现2.1.3. 特性 2.2. 快速排序2.2.1. hoare法基本思想代码实现 2.2.2. 快速排…

学习搜狗的workflow,MacBook上如何编译

官网说可以在MacBook上也可以运行&#xff0c;但是编译的时候却有找不到openssl的错误&#xff1a; 看其他博客也有类似的错误&#xff0c;按照类似的思路去解决 问题原因和解决办法 cmake编译的时候&#xff0c;没有找到openssl的头文件&#xff0c;需要设置cmake编译环境下…

命令解释器-Shell

目录 1. 概述 1.1. 概念 1.2. 分类&#xff1a; 1.3. type 命令 1.4.命令执行原理 2. Linux 中的特殊符号 3. 命令别名 3.1. 查看设置的别名 3.2. 常用的别名 3.3. 删除别名 3.6. 注意&#xff08;alias永久化&#xff09;&#xff1a; 4. history 命令历史 例&a…

【状态估计】将变压器和LSTM与卡尔曼滤波器结合到EM算法中进行状态估计(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

直线导轨坏了可以维修吗?

直线导轨是工业自动化设备中常用的零部件&#xff0c;其性能和使用寿命对设备的稳定运行和产能有着直接的影响&#xff0c;在生产中&#xff0c;由于各种原因&#xff0c;直线导轨会出现各种问题&#xff0c;那么&#xff0c;直线导轨的维修方法究竟是怎样的呢&#xff1f;我们…

计算机专业毕业设计项目推荐11-博客项目(Go+Vue+Mysql)

博客项目&#xff08;GoVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&am…

竞赛选题 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

【安鸾靶场】实战渗透

文章目录 前言一、租房网 (150分)二、企业网站 (300分)三、SQL注入进阶 (550分) 前言 最近看到安鸾的靶场有些比较有意思就打了一下午&#xff0c;有一定难度。 一、租房网 (150分) http://106.15.50.112:8031/ 刚打开burp就报了thinkphp的代码执行 直接getshell flag&a…

基于SpringBoot的学生选课系统

基于SpringBoot的学生选课系统的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 前台主页 登录界面 管理员界面 教师界面 学生界面 摘要 学生选课系统…