ros+arduino学习(四):ros发布消息控制舵机(arduino做下位机)

目录

前言

1.烧录Arduino程序

2.运行程序并发布消息

3.注意事项 


前言

基于ros如果可以直接控制舵机的话,如果后面想做项目就会比较容易一些。

目前来说用ros控制舵机一般有两种方式:

一、直接通过舵机驱动板控制舵机。

二、通过向下位机通讯的方式控制舵机。

第一种方式一般适用于有舵机驱动板的情况,比如一些串口舵机和专用的舵机驱动器。

这些一般有固定的协议,根据协议控制,适用于有专用协议或者舵机数量较多的情况。

第二种方式通过下位机通讯,让下位机去控制舵机,需要用下位机的io口直接控制舵机,比较适用于舵机数量不多的情况。

今天学习,主要是控制一个舵机了解以下具体的运作,通过第二种方式控制一个舵机。

电脑做上位机,arduino uno板子做下位机,上位机给下位机发布消息,下位机订阅消息(这里的消息主要就是舵机转角数据),根据

消息内容控制舵机旋转。

上位机的程序我们还是用serial包里面带的例程,不需要自己编程。

下位机arduino需要我们自己编程。

1.烧录Arduino程序

首先将以下程序下载到arduino uno板子上面:

#include <ros.h>
#include <std_msgs/UInt16.h>
#include <Servo.h>
 
ros::NodeHandle nh;
Servo myservo;  
int servoPin=3;
 
void messageCb(const std_msgs::UInt16& servo_msg){
 
    digitalWrite(13,HIGH);
    myservo.write(servo_msg.data);              // tell servo to go to position in variable 'pos'
    delay(15);
    digitalWrite(13,LOW);
}
 
ros::Subscriber<std_msgs::UInt16> sub("servo_led", &messageCb);
 
void setup()
{
  pinMode(13, OUTPUT);
  myservo.attach(servoPin);
  nh.initNode();
  nh.subscribe(sub);
}
 
void loop()
{
  nh.spinOnce();
  delay(1);
}

可以根据自己的实际情况修改servoPin变量更改舵机控制引脚。

我这里用了arduino扩展板子方便舵机接线(直接插拔就可以,不需要杜邦线。没有的话可以用杜邦线连接),所以选择了3号io口来进行控制。

2.运行程序并发布消息

第二行和第三行运行其中一行就可以,第二行不带波特率参数,使用默认57600波特率,第三行可以通过参数设置与arduino板子通讯的波特率。

roscore
rosrun rosserial_python serial_node.py /dev/ttyACM1    或
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM1 _baud:=115200(如果想要更改波特率的话,一定一定要在arduino程序里面也改成一致的波特率,比如我这里写115200,那么arduino程序里也一定改成115200)要不然连接不上话题。

(黑色加粗这里可以通过命令查看具体自己的串口或者在arduino IDE里查看,一定要填写正确)

发布舵机转角消息:

rostopic pub -1 /servo_led std_msgs/UInt16 30(这里黑色加粗的参数就是舵机转角数值)

每次发布一个新的角度回车,然后舵机就会旋转过去那个角度了。

格式:rostopic pub 话题名 消息类型名 消息内容 -r [频率]

例如:rostopic pub /servo_led std_msgs/UInt16 30 -r 1

含义:在servo_led 话题上发布一条std_msgs/UInt16格式的消息,消息内容为30,频率为1Hz。

3.注意事项 

(1)上下位机波特率要一致。

(2)通过rosrun rosserial_python serial_node.py _port:=/dev/ttyACM1 _baud:=115200命令行传参的方式更改了波特率之后,下次没有参数的话,会把上次传递的参数当默认值,比如默认波特率57600,当执行上述命令之后,再次执行命令时不带波特率参数,默认也是115200

(3)添加新硬件之后,需要重构ros_lib库。

参考链接:基于ROS系统使用Arduino控制舵机_JunJun-CSDN博客

  • 3
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Allen953

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

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

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

打赏作者

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

抵扣说明:

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

余额充值