目录
1. 概述
1.1PIBOT
apollo
、zeus
、hades
和hera
是PIBOT工作室专门针对ROS开发的移动差分两轮小车、全向三轮小车、全向四麦克纳姆轮小车和差分四轮驱动小车
主要应用
-
ROS
机器人教学 - 机器人创客开发
- 服务机器人研发
-
AGV
研发
应用场景
室内平坦地面
外观图




淘宝链接
相关资料
链接:https://pan.baidu.com/s/1kENjOvblWX6ie29CgUPzUQ 密码:mltf
1.2软件支持
- 速度精准控制,支持角速度和线速度并发
- PID控制动态调节,动态曲线显示
- 通过USB(USB转串口)与上位机互连通讯,运动解算及PID速度环都在下位控制器完成,只需要通过串口命令发送线速度与角速度即可驱动小车底盘,同时可以直接读取小车的实时位置及实时速度信息(上位驱动都已实现)
- 基于ROS的激光雷达构建地图SLAM,支持键盘、手柄或者手机APP控制建图;支持RVIZ选点建图
- 基于ROS的室内自动导航与避障,AMCL的定位
- 基于摄像头的远程监控及APP同步显示
- 手机APP控制移动、小车位置设定,导航目标设定及路径显示(需要ROS上位机支持,即树莓派/PC)

- 提供完善的文档和丰富的示例
- 支持模拟器,无需硬件环境可以直接使用使用模拟建图与导航
- 开源所有代码,包括底层嵌入式部分代码,上位ROS驱动代码导航配置,Android App代码
1.3硬件清单
apollo
主要机械部件:
-
小车主体
小车底盘采用双层亚克力+双层主板亚克力。
2d-1.png



- 底盘
- 主动轮:65mm直径优质橡胶轮 2个
- 从动轮:1.5寸尼龙万向轮 1个
- 减速编码器电机:2个495线,轮子转动一圈会产生的脉冲信号高达1980个
- 电子控制部件:
-
Arduino Mega 2560
单片机控制板+扩展板或SMT32F103
主控板:1个 - DC12-5v降压模块,双USB输出(提供给树莓派等供电)
-其他部件: - 12V、6000mAh锂电池+充电器: 1个
Raspberry Pi 3 Model B 树莓派3 B型或RK3288(内嵌ROS
系统)
-
zeus
主要机械部件:
-
小车底盘采用4MM双层亚克力+3MM双层电路板基板的亚克力板,外观简洁美观,安装方便

- 底盘
- 主动轮:58毫米全向轮
- 减速编码器电机:3个 990线,轮子转动一圈会产生的脉冲信号高达3960个
- 电子控制部件:
-
Arduino Mega 2560
单片机控制板+扩展板或SMT32F407
主控板:1个 - DC12-5v降压模块,双USB输出(提供给树莓派等供电)
-
- 其他部件:
- 12V、6000mAh锂电池+充电器: 1个
Raspberry Pi 3 Model B 树莓派3 B型或RK3288(内嵌ROS
系统)
- 12V、6000mAh锂电池+充电器: 1个
hades
主要机械部件:
-
小车底盘采用4MM双层亚克力+3MM双层电路板基板的亚克力板,外观简洁美观,安装方便

- 底盘
- 主动轮:60毫米麦克纳姆轮
- 减速编码器电机:4个 990线,轮子转动一圈会产生的脉冲信号高达3960个
- 电子控制部件:
-
Arduino Mega 2560
单片机控制板+扩展板或SMT32F407
主控板:1个 - DC12-5v降压模块,双USB输出(提供给树莓派等供电)
-
- 其他部件:
- 12V、6000mAh锂电池+充电器: 1个
Raspberry Pi 3 Model B 树莓派3 B型或RK3288(内嵌ROS
系统)
- 12V、6000mAh锂电池+充电器: 1个
1.4安装手册&操作手册
PIBOT操作手册
apollo安装手册
zeus安装手册
hades安装手册
2. 下位机开发
小车出厂已经刷好固件程序和设置好配置,无需关心下位机嵌入式程序的可以跳过本节
2.1概述
- 使用Arduino Mega 2560为主控单元,使用
Visual studio code
+Platform IO
进行开发,支持Windows
和ubuntu
环境 - 使用STM32F1为主控单元,使用
Keil
进行开发 - 使用STM32F4为主控单元,
Ubuntu
下使用Visual studio code
进行开发
2.2环境搭建
Arduino
具体请参考Visual Studio Code插件PlatformIO IDE开发Arduino
STM32F1
STM32F4
具体请参考PIBOT的ubuntu下stm32 C/C++模版及配置编译
环境配置
Arduino
使用Visual studio code
打开附带下位代码文件夹,在platformio.ini
修改相应模型以及使用的电机控制器
apollo
models =
-D ROBOT_MODEL=ROBOT_MODEL_DIFF
-D MOTOR_CONTROLLER=COMMON_CONTROLLER
zeus
models =
-D ROBOT_MODEL=ROBOT_OMNI_3
-D MOTOR_CONTROLLER=COMMON_CONTROLLER
STM32
STM32F1

同Arduino
STM32F4
在param.mk
的修改相关配置,同Arduino
2.3代码分析
具体请参考ROS机器人底盘(7)-Firmware的代码分析(1)
ROS机器人底盘(8)-Firmware的代码分析(2)
2.4参数配置
运动参数出厂时都内置在板子的EEPROM/FLASH
中,若需要修改,请在下面ROS
驱动开发中查看
3. 上位机开发
上位机出厂已经刷好系统和安装好
ROS
,无需关心细节可以直接调过3.2 3.2
3.1概述
采用Raspberry Pi 3
或者RK3288
作为上位ROS
主控
3.2Ubuntu的刷入、ROS的安装
具体请参考树莓派(raspberry pi 3b)安装ROS Kinetic Kame
RK3288中ROS的安装
sudo /etc/init.d/lightdm stop
即可关闭图像界面
3.3ssh远程连接
windows中推荐安装xshell远程连接
安装xshell
网盘中下载xshell并安装
通过Xshell连接Raspberry Pi 3
输入IP和用户名密码,默认用户名密码均为pibot
即可连接


Windows
通过xshell传输文件


3.4Master主机
需要一个PC安装ROS环境(最好有但不必须),用来显示查看地图或者玩转模拟器等
主机环境Ubuntu 16.04
或者Windows7/10+Vmvare+Ubuntu16.04
虚拟机Ros kinetic
环境, 安装ROS
参见PIBOT操作手册相关章节
3.5多机通讯
Master主机与树莓派或者RK3288怎么建立ROS通讯的,如需了解细节
请参考ROS多机的通讯配置,不关心直接照着PIBOT操作手册相关章节配置即可
4.ROS驱动开发
4.1概述
下位机及通过串口与Raspberry Pi 3
或者PC
通讯,通讯协议具体请参见ROS机器人底盘(3)-通讯协议
4.2 驱动开发及PID参数动态调整
PID参数已在出厂时候配置,如需了解细节请参考ROS机器人底盘(10)-PIBOT的driver的实现及动态PID调节
4.3 目录结构简介
建议拷贝提供的压缩文件至目标设备(树莓派等)上解压,不然会遇到一些问题,具体问题见Q&A
PIBOT的ROS workspace目录如下图

-
arbotix_ros
模拟器 -
pibot
工具集
pibot
-
pibot_bringup
pibot驱动包
pibot_bringup
-
pibot_description
pibot urdf文件
pibot_description
-
pibot_navigation
建图导航相关配置项
pibot_navigation
-
pibot_simulator
pibot导航模拟器
pibot_simulator
-
rplidar_ros
rplidar激光雷达驱动包 -
ydlidar-1.2.1
eai激光雷达驱动包
4.4编译与测试
编译
cd ~/pibot/ros_ws
catkin_make
source devel/setup.bash
或者直接写入.bashrc
中(这样每次启动bash会直接调用)
echo "source /xxxx/devel/setup.bash" >> ~/.bashrc
** xxx为完整路径**
测试
初始化配置
在Raspberry Pi 3
运行rosrun pibot setup.sh
重新拔插USB口或者重启Raspberry Pi 3
ls /dev/pibot -l

开始测试
修改波特率
pibot_bringup/params/base_param.yaml
在Raspberry Pi 3
运行roslaunch pibot_bringup bringup.launch
在Master主机
运行rosrun rqt_reconfigure rqt_reconfigure
可以查看和修改内置的配置信息,运行roslaunch pibot keyboard_teleop.launch
即可通过键盘控制小车运动
同时支持小米等手柄的接入,运行
roslaunch pibot joystick.launch
即可
默认参数出厂会固化到板子
apollo
-
Arduino
-
STM32F1
zeus
-
STM32F4
hades
-
STM32F4
hera
4.4 校准
4.4.1无IMU校准
4.4.2IMU校准
5.ROS建图与导航
5.1概述
ROS
驱动中提供了cmd_vel
的订阅及odom
的发布,至此再需要一个激光雷达就可以完成建图了
5.2建图
在Raspberry Pi 3
运行roslaunch pibot_navigation gmapping.launch
在Master
主机运行roslaunch pibot_navigation view_nav.launch
2种建图方法
- 运行
roslaunch pibot keyboard_teleop.launch
或者roslaunch pibot joystick.launch
即可通过键盘或者遥控手柄开始建图 - 直接选择导航的点(
2D Nav Goal
)开始建图
保存地图
- 运行下列命令即可(my_map为自定义名称)
roscd pibot_navigation/maps/
rosrun map_server map_saver -f my_map`

可以看到生成2个文件
5.3导航
在Raspberry Pi 3
运行roslaunch pibot_navigation nav.launch map_name:=my_lab.yaml
在Master主机
运行roslaunch pibot_navigation view_nav.launch
如果直接运行
roslaunch pibot_navigation nav.launch
而不指定map_name
参数则使用默认参数,nav.launch
文件中可以设置默认使用的地图文件image.png
6.模拟器
PIBOT包内置了模拟器,可以直接运行模拟导航
- 运行
roslaunch pibot_simulator nav.launch
- 运行
roslaunch pibot_navigation view_nav.launch
这样无需小车也可以模拟导航了
7.Android App
保证手机跟跟PC
或者Raspberry Pi 3
连接同一个网络,保证手机能够访问到roscore
(export ROS_IP=XXX.XXX.XXX.XXX
)具体参见ROS多机的通讯配置

修改
Master URI
选择roscore
的URI
点击CONNECT
切换
Camera View
与Map View

-
Set Pose
在地图长按 相当于Rviz
中的2D Pose Estimate
-
Set Goal
在地图长按 相当于Rviz
中的2D Nav Goal
- 左下角
Joystick
可以发出cmd_vel
topic
控制小车移动
显示视频
显示视频需要硬件摄像头支持同时在PC
或者Raspberry Pi 3
启动roslaunch pibot usb_camera.launch
附录


常见问题
-
1.ROS代码编译问题
如果从windows拷贝的源码编译可能遇到以下问题-
No such file or directory
No such file or directory 这是生成动态参数时因为
windows
和Linux
下换行不一致导致的,使用Visual Code
打开pibot\cfg\CalibrateAngular.cfg
右下角点击CRLF
修改为LF
并保存,同样的还有pibot\cfg\CalibrateLinear.cfg
和pibot_bringup\cfg\pibot_parameter.cfg
-
2.
Permission denied
Permission denied 问题原因与上面类似,解决方法就是添加执行权限
chmod +x pibot\cfg\CalibrateAngular.cfg
同样的还有pibot\cfg\CalibrateLinear.cfg
和pibot_bringup\cfg\pibot_parameter.cfg
-
-
3.
Invalid arg
Invalid arg 问题原因是没有设置环境变量
设置为支持的选项即可
如:export PIBOT_LIDAR=rplidar
或者export PIBOT_LIDAR=eai-x4
类似还有export PIBOT_MODEL=apollo
或者export PIBOT_MODEL=zeus
同之前,如果不希望每次都需要设置,最好把该配置写到~/.bashrc文件中
-
4.雷达启动不转,health state 异常
多半是你这usb供电问题,或者可能电池电量不足,电池需要充电
网友评论
[map_server-4] process has died [pid 18719, exit code -11, cmd /opt/ros/kinetic/lib/map_server/map_server/home/wangjy/ROS_code/pibot_ros/ros_ws/src/pibot_simulator/maps/test_map.yaml __name:=map_server __log:=/home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/map_server-4.log].
log file: /home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/map_server-4*.log
[fake_localization-6] process has died [pid 18740, exit code -11, cmd /opt/ros/kinetic/lib/fake_localization/fake_localization base_pose_ground_truth:=odom __name:=fake_localization __log:=/home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/fake_localization-6.log].
log file: /home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/fake_localization-6*.log
[move_base-5] process has died [pid 18721, exit code -11, cmd /opt/ros/kinetic/lib/move_base/move_base __name:=move_base __log:=/home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/move_base-5.log].
log file: /home/wangjy/.ros/log/86b4ef7c-cb84-11e8-8e6f-a402b951647c/move_base-5*.log