使用游戏手柄控制ROS机器人速度

使用游戏手柄控制ROS机器人速度

在这里插入图片描述
买了一个带usb接收的游戏手柄,想要用来遥控机器人,写一个节点来实现:
该节点可以把手柄摇杆的信号转换成cmd_vel消息发布到系统中。
首先用turtle_sim中的“小王八”来测试,然后在机器人上使用。
需要注意的是:cmd_vel需要持续发布

#include "geometry_msgs/Twist.h"
#include "sensor_msgs/Joy.h"
#include "ros/ros.h"
#include "iostream"

ros::Subscriber sub;
ros::Publisher  pub;

int num_axe_lin, num_axe_ang;//选择手柄的数据
double factor_axe_lin, factor_axe_ang;//控制系数
int Button_Select;//对应手柄select键
std::string pub_name;//发布的消息名称
geometry_msgs::Twist speed;

void joy_callBack(const sensor_msgs::Joy::ConstPtr &joy)
{
    double linear_speed = joy->axes[num_axe_lin]*factor_axe_lin;
    double angular_speed = joy->axes[num_axe_ang]*factor_axe_ang;
    Button_Select = joy->buttons[10];

    speed.linear.x = linear_speed;
    speed.angular.z = angular_speed;

    ROS_INFO("joystick linear:%f, angular:%f\n",speed.linear.x, speed.angular.z);
    if(Button_Select == 1)
        ROS_INFO("Button_Select\n");
    
}

int main(int argc, char **argv){

    ros::init(argc,argv,"Joystick");

    ros::NodeHandle nh;

    //配置默认参数,可从launch文件中配置自定义参数
    std::string default_pub_name = "/turtle1/cmd_vel";
    nh.param("num_axe_lin",num_axe_lin,1);
    nh.param("num_axe_ang",num_axe_ang,2);
    nh.param("factor_axe_lin",factor_axe_lin,1.0);
    nh.param("factor_axe_ang",factor_axe_ang,1.0);
    nh.param("pub_name",pub_name,default_pub_name);

    sub = nh.subscribe<sensor_msgs::Joy>("/joy",10,&joy_callBack);
    pub = nh.advertise<geometry_msgs::Twist >(pub_name,10);

    ros::Rate r(10);//发布频率

    while(nh.ok()){
        ros::spinOnce();
        pub.publish(speed);
        r.sleep();
    }

    return 0;

}

小王八测试用的launch文件:

<launch>
    <node name="turtlesim" pkg="turtlesim" type="turtlesim_node" />
    <node name="Joystick" pkg="joystick" type="joystick_node" output="screen"/>

        <param name="num_axe_lin" value="1" type="int"/>
        <param name="num_axe_ang" value="2" type="int"/>
        <param name="factor_axe_lin" value="1.0" type="double"/>
        <param name="factor_axe_ang" value="1.0" type="double"/>
        <param name="pub_name" value="turtle1/cmd_vel" type="string"/>
    
</launch>

测试结果:通过

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值