joy callback access to data
Hi all, I have created a customized version of the joystick publisher, basically adding support for the old Logitech F310. This is a python node publishing on the topic. Everything works great.
Now in my main project (on the Bot), I can see the topic being published and also see the values change as expected, but I am struggling to understand how to access the actual readings of the axes.
The MicroROS development for Teensy 4.1 is done on Ubuntu 22.04, ROS2 Humble in VS Code and Platformio. Below is what the function looks like. Very simplistic for now.
void subscription_callback_autobot_joy(const void * msgin) {
const sensor_msgs__msg__Joy * msg = (const sensor_msgs__msg__Joy *)msgin;
vel_demand_x = msg->axes[1];
if (autobot_joy_Debug == 1)
{
debugln("autobot_joy received");
debug("msg: "); debugln(msg->header.frame_id.data);
debugln(" ");
}
}
Looking at the
sensor_msgs/msg/joy
I can see the data is contained inside as axes and buttons. From further looking around the web and the ROS wiki, I found the website below, indicating, I have to possibly convert the message datatype from ROS realm into c/c++. Further in the documentation it mentions variable-length array type. From looking through
joy__struct.*
joy__type_support.*
joy__functions.*
and also issuing command
ros2 interface show sensor_msgs/msg/Joy
# Reports the state of a joystick's axes and buttons.
# The timestamp is the time at which data is received from the joystick.
std_msgs/Header header
builtin_interfaces/Time stamp
int32 sec
uint32 nanosec
string frame_id
# The axes measurements from a joystick.
float32[] axes
# The buttons measurements from a joystick.
int32[] buttons
I can see it's a float32[] for axes -> in the documentation that suggests a float in c, which my variable is.
Website I found mentioning conversion
Now the question:
how would I read the value of let's say first axis [0] in the callback?
Please advise, I'm not sure what I am missing here!
Thanks and happy new year to y'all!
Asked by PointCloud on 2022-12-30 02:50:04 UTC
Comments
I'm not sure I understand your question. You already show this:
wouldn't that be how you access elements of the
axes
array of themsg
structure instance?Additionally:
while many things will be similar, please note micro-ROS targets ROS 2, while the ROS wiki you link documents ROS 1.
Asked by gvdhoorn on 2023-01-02 06:50:22 UTC
Note btw I would not recommend using joystick data directly for tele-op purposes.
Using a
geometry_msgs/Twist
as input would be much more according to best practices, as it abstracts the input to your platform in an appropriate way (it's very likely two different joysticks would have different axis mapping fi, which, if you were to use axes values directly, would mean you'd have to update your code).Asked by gvdhoorn on 2023-01-05 07:49:52 UTC