New Project: Flying behind the mountain

I decided to try something new for me, and I will try to develop a system for FPV mountain flying which would allow to go beyond the LOS, basically flying behind mountains, going down valleys on the other side of the ridge, or flying from deep valleys over flat plateaus above. All this obviously involves loss of direct line of sight.

I am thinking of using a relay copter which would retransmit video signal, RC signal, and which would have a directional antenna with tracking.

First, I would set the specifications so as to be quite clear as what I want to achieve.

  1. The system must be operatable by just one person, i.e. the relay copter and the main copter should not have different RC controls, etc., with the relay copter being flown either in Auto mode or a follow the main copter mode.
  2. The system must have a range of 15 km. and allow for 40 minutes of flight time.
  3. The system must be wind resistant to at least 20 knots.
1 Like

I will start with the easiest thing - analog video retransmission.

Hardware-wise I plan to use a 17 dbi patch antenna
I am using one right now on my groundstation, and its dbi value seems to be quite close to truth.
I have run tests on it using the 25 mW VTX setting, and I was barely able to get to 6 km. With the 2 W transmitters from AKK, the theoretical range would be close to 50 km… which leaves a good margin for my requirement of having 15 km. range.

This antenna would be mounted on the relay copter, it would have two degrees of freedom for pointing - in yaw axis obviously using the copter itself, and in pitch axis using a simple mount with a servo which would allow to point it +10 -60 degrees.

Now in strong winds, when stationary, the relay copter may be inclined sidewise, but it is negligable, I would expect not more than 15 degree lateral roll inclination for winds up to 40 km/h. For this reason I would not introduce the third degree of movement.

I have run tests to check whether a retransmitting VTX would affect the reception. For this I flew on 25 mW to a distance of 2 km., and then turned on a VTX on 3W on the ground and moved it around the 17 dbi antenna to see how it goes.

I set the flying copter to E1 channel, and simulated retransmitting VTX to A1 channel, (5705 MHz flying, 5865 Mhz Ground).

There were observable interferences starting from about 50 cm distance, which completely erased the signal at 30 cm. However, if you put the retransmitting dipole antenna behind the patch antenna (obvious, ha ha), the video was acceptable to a distance of 30 cm. Once I put a metal plate or carbon fiber plate between the VTX and the antenna, I was able to move the VTX as close as 10 cm, to the patch without virtually any loss of video quality.

So, 2 km. and 25 mW are equivalent to 16 km and 1600 mW. Basically, this complies with my requirement of having a 15 km. range.

Now, from that test, I have decided to mount the 17 dbi antenna below the main copter plate (I have a copter with main plate made from balsa wood encapsulated in carbon fiber, the plate has a big size, 14 x 25 cm.). I would have to extend the legs to accomodate the antenna which is about 8 cm high. Also, to increase separation, I would mount the VTX on a mast of maybe 30 cm well above the main plate and also above the battery. So liion battery and the main plate would provide excellent shielding from the retransmitting VTX mounted on mast.

Finally, on the mast, I may put another shield to improve performance.

1 Like

The pointing of the relay copter 17 dbi antenna could be done in three ways.

  1. Just plain manually, you would visually point the relay copter in yaw towards the area where the main copter would be flying, and using a pot for pointing the antenna in pitch. Since the antenna is quite directional, one may have to correct the pointing from time to time when the other copter moves away. The antenna has to be ideally pointed ±7 degrees.
  2. Using autotracking correction based on Video RSSI. I plan to use the old fashion RC305 which is unsurpassable as to sensitivity, and that has a RSSI pin which goes from 0.45 to 1.1 V. I am not sure if I could pull off the autotracking using LUA script alone, but certainly using a small basic microprocessor, something like a nano or Pi pico, there is no need for companion computer I think.

The algorythm for this would be something like this:
LUA script, from time to time (maybe once every 30…60 seconds) would initiate autotracking cycle. During this cycle, the copter would be rotated first CCW by 15 degrees, than slowly rotated CW by 30 degrees, and then back CCW by 15 degrees to get back to original position.
Lua script would communicate with the Nano using a servo output channel. So normally, the output of that channel would be 1000 uS, but when LUA starts, it will change to let us say 1500 uS, and each 10 uS would be equivalent to 1 degree. So when turning to 15 degrees CCW, the servo output would be 1500-150 =1350, and when fully clockwise 1500+150=1650. The Arduino Nano when it receives the PWM from servo connection will determine when the scan schould begin, i.e. when the channel goes down to 1350 and begins to increase. The Nano would get the RSSI values from ADC from the RC305 receiver in an array. After finishing the scan, Nano would analyze the results finding the best reception angle. One must be careful there so as not go beyond the null for side lobes, which would upset the whole idea, but it can be corrected.
Here, I am not sure how to transmit the best angle back to the FC. I want to avoid using Mavlink because it is not so easy to setup on a small arduino style MC. I am not sure if a direct serial link between LUA script and Nano can be established… that may be a question for the experts…
One very awkward method would be that after the scan, the LUA script repeats sending the pulses increasing from 1350…1650 uS without moving the copter, and Nano would respond by changing some FC GPIO channel to high when the correct value is received…
Once Lua receives the best angle, it corrects the copter Yaw orientation to that angle.

Without Nano, one would have to use some ADC input of FC, but I am not sure if it can be directly read by LUA script.

The good thing about this optio is that it does not require position of the main copter to be known to the relay copter, i.e. no link is needed between the two.

  1. Finally, using positional data of the other copter. For that there must be a modem connection between the main copter and the relay copter.
1 Like

Hi @Michail_Belov,

Sounds like a great project.

Re the auto tracking feature, if it were me I’d set up the system so that the intermediate copter intercepts and uses the main vehicle’s mavlink stream and uses it for pointing the antenna in the correct direction.

I’d probably then use a lua script to control the intermediate copter so that it is always midway between the home location and the main vehicle. AP’s AP_Follow library maintains the location of other vehicles positions received via mavlink although I’m unsure if we have Lua bindings for the follow library. Those bindings would be fairly easy to add though

1 Like

Read through The Outback Challenge stories too, there might be something in there you can use since a heli was used as a relay, or at least that was the plan…

Hello @rmackay9, regarding the AP’s AP_Follow library, I have a question for the rover similar to the issue discussed in this topic:
Issue with FOLLOW object in Lua script for rover to follow copter. Do you have any suggestions on how to use AP’s AP_Follow library for a rover with a Lua script? Thank you!

The experience I had with narrow beam trackers I have used before (30 dbi/5.8 ghz) was that in addition to simply following the plane using the GPS position, you always had to correct for the best reception using RSSI scans. So you would roughly setup the antenna for plane GPS position, then get the sweetspot using RSSI scan, and then you continue tracking using GPS, but still from time to time doing an RSSI scan. I believe I was able to get close to 1 degree pointing.

I also did a tracker mode for following planes without GPS data, i.e. the tracker would scan both elevation and azimut, and it also worked fine for intermediate distances.

Now, the 17 dbi antenna is much more lax, so that the autoscan feature may not be necessary, and one could just use GPS position of the main copter…

As far as controlling the Relay copter, I have several ideas, but it is not as simple as let it take some intermediate position. Depending on geography, you would have to take it to the correct spot, if you want to fly for instance beyond the ridge, you would want the relay copter be just above the ridge.

I think that the best way is to fly tandem, i.e. the relay copter follows the main copter closely and autonomously, maybe using guided mode, where the coordinates are sent from the main copter continuously to the relay copter. Once we reach the spot where the relay copter will stay, a button press would revert it to something like Loiter Mode where it will simply hang around and work like an antenna tripod…

1 Like

Examples of autoscan RSSI: first one shows multilobes when the scan is wide, and the program rejects automatic decision, leaving the operator to decide, second one is a more typical and simple to get automatic decision for the best angle correction.


1 Like

I have been thinking about the RC control structure, and also about the telemetry for the system.
Implementing the RC seems not to be too complicated, what I have to do is use one set of TX and RX which goes on the Relay copter, and another set of TX on the Relay copter, and the final RX on the Main Copter. It is quite obvious that it is preferable to have different frequencies so as not to cause range reduction due to a powerful transmitter being close to a RX, so the natural thing would be to use 2.4 Ghz for the GS – Relay copter, and 900 Mhz for Relay to Main Copter. So far my experience with express LRS was that even with 2.4 Ghz there are no range issues, it goes pretty much to 20 km with standard equipment and antennas, and if needed, a Moxon or even small Yagi on the GS TX would almost double the range, so the reason for using 900 Mhz is purely for separating frequencies. I do not have a second 2.4 GHz transmitter to test out the potential interference (maybe I am just worrying about something it is not there).

One big problem is how to control two copters using just one RC Radio. I have a radio with additional sticks which I made for controlling two pan and tilt cameras for fixed wing, but they obviously can be used for controlling another copter. The way it works is that there is an arduino nano which reads using adc the stick positions, and also two sliders which were used as trims for pitch and roll for fixed wing, and then sends these in PPM stream into trainer jack of the main radio.

LRS has one option where 16 full channels can be used, and I am inclining for using these 16 channels for controlling the two copters. That is, there would be one transmitter which sends all the 16 channels, and there would be two receivers, one on the relay copter, which would use about 7 channels, and the other on the main copter, which would use 9 channels. The main copter will receive the channels through the 900 MHz link.

1 Like

@Michail_Belov

Very impressive!!

Had been doing some more thinking about this project, and I feel that one can do the following:

First, both copters should be controlled from one radio, that is a safety issue, you would not want to juggle radios, etc. There is a “small” catch, FAA, does not like one person flying two aircrafts… But who likes FAA?

Second. For the relay copter, I think that I can get away with a maximum 6 channels, leaving the other 10 channels for the main copter. The way to do it is to use 4 channels for the main controls, and 1 channel for the flight mode selector. These 5 channels are key to safety and should not be multiplexed or programatically touched by any means. Now, for the remaining 6th channel I am thinking of multiplexing several channels into it, most probably by means of LUA.

I need at least the following functions:

Switch Video Channel 1/2
Point VRX antenna in elevation, about 10 positions
Possibly, switch for killing motors

Easiest way to do so would be on GS radio to condition the signal in this way:
switch 1 on - 1000 uS, off 1050 uS
switch 2 on - 1100 uS, off 1100 uS
switch 3
switch 4 1200 uS
Analog range 1250..1500
Analog range 1550..1800

The GS MC (additional MCcccC, of the nano type or similar) would condition the signal in sequence, i.e. will read the switch 1, send a pulse of 1000/1050 for 25 mS, then switch 2, switch 3, Analog 1, Analog 2.

The LUA on the copter will decode these, basically, reading the value, if the value is between 999 and 1075, that means switch 1, and it will set switch 1 to either on or off depending on the value. If the value received is beyond that range, the LUA will keep outputting the last received value, either permanently or up to a certain timeout period, after which a preset value will be output.
The analog signals will be expanded, i.e. 1250..1500 will become 1000..2000.

With update rates of 100Hz or more on the Express LRS, there is absolutely no issue of obtaining 6 digital on/off channels and 2 analog channels with a real update rate of about 5..10 Hz. Just for reference, for long range fixed wing planes, I have set update rates of around 6Hz. 4 Hz felt like sluggish, and I could not see any difference between 8 Hz and 20 Hz update rate. (Just wonder, what jerk needs an update rate of 1000 Hz in Express LRS?).

So with this method I can get enough channels in one channel.

Flying the relay copter.

There are several possibilities, but the most basic one, which does not require communications between the main copter and the relay copter would simply be to create an Auto Mission.
That would involve just setting a WAYPOINT where the copter will hang, then DO-SET-ROI where the copter will face the general direction where the main copter would be flying, then DELAY with maybe 20 minutes, and then another WAYPOINT (not RTL) close to the Home, may be 50 meters high, some 100 meters away.

It is very important to set battery failsafe values for RTL for this copter and also a LUA script which would monitor the battery voltage and which would initiate either RTL or skip to the final WAYPOINT (I have to think of a way of doing it).

Now, the LUA monitor would calculate the time and energy needed to return, basically it will take the altitude, divide it by the descent rate to estimate descent time, and than also the distance/speed to estimate the return flight time. Andd than it will check the battery to determine when it is time to call off. Probably using used mah versus battery max mah and/or voltage based estimate of real mah. capacity (like a table, where you have voltage, compensated for current, and battery charge).

Since the landing is often done in very close quarters, like a 2 x 2 or 3 x 3 meter space, the landing always has to be done manually (I would not trust GPS for that). Since we are flying two copters, the idea is that the relay copter goes back on RTL or to the waypoint close to home. If it is RTL, once the copter is within 50 meters from Home (both distance and height), a LUA script would cancel RTL and issue a Loiter command with a timeout of maybe 2..4 minutes. After the timeout LUA will reactive RTL for landing. Also, Battery critical failsafe could also activate immediate RTL from close point if we run out of battery.

A very nice feature of the AUTO mode is that one can turn the copter in yaw without exiting the AUTO mode. So one can either manually correct the antenna pointing using the yaw stick, or one could make a LUA script which would move the copter in yaw using RSSI scans for the best signal reception.