# PIBot_ROS使用说明 > 这篇文档主要是解决ROS控制小车底盘,如果能成功调用库并控制小车底盘运行说明则成功。 ​ `PIbot`是银星合作时购买的小车底盘。其包含直流电机控制、里程计、`IMU`和上位机通讯等功能。`PIBot_ROS`是其和ROS通信交互的软件包。 ## 1、连接RK3588板子 #### 1.1 直接`USB`和`HDMI`连接 ​ 我们是通过`RK3588 & RK3566`等高性能的主板控制`PIBot`下位机(`STM32`控制板)。可以直接采用`HDMI`线和`USB`鼠标和键盘进行控制信息的查看和控制。1.2中我们采用ssh连接时,也需要提前知道`RK3566`或`RK3588`的`IP`地址。 #### 1.2 采用ssh远程连接 ​ 采用`VNC`等远程桌面的方式对性能的损耗较大,所以采用远程ssh连接一种较好的方式。这里,**我们采用的`vscode`进行ssh远程连接**, 其具有远程图形显示功能以及其他强大的功能。 ​ `ssh`连接需要知道目标机器的`ip`地址。由于`windows`平台的渲染窗口和`linux`不兼容,所以**windows平台的`vscode`是不支持ssh窗口显示的,需要开启虚拟机或者`linux`主机下面的`vscode`才可以显示窗口**。我们在虚拟机`ubuntu`里面使用`vscode`远程`ssh`连接`RK3588`和虚拟机需要用同个网络,远程连接可以参考[教程](http://www.autolabor.com.cn/book/ROSTutorials/di-9-zhang-ji-qi-ren-dao-822a28-shi-4f5329/92-vscodeyuan-cheng-kai-fa.html): ```shell # 通过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支持包的位置在[仓库]([RobotKernal-UESTC](http://logzhan.ticp.io:30000/logzhan/RobotKernal-UESTC))中,其路径为`Code\RK3588\PIbot_ROS`中。我们解压后可以把`PIBot_ROS`移动到`~/`位置,并重新命名为`pibot_ros`(命名可以按照个人习惯),下面的教程以`pibot_ros`为例。 ```shell # 进入到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`(全覆盖部分的代码) ```shell # 安装相关的软件包,如果没有安装会导致下面的编译步骤无法通过 # 下面是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的ROS的工作空间 cd ~/pibot_ros/ros_ws # 编译代码 catkin_make ``` ​ 可参考内容: > [全覆盖规划算法Coverage Path Planning开源代码ipa_coverage_planning编译-CSDN博客](https://blog.csdn.net/ktigerhero3/article/details/121562049) > > [ROS全覆盖规划算法 Coverage Path Planning 采坑-CSDN博客](https://blog.csdn.net/weixin_42179076/article/details/121164350) #### 2.3 初始化配置`PIBot_ROS` ​ 由于`PIBot_ROS`支持不同的智能小车的底盘以及不同的传感器,所以需要执行初始化的脚本对设备的类型以及对支持的传感器进行配置。 ```shell # 进入PIBot_ROS cd ~/pibot_ros # 给脚本添加可执行的权限 chmod +x pibot_init_env.sh # 执行脚本 ./pibot_init_env.sh # 脚本最后会提示:刷新环境变量使其在当前命令行生效 source ~/.bashrc ``` ​ 在`pibot_init_env.sh`执行过程中,他会将部分串口的设备创建名为`pibot`的软链接。测试的过程如下: ```shell ## 重新拔插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`文件的可执行权限: ```shell # 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`库才能正常运行。[官方参考网址](https://wiki.t-firefly.com/zh_CN/Firefly-Linux-Guide/first_use.html#ros-zhi-chi) ```shell # 安装GLX库 sudo apt install -y libgl1-mesa-glx libgl1-mesa-dri libglx-mesa0 # 重启设备 reboot ``` ​ 如果遇到`rviz`还不能运行,`rqt`报`QOpenGLTimeMonitor`等错误,需要更新官方的`libqt5opengl5-dev`, 执行下面操作,再尝试运行`rqt`、`rviz`和`gazebo`等程序。 ```shell # 上面是官方推荐,实际测试下来还是必须执行下面代码,后续的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 功能测试 ​ 功能测试前可能有一些依赖没有完全安装完成,可能会造成一些问题,根据下面的步骤补充一下依赖的安装。 ```shell # 先安装控制所需要的依赖 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`提供的脚本控制小车的运动。 ```shell # 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`为例,介绍命令启动导航。 ```shell # 进入到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 小车控制和可视化 ​ 小车的控制和可视化功能需要**开启两个新的终端,分别在终端输入命令**: ```shell # 小车的键盘控制,在任意路径执行: pibot_control ``` ```shell # 导航可视化,在任意路径执行: pibot_view (需要设置从主机 记不清 后面再补充) ``` ​ 在这上面可以在地图上给出目标点进行单点导航。 #### 3.4、全覆盖路径规划的使用