尝试使用游戏手柄控制turtlebot2移动平台,ROS 是kinetic版本,首先按照教程安装turtlebot的ROS包(https://www.ncnynl.com/archives/201811/2787.html)
1、手柄
1)手柄是USB免驱动安装的,通过ls /dev/input 可以查看是否存在js0这一项。
2)安装手柄测试软件,主要是记下手柄的键的代号,选择自己方便操作的那个用来控制小车
sudo apt-get install jstest-gtk
jstest-gtk
2、编写相关节点文件
利用joy功能包来传入手柄的消息,如果没有的话那就自行安装下。主要流程是joy读到手柄的操作信息后,将joy读到的信息,发布到/turtle1/cmd_vel这个topic上,turtlebot订阅了这个话题的消息,从而达成对小车的控制(/turtle1/cmd_vel这个topic来自于通过键盘控制turtlebot示例,就是用来自joy的消息代替键盘的消息)。
1)创建工作空间并创建功能包
mkdir vinyson //文件夹名,随意取
cd vinyson
mkdir src
cd src
catkin_init_workspace
cd ..
catkin_make
cd src
catkin_create_pkg joy_turtlebot roscpp rospy //功能包名自行定义,保持前后一致即可
在src文件下添加.cpp文件如下:
#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
#include <sensor_msgs/Joy.h>
#include<iostream>
using namespace std;
geometry_msgs::Twist v;
ros::Publisher pub; //全局变量,主要是为了小车能对手柄一直有响应,而不是只有按下那一次
class Teleop
{
public:
Teleop();
private:
/* data */
void callback(const sensor_msgs::Joy::ConstPtr& Joy);
ros::NodeHandle n;
ros::Subscriber sub ;
// ros::Publisher pub ;
double vlinear,vangular;
int axis_ang,axis_lin,ton