ros怎么控制arduinoros机器人控制器

今天从淘宝上订购的两个机械臂终于到货了,从这篇开始逐步讲解ROS机械臂的控制,这两个机械臂又花掉了800块,配的MG99R模拟舵机,如果配数字舵机每个机械臂要555元,价格还是有点小贵。机械臂安装好后如下图
本来有一块通过串口控制24路舵机控制的模块,但由于树莓派的串口已经被蓝牙所使用,现在蓝牙还要接蓝牙音箱,所以只好在找其他的舵机控制版,最后找到这款2路电机,和16路舵机控制模块,可以直接插在arduino上,通过ardunio的i2c接口控制舵机,同时通过arduino的D6、D7、D11、D12口控制电机,正好满足需求,而且其还留了两排arduino引脚插孔,可以自己焊接上两排插针,做扩展板用,这块板子淘宝价格是58元。
下图是装完机械臂后的Diego 1#的图片,看到是挺酷的
1.修改电机驱动代码
因为更换了电机驱动板,所以先要更改一下电机驱动的代码,其实很简单,只需要修改DualL298PMotorShield_h中接口中其中一个电机的控制对应arduino引脚,由原来的4和5改为11和12就可以了,代码如下:
#ifndef DualL298PMotorShield_h
#define DualL298PMotorShield_h
#include &Arduino.h&
class DualL298PMotorShield
DualL298PMotorShield();
DualL298PMotorShield(unsigned char M1DIR, unsigned char M1PWM,
unsigned char M2DIR, unsigned char M2PWM);
void init();
void setM1Speed(int speed);
void setM2Speed(int speed);
void setSpeeds(int m1Speed, int m2Speed);
static const unsigned char _M1DIR = 12;
static const unsigned char _M2DIR = 7;
static const unsigned char _M1PWM = 11;
static const unsigned char _M2PWM = 6;
2.修改码盘数据读取的代码
由于这款舵机控制模块是通过arduino 的I2C接口控制舵机,即arduino上的A4,A5。我们之前有一个电机码盘的数据是通过A4,A5读取的,所以修改到其他其他的模拟量接口,我在这里用了A2,A3。只需要修改encoder_driver.h对应接口引脚即可,同时要保证实际的连线也要做相应的调整,代码如下:
#ifdef ARDUINO_ENC_COUNTER
#define LEFT_ENC_PIN_A PD2
#define LEFT_ENC_PIN_B PD3
#define RIGHT_ENC_PIN_A PC2
#define RIGHT_ENC_PIN_B PC3
long readEncoder(int i);
void resetEncoder(int i);
void resetEncoders();
3.舵机控制
修改servos.h
#define N_SERVOS 12
short servoslastpos [N_SERVOS];
修改ROSArduinoBridge-diego.uno的void setup()的servo初始化代码。
void setup() {
Serial.begin(BAUDRATE);
#ifdef USE_BASE
#ifdef ARDUINO_ENC_COUNTER
DDRD &= ~(1 && LEFT_ENC_PIN_A);
DDRD &= ~(1 && LEFT_ENC_PIN_B);
DDRC &= ~(1 && RIGHT_ENC_PIN_A);
DDRC &= ~(1 && RIGHT_ENC_PIN_B);
PORTD |= (1 && LEFT_ENC_PIN_A);
PORTD |= (1 && LEFT_ENC_PIN_B);
PORTC |= (1 && RIGHT_ENC_PIN_A);
PORTC |= (1 && RIGHT_ENC_PIN_B);
PCMSK2 |= (1 && LEFT_ENC_PIN_A) | (1 && LEFT_ENC_PIN_B);
PCMSK1 |= (1 && RIGHT_ENC_PIN_A) | (1 && RIGHT_ENC_PIN_B);
PCICR |= (1 && PCIE1) | (1 && PCIE2);
initMotorController();
resetPID();
#ifdef USE_SERVOS
for (i = 0; i & N_SERVOS; i++) {
servosPos[i]=90;
servodriver.begin();
servodriver.setPWMFreq(50);
修改头部的宏定义,启用servo
#define USE_SERVOS
// Enable use of PWM servos as defined in servos.h
//#undef USE_SERVOS
// Disable use of PWM servos
修改头部的宏定义,增加servo的引用和ServoDriver的控制变量servodriver
#ifdef USE_SERVOS
#include "servos.h"
#include &Wire.h&
#include &ServoDriver.h&
#define SERVOMIN
102 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX
512 // this is the 'maximum' pulse length count (out of 4096)
ServoDriver servodriver = ServoDriver();
修改runCommand舵机控制部分代码如下
#ifdef USE_SERVOS
case SERVO_WRITE:
servodriver.setPWM(arg1,0,short(SERVOMIN+arg2*(SERVOMAX-SERVOMIN)/180));
servosPos[arg1]=short(arg2);
Serial.println("OK");
case SERVO_READ:
Serial.println(servosPos[arg1]);
本文已收录于以下专栏:
相关文章推荐
一个友好的语音交互系统不仅是体现机器人的AI的重要方面,也是人机交互的重要方面。机器人不同于其他智能硬件,语音交互系统已经成为机器人的基本设计需求,没有友好流畅的语音交互系统的机器人不是一款成功的机器...
使用树莓派在安装了ROS后,按照ROS的架构可以开发一个简单的四轮驱动Wifi小车:如图。
双向电机马达 X4树莓派B+ X1双路转向控制芯片
X4五号电池盒 充电宝 ...
上一篇博客介绍了HRMRP机器人平台的设计,基于该平台,可以完成丰富的机器人应用,以较为典型的机器人导航为例,如何使用HRMRP来完成相应的功能?本篇博客将详细介绍如何将HRMRP应用到实际的应用当中...
为了便于调试,特意写了一个通过键盘控制机械臂舵机的代码,来调试舵机,代码是基于teleop_twist_keyboard修改的。在arduino_node.py中已经声明了舵机读和写的ROS Serv...
转自:http://blog.csdn.net/heyijia0327/article/details/
    相信大家在用《ROS by example》学...
相信许多爱好者止步于昂贵的机器人价格。虽然有了Arduino,但一个载重能力很弱的机器人小车成本也得一两百块钱。搭建自己的机器人更是费时费力。
所以如果你只是普通机器人爱好者,或者还没想好要拿机器人做...
1. 修改配置文件
    在这里首先要说明的是,youbot的机械臂不需要底座也可以用电脑来控制。也就是说机械臂的驱动和控制都在那个机械臂内,另外一点,它的eth0和eth1的口是不能同时插在两个电...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)502 Bad Gateway
502 Bad Gateway
nginx/1.4.6 (Ubuntu)现在位置:
阅读 8,027 次
阅读 21,363 次
阅读 15,719 次分享给朋友:基于ROS_Arduino室内移动机器人SLAM实验测试下载至电脑本视频因版权问题,很抱歉无法提供下载扫码用手机看用或微信扫码在手机上继续观看二维码2小时内有效基于ROS_Arduino室内移动机器人SLAM实验测试扫码用手机继续看用或微信扫码在手机上继续观看二维码2小时内有效,扫码后可分享给好友没有优酷APP?立即下载请根据您的设备选择下载版本
药品服务许可证(京)-经营- 请使用者仔细阅读优酷、、、Copyright(C)2017 优酷
版权所有不良信息举报电话:Arduino IDE 安装
这个教程展示如何安装arduino IDE和使用rosserial
Arduino和Arduino IDE是进行硬件开发的非常好的辅助工具
包可让ROS和ArduinoIDE一起工作
rosserial提供的ROS通讯协议工作在Arduino的UART上,它让Arduino成为标准的ROS节点,可以发布和订阅ROS消息,发布TF转换,获取ROS系统时间。
Ubuntu下的Arduino IDE安装
安装Arduino
$ sudo apt-get install arduino
启动arduino并进行相关设置, 完成后增加sketchbook/libraries目录等
Ubuntu下rosserial arduino软件安装
二进制方式安装在ROS工作站(推荐)
sudo apt-get install ros-indigo-rosserial-arduino
sudo apt-get install ros-indigo-rosserial
rospack profile
源码方式安装在ROS工作站
cd &ws&/src
git clone /ros-drivers/rosserial.git
catkin_make
ws为ROS的工作空间,克隆代码并编译,生成rosserial_msgs用于通讯,生成的ros_lib库放在/Install目录下
安装ros_lib到Arduino IDE开发环境
上面的安装会得到ros_lib,它需要复制到Arduino的开发环境,以启用Arduino与ROS通讯。
linux系统下,生成ros_lib到Linux下的Arduino库目录sketchbook/libraries(一般在用户的根目录下)
cd &sketchbook&/libraries
rm -rf ros_lib #如之前有,可以先删除
rosrun rosserial_arduino make_libraries.py .
windows系统下,先生成ros_lib到linux下的空目录.
生成后在复制到windows系统的Arduino库目录sketchbook/libraries(一般在我的文档里)
mkdir -p &some_empty_directory&
cd &some_empty_directory&
rosrun rosserial_arduino make_libraries.py .
注意:rosrun 命令最后一个&.& 代表在当前目录下生成。
检查ros_lib是否安装成功
重启Arduino IDE,查看File-&Examples-&ros_lib
查看ros_lib里面的例子
纠错,疑问,交流:
获取最新文章:
扫一扫右上角的二维码加入“创客智造”公众号

我要回帖

更多关于 ros控制arduino小车 的文章

 

随机推荐