Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
dc9ce57
1
yuboyyy Dec 18, 2025
dc3521a
1
yuboyyy Dec 18, 2025
28b2a2e
1
yuboyyy Dec 18, 2025
880ca47
1
yuboyyy Dec 18, 2025
1636dad
1
yuboyyy Dec 18, 2025
202a616
1
yuboyyy Dec 19, 2025
1adc5cd
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 19, 2025
b951f8c
1
yuboyyy Dec 19, 2025
a75ebd2
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 19, 2025
78a4d75
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 19, 2025
e48be11
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 19, 2025
3b4d225
1
yuboyyy Dec 19, 2025
8b20cc5
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 19, 2025
5efb40c
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 19, 2025
cd465f0
1
yuboyyy Dec 19, 2025
f962694
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 19, 2025
9fe224a
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 19, 2025
d39e446
1
yuboyyy Dec 19, 2025
ef804b7
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 19, 2025
3d66569
1
yuboyyy Dec 19, 2025
179dbe9
1
yuboyyy Dec 19, 2025
88f2251
1
yuboyyy Dec 20, 2025
4358296
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 20, 2025
41945ad
1
yuboyyy Dec 20, 2025
8d2581d
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 20, 2025
f7e911a
1
yuboyyy Dec 21, 2025
57b911a
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 21, 2025
77a3c3f
1
yuboyyy Dec 21, 2025
86befa4
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 21, 2025
5320b97
1
yuboyyy Dec 21, 2025
3f2e41f
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 21, 2025
2744d95
1
yuboyyy Dec 21, 2025
d08e9e6
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 21, 2025
d2f27aa
1
yuboyyy Dec 21, 2025
a6a7387
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 21, 2025
97b5572
1
yuboyyy Dec 22, 2025
1dd095c
Merge remote-tracking branch 'origin/main'
yuboyyy Dec 22, 2025
969aa23
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 22, 2025
de3eed1
Merge branch 'OpenHUTB:main' into main
yuboyyy Dec 22, 2025
7479387
1
yuboyyy Dec 22, 2025
d533151
1
yuboyyy Dec 22, 2025
3f5bc11
1
yuboyyy Dec 22, 2025
a581995
1
yuboyyy Dec 22, 2025
4e4d975
1
yuboyyy Dec 23, 2025
c1b0510
1
yuboyyy Dec 23, 2025
e38fdeb
1
yuboyyy Dec 23, 2025
aa7e226
1
yuboyyy Dec 23, 2025
5c26156
1
yuboyyy Dec 23, 2025
288aae1
1
yuboyyy Dec 23, 2025
4313ec2
1
yuboyyy Dec 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
224 changes: 224 additions & 0 deletions src/Smart_car/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
---
AIGC:
ContentProducer: Minimax Agent AI
ContentPropagator: Minimax Agent AI
Label: AIGC
ProduceID: e052170842fbffc7d21baedf4eb60a91
PropagateID: e052170842fbffc7d21baedf4eb60a91
ReservedCode1: 30450220634cdb7d01a90f09d27c8175ddbead6c2e00eb6885f4bf068b71a5e68462deca022100bae83365aff19667c6a3d81e38e6b421807893b6f6908a22e839588a0946a346
ReservedCode2: 3046022100a7bfdf8c0b714f1dba19461db6b74519f502d4673a07347747fb0cf56e840d95022100854fe1d24afa96ab2ea3fae7b6bc2b8d75f2021846f4dce4f4743a9680d68e0d
---

# 智能无人车导航系统

![无人车导航系统](imgs/chinese_nav_0.png)

> 基于ROS的智能无人车自主导航系统,支持路径规划、障碍物避让、实时定位等功能

## 项目简介

本项目是一个基于ROS (Robot Operating System) 框架开发的智能无人车导航系统,集成了先进的SLAM算法、路径规划、动态避障等功能模块,实现了完全自主的室内外导航能力。

### 核心特性

- 实时建图 (SLAM): 基于激光雷达的实时环境建图
- 智能路径规划: 支持全局路径规划和局部路径优化
- 动态避障: 实时检测障碍物并调整路径
- 精确定位: 多传感器融合定位系统
- 多种控制模式: 支持手动控制、自动导航、目标点导航
- 实时监控: 可视化界面实时显示系统状态

## 快速开始

### 系统要求

- **操作系统**: Ubuntu 18.04/20.04 LTS
- **ROS版本**: Melodic/Noetic
- **Python**: 2.7/3.x
- **硬件要求**:
- 激光雷达 (16线/32线)
- 深度相机
- IMU传感器
- 编码器

### 安装步骤

```bash
# 1. 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src

# 2. 克隆项目
git clone https://github.com/your-repo/autonomous-vehicle.git

# 3. 安装依赖
cd autonomous-vehicle
rosdep install --from-paths src --ignore-src -r -y

# 4. 编译项目
cd ~/catkin_ws
catkin_make

# 5. 加载环境变量
source devel/setup.bash
```

### 运行演示

```bash
# 启动仿真环境
roslaunch autonomous_vehicle simulation.launch

# 启动真实机器人
roslaunch autonomous_vehicle robot.launch

# 启动导航系统
roslaunch autonomous_vehicle navigation.launch
```

## 运行效果图

### 1. ROS导航仿真界面

(imgs/ros_navigation_4.png)
*图1: ROS RViz环境下的导航仿真界面,实时显示地图、路径规划和机器人位置*

### 2. 路径规划可视化

![路径规划](imgs/path_planning_6.png)
*图2: 智能路径规划系统,绿色线条显示全局规划路径,红色线条显示局部优化路径*

### 3. 障碍物避让演示

![障碍物避让](imgs/obstacle_avoidance_8.jpg)
*图3: 实时障碍物检测与避让,黄色区域为检测到的障碍物,蓝色区域为安全路径*

### 4. 中文导航界面

![中文导航](imgs/chinese_nav_8.png)
*图4: 中文导航系统界面,支持目标点设定、路径显示和状态监控*

### 5. 实时地图构建

![地图构建](imgs/chinese_nav_7.png)
*图5: 实时SLAM地图构建过程,显示环境特征点和机器人轨迹*

## 系统架构

```
autonomous_vehicle/
├── src/
│ ├── perception/ # 感知模块
│ │ ├── obstacle_detection/
│ │ ├── lane_detection/
│ │ └── traffic_light_detection/
│ ├── localization/ # 定位模块
│ │ ├── slam/
│ │ └── ekf_localization/
│ ├── planning/ # 规划模块
│ │ ├── global_planner/
│ │ └── local_planner/
│ ├── control/ # 控制模块
│ │ ├── pid_controller/
│ │ └── pure_pursuit/
│ └── utils/ # 工具模块
├── launch/ # 启动文件
├── config/ # 配置文件
├── urdf/ # 机器人模型
├── rviz/ # 可视化配置
└── scripts/ # 脚本文件
```

## 性能指标

| 指标项 | 性能参数 |
|--------|----------|
| 最大速度 | 2.0 m/s |
| 最小转弯半径 | 0.5 m |
| 定位精度 | ±5 cm |
| 避障距离 | 1.0 m |
| 地图分辨率 | 5 cm/pixel |
| 路径规划频率 | 10 Hz |

使用场景

- 室内服务机器人: 办公楼、医院、酒店等场所的自主导航
- 工业AGV**: 工厂内的物料搬运和自动化运输
- 室外巡检机器人**: 园区巡检、安防监控等应用
- 教育研究**: 机器人学习和算法验证平台

## API文档

### 主要话题

| 话题名称 | 消息类型 | 功能描述 |
|----------|----------|----------|
| `/cmd_vel` | `geometry_msgs/Twist` | 机器人运动控制命令 |
| `/scan` | `sensor_msgs/LaserScan` | 激光雷达数据 |
| `/amcl_pose` | `geometry_msgs/PoseWithCovarianceStamped` | 机器人位姿信息 |
| `/move_base/goal` | `geometry_msgs/PoseStamped` | 导航目标点 |

### 主要服务

| 服务名称 | 服务类型 | 功能描述 |
|----------|----------|----------|
| `/slam_gmapping/map` | `nav_msgs/GetMap` | 获取地图数据 |
| `/static_map` | `nav_msgs/GetMap` | 获取静态地图 |

## 配置说明

### 导航参数配置

```yaml
# costmap_common_params.yaml
obstacle_radius: 0.2
inflation_radius: 0.5
max_vel_x: 0.5
min_vel_x: -0.5
max_vel_theta: 1.0
```

### 激光雷达配置

```yaml
# lidar_params.yaml
min_range: 0.2
max_range: 30.0
scan_frequency: 5.0
angular_resolution: 0.25
```

## 故障排除

### 常见问题

1. **激光雷达数据丢失**
- 检查激光雷达连接
- 确认串口权限设置

2. **定位不准确**
- 校准IMU传感器
- 检查编码器数据

3. **路径规划失败**
- 检查地图数据完整性
- 确认目标点可达性

### 日志查看

```bash
# 查看系统日志
roslaunch autonomous_vehicle log.launch

# 实时监控话题数据
rostopic echo /cmd_vel
```
### 开发环境搭建

```bash
# 安装开发工具
sudo apt install python3-catkin-tools python3-osrf-pycommon

# 克隆开发分支
git checkout -b feature/your-feature
```
106 changes: 70 additions & 36 deletions src/Smart_car/autonomous_vehicle_battery_level_display.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,70 @@
import time
import random # 仅用于模拟硬件数据,实际场景删除
import random # 仅用于模拟硬件采集的电池电压数据,实际项目部署时请删除该模块及相关模拟代码


class UnmannedVehicleBattery:
"""无人车电池电量管理类"""
"""无人车电池电量管理核心类
负责电池电压读取、剩余电量计算、状态判断及可视化展示,
支持对接实际硬件采集模块,可根据电池规格灵活配置参数。
"""

def __init__(self):
# 电池参数配置(根据实际电池规格调整
self.max_voltage = 12.6 # 满电电压(12V锂电池为例
self.min_voltage = 10.0 # 欠压保护电压
self.current_voltage = 0.0 # 当前电压
self.battery_percent = 0.0 # 剩余电量百分比
# 电池核心参数配置(可根据实际使用的电池型号/规格调整对应数值
self.max_voltage = 12.6 # 电池满电电压(以12V三元锂电池为例
self.min_voltage = 10.0 # 电池欠压保护电压,低于此值需立即停止使用并充电
self.current_voltage = 0.0 # 电池实时电压(初始值为0,通过硬件采集或模拟更新)
self.battery_percent = 0.0 # 电池剩余电量百分比(保留1位小数)

def read_battery_voltage(self):
"""读取电池实时电压(模拟硬件采集逻辑)
实际应用场景中,需替换为对应硬件的数据采集方式:
1. 树莓派/单片机:通过ADC模块(如ADS1115)采集电压信号
2. 带BMS的电池:通过串口/RS485/I2C通信获取BMS上报的电压数据
3. 其他硬件:根据对应通信协议调整数据读取逻辑
"""
读取电池电压(模拟硬件采集)
实际场景:替换为ADC读取/串口接收BMS数据/I2C通信等
"""
# 模拟电压波动(范围:10.0~12.6V)
# 模拟电压小幅波动(范围:欠压保护电压~满电电压,保留2位小数)
self.current_voltage = round(random.uniform(10.0, 12.6), 2)
# 实际硬件示例(以树莓派ADC为例):

# 实际硬件采集示例(以树莓派+ADS1115 ADC模块为例,需安装对应依赖库)
# 依赖库安装:pip install adafruit-circuitpython-ads1x15
# import board
# import adafruit_ads1x15.ads1115 as ADS
# from adafruit_ads1x15.analog_in import AnalogIn
# i2c = board.I2C()
#
# # 初始化I2C总线和ADS1115模块
# i2c = board.I2C() # 默认使用SDA/SCL引脚
# ads = ADS.ADS1115(i2c)
# chan = AnalogIn(ads, ADS.P0)
# self.current_voltage = chan.voltage * voltage_divider_ratio # 电压分压比
# chan = AnalogIn(ads, ADS.P0) # 选择A0通道作为电压采集通道
#
# # 计算实际电池电压(需根据分压电路配置对应的电压分压比)
# voltage_divider_ratio = 2.0 # 分压比示例,需根据实际电路调整
# self.current_voltage = chan.voltage * voltage_divider_ratio

def calculate_battery_percent(self):
"""计算剩余电量百分比"""
"""根据实时电压计算电池剩余电量百分比
采用线性计算模型(适用于电压与电量近似线性的电池类型),
实际场景中可根据电池放电曲线优化为非线性计算模型,提升精度。
"""
if self.current_voltage >= self.max_voltage:
# 电压达到满电电压,判定为100%电量
self.battery_percent = 100.0
elif self.current_voltage <= self.min_voltage:
# 电压低于欠压保护值,判定为0%电量(需立即充电)
self.battery_percent = 0.0
else:
# 线性计算(实际可根据电池放电曲线优化)
# 线性插值计算剩余电量,保留1位小数,保证显示精度
self.battery_percent = round(
(self.current_voltage - self.min_voltage) /
(self.max_voltage - self.min_voltage) * 100,
1
)

def get_battery_status(self):
"""判断电量状态"""
"""根据剩余电量判断电池当前状态
返回值说明:
- 第一个返回值:文字状态描述(满电/正常/低电量/紧急)
- 第二个返回值:状态标识符号(对应不同告警级别)
"""
if self.battery_percent >= 95:
return "满电", "🟢"
elif 20 <= self.battery_percent < 95:
Expand All @@ -53,43 +75,55 @@ def get_battery_status(self):
return "紧急(请充电)", "🔴"

def display_battery_info(self):
"""可视化显示电量信息"""
# 清空控制台(可选)
"""可视化展示电池完整信息
包括实时电压、剩余电量进度条、当前状态,
低电量时触发额外告警提示,提升使用安全性。
"""
# 清空控制台屏幕(可选功能,根据实际使用场景选择是否启用)
# 兼容Windows和Linux/macOS系统
# import os
# os.system('cls' if os.name == 'nt' else 'clear')

# 电量条可视化
bar_length = 20
filled_length = int(bar_length * self.battery_percent // 100)
battery_bar = "█" * filled_length + "-" * (bar_length - filled_length)
# 电量进度条可视化配置
bar_length = 20 # 进度条总长度(字符数)
filled_length = int(bar_length * self.battery_percent // 100) # 已填充进度长度
battery_bar = "█" * filled_length + "-" * (bar_length - filled_length) # 拼接进度条

# 获取状态
# 获取当前电池状态描述和状态标识
status, color = self.get_battery_status()

# 打印信息
print(f"\n=== 无人车电池状态 ===")
# 打印格式化后的电池信息
print(f"\n=== 无人车电池状态监控 ===")
print(f"当前电压: {self.current_voltage}V")
print(f"剩余电量: |{battery_bar}| {self.battery_percent}%")
print(f"状态: {color} {status}")

# 低电量告警
# 紧急告警:电量低于5%时,提示立即停止作业并充电
if self.battery_percent < 5:
print("⚠️ 电量过低,立即停止作业并充电")
print("⚠️ 【紧急告警】电量过低,立即停止所有作业并接入充电器!")


def main():
"""主循环"""
"""程序主入口,实现电池状态循环监控
初始化电池管理对象,持续执行「电压读取→电量计算→信息展示」流程,
支持通过Ctrl+C快捷键正常退出监控程序。
"""
# 初始化无人车电池管理实例
battery = UnmannedVehicleBattery()
print("无人车电量监控系统启动...")
print("无人车电量监控系统已启动...(按Ctrl+C可退出监控)")

try:
# 无限循环执行监控流程,每秒刷新一次数据
while True:
battery.read_battery_voltage() # 读取电压
battery.calculate_battery_percent() # 计算电量
battery.display_battery_info() # 显示信息
time.sleep(1) # 1秒刷新一次
battery.read_battery_voltage() # 步骤1:读取电池实时电压
battery.calculate_battery_percent() # 步骤2:计算剩余电量百分比
battery.display_battery_info() # 步骤3:可视化展示电池状态
time.sleep(1) # 设置刷新间隔为1秒,可根据需求调整
except KeyboardInterrupt:
print("\n监控系统已退出")
# 捕获Ctrl+C中断信号,友好退出程序
print("\n监控系统已正常退出")


if __name__ == "__main__":
# 程序启动时,直接执行主函数
main()
Loading
Loading