The spacecraft is initially at a periodic orbit (black dash). SetRRT finds the state and control trajectory from the initial orbit to an asteroid (green ball). During planning, it does not consider any uncertainty.
Four different initial orbits and environments are included. The blue line is the nominal controlled trajectory. The red dash line is the controlled trajectory with process noise. The first row has no unsafe space. The second row has multiple unsafe space.
- unconstrained state space
![]() |
![]() |
![]() |
![]() |
- state space with circular unsafe regions
![]() |
![]() |
![]() |
![]() |
- 10 Unsafe Regions: State and Control Trajectory
![]() |
![]() |
- Animation
solarsail.mp4
The framework can be applied to other problems, provided their ODEs.
A marine vessel controlled by forward velocity (u1) and yaw rate (u3). The mission is to reach the green goal and avoid the red unsafe regions.
![]() |
![]() |
Animation
marine_vessel_2.mp4
An inverted pendulum is attached to a cart. The cart is controlled by a horizontal force u. The system has four states: angle and angular rate of the inverted pendulum; position and velocity of the cart. The goal is to:
- swing up the inverted pendulum such that it is at the upright position.
- the position and the velocity of the cart should also reach a certain region.
![]() |
![]() |
Animation
| cart x = 0 |
cart x = 1 |
We can further optimize the controlled trajectory using the Set-RRT-AO planner. The -AO stands for asymptotically optimal.
The cost measure is the total time of the controlled trajectory. We can obtain a faster solution to reach the goals. Below we show the examples of: solar sail, marine vessel, and cart inverted pendulum.
- Solar Sail
| time: big |
time: small |
- Marine Vessel
| time: big |
time: small |
- Cart Inverted Pendulum
| time: big |
time: small |
Consider now the system is influenced by process noise. We employ a LQR control to update the control signals of the motion planner in run-time:
First, we show the animation of the (blue) ideal trajectory generated by the motion planner (without process noise), and (red) run-time trajectory using motion planner + LQR update to address process noise.
invert_pendulum_simple.mp4
Secondly, we compare the results of (Purple) only motion planner, (Red) motion planner + LQR update, and (Orange) only LQR, for run-time control under process noise. The below animation shows why we need (motion planner + LQR update).
| Purple: only motion planner. Red: motion planner + LQR update |
Orange: only LQR. Red: motion planner + LQR update |
Note, however, that this approach does not guarantee to satify the control goal (state and control within the domain). The below animation shows the same simulation setup, but this time the cart position state exceeds the feasible domain [-2,2]. This motivates other approaches.
invert_pendulum_simple.mp4
cd root folder
cmake -B build .
cmake --build build
./build/bin/test_main
docker build -t jordan787878/solarsail:tag .docker run -it --name solarsail-dev --rm -v $(pwd):/develop jordan787878/solarsail:tagcd build
cmake ..
makedocker push jordan787878/solarsail:tag













