ubuntu下使用XBOX手柄控制ROS中的多个小乌龟turtlesim

本文档介绍了如何在Ubuntu 16.04和ROS kinetic环境下,使用XBOX手柄通过joy驱动库控制ROS中的turtlesim模拟器。详细步骤包括游戏手柄的连接、驱动安装、手柄测试,以及编写控制单个小乌龟和两个小乌龟同步、单独运动的代码。
摘要由CSDN通过智能技术生成

参考文档

电脑系统:ubuntu16.04
ROS版本:kinetic
参考书籍:Learning ROS for Robotics Programming Second Edition第四章
其内容为:
在这里插入图片描述
书籍的github库:https://github.com/AaronMR/Learning_ROS_for_Robotics_Programming_2nd_edition

操作步骤

利用microUSB线连接游戏手柄

连接以后手柄会震动。震感贼棒。哈哈哈!

下载安装游戏手柄驱动库

sudo apt-get install ros-kinetic-joystick-drivers

参考文档:http://wiki.ros.org/joy
里面的介绍:支持所有的游戏手柄
在这里插入图片描述
github库:https://github.com/ros-drivers/joystick_drivers
将github库中的源文件放到catkin工作空间的src文件夹下编译。此时会遇到很多问题:
解决方法参考链接:https://blog.csdn.net/p942005405/article/details/86559966


我的方法:

sudo apt-get install libbluetooth-dev

安装完蓝牙驱动后还是报错,然后把joystick_drivers下的wiimote文件夹删除或者移除到其他位置。
然后在工作空间下重新编译

catkin_make

因为wiimote文件介绍:http://wiki.ros.org/wiimote
这个包好像是关于蓝牙协议和通信的,具体可以参考上面ROS中的介绍。


测试游戏手柄

连接游戏手柄

查看游戏手柄是否识别:

ls /dev/input/

在这里插入图片描述
检查每个按钮的对应:

sudo jstest /dev/input/js0

在这里插入图片描述
提供的有:轴0-7 共8个 ; 按钮0-10 共11个
在这里插入图片描述

查看游戏手柄节点信息

启动ros,运行roscore。
然后,运行joy包中的节点:

rosrun joy joy_node

运行成功的标志:(力反馈后续在整)
在这里插入图片描述

rostopic list
rostopic echo /joy

操作按钮可以到上面轴或者按钮数值的变化。

rostopic type /joy
rosmsg show sensor_msgs/Joy

显示手柄发送的数据类型:
在这里插入图片描述
查看小乌龟消息类型

rosrun turtlesim turtlesim_node
rostopic list
rostopic type /turtle1/cmd_vel
rosmsg show geometry_msgs/Twist

在这里插入图片描述

编程控制一个小乌龟运动

创建ros包

创建joystick_example的ros包

在catkin_ws/src/joystick_drivers下运行命令:

catkin_create_pkg joystick_example roscpp std_msgs sensor_msgs joy geometry_msgs

因为依赖的比较多,我的package.xml文件为:
在这里插入图片描述

创建cpp文件:

在catkin_ws/src/joystick_drivers/joystick_example/src下新建一个example.cpp:

#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
#include<sensor_msgs/Joy.h>
#include<iostream>

using namespace std;

class TeleopJoy{
   
	public:
		TeleopJoy();
	private:
		void callBack(const sensor_msgs::Joy::ConstPtr& joy);
		ros::NodeHandle n;
		ros::Publisher pub;
		ros::Subscriber sub;
		int i_velLinear, i_velAngular;
};

TeleopJoy::TeleopJoy()
{
   	
	n.param("axis_linear",i_velLinear,i_velLinear);
	n.param("axis_angular",i_velAngular,i_velAngular);
	
	//pub = n.advertise<turtlesim::Velocity>("turtle1/command_velocity",1);
	//sub = n.subscribe<sensor_msgs::Joy>("joy", 10, &TeleopJoy::callBack, this);
        pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1);
	sub = n.subscribe<sensor_msgs::Joy>("joy", 10, &TeleopJoy::callBack, this);
}

void TeleopJoy::callBack(const sensor_msgs::Joy::
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值