Logitech F710无线手柄控制ROS机器人

本文介绍如何使用Logitech F710无线手柄通过ROS控制机器人。主要内容包括:与Ubuntu系统的连接设置、ROS节点的编写及发布/cmd_vel话题的方法,并详细解释了手柄各按键的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Logitech F710无线手柄控制ROS机器人

在这里插入图片描述

注:游戏手柄为罗技F710无线手柄,
系统版本:ubuntu18.04
ROS版本:Melodic
节点功能:手柄与ubuntu通讯并发布/cmd_vel话题

一、与ubuntu创建连接:

1.确保手柄接收器与电脑连接

2.检查ubuntu系统是否识别手柄

dmesg | grep Logitech

显示以下内容,说明接受器已识别
在这里插入图片描述

3.安装与手柄相关的ros依赖

sudo apt-get install ros-melodic-joystick-drivers ros-melodic-joystick-interrupt
sudo apt-get install ros-melodic-joy-listener ros-melodic-joy-mouse ros-melodic-joy-teleop 

为了检查控制信号

sudo apt-get install jstest-gtk

4.检查Ubuntu是否可以正常接收手柄控制信号

jstest-gtk

在这里插入图片描述
双击列表中的设备项
在这里插入图片描述
这个时候动一动手柄,可以看到各轴、按钮是否可以发送控制信号。到此完成硬件连接。

二、编写ROS节点,发布/cmd_vel

1.查看/joy话题内容

roscore
rosrun joy joy_node
rostopic echo /joy

即可查看/joy话题的内容(按手柄),该话题包含了手柄与ros节点通讯的信息,主要是axes和buttons这两个数组,每个成员对应了手柄上某一个键的信号,有模拟量也有数字量
(注:博主用的是手柄的默认映射,无更改,大家可根据自己的映射写节点)
(注:博主用的是F710的 D模式 (DirectlyInput Mode),手柄处于 飞行模式 下)
代码如下:

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

geometry_msgs::Twist twist;
float LinearMax,AngularMax;
float LinearMax_origin,AngularMax_origin;

const char* msg = R"(
Reading from the Logitech joy and Publishing to Twist!
---------------------------
Moving around:
   Left axis:   Front & Back
   Right axis:  Turn left & Turn right
---------------------------
Y/A : increase/decrease only linear speed by 20%
B/X : increase/decrease only angular speed by 20%
CTRL-C to quit
)";

void callback(const sensor_msgs::Joy::ConstPtr &data)
{
    // Flight mode, left -> linear, right -> angular
    twist.linear.x = data->axes[1]*LinearMax;
    twist.angular.z = data->axes[2]*AngularMax;
    // Set the LinearMax and AngularMax
    LinearMax += data->buttons[3]*0.2;
    LinearMax -= data->buttons[1]*0.2;
    AngularMax += data->buttons[2]*0.2;
    AngularMax -= data->buttons[0]*0.2;
    if(data->buttons[9]==1)
    {
        LinearMax = LinearMax_origin;
        AngularMax = AngularMax_origin;        
    }
    // printf("\rCurrent: MaxSpeed %f    MaxTurn %f \r",LinearMax,AngularMax);
}

int main(int argc,char** argv)
{
// Init rosnode
    ros::init(argc,argv,"joy2cmd");
    ros::NodeHandle nh;
    ros::Publisher cmd_pub = nh.advertise<geometry_msgs::Twist>("cmd_vel",10);
    ros::Subscriber joysub = nh.subscribe( "joy",10,callback);

// set param of maximum of linear and angular vel
    ros::param::param<float>("MaxLinear",LinearMax,1.5);
    ros::param::param<float>("MaxAngular",AngularMax,1.0);
// Save the two param to init
    LinearMax_origin = LinearMax;
    AngularMax_origin = AngularMax;
// print msg
    printf("%s", msg);
    ros::Rate r(20);
    while(ros::ok())
    {
        ros::spinOnce();
        cmd_pub.publish(twist);
        printf("Current: MaxSpeed %f    MaxTurn %f \r",LinearMax,AngularMax);
        r.sleep();
    }
    return 0;
}

launch文件如下:

<launch>
    <node pkg="joy" type="joy_node" name="joy_node" output="screen"/>
    <node pkg="gmapping_laser" type="joy2cmd" name="joy2cmd" output="screen">
        <param name="MaxLinear" value="1.0"/>
        <param name="MaxAngular" value="1.0"/>        
    </node>

</launch>

三、控制节点说明:

左摇杆:上推->前进,下推->后退,Y/A -> 增加/减少最大线速度
右摇杆:左推->左转,右推->右转,X/B -> 增加/减少最大角速度
start键:初始化最大速度

参考链接

ROS官网描述

### 如何在AMD显卡上配置和优化PyTorch #### 安装AMD显卡驱动程序和支持库 为了使PyTorch能够在Windows平台上利用AMD显卡进行加速,安装最新的AMD显卡驱动程序是必不可少的第一步。这一步骤确保了操作系统能够识别并充分利用GPU硬件资源[^1]。 #### 设置ROCm环境 接着,需要安装ROCm(Radeon Open Compute),这是专为AMD GPU设计的一套开源软件栈,它提供了必要的接口让深度学习框架如PyTorch可以直接调用GPU计算能力。需要注意的是,尽管ROCm最初主要针对Linux系统开发,但现在也有了适用于Windows系统的版本。 #### PyTorch及其依赖项的安装 完成上述准备工作之后,通过pip或其他包管理工具来安装特定于AMD ROCm版的PyTorch是非常重要的。这种定制化的构建包含了对AMD GPU的支持以及经过优化的数据处理函数,从而提高了模型训练的速度与效率。 #### 环境变量设置 正确设定环境变量对于激活AMD GPU支持至关重要。通常情况下,这些变量指向ROCm安装路径下的动态链接库文件夹位置,使得应用程序启动时能自动加载所需的GPU驱动和服务组件。 #### 编写测试代码验证配置成功与否 下面是一个简单的Python脚本例子用于检验整个过程是否顺利完成: ```python import torch if __name__ == "__main__": device = "cuda" if torch.cuda.is_available() else "cpu" print(f"Using {device} device") model = torch.nn.Linear(10, 2).to(device) input_tensor = torch.randn((1, 10), dtype=torch.float32).to(device) output = model(input_tensor) print(output.detach().cpu()) ``` 这段代码创建了一个线性变换层并将数据传输到可用设备上执行前向传播操作;如果一切正常,则应该看到输出结果来自CUDA而不是CPU。 #### 性能优化建议 考虑到AMD平台可能存在某些生态劣势,比如MKL带来的负面效果等问题,在实际应用中可以选择替换掉那些可能引起性能瓶颈的部分,例如采用OpenBLAS替代默认使用的MKL作为NumPy的基础运算库,以此获得更好的表现[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值