友情提示:380元/半年,儿童学编程,就上码丁实验室。
搭建ROS小车底盘-第四篇上位机程序
说明
- 介绍上位机树莓派及相关软件包的安装及运行
ros_arduino_bridge安装
- 假设上位机已安装ROS indigo版本,并创建了用户的ROS项目空间~/catkin_ws。
- 源码安装方法:
cd ~/catkin_ws/src
git clone https://github.com/hbrobotics/ros_arduino_bridge.git
cd ros_arduino_bridge
git checkout indigo-devel
cd ~/catkin_ws
catkin_make --pkg ros_arduino_bridge
source ~/.bashrc
-
创建一个配置文件: ~/catkin_ws/src/ros_arduino_bridge/ros_arduino_python/config/my_arduino_params.yaml
-
my_arduino_params.yaml源码:
port: /dev/ttyACM0
baud: 115200
timeout: 0.1
rate: 50
sensorstate_rate: 10
use_base_controller: True
base_controller_rate: 10
# For a robot that uses base_footprint, change base_frame to base_footprint
base_frame: base_link
# === Robot drivetrain parameters
wheel_diameter: 0.15
wheel_track: 0.287
encoder_resolution: 1768 # from Pololu for 13*34*4 motors
gear_reduction: 1.0
motors_reversed: False
# === PID parameters
Kp: 10
Kd: 12
Ki: 0
Ko: 50
accel_limit: 1.0
- 重要参数含义:
- wheel_diameter : 小车轮子的直径
- wheel_track:两个轮子的轮间距
- encoder_resolution:编码器一圈的脉冲计数,如果是AB相
13*2*2
(13单圈脉冲数*上下沿*AB相
)。 - gear_reduction:减速比,比如1:30,这是设为1或30
- 也有介绍encoder_resolution也有设置为
13*2*2*30=1560
和gear_reduction设为1,但转动时候左右轮差异不大. - 本人测试设置encoder_resolution: 52 和 gear_reduction:30,则是效果很好
teleop-twist-keyboard安装
- 通过键盘控制软件包
- 在树莓派终端或工作机安装命令:
sudo apt-get install ros-indigo-teleop-twist-keyboard
运行程序
- 树莓派新终端执行:
roslaunch ros_arduino_python arduino.launch
- 树莓派或工作机执行:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
- 如果是树莓派执行需要连接键盘
- 利用键盘,根据提示的键值,就可以控制小车前后左右移动了
- 键盘说明:
Moving around:
u i o
j k l
m , .
q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
-
u 前左转,i 前进,o前右转,j 逆时针转,l顺时针转,’,’后退,’.’ 后左转,m后右转
-
q/z:增速/减速
-
键值定义:
moveBindings = {
‘i’:(1,0,0,0),
‘o’:(1,0,0,-1),
‘j’:(0,0,0,1),
‘l’:(0,0,0,-1),
‘u’:(1,0,0,1),
‘,’:(-1,0,0,0),
‘.’:(-1,0,0,1),
‘m’:(-1,0,0,-1),
‘O’:(1,-1,0,0),
‘I’:(1,0,0,0),
‘J’:(0,1,0,0),
‘L’:(0,-1,0,0),
‘U’:(1,1,0,0),
‘<’:(-1,0,0,0),
‘>’:(-1,-1,0,0),
‘M’:(-1,1,0,0),
‘t’:(0,0,1,0),
‘b’:(0,0,-1,0),
}speedBindings={
‘q’:(1.1,1.1),
‘z’:(.9,.9),
‘w’:(1.1,1),
‘x’:(.9,1),
‘e’:(1,1.1),
‘c’:(1,.9),
} -
‘i’:(x,y,z,th) x轴线速,y轴为0,z轴为0,th角速
-
moveBindings大写字母部分代表全向轮使用