PIBOT上位機(jī)開發(fā)(ROS1/ROS2)

@[TOC]

1. 概述

采用樹莓派/RK3288/RK3399/X86工控機(jī)/TK1/TX1/TX2作為上位ROS主控,基于ROS開發(fā)適配導(dǎo)航建圖算法


2. 軟件框架

軟件框架圖

3. Ubuntu的刷入、ROS(ROS2)的安裝

具體請(qǐng)參考樹莓派(raspberrypi 3b/4b)安裝ROS

tf卡啟動(dòng)的nanopi(RK3399) 則同樹莓派一樣操作


4. ssh遠(yuǎn)程連接

windows中推薦安裝xshell遠(yuǎn)程連接

樹莓派/nanopi rk3399默認(rèn)開啟了熱點(diǎn)ssidpassword均為pibot_ap,可以通過連接該熱點(diǎn)連接樹莓派/nanopi rk3399,樹莓派/nanopi rk3399的IP為192.168.12.1

ap默認(rèn)配置打開,如果需要重新配置,只需要執(zhí)行cd ~/pibot_ros/third_party/create_ap && ./config_ap.sh && sudo make install && cd ~/pibot_ros && ./pibot_ap.sh start

如需要關(guān)閉ap模式,改為連接wifi,只需要執(zhí)行cd ~/pibot_ros && ./pibot_ap.sh stop后重啟
如需要打開ap模式, 開啟則執(zhí)行cd ~/pibot_ros && ./pibot_ap.sh start后重啟

4.1 安裝xshell

網(wǎng)盤中下載xshell并安裝

通過Xshell連接樹莓派/RK3288/RK3399

輸入IP和用戶名密碼

  • 樹莓派3B/3B+pibot
  • firefly RK3288、RK3399firefly
  • nanopi 3399pi
pibot_xshell.gif

5. 用戶主機(jī)

需要一個(gè)PC安裝ROS環(huán)境,用來顯示查看地圖或者玩轉(zhuǎn)模擬器等,PIBOT提供了一個(gè)一鍵安裝ROS的腳本pibot_install_ros,可以直接在Ubuntu下安裝ROS
用戶主機(jī)環(huán)境Ubuntu或者Windows7/10+Vmvare+Ubuntu虛擬機(jī)Ros kinetic環(huán)境, 安裝ROS參見Windows下安裝Ubuntu虛擬機(jī)及ROS相關(guān)章節(jié)


6. 多機(jī)通訊

用戶主機(jī)樹莓派/RK3288/RK3399/TK1/TX1/TX2/X86主機(jī)怎么建立ROS通訊的,PIBOT提供了一鍵配置腳本pibot_init_env

  • 設(shè)備端


    pibot_init_env_dev.gif
  • 主機(jī)端


    pibot_init_env_host.gif

7. ROS驅(qū)動(dòng)開發(fā)

7.1 概述

下位機(jī)及通過串口與樹莓派/RK3288/RK3399/TK1/TX1/TX2/X86主機(jī)通訊,PIBOT提供了一個(gè)簡(jiǎn)單的協(xié)議,通訊協(xié)議具體請(qǐng)參見協(xié)議文檔

7.2 驅(qū)動(dòng)開發(fā)及PID參數(shù)動(dòng)態(tài)調(diào)整

PID參數(shù)已在出廠時(shí)候配置,如需了解細(xì)節(jié)請(qǐng)參考PIBOT的driver的實(shí)現(xiàn)及動(dòng)態(tài)PID調(diào)節(jié)

7.3 目錄結(jié)構(gòu)簡(jiǎn)介

建議拷貝提供的壓縮文件至目標(biāo)設(shè)備(樹莓派/RK3288/RK3399/X86工控機(jī)/TK1/TX1/TX2)上解壓或者直接git clone,不然會(huì)遇到一些問題,具體問題見Q&A

PIBOTROS workspace目錄如下圖

  • arbotix_ros 模擬器
  • pibot 工具集
    pibot
  • pibot_bringup pibot驅(qū)動(dòng)包
    pibot_bringup
  • pibot_description pibot urdf文件
    pibot_description
  • pibot_navigation 建圖導(dǎo)航相關(guān)配置項(xiàng)
    pibot_navigation
  • pibot_simulator pibot導(dǎo)航模擬器
    pibot_simulator
  • rplidar_ros rplidar激光雷達(dá)驅(qū)動(dòng)包
  • ydlidar-1.2.1 eai激光雷達(dá)驅(qū)動(dòng)包

7.4 編譯與測(cè)試

編譯

cd ~/pibot_ros
git fetch # 拉取最新的代碼
git pull
 # ros2 需要切換到ros分支,如 git checkout -b galactic-devel origin/galactic-devel
cd ~/pibot_ros/ros_ws
catkin_make   # ros2 為 pbmake

測(cè)試

初始化配置

重新拔插USB口或者重啟樹莓派/RK3288/RK3399

ls /dev/pibot -l

開始測(cè)試

打開終端輸入pibot_,再輸入2次tab提示支持的命令

pibot_cmd.gif

也可以輸入"alias | grep pibot_"查看所有命令的別名,對(duì)應(yīng)其ros的全命令,如下圖

pibot@pibot~$ alias | grep pibot_
alias pibot_base='ros2 launch pibot_bringup robot_launch.py'
alias pibot_base_with_imu='ros2 launch pibot_bringup robot_launch.py'
alias pibot_bringup='ros2 launch pibot_bringup bringup_launch.py'
alias pibot_bringup_with_imu='ros2 launch pibot_bringup bringup_with_imu_launch.py'
alias pibot_cartographer='ros2 launch pibot_navigation cartographer.launch.py'
alias pibot_cartographer_with_odom='ros2 launch pibot_navigation cartographer.launch.py'
alias pibot_configure='ros2 run rqt_reconfigure rqt_reconfigure'
alias pibot_control='ros2 launch pibot_bringup keyboard_teleop_launch.py'
alias pibot_gmapping='ros2 launch pibot_navigation mapping.launch.py'
alias pibot_gmapping_with_imu='ros2 launch pibot_navigation mapping.launch.py'
alias pibot_holonomic_joystick='ros2 launch pibot_bringup joystick_launch.py joy_config:=joystick-holonomic'
alias pibot_joystick='ros2 launch pibot_bringup joystick_launch.py joy_config:=joystick'
alias pibot_lidar='ros2 launch pibot_lidar rplidar_launch.py'
alias pibot_mapping='ros2 launch pibot_navigation mapping.launch.py'
alias pibot_naviagtion='ros2 launch pibot_navigation navigation2.launch.py'
alias pibot_naviagtion_with_imu='ros2 launch pibot_navigation navigation2.launch.py'
alias pibot_save_map='ros2 launch pibot_navigation save_map.launch.py'
alias pibot_simulator='ros2 launch pibot_simulator nav_launch.py'
alias pibot_tf_tree='ros2 run rqt_tf_tree rqt_tf_tree'
alias pibot_view='rviz2 -d ${PIBOT_HOME}/ros_ws/src/pibot_navigation/rviz/nav2_default_view.rviz'
alias pibot_view_cartographer='rviz2 -d ${PIBOT_HOME}/ros_ws/src/pibot_navigation/rviz/nav2_default_view.rviz'

這些命令具體定義在~/.pibotrc文件,該文件是pibot_init_env腳本自動(dòng)生成的


8. 校準(zhǔn)

無IMU校準(zhǔn)

參見PIBOT的控制及校準(zhǔn)

IMU校準(zhǔn)

參見PIBOT的IMU校準(zhǔn)


9. ROS建圖與導(dǎo)航

9.1 概述

ROS驅(qū)動(dòng)中提供了cmd_vel的訂閱及odom的發(fā)布,至此再需要一個(gè)激光雷達(dá)就可以完成建圖了

9.2 建圖

樹莓派/RK3288/RK3399運(yùn)行pibot_gmapping
用戶主機(jī)運(yùn)行pibot_view(ROS2中為``)

pibot_gmappingpibot_view在ROS1/2分別對(duì)應(yīng)下面的命令

  • ROS1
roslaunch pibot_navigation gmapping.launch
roslaunch pibot_navigation view_nav.launch
  • ROS2
ros2 launch pibot_navigation mapping.launch.py
rviz2 -d ${PIBOT_HOME}/ros_ws/src/pibot_navigation/rviz/nav2_default_view.rviz

另外還可以運(yùn)行pibot_cartographer命令執(zhí)行使用google cartographer建圖
ROS2中使用slam_box提供建圖

兩種建圖方法

  • 運(yùn)行pibot_control或者pibot_joystick即可通過鍵盤或者遙控手柄開始建圖

pibot_controlpibot_joystick在ROS1/2分別對(duì)應(yīng)下面的命令

  • ROS1
roslaunch pibot keyboard_teleop.launch
roslaunch pibot joystick.launch
  • ROS2
ros2 launch pibot_bringup keyboard_teleop_launch.py
ros2 launch pibot_bringup joystick_launch.py joy_config:=joystick
  • 直接選擇導(dǎo)航的點(diǎn)(2D Nav Goal)開始建圖

保存地圖

  • 運(yùn)行下列pibot_save_map命令,如需手動(dòng)指定路徑,可以使用ros原命令添加參數(shù)即可,如下

pibot_save_map在ROS1/2分別對(duì)應(yīng)下面的命令

  • ROS1
roslaunch pibot_navigation save_map.launch
roslaunch pibot_navigation save_map.launch map_name:=xxx
roscd pibot_navigation/maps/ && rosrun map_server map_saver -f xxx
  • ROS2
ros2 launch pibot_navigation save_map.launch.py
ros2 launch pibot_navigation save_map.launch.py map:=xxx

可以看到生成2個(gè)文件


10 導(dǎo)航

單點(diǎn)導(dǎo)航測(cè)試

樹莓派/RK3288/RK3399輸入pibot_naviagtion運(yùn)行`

pibot_naviagtion在ROS1/2分別對(duì)應(yīng)下面的命令

  • ROS1
roslaunch pibot_navigation nav.launch
roslaunch pibot_navigation nav.launch map_name:=xxx.yaml
  • ROS2
ros2 launch pibot_navigation navigation2.launch.py
ros2 launch pibot_navigation navigation2.launch.py map:=xxx

用戶主機(jī)運(yùn)行pibot_view,通過RViz提供的功能既可以完成導(dǎo)航測(cè)試(這里需要先指定初始位置)

如果直接運(yùn)行pibot_naviagtion則使用默認(rèn)參數(shù),nav.launch文件中可以設(shè)置默認(rèn)使用的地圖文件

多點(diǎn)導(dǎo)航

可以通過修改pibot/scripts中的navigation_demo.pypython腳本完成單點(diǎn)和多點(diǎn)的導(dǎo)航
具體可以參考
使用rospy啟動(dòng)launch與定點(diǎn)導(dǎo)航
基于rospy的多點(diǎn)導(dǎo)航的python實(shí)現(xiàn)

11. 模擬器

PIBOT包內(nèi)置了模擬器,可以直接運(yùn)行pibot_simulator啟動(dòng)模擬器

pibot_simulator在ROS1/2分別對(duì)應(yīng)下面的命令

  • ROS1
roslaunch pibot_simulator nav.launch
- ROS2
```bash
ros2 launch pibot_simulator nav_launch.py

這樣無需小車也可以模擬導(dǎo)航了

12. Android App

12.1相關(guān)功能

保證手機(jī)跟跟PC或者樹莓派/RK3288/RK3399連接同一個(gè)網(wǎng)絡(luò),保證手機(jī)能夠訪問到roscore(export ROS_IP=XXX.XXX.XXX.XXX)具體參見ROS多機(jī)的通訊配置


修改Master URI選擇roscoreURI 點(diǎn)擊CONNECT
切換Camera ViewMap View
android_app

  • Set Pose在地圖長(zhǎng)按 相當(dāng)于Rviz中的 2D Pose Estimate
  • Set Goal在地圖長(zhǎng)按 相當(dāng)于Rviz中的 2D Nav Goal
  • 左下角Joystick可以發(fā)出cmd_vel topic控制小車移動(dòng)

12.2 顯示視頻

顯示視頻需要硬件攝像頭支持同時(shí)在PC或者樹莓派/RK3288/RK3399啟動(dòng)roslaunch pibot usb_camera.launch
或者直接瀏覽器訪問192.168.12.1:8080選擇相應(yīng)的Topic即可

192.168.12.1為設(shè)備地址, 以具體設(shè)備為準(zhǔn)

手機(jī)APP ROS2 暫時(shí)不支持

13. IMU的相關(guān)包使用

裝有IMUPIBOT系列小車,底層提供IMU的數(shù)據(jù)采集,上層提供了IMU的互補(bǔ)濾波以及融合里程計(jì)和IMU的擴(kuò)展的卡爾曼濾波包robot_pose_ekf
啟動(dòng)時(shí)只需相應(yīng)的with_imulaunch文件, 具體參見pibot_命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容