前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS联合webots实战案例(三)使用外接手柄控制机器人[2]

ROS联合webots实战案例(三)使用外接手柄控制机器人[2]

原创
作者头像
锡城筱凯
修改2021-02-07 10:22:28
1.4K0
修改2021-02-07 10:22:28
举报

博客地址:https://blog.csdn.net/xiaokai1999

笔者设备:北通 阿修罗

一共有14个按钮和4个线性杆

1. 使用外接手柄控制小机器人

1.1 安装相关功能包

  1. 安装ROS游戏杆功能包$ sudo apt-get install ros-melodic-joystick-drivers$ ls /dev/input/可以看到,js0就是手柄所创建的端口
    7.jpg
    7.jpg
    3. 我们可以使用jstest命令查看他的工作状态$ jstest /dev/input/js0 Driver version is 2.1.0. Joystick (Microsoft X-Box 360 pad) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y) and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR). Testing ... (interrupt to exit) Axes: 0: 0 1: 0 2:-32767 3: 0 4: 0 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off随意按动手柄上的任意一个按键,数值都会发生改变1.2 测试Joy功能包$ roscore $ rosrun joy joy_node如果配置无误,可以看到[ INFO] [1610344484.707536624]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.$ rostopic echo /joy我们随便按一个手柄上的按钮可以看到
    8.jpg
    8.jpg
    axes代表轴向输入,buttons代表按钮输入
  2. 首先,将手柄连接到电脑上,使用如下代码,检查手柄是否可以被识别到
  3. 测试手柄在ros中的功能,使用joy和joy_node功能包
  4. 发送手柄动作信息 joy_node功能包使用/joy话题发布手柄信息,可以使用如下指令查看
  5. 可以使用下面的命令获取/joy发布消息的类型$ rostopic type /joy sensor_msgs/Joy$ rosmsg show sensor_msgs/Joy std_msgs/Header header uint32 seq time stamp string frame_id float32[] axes int32[] buttons
  6. 使用下面命令查看消息中使用的字段

1.3 编写手柄控制机器人的程序

在上文中我们提到了/joy发布信息的类型为sensor_msgs/Joy,头文件就需要加入#include <sensor_msgs/Joy.h>

我们使用手柄上的X(左转),Y(前进),B(右转),A(后退)来控制机器人的运动。

9.jpg
9.jpg

用手柄控制的方式和键盘控制的方式只有两个地方写法不同,如下:

整体程序请看

ROS联合webots实战案例(三)在webots中使用ROS控制小机器人 1. 订阅/joy话题ros::Subscriber joySub; joySub = n->subscribe("/joy",1,JoyDataCallback);手柄返回函数/******************************************************* * Function name :手柄返回函数 * Description :当手柄动作,就会进入此函数内 * Parameter : @value 返回的值 * Return :无 **********************************************************/ void JoyDataCallback(const sensor_msgs::Joy::ConstPtr &value) { // 发送控制变量 int send =0; //ROS_INFO("sub keyboard value = %d",a); if (value->buttons[2]) { // 左转 speeds[0] = -5.0; speeds[1] = 5.0; send=1; } else if(value->buttons[3]) { // 前进 speeds[0] = 5.0; speeds[1] = 5.0; send=1; } else if(value->buttons[0]) { // 后退 speeds[0] = -5.0; speeds[1] = -5.0; send=1; } else if(value->buttons[1]) { // 右转 speeds[0] = 5.0; speeds[1] = -5.0; send=1; } //当接收到信息时才会更新速度值 if (send) { updateSpeed(); send=0; } }2.最后配置CMakeList.txt,在最下面添加:add_executable(velocity_joy src/velocity_joy.cpp) add_dependencies(velocity_joy webots_ros_generate_messages_cpp) target_link_libraries(velocity_joy ${catkin_LIBRARIES})编译功能包 $ cd catkin_ws/ $ catkin_make运行launch文件,可能不会那么快可以TAB出来,打进去一样可以运行$ roslaunch webots_demo webots.launch打开joy功能包中的joy_node节点用于获取手柄数据$ rosrun joy joy_node运行编写好的代码$ rosrun webots_demo velocity_joy效果undefined

3.gif
3.gif

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 使用外接手柄控制小机器人
    • 1.1 安装相关功能包
      • 1.3 编写手柄控制机器人的程序
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档