1 小车硬件结构
1 中控设备
上方的单片机用于控制电机运动,搭载wifi模块和电量显示屏。下方为树莓派,安装了ROS系统和Ubuntu系统,用于整个小车控制。显示屏和树莓派相连
2 传感器系统
激光雷达及转换器。激光雷达和转换器相连,再由转换器连接树莓派以控制激光雷达
摄像头系统,搭载深度摄像头和彩色摄像头
4 遥控系统
使用PS2遥控器,车身搭载PS2接收端
5
12V电池盒。小车只有在电压大于10V时才能工作
2 键盘控制移动
键盘控制节点:
roslaunch wheeltec_robot_rc keyboard_teleop.launch
控制说明:
U I O
J L
M .
控制各方向
k键和空格键为急停,立刻停止电机,按其他键为缓慢减速停止
Q/Z 增加/减少10%线速度和角速度
W/X 增加/减少10%线速度
E/C 增加/减少10%角速度
B 开关全向模式
键盘控制节点(turtlebot_teleop_key)
1
Omni = 0 #全向移动模式
#键值对应移动/转向方向
moveBindings = {
'i':( 1, 0),
'o':( 1,-1),
'j':( 0, 1),
'l':( 0,-1),
'u':( 1, 1),
',':(-1, 0),
'.':(-1, 1),
'm':(-1,-1),
}
#键值对应速度增量
speedBindings={
'q':(1.1,1.1),
'z':(0.9,0.9),
'w':(1.1,1),
'x':(0.9,1),
'e':(1, 1.1),
'c':(1, 0.9),
}
speed = 0.2 #默认移动速度 m/s
turn = 0.5 #默认转向速度 rad/s
移动键和速度控制键对应的值。最终速度为 (speed X 方向)和(turn X 方向)。在修改速度时为(speed X 修改幅度)和(turn X 修改幅度)
2
settings = termios.tcgetattr(sys.stdin) #获取键值初始化,读取终端相关属性
rospy.init_node('turtlebot_teleop') #创建ROS节点
pub = rospy.Publisher('~cmd_vel', Twist, queue_size=5) #创建速度话题发布者,'~cmd_vel'='节点名/cmd_vel'
x = 0 #前进后退方向
th = 0 #转向/横向移动方向
count = 0 #键值不再范围计数
target_speed = 0 #前进后退目标速度
target_turn = 0 #转向目标速度
target_HorizonMove = 0 #横向移动目标速度
control_speed = 0 #前进后退实际控制速度
control_turn = 0 #转向实际控制速度
control_HorizonMove = 0 #横向移动实际控制速度
创建ros节点和Twist消息发布者pub。pub的消息被wheeltec_robot类订阅。wheeltec类会通过串口通信将速度控制指令发给下位机。
这里速度变化由于都是平滑变化。方向控制指令只会直接影响目标速度target_turn和target_speed。真实速度会渐进到目标速度(见下方代码)
3 读取控制键信息
while(1):
key = getKey() #获取键值
#切换是否为全向移动模式,全向轮/麦轮小车可以加入全向移动模式
if key=='b':
Omni=~Omni
if Omni: