美文网首页我爱编程
ROS学习笔记1:在树莓派3上部署ROS

ROS学习笔记1:在树莓派3上部署ROS

作者: 一般的路人丙 | 来源:发表于2017-05-20 16:51 被阅读387次

    学了好久,然后依然很混乱,于是决定整理一下笔记

    安装 Raspbian jessie

    安装 Raspbian 非常简单,只需要三步:

    • 下载镜像
    • 写入TF卡(MicroSD)
    • 开启SSH

    下载镜像

    首先打开树莓派官网,点击 DOWNLOADS,然后选择 RASPBIAN,来到Raspbian下载页面,下载 RASPBIAN JESSIE WITH PIXEL 的种子。通过种子来下载会快一些,而且下载后不需要校验。

    下载种子

    写入TF卡

    官方推荐使用Etcher来写入,试用了一下,简单快捷,不过有的情况会出错,没有查出来原因。

    • 下载 Etcher 并安装。
    • 把TF卡插入读卡器并连接电脑。
    • 打开 Etcher ,从硬盘上选择刚才下载的镜像。
    • 选择你要写入的TF卡。
    • 检查确认你的选项,并点击“Flash!”开始写入。

    写入时系统可能会提示驱动器未格式化,千万不要格式化
    写入完成后,可以看到TF卡有两个分区(驱动器):一个是启动分区,可以打开;另一个是系统分区,Windows不能识别,显示未格式化。

    开启SSH

    单独为树莓派3准备一套键鼠和显示器是很奢侈的事情,所以开启SSH就变成了通常做法。
    打开启动分区,在里面新建一个文件夹,命名为 SSH 。

    ~回顾一下

    上面大部分内容其实都是在解释说明,要做的其实很少,只有以下3步:

    1. 去官网下载镜像
    2. 安装Etcher,并把镜像写入TF卡
    3. 在启动分区新建一个名为 SSH 的文件夹

    配置 Raspbian

    配置时需要说明的更多一些,但其实要做的东西也很少,熟悉之后几分钟就能搞定。
    在这部分需要做的事情是:

    • 将树莓派接入网络
    • 设置SSH
    • 更改Host和密码
    • 设置语言与时区
    • 调整分辨率并开启VNCServer
    • 配置FTP

    将树莓派接入网络

    注意,在这部分,你最好使用路由器来建立局域网。
    一开始如果能用键鼠和显示器,就能很轻松的连接上无线网络。如果没有,也可以先通过网线将树莓派连接入局域网(需要有DHCP分配IP地址,所以校园网不行)。
    接好网线后,装上刚才制作好的TF卡,然后连接电源。大约20秒后,就可以通过SSH访问树莓派了。
    Windows下常用的SSH软件是PuTTY,但是这个官网是“不存在的”,所以从这里下载。绿色软件,解压即可使用。
    运行putty.exe,填入主机名称 raspberrypi,点击 open 按钮,即可开启链接。

    PuTTY的界面

    首次连接会提示Host key未知(或不一致),因为是自己的树莓派,添加即可。

    Paste_Image.png

    提示 login as: 时,输入用户名 pi
    提示 pi@raspberrypi's password: 时,输入密码,默认是raspberry

    Paste_Image.png

    登录成功是这样的:

    Paste_Image.png

    这时,树莓派的命令行界面(终端)就显示在putty中了,在putty中的操作和在树莓派上直接操作的效果是一样的。输入exit可以退出终端,如果putty界面关闭,终端内运行的命令也都会结束。

    配置SSH

    生成SSH的密钥

    因为使用PuTTY登陆,所以此时最好使用PuTTY自带的生成器来生成密钥。打开puttygen.exe,并选择Generate,之后会提示在空白处随意移动鼠标以生成随机数。

    Paste_Image.png

    之后会显示生成的密钥信息,如下图:


    Paste_Image.png

    图中①是公钥(锁),私钥(钥匙)并不会显示出来。在②处设置使用此私钥时需要输入的密码(可以不设置密码),在③处保存私钥,一般不需要保存公钥(因为载入私钥后就会显示公钥)。

    设置SSH公钥

    存储私钥后复制①处的公钥,然后在putty界面中依次输入以下命令:

    $ mkdir ~/.ssh
    $ echo ssh-rsa AAAAB3……把本行ssh到最后的部分替换成自己的公钥……8xyFzQ== rsa-key-20170521
    $ chmod 600 ~/.ssh/authorized_keys
    $ chmod 700 ~/.ssh
    

    ** 解释一下上面的命令:**

    • $ 表示行首的提示符,在终端会以“用户名@计算机名: 路径 $”的格式显示,比如 pi@raspberrypi:~ $,表示用户pi在计算机raspberrypi上,当前路径是pi的home目录。
      ~ 表示用户的home目录,也就是每个用户自己的主目录,用户所有的文件都会存在这个主目录下面。
      / 表示系统的根目录,所有的文件都“放”在这个根目录下面。
      在教程中为了避免混乱,一般不写$之前的信息,写$以区分每一行命令。
    • 以$开头的每一行都是一行命令,一行命令会包含命令参数
      每一行命令第一个空格之前是命令,之后是参数,参数以空格分隔。一个命令可以使用参数调用另一个命令。
      使用 “man 命令名”,可以查看命令的使用方法;也可以使用“命令名 --help” 来查看帮助。
    • 如果一行命令执行中不需要输入内容,比如确定yes or no,那么可以将这样的多行命令同时复制入putty,在putty中,右键为粘贴,左键框选复制。上面这几行内容都没有确认提示,所以可以先在笔记中编辑好,然后一起复制到终端里,注意最后一行可能需要手动回车。
    • 上面使用的几条命令中:
      mkdir 的功能是建立目录,
      echo显示内容,常与 > 或者 >> 配合使用来更改文件内容。> 功能是将输出内容保存为文件,>> 功能是将输出内容追加到文件。
      chmod 的功能是改变文件或目录属性。

    上述命令执行后,可以新打开一个putty,使用私钥登陆。

    测试使用私钥登陆

    先填入主机名,


    Paste_Image.png

    先填入主机名,然后在putty的左侧选择 Connection 中 SSH 的 Auth,在右侧最下方 Private key file for authentication中选择刚才保存的私钥。点右下角Open,启动终端,在输入用户名后若显示 Authenticating with public key "……" 则说明私钥认证成功。若私钥没有密码,则直接登陆成功。若有密码,则提示输入:

    Paste_Image.png

    若使用私钥登陆成功,则可以关闭SSH的密码登陆,以提高安全性。

    $ sudo nano /etc/ssh/sshd_config
    

    找到:
    PasswordAuthentication yes
    修改为:
    PasswordAuthentication no
    按Ctrl+X退出,按y保存,回车确定保存名称。

    nano 是 linux 中常用的文本编辑器,没有vim那么高大上,但是简单易用。

    更改设置后重启ssh服务以使设置生效。

    $ sudo systemctl restart ssh.service
    

    更改Host和密码

    在网络中,每个计算机都拥有自己唯一的名称(主机名 Hostname,常简称Host),树莓派系统默认的Host是raspberrypi,不具有唯一性,因此需要修改这个值。树莓派有更改设置的命令行程序raspi-config

    $ sudo raspi-config
    
    Paste_Image.png

    选择第一项更改密码,确认后,输入密码回车,再次输入密码回车。成功会显示密码更改成功。确认后返回程序主界面。

    Paste_Image.png

    选择第二项更改 Hostname ,提示只能使用小写字母及0~9的数字及连字符 -,确认后输入,按回车确认。

    设置语言与时区

    选择第四项 Localisation Options

    Paste_Image.png

    其中第一项是更改语言设置,第二项是更改时区。
    按空格取消或选中选项,选中zh_CN.UTF-8

    Paste_Image.png

    按 Tab键 移动光标至 Ok,回车。
    按下键移动光标至zh_CN.UTF-8,回车。
    稍等片刻后会返回设置界面。

    开启VNCServer并调整分辨率

    选择第5项 Interfacing Options
    其中第3项是开启VNCServer(远程桌面)
    选择第3项,并移动到Yes,回车。确认后返回主界面。
    选择第7项 Advanced Options
    其中第5项是更改分辨率
    选择第5项,选择1280x720,回车。确认后返回主界面。
    按Tab键移动到Finish,回车,会提示重启,选择Yes,回车。
    由于树莓派重启,终端连接断开,会提示网络连接意外断开,如下图:


    Paste_Image.png

    确认后PuTTY会进入非激活状态,关闭窗口,如下图:


    Paste_Image.png

    配置连接设置

    重新打开putty.exe,输入新的主机名,设置私钥。
    在左侧 Connection 中选择 Data ,在右侧中第一项中输入自动登陆用户名 pi 。

    Paste_Image.png

    在左侧选择 Session,在 Save Sessions 中输入登录设置名称,点右侧Save保存设置。

    Paste_Image.png

    然后双击配置名启动终端。

    设置VNC Viewer并连接无线网络

    我们常用VNC Viewer来连接树莓派,来使用桌面功能。
    新建一个链接,并在VNC Server中输入主机名,点Ok开启链接
    会提示认证失败,可能不安全,点继续。
    然后输入登录的用户名和密码。


    Paste_Image.png

    在右上角设置无线连接,选择自己的网络,并输入密码。

    配置FTP

    执行下列命令以安装vsftpd FTP服务器

    $ sudo apt update
    $ sudo apt install vsftpd -y
    $ sudo service vsftpd start
    $ sudo nano /etc/vsftpd.conf
    

    找到以下项,并更改。# 开头的行表示注释,常用#来关闭某项设置,可以删除设置前的 #,以使该项生效。
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022

    $ sudo service vsftpd restart
    

    之后可以使用WinSCP等软件以FTP方式登录树莓派。

    建议在配置完后备份TF卡。

    安装 ROS Kinetic

    调整页面文件大小

    增加页面文件大小是为了解决编译时内存不足的问题。

    $ sudo nano /etc/dphys-swapfile
    

    找到 CONF_SWAPSIZE ,并将值修改为2048,保存退出并重启树莓派。

    配置源

    $ sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    $ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
    

    然后更新一下

    $ sudo apt-get update
    $ sudo apt-get upgrade
    

    安装依赖

    $ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
    

    然后初始化一下

    $ sudo rosdep init
    $ rosdep update
    

    编译源码

    首先建立工作空间

    $ mkdir -p ~/ros_catkin_ws
    $ cd ~/ros_catkin_ws
    

    然后配置一下安装文件,初始化工作空间,并下载源码

    $ rosinstall_generator desktop rosserial perception joystick_drivers --rosdistro kinetic --deps --wet-only --exclude perception_pcl --tar > kinetic-custom_ros.rosinstall
    $ wstool init src kinetic-custom_ros.rosinstall
    $ wstool update -t src
    

    为源码添加依赖

    $ rosdep install --from-paths src --ignore-src --rosdistro kinetic -y -r --os=debian:jessie
    $ sudo cp /usr/share/cmake-2.8/Modules/FindEigen3.cmake /usr/share/cmake-3.6/Modules/
    

    开始编译

    $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic
    

    编译之后添加ROS配置到bash启动项

    $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    $ echo "export EDITOR='nano -w'" >> ~/.bashrc
    

    如果不用蓝牙,可以选择Ubuntu Mate

    安装可以按照x64下面的Ubuntu安装,会简单很多。

    $ sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
    
    $ sudo apt-get update
    $ sudo apt-get install ros-kinetic-desktop-full
    
    $ sudo rosdep init
    $ rosdep update
    
    $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    $ source ~/.bashrc
    $ sudo apt install python-rosinstall
    

    相关文章

      网友评论

      • PJovy:请教一下博主,我按照官方论坛上说的,新建了一个ssh文件,设置了静态ip192.168.137.111,可以ping通,但是无法连接,很奇怪

      本文标题:ROS学习笔记1:在树莓派3上部署ROS

      本文链接:https://www.haomeiwen.com/subject/fzwuxxtx.html