ROS小车3

ros_arduino_bridge功能包集

请尽量自行在源码上修改。

文件树及说明:这里引用创客智造

├── README.md
├── ros_arduino_bridge                      # metapackage (元包)
│   ├── CMakeLists.txt
│   └── package.xml
├── ros_arduino_firmware                    #固件包,更新到Arduino
│   ├── CMakeLists.txt
│   ├── package.xml
│   └── src
│       └── libraries                       #库目录
│           ├── MegaRobogaiaPololu          #针对Pololu电机控制器,MegaRobogaia编码器的头文件定义
│           │   ├── commands.h              #定义命令头文件
│           │   ├── diff_controller.h       #差分轮PID控制头文件
│           │   ├── MegaRobogaiaPololu.ino  #PID实现文件
│           │   ├── sensors.h               #传感器相关实现,超声波测距,Ping函数
│           │   └── servos.h                #伺服器头文件
│           └── ROSArduinoBridge            #Arduino相关库定义
│               ├── commands.h              #定义命令
│               ├── diff_controller.h       #差分轮PID控制头文件
│               ├── encoder_driver.h        #编码器驱动头文件,定义插脚(pins)
│               ├── encoder_driver.ino      #编码器驱动实现, 读取编码器数据,重置编码器等
│               ├── motor_driver.h          #电机驱动头文件
│               ├── motor_driver.ino        #电机驱动实现,初始化控制器,设置速度
│               ├── ROSArduinoBridge.ino    #核心功能实现,
│               ├── sensors.h               #传感器头文件及实现
│               ├── servos.h                #伺服器头文件,定义插脚,类
│               └── servos.ino              #伺服器实现
├── ros_arduino_msgs                        #消息定义包
│   ├── CMakeLists.txt
│   ├── msg                                 #定义消息
│   │   ├── AnalogFloat.msg                 #定义模拟IO浮点消息
│   │   ├── Analog.msg                      #定义模拟IO数字消息
│   │   ├── ArduinoConstants.msg            #定义常量消息
│   │   ├── Digital.msg                     #定义数字IO消息
│   │   └── SensorState.msg                 #定义传感器状态消息
│   ├── package.xml
│   └── srv                                 #定义服务
│       ├── AnalogRead.srv                  #模拟IO输入
│       ├── AnalogWrite.srv                 #模拟IO输出
│       ├── DigitalRead.srv                 #数字IO输入
│       ├── DigitalSetDirection.srv     #数字IO设置方向
│       ├── DigitalWrite.srv                #数字IO输入
│       ├── ServoRead.srv                   #伺服电机输入
│       └── ServoWrite.srv                  #伺服电机输出
└── ros_arduino_python                      #ROS相关的Python包,用于上位机,树莓派等开发板或电脑等。
    ├── CMakeLists.txt
    ├── config                              #配置目录
    │   └── arduino_params.yaml             #定义相关参数,端口,rate,PID,sensors等默认参数。由arduino.launch调用
    ├── launch
    │   └── arduino.launch                  #启动文件
    ├── nodes
    │   └── arduino_node.py                 #python文件,实际处理节点,由arduino.launch调用,即可单独调用。
    ├── package.xml
    ├── setup.py
    └── src                                 #Python类包目录
        └── ros_arduino_python
            ├── arduino_driver.py           #Arduino驱动类
            ├── arduino_sensors.py          #Arduino传感器类
            ├── base_controller.py          #基本控制类,订阅cmd_vel话题,发布odom话题
            └── __init__.py                 #类包默认空文件  
        
        

 

各部分源码:

arduino下位机部分:(如果不能运行,可能是注释的问题)

  • commands.h  命令:
/* Define single-letter commands that will be sent by the PC over the
   serial link.
*/

#ifndef COMMANDS_H
#define COMMANDS_H

#define ANALOG_READ    'a' // 模拟读取
#define GET_BAUDRATE   'b' // 获取波特率
#define PIN_MODE       'c' // 接口模式
#define DIGITAL_READ   'd' // 数字读取
#define READ_ENCODERS  'e' // 读取编码器数据 输出为:左数据,右数据
#define MOTOR_SPEEDS   'm' // 设置马达速度,脉冲计数 如: m 20 20 会以一个很的速度转动
#define PING           'p' // 无用
#define RESET_ENCODERS 'r' // 重设编码器读数
#define SERVO_WRITE    's' // 舵机相关,我这里没有用到
#define SERVO_READ     't' // 舵机相关,我这里没有用到
#define UPDATE_PID     'u' // 更新pid参数
#define DIGITAL_WRITE  'w' // 数字端口设置
#define ANALOG_WRITE   'x' // 模拟端口设置
#define READ_PIDOUT  'f'   // 读取pid计算出的速度(脉冲数计数)
#define READ_PIDIN  'i'    // 读取进入pid的速度

#define LEFT            0
#define RIGHT           1

#define FORWARDS true   //FORWARDS前进代表bool真值true
#define BACKWARDS false //BACKWARDS后退代表bool假值false

#endif
  • ROSArduinoBridge.ino源码:
//这是在官方包基础上修改来的


#define USE_BASE      // Enable the base controller code 是否使用base controller
//#undef USE_BASE     // Disable the base controller code

/* Define the motor controller and encoder library you are using */
//定义电机控制方式,使用ifdef 的方式,和正常的if 语句类似
#ifdef USE_BASE
/* The Pololu VNH5019 dual motor driver shield */
//#define POLOLU_VNH5019

/* The Pololu MC33926 dual motor driver shield */
//#define POLOLU_MC33926

/* The RoboGaia encoder shield */
//#define ROBOGAIA

/* Encoders directly attached to Arduino boa
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值