ubuntu22.04 SSH和ROS2控制下位机

SSH

1.选择控制对象

在PC上用ssh控制机器人的过程中,PC是客户端,机器人是服务器。

2.机器人端操作

2.1 安装服务器ssh

sudo apt upgrade
sudo apt update
sudo apt install openssh-server

2.2 查看IP地址

分别查看PC和机器人的IP地址,并记录下来

sudo apt install net-tools  # 安装网络工具
ifconfig  # 查看本机IP地址

2.3 将PC端的IP写入机器人的识别名单/etc/hosts

打开机器人端的hosts文件

sudo gedit /etc/hosts

添加PC的ip地址到hosts文件并保存

192.168.xxx.xxx client_name

2.4 ping PC

尝试ping通PC,若成功说明机器人到PC的网络通信正常

ping client_name

2.5允许ssh通过机器人的防火墙

sudo ufw enable  # 启用防火墙
sudo ufw allow ssh  # 允许ssh
#sudo ufw allow 22
# 22端口为ssh端口
sudo ufw reload  # 重启防火墙

因为ROS2的通讯也需要被防火墙允许,需要单独设置比较麻烦
若不考虑安全性,推荐完全关闭防火墙

sudo ufw disable  # 关闭防火墙
sudo reboot  # 重启

3.PC端操作

3.1 安装客户端ssh

sudo apt upgrade
sudo apt update
sudo apt install openssh-client

3.2 查看IP地址

分别查看PC和机器人的IP地址,并记录下来

sudo apt install net-tools  # 安装网络工具
ifconfig  # 查看本机IP地址

3.3 将机器人IP写入PC的识别名单/etc/hosts

打开PC端的hosts文件

sudo gedit /etc/hosts

添加机器人的ip地址到hosts文件并保存

192.168.xxx.xxx server_name

3.4 ping机器人

尝试ping通机器人,若成功说明PC到机器人的网络通信正常

ping server_name

3.5 允许ssh通过PC的防火墙

sudo ufw enable  # 启用防火墙
sudo ufw allow ssh  # 允许ssh
#sudo ufw allow 22
# 22端口为ssh端口
sudo ufw reload  # 重启防火墙

因为ROS2的通讯也需要被防火墙允许,需要单独设置比较麻烦
若不考虑安全性,推荐完全关闭防火墙

sudo ufw disable  # 关闭防火墙
sudo reboot  # 重启

3.6 控制从机

sudo ssh ubuntu@server_name

此处ubuntu为默认机名,具体的可以查看机器人端命令行头类似ubuntu@name的东西

ROS2控制下位机

ROS2采用自发现机制,两者在同一局域网内即可自动发现彼此,不需要配置,需要注意的是防火墙会拦截ROS2通讯,需要允许部分端口或者完全禁用防火墙
PC端:

sudo apt-get install ros-humble-teleop-twist-keyboard
ros2 run teleop_twist_keyboard teleop_twist_keyboard

机器人端:

ros2 topic list

当发现机器人端有/cmd_vel话题时,说明主从机能通信。

常用指令

查看ssh服务的当前状态

sudo systemctl status ssh

重启ssh

sudo systemctl restart sshd.service

其他内容[可忽略]

修改etc/ssh/sshd_config

在服务器端(机器人)上修改etc/ssh/sshd_config文件

sudo gedit etc/ssh/sshd_config

修改该项#PermitRootLogin prohibit-password
更换为PermitRootLogin yes
注意:去掉#号使其生效

开始root控制[可选]

在机器人端设置root密码,否则会遇到permission denied

sudo passwd

Ctrl+Alt+T新开命令行窗口

ssh root@server_name

server_name为此前保存在/etc/hosts中的服务器端(机器人)IP地址,如果已经修改过了/etc/hosts,此处可以用字符串server_name代替IP地址

设置密钥认证[可选]

如果希望每次不通过密码登录直接连接,可以使用密钥方式
参考链接:Ubuntu SSH Keys

猜你喜欢

转载自blog.csdn.net/m0_56661101/article/details/129362687