Software apps and online services
The idea: Search for a lost person at low altitude in the forest and deliver a GPS tracker
During wildfire it is important to evacuate people very quickly, but it is difficult and time and resource consuming to go throw the whole forest. To fix this we're suggesting to use semi-autonomous drone for this, that allows decrease time for search and increase coverage of looking by using many autonomous drones. We decided to fly on low altitude because trees in forest easily hide person there.
So our proposal is to use autonomous drone that can flight on low altitude in forest and bring GPS tracker to person. In general, instead of GPS tracker it can be delivered communication device, small emergency package and etc.
For this submission we restrict only for searching person that walking on trails case because of the complexity task. But in future that approach can extended for flying out of the trails, and navigation between the trees. For implement described above idea was developed following drone.
During the flightless test with recorded video drone follow expected results. See video below. Unfortunately we faced issue when we power board from LiPo battery and start process video form camera or video file. This leads to shutdown of the NVidia Jatson Nano board. So we need fix the before start flight test.
To implement our solution, we’re using following hardware:
- NXP drone
- NVIDIA Jatson Nano onboard computer for image recognition (detecting person and calculating path on trails) and calculating flight command to drone.
- MYNT EYE-D stereo camera - but can be used any other mono camera
Developed hardware (See full description in Developed hardware - Detailed):
- Connector Battery -> NVidia Jetson Nano J25 power jack – Used for power consumption of the Jatson Nano board computer from LiPo battery
- Package holder with servo - that can hold package and drop it by command from board computer
- Connector - PX4 <-> NVidia Jatson Nano – Connect onboard computer with PX4 autopilot
From software prospective it is heavily relying on:
- ROS Melodic - Robot operation system version Melodic
- MAVROS - MAVLink to ROS gateway with proxy for Ground Control Station, that allow to control drone by ROS messages.
- RedTail NVIDIA project - open source project with implementation of the autopilot to navigate within that trail for NVIDIA JATSON architecture
- ServoKit – python module to control servo. We use the servo to drop package.
There is a video how it works now.
Diagram how it works:
- gscam node – node that convert video stream from video camera to the sequence of messages with one frame (static image)
- trails_dnn node – node that receive image from gscam node and calculate relative offset of the drone to the center of the trail. Used
- object_dnn node – calculated relative position of person on the image if it exists there. Used YOLO computer vision algorithms
- PX4_controller node – convert relative offset of the drone, to command to drone that allow to position drone on the center of the trail and navigation forward. Commands are sending to drone over mavros
- MAVROS node – convert command to drone’s PX4 autopilot to command in MAVLink format
- RC node – node is used to listen the 9th and 10th channels of the drone’s remote controller and start px4_controller and holder node.
- Holder controller node – node that open holder if person is detected on image
Developed hardware – Detailed description:
Connector Battery -> Jetson Nano J25 power jack
We decided for the first prototype take power for Jetson Nano board from the copter battery.
The battery gives about 12V of voltage. So, we needed a step-down voltage regulator which gives, as we calculated, about 5A 5V in general for the following:
- 3A powering Nano itself (which actually could take up to 4A in high loads though)
- 2A stereo camera (Mint Eye D)
This one seem to be a good one - Pololu 5V, 5A Step-Down Voltage Regulator D24V50F5.
We soldered the XT60 male-female connectors to the cable and connected the voltage regulator in the middle of the cable (see pic.1). The cable connected to the battery after the drone power regulator.
Package holder with servo - that can hold package and drop it by command
For the holder we used servo motor attached to the 3d printed "servo clip for drone" detail.
We had to adjust a bit the 3d printed detail in order to fit servo motor size.
To control the servo from the Nvidia Jetson Nano we used PCA9685 Servo Driver with I2C interface.
The PCA9685 is connected to the NVidia Jetson Nano I2C bus #1. Here is the pinout:
- J41 Pin 3 (SDA) -> PCA9685 SDA
- J41 Pin 5 (SCL) -> PCA9685 SCL
- J41 Pin 1 (3.3V) -> PCA9685 VCC
- J41 Pin 6 (GND) -> PCA9685 GND
- Servo Clip for Drone https://www.thingiverse.com/thing:1721849
- Servo https://www.amazon.com/Power-HD-1900MG-1-5KG-Servo-Engine/dp/B07S478338
- 16 channel I2C Servo Driver PCA9685 https://www.adafruit.com/product/815
- Using I2C with NVidia Jetson Nano https://www.jetsonhacks.com/2019/07/22/jetson-nano-using-i2c/
Connectors - PX4 -> NVidia Jatson Nano
To connect Jetson Nano and PX4 we soldered 4-pin JST-GH (on the PX4 side) with regular 2.54 pin connectors
Used following link to wiring https://www.jetsonhacks.com/2019/10/10/jetson-nano-uart/
- Jetson Nano J41 Pin 8 (TXD) → Cable RXD - TELEM2
- Jetson Nano J41 Pin 10 (RXD) → Cable TXD - TELEM2
- Jetson Nano J4 Pin 6 (GND) → Cable GND - TELEM2
How to run:
Install ROS and clone Redtail project and run:
clone hover-games-fight-fire project and install ROS package by catkin_make
$ roslaunch caffe_ros everything_edited.launch
In separate terminal run holder module
$ rosrun holder rc_px4_controller.py
# New terminal
$ rosrun holder rc_holder_controller.py
Before flight setup 9 and 10 channels on Remote controller:
- SwB - Channel 9
- SwD - Channer 10
After takeoff drone
switch SWB and SWD on Remote controller, and drone has to follow trail
What was not finished:
- No test flights under trails within forest or parks
- The drone is not stabilized, and you need to rebalance the addition of a parts of the drone for a stable flight