一、远端支持依据
- ROS最牛逼的地方就是它的通信机制了,不仅仅是进程间通信方便,就连不同设备间通信也很方便,只需添加几行代码,你就可以实现多电脑间的 Topic 共享, 远程控制等功能。下面就让我们一起来实现吧!
- 这里假设我们有两个电脑:电脑 A 为主机端,电脑 B 为控制端。最终要实现在 A 电脑上运行roscore,并且运行 Turtlesim 程序,然后在 B 电脑上运行键盘控制程序,控制 Turtlesim 小乌龟移动。
SSH :是一种加密的网络协议。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于客户-服务模式的。
当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。
1.1 SSH 包含3个组件
1> ssh 远程登录节点 : ssh 用户名@IP地址
- 不允许空密码或错误密码认证登录
- 不允许root用户登录
- 有两个版本 ssh,ssh2安全性更高
2> sftp 文件共享连接 , xftp连接就是 sftp实现的
3> scp 文件拷贝共享 两节点文件的拷贝传输
1.2 scp 命令:
1.2.1. 向目标节点传文件 :
语法: scp 路径/文件名 用户名@IP地址:目录
Eg: scp 路径/文件名 [email protected]:/tmp
1.2.2.从目标节点拉文件 :
语法: scp 用户名@IP地址:路径/文件名 文件目录
注意 :在远程拷贝至目标节点时 ,就等于创建了 一个一模一样的文件 ,此时原文件的文件属性已发生了变化(如文件创建的时间.) 如果不期望文件属性发生变化
scp -p -r xxx
-p 文件属性不发生变化 (建议加上)
-r : 如果拷贝的是目录 需要加-r ,递归
1.2.3 免密码
在使用scp拷贝文件时需要手动输入密码才能拷贝成功到远程节点,如果实现定时拷贝或者免密码登录需要创建秘钥免密码认证。 参考:https://www.cnblogs.com/bbdong/p/9760791.html
二、远程控制 ssh
1、ubuntu环境下两台电脑连接到同一局域网内
2、两台电脑分别安装 安装SSH
sudo apt-get install openssh-server
3、被控电脑 输入ifconfig -a 查看连接 电脑的主机名和IP地址
- 如果电脑连接的是有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;
- 如果电脑连接的是无线,则 wlp3s0 部分的 inet addr 后就是 IP 地址。
eg:地址:10.232.9.79 广播:10.232.9.1 掩码:255.255.255.0
ifconfig -a
查看 Hostname,在控制台输入:
- hostname
4、控制另一台计算机(终端命令)
ssh robot@110.232.9.79
ssh 主机名@IP地址
5、出来选项,选择yes , 同时输入被控点的用户名密码。
三、远端打开rviz显示
对多个机器共用一个ROS master很重要。有了这个就可以在sys2的terminal下订阅sys1机器发布的topic了,这样我们就可以用sys2完成一些图形显示的任务
1、被控计算机启动ROS
2、控制计算机启动ROS(也可放入.bashrc)
export ROS_MASTER_URI=http://10.232.9.79:11311
#//export ROS_MASTER_URI=http://被控计算机IP:11311
3、终端添加环境变量之后,便可在两台计算机上使用相同ROS
- export ROS_IP=
10.232.9.80 //本地IP
当此方法不可使用rviz 共享环境时
- 在控制端添加(.bashrc)
- export ROS_MASTER_URI=http://10.232.9.79:11311
- export ROS_IP="10.232.9.40"
- 在被控制端添加(.bashrc)
- export ROS_MASTER_URI=http://10.232.9.40:11311
- export ROS_IP="10.232.9.40"
- 其中:
- "10.232.9.40" 被控制端IP
- 10.232.9.79 主控制端IP
四、有些电脑需要
在master 电脑上 添加客户端的IP 和电脑名称
/etc/hosts 10.232.9.40 hehe-pc
. /hosts文件可以帮助解决哪些问题
4.1 远程登录linux主机过慢问题
有时客户端想远程登录一台linux主机,但每次登录输入密码后都会等很长一段时间才会进入,这是因为linux主机在返回信息时需要解析ip,如果在linux主机的hosts文件事先加入客户端的ip地址,这时再从客户端远程登录linux就会变很快。
注:这里所说的远程登录不仅仅是ssh,还可能是mysql远程登录,或是文件共享的查询等。
4.2 双机互连
当两台主机只是双机互连时,这时两台主机都需要设置自己的ip,同时在对方的hosts文件里加入自己的ip和主机名。
4.3 主机名修改工具hostname
其实主机名的修改也有专用工具,就是hostname
hostname - show or set the system’s host name
显示主机名:
# hostname
linmu100
此主机的主机名是linmu100,不加参数是用来显示当前主机的主机名;
临时设置主机名:
# hostname test100
# hostname 注:显示主机名
test100
通过hostname 工具来设置主机名只是临时的,下次重启系统时,此主机名将不会存在;
显示主机IP:
# hostname -i
五、直接打开远端文件夹
1.文件夹操作:
开文件夹,在左下方可以看到:
Conect to Server
点击后在Server Address中输入:
- robot sftp://10.232.9.79/home/robot
2.终端拷贝:
跟ssh 协议的格式一样,只是前面命令不一样
- sftp [email protected]
将远端电脑资料拷贝到本地:
- get xxx.bag //后面可指定路径
如果想拷贝文件夹,可加 -r
- get -r test
将本地文件放到远端:
- put xxx.bag 远端目录
关闭:
- exit
六、查看当前路由器有哪些地址被连接
nmap文件
安装:
- sudo apt-get install nmap
帮助:
- nmap -h
使用:
- nmap -v -sn 192.168.1.0/24
七、Ubuntu 小结
1.历史记录小结
1.查看历史记录
- 若想查看最近使用的命令,只需在终端中输入 history 命令。该命令会把刚刚使用的命令把储存在用户的 home 目录下的 .bash_history 文件中的命令调出来,该文件存储用户最近使用过的命令,最多可保留1000个命令的历史记录。
- 由于历史命令比较多,可以使用管道把 history 的内容分屏展示出来,比如,可以使用less:
- $ history | less
2.复制代码
- 这只是查看,若想重用一个使用过的命令,只需在终端中输入感叹号(!)和命令把对应的历史编号,该编号即 history 命令查出来的命令前面的数目编号。比如,我之前使用cp /etc/fstab ~/Desktop 命令作了一个复制操作,用 history 命令查得该历史命令编号为591,那么,使用 !591 命令就能重用该命令了。
- 如果只是想重复使用最后一个使用的命令,只要使用两个感叹号就能快速执行之。
$ !!
- 另外,如果想在命令历史中搜索一个命令,同时按下 Ctrl + r 键后,输入你感兴趣的命令,命令终端就能为你自动补齐你所要找的命令。同时,使用键盘的上下键也能在最近的历史命令中切换,找到你想重用的命令,按Enter键即可。