---
# System prepended metadata

title: motion planning
tags: [cs 593 robotics]

---

---
title: motion planning
tags: cs 593 robotics
---

## Collision Avoidance

subspace of w-space and c-space that represents free space and space used by an obstacle
w-space -> x_free and x_obs
c-space -> q_free and q_obs

$$H(q,w_{space}) = {0 \text{ or } 1}$$
> functional mapping of x_free and x_obs

separation of axis theorem
- two shapes only intersect if they have overlap when "projected" onto every unique normal axis of both shapes
    - method to determine if bodies are colliding
    
fcl library: https://github.com/flexible-collision-library/fcl
- used for collision detection

## Motion Planning
Definition: to coordinate agent's motion sequence to move from desired start to desired goal while respecting all task constraints

- collision avoidance constraint

$$
min_q \int_0^1H(q(u))du + \phi q(1)
$$

$\phi q(1)$ = weight matrix

$q(0) = q_0$ -> start
$q(1)$ = goal 

optimal control: control (MPC, PID - good for local search, but not for long horizon)
ai: optimal search (A*)
numerical optimization optimization: trajectory optimization (gradient descent, struggle with hard constraints)
motion planning: global solutions, algorithmic analysis, computational complexity, completeness guarantee


Sampling-based methods (most used in industry, arguable)

Learning-based SMP


History



### sampling-based methods

#### RRT (rapidly exploring random tree)

```
T = init_tree(q_start)
for i = 0 to u = N
    q_rand= sample_obs_free(i))
    q_nearest = Nearest(T, q_rand)
    if steer(q_nearest,q_rand):
        T = insert_node(T,q_nearest,q_rand)
return T

def sample_obs_free(i):
    # sampling of points in c_space, independent to tree T

def steer(q_nearest, q_rand):
    # use separation of axis theorem to sample points on the line connecting closest point on tree and see if there is a collision

```

probabilitistic completeness guarantee: probability of finding a path approaches 1 as samples approaches infinity if one exists 


### PRM (probabilistic roadmaps)
multi-query planner
```
initialize G = (V, E)
for i = 0 to u = N
    q_rand= sample(i)
    q_nearest = select k nearest neighbor (q_rand)
    for all q'in q_nearest do:
        if (q_rand, q') not in E and steerA(q_rand, q'):
            E = E U {(q, q')}
```
### RRT Connect
- bi-directional version of RRT
- one tree generated from q_initial and one tree generated from q_goal

connect
- finds nearest neighbor in the other tree
- finds steerA (True, False)

initialize $T^a_{in}(q_{in})$,$T^b_{in}(q_{goal})$
```
for i = 1 to i = N:
    q_rand= sample(i)
    q_nearest = nearestNeig(q_rand, T_a)
    q_new = steerB(q_nearest, q_rand, T_a)
    if q_new != None:
        T_a = (q_new, q_nearest, T_a)
        if connect(q_new, T_b):
            return Path(T_a, T_b)
    swap(T_a, T_b)
```
> We use this in robot arm, its super fast
thats cool ooh okay now i get to find out what it is haha :smiley: haha cute 

### RRT*
```
T = (E, V)
T = initialize_tree(q_init)
for i = 0 to i = N
    q_rand= sample(i))
    q_nearest = Nearest(T, q_rand)
    if steerA(q_nearest,q_rand):
        q_near = nearNodes(T, q_rand, \V|)
        q_best = chooseBestParent(q_near, q_rand, q_nearest)
        T = insert_node(T,q_best,q_rand)
        T = rewire(T, q_near, q_best, q_rand)
return T

def sample_obs_free(i):
    # sampling of points in c_space, independent to tree T

def steer(q_nearest, q_rand):
    # use separation of axis theorem to sample points on the line connecting closest point on tree and see if there is a collision

```

### assignment 1
- given code of RRT for 2D point mass
    - must do near nodes, choose best parent, and rewire 
- circular-rigid body
    - planning
    - collision detection
- rectangular-rigid body
    - implement SAT

RRT* is nlogn computational complexity
asymptotic optimality

### RRT* & RRT
- probabilistic completeness if there exists a path solution
P(T $\cap$ X_goal) = 1
asa n approaches infinity

### limitations
- slow processing
    - suffer from curse of dimensionality
- adaptive sampling

**Take home question: Think of unconventional examples of planning**

**Take home question 2: What is the problem with the iron man suit?**

