Hi, I really appreciate this explanation. I am using FEETECH bus servos in the STS lineup connected to a URT-1 board pictured here.
I dont think PWM works for this setup. These servos work off UART to TTL conversion through this board so the data that need to be sent to the board is via an SDK library they have for STM32/microcontrollers.
I was able to connect the board over USB to my desktop and send something simple with pyserial like:
import serial
import time
port = '/dev/ttyUSB1'
baudrate = 1000000
def calculate_checksum(data):
return (~sum(data) & 0xFF)
try:
ser = serial.Serial(port, baudrate, timeout=1)
print(f"Opened port {port} at {baudrate} baud")
# Servo command
id = 0x03 # servo ID 3
length = 0x09
instruction = 0x03
parameters = [0x2A, 0x00, 0x08, 0x00, 0x00, 0xE8, 0x03] # Position = 2048, Speed = 1000
checksum = calculate_checksum([id, length, instruction] + parameters)
command = bytes([0xFF, 0xFF, id, length, instruction] + parameters + [checksum])
print(f"Command to send: {command}")
ser.write(command)
print("Command sent")
time.sleep(0.5) # Wait for a response
response = ser.read(64) # buffer size
if response:
print(f"Received response: {response}")
else:
print("No response received")
ser.close()
print(f"Closed port {port}")
except Exception as e:
print(f"Error: {e}")
This worked to move my servo to a desire position over usb from my desktop but I am unsure of how this would translate to the FC sending this command to over UART to the servo board. Would it still make sense to create a custom module in px4 that sends the position commands based on an RC switch?
Also here is a diagram of their example with an Arduino. Not sure why they have TX-TX and RX-RX but that seems to also work for seeing successful data transmission when connected to my FC that way too.
Here is the user guige and SDK Git for reference.
https://gitee.com/ftservo/FTServo_Python
Let me know if you have any suggestions ![]()


