三、底盘驱动程序驱动
移动底盘需要通过程序驱动才能实现limo的导航,limo的底盘驱动程序分为两个版本,分别为C++版本和Python版本,两个版本都可以控制limo运动。
3.1 C++底盘驱动
C++版本的驱动程序所在文件夹为~/agilex_ws/src/limo_ros/limo_base,可以通过以下命令进入到该文件夹中
cd agilex_ws/src/limo_ros/limo_base
以下是limo_base功能包的文件列表:
├── limo_base
├── CMakeLists.txt
├── include
│ ├── limo_driver.h
│ ├── limo_protocol.h
│ └── serial_port.h
├── launch
│ └── limo_base.launch
├── msg
│ └── LimoStatus.msg
├── package.xml
└── src
├── limo_base_node.cpp
├── limo_driver.cpp
└── serial_port.cpp
limo_base下有四个文件夹,分别为include、launch、msg、src。include文件夹下存放着驱动程序所调用的库文件;launch文件夹下存放着驱动程序的启动文件;msg文件夹下存放着驱动程序所需要的消息文件;src文件夹下存放着驱动程序源代码。
文件夹 | 存放文件 |
include | 驱动程序所调用的库文件 |
launch | 驱动程序的启动文件 |
msg | 驱动程序所需要的消息文件 |
src | 驱动程序源代码 |
可以通过一段简单的指令控制limo向前运动
注:在运行命令之前,请确保其他终端中的程序已经终止,终止命令为:Ctrl+c
1、启动底盘,打开一个终端,在终端中输入命令:
roslaunch limo_base limo_base.launch
2、输入控制指令,打开一个终端,在终端中输入命令:
rostopic pub /cmd_vel geometry_msgs/Twist "linear:
x: 0.2
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
注:整个命令复制到终端中输入即可,不要手动输入
在终端输入命令之后,limo会先前行走一小段距离,然后停下。
驱动程序源码中使用到的函数:
函数名称 | 函数作用 |
connect() | 连接底盘 |
readData() | 读取数据,获取底盘反馈的信息 |
processRxData() | 接收串口数据 |
parseFrame() | 处理串口数据 |
sendFrame() | 发送串口数据 |
setMotionCommand() | 设置limo的控制模式 |
enableCommandedMode() | 使能控制模式 |
publishOdometry() | 发布里程计数据 |
publishLimoState() | 发布limo的状态信息 |
publishIMUData() | 发布IMU的数据 |
processErrorCode() | 错误检测 |
twistCmdCallback() | 发布速度控制数据 |
normalizeAngle() | 输出一个正常的角度 |
degToRad() | 把角度转成弧度 |
convertInnerAngleToCentral() | 将内角转换为中心角 |
convertCentralAngleToInner() | 将中心角转换为内角 |
3.2 Python底盘驱动
limo的Python版本驱动上传到pypi,可以通过pip指令下载该驱动程序;程序的安装目录为~/.local/lib/python3.6/site-packages/pylimo。它的文件列表为:
├── __init__.py
├── limomsg.py
├── limo.py
└── __pycache__
├── __init__.cpython-36.pyc
├── limo.cpython-36.pyc
└── limomsg.cpython-36.pyc
Python版本的代码比较简洁,仅有三个文件组成驱动程序,init.py的作用为申明需要使用的文件, limomsg.py的作用为驱动成所需要的消息,limo.py是主程序,它的作用是驱动limo。
文件名称 | 文件作用 |
init.py | 申明需要使用的文件 |
limomsg.py | 驱动成所需要的消息 |
limo.py | 主程序,用于驱动limo |
我们提供了一个脚本调用该驱动程序,该脚本所在目录为agilex_ws/src/limo_ros/limo_base/script,脚本名称为limomove.py。
可以通过以下命令访问此目录,打开终端,在终端中输入命令:
注:在运行命令之前,请确保其他终端中的程序已经终止,终止命令为:Ctrl+c
cd agilex_ws/src/limo_ros/limo_base/script
运行脚本,打开终端,在终端中输入命令:
python3 limomove.py
在终端输入命令之后,limo会先前行走一段距离,然后停下。
驱动程序中所使用的函数名称(如有不足之处,望各位指出改进):
函数名称 | 函数作用 |
EnableCommand() | 控制使能 |
SetMotionCommand() | 设置移动命令 |
GetLinearVelocity() | 获取线速度 |
GetAngularVelocity() | 获取角速度 |
GetSteeringAngle() | 获取内转角角度 |
GetLateralVelocity() | 获取横移速度 |
GetControlMode() | 获取控制模式 |
GetBatteryVoltage() | 获取电池电量 |
GetErrorCode() | 获取错误代码 |
GetRightWheelOdem() | 获取左轮里程计 |
GetLeftWheelOdem() | 获取右轮里程计 |
GetIMUAccelData() | 获取IMU的加速度 |
GetIMUGyroData() | 获取陀螺仪的数据 |
GetIMUYawData() | 获取IMU的航向角 |
GetIMUPichData() | 获取俯仰角 |
GetIMURollData() | 获取横滚角 |