To get a deeper understanding and utilize the full power of Dronelink, it can be useful to embrace the core concepts that make Dronelink uniquely powerful, including:
Mission Plans as Code
If you are familiar with software development methodology, these core concepts may sound familiar. In fact, Dronelink borrows many time-tested principles from distributed, open-source software development and platforms like GitHub. The key idea behind this metaphor is that mission plans are like code for drones. Creating quality code is hard, just like creating quality mission plans, and the best ideas are likely to come from outside your local sphere of relationships. Your tooling should embrace this fact and make idea-flow as easy and natural as possible.
At the same time, ideas need a medium of expression, and entire mission plans are often too context-specific to be easily adapted to new environments or use-cases. The context-independent portions of mission plans inevitably get trapped, requiring complex surgery by the original author if there is any hope of reuse. Instead, mission plans should be composed of reusable components right from the start, allowing the components to become the preferred medium of expression.
Entire plans can still be shared, but primarily to serve as examples rather than starting points. This makes understanding components the first and most important lesson in getting started with Dronelink.
Understanding components is the first and most important lesson in getting started with Dronelink. At the most basic level, a component is a collection of one or more instructions for your drone to execute during a mission. Traditional approaches to flight automation treat each mission plan as a unique, indivisible set of instructions for a specific drone at a specific location and even a specific pilot. Dronelink discourages this way of thinking as it leads to inefficiency, complexity, errors, and knowledge silos.
Instead, Dronelink introduces component-based flight automation, acknowledging that most mission plans are simply a reorganization of instructions from previous plans. Creating mission plans from components encourages mission planners to consider reusability from the start, which increases the chance that valuable ideas can be easily incorporated into future plans. Avoiding rework promotes efficiency, and reusing a field-tested component results in fewer repetitive errors. Building with components also opens the door to organization strategies and collaboration workflows that would not otherwise be possible.
Dronelink includes many types of components that allow you to control and move your drone, gimbal(s), and camera(s), and that allow you to create organization and layers of abstraction. We are always looking for new patterns of behavior that are both ubiquitous and tedious to implement using existing component types, and we intend to add many new component types over time. However, deciding when to create a new component type is not always easy. Component types often sacrifice flexibility to gain usability and the trade-off must be carefully considered.
Have an idea for a new component type? Let us know about it!
Dronelink unlocks full, programmatic control of your drone, gimbal(s), and camera(s) through the use of commands. Learn more about commands.
Command components give you direct access to the same underlying commands that the Dronelink flight controller uses to perform pre-programmed behaviors. Direct access allows you to pick up where we left off, essentially allowing you to program your own custom behaviors. For example, you may have 10 different camera settings that you always apply before each flight. Combining camera command components into a list ensures that these settings are consistent every time.
Motion components are the primary way to control the motion of your drone. It is possible to define similar motions using different types (e.g. multiple destination components vs waypoints in a path component), but each component type was designed for a specific set of use-cases. We always recommend using the most basic component type that was designed for your use-case.
Some motion components are considered to be achievable, meaning that the Dronelink flight controller will automatically calculate the best way to achieve the motion given specific parameters. Achievable components allow you to focus on what happens before and after the motion is achieved instead of the exact motion itself. The before and after behavior is controlled through the use of immediate and achieved components, which can be commands or lists of commands. Read about heading components for an example.
Some motion components are considered to be approachable, meaning that the Dronelink flight controller will use a destination component to position the drone at a specified starting location before the primary motion. This special destination component is called the approach, and it has all the same benefits and configuration options as any ordinary achievable component.
Heading Component achievable
Heading components point the drone in a specific direction while maintaining position and altitude. The flight controller will yaw the drone as quickly as possible during execution, meaning you should probably wait to perform data capture until the heading is achieved. The heading component type was designed for use-cases like 360 photos. For example, you can use command components to adjust the gimbal angle and camera settings immediately when the drone starts rotating, and then another command component to capture a still image when the heading is achieved.
Destination Component achievable
Destination components fly the drone to a specific location, Point A to Point B. The flight controller can only perform horizontal motion when the drone is within a specified range around the target altitude, meaning the drone will ascend or descend vertically first if outside the range. The destination component was designed for use-cases such as multiple, single point data captures. For example, when combined with heading components, you could perform multiple 360 photos in a single mission.
Orbit Component approachable
Orbit components fly the drone in a circle around a point of interest. The circumference can be defined as any number of degrees, allowing for full circles, semi-circles, and multiple rotations. The drone heading will automatically face the center of the orbit, so we recommend flying a verification mission before flying any plan with an orbit on drones without side-facing collision sensors.
Path Component approachable
Path components fly the drone along a path defined by a series of waypoints. Use path components over destination components when you need full control over the flight behavior between two points. Consider using multiple smaller path components over one large path component as each independent path can be moved, rotated, and resized. If you create a path that results in a drone heading that is not in the direction of flight, we recommend flying a verification mission if using a drone without side-facing collision sensors.
Map Component approachable
Map components fly the drone in a pattern designed to capture data for orthomosaics or 3D point-clouds. Map components can also be used for other applications such as search and rescue by manually adjusting the data capture and gimbal angle settings.
Facade Component approachable
Facade components fly the drone in a pattern designed to capture data for 3D point-clouds around buildings. Facade components can also be used for other applications such as tower or bridge inspection.
Organization is the key to managing complexity in large mission plans. Dronelink includes the list component type as the basic building-block for organization.
List components group other components into logical collections that should be executed sequentially. The components in a list component can also be lists, which enables the possibility to create hierarchies of components, known as component trees.
Organization is the key to scalable flight automation. Dronelink introduces multiple levels of organization to simplify team management, access control, and complex mission planning.
Account level organization is focused on team management. Accounts can represent individuals (single member) or teams (multiple members), and a single user profile can be associated with one or more accounts. This allows you to maintain a clear separation between your personal projects, side-gigs, and work you may be performing for your employer(s) or clients. Using a single user profile enables single-sign-on access to all your accounts.
Users can also star accounts as a way to find plans and components from any of the public repositories in a given account.
Repository level organization is focused on access control. Each account can divide mission plans and components across multiple repositories, and the repositories can be public or private. Public repositories are discoverable by other Dronelink users, which increases the chance of connecting with other like-minded users who want to collaborate and share ideas. Private repositories require you to grant access to specific plans and components on a case-by-case basis, which can be useful when working with organizations or clients with specific privacy requirements.
Like accounts, users can star repositories that contain interesting components. These components can then be included in your own mission plans. Creating multiple repositories can be an effective way to group components by location, function, and other categories, and it gives users more granularity when choosing which repositories to star.
Component level organization is focused on reducing the complexity of large mission plans and managing large collections of mission plans with similar functionality.
Dronelink introduces the powerful list component type, which promotes the use of component trees. Component trees allow you to convert flat, sequential lists of instructions into well-structured hierarchies that create multiple levels of abstraction. Abstraction reduces clutter in the user interface, and more importantly, it allows you to reason about entire sections of the mission plan in relation to each other without getting lost in the details. Lists are essential to creating large, bug-free mission plans.
Dronelink also introduces the ability to include components directly from repositories. When a source component is modified, Dronelink will automatically notify the mission planner that updates are available, and the changes can be accepted or rejected with one button. Included components are essential for any team managing a large collections of mission plans.
Dronelink unlocks full, programmatic control of your drone, gimbal(s), and camera(s) through the use of commands. Commands represent individual instructions, such as setting the RTH altitude of the drone or starting video capture on the camera, and they usually require inputs. The Dronelink flight controller is built out of commands at the code level, and you can extend the flight controller by accessing these same commands through command components.
Command components allow you to specify and save command inputs during the planning phase. For example, the camera mode command takes the mode as an input (photo, video, etc), and you may need multiple camera mode command components in a single plan to change the camera from photo to video and back again.
Commands are not always required for the success of a mission. For example, you may prefer a 3:2 photo aspect ratio, but not all cameras support this aspect ratio. You can mark command components as not required, meaning that if the command fails, the mission will continue as normal. Conversely, if a required command component fails, the Dronelink flight controller will immediately fail the entire mission and stop execution.
Collaboration is the key to true innovation. Dronelink provides multiple collaboration workflows depending on your team structure, privacy requirements, and desired synchronization strategy (real-time or asynchronous).
Team collaboration is automatically enabled for team members in a single account. If two or more team members open the same mission plan or component, they will see the latest changes in real-time across all browsers. Changes are synchronized automatically and near instantaneously (typically within milliseconds).
Shares enable real-time collaboration through shareable links. A mission planner can create one or more shareable links that give anyone with knowledge of a link access to a specific plan or component. A shareable link grants either viewer or contributor access, and anyone accessing a link will see the latest changes in real-time across all browsers, just like in team sharing.
Included Components asynchronous
Included components enable asynchronous collaboration through repositories. Save any component into a repository and then include that component into a mission plan (or another component for chaining, see below). Dronelink automatically maintains a reference to the original component and notifies you when updates are available. You can accept (or reject) the updates, just like a pull request. Accepted updates result in a new version in case you need to rollback.
It is possible to create a chain of components by including a component that already includes other components. Dronelink automatically maintains all the references and allows updates to flow through the entire chain. Chaining is powerful, but be careful when architecting included component chains as it is possible to unintentionally propagate changes, particularly with large components. We recommend keeping components small and modular. This allows down-stream users the most flexibility when deciding to accept or reject changes.
It is critical to verify the safety and correctness of mission plans in order to avoid property damage, injury, and wasted effort. Dronelink provides virtual and physical debugging tools to make debugging safe, effective, and efficient.
Mission Previewer virtual
The mission previewer displays a millisecond-accurate, simulated mission right in your browser. The simulation is generated using the same flight code that runs during real missions in the native app, which guarantees identical results. Results are typically available within seconds and include an overview window, 2D and 3D flight path previews, and a timeline window. The timeline shows components, commands, and graphs for altitude, distance (from takeoff), horizontal speed, and vertical speed. The timeline also allows auto-playback (at real-time, 2x, 4x) and manual scrubbing, which are synchronized with the overview window and flight path previews.
We recommend opening the mission previewer early and often during mission planning to avoid rework. At a minimum, you should open the mission previewer once before flying a mission in the real world.
Issue Detector virtual
The issue detector is an automated, background process that constantly checks mission plans and components for potential issues while editing. The detector displays correction recommendations for each issue, and includes a link to the corresponding component for easy access.
Verification Missions physical
It is possible to fly a verification mission for any plan by tapping ... > Load Verification Mission in the native app. Dronelink will generate a new mission with the drone pointed forward along the flight path, which allows the onboard sense-and-avoid hardware to operate correctly. If the drone is able to successfully execute the verification mission in this configuration, you are guaranteed of no collisions during the real mission.
IMPORTANT: Your drone must have onboard sense-and-avoid hardware for this feature to function properly.
Recovering from the Unexpected
It is impossible to control for all variables, all of the time. Dronelink acknowledges that the real-world is hard to predict, and that pausing missions should be a rule, not an exception.
Missions can be paused manually, by tapping the pause button, or automatically, as a result of various factors including signal loss, low battery, RTH activation, etc. Paused missions are displayed at the top of the list in the native app as In Progress.
In Progress missions can be resumed by tapping Load Mission and then by tapping the Play button in the flight dashboard. The Dronelink flight controller will access the last known state of the drone, gimbal(s), and camera(s) and use this information to restore each sub-system to the exact state that it was in when the mission was paused. If the drone was in motion when paused, the flight controller will resume the mission from a slightly offset position to allow the drone to ramp up to the proper velocity by the time it reaches the pause location.
There is no limit to the number of times a mission can be paused, and there are no restrictions on resuming a mission with a different device, drone, or even user profile. Resuming missions across users does require a team account, however, as the users must be members of the same team.
In Progress missions can also be aborted by tapping ... > Abort. Once a mission is aborted it cannot be resumed.