一.准备工作
1.锁定树莓派串口名称,GPS(/dev/ttyUSBGPS)和数传(/dev/ttyUSBxb)都锁了,
还需要增加一个joy901(/dev/ttyUSBjoy)(1号车应该锁过了)
(1)插上新设备,执行命令($ 代表命令行,不用输入)
$ ls /dev/ttyUSB*//有时是ACM*
(2)继续执行命令
$ lsusb
(3)拔掉设备再次执行命令
$ lsusb
(4)对比发现少了一行,需要里面的两串数字(ID)
前面是:ATTRS{idVendor} 1a86
后面是:ATTRS{idProduct} 7523
(5)写入usb规则,运行命令(没有的话会新创建,有的话继续添加)
$ sudo gedit /etc/udev/rules.d/usb.rules
写入下面内容:(SYMLINK 相当于起的别名)
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523",MODE:="0666", SYMLINK+="ttyUSBjoy"
保存,退出
(6)拔掉设备,运行两行代码
$ sudo service udev reload
$ sudo service udev restart
(7)插上设备,运行命令
$ ls /dev/ttyUSB*
(8)出现"ttyUSBjoy",成功
总流程
2.替换小车的程序
领导车、跟随车(需要修改follower/include里面的paramSetting.h中的Self_ID和Neighbor_ID,与小车对应即可)
删掉工作空间里面的,build和devel文件夹,运行单功能包编译命令
$ catkin_make -DCATKIN_WHITELIST_PACKAGES=leader
$ catkin_make -DCATKIN_WHITELIST_PACKAGES=follower
$ sudo date –s 6/6/2030
3.JY901模块设置
软件:MiniIMU.exe(免安装)(见小车资料-JY901-joy901上位机)
点击配置进行校准和设置:(具体参见:JY901使用说明V2.pdf,好像界面软件不配套)
(1)校准(静置点击加速度,磁场-进行二平面法校准(水平、侧面))
(2)内容:只勾选欧拉角、磁场
(3)通讯速率:115200 回传速率50Hz
只需要要航向角,校准完大概,以正北为0度,逆时针为正(上位机显示±180度,程序里解算的是0~360度)
可以单独运行程序 rosrun leader/follower joy901 测试航向角
二、实验时的操作
领导车:(通过遥控控制)
1.航模遥控控制
(1) 开机,此时观察小车上自带小显示屏左下角,显示ROS(为ROS控制模式),
(2)航模遥控器左边遥感轻往前推一下,小显示屏左下角变为R-C(为航模遥控器控制模式)
2.开启小车初始化节点
roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
3.运行leader.launch
roslaunch leader leader.launch
注:
领导车节点功能(src):
joy901.cpp 读取自己的磁力计测的航向角,并发布出去,topic为/joy901_data 正北0,逆时针0~360
test_serial.cpp 打开串口读取GPS原始数据
read_data_node.cpp 订阅test_serial.cpp 中的数据,进行经\纬的解算,并发布出去,topic为/gga_available_info
read_odom.cpp 读取小车里程计测得的角速度和线速度,并发布话题/odom
state_broadcaster.cpp 订阅航向(/joy901_data),经纬(/gga_available_info),速度(/odom),并通过串口(数传)广播出去
跟随车(编队或者绕圈-四种控制模式):
1.开启小车初始化节点
roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
3.运行follower.launch
roslaunch follower follower.launch
小车的所有控制参数都在follower.launch里可以改
注:
跟随车节点功能(src):
joy901.cpp 读取自己的磁力计测的航向角,并发布出去,topic为/joy901_data
test_serial.cpp 打开串口读取GPS原始数据
read_data_node.cpp 订阅test_serial.cpp 中的数据,进行经\纬的解算,并发布出去,topic为/gga_available_info
state_broadcaster.cpp (读和发,轮流调用)
(1)订阅航向(/joy901_data),经纬(/gga_available_info),速度(/odom),并通过串口(数传)广播出去
(2)读取通过串口(数传)读取领导车、邻居车的航向,经纬,速度,并打包发布topic为/neighbor,给控制节点使用
follower.cpp 四种控制模式的实现
先mode0,
在过渡mode1的时候,先让调节为位置调节,将与领导者的角度调节置为0
然后位置调节可以调小距离的那个值,更加精确,然后期望位置可以以后,然后再加上角度调节的mode1。
三、小车的硬件构成
(1)检查使能开关
(2)检查电压
2.小车硬件构成
刚收到货的小车主要是由一块STM32F4核心开发板、一个激光雷达、一块树莓派4B开发板、手柄遥控及其接收器、4个轮子(带编码器)以及一块9800MAH锂电池构成。
具体如下:
(1)STM32F4核心开发板(主板)
STM32F4核心开发板主要用于小车的硬件(小车电机转速)控制、以及各种传感器(编码器、电压、无线遥控器、IMU传感器)数据的采集、2.4G无线WiFi模块的控制以及进行四个轮子转速和电源电压的显示。并且预留的定时器拓展口可用于航模遥控器接收机的连接。
(2)激光雷达
主要用于三维地图实时建模,可用于激光雷达SLAM算法的开发,实现路径规划,三维定位等功能,主要例程有构建代价地图、自适应蒙特卡罗定位、全局路径规划(Dijkstra、Astar、DWA、TEB等算法)。
(3)树莓派4B开发板
树莓派开发板通过USB连接到STM32F4开发板,实现了树莓派和STM32之间的数据通信,即可以获得所有STM32采集到的各种传感器的数据(电机实时转速,IMU模块的3轴角速度、3轴加速度)以及STM32开发板解算出的小车的姿态(欧拉角和四元数形式)和里程计获得的位置(通过编码器获得)。并且可以通过在树莓派里编写程序,以期望线速度、期望角速度的形式作为控制输入,进而传输到STM32主控。进而实现对小车的控制。
(4)手柄遥控及其接收器
遥控手柄可以通过连接在STM32上的遥控手柄接收器获得遥控手柄发出的实时控制信号,进而控制小车的移动。目前手柄的使用主要是先打开手柄开关,然后控制前进和转向摇杆就可以实现小车的控制,食指按键(上、下)可以控制车速的加减。
(5)4个轮子(带编码器)
编码器通过STM32的定时器的编码器功能,即可测得固定时间内电机转动产生的高低电平数,进而可以解算到电机的转速,然后通过积分及轮子的周长,便可以获得里程。当小车发生转向时,就需要航向角进行两轴的运动分解。
(6)9800MAH锂电池
锂电池电压不能低于10V,要及时充电。
此外,为了实现多辆小车的跟踪和控制,又继续增加了GPS和无线数传两个设备,通过USB扩展口实现与树莓派的连接。