当前位置: 首页 > 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…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

Java高级 |【实验八】springboot 使用Websocket

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...