如何实现两台PC之间的远程控制?SSH和mstsc以及ROS主从机


参考链接:
使用ssh: https://www.cnblogs.com/ftl1012/p/ssh.html
使用mstsc: https://blog.csdn.net/dzkdxyx/article/details/77414316

这一篇博客主要是为了解决电脑之间的远程控制问题,也是为之后的工控机的通信方式做准备。一开始考虑的是Windows远程控Ubuntu,后来该方案由于Wifi带宽弃置了,但毕竟掌握了,还是想留个档。在SSH和mstsc方法中,手边的PC为Windows,远端的PC为Ubuntu。

使用mstsc远程登录

这种方式非常简单,只要双方在同一个局域网中,知道对方的账户和密码,则直接可以用ssh命令访问。具体操作步骤如下:

1. Ubuntu安装 xrdp,vncserver

sudo apt-get install xrdp vnc4server xbase-clients

2. Ubuntu打开desktop sharing

这个应用是默认安装的,直接在搜索栏搜索即可。设置如下:
在这里插入图片描述
记住这个密码,Windows端连接时需要用到。

3. Ubuntu安装dconf-editor

sudo apt-get install dconf-editor

同样在搜索栏中搜索dconf-editor,打开该应用,取消权限设置。路径为:org > gnome > desktop > remote-access。要取消“require-encryption”和“view-only”。

在这里插入图片描述

4. Windows端(Win 10)打开远程桌面连接

打开方法有两种:

  • 搜素栏敲cmd,进入命令行,然后输入mstsc,即可呼出连接界面。

  • 在搜素栏输入 远程桌面连接。
    在这里插入图片描述
    在这个界面可以方便的设置显示选项(在左下角),可以根据个人需求进行调整,因为桌面控制真的非常非常依赖带宽,不降低分辨率会卡的受不了。调整好后,输入Ubuntu端的ip地址,点击连接,会出现如下界面:
    在这里插入图片描述
    选择vnc-any,在输入一遍Ubuntu端ip,端口号不用改,密码就是之前第2步里设置的。点击OK,完成。

  • 补充:
    这里插一下查询本机ip的方法。Ubuntu中输入

ifconfig -a 

里面有一个类别的Link encap是Ethernet,它所属栏的inet addr即为本机ip地址。
在Winodws里是输入

ipconfig

其中的Ipv4就是本机ip地址。

使用ssh登录

1. 看看有没有安装openssh

dpkg -l |grep ssh

在中间如果有openssh-client和openssh-server则说明已经装好了。
如果没有则apt安装相应的软件,如:

sudo apt-get install openssh-client openssh-server

注意:一般的个人终端只需要client,即作为客户端使用,但如果有时候需要用其他电脑远程访问自己的终端,则应该同事安装server。

2. 看看ssh进程有没有启动

ps -e |grep ssh

如果下面有sshd,则说明已经启动

  • 补充:ssh的关闭和重启
# ssh服务的关闭
    service sshd stop
# ssh服务的开启:
    service sshd start

3. 在Windows端输入命令

打开cmd,输入

ssh username@xx.xx.x.xx

其中username是Ubuntu端可以使用的账户名,最简单的查看方式是看Ubuntu命令行的开头,如 hurricanezj@ssfakfah,就说明账户名是hurricanezj。(注意:登陆界面显示的是昵称而非账户名。)
如果是第一次登录,会有一个warnning,输入yes即可。
之后会被要求输入密码,就像平时登录Ubuntu一样,输入即可。之后,命令行的标头就会变成Ubuntu的账户,说明ssh连接成功。

4. 开启多个命令行

像运行roscore、htop这种命令以后,那个命令行就被占用了,此时肯定需要再开启一个命令行,在自己的系统里可以通过gnome-terminal来实现,对于ssh则不支持。
替代的方案是,再唤起一个ssh连接(ssh可以支持复数的连接),为了避免老是输入登录密码,可以百度或者参照链接,修改host文件。

缺陷:没有可视化界面,对于要看rviz的应用而言,不太合适。

5. ssh免密登录

有时候一直输入密码是很烦的事情,尤其是当需要打开多个终端的时候,此时有必要采用公私钥配对的方式免去密码输入。具体的方法见链接https://www.cnblogs.com/ftl1012/p/ssh.html
但需要注意的有两点。

  • 生成私钥的操作是在client上完成的,生成后,再用ssh-copy-id把公钥传到服务端。
  • 在教程中使用的是dsa加密方法,我实际尝试以后,发现仍然需要密码,我不太清楚哪里出了问题,在换成rsa后,顺利的免密登录上。因此建议,嫌麻烦的朋友,将生成秘钥环节的指令中的dsa均用rsa替换。
cd ~/.ssh
ssh-keygen -t rsa

3.拷贝公钥给目标服务器
【 使用ssh登录的默认端口22】

 ssh-copy-id -i id_dsa.pub omd@192.168.25.110 

【也可用规定端口666】

ssh-copy-id -i id_dsa.pub –p 666 omd@192.168.25.120 
  1. 查看目标服务器生成的文件

在对方的目录下查看:

ll /home/omd/.ssh/authorized_keys

6. 配置脚本,一键登录ssh

即便已经免密,但每次都要 ssh username@ip的操作依然惹人厌烦,故此,可以编写一个bash脚本(假设文件名为test,无后缀),文本内容如下:

#!/bin/bash
ssh username@ip

这种文件是没办法直接运行的,原因是系统默认的unmask给的权限比较低。查看权限可以使用如下命令:

ls -l test

输出显示的r w x分别代表可读,可写,可执行。具体的解释请参考Linux命令大全。
这里我们要做的是给该文件“用户可执行”的权限,故运行如下命令:

chmod u+x test

大功告成,此后每次要ssh,只需进入到脚本所在文件夹输入:

./test

即可实现ssh连接。

ROS的主从机设置

1. 设置方式

ROS的主从机设置暂时没空详细写,因此直接贴传送门:

ROS的多机通信
需要注意的是,ROS中的主机HOST是自己手头的电脑,MASTER对应ssh中服务器的概念,一般是工控机或者树莓派之类的。
已经写的很完整了,但是有个建议是,配置环境变量的时候不要使用ROS_HOSTNAME,而是使
用ROS_IP,这两个环境变量本质上一样且互斥的。但在实践中,一旦使用ROS_HOSTNAME后,则无法直接在主机上运行roscore,而只能通过从机用ssh去启用。这对于使用树莓派等工控机的用户倒是无所谓,但前期如果是用笔记本代替工控机的话,那不免会为后续开发带来麻烦。故建议设置ROS_IP。两者的区别见官方Wiki
此外,建议在开始ROS的主从机配置之前,先完成ssh的免密登录。

2. 注意点

2.1 从机可视化

本质上,ROS的主从机设置是实现了通信的分布式。即无论节点在哪个物理机上,话题在哪里发布,在任何的物理机上均可以使用rostopic list查看,自然也可以用其他节点进行接收和处理。
这样的机制使得在个人PC上显示工控机的可视化成为了可能。
但实际实施时必须要注意的是,应当在主机端直接开rviz,而非使用ssh远程到从机端开rviz,否则会报和display相关的错误,因为从机并没有屏幕。我们希望从机端运行各种节点,进行数据处理,而发布的消息由主机接收并进行可视化。

3. ROS主从机时间同步问题

对于不同的机子而言,时刻是有差异的,直接启动ROS节点,可能会出现如下的报错:

Error: TF_NAN_INPUT: Ignoring transform for child_frame_id “base_footprint” from authority “unknown_publisher” because of a nan value in the transform (-nan -nan -nan) (-nan -nan -nan -nan)
at line 240 in /tmp/buildd/ros-indigo-tf2-0.5.11-0trusty-20150522-1835/src/buffer_core.cpp

虽然从报错里看不出来是时间不同步的问题,但根据之前处理rosbag和tf的经验,可以大概估测是和时间同步有关。操作方法可以参照:https://blog.csdn.net/weixin_40830684/article/details/90106066?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
但是原作者这部分写的挺乱的,我照着做的时候也将信将疑,因此记录一下正确的操作步骤。

  • 1 安装ntp
    命令为:sudo apt-get install ntp。这个命令必须在工控机和计算机中都执行一遍,因为需要两边的ntp进行通信达成时间同步。
  • 2 指定同步时间源
    在操作时有两种方案,一种是用计算机对工控机授时,另一种则是用工控机对计算机授时。下面以第二种为例进行操作,在计算机中运行如下命令
sudo /usr/sbin/ntpdate -u 192.168.x.x

其中最后的ip地址应当替换成工控机的ip地址,查询命令为ifconfig

  • 3 定时更新命令
sudo /sbin/hwclock -w

这个操作每次进行连接最好都执行一次,也可以考虑写成bash脚本的形式。

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值