1
0
Fork 0
RobotKernal-UESTC/Docs/2.PIbot-ROS安装.md

7.9 KiB
Raw Permalink Blame History

PIBot_ROS使用说明

这篇文档主要是解决ROS控制小车底盘如果能成功调用库并控制小车底盘运行说明则成功。

PIbot是银星合作时购买的小车底盘。其包含直流电机控制、里程计、IMU和上位机通讯等功能。PIBot_ROS是其和ROS通信交互的软件包。

1、连接RK3588板子

1.1 直接USBHDMI连接

我们是通过RK3588 & RK3566等高性能的主板控制PIBot下位机(STM32控制板)。可以直接采用HDMI线和USB鼠标和键盘进行控制信息的查看和控制。1.2中我们采用ssh连接时也需要提前知道RK3566RK3588IP地址。

1.2 采用ssh远程连接

采用VNC等远程桌面的方式对性能的损耗较大所以采用远程ssh连接一种较好的方式。这里我们采用的vscode进行ssh远程连接, 其具有远程图形显示功能以及其他强大的功能。

ssh连接需要知道目标机器的ip地址。由于windows平台的渲染窗口和linux不兼容,所以windows平台的vscode是不支持ssh窗口显示的需要开启虚拟机或者linux主机下面的vscode才可以显示窗口。我们在虚拟机ubuntu里面使用vscode远程ssh连接RK3588和虚拟机需要用同个网络,远程连接可以参考教程

# 通过usb和hdmi查看RK3588或者RK3566的ip地址
ifconfig
# 在vscode或者其他ssh设备输入命令, ip地址是上面查看到的IP地址命令中 -X 为远程显示图形界面需要
ssh -X firefly@devices_ip_address
# 账号 firefly、密码 firefly

2、编译和配置PIBot_ROS

2.1 下载 PIBot_ROS代码

PIBot的ROS支持包的位置在仓库中其路径为Code\RK3588\PIbot_ROS中。我们解压后可以把PIBot_ROS移动到~/位置,并重新命名为pibot_ros(命名可以按照个人习惯),下面的教程以pibot_ros为例。

# 进入到home目录下
cd ~
# clone代码
git clone http://logzhan.ticp.io:30000/logzhan/RobotKernal-UESTC
# 把PIBot_ROS移动到Home目录下
mv RobotKernal-UESTC/Code/MowingRobot/pibot_ros ~/pibot_ros

2.2 在RK3588上编译PIbot_ROS主要是全覆盖部分

PIBot_ROS/ros_ws/src/ipa_coverage_planning(全覆盖部分的代码)

# 安装相关的软件包,如果没有安装会导致下面的编译步骤无法通过
# 下面是ubuntu20.04的命令其他ubuntu需要对应ros的版本替换noetic
sudo apt-get install ros-noetic-opengm
sudo apt-get install ros-noetic-libdlib
sudo apt-get install ros-noetic-cob-navigation
sudo apt-get install coinor-*

# 要运行pibot还得安装
#导航相关
sudo apt-get install ros-noetic-navigation
#定位相关
sudo apt-get install ros-noetic-robot-pose-ekf
# 进入到Pibot的ROS的工作空间
cd ~/pibot_ros/ros_ws
# 编译代码
# 先编译pibot_msgs生成对应的头文件
# 这是因为catkin_make编译顺序不可控虽然参照网上的写法控制顺序但是没有起到作用。这回导致自定义的msg还没有生成头文件就被引用导致编译不通过。
catkin_make --pkg pibot_msgs
# 编译全部
catkin_make

可参考内容:

全覆盖规划算法Coverage Path Planning开源代码ipa_coverage_planning编译-CSDN博客

ROS全覆盖规划算法 Coverage Path Planning 采坑-CSDN博客

2.3 初始化配置PIBot_ROS

由于PIBot_ROS支持不同的智能小车的底盘以及不同的传感器,所以需要执行初始化的脚本对设备的类型以及对支持的传感器进行配置。

# 进入PIBot_ROS
cd ~/pibot_ros
# 给脚本添加可执行的权限
chmod +x pibot_init_env.sh
# 执行脚本
./pibot_init_env.sh
# 脚本最后会提示:刷新环境变量使其在当前命令行生效
source ~/.bashrc

pibot_init_env.sh执行过程中,他会将部分串口的设备创建名为pibot的软链接。测试的过程如下:

## 重新拔插USB口或者重启RK3566、RK3588、树莓派等主机
# 列出/dev/pibot的详细信息
ls /dev/pibot -l
# 如果执行成功会看到类似下面的信息, 这个时候主机就可以和下位机通信、控制、交流
lrwxrwxrwx l root root 7 12月 20 10:47 /dev/pibot -> ttyUSB0

由于pibot_ros代码从git拉取下来所以很多文件没有可执行权限所以需要通过以下代码设置py文件的可执行权限:

# pibot_ros目录下的python文件设置可执行权限
find ~/pibot_ros -type f -name "*.py" -exec chmod +x {} \;

2.4 图形化支持

在firefly的ROC-RK3588S-PC开发板中,其系统只支持EGL,但是rviz、gazebo是基于等QT程序是基于GLX 编写的,所以需要安装GLX库才能正常运行。官方参考网址

# 安装GLX库
sudo apt install -y libgl1-mesa-glx libgl1-mesa-dri libglx-mesa0
# 重启设备
reboot

如果遇到rviz还不能运行,rqtQOpenGLTimeMonitor等错误,需要更新官方的libqt5opengl5-dev 执行下面操作,再尝试运行rqtrvizgazebo等程序。

# 上面是官方推荐实际测试下来还是必须执行下面代码后续的pibot_configure、pibot_view才能正常运行
sed -i 's/.*wiki.t-firefly.com.*/\#&/' /etc/apt/sources.list
sudo apt install libqt5opengl5-dev
sed -i '/.*wiki.t-firefly.com.*/s/^#//' /etc/apt/sources.list

2.5 功能测试

功能测试前可能有一些依赖没有完全安装完成,可能会造成一些问题,根据下面的步骤补充一下依赖的安装。

# 先安装控制所需要的依赖
sudo apt-get install ros-noetic-teleop-twist-keyboard
# 安装python一般在前面的步骤就已经安装了
sudo apt install -y python3
# 创建python的软链接因为后续的代码执行用到了python xxxx.py
sudo ln -s /usr/bin/python3 /usr/bin/python

完成2.3中的步骤后,就可以通过pibot提供的脚本控制小车的运动。

# 1.先启动pibot_bringup, 它负责pibot底盘的基本通信(必要)或者运行roslaunch pibot_bringup bringup.launch
pibot_bringup
# 2.启动pibot的配置界面
#   或者采用命令 rosrun rqt_reconfigure rqt_reconfigure
pibot_configure
# 3. 启动小车控制, 或者使用命令 roslaunch pibot keyboard_teleop.launch
pibot_control 
# 4. 通过步骤1和3即可启动小车的控制如果需采用小米等手柄运行
roslaunch pibot joystick.launch

3、使用说明

3.1 导航的启动

PIBot_ROS的文件解压或重新命名可以按照个人习惯即可,这里以解压后命名为pibot_ros为例,介绍命令启动导航。

# 进入到pibot_ros的工作空间
cd ~/pibot_ros/ros_ws
# 配置环境变量
source ./devel/setup.bash
# 启动导航文件
# 格式 roslaunch package_name launch_file_name
roslaunch pibot_navigation nav.launch

3.2 更改导航地图

根据导航需求更改导航地图,地图路径在下图左下角位置pgm为地图格式 yaml为配置文件:

Untitled

3.3 小车控制和可视化

小车的控制和可视化功能需要开启两个新的终端,分别在终端输入命令

# 小车的键盘控制,在任意路径执行:
pibot_control
# 导航可视化,在任意路径执行:
pibot_view (需要设置从主机  记不清 后面再补充)

在这上面可以在地图上给出目标点进行单点导航。

3.4、全覆盖路径规划的使用