[Day 24] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
AI在自動駕駛中的應用
1. 簡介
自動駕駛技術是現代交通領域的一個革命性進展。通過結合人工智能(AI)、機器學習(ML)、深度學習(DL)和傳感器技術,自動駕駛汽車可以在無人干預的情況下安全駕駛。本文將詳細介紹AI在自動駕駛中的應用,並通過代碼示例解釋相關技術。
2. 自動駕駛的核心技術
自動駕駛汽車主要依賴以下技術來實現其功能:
- 感知:利用傳感器(如攝像頭、激光雷達、雷達和超聲波)來收集環境數據。
- 定位:確定汽車在地圖上的精確位置。
- 規劃:根據環境和目標位置規劃最佳路徑。
- 控制:根據規劃好的路徑控制汽車的速度和方向。
3. 感知技術
感知技術使自動駕駛汽車能夠理解其周圍環境。以下是一些主要的感知技術和代碼示例:
3.1 圖像處理
圖像處理是自動駕駛汽車感知環境的重要組成部分。通過攝像頭捕獲的圖像,AI模型可以識別行人、車輛、交通標誌等。
import cv2
import numpy as np
import tensorflow as tf# 載入預訓練的模型(例如,MobileNet)
model = tf.keras.applications.MobileNetV2(weights='imagenet')# 讀取圖像
image = cv2.imread('test_image.jpg')
image_resized = cv2.resize(image, (224, 224))# 預處理圖像
image_preprocessed = tf.keras.applications.mobilenet_v2.preprocess_input(image_resized)
image_expanded = np.expand_dims(image_preprocessed, axis=0)# 進行預測
predictions = model.predict(image_expanded)# 解碼預測結果
decoded_predictions = tf.keras.applications.mobilenet_v2.decode_predictions(predictions, top=3)print(decoded_predictions)
代碼解釋:
- 我們首先導入必要的庫,如OpenCV和TensorFlow。
- 載入預訓練的MobileNet模型,用於圖像分類。
- 讀取並調整圖像大小,使其適合模型輸入。
- 預處理圖像以符合模型的要求。
- 使用模型進行預測,並解碼預測結果以獲取可讀的分類標籤。
3.2 激光雷達點雲處理
激光雷達(LiDAR)提供高精度的三維環境數據,是自動駕駛汽車的重要傳感器。
import open3d as o3d# 讀取點雲數據
pcd = o3d.io.read_point_cloud("test_point_cloud.pcd")# 可視化點雲
o3d.visualization.draw_geometries([pcd])
代碼解釋:
- 導入Open3D庫,用於處理和可視化點雲數據。
- 讀取點雲數據文件(PCD格式)。
- 使用Open3D的可視化工具展示點雲數據。
4. 定位技術
精確的定位是自動駕駛汽車的另一個關鍵部分。以下是一個使用GPS和IMU數據進行定位的示例:
import numpy as np# 模擬GPS和IMU數據
gps_data = np.array([[37.7749, -122.4194, 10], [37.7750, -122.4195, 10]])
imu_data = np.array([[0.1, 0.1, 0.1], [0.1, 0.1, 0.1]])# 計算位置
def calculate_position(gps_data, imu_data):positions = []for i in range(len(gps_data)):lat, lon, alt = gps_data[i]acc_x, acc_y, acc_z = imu_data[i]# 假設簡單的定位算法,實際上應用更加複雜的融合算法position = (lat + acc_x * 0.0001, lon + acc_y * 0.0001, alt + acc_z * 0.1)positions.append(position)return positionspositions = calculate_position(gps_data, imu_data)
print(positions)
代碼解釋:
- 我們模擬了一些GPS和IMU數據。
- 定義一個簡單的函數
calculate_position
,根據GPS和IMU數據計算位置。 - 使用該函數計算位置,並輸出結果。
5. 規劃技術
路徑規劃使自動駕駛汽車能夠選擇最佳路徑到達目標位置。以下是一個使用A*算法進行路徑規劃的示例:
import heapq# 定義A*算法
def a_star(start, goal, grid):open_list = []heapq.heappush(open_list, (0, start))came_from = {}g_score = {start: 0}f_score = {start: heuristic(start, goal)}while open_list:_, current = heapq.heappop(open_list)if current == goal:return reconstruct_path(came_from, current)for neighbor in get_neighbors(current, grid):tentative_g_score = g_score[current] + 1if neighbor not in g_score or tentative_g_score < g_score[neighbor]:came_from[neighbor] = currentg_score[neighbor] = tentative_g_scoref_score[neighbor] = tentative_g_score + heuristic(neighbor, goal)heapq.heappush(open_list, (f_score[neighbor], neighbor))return None# 重建路徑
def reconstruct_path(came_from, current):total_path = [current]while current in came_from:current = came_from[current]total_path.append(current)return total_path[::-1]# 計算啟發式函數
def heuristic(a, b):return abs(a[0] - b[0]) + abs(a[1] - b[1])# 獲取鄰居節點
def get_neighbors(node, grid):neighbors = []for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:neighbor = (node[0] + dx, node[1] + dy)if 0 <= neighbor[0] < len(grid) and 0 <= neighbor[1] < len(grid[0]) and grid[neighbor[0]][neighbor[1]] == 0:neighbors.append(neighbor)return neighbors# 測試A*算法
grid = [[0, 1, 0, 0, 0],[0, 1, 0, 1, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]]start = (0, 0)
goal = (4, 4)path = a_star(start, goal, grid)
print(path)
代碼解釋:
- 我們首先定義了A*算法,這是一種經常用於路徑規劃的搜索算法。
a_star
函數接受起點、終點和網格作為輸入,返回從起點到終點的最短路徑。reconstruct_path
函數用於重建從起點到終點的路徑。heuristic
函數計算啟發式估計,用於指導搜索過程。get_neighbors
函數獲取當前節點的鄰居節點,用於擴展搜索範圍。- 最後,我們測試A*算法,並輸出計算出的路徑。
6. 控制技術
控制技術使自動駕駛汽車能夠按照規劃好的路徑行駛。以下是一個基於PID控制器的簡單速度和方向控制示例:
class PIDController:def __init__(self, kp, ki, kd):self.kp = kpself.ki = kiself.kd = kdself.prev_error = 0self.integral = 0def control(self, setpoint, measured_value):error = setpoint - measured_valueself.integral += errorderivative = error - self.prev_erroroutput = self.kp * error + self.ki * self.integral + self.kd * derivativeself.prev_error = errorreturn output# 初始化PID控制器
speed_controller = PIDController(1.0, 0.1, 0.01)
steering_controller = PIDController(1.0, 0.1, 0.01)# 設定目標速度和方向
target_speed = 30 # 單位:km/h
target_direction = 0 # 單位:度# 模擬當前速度和方向
current_speed = 25
current_direction = -5# 計算控制輸出
speed_control_output = speed_controller.control(target_speed, current_speed)
steering_control_output = steering_controller.control(target_direction, current_direction)print("Speed Control Output:", speed_control_output)
print("Steering Control Output:", steering_control_output)
代碼解釋:
- 我們定義了一個簡單的PID控制器類
PIDController
,其中包括比例、積分和微分項。 control
方法計算控制輸出,根據當前的設置點和測量值調整控制輸出。- 初始化兩個PID控制器,一個用於速度控制,另一個用於方向控制。
- 設定目標速度和方向,並模擬當前速度和方向。
- 計算控制輸出並輸出結果。
7. 結論
自動駕駛汽車是一個結合了多種先進技術的系統,包括感知、定位、規劃和控制。通過利用人工智能和機器學習技術,自動駕駛汽車可以在複雜的環境中安全駕駛。本文通過多個代碼示例詳細介紹了這些技術的實現,展示了AI在自動駕駛中的應用。
相关文章:

[Day 24] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
AI在自動駕駛中的應用 1. 簡介 自動駕駛技術是現代交通領域的一個革命性進展。通過結合人工智能(AI)、機器學習(ML)、深度學習(DL)和傳感器技術,自動駕駛汽車可以在無人干預的情況下安全駕駛。…...

计算机图形学入门25:BRDF的测量
1.前言 BRDF(双向反射分布函数)可以用各种各样的材质去描述,但是这只是一种基于物理的描述或者近似,那什么是真正的BRDF?只有测出来的才是真正的。 为什么要测出BRDF?因为之前所描述的BRDF并不准确。如下图所示,以菲涅…...

空调计费系统是什么,你知道吗
空调计费系统是一种通过对使用空调的时间和能源消耗进行监测和计量来进行费用计算的系统。它广泛应用于各种场所,如家庭、办公室、商场等,为用户提供了方便、准确的能源使用管理和费用控制。 可实现功能 智能计费:中央空调分户计费系统通过智…...

震惊!张宇25版高数18讲发布,656页惹争议!
这个张宇老师在微博已经解释过了! 我觉得张宇老师本意是好的,在考研数学教学创新这方面,他真的有自己的思考。 他为什么要这么做? 其实作为一个考研高数老师,他完全可以像其他老师一样,什么都不做&#x…...

React+TS前台项目实战(二十三)-- 基于属性自定义数值显示组件Decimal封装
文章目录 前言Decimal组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天要封装的Decimal 组件,是通过传入的属性进行定制化显示数值,在渲染时,会根据不同的情况显示整数部分、小数部分和单位,支持自定义样式…...

pip install包出现哈希错误解决
如图,当遇到此类错误时,多半是连接不稳定导致的校验失败。我们可以在PC端,或Ubuntu通过浏览器下载.whl安装文件:直接复制报错信息中的网址到浏览器即可弹出下载窗口。...

多线程压测方法模板
主要步骤 创建一个线程池 ExecutorService service Executors.newFixedThreadPool(20);创建任务 Runnable task () -> {// 具体实现 };提交多个任务到线程池 for (int i 0; i < 100000; i) {service.submit(task); }关闭线程池 service.shutdown();等待所有任务完成 s…...

Uniapp软件库全新带勋章功能(包含前后端源码)
源码介绍: Uniapp开发的软件库全新带勋章功能,搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名,电脑需要下载:HBuilderX 登录账号 没有账号就注册账号, 然后上传文件,打包选择 “…...

秋招突击——7/5——设计模式知识点补充——适配器模式、代理模式和装饰器模式
文章目录 引言正文适配器模式学习篮球翻译适配器 面试题 代理模式学习面试题 装饰器模式学习装饰模式总结 面试题 总结 引言 为了一雪前耻,之前腾讯面试的极其差,设计模式一点都不会,这里找了一点设计模式的面试题,就针对几个常考…...

bmob Harmony鸿蒙快速开发搜索功能
搜索功能是很多应用都需要的功能。在很多平台上,要开发一个兼容性较好的搜索功能都还是需要添加比较多的视图代码的。 为了解决这个问题,鸿蒙ArkUI提供了一个快速添加搜索功能的视图组件给我们,结合Bmob Harmony鸿蒙SDK的搜索能力࿰…...

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会
7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)在上海拉开帷幕,软通动力董事长兼首席执行官刘天文受邀出席开幕式。其间,软通动力携子公司鸿湖万联深度参与到大会各项活动中,并全面展…...

查看Linux系统中日志文件
Linux 系统中 Ubuntu,Debian,CentOS,RedHat 作为常用的服务器软件系统,很多人都已经熟知。不论是服务器出现问题,还是日常维护或各种环境搭建,我们经常需要登录上服务器查看日志。 如果熟知 Linux 下的 ta…...

技术干货|如何轻松完成空调管路的随机振动分析以及疲劳寿命预测
基于NVHD 的虚拟路面谱激励车内结构路噪优化 作者:戴相花 颜磊 吕霞 杨凯 单位:苏州三星电子有限公司 论文摘要 随机振动试验是评估空调管路流通振动耐久性的重要试验之一。本文以某型号空调管路系统为研究对象,评估空调管路随机振动疲劳…...

中英双语介绍中国的城市:上海市(Shanghai)
中文版 上海市是中国最大的城市之一,也是全球重要的金融、贸易和航运中心。作为一座现代化的国际大都市,上海以其繁华的商业区、丰富的文化遗产和多样化的经济结构而闻名。以下是对上海市的详细介绍,包括其地理位置、人口、经济、教育、文化…...

代码随想录算法训练营第75天:总结篇[1]
代码随想录算法训练营第75天:总结篇 代码随想录姑且是都过了一遍了,最开始了解到的时候还不会c语法,跟着学习还是有难度的,也很难坚持着去写题,后面决定加入训练营与大家齐头并进,刚开始气氛很好ÿ…...

眼动追踪技术 | 眼动的分类和模型
摘要 灵长类动物用于调整中央凹位置的正常眼动,几乎都可以归结为五种基本类型的组合:扫视、平稳追踪、聚散、前庭眼震和生理性眼震(与注视相关的微小运动)。聚散运动用于将双眼聚焦于远处的目标(深度知觉)。其他运动(如适应和聚焦)指的是眼动的非位置变…...

如何使用PHP根据输入文字动态调整图片尺寸?
根据文字改变图片尺寸的PHP代码 以下是一个使用PHP实现根据输入的文字动态调整图片尺寸的示例代码。该代码使用GD库来处理图片。 1. 创建HTML表单 首先,我们需要一个HTML表单来接受用户输入的文字和新的图片尺寸。 <!DOCTYPE html> <html lang"en…...

3.js - hdr贴图 是什么,有什么用
HDR贴图:High-Dynamic Range(高动态范围)贴图 一、定义与特点 定义:HDR贴图是具有高动态范围的环境贴图,能够捕捉并保留丰富的亮部细节和暗部细节,从而模拟出更加真实的光照效果。特点: 高动态…...

Nature Communications|用于电子皮肤的自主自愈晶体管(柔性半导体器件/电子皮肤/柔性电子)
2024年4月23日,韩国庆熙大学Jin Young Oh,美国斯坦福大学鲍哲南(Zhenan Bao)和韩国嘉泉大学Tae Il Lee团队,在《Nature Communications》上发布了一篇题为“Autonomous self-healing supramolecular polymer transistors for skin electronics”的论文。论文内容如下: 一…...

6月30日功能测试Day10
3.4.4拼团购测试点 功能位置:营销-----拼团购 后台优惠促销列表管理可以添加拼团,查看拼团活动,启动活动,编辑活动,删除活动。 可以查看拼团活动中已下单的订单以状态 需求分析 功能和添加拼团 商品拼团活动页 3…...

无人机对地面运动目标定位---获取目标的移动方向和速度
目录 一、引子 我们利用单目无人机通过等时间间隔拍照的形式对地面某移动目标进行定位,当前,我们已经获得了每张相片上该目标的三维坐标,并且知道该无人机在飞行过程中拍照的时间间隔,那么我们就可以通过一定的计算,得…...

管理才是最根本的核心竞争力
相信大家对于华为提出的“管理是核心竞争力”“管理才是企业的核心竞争力”等言论并不陌生,而华为的确也一直践行这样的理念。比如,在华为发展历史上很艰难的2002年,华为仍然坚持重点抓管理。总裁任正非后来提到:“2002年华为快崩…...

Raid阵列中硬盘损坏后,新硬盘可以直接换上吗?
RAID更换的方式基本类似,这里以RAID 1为例。 1. 关闭服务器:确保服务器或RAID控制器处于关闭或已停止状态,以避免数据写入或损坏。确定损坏硬盘:通过RAID控制器的管理界面,确定哪一块硬盘在RAID 中损坏。 2. 拆卸原硬…...

Python爬虫康复训练——笔趣阁《神魂至尊》
还是话不多说,很久没写爬虫了,来个bs4康复训练爬虫,正好我最近在看《神魂至尊》,爬个txt文件下来看看 直接上代码 """ 神魂至尊网址-https://www.bqgui.cc/book/1519/ """ import requests from b…...

Kaptcha验证码
Kaptcha验证码 Kaptcha 是一个用于生成验证码的开源库,在 Java 中使用它可以轻松地为应用程序添加验证码功能。 一、引入依赖 首先,需要在项目的 pom.xml 文件(如果是 Maven 项目)中添加 Kaptcha 的依赖: <depend…...

Rufus 制作启动盘 | 便携的工作空间
唠唠闲话 最近服务器硬盘故障多,在修复过程中,学习了一些操作,这里做个记录。本期主要介绍 U盘启动盘的制作,以及持久化存储。 U 盘启动盘 镜像选择 Ubuntu 的版本命名遵循 “Adjective Animal” 的模式,即 “形容…...

python函数参数
Python 函数参数是函数定义时用于接收传递给函数的值的变量。在Python中,函数可以有多种类型的参数,这增加了函数的灵活性和可重用性。下面是一些主要的参数类型: 1. 位置参数(Positional Arguments) 位置参数是最常…...

深入理解 XML 和 HTML 之间的区别
在现代网络技术的世界中,XML(可扩展标记语言)和 HTML(超文本标记语言) 是两个非常重要的技术。尽管它们都使用标签和属性的格式来描述数据,但它们在形式和用途上有显著的区别。 概述 什么是 XMLÿ…...

代码随想录算法训练营第四十四天|188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
188.买卖股票的最佳时机IV 题目链接:188.买卖股票的最佳时机IV 文档讲解:代码随想录 状态:不会 思路: 在股票买卖1使用一维dp的基础上,升级成二维的即可。 定义dp[k1][2],其中 dp[j][0] 表示第j次交易后持…...

YOLOv8改进 添加CVPR2024 PKINet中注意力机制CAAttention
一、PKINet论文 论文地址:2403.06258 (arxiv.org) 二、CAAttention结构 CAA(Context Anchor Attention)注意力模块是一种用于捕捉长距离上下文信息的并行模块。 在计算机视觉领域中,上下文信息是指与目标物体或任务相关的周围环境和语境信息。上下文信息可以帮助我们更好…...