基于arduino、ros手柄控制机械臂

该博客介绍了如何通过ROS消息订阅和Arduino代码实现对多个伺服电机的控制。代码中定义了一个回调函数来处理ROS话题`/cmd_vel`中的 Twist 消息,将线性和角速度映射到伺服电机的角度变化。伺服电机连接到Arduino的不同引脚,并在循环中更新它们的角度位置。
摘要由CSDN通过智能技术生成

arduino端代码

#if (ARDUINO >= 100)
 #include <Arduino.h>
#else
 #include <WProgram.h>
#endif

#include <Servo.h> 
#include <ros.h>
#include <std_msgs/UInt16.h>
#include <geometry_msgs/Twist.h>
ros::NodeHandle  nh;

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;

int servo_state1 = 0;
int servo_state2 = 0;
int servo_state3 = 0;
int servo_state4 = 0;
int servo_state5 = 0;
int x=0;
int y=0;
int z=0;
int f=0;
int h=0;
void servo_cb( const geometry_msgs::Twist& cmd_msg){
  servo_state1=cmd_msg.linear.x;
  servo_state2=cmd_msg.linear.y;
  servo_state3=cmd_msg.angular.x;
  servo_state4=cmd_msg.angular.y;
}


ros::Subscriber<geometry_msgs::Twist> sub("/cmd_vel", servo_cb);


void setup(){
  pinMode(13, OUTPUT);

  nh.initNode();
  nh.subscribe(sub);
  
  servo1.attach(7);
  servo2.attach(6);
  servo3.attach(5);
  servo4.attach(4);
  servo5.attach(3);
}

void loop(){

  //servo.write(servo_state);
  if (servo_state1 > 0){
    y+=1; 
  }
  else if(servo_state1 < 0){
    y-=1;
  }
  servo1.write(y);
  
  if (servo_state2 > 0){
    x+=1; 
  }
  else if(servo_state2 < 0){
    x-=1;
  }
  servo2.write(x);
  if (servo_state3 > 0){
    z+=1; 
  }
  else if(servo_state3 < 0){
    z-=1;
  }
  servo3.write(z);
  if (servo_state4 > 0){
    f+=1; 
  }
  else if(servo_state4 < 0){
    f-=1;
  }
  servo4.write(f);
  if (servo_state5 > 0){
    h+=1; 
  }
  else if(servo_state5 < 0){
    h-=1;
  }
  servo5.write(h);
  
  nh.spinOnce();
  delay(7);
}

烧录过后,
运行手柄文件、打开arduino板即可控制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灞気水笵er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值