Best way for "On the Fly" Dronie?

Andrew Busst

Hello all...

I have been asked to take some Dronie shots for a friend at their wedding. It will involve the whole wedding party and guests in front of the venue then flying out about 100m carefully dodging some big trees.

I won't be able to pre-plan all the shots so it will be a case of setting up on the spot.

I'm not really comfortable using On The Fly "Dronie" as will be guessing distance up and out and  I want to make sure I don't smack into some big trees on the property.

So I was thinking I could do this....do you think this will work? 

TO PLAN THE "ON THE FLY" PATH

  • Select "Path" USING "On The Fly" mode
  • For the first waypoint position the drone with the camera pointing to the center of the group
  • Staying where I am make one or two more waypoints so the drone doesn't just fly off from the first waypoint without taking some static video first.
  • Fly out to the furthest point (carefully avoiding trees in a straight path) re-centre the group in the viewfinder and mark the final waypoint.

TO RUN THE "ON THE FLY" PATH

  • Start recording video
  • Press Play
  • As soon as the drone reaches the first waypoint
  • Press Pause - This is to allow some time to capture static video 
  • After 10 secs or so press resume 
  • Allow the drone to safely fly out to the end waypoint the group and surroundings shrinking into view
  • Finish

Questions?

  • Would this work?
  • Will the camera just jump to the view at each waypoint i.e the end waypoint "view" isn't really important as the drone will only show that view once it reaches that last waypoint and won't gradually interpolate there?
  • Assume there is no "Dronie" mode that lets you fly to a specific point with specific view, start and finish, without manually entering distance?
  • Assume there is no function to stay x amount of time at an "On The Fly" waypoint (or Dronie start point) so, for example, to capture some static video before you zoom off into the "Dronie"?

Any advice/comments greatly received. Oh and I'm using a Mavic Mini

 

Many thanks 

 

Andrew

0

Comments

13 comments

  • Comment author
    Jim McAndrew Dronelink Staff

    Would this work?

    Almost. The one issue is, if you pause the mission it automatically stops the camera. You could restart it manually but it won't be one continuous shot.

    Will the camera just jump to the view at each waypoint i.e the end waypoint "view" isn't really important as the drone will only show that view once it reaches that last waypoint and won't gradually interpolate there?

    It will interpolate. I recommend you go do a dronie beforehand and look in your mission history to see the mission plan that it generates so you can understand exactly how it functions.

    Assume there is no "Dronie" mode that lets you fly to a specific point with specific view, start and finish, without manually entering distance?

    There is not.

    Assume there is no function to stay x amount of time at an "On The Fly" waypoint (or Dronie start point) so, for example, to capture some static video before you zoom off into the "Dronie"?

    There is not, but all of the on-the-fly functions are open source, so you can copy them and make them do whatever you want (if you know javascript). You can also just copy the mission plan that it creates in your mission history and modify the plan.

    0
  • Comment author
    Andrew Busst

    Ok thanks Jim

    Will Dronelink let me load say 4 or 5 or 6 or whatever it takes waypoints all in the same place to allow some time to capture static video? (during an "On The Fly" path mission) i.e. is there are a small delay between waypoints or if in the same place are they effectively instant achieving no delay at all?

     

    0
  • Comment author
    Jim McAndrew Dronelink Staff

    There is no delay. You really should just try it.

    0
  • Comment author
    Andrew Busst

    OK cheers will do 

    0
  • Comment author
    Andrew Busst

    /*

    So have been playing around a bit more with the "On The Fly" Commands and Javascript.

    I have managed to turn off the Camera starting and ending at the first and last waypoint in the path.

    Thought I had nailed this then started the video ran the edited On The Fly "Path" and of course the video stopped when I paused the Function so assume that is a (excuse the double up) "Function" of the "On The Fly" function. You pause any function and video pauses if recording it's not something to easily code out in Javascript? 

    So  I went hunting for "wait" code and found this in the "Jobsight" function...

                        const component = new Dronelink.WaitComponent()

                        component.time = 3.0

                        return component

    So now I'm thinking I have managed the video to be on from the start I can just throw this component in at my first waypoint for maybe 5-10 secs time and whallah! Job done. I get a static view seconds of video before the drone moves off to the next way point.

    So how would I do that actually? I'm sure it's not just a case of dropping these three lines of javascript into the "Path" function, or is it? 

    Any pointers gratefully received!! Here is the vanilla function....

    */

    const waypoints = variables["order"] === "Backward" ? variables["waypoints"].slice().reverse() : variables["waypoints"]
    let speed = Dronelink.Convert.milesPerHourToMetersPerSecond(10.0)

    if (variables["speed"] > 0) {
    speed = variables["speed"]
    }

    const component = new Dronelink.PathComponent()
    component.approachComponent.altitudeRange.altitude = waypoints[0].spatial.altitude
    component.droneMotionLimits.horizontal = new Dronelink.MotionLimitsOptional()
    component.droneMotionLimits.horizontal.velocity = new Dronelink.Limits(speed, 0)
    component.approachComponent.droneMotionLimits.horizontal = new Dronelink.MotionLimitsOptional()
    component.approachComponent.droneMotionLimits.horizontal.velocity = new Dronelink.Limits(Dronelink.Convert.milesPerHourToMetersPerSecond(20), 0)
    component.cornering = variables["pathing"] === "Straight" ? Dronelink.PathCornering.Rounded : Dronelink.PathCornering.Intersect

    if (variables["camera"] !== "None") {
    component.approachComponent.immediateComponent = (() => {
    const list = new Dronelink.ListComponent()
    list.childComponents.push(new Dronelink.CommandComponent(new Dronelink.StopCaptureCameraCommand()))

    list.childComponents.push(
    (() => {
    const command = new Dronelink.ModeCameraCommand()
    command.mode = variables["camera"] === "Photos" ? Dronelink.CameraMode.Photo : Dronelink.CameraMode.Video
    return new Dronelink.CommandComponent(command)
    })()
    )

    component.assetSource = new Dronelink.AssetSource()
    if (variables["camera"] === "Photos") {
    component.assetSource.descriptors.tags = ["Image Series"]
    list.childComponents.push(
    (() => {
    const command = new Dronelink.PhotoModeCameraCommand()
    command.photoMode = Dronelink.CameraPhotoMode.Interval
    return new Dronelink.CommandComponent(command)
    })()
    )
    } else {
    component.assetSource.descriptors.tags = ["Video"]
    }

    return list
    })()
    }

    waypoints.forEach((drone, index) => {
    const offset = component.referenceCoordinate(context).offset(drone.spatial.coordinate)
    if (index === 0) {
    component.approachComponent.destinationOffset = offset
    } else {
    const waypoint = new Dronelink.PathComponentWaypoint()
    waypoint.offset = offset
    component.addWaypoint(waypoint, context)
    }
    })

    const path = component.path(context)
    waypoints.forEach((drone, index) => {
    const marker = new Dronelink.PathComponentMarker(index === 0 ? 0 : path.nearestDistance(drone.spatial.coordinate))
    marker.altitude = drone.spatial.altitude
    if (variables["orientations"] === undefined || variables["orientations"] === "Framing from Waypoints") {
    marker.droneOrientation = new Dronelink.Orientation3Optional()
    marker.droneOrientation.z = drone.spatial.orientation.yaw
    marker.droneOrientation.zReference = Dronelink.OrientationZReference.North
    marker.gimbalOrientations = {}
    marker.gimbalOrientations[0] = new Dronelink.Orientation3Optional()
    marker.gimbalOrientations[0].pitch = drone.gimbal().orientation.pitch
    }

    if (index === 0) {
    if (variables["orientations"] === "Point of Interest") {
    let pointOfInterest = new Dronelink.PointOfInterest()
    component.pointsOfInterest.push(pointOfInterest)
    pointOfInterest.referencedOffset.coordinateOffset = component.referenceCoordinate(context).offset(variables["poi"].spatial.coordinate)
    marker.pointOfInterestID = pointOfInterest.id
    }

    if (variables["orientations"] === "My Location") {
    let pointOfInterest = new Dronelink.PointOfInterest()
    component.pointsOfInterest.push(pointOfInterest)
    pointOfInterest.referencedOffset.coordinateOffset = component.referenceCoordinate(context).offset(context.device.spatial.coordinate)
    marker.pointOfInterestID = pointOfInterest.id
    }

    if (variables["camera"] !== "None") {
    marker.component = new Dronelink.CommandComponent(new Dronelink.StartCaptureCameraCommand())
    }
    }

    if (index === waypoints.length - 1) {
    marker.component = new Dronelink.CommandComponent(new Dronelink.StopCaptureCameraCommand())
    }

    component.addMarker(marker)
    })

    plan.rootComponent.childComponents.push(component)

    if (variables["name"]) {
    plan.descriptors.name = variables["name"]
    }

     

    // Many thanks in advance!

     

    0
  • Comment author
    Raffaello Di Martino IZ0QWM

    To stop and start the camera, or wait some time at every waypoint, you have to insert the code in the marker.component just you do on the web interface.

    Like you see in the example, the last waypoint ( waypoints.length - 1 ) has also a marker that stops the camera.
    In the same way you can manage every marker you need with a component.

    If I can advise you, the first few times, create a fake mission on the web interface and insert everything you need: waypoints, markers, commands.

    Then recreate everything in javascript.

    Use the gituhub link of Dronelink to find all the calls: https://github.com/dronelink

    0
  • Comment author
    Jim McAndrew Dronelink Staff

    it's not something to easily code out in Javascript?

    This functionality is currently hard coded into the app. We may consider removing it in the future but most people seem to like it.

    wait some time at every waypoint

    Putting a wait component in a marker will not cause the drone to stop and wait at the marker. All that will accomplish is a delay before executing any subsequent components at that marker (assuming you used the wait in a list).

    0
  • Comment author
    Andrew Busst

    Ok just had another thought.....using the Multiple Elements On The Fly Function could I...

    • start with one Path that has camera point backwards to my Wedding Party
    • I use a ridiculously slow speed like 0.1km/hr and travel a tiny distance (like a metre)
    • then path two would start off from where Path 1 ended and launch into a dronie at normal speed?

     

    That feels like it would work? The ability to On The Fly navigate like that and precisely set drone location by pre flying to those spots is just huge, especially with multiple types of elements able to be incorporated.

    Assume for multi element the video would just keep rolling between elements? 

     

    Cheers 

     

    0
  • Comment author
    Raffaello Di Martino IZ0QWM

    Hi Andrew I've done some test using the disengage that should permit to use the drone by hand while in the mission.

    Please look at this: https://app.dronelink.com/raffaello-di-martino/vicino-casa/plan/HEjKQupjGqVnK2JJIiUX/fdx5WFgOR1kUEFilN7do

    Use the simulator to test.

    You can change the destination of the second path, and you can also change the drone heading.

    Obviously, in post production you would then have to cut out pieces of video that you don't need.

    Raf

    0
  • Comment author
    Andrew Busst

    Thanks Raf 

    Can I load that as a Javascript function for use on the fly? As looks like a standard mission which I'm trying to avoid as will have many variables I physically need to avoid by placing the drone in a particular spot (determined by foliage etc) and have to dynamically (and quickly) set up?

    Cheers 

    Andrew

    0
  • Comment author
    Jim McAndrew Dronelink Staff

    Assume for multi element the video would just keep rolling between elements?

    That is not how that function is currently written - you would have to change it.

    0
  • Comment author
    Andrew Busst

    So just commenting out your camera options and camera start stop commands should do that?

    Most people would probably want continuous roll of video better to have too much than too little?

    Thanks

    0
  • Comment author
    Jim McAndrew Dronelink Staff

    It is probably going to require more surgery than that as you will be using two Path components, so if you comment out code it is going to apply to both of them.

    0

Please sign in to leave a comment.