Skip to content

分布式通信

前置知识:SSH

ssh:Secure Shell(安全外壳协议),作用是让你安全地控制另一台电脑(登陆到其它电脑的终端) 基本用法:

  1. 远程登陆:
bash
ssh 用户名@服务器IP地址

比如:ssh root@192.168.1.100 意思是:我要用 root 这个身份,去控制 IP 为 192.168.1.100 的那台电脑。 执行后,它会让你输入密码,输对了,你的命令行就变成了那台远程电脑的命令行。敲 ls,看到的是那台电脑里的文件。

  1. 传文件过去
bash
scp 本地文件路径 用户名@服务器IP地址:远程存放路径

比如:scp ./background.jpg root@192.168.1.100:/home/,意思是:把我当前目录下的“background.jpg”,传到远程电脑的 /home/ 目录下。

  1. 从远程拉文件回来
bash
scp 用户名@服务器IP地址:远程文件路径 本地存放路径

比如:scp root@192.168.1.100:/var/log/日志.log ./意思是:把远程电脑里的日志文件,拉到我的当前目录来。

  1. 免密登陆 在自己电脑上造一把公钥和一把私钥,私钥只能在自己电脑里。公钥可以暴露,放在远程服务器上 第一步用ed25519生成密钥:
bash
ssh-keygen -t ed25519 -C "我的树莓派钥匙"

ssh-keygen是生成钥匙的命令,-t ed25519是选择算法,-C “xxx”是添加备注 它会建议你一个存放位置,这个直接回车 然后是私钥是否再加一层密码保护,你可以直接回车(不需要),如果是很重要的生产环境就再加一个 在~/.ssh目录下会出现两个文件:

  • id_ed25519:私钥
  • id_ed25519.pub:公钥

第二步:把公钥放到远程服务器上:

bash
ssh-copy-id 用户名@服务器IP地址

会提示输入密码,以后就再也不用输了。

测试示例

在树莓派或其它上位机上安装好ubuntu和ROS2(这个和普通电脑是一样的,它们相当于迷你的电脑)

然后在自己的电脑上ssh登陆到树莓派的终端,然后两个终端(一个电脑的,一个刚刚登陆了树莓派的)一个运行:

bash
ros2 run demo_nodes_cpp talker

另一个运行:

bash
ros2 run demo_nodes_cpp listener

就可以看到官方给的示例工作了

解决冲突

你或许也会惊讶连接到一个网络就能直接通信,这太不安全了,要是教室里的同学碰巧都给某话题起名一样这不会冲突?答案是肯定会冲突

解决方法: 可以直接标记不同的DDS Domain ID,彻底物理隔离 .bashrc里直接加:export ROS_DOMAIN_ID = 1 数字范围是0-101,不同小组用不同的数字就好了。

环境变量

刚刚我们是运行了官方示例

在运行自己工作空间前要执行source install/local setup.sh,这个命令也可以加到.bashrc