-
-
Notifications
You must be signed in to change notification settings - Fork 511
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Project/components names #275
Comments
API vs SDKIn my opinion, we should consider what people already know:
So I would use "SDK" instead of "API", just because we answer the same problem as these other SDKs. Mobile / OnboardNow, our structure is a bit different than DJI's in that we don't have a concept of "Mobile" vs "Onboard". We could certainly run everything onboard, or everything on the ground, be it on a mobile or not. Of course, not all combinations make sense. But it can be done. My propositionHere is how I personally see DroneCore:
More than those components is the packaging, i.e. what we will provide to our third-party developers. And I believe that the main "product" we will provide will group the core librairies, the backend and a frontend. I would call that an SDK ("the Java SDK", "the Swift SDK", etc.). So the goal is to just call it "Dronecode SDK", optionally with the language: "Dronecode iOS SDK" or "Dronecode Python SDK". New users should see that. Advanced users can read more about the components and learn about the core libs etc. Examples using my proposition
|
I agree to this. Very clear proposition. |
Go with "SDK", not API, for all the reasons stated above |
As discussed earlier, I agree with 'Dronecode SDK' (as DroneCore vs DroneCode seems to be confusing). |
The proposition makes sense. I'm not sure yet whether it is needed or desirable to have separate SDK/deliverable by target (ie just a Dronecode SDK for everything makes sense). From a docs maintenance point of view if the different languages share a lot of commonality then having a single documentation set (SDK) will make things easier for us. |
PS I like the simplicity of "Dronecode SDK" and I appreciate the arguments for not specifying "onboard" or "mobile". That said, is it possible/likely we will have another type of SDK in future and will hence need to differentiate? E.g. (say) Dronecode Platform Porting SDK .... |
I am not sure I understand the example :-). So you mean having another type of SDK for other kinds of drones, or having another type of SDK doing something different (like a weather forecast API for drones)? |
We have a camera streaming daemon that runs on a companion computer and acts as a camera server - providing a MAVLink Camera Protocol interface and RTSP video streaming interface to cameras that are connected to it. The daemon has a configurable backend that can be updated to support new types of cameras. We might conceivably create a Dronecode Camera Integration SDK to make it easier to package everything needed to work with cameras. I'm not saying that will happen, I'm just saying if we have multiple SDKs in future then we'd need naming to differentiate them. Using up the namespace of Dronecode SDK makes that more challenging. |
Just to take this particular example, I would say that the goal is to integrate the camera into the Dronecode SDK. For me as a third-party developer, I don't necessarily want to know the implementation detail of the camera. If the Dronecode SDK just allows me to do something like below, I guess I'm fine with it:
In other words, on the frontend/third-party dev side, this is an implementation detail. The frontend has access to a camera, and a camera is a plugin. On the drone manufacturer side, the system needs to be setup in such a way that the frontend can access the camera. I could imagine having different plugins for different kinds of cameras, e.g. MAVLink, PTP, or a REST API. The frontend should not be affected by this. So the "Dronecode SDK" allows you to "control your drone". Whatever sensor being on the drone can be controlled by the Dronecore SDK given that there is a plugin for that. Does that make sense to you? Or am I missing something? |
Yes. OEMs are developers too. Assume the hypothetical SDK is for the OEM backend camera streaming daemon plugin developer. Can those instructions live in the Dronecode SDK? If not, then you potentially have another SDK that you have to name. More generally is there any possible integration point with Dronecode that might require a separate SDK? If so, then naming is potentially a problem. I don't know of such an integration point. If you can't think of one either, then go forth and use the proposed naming :-) |
NOTE: I realize it is a long example, but I'm trying to put in perspective how I would call the different modules being part of the Dronecode SDK :-).
I think they can. So for instance, if a company named "MagicDrones" has a special camera based on PTP (but, say, with custom commands). The Dronecode camera plugin ( Now, users wanting to write an app specific to this drone can do something like (I'm inventing for the example): in the build system:
in the code:
Now let's review the naming:
I don't think (or I can't imagine an example where) we need to create a separate SDK. As long as it is used by people using the Dronecode SDK to control a drone, it can be part of the Dronecode SDK. |
Works for me then. |
So given that, assume we have a document set "Dronecode SDK". What does that have in it?
Basically, how do I differentiate the different layers in the document and refer to the different APIs? |
I believe all of that belongs to the "Dronecode SDK" documentation, indeed. My proposition is to really consider our 3 levels:
I see 3 kinds of users:
Now, there is some abstraction coming from the packaging, too :-). Currently, the "DroneCore-Java" repo contains the Java frontend. But what we will package as the "Dronecode Android SDK" will consist of a mix of frontend, backend and core modules that still needs to be defined (i.e. in the first version, the "core" module will have the backend for all our supported plugins, and later that may or may not change). Does that make sense to you? Maybe the "core libs", "backend" and "frontend" words are not the best ones for that, but I really see those 3 levels in DroneCore. |
I think so. It hinges on this line:
So you are talking about SDK flavours! That is quite different from a single monolithic "Dronecode SDK" I thought was being proposed. With "flavours" you can simplify naming because I don't need a special way to differentiate the different bits and pieces within an SDK. We can then have "Dronecode CSD SDK" that is for developers wanting to write CSD plugins. It has nothing to do with "dronecore" at all. And if we were to have a monolithic structure, we would still make it from the flavours:
|
Yeah I think we agree, except that I am not sure what the Dronecode CSD SDK is. I thought it was some kind of "camera plugin" :-). Is it more some helper library that one might use to create a camera plugin, then? |
I guess I should have provided a link :-). I've been working on the documentation here. The summary is that it that the Camera Streaming Daemon is an extensible Linux camera server for interfacing cameras with the Dronecode platform. Basically it turns any camera attached to a linux companion computer into a MAVLink Camera Protocol-compatible camera - allowing DroneCore to talk to it via MAVLink. |
Looks nice. I haven't looked into details, but if possible, I would like to have this as another "plugin", somehow. So that for the app developer, there is |
@shakthi-prashanth-m is way ahead of you: #292 :-) (though to be very precise, CSD implements MAVLink Camera Protocol, and that "is the standard") |
That's perfect =). |
Just to finalize on the SDK naming (renaming the existing Dronecore SDK before a formal release) - As already mentioned in the very first point by Jonas: "the goal is to just call it - Dronecode SDK". Please comment if you have any concerns specifically about this. |
I'm a little concerned, because I'm not sure exactly what the final docs product(s) will actually look like. A few things are easy enough when this is approved. I (?) will:
Not entirely sure how I will refer to things - is it just a "search/replace":
|
@hamishwillee I guess dronecore will have to redirect to something like dronecode.org/sdk. What about: |
Works for me. I'm sure this is going to be harder than we think. |
That's for sure :-). One thing is that we could also decide to wait until we actually have some concrete packages for, say, iOS and Android. So then we see more clearly what we have. |
This proposal, if I clearly understand it, looks good to me. As a customer developer I'd like to have a single DroneCode SDK that encompasses all the code, tools, simulator, etc. The Dronecode SDK - iOS API would then be a component that we'd use for developing our iOS App. |
@hamishwillee @JonasVautherin @mrpollo : Can we close this issue and take below items separately: Get URL and logo changed on http://dronecore.io/ ? |
Sure. I consider the URL and logo to be preconditions for everything else. If you hand me those I can do the rest :-) |
Fine for me :-). |
Question, is there an intention to "purge" DroneCore from the docs. For example, we have a DroneCore class - will that have a different name? |
@hamishwillee good idea. We could rename it to |
OK, created #450 to track that. Something for one of you to do :-) |
camera: Added select_camera function
The discussion has been started on Slack already, but I'd like to continue here. The main issue was that "DroneCore" is close to "Dronecode" which makes it confusing for people.
I've read propositions of going for "Dronecode Mobile API" and "Dronecode Onboard API".
Feel free to share your opinion here.
The text was updated successfully, but these errors were encountered: