Voxl2 Spektrum Receiver error
-
@Eric-Katzfey Here is a
voxl-px4
log while testing with a DX6e this morning. I was able to bind and calibrate no problem. I am just not able to control the motors. Flight mode and kill switch seem to be working fine. So seems to have the same behavior as the DX8 with a error in the log for 32 bytes and 0x00.INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 ERROR [muorb] SLPI: Spektrum RC: Invalid DSM frame. 32 bytes. Protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf5 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Armed by external command INFO [logger] Start file log (type: full) INFO [logger] [logger] /data/px4/log/2024-01-24/19_14_37.ulg INFO [logger] Opened full log file: /data/px4/log/2024-01-24/19_14_37.ulg WARN [mavlink] Event dropped (297, 65527) WARN [mavlink] Event dropped (297, 65527) WARN [mavlink] Dropped 65230 events (seq=65527) WARN [mavlink] Dropped 65230 events (seq=65527) INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00 INFO [muorb] SLPI: Spektrum RC: DSM message parsed successfully INFO [muorb] SLPI: Spektrum RC: Publishing input_rc INFO [muorb] SLPI: 0x00 0x00 0x8c 0x05 0x01 0x56 0x14 0x00 INFO [muorb] SLPI: 0x1b 0xf6 0x2e 0xaa 0x3c 0x00 0x34 0x00 INFO [muorb] SLPI: Spektrum RC: 16 bytes from UART, protocol byte 0x00
-
@Chase-Riley Huh, that still doesn't look right. When you calibrate you can move each stick and it shows properly in QGC? And listener input_rc shows the values moving properly when you move the sticks? What is the value of the parameter COM_RC_IN_MODE?
-
@Eric-Katzfey yes, each stick moves correctly in QGC.
listener input_rc
shows all sticks move correctly. I have tested withCOM_RC_IN_MODE
set to 0 and 2 and both yield the same results. -
@Chase-Riley And they are mapped correctly such that throttle is on the stick you want? Can you do listener on manual_control_setpoint and see the throttle value move when you move the throttle stick?
-
@Eric-Katzfey
RC_MAP_THROTTLE
is set to Channel 3,RC_MAP_YAW
is set to Channel 4,RC_MAP_ROLL
is set to Channel 1, andRC_MAP_PITCH
is set to Channel 2.Moving the Throttle and Yaw stick while running
listener manual_control_setpoint
shows Throttle and Yaw changing values as it should. It also shows that Stick movement goes TRUE. -
@Chase-Riley Then at this point I can't think of how the RC could be related to the motors not spinning up. Can you arm, try to throttle up a few times, then disarm and send us the px4 flight log?
-
@Chase-Riley And you have tried to throttle up in manual flight mode?
-
@Eric-Katzfey I have tried to spin the motors in manual mode as well with no change. I have included a drop box link with the px4 flight log you requested.
-
@Chase-Riley I'm having some others take a look at the log file. I'm kind of stumped at the moment.
-
@Eric-Katzfey Please let me know what you or your team find. This seems to be the last hurdle to getting me to flight testing. I have a shipping deadline to make on Friday with this system.
-
@Chase-Riley Seems like ESC param issue. Alex is going to respond with some suggestions.
-
@Chase-Riley , we have discussed and the data on the PX4 side looks ok so far, which leads me to believe there may be an error in ESC params, specifically the RPM curve calibration
pwm_vs_rpm_curve_a0
,pwm_vs_rpm_curve_a1
,pwm_vs_rpm_curve_a2
.Please confirm that you performed the calibration (with propeller mounted on motor!) according to instructions here and updated the results (a0, a1, a2) params in your esc params xml file and sent it to the ESC ?
Also double check the
min_rpm
andmax_rpm
in your esc params -
Additionally, I saw that you use
THR_MDL_FAC
set to 0.8, which is what we use in our Sentinel drone. However, your propellers, if i am not mistaken, are much larger and this factor may need to be correct. I will double check how to calculate this factor correctly. -
Another suggestion: you can test your ESC response with the following command:
https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/blob/dev/voxl-esc-tools/calibration.md?ref_type=heads#test-esc-using-rpm-commands (at the very bottom)
(you can adjust your test command according to your motor / prop and min/max rpm, etc)
-
@Alex-Kushleyev I went and checked my .xml file and verified it was correct and re uploaded it to the ESC just to make sure. I had already run the calibration and updated the A0, A1, and A2.
I did find that my
min_rpm
andmax rpm
were different in the xml file than I had them set in px4. That may have been the issue because control seems to be working fine now. Between re flashing the xml and changing the values one or both of the solutions solved the issue. I will contnue testing and report back with any issues. Thanks for jumping in and helping out.@Eric-Katzfey you said this morning that the DX6e data I sent over did not look correct. Is there something else we want to look into there. As I said before after looking at the logs the DX8 and the DX6e seem to behave the same way.
-
@Alex-Kushleyev Do you have a rough idea of what this value should be set to? If you need to know my motor and prop combo send me an email. I would rather not disclose on the forums.
-
@Chase-Riley , i am checking. There should be a formula to calculated it.
-
@Chase-Riley Just the protocol byte being different than what we normally see. Not sure why it is doing that.
-
@Chase-Riley , based on the following documentation, https://docs.px4.io/main/en/config_mc/pid_tuning_guide_multicopter.html , this factor determines the mapping between the control command (in our case rpm) and thrust. An ideal propeller would have a quadratic relationship between thrust and rpm, such as thrust = a*rpm^2, but the propeller will lose efficiency at higher rpms, so a good compromise is the value of 0.8, which we are using on our vehicles. This parameter is actually not dependent on the specific min and max rpm, but should be considered as a general approximation to map the control input to thrust (in normalized units, which is taken care of by px4).
Please note that if you use a traditional ESC, whose control input is PWM duty cycle, the resulting mapping will be less accurate (in terms of being a perfect quadratic function). The reason is that with modalai esc, the ESC takes care of RPM control (and thrust is a function of RPM), but traditional ESCs do not RPM control, so the relationship to thrust is more complicated.
So i think you can leave
THR_MDL_FAC
parameter at 0.8 and should be OK! -
@Alex-Kushleyev and @Eric-Katzfey Thanks for your help on this. Flight testing went well. I was able to test with the Spektrum DX8 and DX6e and saw no difference between the two while running the custom Debian file that was sent over.