I’m driving a small pan/tilt head and a simple 2DOF arm from an Arduino Genuino Uno flashed with the EZB firmware over USB, and using the Kinect Body Control skill to mirror my upper-body motions. Hardware: Uno on COM5 at 115200, servos are MG996R on D9 (head yaw) and D10 (head pitch), and SG90s on D5 (left shoulder) and D6 (left elbow). Servos are powered from a 6V/5A BEC with common ground to the Uno. Kinect 360 with SDK installed is tracking fine.
In Kinect Body Control settings I’ve enabled Sitting Position, Smoothing set to 7, and I’ve constrained ranges to match my mechanics (e.g., D9 min 40 / max 130, D10 min 20 / max 120). I also inverted D10. Expected behavior: smooth servo motion that roughly follows my joints. Actual: I’m seeing jitter and frequent small oscillations even when I hold still, and occasional brief stalls that clear if I toggle the Pause checkbox. It gets noticeably worse when I enable the Picture In Picture skill to overlay the Kinect RGB over my Logitech C920 camera feed (PIP source = Kinect RGB, destination = C920; PIP set to use original frames). With PIP off, it’s better but still twitchy.
What I’ve tried so far: different Smoothing values (0-10), reducing both camera frame rates to ~15 fps, disabling any processing on the PIP source, tightening servo min/max further, and setting ServoSpeed on those ports in a separate script (helped a bit but didn’t remove the jitter). Power is stable (no brownouts), wiring is short and grounds are common.
Is there a recommended way in ARC to deadband and rate-limit the servo updates coming from Kinect Body Control before they hit the Uno (e.g., map joints to virtual servos and script a threshold/refresh limiter), especially when Picture In Picture is active?

Yes - the cleanest way to tame this in ARC is to decouple Kinect Body Control from the physical servos and add a small filter layer in between.
What you’re describing sounds like a mix of:
Recommended ARC architecture
Instead of letting Kinect Body Control drive
D9/D10/D5/D6directly:v0, v1, v2, v3This gives you a "buffer" layer where tiny motion changes get ignored.
Why virtual servos help
Virtual servo ports are great for exactly this kind of problem because they let ARC hold the tracked values without immediately driving hardware.
You can map Kinect joints to:
v0= head yawv1= head pitchv2= shoulderv3= elbowThen only your script decides when a physical servo should move.
Simple deadband + rate limiter example
Here’s a JavaScript example you can adapt in ARC:
Better version: move in small steps toward the target
This usually feels smoother than jumping directly to the target:
This creates a soft limiter that absorbs tiny Kinect fluctuations.
About Picture-in-Picture making it worse
That makes sense. PIP adds extra camera work, and if ARC is spending more CPU on video processing, Kinect tracking updates can become less stable.
A few practical suggestions:
You may also want to check whether the Kinect skill itself has any extra smoothing or update options beyond the general smoothing slider.
Important settings tip
For servos that twitch near center, also consider:
For example:
4-54-52-3Best practice in ARC
If you want, I’d recommend this workflow:
D9, D10, D5, D6from that scriptThis is a very common way to make motion tracking feel much more robotic and less "nervous."
If you want, I can help you build the exact ARC setup
I can write you a ready-to-paste JavaScript filter script for:
d9, d10, d5, d6If you’d like, I can also show you where to configure the virtual servos in Kinect Body Control via the skill’s kebab menu settings.
Questions: