分布式通信
前置知识:SSH
ssh:Secure Shell(安全外壳协议),作用是让你安全地控制另一台电脑(登陆到其它电脑的终端) 基本用法:
- 远程登陆:
ssh 用户名@服务器IP地址比如:ssh root@192.168.1.100 意思是:我要用 root 这个身份,去控制 IP 为 192.168.1.100 的那台电脑。 执行后,它会让你输入密码,输对了,你的命令行就变成了那台远程电脑的命令行。敲 ls,看到的是那台电脑里的文件。
- 传文件过去
scp 本地文件路径 用户名@服务器IP地址:远程存放路径比如:scp ./background.jpg root@192.168.1.100:/home/,意思是:把我当前目录下的“background.jpg”,传到远程电脑的 /home/ 目录下。
- 从远程拉文件回来
scp 用户名@服务器IP地址:远程文件路径 本地存放路径比如:scp root@192.168.1.100:/var/log/日志.log ./意思是:把远程电脑里的日志文件,拉到我的当前目录来。
- 免密登陆 在自己电脑上造一把公钥和一把私钥,私钥只能在自己电脑里。公钥可以暴露,放在远程服务器上 第一步用ed25519生成密钥:
ssh-keygen -t ed25519 -C "我的树莓派钥匙"ssh-keygen是生成钥匙的命令,-t ed25519是选择算法,-C “xxx”是添加备注 它会建议你一个存放位置,这个直接回车 然后是私钥是否再加一层密码保护,你可以直接回车(不需要),如果是很重要的生产环境就再加一个 在~/.ssh目录下会出现两个文件:
id_ed25519:私钥id_ed25519.pub:公钥
第二步:把公钥放到远程服务器上:
ssh-copy-id 用户名@服务器IP地址会提示输入密码,以后就再也不用输了。
测试示例
在树莓派或其它上位机上安装好ubuntu和ROS2(这个和普通电脑是一样的,它们相当于迷你的电脑)
然后在自己的电脑上ssh登陆到树莓派的终端,然后两个终端(一个电脑的,一个刚刚登陆了树莓派的)一个运行:
ros2 run demo_nodes_cpp talker另一个运行:
ros2 run demo_nodes_cpp listener就可以看到官方给的示例工作了
解决冲突
你或许也会惊讶连接到一个网络就能直接通信,这太不安全了,要是教室里的同学碰巧都给某话题起名一样这不会冲突?答案是肯定会冲突
解决方法: 可以直接标记不同的DDS Domain ID,彻底物理隔离 .bashrc里直接加:export ROS_DOMAIN_ID = 1 数字范围是0-101,不同小组用不同的数字就好了。
环境变量
刚刚我们是运行了官方示例
在运行自己工作空间前要执行source install/local setup.sh,这个命令也可以加到.bashrc里
