当前位置: 首页 > news >正文

[Day 24] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在自動駕駛中的應用

1. 簡介

自動駕駛技術是現代交通領域的一個革命性進展。通過結合人工智能(AI)、機器學習(ML)、深度學習(DL)和傳感器技術,自動駕駛汽車可以在無人干預的情況下安全駕駛。本文將詳細介紹AI在自動駕駛中的應用,並通過代碼示例解釋相關技術。

2. 自動駕駛的核心技術

自動駕駛汽車主要依賴以下技術來實現其功能:

  1. 感知:利用傳感器(如攝像頭、激光雷達、雷達和超聲波)來收集環境數據。
  2. 定位:確定汽車在地圖上的精確位置。
  3. 規劃:根據環境和目標位置規劃最佳路徑。
  4. 控制:根據規劃好的路徑控制汽車的速度和方向。

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)

代碼解釋

  1. 我們首先導入必要的庫,如OpenCV和TensorFlow。
  2. 載入預訓練的MobileNet模型,用於圖像分類。
  3. 讀取並調整圖像大小,使其適合模型輸入。
  4. 預處理圖像以符合模型的要求。
  5. 使用模型進行預測,並解碼預測結果以獲取可讀的分類標籤。
3.2 激光雷達點雲處理

激光雷達(LiDAR)提供高精度的三維環境數據,是自動駕駛汽車的重要傳感器。

import open3d as o3d# 讀取點雲數據
pcd = o3d.io.read_point_cloud("test_point_cloud.pcd")# 可視化點雲
o3d.visualization.draw_geometries([pcd])

代碼解釋

  1. 導入Open3D庫,用於處理和可視化點雲數據。
  2. 讀取點雲數據文件(PCD格式)。
  3. 使用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)

代碼解釋

  1. 我們模擬了一些GPS和IMU數據。
  2. 定義一個簡單的函數calculate_position,根據GPS和IMU數據計算位置。
  3. 使用該函數計算位置,並輸出結果。

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)

代碼解釋

  1. 我們首先定義了A*算法,這是一種經常用於路徑規劃的搜索算法。
  2. a_star函數接受起點、終點和網格作為輸入,返回從起點到終點的最短路徑。
  3. reconstruct_path函數用於重建從起點到終點的路徑。
  4. heuristic函數計算啟發式估計,用於指導搜索過程。
  5. get_neighbors函數獲取當前節點的鄰居節點,用於擴展搜索範圍。
  6. 最後,我們測試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)

代碼解釋

  1. 我們定義了一個簡單的PID控制器類PIDController,其中包括比例、積分和微分項。
  2. control方法計算控制輸出,根據當前的設置點和測量值調整控制輸出。
  3. 初始化兩個PID控制器,一個用於速度控制,另一個用於方向控制。
  4. 設定目標速度和方向,並模擬當前速度和方向。
  5. 計算控制輸出並輸出結果。

7. 結論

自動駕駛汽車是一個結合了多種先進技術的系統,包括感知、定位、規劃和控制。通過利用人工智能和機器學習技術,自動駕駛汽車可以在複雜的環境中安全駕駛。本文通過多個代碼示例詳細介紹了這些技術的實現,展示了AI在自動駕駛中的應用。

相关文章:

[Day 24] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在自動駕駛中的應用 1. 簡介 自動駕駛技術是現代交通領域的一個革命性進展。通過結合人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xff09;、深度學習&#xff08;DL&#xff09;和傳感器技術&#xff0c;自動駕駛汽車可以在無人干預的情況下安全駕駛。…...

计算机图形学入门25:BRDF的测量

1.前言 BRDF(双向反射分布函数)可以用各种各样的材质去描述&#xff0c;但是这只是一种基于物理的描述或者近似&#xff0c;那什么是真正的BRDF&#xff1f;只有测出来的才是真正的。 为什么要测出BRDF&#xff1f;因为之前所描述的BRDF并不准确。如下图所示&#xff0c;以菲涅…...

空调计费系统是什么,你知道吗

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

震惊!张宇25版高数18讲发布,656页惹争议!

这个张宇老师在微博已经解释过了&#xff01; 我觉得张宇老师本意是好的&#xff0c;在考研数学教学创新这方面&#xff0c;他真的有自己的思考。 他为什么要这么做&#xff1f; 其实作为一个考研高数老师&#xff0c;他完全可以像其他老师一样&#xff0c;什么都不做&#x…...

React+TS前台项目实战(二十三)-- 基于属性自定义数值显示组件Decimal封装

文章目录 前言Decimal组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天要封装的Decimal 组件&#xff0c;是通过传入的属性进行定制化显示数值&#xff0c;在渲染时&#xff0c;会根据不同的情况显示整数部分、小数部分和单位&#xff0c;支持自定义样式…...

pip install包出现哈希错误解决

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

多线程压测方法模板

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

Uniapp软件库全新带勋章功能(包含前后端源码)

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

秋招突击——7/5——设计模式知识点补充——适配器模式、代理模式和装饰器模式

文章目录 引言正文适配器模式学习篮球翻译适配器 面试题 代理模式学习面试题 装饰器模式学习装饰模式总结 面试题 总结 引言 为了一雪前耻&#xff0c;之前腾讯面试的极其差&#xff0c;设计模式一点都不会&#xff0c;这里找了一点设计模式的面试题&#xff0c;就针对几个常考…...

bmob Harmony鸿蒙快速开发搜索功能

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

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会

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

查看Linux系统中日志文件

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

技术干货|如何轻松完成空调管路的随机振动分析以及疲劳寿命预测

基于NVHD 的虚拟路面谱激励车内结构路噪优化 作者&#xff1a;戴相花 颜磊 吕霞 杨凯 单位&#xff1a;苏州三星电子有限公司 论文摘要 随机振动试验是评估空调管路流通振动耐久性的重要试验之一。本文以某型号空调管路系统为研究对象&#xff0c;评估空调管路随机振动疲劳…...

中英双语介绍中国的城市:上海市(Shanghai)

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

代码随想录算法训练营第75天:总结篇[1]

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

眼动追踪技术 | 眼动的分类和模型

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

如何使用PHP根据输入文字动态调整图片尺寸?

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

3.js - hdr贴图 是什么,有什么用

HDR贴图&#xff1a;High-Dynamic Range&#xff08;高动态范围&#xff09;贴图 一、定义与特点 定义&#xff1a;HDR贴图是具有高动态范围的环境贴图&#xff0c;能够捕捉并保留丰富的亮部细节和暗部细节&#xff0c;从而模拟出更加真实的光照效果。特点&#xff1a; 高动态…...

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拼团购测试点 功能位置&#xff1a;营销-----拼团购 后台优惠促销列表管理可以添加拼团&#xff0c;查看拼团活动&#xff0c;启动活动&#xff0c;编辑活动&#xff0c;删除活动。 可以查看拼团活动中已下单的订单以状态 需求分析 功能和添加拼团 商品拼团活动页 3…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性&#xff0c;分别代表什么&#xff0c;有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...

计算机系统结构复习-名词解释2

1.定向&#xff1a;在某条指令产生计算结果之前&#xff0c;其他指令并不真正立即需要该计算结果&#xff0c;如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方&#xff0c;那么就可以避免停顿。 2.多级存储层次&#xff1a;由若干个采用不同实现技术的存储…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟

众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了&#xff0c;延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp &#xff0c;边缘服务器拉流推送到云服务器 …...