根据手柄操控仿真机器人

环境 与 准备

  1. Ubuntu 16.04(博主的是VM虚拟机)
  2. kinetic版本的ROS平台
  3. 手柄(博主的是索尼的PS4手柄)
  4. 能把这篇博客上的东西实现 仿真机器人的准备

一、连接手柄
如果你使用的是VM虚拟机,连接手柄后,可能会有提示,硬件以连接上。如果没有提示你需要在VM右下角找到你的手柄,如果是亮的则手柄已经连接,如果不亮,点击手柄图标,点击连接就可以了。
这里写图片描述

这里写图片描述

如果提示连接不上,首先检查VM是否为最新版本
这里写图片描述
更新完成后,再更新Tools
这里写图片描述
点击更新 VMware Tools 后会弹出一个窗口,把里面那个压缩包解压到home里面,然后在里面运行终端
sudo ./vmware-install.pl
这里写图片描述
然后一直回车就行了,最后重启下VM,在右下角找到手柄,连接虚拟机,看看是否成功。

二、编写手柄操控的Python程序
连接好手柄后在/dev/input 中应该会出现js0 这个文件,这个就是手柄设备,Python的evdev模块就可以读取事件。但在这里我们用一个已经封装完备的ROS节点,Joy包里的joy_node节点。

rosrun joy joy_node #启动joy_node
rostopic echo joy   #然后我们监听这个节点,看看有没有输出手柄事件

这里写图片描述
这些就是joy_node传输的数据格式

header  #Header 类型
axes    #摇杆数据
buttons     #按钮数据

这些数据就是sensor_msgs/msg/Joy.msg 这个msg文件格式。
现在我们有了手柄数据,那么只需要将手柄数据发送给仿真小车节点,就能使小车移动了。
这次我们依然使用rbx_vol_1作为模拟小车,不清楚的朋友可以看下最上面准备工作中的第四条
想要使rbx_vol_1中的仿真小车移动,我们需要知道小车移动所接收的Msg类型,我们启动仿真机器人

roscore
roslaunch rbx1_bringup fake_pi_robot.launch
rosrun rqt_graph rqt_graph 

你会看到这样一个图示
这里写图片描述

很明显我们的小车节点arbotic订阅了cmd_vel话题(topic),我们只需要看看cmd_vel 传输的msg是什么类型的就行了。
rostopic type cmd_vel #查看cmd_vel 类型
输出geometry_msgs/Twist,然后在查看具体的类型
rosmsg info geometry_msgs/Twist
这里写图片描述

接下来的工作就是编写Python节点。

#!/usr/bin/env python3#我用的是python3,如果你用的是2,删掉3就行了
#coding=utf-8 

import rospy
from sensor_msgs.msg import Joy
from geometry_msgs.msg import Twist
class JoyRob():
    """docstring for JoyRob"""
    listener_joy = None#监听joy话题
    talker_rob = None#向机器人话题发布数据
    joy_msg = None
    def __init__(self):
        self.theNode = rospy.init_node('wtmsb')
        self.listener_joy = rospy.Subscriber('joy',Joy,self.callback)
        self.talker_rob = rospy.Publisher('cmd_vel',Twist,queue_size=10)
        self.rate = rospy.Rate(50) # 定义hz
        while not rospy.is_shutdown():
            self.publish()
            self.rate.sleep()
    def publish(self):
        if self.joy_msg:
            self.talker_rob.publish(self.joy_msg)
    def callback(self,date):
        cmd = Twist()
        cmd.linear.x = date.axes[3]#axes是摇杆数据
        cmd.linear.y = date.axes[4]#右摇杆控制移动
        cmd.angular.z = date.axes[0]#左摇杆用来控制方向
        cmd.angular.y = date.axes[1]
        self.joy_msg = cmd  


if __name__ == '__main__':
    JoyRob()

因为我们在Python脚本中使用了

from sensor_msgs.msg import Joy
from geometry_msgs.msg import Twist

所以我们要在CMakeLists.txt文件中修改一些东西
这里写图片描述
加上这两个依赖,然后重新catkin_make就行了。
三、运行

roscore
rosrun joy joy_node
roslaunch rbx1_bringup fake_pi_robot.launch
rosrun 你的工作空间 刚写的节点名称.py#运行刚写好的Python节点
rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz

不出意外你应该可以看到rviz中的仿真机器人

这里写图片描述

推动左右摇杆就可以使机器人动起来了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值