Wheelchair guidance

Thank you, that is extremely helpful! Watching your videos now.

Rnet equipped chairs could use the PWM values as you described.

People willing to open up their non-Rnet wheelchair joysticks could add DPDT switches to select between the OEM wheelchair analog joystick module, or ArduPilot output with the low pass filtered PWM lines. Or in some cases, a pair of digital potentiometers.

With real outputs for throttle and steering servos, ANY chair with a physical joystick could use actual servos to move the joystick. As in this video RC Servo Controller for Power Wheelchair - YouTube with less precision of course.

It would be convenient for all these different use cases to share identical scripts, but a variation for specific digital pot is probably necessary.

Don’t confuse the poorly named servo PWM output with the duty cycle based signals that are more accurately described by the PWM moniker.

ArduPilot’s throttle PWM outputs cannot simply be run through a low pass filter to approximate an analog voltage. They are servo/RC PWM signals, typically referenced by pulse width values in microseconds.

The video shows a method that could be connected directly to autopilot output.

1 Like

Good catch.

I should have clarified in my case the line above refers to the Beagle Bone Blue motor outputs (2 pin, not servo) which I think are the kind of PWM which you can low pass filter to approximate an analog voltage. I could be wrong.

Digital pots would require yet a different wired interface depending on the chosen pot. I2C, SPI, UART, GPIO up/down

Then familiar hobby servo outputs with ‘not PWM, PWM’. Does anyone call that PDM(Pulse Duration Modulation)?

I’m not clear on how these values are all interrelated inside ArduPilot software or Lua scripts, learning now.

It would be a somewhat trivial arduino project to make a peripheral translator board which converts between the different output formats. Of course, if doing that, I may as well make @ppoirier PWM/CAN translator too. But, with chips hard to get, and all the signal lines available on a FC, such a translator is redundant.

I gotcha. I thought I might be over explaining but figured it might help others as well (there are several active topics with the same confusion).

The servo/RC signal protocol is almost always referred to as PWM, and it’s up to the user/use case to make the distinction.

I use such an Arduino on yet another project. It works well.

1 Like

Sub decimeter GPS denied navigation will be useful, or required for negotiating elevators and doorways, so I’ll keep an eye on your work. Is there anything critical to your work which you cannot lay hands on?

When I refer to PWM , I generally mean the std RC signal (900-2000 msec)

1 Like

It just occurred to me that the path through the code which was created by removing ToshibaCAN support could be reversed programatically and used to create a generic API for adding similar devices.

Not saying that would be useful for ArduPilot, I just never realized in general how prior code commits removing features could be a reverse engineering tool for adding features.

1 Like

Indeed, as do I. Unfortunately, it becomes confusing to new users, especially those with basic familiarity with hobby microcontrollers, hence my pedantic explanation above.

No offense, this is indded confusing,.
I think that canbus motor controllers offers a great opportunity for enhancing the ArduRover platform and opening the field of commercial robotic application, like AMR for example.

1 Like

Absolutely agree. Thrilled to see this project moving forward, and hopefully using CAN!

1 Like

Hi Dustin

Thank you

I managed to order most from Ebay and Aliexpress in January and am still waiting for components.

What I am waiting for are the motor mounts but am going to make some for the time being.

Just be careful the Beagle’s power side is a lot different from a PX4 etc

1 Like

Hi All,
New to this thread and reading up on it now. I learned about it from slomobile on a YouTube discussion. I have been experimenting with a 6wd robot using wheel chair motors, and would like to add functionality to it. It is currently RC controlled and uses 6 Spark Max controllers to drive the dc gear motors. I also have other wheel chair and wheel chair parts, so I could possible help slomobile on this concept.

Just a bit of status update and breadcrumb. The Beagle Bone Blue functions but isn’t doing anything interesting yet. I’ve pushed Ardupilot work to the side because I was having stability issues with communication between the chair R-net CAN bus and both the Beagle Bone Blue and Raspberry Pi 3B+. The chair is now behaving erratically even when disconnected from any add on controls and I don’t know why. Seating actuators are operated by the wrong buttons. Very strange. I need to get that sorted first, otherwise I won’t know if problems are related to that instability or the Ardupilot CAN driver.

I bought an Omni. Problems with the chair began when I first connected it and remained after I removed it. Omni is a sort of universal way which actual medical professionals add custom controls to wheelchairs. I figured I ought to get familiar with the correct way. Details here WheelchairDriver • View topic - Custom proportional control

I’ve been able to order an R-net programmer finally. It is expected today some time so I can use it to enable OBP (On Board Programming), reset the programming in the used Omni, and test the Omni with my Arduino hack for the first time. That may prove a more reliable way to add Ardupilot to a chair in the long run. Some version of an Omni is available from all or most powerchair manufacturers, so it is a more universal solution that would also work on Pride and Quantum chairs which are popular in the US but do not use R-net.
People likely to need assisted navigation are also likely to have an Omni. It is used to implement latched driving, head arrays, sip and puff systems, which are used when a person has very few highly controllable parts of their body. That makes unassisted navigation tedious. Unfortunately adding an Omni is more expensive if your chair does not already have one.

Omnis only accept joystick style inputs. A forward/reverse speed Y axis and a turn rate X axis. This necessitated my hack to make tank style steering work. The entire wheelchair motor control industry (basically Curtiss-Wright now) is a bit absurd. I’d like to just ditch it all and use standard motor controllers, but many people that need assisted navigation cannot afford to throw out their functioning motor controllers because I don’t like their quirks. So I continue hacking.

Today I found this Permobil Virtual Seating Coach Fleet Management Bluetooth PN 325104 | eBay
It connects to a Permobil Master Module, in the same place as a Permobil Connect Module, and I think the Permobil proprietary internal Wheelchair Builder software connects to that same port via RS-232 when originally programmed at the factory. I could be wrong about that. It contains FCC IC: PVH0946 which is a uBlox bluetooth module with a STM32F103RCT6

That got me wondering if I could just get an STM32 flight controller and connect it to that serial port rather than messing with CAN and R-net at all. I know all the chair’s logs and every firmware on the chair can be updated through that port. However I do not know if it is possible to issue drive commands via that port. Work continues. This part is mostly for educational purposes. It doesn’t serve anyone without a Permobil brand chair.

Lastly, the chair has a new addition, a swarm asset tracker https://swarm.space/product/swarm-asset-tracker/

Every few hours it sends a ping with my GPS coordinates up to a microsatellite. They publish those coordinates and display my location on a map on a password protected website which I can also access with their API or webhooks. I don’t even know what webhooks are, but I’m having a meeting with OCI Oracle Cloud Infrastructure this week to see if we can work something out. The idea is to use the Starlink terminal in the van to pull down my coordinates from the web and display them on an E-ink map in the window of my van. In case I get stuck in the woods, my van back at the trailhead will be showing any potential rescuers the last known location of my chair. I figured that might be useful to others also so it will be developed with an eye toward letting anyone set up an account to do the same. Lots of other features being considered. Let me know if there is any feature you would like to have, or if you would like to work on it. I am not a web or network guy. Embedded stuff only for me. It will be on slomobile.net if we can make it work.

The BeagleBone Blue and I don’t get along very well. I was excited about it and wrote up a nearly complete guide to setting it up with ArduPilot, but ultimately, it was a letdown, and I don’t have much enthusiasm anymore. It was just too frustrating to get going, and then when I did, ArduPilot consumed so much of its CPU time that I felt it’s utility as an all-in-one autopilot+companion was quite limited.

All that to say - an H7 based autopilot plus a companion computer may treat you better. You can even accomplish custom CAN communication quite handily via Lua.

Thanks for your write up. I used it.

I’ve come to the same conclusion. My wallet has not yet. I’m sure it will come around once it recovers from the sting of the Omnis. About $700 including the programmer and one is held together with tape. I’m hoping Colorado’s right to repair improves access to wheelchair parts and brings prices down.

1 Like

I think you should look at hoverboard motors as a cheap and powerful motor system, with 2 or 3 board Its more than powerful enough to pull me around the beach and with a 100rpm limit hard coded into the firmware I was confident enough in it to let my kids have a go.

I worked it out, that each motor put out something like 8kg of pull, so 6, was giving 48kg of pulling force so you will loose grip before running out of torque.

with 3d printed wheels it can go just about anywhere.


Good work and a great assistant. I bought 2 hoverboards and a pair of similar flange mount wheels and controller. They suffer motor overheating on grass when pushing my weight and the weight of seating components. They are great for recreational devices, but not robust and reliable enough for something I rely on to get back home. I’ll try a pivot axle setup to see if it stalls the motors less, but larger wheels work better on threshold bumps and curbs, and that would stall direct drive even easier.

1 Like

6 wheels work much better than 4 and it will reduce the load on each motor by 50%. That should stop it overheating. Larger wheels will cause more load so its better to use more wheels rather than bigger wheels.

I’ve built lots of dropped center 6 wheel bots with FRC and they definitely have their place. Climbing a 6" curb usually requires at least a 6" tire radius regardless of power available. In that situation the other wheels assist with traction but only the wheels in contact with curb make the vertical lift. My chair and I together are over 600lbs. That is a lot to lift for a direct drive motor. https://newlive.fr/en/ is an example of a well done 6 wheel chair in my opinion. Notice the fore and aft omni wheels to reduce turning friction. If the normal center drive wheels ever get high centered, it can slide sideways down a ramp. Its suspension limits that possibility, as do ramps with side barriers.

Its hard to pick a design without considering the full use case.

1 Like

I have been looking at rocker bogie suspension systems for a while for its ability to climb much larger objects like kerbs, as it can let the front pair of wheels climb without taking all the weight on it. I dont think you would need a fully articulating chassis like the mars rover.

I think it would be enough to only lift the front left and right pairs of wheels on their own rockers,

1 Like