ROS是一种分布式设计框架,针对小型或微型机器人平台的控制系统,可以选择多处理器的实现策略。具体实现是“PC + 嵌入式”,可以使用嵌入式系统(比如树莓派)充当机器人本体的控制系统,而PC则实现远程监控,通过前者实现数据采集与直接的底盘控制,而后者则远程实现图形显示以及功能运算。本文包含一下内容:
1.树莓派概述;
2.实现树莓派与PC的分布式系统搭建;
3.使用 ssh 远程连接树莓派;
4.树莓派端安装并配置 ros_arduino_bridge。
一、树莓派概述
概念:Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。
结构:它是一款基于ARM 的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能,下图为树莓派4b。
配件:单独一块树莓派主板是无法运行的,必须集成一些配件才能实现一定的功能,树莓派周边配件是比较丰富的,比如:USB电源、SD卡、读卡器、HDMI连接线、显示屏、键盘、鼠标、保护壳、风扇等等,除此之外还有各式各样的传感器:声音传感器、温度传感器、土壤湿度传感器....对于我们教程而言,所需的配件比较简单,硬件清单如下:
1.树莓派主板
2.电源线
3.SD卡(已安装 Ubuntu 以及 ROS)
4.显示屏或 HDMI采集卡以及配套的数据线
5.鼠标、键盘
接线以及使用:
二、分布式框架
当前分布式框架搭建时,树莓派是作为主机,而PC则作为从机。
2.1 树莓派准备工作
为树莓派连接无线网络,并设置固定IP,实现如下:
1.硬件准备:使用显示屏或 HDMI采集卡连接树莓派并启动;
2.为树莓派连接无线网络;
3.为树莓派配置静态IP,具体操作如图:
2.2 ROS分布式通信
ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。
因此,ROS对网络配置有某些要求:
1.所有端口上的所有机器之间必须有完整的双向连接。
2.每台计算机必须通过所有其他计算机都可以解析的名称来公告自己。
2.2.1 准备
先要保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式。
2.2.2 配置文件修改
分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名:
主机端: 从机的IP 从机计算机名
从机端: 主机的IP 主机计算机名
设置完毕,可以通过 ping 命令测试网络通信是否正常。
IP地址查看名: ifconfig
计算机名称查看: hostname
2.2.3 配置主机IP
配置主机的 IP 地址,在~/.bashrc 追加:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP
2.2.4 配置从机IP
配置从机的 IP 地址,从机可以有多台,每台都做如下设置:~/.bashrc 追加
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP
2.2.5 测试
1.主机启动 roscore(必须)
2.主机启动订阅节点,从机启动发布节点,测试通信是否正常
3.反向测试,主机启动发布节点,从机启动订阅节点,测试通信是否正常
2.3 SSH远程连接
SSH(Secure Shell)是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时,SSH都会自动对其进行加密。数据到达目的地时,SSH自动对加密数据进行解密。整个过程都是透明的,使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。
SSH实现架构上分为客户端和服务器端两大部分,客户端是数据的发送方,服务端是数据的接收方,当前场景下,我们需要从PC端发送数据到树莓派,那么PC端属于客户端,而树莓派属于服务端,整个实现具体流程是:
1.分别安装SSH客户端与服务端
2.服务端启动SSH服务
3.客户端远程登陆服务端
4.实现数据传输
2.3.1 安装SSH客户端与服务端
默认情况下,Ubuntu系统已经安装了SSH客户端,因此只需要在树莓派安装服务端即可(如果树莓派安装的是服务版的Ubuntu,默认会安装SSH服务并已设置成了开机自启动)
sudo apt-get install openssh-server
如果客户端需要自行安装,那么调用如下命令:
sudo apt-get install openssh-client
2.3.2 服务端启动SSH服务
树莓派启动 ssh 服务:
sudo /etc/init.d/ssh start
启动后查看服务是否正常运行:
ps -e | grep ssh
如果启动成功,会包含 sshd 与 ssh 两个程序。以后需要频繁的使用ssh登录树莓派,为了简化实现,可以将树莓派的ssh服务设置为开机自启动,命令如下:
sudo systemctl enable ssh
2.3.3客户端远程登陆服务端
登陆树莓派可以调用如下命令:
ssh 账号@ip地址
然后根据提示,录入登陆密码,即可成功登陆。如果退出登陆,可以调用exit命令:
exit
2.3.4实现数据传输
上传文件:
scp 本地文件路径 账号@ip:树莓派路径
上传文件夹:
scp -r 本地文件夹路径 账号@ip:树莓派路径
下载文件:
scp 账号@ip:树莓派路径 本地文件夹路径
下载文件夹:
scp -r 账号@ip:树莓派路径 本地文件夹路径
2.3.5 使用优化
每次登陆树莓派时,都需要输入密码,使用不方便,可以借助密钥简化登陆过程,实现免密登陆,提高操作效率,实现思想是:生成一对公钥私钥,私钥存储在本地,公钥上传至服务器,每次登陆时,本地直接上传私钥到服务器,服务器有匹配的公钥就认为是合法用户,直接创建SSH连接即可。具体实现步骤只有两步:
1.生成密钥对
本地客户端生成公私钥:(一路回车默认即可)
ssh-keygen
上面这个命令会在用户目录.ssh文件夹下创建公私钥:
id_rsa (私钥)
id_rsa.pub (公钥)
2.将公钥上传至树莓派
上传命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip
上面这条命令是写到服务器上的ssh目录下,该目录下有文件authorized_keys保存了公钥内容。以后再登陆树莓派就无需录入密码了。
2.4 安装ros_arduino_bridge
将ros_arduino_bridge功能包上传至树莓派,并在PC端通过键盘控制小车的运动了,实现流程如下:
1.系统准备;
2.程序修改;
3.从PC端上传程序至树莓派;
4.分别启动PC与树莓派端相关节点,并实现运动控制。
2.4.1 系统准备
ros_arduino_bridge是依赖于python-serial功能包的,请先在树莓派端安装该功能包,安装命令:
$ sudo apt-get install python-serial
或
$ sudo pip install --upgrade pyserial
$ sudo easy_install -U pyserial
2.4.2 程序修改
ros_arduino_bridge的ROS端功能包主要是使用 ros_arduino_python,程序入口是该包launch目录下的arduino.launch文件,内容如下:
<launch>
<node name="arduino" pkg="ros_arduino_python" type="arduino_node.py" output="screen">
<rosparam file="$(find ros_arduino_python)/config/my_arduino_params.yaml" command="load" />
</node>
</launch>
需要载入yaml格式的配置文件,该文件在 config 目录下已经提供了模板,只需要复制文件并按需配置即可,复制文件并重命名,配置如下:
# For a direct USB cable connection, the port name is typically
# /dev/ttyACM# where is # is a number such as 0, 1, 2, etc
# For a wireless connection like XBee, the port is typically
# /dev/ttyUSB# where # is a number such as 0, 1, 2, etc.
port: /dev/ttyACM0 #视情况设置,一般设置为 /dev/ttyACM0 或 /dev/ttyUSB0
baud: 57600 #波特率
timeout: 0.1 #超时时间
rate: 50
sensorstate_rate: 10
use_base_controller: True #启用基座控制器
base_controller_rate: 10
# For a robot that uses base_footprint, change base_frame to base_footprint
base_frame: base_footprint #base_frame 设置
# === Robot drivetrain parameters
wheel_diameter: 0.065 #车轮直径
wheel_track: 0.21 #轮间距
encoder_resolution: 3960#编码器精度(一圈的脉冲数 * 倍频 * 减速比)
#gear_reduction: 1 #减速比
#motors_reversed: False #转向取反
# === PID parameters PID参数,需要自己调节
Kp: 5
Kd: 45
Ki: 0
Ko: 50
accel_limit: 1.0
# === Sensor definitions. Examples only - edit for your robot.
# Sensor type can be one of the follow (case sensitive!):
# * Ping
# * GP2D12
# * Analog
# * Digital
# * PololuMotorCurrent
# * PhidgetsVoltage
# * PhidgetsCurrent (20 Amp, DC)
sensors: {
#motor_current_left: {pin: 0, type: PololuMotorCurrent, rate: 5},
#motor_current_right: {pin: 1, type: PololuMotorCurrent, rate: 5},
#ir_front_center: {pin: 2, type: GP2D12, rate: 10},
#sonar_front_center: {pin: 5, type: Ping, rate: 10},
arduino_led: {pin: 13, type: Digital, rate: 5, direction: output}
}
2.4.3 程序上传
请先在树莓派端创建工作空间,在PC端进入本地工作空间的src目录,调用程序上传命令:
scp -r ros_arduino_bridge/ 树莓派用户名@树莓派ip:~/工作空间/src
在树莓派端进入工作空间并编译:
colcon build
2.4.4 测试
树莓派端:启动 ros_arduino_bridge 节点:
roslaunch ros_arduino_python arduino.launch
PC端:启动键盘控制节点:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
如无异常,现在就可以在PC端通过键盘控制小车运动了,并且PC端还可以使用rviz查看小车的里程计信息。
三、树莓派安装ROS
在树莓派上搭建ROS环境需要两步实现:1.在树莓派上安装Ubuntu;2.基于Ubuntu安装ROS
版本选择:Ubuntu选用18.04;ROS选用melodic;树莓派选用4b。
3.1 Ubuntu安装
3.1.1 硬件准备
树莓派
读卡器
TF卡(建议16G以及以上)
显示屏或 HDMI采集卡 以及配套的数据线
鼠标键盘
网线
3.1.2 软件准备
Ubuntu18.04下载并解压,下载地址:https://ubuntu-mate.org/download/
win32 Disk Imager烧录软件下载并安装,下载地址:https://sourceforge.net/projects/win32diskimager/
如果TF卡已有内容,在使用之前需要执行格式化,比如可以使用SD Card Formatter,下载地址:SD Memory Card Formatter for Windows/Mac | SD Association
3.1.3 系统烧录
1.将TF卡插入读卡器,读卡器插入计算机;
2.如果TF卡已有内容,请先格式化(如无数据,此步骤略过);
3.启动win32 Disk Imager,选择先行下载的Ubuntu18.04镜像并写入TF卡;
3.1.4 系统安装
1.系统启动以及登录:取下TF卡插入树莓派,连接网线,启动树莓派,启动时是命令行界面,登陆使用默认账号密码。
默认账号:ubuntu
默认密码:ubuntu
还需要根据提示修改密码。
更改密码后,系统安装完毕,不过此时是命令行式操作,下一步需要安装桌面。
2.桌面安装:为了安装方便,建议使用ssh远程登录(需要先安装ssh3)
首先,调用命令: ifconfig 获取树莓派的 ip 地址;然后,远程调用 ssh ubuntu@ip地址登录;接下来,可以直接安装桌面,但是为了提高安装效率,建议更换下载源,使用国内资源。
阿里云源
deb https://mirrors.aliyun.com/ubuntu-ports/ disco main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ disco main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ disco-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ disco-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ disco-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ disco-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ disco-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ disco-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ disco-proposed main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu-ports/ disco-proposed main restricted universe multiverse
中科大源
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ disco main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ disco main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ disco-proposed main restricted universe multiverse
清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ disco-proposed main restricted universe multiverse
修改/etc/apt/sources.list文件,将上述资源的任意一个复制进文件。
sudo nano /etc/apt/sources.list
最后,安装桌面环境(可选择:xubuntu-desktop、lubuntu-desktop、kubuntu-desktop)
sudo apt-get install ubuntu-desktop
3.重启桌面安装完毕
4.同步时间:默认情况下,树莓派系统时间是格林威治时间,而我们处于东八区,相差八个小时,需要将时间,设置为北京时间。在/etc/profile文件中增加一行export TZ='CST-8' ,并使文件立即生效,执行命令:
source /etc/profile
. /etc/profile
3.2 ROS安装
在树莓派上安装ROS与PC上安装流程类似:
3.2.1 配置软件与更新
首先打开“软件和更新”对话框,具体可以在 Ubuntu 搜索按钮中搜索。打开并配置(确保勾选了"restricted", "universe," 和 "multiverse."),可参考PC实现。
3.2.2 设置安装源
官方默认安装源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
或来自国内中科大的安装源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
或来自国内清华的安装源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
3.2.3 设置key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3.2.4 安装
首先需要更新 apt(以前是 apt-get, 官方建议使用 apt 而非 apt-get),apt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具。
sudo apt update
然后,再安装所需类型的 ROS:ROS 多个类型:Desktop-Full、Desktop、ROS-Base。由于在分布式架构中,树莓派担当角色较为简单,在此选择 Desktop 或 ROS-Base 安装
sudo apt install ros-melodic-desktop
3.2.5 环境配置
配置环境变量,方便在任意 终端中使用 ROS。
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.2.6 构建软件包的依赖关系
到目前为止,已经安装了运行核心ROS软件包所需的软件。要创建和管理您自己的ROS工作区,还需要安装其他常用依赖:
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
安装并初始化rosdep,在使用许多ROS工具之前,需要初始化rosdep。rosdep使您可以轻松地为要编译的源安装系统依赖:
sudo apt install python-rosdep
使用以下命令,可以初始化rosdep。
sudo rosdep init
rosdep update
注意:安装ROS过程可全程参考PC端实现。
标签:树莓,mirrors,Arduino,机器人,https,ubuntu,deb,main,ROS2 From: https://blog.csdn.net/qq_68192341/article/details/145016202