Follow Mode - Copter

Hello, I’d like to use “Follow Mode” to allow a copter following a moving marker. The position and orientation of the marker will be obtained by an onboard camera. I’ve read that Follow Mode allows to follow an object publishing its position. However, the wiki (http://ardupilot.org/copter/docs/follow-mode.html) doesn’t explain how the position data should be organized…

I wonder the meaning of the sentence “The vehicle lead vehicle’s position must be published to the vehicle in Follow mode using a telemetry system.”

Does anyone knows what kind of data does Follow Mode expect and in which port should I provide them?

Thank-you in advance.

The target vehicle publishes his GPS coordinates (the target vehicle has it’s own GPS receiver) via mavlink messages over a telemetry link into the follower vehicle.
Usually the target vehicle has a PC on board with some GCS software, and that GCS software reads the GPS data and sends it to the follower vehicle.

Really interesting, thankyou…!
Could you please give more details? Which GCS software is needed? Which port should I use for the telemetry link (serial, telem 2…)? If I provide to the copter GPS NMEA sentences with the coordinate of the target, do you think the system could work?
Sorry, I’m quite new to ArduCopter… thank-you in advance

@S259420,

To use follow mode, the mavlink GLOBAL_POSITION_INT message should be fed into the flight controller.

by the way, if you’re planning to hover over a target, then you may instead choose to pass in LANDING_TARGET messages and then precision landing and precision loiter will work. Below is a video doing this with an IRLock sensor:

That’s great!
It’s a lot easier to stick a beacon onto something, than to need a phone or laptop with software and good GPS reception.
Does the irlock sensor also function as an optical flow sensor?

@rmackay9 Thankyou, that’s great. I’ll try both of them. Is Serial4/5 fine to feed the autopilot with mavlink messages, isn’t it?

@S259420, yes it should be possible to pass in the global-position-int message through any of the serial ports on the flight controller.

Hi, I just installed AC3.6.11 on pixhawk. But the ‘Follow’ parameters are missing from the full param list in mission planner. they do exist in AR3.5

?

@novaent, I think it’s most likely that the flight controller suffers from the “1MB Flash Limit” issue meaning that it gets a limited number of features.

Now, it’s possible that the full firmware may fit on the board anyway so you could try loading the “fmuv3” firmware on the flight controller (firmware can be downloaded here, look for the file ending in .apj).

Hi mackay, thanks for the great support. I did load the arducopter.apj file sent by you. The problem of “Follow mode” parameters is on fmuv2 (pixhawk-1) and NOT on fmuv3 (cube). They are all visible on cube.

ANother issue: When I load the older versions AC3.2.1 & AC3.3 the Pixhawk1 (fmuv2) does not bootsup. There is NO problem with AC3.4 and above versions.

Thanks, ravi

Do not downgrade versions, unless you have saved backups with version specific parameter files and upload them after updating.
Failing to do so will get you strange results. Just use the latest versions and do not downgrade.

Did any one had luck with the new ‘follow mode’. I tried all combinations but the drone does not follows the rover. i have telemetry link bewtween the rover and copter. both modems are communicating. i am using AC3.6 on copter and AR2.0 on rover. can someone help.

I used all the features. But the Follow mode does not work. Both the rover and the copter installed 4.0.3 Ardupilot. Telemetry with identical NETID is installed on the rover and copter. At the ground station, two vehicles are visible. Different SYSID_THISMAV are assigned to the rover and the copter (since the SYSID is both 1 by default), the FOLL_SYSID of the copter is selected in the SYSID rover settings. When you turn on the Follow mode, nothing happens. Does anyone have any ideas how to make this mode work?

Hi @rmackay9,
I am trying to follow a car detected by the drone’s camera. I have reliable lat, lon, alt or x,y,z (wrt drone’s home) target positions. How can I use the FOLLOW mode to keep following this target?

Read the follow me documentation on the ardupilot wiki but it relies on a GCS with a GPS on the moving car.
You do not have that, your drone uses it`s own camera to do the math, so you will need dronekit python or mavros to control the arducopter in guided mode.

I`ve implemented this second method and it works great.

Yes, I am using macros. Does my answer here sound reasonable? I will implement this tomorrow.

Link: https://discuss.ardupilot.org/t/arducopter-follow-mode/63097/3

I found the reason why the Follow mode did not work. In 3.6 ardupilot Requesting DATA from the leading to the slave uses SRx parameters that were 0 for SR1 by default. And only for SR0, values ​​were transmitted, including Global_Position_int, which is necessary for the Follow mode. Sometimes, when you first pass USB and then telemetry, the data was transmitted via SR0. Therefore, when updating to version 4.0 and higher, the data was rewritten. In versions 4.0 and above, the values ​​of SR0 and SR1 (for USB and telemetry) are the default 2Hz for Global_position_int. Therefore, no problems with the regime will not be.

Hi @rmackay9, I’m also working with the Follow mode, I have a copter following a target vehicle (vehicle is a Pixhawk running Ardupilot + GPS). By analyzing the logs, I found that the Follower copter would log the target’s position 160 ms later than when the target would log it’s own position (based on GPS time). This makes the copter slow to respond to the vehicle’s acceleration and deceleration.

We’re working on 2 different solutions.

  1. Tweaking my RFD900 parameters to achieve lower latency, or switch to using faster ESP32 modules.
  2. Feeding the target’s acceleration to the copter. Our Follow mode uses the target’s velocity as a control feedforward, as well as predicting the target’s position based on the 160 ms delay (this delay is pretty consistent). By adding an acceleration feedforward, we’d be able to quickly match the target’s velocity.

My question is, since GLOBAL_POSITION_INT doesn’t have acceleration data, what message should I use then? Is FOLLOW_TARGET the appropriate message? Or is that a message only transmitted by the GCS?

I’m looking for NED acceleration, not IMU aligned accelerations. If such a message doesn’t exist, I’ll look into creating my own.

COuld you please help me to make drone follow me? COuld you please provide an example? THank you

If you’re confortable with sitl and mavproxy :

With sitl two vehicles are simulated one rover and one copter :
cmd prompt 1: $ sim_vehicle.py --no-mavproxy
cmd prompt 2: $ sim_vehicle.py -I 2 --no-mavproxy
cmd prompt 3: $ mavproxy --master=tcp:127.0.0.1:5760 --master=tcp:127.0.0.1:5780 –out=udp:127.0.0.1:14550
$ link ///here we check that both links are active and that we are connected to both vehicles
$ vehicle 1
$ param set foll_enable 1
$ param set foll_sysid 16
$ set fwdpos 1
$ vehicle 2
$ param set sysid_thismav 16
$ vehicle 16
$ set fwdpos true
here we arm the two vehicles, take off with the copter and then
$ mode follow
activates the tracking of the rover by the copter and copter will follow rover according to set foll_ofs_x/y/z parameters

1 Like