ubuntu 解析控制 PS4手柄

ubuntu 解析控制 PS4手柄

参考源码: pypi官方 pyPS4Controller 1.2.5 库
在这里插入图片描述

测试链接PS4蓝牙手柄

首先,查看手柄的接入端口

ls /dev/input/

很有可能会出现很多端口,手柄的端口主要是js0或者js1,想要确定到底是哪个,把电脑的蓝牙关闭,看哪个端口没了就能确定了。
在这里插入图片描述
然后安装手柄测试工具并测试手柄按键,拨动按键或者拨杆,如下所示的终端会显示相应的键位变化。

sudo apt-get install jstest-gtk
sudo jstest /dev/input/js0

在这里插入图片描述

调用pyPS4Controller 源码驱动

下载 pyPS4Controller 库,在 pypi官方 pyPS4Controller 1.2.5 库已有非常详细的使用说明

下载 pyPS4Controller 库

pip install pyPS4Controller

主要函数说明

实例化controller 类, “/dev/input/js0” 为当前蓝牙手柄链接的设备号,官方不推荐使用ds4drv 。

controller = MyController(interface="/dev/input/js0", connecting_using_ds4drv=False)

执行上面代码时,推动遥控器,可以反馈相应的键位键值变化。
在这里插入图片描述
因为,Controller默认按键触发调用的函数是弱函数, 可通过在类中重写 on_x_press() 等函数触发时的功能。

class MyController(Controller):

    def __init__(self, **kwargs):
        Controller.__init__(self, **kwargs)


    def on_x_press(self):
        print("press on x");

    def on_x_release(self):
        print("release on x");

    ##  左侧拨杆
    ##上下(up 0 ~ -32767;  down 0 ~ 32767;  middle  on_L3_y_at_rest)
    ##左右 (left  -32767 ~ 0; right 0  ~ 32767; middle on_L3_x_at_rest)
    def on_L3_up(self, value):
        pass
    def on_L3_down(self, value):
        pass
    def on_L3_y_at_rest(self):
        pass
    def on_L3_left(self, value):
        pass
    def on_L3_right(self, value):
        pass
    def on_L3_x_at_rest(self):
        pass

完整示例代码

需要添加按键触发功能时,只需在类 MyController() 中重写入想要的功能即可

from pyPS4Controller.controller import Controller


def connect():
    # any code you want to run during initial connection with the controller
    print("ps4 controller is connecting!!!")


def disconnect():
    # any code you want to run during loss of connection with the controller or keyboard interrupt
    print("ps4 controller was disconnected!!!")

class MyController(Controller):

    def __init__(self, **kwargs):
        Controller.__init__(self, **kwargs)


    def on_x_press(self):
        print("press on x");

    def on_x_release(self):
        print("release on x");

    ##  左侧拨杆
    ##上下(up 0 ~ -32767;  down 0 ~ 32767;  middle  on_L3_y_at_rest)
    ##左右 (left  -32767 ~ 0; right 0  ~ 32767; middle on_L3_x_at_rest)
    def on_L3_up(self, value):
        pass
    def on_L3_down(self, value):
        pass
    def on_L3_y_at_rest(self):
        pass
    def on_L3_left(self, value):
        pass
    def on_L3_right(self, value):
        pass
    def on_L3_x_at_rest(self):
        pass

    ##  右侧拨杆
    ##上下(up 0 ~ -32767;  down 0 ~ 32767;  middle  on_R3_y_at_rest)
    ##左右 (left  -32767 ~ 0; right 0  ~ 32767; middle on_R3_x_at_rest)

if __name__ == '__main__':
    controller = MyController(interface="/dev/input/js0", connecting_using_ds4drv=False)
    controller.listen(timeout= 60, on_connect=connect, on_disconnect=disconnect)

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要用PS4手柄控制ROS Arduino Bridge小车,您需要在ROS环境中运行一个节点来读取手柄的输入并将其转换为适当的ROS消息,然后将这些消息发送到Arduino板上运行的ROS节点。以下是大致的步骤: 1. 首先,确保您的PS4手柄可以与您的计算机配对,并且可以在Ubuntu中被识别为输入设备。您可以使用“jstest-gtk”命令来测试手柄是否被正确识别。 2. 安装“ros-kinetic-joy”软件包,以使ROS能够读取手柄的输入。您可以使用以下命令进行安装: ``` sudo apt-get install ros-kinetic-joy ``` 3. 启动ROS节点,以接收手柄输入并将其转换为ROS消息。您可以使用以下命令启动“joy_node”节点: ``` rosrun joy joy_node ``` 4. 创建一个ROS节点,该节点将订阅“joy_node”节点发布的手柄消息,并将其转换为适当的ROS消息。这个节点应该包含一些逻辑,以将手柄控制转换为适合控制小车的消息。例如,您可以将手柄的左摇杆控制转换为小车的方向控制,将手柄的右摇杆控制转换为小车的速度控制等。 5. 将这些消息通过ROS Arduino Bridge发送到Arduino板上运行的ROS节点。您可以使用“rosserial”软件包来实现此功能。安装“rosserial”软件包并将其添加到ROS环境中。 6. 在Arduino IDE中编写ROS节点,以接收由ROS节点发送的消息,并将其转换为控制小车的命令。例如,您可以使用ROS节点发送的消息来控制小车的电机或舵机。 7. 将Arduino板连接到您的小车,并确保所有电路都正确连接。然后将Arduino板上的ROS节点上传到板子中。 8. 最后,启动ROS节点和Arduino节点,以确保它们可以相互通信并正确控制小车。您可以使用“rostopic”命令和“rosrun”命令来测试节点是否正常运行,并且您可以使用手柄控制小车进行测试。 以上是大致的步骤,其中每个步骤都需要更多的细节和配置才能正常工作。您可以查阅ROS和Arduino的文档以获得更详细的信息和指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值