Surface Controller

Are you using APEM or chinacopys? …isnt much difference i have experienced, bec <apem buy them from China;)

Tried both. They have their ups and down. Fish farmers go through APEM joystick like candy so I sell them the cheaper joystick.

1 Like

That three-bladed Odin’s Horse will work better in forward/reverse than that fancy 5-bladed prop.

1 Like

My Sub-Atlantic Mohican use to have 3-blade and they all switched to 5. I am told it gives more propulsion but I am sure the SA motors can handle them. The BR motors maybe not…

Looks superb Etienne - we can’t wait to receive ours. The size is perfect. and the way you can customise it is fantastic. I’m sure it is perfect for the Pro series video Rays as you can map just about any USB hand controller to work with them - there is a procedure in their manual. Cheers Peter

1 Like

Hello everyone,

I thought I would post the final results of my HCU:

I went really overboard with the design and programming.

I am also using a 13bit analog input which is sent as 16bit to windows. To give you an idea, the Leobodnard I initially used was 12bits. This is 4096 steps from 0 to 5v. Adding a bit doubles this where I now have 8192 steps from 0 to 5 volts.

My controller is a teensy 3.5 which operates at 120mHz

You can assign up to 64 button output. 6 axis, 17 sliders…

I would be able to assign 128 buttons and 4 hat switches but QGC really doesn’t like it so I had to limit this for compatibility reasons.

I have selector buttons so people can use several channels for tilt ant light. At present, it is set for 3 but I will amend this so the user will be able to add the channels they want.

So lets say, light channel 1 triggers button 12 ans 13, channel 2 uses a slider and channel 3 uses buttons 24 and 25…

Same idea for the tilt functions.

There are no shift buttons on the joystick. You just program the unit to operate in shift mode if need be and it will trigger whichever button you assigned to shift.

This is the config UI:

I also added a free expansion pcb for the ROV so users can use the joystick to its full potential.

This will use the RaspPi USB port and give access to 7 digital I/O and 6 PWM signal.

I will be completing the UI for it this month and I’ll post more info on it.

Cheers,
E.

9 Likes

Hello,

Did a bit of a coding marathon to complete this UI for the Expanse PCB. here is the result:

Joystick support: (for now)
2 joysticks (detect the first 2 joysticks plugged in the PC)
32btn
6 axis
1 POV

Features:

  • Serial or UDP comms
  • Compatible with BlueRobotics Port forwarding via Rpi
  • Every button on UI can be assigned a button from joystick and or keyboard
  • I/O 1 to 7 are latch buttons (press once to on and once again to off)
  • I/O buttons have feedback from PCB (green is on) (yellow if command sent but no feedback)
  • Each PWM can be assigned an axis from the joystick
  • PWM Min/Max and Off can be configured
  • PWM channels can be turned on/off
  • PWM channels can be disabled by putting the off value to -100
  • PWM channels have feedback from pcb.
  • Up/Down button increments can be adjusted
  • UI can be alpha-blended with background
  • Bottom window shows incoming data from PCB

This is available freely with my Joystick or can also be bought here: http://www.deltarov.com/new/product/expanse-control-system/

Cheers,
E.

1 Like

Awsome work with this mate. This software allowed us to control top and bottom lights induvidually and run a manip and other tooling with ease and is really configurable. Its a really handy upgrade.

1 Like

Stellar reviews on my HCU rev1 now able to fully access all its functions via my new expanse software config utility:
image

Still have this QGC limitation where 128buttons + 4 hats causes the software to get false buttons triggers.

@williangalvani any idea what is causing this? How is the joystick input processed in QGC? feels like the number of bytes are limited for the buttons and its getting bytes from one of the axes.

My initial joystick controller was outputting 64 bytes. I limited the number of buttons to 64 and no top hats to reduce the output to 54bytes to get it to work properly in QGC.

I know window default driver is very restrictive and I had to program my own joystick interface to query the HID device message directly to get all my inputs to work

I am looking at pimping up my HCU rev2 a little bit and going to my full capacity of 128buttons + 4 top hats would be nice but I can’t do it until qgc is sorted.

Additional features:

  • Joystick modes: Normal, Reverse, Crawler:
    By pressing key combination (Gain+Tilt Selector = Normal, Tilt+Light Selector = Reverse, Gain+Light Selector = Crawler)
    Each mode calls a completely separate configuration previously programmed by the user
    IE, the user can decide in reverse mode to just flip the x-y axis so he can fly the tether back to launch point
    In crawler mode the user can assign different axis to the main joystick effectively disabling the axial thrusters (provided that the ROV was not is depth or stabilize mode)
  • 3 LEDs to show the selected joystick mode
  • 1 user configurable button on the left below the handle
  • 1 user configurable button on the right below the handle
  • 2 sets of 4 buttons on the front also user configurable.
    I was thinking these buttons could be used to control a manip or tooling etc.

I am wondering if this is a bit over the top. The front buttons are messing with the visual balance of things.

Cheers,
E.

FYI I fully understand that QGC only uses 16 buttons. My HCU uses buttons 1-16 as normal, 16-32 with a shift trigger leaving buttons 33 and up for any other software on the PC. Same goes for the additional axes and sliders.

Since my HCU can trigger:

21 buttons via push buttons
36 buttons via 9 channels of tilt and light control (could be even more if ever there was a need for it)
18 buttons via tilt and light encoder buttons
4 buttons via the rest of the encoder push buttons
and potentially 1 joystick button

button control above 64 would be advantageous

Hi @etienne,

Great work!

This really sounds like a bug. Please open an issue in QGC Github Repository.

QGC’s Ardusub Joystick implementation has a 16 buttons limit due to a mavlink limitation too. MANUAL_CONTROL can only handle 16 buttons.

Under the hood QGC uses SDL to read the joysticks. You could use something like jstest-sdl to make sure it detects your joystick properly.

Hi,
I remember messaging you some time ago.
You were in Ft. Lauderdale.
I’m trying to learn Beaglebone for an ROV I’m building. Do you know anyone in S. Florida that knows Beaglebone?
Thanks.
Berny Shomstein

Hello all,

I finally got time to complete the latest revision of my HCU:

I decided against putting the buttons on the front face.

The next step is trying to add wireless accessories like a pedals and master controller for a manip.

I ordered these pedals and a couple RF modules. Hopefully the signal will penetrate the HCU’s aluminum housing…

image

Cheers,
E.

3 Likes

…depends on what force you want :wink: …fast is few blades best, Heavy, more blades;) ( I think Sleipners Bowpropellers are Well adjusted and as good as it gets;)

Hello All,

I thought this video would be interesting to show how much the HCU can do with our Expanse PCB.

Using the Companion routing feature to connect to the Expanse PCB below.

The expanse 2.0 uses I2C for additional connectivity.

Check it out:

Cheers,
E.

5 Likes

good work

1 Like

Werry nice good work👌

So I am using the Delta HCU with a Heavy Configured BROV2. I attached a newton gripper to it and have the right buttons assigned to it. But when I use the gripper, it will only fully open and fully close. I was hoping to make it so I can open and close it at intervals/steps. On QGroundControl I still have the assignment I used with previous controllers that allowed the step open/close. I also tried the other servo assignments but to no avail. I also tried changing the trigger time within the HCU configuration in hopes that it would not press the buttons for too long but with no luck. Does anyone know how to program the controller to do this task, or if it is even possible? I hope this makes sense.

Hi @Jnyberg,

Are you using the servo_n_min/max_momentary button functions? If not that may be the issue. If not it may be a controller specific thing, in which case hopefully @etienne has some idea what’s going on :slight_smile:

@EliotBR @etienne Yes I am using the momentary buttons. But they just open/close the gripper fully. There was other options I tried too that didn’t work since momentary is what I would expect to be the one to work.