溫馨提示
本篇文章已經(jīng)收錄在我最新出版的書籍《機(jī)器人SLAM導(dǎo)航核心技術(shù)與實(shí)戰(zhàn)》,感興趣的讀者可以購買紙質(zhì)書籍來進(jìn)行更加深入和系統(tǒng)性的學(xué)習(xí),購買鏈接如下:
摘要
通過前面一系列的鋪墊,相信大家對整個(gè)miiboo機(jī)器人的DIY有了一個(gè)清晰整體的認(rèn)識(shí)。接下來就正式進(jìn)入機(jī)器人大腦(嵌入式主板:樹莓派3)的開發(fā)。本章將從樹莓派3的開發(fā)環(huán)境搭建入手,為后續(xù)ros開發(fā)、slam導(dǎo)航及語音交互算法做準(zhǔn)備。本章內(nèi)容:
1.安裝系統(tǒng)ubuntu_mate_16.04
2.安裝ros-kinetic
3.裝機(jī)后一些實(shí)用軟件安裝和系統(tǒng)設(shè)置
4.PC端與robot端ROS網(wǎng)絡(luò)通信
5.Android手機(jī)端與robot端ROS網(wǎng)絡(luò)通信
6.樹莓派USB與tty串口號(hào)綁定
7.開機(jī)自啟動(dòng)ROS節(jié)點(diǎn)
6.樹莓派USB與tty串口號(hào)綁定
底盤、激光雷達(dá)、IMU這三個(gè)傳感器都使用串口與樹莓派通信,為了防止每次開機(jī)這三個(gè)設(shè)備的串口號(hào)發(fā)生變動(dòng),需要將串口號(hào)進(jìn)行綁定與重映射。
創(chuàng)建rules文件:
rules文件前的序號(hào)越大優(yōu)先級(jí)越小,將優(yōu)先級(jí)設(shè)置的小一點(diǎn);創(chuàng)建文件/etc/udev/rules.d/99-miiboo-usb-serial.rules,文件內(nèi)容如圖28。
![]()
(圖28)/etc/udev/rules.d/99-miiboo-usb-serial.rules文件內(nèi)容
確定新插入串口設(shè)備的屬性:
#將<devpath>替換成新插入串口設(shè)備號(hào),如/dev/ttyUSB0
udevadm info -a -p $(udevadm info -q path -n <devpath>)
在輸出的數(shù)據(jù)中從上到下找(如KERNELS=="1-1.4.3:1.0"形式的項(xiàng)),下一個(gè)不帶“:”的KERNELS就是我們要找的,將下面這些參數(shù)
ATTRS{idProduct}
ATTRS{idVendor}
KERNELS
的取值填入上面創(chuàng)建的rules文件中對應(yīng)的位置,然后在SYMLINK+中給這個(gè)設(shè)備取一個(gè)別名,MODE設(shè)為0777。
將底盤、雷達(dá)、IMU依次插入樹莓派3的USB口,重復(fù)執(zhí)行上面確定新插入串口設(shè)備的屬性這一步,直到將這3個(gè)串口都綁定完成。這里將底盤、雷達(dá)、IMU分別ttyUSB*名稱分別映射成別名miiboo、lidar、imu,這樣在不改變底盤、雷達(dá)、IMU插入樹莓派3的USB口物理孔位順序時(shí),不論上電開機(jī)后這3個(gè)串口被系統(tǒng)分配的ttyUSB*實(shí)際是多少,我們都可以用映射好的別名/dev/miiboo、/dev/lidar、/dev/imu來訪問底盤、雷達(dá)、IMU串口,并且不用擔(dān)心用戶訪問權(quán)限不足的問題。這里特別說明,miiboo機(jī)器人的底盤、雷達(dá)、IMU插入樹莓派3的USB口物理孔位順序,如圖29,請不要改變這個(gè)順序。
![]()
(圖29)miiboo機(jī)器人的底盤、雷達(dá)、IMU插入樹莓派3的USB口物理孔位順序
使綁定設(shè)置生效:
重啟機(jī)器人使綁定設(shè)置生效,命令如下。
機(jī)器人重啟后通過命令查看綁定是否生效,看到下面的輸出就說明綁定成功了,如圖30。
![]()
(圖30)查看綁定是否生效
后記
------SLAM+語音機(jī)器人DIY系列【目錄】快速導(dǎo)覽------
第1章:Linux基礎(chǔ)
1.Linux簡介
2.安裝Linux發(fā)行版ubuntu系統(tǒng)
3.Linux命令行基礎(chǔ)操作
第2章:ROS入門
1.ROS是什么
2.ROS系統(tǒng)整體架構(gòu)
3.在ubuntu16.04中安裝ROS kinetic
4.如何編寫ROS的第一個(gè)程序hello_world
5.編寫簡單的消息發(fā)布器和訂閱器
6.編寫簡單的service和client
7.理解tf的原理
8.理解roslaunch在大型項(xiàng)目中的作用
9.熟練使用rviz
10.在實(shí)際機(jī)器人上運(yùn)行ROS高級(jí)功能預(yù)覽
第3章:感知與大腦
1.ydlidar-x4激光雷達(dá)
2.帶自校準(zhǔn)九軸數(shù)據(jù)融合IMU慣性傳感器
3.輪式里程計(jì)與運(yùn)動(dòng)控制
4.音響麥克風(fēng)與攝像頭
5.機(jī)器人大腦嵌入式主板性能對比
6.做一個(gè)能走路和對話的機(jī)器人
第4章:差分底盤設(shè)計(jì)
1.stm32主控硬件設(shè)計(jì)
2.stm32主控軟件設(shè)計(jì)
3.底盤通信協(xié)議
4.底盤ROS驅(qū)動(dòng)開發(fā)
5.底盤PID控制參數(shù)整定
6.底盤里程計(jì)標(biāo)
第5章:樹莓派3開發(fā)環(huán)境搭建
1.安裝系統(tǒng)ubuntu_mate_16.04
2.安裝ros-kinetic
3.裝機(jī)后一些實(shí)用軟件安裝和系統(tǒng)設(shè)置
4.PC端與robot端ROS網(wǎng)絡(luò)通信
5.Android手機(jī)端與robot端ROS網(wǎng)絡(luò)通信
6.樹莓派USB與tty串口號(hào)綁定
7.開機(jī)自啟動(dòng)ROS節(jié)點(diǎn)
第6章:SLAM建圖與自主避障導(dǎo)航
1.在機(jī)器人上使用傳感器
2.google-cartographer機(jī)器人SLAM建圖
3.ros-navigation機(jī)器人自主避障導(dǎo)航
4.多目標(biāo)點(diǎn)導(dǎo)航及任務(wù)調(diào)度
5.機(jī)器人巡航與現(xiàn)場監(jiān)控
第7章:語音交互與自然語言處理
1.語音交互相關(guān)技術(shù)
2.機(jī)器人語音交互實(shí)現(xiàn)
3.自然語言處理云計(jì)算引擎
第8章:高階拓展
1.miiboo機(jī)器人安卓手機(jī)APP開發(fā)
2.centos7下部署Django(nginx+uwsgi+django+python3)
參考文獻(xiàn)
[1] 張虎,機(jī)器人SLAM導(dǎo)航核心技術(shù)與實(shí)戰(zhàn)[M]. 機(jī)械工業(yè)出版社,2022.
![]()
序
前言
編程基礎(chǔ)篇
第1章 ROS入門必備知識(shí)
1.1.3 ROS的學(xué)習(xí)方法 3
1.2 ROS開發(fā)環(huán)境的搭建 3
1.2.3 ROS網(wǎng)絡(luò)通信配置 5
1.3.1 從計(jì)算圖視角理解ROS架構(gòu) 6
1.3.2 從文件系統(tǒng)視角理解ROS架構(gòu) 7
1.3.3 從開源社區(qū)視角理解ROS架構(gòu) 8
1.5 ROS節(jié)點(diǎn)通信 10
第2章 C++編程范式
2.1 C++工程的組織結(jié)構(gòu) 29
2.1.1 C++工程的一般組織結(jié)構(gòu) 29
2.1.2 C++工程在機(jī)器人中的組織結(jié)構(gòu) 29
第3章 OpenCV圖像處理
3.1 認(rèn)識(shí)圖像數(shù)據(jù) 35
硬件基礎(chǔ)篇
第4章 機(jī)器人傳感器
4.4.2 電機(jī)驅(qū)動(dòng)電路 112
第5章 機(jī)器人主機(jī)
5.2.1 安裝Ubuntu MATE 18.04 120
5.2.3 裝機(jī)軟件與系統(tǒng)設(shè)置 122
5.4 ARM主機(jī)Jetson-tx2 128
5.5.1 ROS網(wǎng)絡(luò)通信 130
5.5.2 機(jī)器人程序的遠(yuǎn)程開發(fā) 130
第6章 機(jī)器人底盤
6.1 底盤運(yùn)動(dòng)學(xué)模型 132
6.3.1 底盤運(yùn)動(dòng)學(xué)模型選擇 152
SLAM篇
第7章 SLAM中的數(shù)學(xué)基礎(chǔ)
7.1.1 數(shù)據(jù)關(guān)聯(lián)、收斂和一致性 160
7.2.1 狀態(tài)估計(jì)問題 164
7.2.2 概率運(yùn)動(dòng)模型 166
7.3.1 估計(jì)量的性質(zhì) 182
7.3.2 估計(jì)量的構(gòu)建 183
7.4 基于貝葉斯網(wǎng)絡(luò)的狀態(tài)估計(jì) 193
7.4.2 參數(shù)化實(shí)現(xiàn) 196
7.4.3 非參數(shù)化實(shí)現(xiàn) 202
7.5 基于因子圖的狀態(tài)估計(jì) 206
第8章 激光SLAM系統(tǒng)
第9章 視覺SLAM系統(tǒng)
第10章 其他SLAM系統(tǒng)
10.3 機(jī)器學(xué)習(xí)與SLAM 379
10.3.1 機(jī)器學(xué)習(xí) 379
自主導(dǎo)航篇
第11章 自主導(dǎo)航中的數(shù)學(xué)基礎(chǔ)
11.2.1 實(shí)時(shí)定位 420
11.3.1 常見的路徑規(guī)劃算法 423
11.3.2 帶約束的路徑規(guī)劃算法 430
11.3.3 覆蓋的路徑規(guī)劃算法 434
11.4.1 基于PID的運(yùn)動(dòng)控制 437
11.4.2 基于MPC的運(yùn)動(dòng)控制 438
11.4.3 基于強(qiáng)化學(xué)習(xí)的運(yùn)動(dòng)控制 441
11.5 強(qiáng)化學(xué)習(xí)與自主導(dǎo)航 442
11.5.1 強(qiáng)化學(xué)習(xí) 443
11.5.2 基于強(qiáng)化學(xué)習(xí)的自主導(dǎo)航 465
第12章 典型自主導(dǎo)航系統(tǒng)
12.1 ros-navigation導(dǎo)航系統(tǒng) 470
12.1.4 路徑規(guī)劃改進(jìn) 492
12.2 riskrrt導(dǎo)航系統(tǒng) 498
12.3 autoware導(dǎo)航系統(tǒng) 499
12.4 導(dǎo)航系統(tǒng)面臨的一些挑戰(zhàn) 500
第13章 機(jī)器人SLAM導(dǎo)航綜合實(shí)戰(zhàn)
13.1 運(yùn)行機(jī)器人上的傳感器 502
13.1.1 運(yùn)行底盤的ROS驅(qū)動(dòng) 503
13.1.2 運(yùn)行激光雷達(dá)的ROS驅(qū)動(dòng) 503
13.1.3 運(yùn)行IMU的ROS驅(qū)動(dòng) 504
13.1.4 運(yùn)行相機(jī)的ROS驅(qū)動(dòng) 504
13.1.5 運(yùn)行底盤的urdf模型 505
13.2.1 運(yùn)行激光SLAM建圖功能 507
13.2.2 運(yùn)行視覺SLAM建圖功能 508
13.2.3 運(yùn)行激光與視覺聯(lián)合建圖功能 508
13.3 運(yùn)行自主導(dǎo)航 509
13.4 基于自主導(dǎo)航的應(yīng)用 510
附錄A Linux與SLAM性能優(yōu)化的探討
附錄B 習(xí)題
本作品為”cnblogs@小虎哥哥愛學(xué)習(xí)"的原創(chuàng)文章,禁止任何形式的轉(zhuǎn)載及抄錄,侵權(quán)違法行為必究到底