网站推广应该怎么做?,网站的构造,北京建设工程质量协会网站,龙游建设工程信息网站重要参考#xff1a;
课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ
讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.4.1 底盘实现_概述
1.ros_arduino_bridge 简介
该功能包包含Arduino库和用来控制Arduino的ROS驱动包…重要参考
课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ
讲义链接:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.4.1 底盘实现_概述
1.ros_arduino_bridge 简介
该功能包包含Arduino库和用来控制Arduino的ROS驱动包它旨在成为在ROS下运行Arduino控制的机器人的完整解决方案。
其中当前主要关注的是功能包集中一个兼容不同驱动的机器人的基本控制器base controller它可以接收ROS Twist类型的消息可以发布里程计数据。
特点: 可以直接支持ping声呐和Sharp红外线传感器 也可以从通用的模拟和数字信号的传感器读取数据 可以控制数字信号的输出 支持PWM伺服机 如果使用所要求的硬件的话可以配置基本功能 如果你的Arduino编程基础好的话并且具有python基础的话你就可以很自由的改动代码来满足你的硬件要求。
注意
官方提供的部分硬件不易采购需要修改下位机程序以适配当前硬件。
系统要求: 如果只是安装调试下位机那么不必须安装ROS系统只要有 arduino 开发环境即可 而上位机调试适用于 ROS Indigo 及更高版本但是暂不支持最新版本 noetic所以上位机需要使用其它版本的ROS(建议 melodic)
下载:
进入ROS工作空间的src目录输入命令
git clone https://github.com/hbrobotics/ros_arduino_bridge.git
2.ros_arduino_bridge 架构
文件结构说明
├── 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 #编码器驱动头文件
│ ├── 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 #定义相关参数端口ratePIDsensors等默认参数。由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 #类包默认空文件
上述目录结构虽然复杂但是关注的只有两大部分
ros_arduino_bridge/ros_arduino_firmware/src/libraries/ROSArduinoBridgeros_arduino_bridge/ros_arduino_python/config/arduino_params.yaml
前者是Arduino端的固件包实现需要修改并上传至Arduino电路板
后者是ROS端的一个配置文件相关驱动已经封装完毕我们只需要修改配置信息即可。
整体而言借助于 ros_arduino_bridge可以大大提高我们的开发效率。
3.案例实现
基于ros_arduino_bridge的底盘实现具体步骤如下 了解并修改Arduino端程序主入口ROSArduinoBridge.ino 文件 Arduino端添加编码器驱动 Arduino端添加电机驱动模块 Arduino端实现PID调试