PythonPilot has an extensive set of features critical already built in and described on this site:
- Attitude Stabilization — Roll and pitch angles go to horizontal, and heading remain fix when releasing the command input sticks
- Altitude Hold — altitude setpoint
- Control laws that utilize baro-altimeter, magnetometer, and an IMU (inertial measurement unit, the MPU6050) sensing body angular rates and linear accelerations
- Command input processing from controller stick inputs
- Real-time telemetry thru WiFi and plotting of GPS trajectory on a map
- Auto-land at current location
The following are what we are working on now or in the not to distant future:
- Horizontal hold using GPS location, possibly augmented with down-looking stereo cameras
- Auto-home and land, either pilot initiated or through the event of a lost link
- Lost link detection
- Open-CV display of GPS location on Google map
- Flight attitude recovery following severe input disturbance and violent initial conditions
- Autonomous flight mode with way-point navigation
- Port from Debian to Stretch (Linux)
This is an interesting project. I’m still reviewing your code, but I’ll just post my question here in case anyone has a silver bullet solution. I would like to solve a grid-world like problem with one or multiple UAVs. How can this be done with your python pilot? The most basic version of this is that I would tell my UAV the destination and it would A* plan its way there. Which file would I edit to start?
Also, have you tried to run your code and baseline UAV/UGV models through any of the SubT challenge virtual worlds? If not you can find them here:
https://subtchallenge.world/openrobotics/fuel/collections/SubT%20Tech%20Repo
Please don’t hesitate to contact me in case you would be interested in a possible DARPA collaboration.
Sam
Sam:
There are two levels to a potential solution to this problem. The first level is the formation of a swarm network of UAVs which we have attempted successfully in the lab using applications like Docker Swarm and others. The API is installed under the embedded Linux OS that is found within the RPi. Once Docker is installed, network node IP addresses can be identified and adhoc networks can be formed. At that point our PythonPilot flight controller can be accessed from any one of the nodes.
The second level is recognizing the environment in the cave. We have openCV installed in our Raspberry Pi’s and optical data from 2 cameras on board the UAV could be used to obtain images for openCV processing to identify features in the cave. You need a high density of network nodes inside the caves in order to maintain RF links within the difficult conditions within caves.
A link with useful relevant information:
https://github.com/nerdily/Raspberry-Pi-Docker-Swarm/wiki
The file in which to enter related code would be ‘gnc.py’ in the subroutine ‘nav’.
Hi Mike,
Thank you for pointing me to the right file and providing the information about docker swarm. I’ve used Docker before and I’m fond of it, but I wasn’t aware of Docker Swarm!
What I would like to do is to find a way for a team of quad-copters to share their state vector with their nearest neighbors. For example, if there is a team of 3 quad-copters, each one would share its state vector with two of its nearest neighbors. I was thinking through how this can be done, but I’m not coming up with a good solution. Broadcasting state seems excessive and estimating nearby quad-copter state also seems excessive (when there are many).
Thanks in advance
Sam