ros melodic使用罗技f710手柄控制dashgo d1

本文介绍了一种使用ROS框架实现的差速轮机器人遥控操作方案,通过解析Joy控制器输入,转换为Twist消息控制机器人移动。文章详细展示了代码实现过程,包括参数配置、消息类型使用及launch文件设置。

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

参考这个博主:https://blog.csdn.net/weixin_40367093/article/details/89848618

下载的包改为melodic

其他大多相同。

由于是差速轮结构,只用到linear.x和anglear.z

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

using namespace std;
 
class LogTeleop
{
public:
    LogTeleop();
 
private:
    /* data */
    void LogCallback(const sensor_msgs::Joy::ConstPtr& Joy);
    ros::NodeHandle n;
    ros::Subscriber sub ;
    ros::Publisher pub ;
    double vlinear,vangular;
    int axis_ang_z,axis_lin_x,ton;
};
 
LogTeleop::LogTeleop()
{
    n.param<int>("axis_linear_x",axis_lin_x,1);
    n.param<int>("axis_angular_z",axis_ang_z,2);
    n.param<double>("vel_linear",vlinear,0.1);
    n.param<double>("vel_angular",vangular,0.4);
    n.param<int>("button",ton,6);
    pub= n.advertise<geometry_msgs::Twist>("cmd_vel", 1, true);;
//    pub = n.advertise<geometry_msgs::Twist>("/cmd_vel_mux",1);
    sub = n.subscribe<sensor_msgs::Joy>("joy",10,&LogTeleop::LogCallback,this);
}
 
void LogTeleop::LogCallback(const sensor_msgs::Joy::ConstPtr& Joy)
{
	geometry_msgs::Twist twist;

	vlinear = vlinear * (1 + (Joy->axes[5] * 0.1));
	if(vlinear>=0.2)
	   vlinear = 0.2;
	else if (vlinear<=0)
	   vlinear = 0;
	else
	   vlinear = vlinear;
	
	vangular = vangular * (1 +  (Joy->axes[4] * 0.1));
	if(vangular>=0.6)
		vangular = 0.6;
	else if(vangular<=0)
		vangular = 0;
	else
		vangular = vangular;

	if(Joy->buttons[ton])
	{
	    twist.linear.x =(Joy->axes[axis_lin_x])*vlinear;
	    twist.linear.y = 0;
	    twist.linear.z = 0;
	    
	    twist.angular.x = 0;
	    twist.angular.y = 0;
	    twist.angular.z =(Joy->axes[axis_ang_z])*vangular;
		    
		//ROS_INFO("linear_x:%.3lf angular_z:%.3lf",twist.linear.x,twist.angular.z);
		pub.publish(twist);
	}
}

int main(int argc,char** argv)
{
    ros::init(argc, argv, "f710_controller");
    LogTeleop  logteleop;
    ros::spin();
    return 0;
}

launch文件

<launch>
  <arg name="joy_dev" default="/dev/input/js0" />
 
  <node pkg="joy" type="joy_node" name="joy_node">
    <param name="dev" value="$(arg joy_dev)" />
    <param name="deadzone" value="0.05" />
    <param name="autorepeat_rate" value="10" />  <!--检测到键值时键值发送频率单位Hz,100.1m发送一次-->
  </node>
 
  <node pkg="f710_controller" type="f710_controller" name="f710_controller" output="screen">
    <!--input axis -->
      <param name="axis_linear_x" value="1" type="int"/>
      <param name="axis_angular_z" value="2" type="int"/>
    <!--input vel -->
      <param name="vel_linear" value="0.2" type="double"/>
      <param name="vel_angular" value="0.4" type="double"/>
      <param name="button" value="6" type="int"/>
  </node>
</launch>

catkin_make
roslaunch xxx xxx.launch
然后就可以控制了。主要用到了Twist和Joy,发现用ros真的好舒服,不过要学到东西还是要了解怎么写的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值