FWIW - a several years ago I played around some of my own RPI (or ODroid) hats, that controlled Dynamixel servos. Note at the time I was doing everything with AX12 servos.
I used a Micro-controller to drive this. In my case Teensy processors, first one I experimented with was using a Teensy 3.2 But could be most different processors. For me preferably one with at least two hardware Serial ports. One to talk to the RPI and one to talk to servos. I believe my first ones simply used the direct output of the Teensy 3.2 which has 3.2v signals to drive the servos. Later I added in some level shifter circuitry. On the RPI side again since Teensy boards output and input at 3.2v can connect directly to the RPI Serial TX/RX pins. If you use a 5v processor than probably need to level shift down…
Again this part was not overly complicated. My problem is I usually built the kitchen sink.
Like: here is sort of 3d look at one for 3.2:
Again I just play around for my own fun, so usually my boards have issues, which I never worry about fully fixing… I just go on and play with the next one, but to give you an idea of what some of the stuff is on this board:
It has the T3.2 connected up to the RPI. I made the connections to the RPI TX/RX pins optional by a usign breakout pins and connect with jumpers(Shunts)., which simply connect it up to one of the T3.2 UARTS…
On The DXL side, I use another UART, decided to level shift, so I use two chips near the right hand side of schematic to level shift both RX/TX pins, and I use an IO pin to set the direction. With some other setups, I could simply use a BSS138 and 2 resistor like level shifter used in Adafruit/Sparfun boards setup, connected up to the teensy TX pin of a Uart and configure for half duplex… Can go into more details if desired, but more specific to Teensy.
Also controlling the servos, this board allows me to turn on/off the power going to the servos. This was based off of the then Trossen Robotics Arbotix Pro which was based off of Robotis OpenCM 530?. Board also has plug in to supply the voltage tot he servos, and DC/DC converter to convert the Lipo 3S power down to 5v…
Other side note: At the time I am not sure how much the using the RPI RX/TX pins helped with throughput. This was in the time that RPI3 just came out, and if I remember correctly RPI only really had one hardware UART, that by default was used by Bluetooth, so the UART for RX/TX pins was sort of emulated? Again been awhile. So often times I would use the board conneted to RPI also through USB, and use the USB connection instead of those two IO pins.
To make this easier to switch either way, I had my software not talk directly to ttyACM0 or the ttyAMA0 devices, instead it would first look for ttyDXL object, which I setup typically using UDEV rules. After that the code for the most part did not care how connected. One exception was if it rerouted to a ttyUSBx port which implies FTDI, to minimize delays, the code called tcdrain, which logically on the Arduino something like Serial.flush()… In the Linux code a call to tcdrain. Which helps a lot with minimizing delays. But needed to be careful as calling tcdrain on other board types like ttyACM0 inserted long delays…
Again not sure if the above helps or not, but thought I would mention some of this stuff on the off chance it might.