SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——3.装机后一些实用软件安装和系统设置

 温馨提示

本篇文章已经收录在我最新出版的书籍《机器人SLAM导航核心技术与实战》,感兴趣的读者可以购买纸质书籍来进行更加深入和系统性的学习,购买链接如下:

摘要                                              

通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识。接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发。本章将从树莓派3的开发环境搭建入手,为后续ros开发、slam导航及语音交互算法做准备。本章内容:

1.安装系统ubuntu_mate_16.04

2.安装ros-kinetic

3.装机后一些实用软件安装和系统设置

4.PC端与robot端ROS网络通信

5.Android手机端与robot端ROS网络通信

6.树莓派USB与tty串口号绑定

7.开机自启动ROS节点



3.装机后一些实用软件安装和系统设置 

虽然我们顺利安装了ubuntu-mate-16.04系统,并且在系统上装好了ROS-kinetic发行版,为了后面跟高效和便捷的开发,这里将进行一些非常实用软件的安装和系统设置。

3.1.开机自动登录                   

装完系统后第一次开机,会要求设置用户名和密码,这里应该设置用户开机自动登录,只有登录后树莓派3才能自动连接到无线网络,从而才能远程控制。如果装机时已经设置了,请直接跳过这一部分;如果你搞忘记或遗漏了,没有设置开机自动登录,也不要紧,用下面的的方法进行自动登录设置。

打开文件/usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greet.conf,在[seat:*]节点下修改或添加以下代码

autologin-user=ubuntu #ubuntu是要自动登录的用户名

3.2.超级用户root密码设置             

装完ubuntu-mate-16.04系统后,root用户默认是没有密码的;用普通用户ubuntusudo权限去设置root用户的密码。

反正我们是用于学习,出于方便记忆的考虑,所以和之前设置ubuntu的用户名和密码一样,这里设置root的用户名和密码也一样,也就是root用户的密码也是root

ubuntu@ubuntu-desktop:~$ sudo passwd root 
[sudo] password for ubuntu:    #键入ubuntu密码 
Enter new UNIX password:       #键入root新密码 
Retype new UNIX password:      #确认root新密码 
passwd: password updated successfully

root密码设置成功后,su root登录进去验证一下,如果能登录就设置成功了。

3.3.扩展SWAP空间                  

由于后续在树莓派3上需要编译一些大型的程序和运行复杂的SLAM算法,默认的物理内存1GB是不够用的,常常造成卡机死机等现象,这里需要添加SWAP扩展空间,其实就是当系统内存不足时会用硬盘上SWAP分区作为虚拟内存

由于我的microSD卡是32GB的,所以可以多分配一些给SWAP,所以分配4GBSWAP空间。具体步骤:

#先关闭swap
cd /var 
sudo swapoff /var/swap 

#重设swap大小1M*4096=4GB,会花较长时间,请耐心等待 
sudo dd if=/dev/zero of=swap bs=1M count=4096
 
#格式化 
sudo mkswap /var/swap 

#开启swap 
sudo swapon /var/swap 

#设置开机启动,在/etc/fstab文件中添加如下代码 
/var/swap swap swap defaults 0 0 
#查看当前已生效的swap 
swapon -s 
#查看当前swap使用情况 
free -m

3.4.连接wifi网络                    

为了让机器人启动后,我们能通过网络远程访问需要给机器人配置好网络连接,并分配静态IP,让机器人开机后就能自动连接wifi。关于设置的内容已经在上面安装ros-kinetic详细介绍了,有需要的直接前去翻阅就行。

3.5.安装chromium浏览器              

前一段时间,在ubuntu-mate-16.04上安装ROS后,ubuntu-mate-16.04系统自带的Firefox浏览器不能用了,Firefox最近对这个故障进行了修复。不过为了保险起见,还是推荐安装谷歌为linux系统推出的浏览器chromium,跟我们平时用的闻名于世的chrome浏览器是差不多的。安装很简单,就一条命令。

sudo apt-get install chromium-browser

3.6.安装vimssh工具                 

vimLinux中一款很经典的代码文本编辑器,不论是本地还是远程编辑文本都很强大;ssh功能很强大,不紧可以提供用户远程登录控制系统和编辑文件,还提供命令终端下的scp远程文件传输。安装很简单,几条命令就搞定。

#安装vim
sudo apt-get install vim
#安装ssh服务端
sudo apt-get install openssh-server
#开启ssh服务
sudo service ssh start
#设置开机自启动ssh服务,在开机自启动脚本/etc/rc.local加入下面这条命令,
#注意加入位置是在exit 0这一句之前
service ssh start 
#检查ssh是否启动,使用下面命令
ps -e | grep ssh
如果输出中含有ssh-agent和sshd就说明成功了 

3.7.通过ssh远程登录到机器人            

树莓派3主板是安装在miiboo机器人上的,由于机器人要在地上自由移动,给机器人上的树莓派配一个HDMI显示器和鼠标键盘用于程序调试显然是不方便的。一个很好的方法是,工作端PC和机器人连接到同一个路由器完成局域网组网,然后PC端用ssh远程登录到机器人,这样就可以在工作PC端对机器人上的程序和文件进行调试开发了。

ssh远程登录方法:

#在PC端上打开终端,ssh远程登录机器人,
#ubuntu为登录用户名,192.168.0.117为登录机器的IP,根据实际替换
ssh ubuntu@192.168.0.117

#退出ssh远程登录
exit

一旦PC端打开的终端窗口ssh远程登录机器人后,就可以在该终端下像在机器人上使用终端一样进行操作了。PC端可以打开多个终端窗口ssh远程登录机器人,这样在不同的终端下可以开启机器人上不同的程序。

3.8.在工作PC端远程编辑机器人上的文件      

已经介绍了通过ssh远程登录机器人的方法,其实可以直接在登入的终端下用vim对机器人上的文件进行查看编辑。但是,如果需要同时编辑多个文件,或对一个软件项目源码进行编辑,vim就不方便了。

这里推荐在PC端安装IDE开发工具(比较推荐atom,不过sublime text也不错,根据个人喜好选择吧),然后将机器人上的系统文件夹远程挂载在PC端系统,这样就可以在PC端上用IDE开发工具直接对远程挂载过来的文件及文件夹进行编辑了。

PC端安装IDE开发工具atom很简单,直接在ubuntu软件中搜索atom,然后点击安装就行了,如图21

(图21)在PC端安装IDE开发工具atom

将机器人上的系统文件夹远程挂载在PC端系统,首先打开[文件]管理器,找到左侧栏的[连接到服务器],在服务器地址栏输入远程文件地址(如sftp://192.168.0.117/home/ubuntu,这里的sftp是协议,192.168.0.117是远程设备IP地址,/home/ubuntu是远程设备中想要被挂载的文件夹请根据实际替换),然后点击[连接],这是需要输入远程设备的登录名和密码,如图22

(图22)将机器人上的系统文件夹远程挂载在PC端系统

挂载好后,就可以使用各种我们喜欢的编辑工具对文件夹中的文件进行编辑了,如图23,不过远程文件系统挂载会比较占用网路带宽,不用时建议尽量断开。

(图23)挂载好后的远程文件夹

后记              

------SLAM+语音机器人DIY系列【目录】快速导览------

第1章:Linux基础

1.Linux简介

2.安装Linux发行版ubuntu系统

3.Linux命令行基础操作

第2章:ROS入门

1.ROS是什么

2.ROS系统整体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的作用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览

第3章:感知与大脑

1.ydlidar-x4激光雷达

2.带自校准九轴数据融合IMU惯性传感器

3.轮式里程计与运动控制

4.音响麦克风与摄像头

5.机器人大脑嵌入式主板性能对比

6.做一个能走路和对话的机器人

第4章:差分底盘设计

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通信协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标

第5章:树莓派3开发环境搭建

1.安装系统ubuntu_mate_16.04

2.安装ros-kinetic

3.装机后一些实用软件安装和系统设置

4.PC端与robot端ROS网络通信

5.Android手机端与robot端ROS网络通信

6.树莓派USB与tty串口号绑定

7.开机自启动ROS节点

第6章:SLAM建图与自主避障导航

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控

第7章:语音交互与自然语言处理

1.语音交互相关技术

2.机器人语音交互实现

3.自然语言处理云计算引擎

第8章:高阶拓展

1.miiboo机器人安卓手机APP开发

2.centos7下部署Django(nginx+uwsgi+django+python3)

 


 

参考文献

 

[1] 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

 

 

 

 

前言
编程基础篇
第1章 ROS入门必备知识
1.1 ROS简介 2
1.1.1 ROS的性能特色 2
1.1.2 ROS的发行版本 3
1.1.3 ROS的学习方法 3
1.2 ROS开发环境的搭建 3
1.2.1 ROS的安装 4
1.2.2 ROS文件的组织方式 4
1.2.3 ROS网络通信配置 5
1.2.4 集成开发工具 5
1.3 ROS系统架构 5
1.3.1 从计算图视角理解ROS架构 6
1.3.2 从文件系统视角理解ROS架构 7
1.3.3 从开源社区视角理解ROS架构 8
1.4 ROS调试工具 8
1.4.1 命令行工具 9
1.4.2 可视化工具 9
1.5 ROS节点通信 10
1.5.1 话题通信方式 12
1.5.2 服务通信方式 15
1.5.3 动作通信方式 19
1.6 ROS的其他重要概念 25
1.7 ROS 2.0展望 28
1.8 本章小结 28
第2章 C++编程范式
2.1 C++工程的组织结构 29
2.1.1 C++工程的一般组织结构 29
2.1.2 C++工程在机器人中的组织结构 29
2.2 C++代码的编译方法 30
2.2.1 使用g++编译代码 31
2.2.2 使用make编译代码 32
2.2.3 使用CMake编译代码 32
2.3 C++编程风格指南 33
2.4 本章小结 34
第3章 OpenCV图像处理
3.1 认识图像数据 35
3.1.1 获取图像数据 35
3.1.2 访问图像数据 36
3.2 图像滤波 37
3.2.1 线性滤波 37
3.2.2 非线性滤波 38
3.2.3 形态学滤波 39
3.3 图像变换 40
3.3.1 射影变换 40
3.3.2 霍夫变换 42
3.3.3 边缘检测 42
3.3.4 直方图均衡 43
3.4 图像特征点提取 44
3.4.1 SIFT特征点 44
3.4.2 SURF特征点 50
3.4.3 ORB特征点 52
3.5 本章小结 54
硬件基础篇
第4章 机器人传感器
4.1 惯性测量单元 56
4.1.1 工作原理 56
4.1.2 原始数据采集 60
4.1.3 参数标定 65
4.1.4 数据滤波 73
4.1.5 姿态融合 75
4.2 激光雷达 91
4.2.1 工作原理 92
4.2.2 性能参数 94
4.2.3 数据处理 96
4.3 相机 100
4.3.1 单目相机 101
4.3.2 双目相机 107
4.3.3 RGB-D相机 109
4.4 带编码器的减速电机 111
4.4.1 电机 111
4.4.2 电机驱动电路 112
4.4.3 电机控制主板 113
4.4.4 轮式里程计 117
4.5 本章小结 118
第5章 机器人主机
5.1 X86与ARM主机对比 119
5.2 ARM主机树莓派3B+ 120
5.2.1 安装Ubuntu MATE 18.04 120
5.2.2 安装ROS melodic 122
5.2.3 装机软件与系统设置 122
5.3 ARM主机RK3399 127
5.4 ARM主机Jetson-tx2 128
5.5 分布式架构主机 129
5.5.1 ROS网络通信 130
5.5.2 机器人程序的远程开发 130
5.6 本章小结 131
第6章 机器人底盘
6.1 底盘运动学模型 132
6.1.1 两轮差速模型 132
6.1.2 四轮差速模型 136
6.1.3 阿克曼模型 140
6.1.4 全向模型 144
6.1.5 其他模型 148
6.2 底盘性能指标 148
6.2.1 载重能力 148
6.2.2 动力性能 148
6.2.3 控制精度 150
6.2.4 里程计精度 150
6.3 典型机器人底盘搭建 151
6.3.1 底盘运动学模型选择 152
6.3.2 传感器选择 152
6.3.3 主机选择 153
6.4 本章小结 155
SLAM篇
第7章 SLAM中的数学基础
7.1 SLAM发展简史 158
7.1.1 数据关联、收敛和一致性 160
7.1.2 SLAM的基本理论 161
7.2 SLAM中的概率理论 163
7.2.1 状态估计问题 164
7.2.2 概率运动模型 166
7.2.3 概率观测模型 171
7.2.4 概率图模型 173
7.3 估计理论 182
7.3.1 估计量的性质 182
7.3.2 估计量的构建 183
7.3.3 各估计量对比 190
7.4 基于贝叶斯网络的状态估计 193
7.4.1 贝叶斯估计 194
7.4.2 参数化实现 196
7.4.3 非参数化实现 202
7.5 基于因子图的状态估计 206
7.5.1 非线性最小二乘估计 206
7.5.2 直接求解方法 206
7.5.3 优化方法 208
7.5.4 各优化方法对比 218
7.5.5 常用优化工具 219
7.6 典型SLAM算法 221
7.7 本章小结 221
第8章 激光SLAM系统
8.1 Gmapping算法 223
8.1.1 原理分析 223
8.1.2 源码解读 228
8.1.3 安装与运行 233
8.2 Cartographer算法 240
8.2.1 原理分析 240
8.2.2 源码解读 247
8.2.3 安装与运行 258
8.3 LOAM算法 266
8.3.1 原理分析 266
8.3.2 源码解读 267
8.3.3 安装与运行 270
8.4 本章小结 270
第9章 视觉SLAM系统
9.1 ORB-SLAM2算法 274
9.1.1 原理分析 274
9.1.2 源码解读 310
9.1.3 安装与运行 319
9.1.4 拓展 327
9.2 LSD-SLAM算法 329
9.2.1 原理分析 329
9.2.2 源码解读 334
9.2.3 安装与运行 337
9.3 SVO算法 338
9.3.1 原理分析 338
9.3.2 源码解读 341
9.4 本章小结 341
第10章 其他SLAM系统
10.1 RTABMAP算法 344
10.1.1 原理分析 344
10.1.2 源码解读 351
10.1.3 安装与运行 357
10.2 VINS算法 362
10.2.1 原理分析 364
10.2.2 源码解读 373
10.2.3 安装与运行 376
10.3 机器学习与SLAM 379
10.3.1 机器学习 379
10.3.2 CNN-SLAM算法 411
10.3.3 DeepVO算法 413
10.4 本章小结 414
自主导航篇
第11章 自主导航中的数学基础
11.1 自主导航 418
11.2 环境感知 420
11.2.1 实时定位 420
11.2.2 环境建模 421
11.2.3 语义理解 422
11.3 路径规划 422
11.3.1 常见的路径规划算法 423
11.3.2 带约束的路径规划算法 430
11.3.3 覆盖的路径规划算法 434
11.4 运动控制 435
11.4.1 基于PID的运动控制 437
11.4.2 基于MPC的运动控制 438
11.4.3 基于强化学习的运动控制 441
11.5 强化学习与自主导航 442
11.5.1 强化学习 443
11.5.2 基于强化学习的自主导航 465
11.6 本章小结 467
第12章 典型自主导航系统
12.1 ros-navigation导航系统 470
12.1.1 原理分析 470
12.1.2 源码解读 475
12.1.3 安装与运行 479
12.1.4 路径规划改进 492
12.1.5 环境探索 496
12.2 riskrrt导航系统 498
12.3 autoware导航系统 499
12.4 导航系统面临的一些挑战 500
12.5 本章小结 500
第13章 机器人SLAM导航综合实战
13.1 运行机器人上的传感器 502
13.1.1 运行底盘的ROS驱动 503
13.1.2 运行激光雷达的ROS驱动 503
13.1.3 运行IMU的ROS驱动 504
13.1.4 运行相机的ROS驱动 504
13.1.5 运行底盘的urdf模型 505
13.1.6 传感器一键启动 506
13.2 运行SLAM建图功能 506
13.2.1 运行激光SLAM建图功能 507
13.2.2 运行视觉SLAM建图功能 508
13.2.3 运行激光与视觉联合建图功能 508
13.3 运行自主导航 509
13.4 基于自主导航的应用 510
13.5 本章小结 511
附录A Linux与SLAM性能优化的探讨
附录B 习题
posted @ 2019-02-21 01:36  小虎哥哥爱学习  阅读(4299)  评论(0编辑  收藏  举报