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