• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2

人工智能 锡城筱凯 3120次浏览 0个评论

笔者设备:北通 阿修罗 一共有14个按钮和4个线性杆  

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

 

1.1 安装相关功能包

 

  1. 安装ROS游戏杆功能包
    $ sudo apt-get install ros-melodic-joystick-drivers
    
  2. 首先,将手柄连接到电脑上,使用如下代码,检查手柄是否可以被识别到
    $ ls /dev/input/
    

    可以看到,js0就是手柄所创建的端口

ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2  

  1. 我们可以使用jstest命令查看他的工作状态 “` shell $ 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功能包
1. 测试手柄在ros中的功能,使用joy和joy_node功能包
``` shell
$ roscore
$ rosrun joy joy_node

  如果配置无误,可以看到  

[ INFO] [1610344484.707536624]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.

发送手柄动作信息 joy_node功能包使用/joy话题发布手柄信息,可以使用如下指令查看

$ rostopic echo /joy

我们随便按一个手柄上的按钮可以看到
ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2

axes代表轴向输入,buttons代表按钮输入

 

  1. 可以使用下面的命令获取/joy发布消息的类型 “` shell $ rostopic type /joy

  sensor_msgs/Joy  

4. 使用下面命令查看消息中使用的字段
``` shell
$ rosmsg show sensor_msgs/Joy

std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
float32[] axes
int32[] buttons

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

  在上文中我们提到了/joy发布信息的类型为sensor_msgs/Joy,头文件就需要加入#include <sensor_msgs/Joy.h> 我们使用手柄上的X(左转),Y(前进),B(右转),A(后退)来控制机器人的运动。
ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2 用手柄控制的方式和键盘控制的方式只有两个地方写法不同,如下: 整体程序请看  

ROS联合webots实战案例(三)在webots中使用ROS控制小机器人  

  1. 订阅/joy话题
    ros::Subscriber joySub;
    joySub = n->subscribe("/joy",1,JoyDataCallback);
    
  2. 手柄返回函数 “` c++ /_*_
  • 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.最后

  1. 配置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})
    
  2. 编译功能包
    $ cd catkin_ws/
    $ catkin_make
    
  3. 运行launch文件,可能不会那么快可以TAB出来,打进去一样可以运行
    $ roslaunch webots_demo webots.launch
    
  4. 打开joy功能包中的joy_node节点用于获取手柄数据
    $ rosrun joy joy_node
    
  5. 运行编写好的代码
    $ rosrun webots_demo velocity_joy
    

6.效果
ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS联合webots实战案例(三)在webots中使用ROS控制小机器人2
喜欢 (0)

您必须 登录 才能发表评论!

加载中……