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

参考文档

电脑系统: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
  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Ubuntu上,您可以使用turtlesim包来实现小乌龟绘制心形。请按照以下步骤进行操作: 1. 打开终端(Terminal)。 2. 确保已安装turtlesim包。如果没有,请使用以下命令进行安装: ``` sudo apt-get install ros-noetic-turtlesim ``` 3. 在终端运行以下命令,启动turtlesim节点: ``` roscore ``` 4. 打开另一个终端,并运行以下命令,启动turtlesim仿真器: ``` rosrun turtlesim turtlesim_node ``` 5. 打开第三个终端,并运行以下命令,启动绘制心形的Python脚本: ``` rosrun turtlesim draw_heart.py ``` 6. 创建一个新的Python文件,比如命名为`draw_heart.py`,并将以下代码复制进去: ```python #!/usr/bin/env python import rospy from geometry_msgs.msg import Twist from turtlesim.msg import Pose def draw_heart(): rospy.init_node('draw_heart', anonymous=True) velocity_publisher = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) rate = rospy.Rate(10) # 发布速度消息,控制小乌龟绘制心形 move_cmd = Twist() move_cmd.linear.x = 1.0 move_cmd.angular.z = 0.0 for _ in range(2): for _ in range(200): velocity_publisher.publish(move_cmd) rate.sleep() move_cmd.linear.x = -1.0 move_cmd.angular.z = 2.0 for _ in range(200): velocity_publisher.publish(move_cmd) rate.sleep() move_cmd.linear.x = 0.0 move_cmd.angular.z = 0.0 velocity_publisher.publish(move_cmd) if __name__ == '__main__': try: draw_heart() except rospy.ROSInterruptException: pass ``` 7. 保存并关闭文件。 8. 在终端,进入到存放`draw_heart.py`文件的目录。 9. 输入以下命令,给予脚本执行权限: ``` chmod +x draw_heart.py ``` 10. 输入以下命令运行Python脚本: ``` ./draw_heart.py ``` 这样,您就可以在turtlesim仿真器看到小乌龟绘制出一个心形了。希望对您有所帮助!如果您有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值