美文网首页ROS我爱编程
3<. ROS_arduino_bridge(1-总介)

3<. ROS_arduino_bridge(1-总介)

作者: Savior2016 | 来源:发表于2017-10-28 21:43 被阅读48次

    虽然并不打算下位部分使用arduino,但是由于买的小车是用的这个,我也并不打算改里面的程序,所以准备先研究一下这个功能包,希望下一步,设计自己的控制器的bridge的时候,能够以这个为基础来设计,相信可以少走很多弯路。

    1 简介

    ROS_arduino_bridge 包括一个ROS驱动和一个基本控制,其实这个包是分成两部分的,一部分下载到arduino上。完成数字或模拟传感器采集,PWM侍候电机控制,读取编码器等。可以说这个包是实现底盘在ROS下控制的一个完全解决方案了。
    需要注意的是:
    这个包中的firmware,是针对于Pololu motor controller shieldRobogaia encoder shield来做的。我们可以根据自己的需要移植,用来控制别的电机驱动和编码器。我们也可以扩展用于读其他传感器。
    源码地址:https://github.com/hbrobotics/ros_arduino_bridge.git

    2 整体结构

    现在的版本比起来下面这个结构略有变化,大概差不多

    ├── 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                 #类包默认空文件  
            
    

    3 安装

    3.1 安装串口功能包

    sudo apt-get install python-serial
    

    3.2 查看设备所在串口

    输入指令:

    ls /dev/ttyUSB*
    

    可以看到:

    /dev/ttyUSB0
    

    或:

    ls /dev/ttyACM*
    

    3.3 设定串口访问权限

    qking@qking:~$ ls -l /dev/ttyUSB0
    crw-rw---- 1 root dialout 188, 0 10月 28 21:38 /dev/ttyUSB0
    

    我们可以看到,root和dialout可以操作串口,将当前用户加入该用户组:

    sudo usermod -a -G dialout <your_user_name>
    

    <your_user_name>替换为你的用户名。
    然后执行:

     groups
    

    或者直接执行:

    sudo chmod 600 /dev/ttyUSB0     //一次性的增加权限,也可以把600改为777,最高权限
    

    3.4 安装功能包

    $ cd ~/catkin_workspace/src
    $ git clone https://github.com/hbrobotics/ros_arduino_bridge.git
    $ cd ~/catkin_workspace
    $ catkin_make
    

    后面再介绍对节点的参数配置和几个重要程序的内容,arduino端程序暂时不研究。

    相关文章

      网友评论

        本文标题:3<. ROS_arduino_bridge(1-总介)

        本文链接:https://www.haomeiwen.com/subject/drrspxtx.html