@[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)ssid和password均為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、RK3399為firefly -
nanopi 3399為pi

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
PIBOT的ROS workspace目錄如下圖

-
arbotix_ros模擬器 -
pibot工具集
pibot -
pibot_bringuppibot驅(qū)動(dòng)包
pibot_bringup -
pibot_descriptionpibot urdf文件
pibot_description -
pibot_navigation建圖導(dǎo)航相關(guān)配置項(xiàng)
pibot_navigation -
pibot_simulatorpibot導(dǎo)航模擬器
pibot_simulator -
rplidar_rosrplidar激光雷達(dá)驅(qū)動(dòng)包 -
ydlidar-1.2.1eai激光雷達(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提示支持的命令

也可以輸入
"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)
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_gmapping和pibot_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_control和pibot_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.py的python腳本完成單點(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選擇roscore的URI 點(diǎn)擊CONNECT切換
Camera View與Map View
-
Set Pose在地圖長(zhǎng)按 相當(dāng)于Rviz中的2D Pose Estimate -
Set Goal在地圖長(zhǎng)按 相當(dāng)于Rviz中的2D Nav Goal - 左下角
Joystick可以發(fā)出cmd_veltopic控制小車移動(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)包使用
裝有IMU的PIBOT系列小車,底層提供IMU的數(shù)據(jù)采集,上層提供了IMU的互補(bǔ)濾波以及融合里程計(jì)和IMU的擴(kuò)展的卡爾曼濾波包robot_pose_ekf
啟動(dòng)時(shí)只需相應(yīng)的with_imu的launch文件, 具體參見pibot_命令







