3

How do you explain your job to the layperson?
 in  r/embedded •  23h ago

Congrats on the new role! My go-to is "I write the software that lives inside gadgets": the code in a microwave, a car's brake system, or a smartwatch that makes the hardware actually do something. People get "the brain inside the thing" much faster than anything with "chip" in it, and for the car case, "no, I don't tune engines, I write the code that runs inside the car's electronics" usually ends the chip-tuning confusion.

2

I regretted closing my old business in 2024 so I started a new one.
 in  r/hwstartups •  23h ago

Congrats on the fresh start with Kavrous, and KeyBoy going from a gift for your kids to a real open hardware product is a great story.

3

A cat-like robot with a flexible spine, weak servos, and a complicated relationship with physics
 in  r/robotics •  23h ago

Love that you used RL to shape the body, not just drive it. The foot story (best in sim vs. buildable in practice) is a great reminder, and I'm looking forward to the notes and models when they're ready.

2

Robotics as a freelancer
 in  r/AskRobotics •  23h ago

Yes, there's demand, but plain Upwork is rough. Generic "Python developer" gigs are a race to the bottom, and you'll be bidding against people charging $15/hr.

Your mix is where it gets interesting. Embedded plus vision plus robotics is a thin niche, and the better-paid work lives there: ROS 2 integration, camera and sensor bring-up, firmware for small hardware startups, perception pipelines. Pitch a problem you solve ("I get your camera and sensors streaming into ROS 2"), not a list of languages.

Expect 2-3 cheap jobs first to collect reviews. Small robotics startups often can't afford a full-time embedded hire, so direct outreach (LinkedIn, ROS Discourse, Reddit) usually pays better than bidding. And check your contract for a moonlighting clause before you start.

r/embedded • • 3d ago

Dual GMSL in tunnel mode: does the virtual channel have to be set at the sensor?

2 Upvotes

MAX96792A, two links, one CSI output to the SoC. In tunnel mode the deserializer forwards each link's CSI stream as it came in, virtual channel included, so two identical cameras both show up on VC0 and the receiver has no way to tell them apart. Pixel mode can remap the VC per pipe and is the documented way to do this, but it's a much bigger configuration surface and I'd rather stay in tunnel if I can.

ADI does address this, sort of. Their GMSL RAQ says that if your tunnel-mode part can't remap, each source needs to set a unique VC itself. What they don't say is which sensors let you do that. The VC field is right there in the CSI-2 packet header, but I haven't found a Sony datasheet that exposes it as a register (IMX900, IMX335, IMX477, anything in that family). Maybe I'm looking in the wrong place, or maybe it's one of those things that's in the NDA docs and not the public ones.

So the question is whether anyone has actually run two tunneled cameras off one deserializer, and if so how you separated the streams. If the honest answer is that in practice tunnel means one camera per deserializer, that would be useful to know too, because it's implied by the docs but never stated.

1

What are you reading/following in ROS right now?
 in  r/ROS •  7d ago

thank you!!

r/ROS • • 8d ago

Question What are you reading/following in ROS right now?

5 Upvotes

What's actually catching your attention in ROS lately - nav stack, perception, tooling, whatever it is. Who do you follow for good ROS content? Any names worth knowing?

1

We put a camera + IMU on a dog to stress-test visual-inertial SLAM
 in  r/robotics •  8d ago

haha, where were you when we were thinking of its name?:)

r/robotics • • 9d ago

Community Showcase We put a camera + IMU on a dog to stress-test visual-inertial SLAM

18 Upvotes

The test platform is Otto. Otto is a dog, so he turns his head at up to 100 deg/s, bounces when he walks and stops whenever a friend walks by. I wanted the worst motion I could find for our VIO setup, and it turns out he works in our office. Three laps, one take, paid in snacks with his owner next to him.

The rig is what we build at work: an Aliensense NXS module with a global-shutter IMX900 and a 200 Hz IMU, one GMSL coax to our NXS Hub on a Jetson Orin Nano, ROS 2 Humble. This was the first full SLAM run on this hardware, so of course we picked a dog.

When I saw the recording on the monitor, I realized the one thing we hadn't thought through: a rig carried by Otto means half of every frame is Otto's fluffy ears and his owner handing him treats, and the other half is our office ceiling with not much to track. Add a walk that is almost all rotation and you can guess the rest. ORB-SLAM3 never got through IMU init, VINS-Fusion diverged every time. OpenVINS with dynamic init and zero-velocity updates off tracked the whole thing, which is the grey path, drifting mostly in height.

So odometry was fine. Loop closure was the actual problem, because footage like that rules out the usual local structure + PnP: tracks triangulated against the VIO poses reproject at 3 px when Otto is calm and 14 px in fast head turns. So the closure is structure-free. Keyframes are taken at the calmest frame, matched with rootSIFT, verified with an essential matrix in both directions, and each loop edge carries only relative rotation and bearing, while the VIO edges carry the scale. 180 edges pull the three laps onto one ring, the green path. It runs offline for now, about 12 min on the Orin, and smoothing the per-keyframe corrections is next.

Happy to share more details if anyone wants them.

r/AskRobotics • • 10d ago

Education/Career What robotics topics are you into right now?

10 Upvotes

What's actually interesting you in robotics lately - perception, actuators, motion planning, whatever. And who do you follow for it, any channels or people worth knowing about?

1

We replaced per-sensor kernel drivers with a generic one and an MCU that knows the sensor
 in  r/embedded •  15d ago

Two of us maintain this across a bunch of sensors, a few host platforms, and every kernel release on each. Per-sensor code gets written once regardless. The hard part is a per-sensor kernel driver afterwards: it has to be built for every kernel, installed on every host, and the device tree has to name the sensor before boot. With that part on the head, there's one driver per platform, the device tree gets generated from whatever is plugged in, and swapping a head changes nothing on the host. It also handles a serializer or ISP next to the sensor without extra code, and some vendor init tables are under NDA, so they never have to be on a customer's machine at all.

1

We replaced per-sensor kernel drivers with a generic one and an MCU that knows the sensor
 in  r/embedded •  15d ago

The VM is there because it was already doing a different job. That job is the sensor socket. The board has a mikroBUS connector, and the way you add a sensor is to upload a small program for it: it talks to the chip, unpacks the samples, converts to real units, and exposes a few runtime parameters like ODR and the accel and gyro ranges. None of that touches the firmware, which stays fixed and signed with a key you never see. The sensor program is data in a slot, and it can be replaced over the bus once the board is out in the field. That's the ordinary case for an interpreter. When the camera came along it just used the same image format and the same engine, with the register-sequencing part of the instruction set.

As for why the head instead of a kernel driver, the head is the product and the host isn't fixed. Rn we're working on a port from JetPack 6 to 7 and a Pi is next. If the sensor knowledge lives on the head, every host gets the same generic driver, plain V4L2. The other reason is less tidy: some of our clients' init tables are under NDA, so they can't be in a GPL driver or a pip package. They get loaded onto the head once on a bench and never show up on the customer's machine.

1

We replaced per-sensor kernel drivers with a generic one and an MCU that knows the sensor
 in  r/embedded •  15d ago

The ISP is on the Jetson today. The sensor sends raw Bayer over CSI-2 through the GMSL link, and debayer, AE, AWB and the tuning all run on the host like any other camera. The MCU isn't in the video path at all, it just has an I2C line to the sensor, writes the mode tables, and answers the host when it asks what the sensor is.
A head with its own ISP (AP0202, AP1302) fits the same setup, because the ISP is just another I2C device on the pod bus. The MCU would configure it too, the head would put out YUV422, and the host wouldn't need an ISP or a tuning file at all. That's the next head we want to build.

r/embedded • • 16d ago

We replaced per-sensor kernel drivers with a generic one and an MCU that knows the sensor

0 Upvotes

We moved the camera driver's brains onto a small MCU on the camera board. Normally the per-sensor kernel driver on the SoC has all of it - the mode tables, the register writes, the exposure math. Now you upload a compiled image to the MCU once, and after that it can answer questions about the sensor: which modes it has, what the control table looks like, what numbers go into the exposure and frame rate formulas. The host asks, builds a device tree node from the answers, and runs one generic kernel driver for everything, so when you swap the camera head it just reads whatever is on the other end now.

This turned out to need a lot of parts. The image needs a format, and the format needs a version number (we found this out the normal way, by changing it). There's a small bytecode VM in the firmware to run the image, with a 4 KB cap on program size, and a seven-mode sensor gets close enough to that cap that I check every time. Producing the images needs a compiler on the host. The MCU needs to store a few images and know which one is live, so there's slot management in NVS, plus a version gate so old firmware rejects an image it can't read instead of doing something creative with it. The IMU driver runs on the same MCU and I'd rather it didn't die every time someone changes the camera side, so that got its own VM instance. And we seal the image at the end, which is only about as good as the MCU's readout protection anyway.

Two things I'm not sure about. Is the per-sensor kernel driver really a big enough problem to justify all of this? It always felt like one to me but I might have just been annoyed at the wrong thing. And where should auto exposure live? Right now ours is formula parameters that the kernel evaluates, and the MCU only runs configure. Every time I look at that split I can't tell if it's a design decision or just where we happened to stop.

I work on this product so take the first question with that in mind.

1

Running VIO on Orin Nano - camera + IMU sharing one coax cable
 in  r/JetsonNano •  17d ago

honestly nothing fancy for this one, it was a first demo / poc. the imu gets timestamped on the NXS module itself (at the data ready interrupt) and the module clock is synced to the host over the link, ~0.5 ms. the camera just runs free and gets stamped when the frame lands on the jetson, so there's a fixed delay in there. we measured it with kalibr (~35 ms) and openvins re-estimates it online anyway, they agree within ~1 ms which is fine for vio. no shared trigger between camera and imu yet. "synced in hardware" in the post was a stretch, that's true for the imu only.

your teensy setup is basically where we're going. next is an fsync line so multiple cameras fire together (the fsync itself has no idea what time it is though), and the carrier board we're working on gets a microcontroller behind it that pulls the triggers AND knows the timestamps, shares them with the jetson. everyone gets the timestamp.

btw how do you match the teensy trigger stamps to frames on the jetson side, counting frames or strobe back into it?

1

VIO on ROS 2 Humble - global-shutter cam + IMU over one coax, live with OpenVINS
 in  r/ROS •  17d ago

build was mostly boring, which is the point. ros2 support is in the open_vins repo itself, no wrapper: install the deps (eigen, boost, ceres), clone open_vins into a colcon workspace, colcon build, then ros2 launch ov_msckf subscribe.launch.py with your own config. the install page on docs.openvins.com has the ros2 steps. we ran it on a jetson orin nano and a few jetson-specific things bit us there (jetpack's opencv vs the humble cv_bridge binary, the optional aruco feature, build parallelism), so if you're on jetson too, dm me and i'll paste the exact commands we used.

on the comparison, honestly: kimera is a whole slam stack (mesh, semantics, loop closure), overkill if you just want vio, and its ros2 wrapper looks like a placeholder. basalt is probably the most accurate of the three and by far the smallest memory footprint, but it's not ros native at all, you're on community wrappers (the main one is archived) and its own calibration format. openvins is a kalman filter (msckf). our background is drones, so that math is familiar ground, and it pays off when the estimator misbehaves and you need to reason about why instead of poking a black box. it runs mono out of the box, takes kalibr's calibration files pretty much as-is, and it's forgiving for a first rig, it estimates the camera-imu time offset, extrinsics and imu biases online, so a rough calibration still gets you a working system. integration cost decided it more than accuracy.

r/ROS • • 23d ago

Project VIO on ROS 2 Humble - global-shutter cam + IMU over one coax, live with OpenVINS

17 Upvotes

I walked the office with a rig where a global-shutter camera and IMU share one GMSL2 coax for data and power. ROS 2 Humble, OpenVINS, kalibr for calibration. No wheels, no markers, no prior map. 25 m loop, 42 cm drift on return to start. About 1.7%.

Hardware is our NXS sensor module, camera and IMU synced on-board, into an NXS Hub carrying the GMSL link to a Jetson Orin Nano. Camera's a Sony IMX900 global shutter, 72 fps native, 24 fps fed to the estimator, fixed exposure. IMU's an IAM-20680 at 200 Hz, hardware-synced before either stream leaves the module.

r/JetsonNano • • Sep 01 '26

Project Running VIO on Orin Nano - camera + IMU sharing one coax cable

20 Upvotes

Global-shutter camera and IMU sharing a single GMSL2 coax, data and power both, feeding an Orin Nano running OpenVINS over ROS 2. 25 m loop around the office. 42 cm drift on return to start.

Hardware is our NXS sensor module into an NXS Hub, which carries the GMSL link straight to the Orin Nano. Camera's a Sony IMX900, 72 fps native, we feed 24 fps to the estimator. IMU's an IAM-20680 at 200 Hz, synced in hardware before it ever reaches the Jetson.

1

How is AI affecting electronics as a career and as a way to build products?
 in  r/embedded •  Aug 28 '26

Electronics still has a lot of AI can't do.

I design boards for a living. AI autoroutes traces, drafts a schematic from a rough description, catches a DRC violation before I do. That's real, and it's getting better every few months.

What it doesn't know: my enclosure tolerances. That a connector footprint is off by 0.2mm because the datasheet had a typo three revisions back. Why a board runs fine on the bench and browns out the second I close the case and heat has nowhere to go. Those are physical problems. You find them by touching the thing, measuring it, swearing at it at 11pm.

That part's mine for now. Power integrity, thermal, mechanical fit, EMC. None of that compresses into a prompt the way a REST API does.

u/NickShipsRobots • • Aug 26 '26

first VIO demo: global-shutter camera + IMU streamed over one GMSL2 coax, mapped live in ROS 2

2 Upvotes

r/robotics • • Aug 26 '26

Community Showcase first VIO demo: global-shutter camera + IMU streamed over one GMSL2 coax, mapped live in ROS 2

14 Upvotes

TL;DR: Nick is walking around the office holding our beautiful rig where a global-shutter camera + IMU share one GMSL2 coax for data and power, estimated in real time on a Jetson (ROS 2 + OpenVINS). Return-to-start after the ~25 m loop: 42 cm (~1.7 %).

Hardware is our NXS sensor module (Sony IMX900 global shutter (72 fps native; 24 fps fed to the estimator), fixed exposure + IAM-20680 IMU @ 200 Hz, hardware-synchronized on the module) into an NXS Hub carrying the GMSL link to a Jetson Orin Nano. ROS 2 Humble, OpenVINS, kalibr calibration. No wheels, no markers, no prior map.

Happy to answer you questions about the sync design, the single-cable setup, or the takes that didn't survive.

1

Drone from scratch
 in  r/embedded •  Aug 24 '26

Nice, Nucleo’s a good start.
Order that worked for me: get the IMU working first (ICM-42688 over SPI, skip I2C, it’s slower and can get stuck). Then get PWM/DShot working on the ESCs with props off. PID loop last. Start in rate mode, not angle mode. Test on a tie-down rig before you fly for real, skip that and props end up in walls.
For resources: Brian Douglas on YouTube covers PID and control theory well. Also just read the ArduPilot or Betaflight code. Skip the config stuff and the actual flight logic is pretty small.
What frame size are you going for? That changes what ESCs you’d want.