From ROS prototype to production on Ubuntu Core

I’ve been working on creating a blog/video series about taking a ROS prototype to production using snaps and Ubuntu Core. Barring any unforeseen circumstances, I plan to publish one part per week. I will update this topic as the series continues.

Note that the videos are collected into the ROS Prototype to Production on Ubuntu Core playlist.

10 Likes

Amazing work! Keep it up!

Hey @gstavrinos, thanks! Stay tuned, working on the next video as we speak.

Alright, “Part 2: Our prototype” has been published:

3 Likes

Hi @kyrofa,

Thanks for this very well done series - I’ve followed through on your tutorial and cant wait for 3/5.

Spoiler alert … spoiler alert

Any chance you’ll be covering an ARM targets like a Raspberry Pi? I’m curious to know how this works on a RPi3 and Ubuntu Core 16.04

1 Like

What you’ll actually see documented through the series itself is amd64-specific, but that’s only due to time constraints. All the same principles apply for other architectures: I’ve tested this series for the arm64 DragonBoard 410c, and have included it as reference information. Thank you for speaking up-- I’ll make sure I do the same for the rpi2/3.

Please follow along with the rest of the series, and if at the end you don’t quite understand what you need to do to apply it to ARM targets, I’d be happy to add a 6th part to the series devoted to discussing other architectures.

@kyrofa Awesome! Looking forward to it :thumbsup:

“Part 3: Our prototype as a snap” has just been published:

“Part 4: Obtaining confined access to the Turtlebot” has just been published:

“Part 5: Create an Ubuntu Core image with our snap preinstalled” has just been published:

@keshavchintamani this is the last part of the series. Please let me know if you’re able to apply the information here to ARM targets.

1 Like

Note that I’m willing to add to this series (or create another series) for anything related to ROS on snaps or Ubuntu Core if anyone wants to learn something specific.

1 Like

Thank you for the great series :slight_smile:

I would like to see a blog post/video related to mixing public/private snaps. For example, if I want to produce an image for factory production that involves both public snaps (e.g. from Ubuntu Store) and private snaps (special sauce) then what’s the best way to go about doing so?

I’ve only just begun reading through the docs, but I assume it will involve setting up a custom store.

2 Likes

Thanks for the questions, @jacob!

I’d be happy to create a post about that. Can you explain a little more what you’re trying to do? There are a few possibilities that come to mind that we can converge on as I learn more about what you’re trying to do.

  • You can place private snaps in the store, but that means you actually need to authenticate as yourself on the target before you can update them (they’re private, thus invisible, unless the user to whom they belong is logged in).
  • You can leave snaps out of the store completely and place them into the image via --extra-snaps as mentioned in part 5, but then you run into the same issue: you can’t update them.
  • You can create a brand store, which is essentially your curated store, where you can release your snap like normal while keeping it private to the brand store.
  • You can purchase and host the commercial version of the store on premises.
  • You can set up your own open source store that corresponds to the snap store’s APIs (there’s at least one out there).

There are other options that get a little more complicated. Let me know if any of those sound interesting, and I’ll get started on another post.

The use case I have in mind involves:

  • working in a small team (dev team having access to in-house snaps)
  • installing in-house snaps on robots at the factory floor (ie. snaps not accessible public unless authorized)
  • deployed robots can received updates automatically (no end-user interaction required)

Perhaps something along the lines of your first two points would work for such a use case? Or, depending on cost, the brand store or commercial version (same thing?) installed locally may be a preferred solution.

When I get some more time to play around with snaps, I’m sure things will become more clear to me :smile:

Indeed, I’d say both of these can probably be satisfied by private snaps (which gives you updates) or just using --extra-snaps (which doesn’t give you updates because there’s no store in the loop).

To clarify, deployed in this case meaning not in-house? i.e. to customers? Indeed, private snaps won’t scale, and --extra-snaps won’t update. In this case, assuming you want to continue to keep those snaps private from the general public, a brand store will probably be easiest. It still uses Canonical’s hosted store, so you don’t need to maintain anything. If you want it onsite, that’s the other option, but unless that’s a requirement for you I’d say it’s just more work :stuck_out_tongue: . It’s also probably more expensive (but that’s just conjecture on my part: I’m just an engineer).

Want me to put a post together discussing these three options (--extra-snaps, private, and brand stores)?

That would be lovely :thumbsup:

Thank you!

2 Likes

I was asked by several people how I made those videos, so I wrote up an article showing what I did and what I used. It was made very cheaply and with open-source software, so it might be useful to others wanting to do something similar.

Alright @jacob, your article is next :wink: .

2 Likes

@kyrofa Nice! I was going to ask about the tools you used for video editing as well :smile:

1 Like

@jacob my humble apologies for the delay, it’s been quite a summer!

I’ve written an article covering a few different ways to create an Ubuntu Core image using private snaps. Not all of the methods I mentioned in my brainstorm were possible, I’m afraid, and I didn’t have time to play with the open-source store, but this should at least get you started.

@kyrofa No worries, thank you for the informative article :slight_smile: If I ever have time myself, I may check out the open-source store solution and report back.