# picar_end2end
## 代码说明
### 收集数据
```
$ python collect.py
require:
---- joystick.py 手柄控制
---- car.py 小车控制
```
### 训练模型
```
$ jupyter notebook
open http://localhost:8888/tree:
----> train/train.ipynb
```
### 自动驾驶
```
python driver.py
require:
---- model.py 训练模型
---- car.py 小车控制
```
## 模型

| Model | Loss | Val Loss | Map |
| :----: | :----: | :----: | :----: |
| train | <img src="train/docs/loss.svg" width=256 height=256 /> | <img src="train/docs/val_loss.svg" width=256 height=256 /> |  |
## 数据处理
### 原图

### 裁剪

### 放缩

### 翻转

### 数据增强
```
sequence = iaa.Sequential([
sometime(iaa.GaussianBlur((0, 1.5))),
sometime(iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5))),
sometime(iaa.AdditiveGaussianNoise(
loc=0, scale=(0.0, 3.), per_channel=0.5)),
sometime(iaa.Dropout((0.0, 0.1))),
sometime(iaa.CoarseDropout((0.10, 0.30),
size_percent=(0.02, 0.05), per_channel=0.2)),
sometime(iaa.Add((-10, 10), per_channel=0.5)),
],
random_order=True
)
```

### pre

### vis

## 小车
| 零件 | 前视图 | 俯视图 |
| :----: | :----: | :----: |
|  |  |  |
### 必要零件
1. [舵机转向小车](https://m.tb.cn/h.3A2XMXm?sm=cc99ea)
2. [电机驱动](https://m.tb.cn/h.3A2237d?sm=8b2ce4)
3. 树莓派
4. 手柄
5. 摄像头
6. 7.4V电池组(两节18650充电电池)
7. 5V充电宝
### 前轮转向
| Brown | Red | Orange |
| :----: | :----: | :----: |
| GND | VCC | SIG |
```
# Front Wheel
SIG = 12
# BOARD or BCM
GPIO.setmode(GPIO.BOARD)
GPIO.setup(SIG, GPIO.OUT)
car = GPIO.PWM(SIG, 50) # 50HZ
car.start(0)
```
### 后轮驱动
| SLP | PWM | DIR | M+ | M- | Status |
| :----: | :----: | :----: | :----: | :----: | :----: |
| H | H(PWM) | H | H | L | Forward |
| H | H(PWM) | L | L | H | Backward |
| H | L | X | L | L | Brake |
| L | X | X | X | X | Stop |
```
# Rear Wheel
SLP = 4
DIR = 11
PWM = 13
# BOARD or BCM
GPIO.setmode(GPIO.BOARD)
# GPIO.setup(SLP, GPIO.OUT) # +5V (The channel sent is invalid on a Raspberry Pi.)
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(PWM, GPIO.OUT)
car = GPIO.PWM(PWM, 10*1000) # 10kHZ-30kHZ
car.start(0)
```
## 手柄

### 手柄测试
```
$ sudo apt-get install joystick
$ jstest /dev/input/js0
Time:0 A:0 B:0 X:0 Y:0 LB:0 RB:0 MENU:0 LO:0 RO:0 LX:0 LY:0 RX:0 RY:0 LT:-32767 RT:-32767 XX:0 YY:0
......
```
### XBOX手柄映射表
| 编码 | 解释 | 编码 | 解释 |
| :----: | :----: | :----: | :----: |
| BUTTON_A = 0 | 按键A | AXIS_LX = 0 | 左摇杆X轴 |
| BUTTON_B = 1 | 按键B | AXIS_LY = 1 | 左摇杆Y轴 |
| BUTTON_X = 3 | 按键X | AXIS_RX = 2 | 右摇杆X轴 |
| BUTTON_Y = 4 | 按键Y | AXIS_RY = 3 | 右摇杆Y轴 |
| BUTTON_LB = 6 | 按键L1 | AXIS_LT = 4 | 按键L2 |
| BUTTON_RB = 7 | 按键R1 | AXIS_RT = 5 | 按键R2 |
| BUTTON_MENU = 11 | 按键MENU | AXIS_XX = 6 | 方向键X轴 |
| BUTTON_LO = 13 | 左摇杆按键 | AXIS_YY = 7 | 方向键Y轴 |
| BUTTON_RO = 14 | 右摇杆按键 |
### PS手柄映射表
| 编码 | 解释 | 编码 | 解释 |
| :----: | :----: | :----: | :----: |
| BUTTON_A = 0 | 按键A | AXIS_LX = 0 | 左摇杆X轴 |
| BUTTON_B = 1 | 按键B | AXIS_LY = 1 | 左摇杆Y轴 |
| BUTTON_X = 2 | 按键X | AXIS_LT = 2 | 按键L2 |
| BUTTON_Y = 3 | 按键Y | AXIS_RX = 3 | 右摇杆X轴 |
| BUTTON_LB = 4 | 按键L1 | AXIS_RY = 4 | 右摇杆Y轴 |
| BUTTON_RB = 5 | 按键R1 | AXIS_RT = 5 | 按键R2 |
| BUTTON_SELECT = 6 | 按键MENU | AXIS_XX = 6 | 方向键X轴 |
| BUTTON_START = 7 | 按键START | AXIS_YY = 7 | 方向键Y轴 |
| BUTTON_HOME = 8 | 按键HOME |
| BUTTON_LO = 9 | 左摇杆按键 |
| BUTTON_RO = 10 | 右摇杆按键 |
### 读取手柄数据
根据上述映射表,可以利用python实现jstest命令的功能,即读取/dev/input/js0的数据。\
[Linux内核文档](https://www.kernel.org/doc/Documentation/input/joystick-api.txt)提到手柄事件定义:
```
struct js_event {
__u32 time; /* 事件时间戳,以毫秒为单位 */
__s16 value; /* 值 */
__u8 type; /* 事件类型 */
__u8 number; /* 轴/按钮编号 */
};
```
直接读取/dev/input/js0内容即可:
```
EVENT_SIZE = struct.calcsize('IhBB')
dev = open('/dev/input/js0', 'rb')
while True:
event = dev.read(EVENT_SIZE)
(time, value, type, number) = struct.unpack('IhBB', event)
# TODO
```
### 树莓派无法连接蓝牙手柄解决方案
```
$ sudo vim /sys/module/bluetooth/parameters/disable_ertm
将N改为1
```
## 摄像头

### 拍照测试
```
import picamera
import time
camera = picamera.PiCamera()
camera.resolution = (320, 160)
camera.rotation = 180
camera.start_preview()
time.sleep(5)
camera.capture('photo.jpg')
camera.stop_preview()
```
### 录像测试
```
import picamera
import time
camera = picamera.PiCamera()
camera.resolution = (320, 160)
camera.rotation = 180
camera.start_preview()
camera.start_recording('video.h264')
time.sleep(5)
camera.stop_recording()
camera.stop_preview()
```


辣椒种子
- 粉丝: 4390
- 资源: 5859
最新资源
- chromedriver-win64_136.0.7072.0.zip
- Cursor功能详解(对比通义灵码).pptx
- comsol声子晶体模型,减振、降噪两部分,四个模型,对应的复现工作:多振子声子晶体低频特性、低频完全禁带机理、嵌套迷宫、迷宫型通风声学超材料 适合初学者学习comsol和声子晶体使用 ,基于Com
- 基于springboot框架的Javaweb服装销售管理平台的设计与实现(完整源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip
- chromedriver-win64_136.0.7070.0.zip
- chromedriver-win64_136.0.7069.0.zip
- 笔试面试-MySQL、MariaDB、SQLite .zip
- 四分之一车被动悬架双质量(二自由度)simulink模型,matlab simulink车辆模型 输入:路面不平整度 输出:车轮加速度、车身加速度、车轮动载荷 matlab2016b及以上版本打开
- comsol水系锌离子电池浓度场电场模拟 ,基于Comsol的锌离子电池水系浓度场与电场模拟研究,基于COMSOL的水系锌离子电池浓度场与电场综合模拟研究,comsol; 水系锌离子电池; 浓度场;
- TIA博途转至在线时报错:无法到达所选择的在线目标.docx
- comsol水系锌离子电池,PH值模拟 模型 添加其他物质后Ph值发生改变 ,模拟PH值变化的comsol水系锌离子电池模型研究,模拟PH值变化的水系锌离子电池模型研究:深入探索添加物质对PH值的影
- 三相共直流母线式光储VSG 同步机 构网型 组网型逆变器 仿真包含前级光伏PV与Boost的扰动观察法最大功率追踪,共直流母线式储能Buck-boost变器,采用电压电流双闭环控制 三相VSG 同步
- 3D相册特效页面源代码
- Autoforner 、Reformer、transformer、informer用于时间序列预测 各模型都已经封装好,直接调用即可,一个代码可实现四种方法 Python代码 PyTorch框
- 基于光伏并网储能的功率协调控制 本仿真是基于光伏发电搭建的储能与单相并网的模型,模型由光伏Boost发电系统、单相逆变并网系统以及双向DCDC储能系统组成 其中光伏发电采用观察扰动法实现MPPT最大
- 基于DCT的数字图像水印嵌入及提取,matlab gui,可以更为自己的图片 有中值攻击、噪声攻击、旋转攻击、剪切攻击和缩放攻击四种攻击方式 ,基于DCT的数字图像水印技术:Matlab GUI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


