# Re-scaling output values of a topic

Hello guys! I'm working on a teleop project with a Spacenav joystick for a UR5e robot arm. I've remapped the topic to which the spacenav_node published originally to /twist_controller/command but the values which the joystick sends are too big for the robot arm to safely use and so the safety is triggered. How do I re-scale the values to more optimal ones? The maximum values which the joystick publishes are ~0.9. How do I scale that range down to -0.04 and 0.04?

I'm thinking of making a separate package which launches in parallel to the spacenav one and which takes the output values and divides them by a constant. Is this a viable solution or is there a simpler method to resolve this issue?

edit retag close merge delete

Hi, I'm not an expert, so this is not an answer, but your solution would also be my approach to solve this. A simple subscriber who publishes the scaled date to a new topic. Another approach could be to implement a scaling factor in the spacenav node.

( 2021-09-23 04:48:22 -0500 )edit

Sort by » oldest newest most voted

Besides writing a custom node, I can come up with two options:

1. treat your spacenav as a joystick, and use something like teleop_tools/joy_teleop. That node supports scaling and a few other options which seem to do what you describe
2. keep using raw values from your spacenav, but scale them using topic_tools/transform. That node subscribes to a topic, runs it through a Python expression and then publishes the result to (preferably) a new topic. A previous Q&A about transform is #q261935, which shows how to format complex expressions

I've used both in the past.

Option 1 will probably be the easiest to implement. Option 2 is the most flexible, as it's almost a custom node, but then as an argument to the topic_tools/transform node.

In any case: try to avoid writing code yourself as much as possible.

And something to realise: any additional nodes (or really: publishers and subscribers) you place between your input device and the final consumer of your Twists is going to add delay and jitter. That may not be a problem in your case, but it is something to keep in mind when working with such a system.

more

Please note that the twist_controller has a dynamic_reconfigure parameter twist_gain to achieve exactly this.

more

Avoiding feeding values outside a desirable range to a component might be nicer from a 'defensive programming' perspective.

But it's true, if the consumer can also scale, that would also be an option.

Note that, unless precautions are taken, dynamic_reconfigure parameters are not persisted.

( 2021-10-05 11:16:07 -0500 )edit