本文主要是介绍ubuntu下使用XBOX手柄控制ROS中的多个小乌龟turtlesim,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 参考文档
- 操作步骤
- 利用microUSB线连接游戏手柄
- 下载安装游戏手柄驱动库
- 测试游戏手柄
- 连接游戏手柄
- 查看游戏手柄节点信息
- 编程控制一个小乌龟运动
- 创建ros包
- 创建joystick_example的ros包
- 创建cpp文件:
- 修改CMakeLists文件:
- 新建example.launch文件:
- 运行测试文件:
- 代码解释
- cpp代码解释
- launch代码解释
- 编程控制两个小乌龟同步运动
- 代码修改
- cpp修改
- launch文件修改
- 编译运行
- 编程控制两个小乌龟单独运动
- 代码编写
- cpp文件:
- 修改CMakeLists.txt文件:
- 编写launch文件:
- 编译运行
参考文档
电脑系统: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
这篇关于ubuntu下使用XBOX手柄控制ROS中的多个小乌龟turtlesim的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!