嗨各位小伙伴们我们继续更新第三期的内容,如果部分小伙伴没有看到前两期的话可以访问如下链接:
松灵机器人多模态ROS开发平台LIMO使用指引(二)_m0_64152879的博客-CSDN博客
松灵机器人多模态ROS开发平台LIMO使用指引(一)_m0_64152879的博客-CSDN博客
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向前运动
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" -r 10
注:整个命令复制到终端中输入即可,不要手动输入
驱动程序源码中使用到的函数:
| 函数名称 | 函数作用 |
|---|---|
| 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。
可以通过以下命令访问此目录,打开终端,在终端中输入命令:
cd agilex_ws/src/limo_ros/limo_base/script
运行脚本,打开终端,在终端中输入命令:
python3 limomove.py
驱动程序中所使用的函数名称:
| 函数名称 | 函数作用 |
|---|---|
| EnableCommand() | 控制使能 |
| SetMotionCommand() | 设置移动命令 |
| GetLinearVelocity() | 获取线速度 |
| GetAngularVelocity() | 获取角速度 |
| GetSteeringAngle() | 获取内转角角度 |
| GetLateralVelocity() | 获取横移速度 |
| GetControlMode() | 获取控制模式 |
| GetBatteryVoltage() | 获取电池电量 |
| GetErrorCode() | 获取错误代码 |
| GetRightWheelOdem() | 获取左轮里程计 |
| GetLeftWheelOdem() | 获取右轮里程计 |
| GetIMUAccelData() | 获取IMU的加速度 |
| GetIMUGyroData() | 获取陀螺仪的数据 |
| GetIMUYawData() | 获取IMU的航向角 |
| GetIMUPichData() | 获取俯仰角 |
| GetIMURollData() | 获取横滚角 |
