基于ros_arduino_bridge的智能⼩车----上位机篇基于ros_arduino_bridge的智能⼩车----上位机篇
ros_arduino_bridge⽂件系统
├── README.md
├── ros_arduino_bridge # metapackage (元包)
│├──
│└── l
├── ros_arduino_firmware #固件包,更新到Arduino
│├──
│├── l
│└── 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 #消息定义包
│├──
│├── msg #定义消息
││├── AnalogFloat.msg #定义模拟IO浮点消息
││├── Analog.msg #定义模拟IO数字消息
││├── ArduinoConstants.msg #定义常量消息
││├── Digital.msg #定义数字IO消息
││└── SensorState.msg #定义传感器状态消息
│├── l
│└── 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包,⽤于上位机,树莓派等开发板或电脑等。
├──
├── config #配置⽬录
│└── arduino_params.yaml #定义相关参数,我们需要对此修改才能使⽤。由arduino.launch调⽤├── launch
│└── arduino.launch #启动⽂件
├── nodes
│└── arduino_node.py #python⽂件,实际处理节点,由arduino.launch调⽤,即可单独调⽤。├── l
├── setup.py
└── src #Python类包⽬录
└── ros_arduino_python
├── arduino_driver.py #Arduino驱动类
├── arduino_sensors.py #Arduino传感器类
├── base_controller.py #基本控制类,订阅cmd_vel话题,发布odom话题
└── __init__.py #类包默认空⽂件
1.下载ros_arduino_bridge
进⼊你的workspace⽬录下的src⽬录
cd ~/catkin_ws/src
git clone github/hbrobotics/ros_arduino_bridge.git
2.编译
cd ..
catkin_make
实际上,编译完成后并不能直接控制⼩车,还需要匹配串⼝,修改设置⽂件
在ubuntu终端输⼊
ls /dev/tty*
可以看到你的串⼝情况,⽐如我的上位机和下位机就是通过 /dev/ttyUSB0 连接的。
接下来修改配置⽂件arduino_params.yaml,⽐如说我的就位于~/catkin_ws3/src/ros_arduino_bridge/ros_arduino_python/config,打开:
# For a direct USB cable connection, the port name is typically
# /dev/ttyACM# where is # is a number such as0,1,2, etc
# For a wireless connection like XBee, the port is typically
# /dev/ttyUSB# where # is a number such as0,1,2, etc.
port:/dev/ttyUSB0 #你要修改的部分,改为arduino板和上位机连接的串⼝号
baud:57600
timeout:0.1
rate:50
sensorstate_rate:10
use_base_controller: True #你要修改的部分改为True
base_controller_rate:10
# For a robot that uses base_footprint, change base_frame to base_footprint
base_frame: base_link
# ===这部分是车⼦的参数,⽐如轮⼦直径,减速⽐,编码器信息等,根据你⾃⼰的车⼦来修改
wheel_diameter:0.146 #你要修改的部分
wheel_track:0.2969 #你要修改的部分
encoder_resolution:8384 #你要修改的部分
gear_reduction:1.0 #你要修改的部分
motors_reversed: True #你要修改的部分
# ===PID部分,控制轮速,修改到车⼦能够根据命令⾛直线且速度稳定
Kp:10 #你要修改的部分
Kd:12 #你要修改的部分
Ki:0 #你要修改的部分
Ko:50 #你要修改的部分
accel_limit:1.0 #你要修改的部分
# === Sensor definitions. Examples only - edit for your robot.
# Sensor type can be one of the follow(case sensitive!):
# * Ping
# *GP2D12
# * Analog
# * Digital
# * PololuMotorCurrent
# * PhidgetsVoltage
# *PhidgetsCurrent(20 Amp,DC)
sensors:{
#motor_current_left:{pin:0, type: PololuMotorCurrent, rate:5},
#motor_current_right:{pin:1, type: PololuMotorCurrent, rate:5},
#ir_front_center:{pin:2, type:GP2D12, rate:10},
#sonar_front_center:{pin:5, type: Ping, rate:10},
arduino_led:{pin:13, type: Digital, rate:5, direction: output}
}
给配置⽂件改个名,改成my_arduino_params.yaml
3.下位机
从github下载的代码中包含对应的arduino mega2560下位机程序,严格按照原作者推荐安装下位机的话就可以直接使⽤,否则就要做对应修改。如何安装修改另开⼀篇博客(基于ros_arduino_bridge的智能⼩车----下位机篇)
4.测试
新终端,启动roscore
新终端,增加路径到bash
source ~/catkin_ws/devel/setup.bash
python处理xml文件新终端,启动节点
roslaunch ros_arduino_python arduino.launch
新终端,发布Twist消息来控制机器⼈的运⾏,如:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论