# Automatic Parallel Parking: Path Planning, Path Tracking & Control

This repository contains a python implementation of an automatic parallel parking system in a virtual environment that includes path planning, path tracking, and parallel parking. The agent navigates its route through the environment and is directed to the assigned park location by the MPC controller. You can find the article on Towards Data Science.

## Envroinment

The first step to develop an auto park system is to design and develop an environment capable of giving visual render using `OpenCV` library. The environment is implemented in `environment.py` as a class and receives obstacles at the beginning `env = Environment(obs)`. The agent can be placed using `env.render(x,y,angle)`. A sample of the environment is displayed below. You can choose the parking spot from 1 to 24.

## Path Planning

#### A* Algorithm

The agent will find a path from start to its goal using A*. This implementation of A* from PythonRobotics considers parameters like obstacles and robot radius.

#### Interpolating Path With B-spline

After finding a path in a discrete 100*100 space, the path is smoothed and scaled to 1000*1000 space of environment using b-spline. The result is a set of points to guide our agent!

## Path Tracking

The kinematic model of the car is:

``````x' = v . cos(ψ)
y' = v . sin(ψ)
v' = a
ψ' = v . tan(δ)/L
``````

`a: acceleration, δ: steering angle, ψ: yaw angle, L: wheelbase, x: x-position, y: y-position, v: velocity`

The state vector is:

``````z=[x,y,v,ψ]
``````

`x: x-position, y: y-position, v: velocity, ψ: yaw angle`

The input vector is:

``````u=[a,δ]
``````

`a: acceleration, δ: steering angle`

#### Control

The MPC controller controls vehicle speed and steering based on the model and the car is directed through the path. There is an option for using the linearized model for MPC. In this case MPC linearizes the kinematic model around the operating point and then does the optimization.

## Parallel Parking

This part consists of 4 rules that the agent must choose according to parking position. At first, the agent will find a path to park position then it will compute the arriving angle. Based on the arriving angle, the agent chooses a coordinate as ensure1. After that, the parking path is planned from ensure1 to ensure2 using 2 circle equations as mentioned below. MPC controls the agent and car parks in ensure2 coordinate.

## Inference

Run the code using this command:

``````\$ python main_autopark.py --x_start 0 --y_start 90 --psi_start 0 --parking 7
``````

We as Team Pandas won 1st place in the National Rahneshan competition 2020-2021 for autonomous vehicles. This contest has been one of the most competitive and challenging contests in the Rahneshan tournaments with more than 15 teams competing from top universities in Iran.

## Contact

##### This is a practice on Airflow, which is building virtual env, installing Airflow and constructing data pipeline (DAGs)

airflow-test This is a practice on Airflow, which is Builing virtualbox env and setting Airflow on that env Installing Airflow using python virtual en

##### 🤖🤖 Jarvis is an virtual assistant which can some tasks easy for you like surfing on web opening an app and much more... 🤖🤖

Jarvis 🤖 🤖 Jarvis is an virtual assistant which can some tasks easy for you like surfing on web opening an app and much more... 🤖 🤖 Developer : su

##### Find virtual hosts (vhosts) from IP addresses and hostnames

Features Enumerate vhosts from a list of IP addresses and domain names. Virtual Hosts are enumerated using the following process: Supplied domains are

##### A modern python module including many useful features that make discord bot programming extremely easy.

discord-super-utils Documentation Secondary Documentation A modern python module including many useful features that make discord bot programming extr

##### This is a vscode extension with a Virtual Assistant that you can play with when you are bored or you need help..

VS Code Virtual Assistant This is a vscode extension with a Virtual Assistant that you can play with when you are bored or you need help. Its currentl

##### TeamFleming is a multicultural group of 20 young bioinformatics enthusiasts participating in the 2021 HackBio Virtual Summer Internship

💻 Welcome to Team Fleming's Repo! #TeamFleming is a multicultural group of 20 young bioinformatics enthusiasts participating in the 2021 HackBio Virt

##### Automatically deletes Capital One Eno virtual cards for when you've made a couple too many.

eno-delete Automatically deletes Capital One Eno virtual cards for when you've made a couple too many. Warning: Program will delete ALL virtual cards

##### JPMC Virtual Experience

This repository contains the submitted patch files along with raw files of the various tasks assigned by JPMorgan Chase & Co. through its Software Engineering Virtual Experience Program on Forage (formerly Inside Shepra).

##### A webdav demo using a virtual filesystem that serves a random status of whether a cat in a box is dead or alive.

A webdav demo using a virtual filesystem that serves a random status of whether a cat in a box is dead or alive.

• #### Question about vehicle length

Thank you for your work. I have question about vehicle length. `length=4` in https://github.com/Pandas-Team/Automatic-Parking/blob/master/CAR%20kinematic%20model/main_autopark.py#L53. But is it better to be `length=5` because wheelbase is `50` in `1000 coordinates` (https://github.com/Pandas-Team/Automatic-Parking/blob/master/CAR%20kinematic%20model/environment.py#L12) and `5` in `100 coordinates`

opened by kosuke55 4

1/ kinematic.

Currently, written:

``````The kinematic model of the car is:
x = vcos(ϕ)
y = vsin(ϕ)
v = a
ϕ = vtan(δ)/L
``````

1.1/ Missing derivative symbol `'`. Should be:

``````The kinematic model of the car is:
x' = v . cos(ϕ)
y' = v . sin(ϕ)
v' = a
ϕ' = v . tan(δ)/L
``````

1.2/ Missing: `a: acceleration, δ: steering angle, ϕ: yaw angle, L: wheelbase, x: x-position, y: y-position, v: velocity` 1.3/ v was stuck to cos, sin, tan.

2/ The state vector.

The symbol φ should be ϕ

3/ The input vector

There is a typo `a: accellation, δ: steering angle` => acceleration :)

opened by Lecrapouille 4
• #### problem about car control

Hi,

Please see the attached video, I don't change any thing, but the control looks very wired, could someone tell me what the problem is? Thanks.

https://user-images.githubusercontent.com/9857420/169484973-ff404723-defd-4bae-a209-db1be99bea64.mp4

opened by Phymin 1
##### Releases(v1.0)
###### pyToledo is a Python library to interact with the common virtual learning environment for the Association KU Leuven (Toledo).

pyToledo pyToledo is a Python library to interact with the common virtual learning environment for the Association KU Leuven a.k.a Toledo. Motivation

5 Jan 3, 2022
###### Identify unused production dependencies and avoid a bloated virtual environment.

creosote Identify unused production dependencies and avoid a bloated virtual environment. Quickstart # Install creosote in separate virtual environmen

7 Dec 29, 2022
###### Scripts used in the RayStation medical radiation dosimetry treatment planning system

Med Phys Scripts These are scripts that I, the medical physics assistant at Cookeville Regional Medical Center, wrote for use in our radiation therapy

2 Oct 19, 2022
###### C++ Environment InitiatorVisual Studio Code C / C++ Environment Initiator

Visual Studio Code C / C++ Environment Initiator Latest Version : v 1.0.1(2021/11/08) .exe link here About : Visual Studio Code에서 C/C++환경을 MinGW GCC/G

2 Dec 19, 2021
###### MiniJVM is simple java virtual machine written by python language, it can load class file from file system and run it.

MiniJVM MiniJVM是一款使用python编写的简易JVM，能够从本地加载class文件并且执行绝大多数指令。 支持的功能 1.从本地磁盘加载class并解析 2.支持绝大多数指令集的执行 3.支持虚拟机内存分区以及对象的创建 4.支持方法的调用和参数传递 5.支持静态代码块的初始化 不支

60 Apr 1, 2022
###### Modelling and Implementation of Cable Driven Parallel Manipulator System with Tension Control

Cable Driven Parallel Robots (CDPR) is also known as Cable-Suspended Robots are the emerging and flexible end effector manipulation system. Cable-driven parallel robots (CDPRs) are categorized as a type of parallel manipulators

0 Jul 19, 2022
###### LINUX-AOS (Automatic Optimization System)

LINUX-AOS (Automatic Optimization System)

1 Jul 12, 2022
###### Virtual Assistant Using Python

-Virtual-Assistant-Using-Python Virtual desktop assistant is an awesome thing. If you want your machine to run on your command like Jarvis did for Ton

1 Nov 13, 2021
###### Powerful virtual assistant in python

Virtual assistant in python Powerful virtual assistant in python Set up Step 1: download repo and unzip Step 2: pip install requirements.txt (if py au

3 Jan 23, 2022
###### A free and powerful system for awareness and research of the American judicial system.

CourtListener Started in 2009, CourtListener.com is the main initiative of Free Law Project. The goal of CourtListener.com is to provide high quality

332 Dec 25, 2022