首页 > 其他分享 >【ROS2】Arduino系列之机器人控制系统

【ROS2】Arduino系列之机器人控制系统

时间:2025-01-10 12:29:54浏览次数:3  
标签:树莓 mirrors Arduino 机器人 https ubuntu deb main ROS2

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.鼠标、键盘

接线以及使用:

树莓派连接显示屏
树莓派连接HDMI采集卡

二、分布式框架

当前分布式框架搭建时,树莓派是作为主机,而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-FullDesktopROS-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

相关文章

  • Streamlit,Streamlit会话及使用指南,将Streamlit部署到云端,通过Streamlit实现聊天机
    Streamlit介绍Streamlit是一个开源的Python库,专为快速创建数据可视化Web应用而设计。它的核心优势在于能够将简单的Python脚本迅速转换成交互式的Web应用,从而使数据科学家和工程师能够以最少的前端开发投入分享他们的数据分析成果。我们本门课程使用Streamlit构建我们的实战项目......
  • KUKA机器人控制柜异常无法匹配故障维修
    KUKA机器人本体与控制柜无法匹配该如何维修?一、问题现象1.机器人上电以后,A5轴只能在-60~+60度的范围移动,示教器上显示的却是-120~+120度;2.从示教器的‘帮助’一>‘关于’一>‘机器人’查看机器人型号,与机器人本体铭牌上的型号不符合;二、维修办法1.在......
  • 发那科FANUC机器人A06B-0652-B212电机维修基本流程
    发那科FANUC机器人以其卓越的性能和可靠性赢得了广泛的认可。然而,就像其他任何机械设备一样,长时间的运行和复杂的工作环境都可能使伺服电机面临维修的需求。为了确保您的发那科FANUC机器人A06B-0652-B212电机始终保持在最佳状态,发那科伺服电机维修服务显得尤为重要。一、发那科FA......
  • 【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
    1、简述Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行,例如:Qt的QApplication::exec()和ROS的rclcpp::spin()两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。2、多线程一般QApplication::exec()运行在主线......
  • FANUC机器人M-16iB伺服马达维修参考措施
    随着工业自动化技术的不断发展,机器人已经广泛应用于各个领域。其中,发那科机器人以其卓越的性能和稳定性,成为了许多企业的首选。然而,伺服电机作为机器人核心部件之一,FANUC机械手维修保养至关重要。一、法那科机械手伺服电机的故障与诊断1.故障表现:伺服电机在运行过程中出现异常......
  • 使用LangChain模板在Amazon Bedrock上配置Anthropic‘s Claude作为聊天机器人
    文章目录概要整体架构流程技术名词解释技术细节小结概要提示:这里可以添加技术概要例如:openAI的GPT大模型的发展历程。整体架构流程提示:这里可以添加技术整体架构例如:在语言模型中,编码器和解码器都是由一个个的Transformer组件拼接在一起形成的。技术......
  • C#笔记(1、钉钉机器人推送帆软报表图片)
    C#笔记——钉钉机器人推送帆软报表图片(一)1、前言​ 2024年最后一个月,家里多了个小公主,在家休息了一段时间。2025年,休完假上班第一天,领导就说:哎,我看总部那边做了个每日产出的报表推送到钉钉群,来看计划达成率。我们基地这边能不能做啊。我心里默默一想,然后大声一喊能做(内心os:上家......
  • 安川机器人的独特优势
    安川机器人,这一源自日本安川电机(YaskawaElectricCorporation)的杰出产物,是工业自动化领域中的佼佼者,其核心价值在于生产线上那精准无误的自动化作业能力。这款机器人集成了电机、减速器、传感器、控制器等一系列精密部件,如同一套高效协同的作战系统,为企业带来了生产效率的显著......
  • 维修ABB IRB6700机器人的平衡缸3HAC043477出现异响
    当ABBIRB6700机器人的平衡缸3HAC043477出现异响时,可能需要进行内部零件的检查和更换。以下是一些建议的步骤:1、检查IRB6700机械臂平衡缸的密封性:确保平衡缸的密封性良好,没有气体泄漏。如果发现有气体泄漏,可能需要更换密封件。2、检查活塞和缸体的磨损情况:如果活塞和缸体磨损严重,......
  • 【花雕学编程】Arduino CNC 之支持加速度控制的G代码解析器
    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用ArduinoIDE(集成开发环境)来编写、......