目录
多机通信
多机通信是实现机器人编队的基础,通过网络搭建通信链路。我们这里用中心节点网络通信,所有数据需有经过中心节点,所以,中心节点需要有很高的带宽。
设备
ubuntu系统电脑(主机)
同版本ubuntu机载电脑或电脑(从机)
px4固件飞控
路由器局域网
从机上配有mavros等环境
主从机通信设置
-
主机从机都需要下载ssh服务,ubuntu会自动安装openssh-client,但是并没有安装openssh-server。
sudo apt install openssh-server
-
查看版本号,并检验是否安装成功。
ssh -V
配置从机
-
从机安装ifconfig,查看ip地址(注:主机从机需要在同一WiFi下)
sudo apt install net-tools
-
输入ifconfig(windows为ipconfig),记住ip地址
然后回到主机 ping一下看看
ping 192.168.***.***
配置主机
-
然后主机改一下配置文件
sudo gedit /etc/hosts
在上面添加ip和主机名 ,可以添加多个从机,前提是同一局域网。
到这里就配置完成了,
测试
在主机打开终端
ssh user@hostname #ssh 用户名@服务器地址
这里的服务器地址也就是hostname可以使ip,也可以是用户名,比如我的从机为uas
ssh uas@uas
也可以实现远程连接
第一次连接时会提示
The authenticity of host ' (192.168.)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)?
这是说这个ip的指纹是陌生的,要求你是否继续连接,输入yes
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
这个指令是查看公钥的指纹。(可以略过)
之后就可以远程控制了,该终端就成为了从机的目录,相当于在从机上打开终端进行操作。但是无法启用图像化文件,不能gedit修改文件,不能打开rviz等等,只能进行终端操作。
正式启用
由于不能进行图形化操作,所以在网上查阅资料,发现可以添加参数来解决这个问题。
ssh -X name@hostname
-X参数可以提供图形化操作。
MAVROS通信
由于默认px4.launch文件的话题名都一样,所以想要进行多机通信要修改话题名,增加组名即可,也就是前缀。
在launch中修改,可以把<group ns ="">放在多个位置,这里提供一种。
<launch>
<!-- vim: set ft=xml noet : -->
<!-- example launch script for PX4 based FCU's -->
<arg name="fcu_url" default="/dev/ttyACM0:57600" />
<arg name="gcs_url" default="" />
<arg name="tgt_system" default="1" />
<arg name="tgt_component" default="1" />
<arg name="log_output" default="screen" />
<arg name="fcu_protocol" default="v2.0" />
<arg name="respawn_mavros" default="false" />
<group ns="uav_1">
<include file="$(find mavros)/launch/node.launch">
<arg name="pluginlists_yaml" value="$(find mavros)/launch/px4_pluginlists.yaml" />
<arg name="config_yaml" value="$(find mavros)/launch/px4_config.yaml" />
<arg name="fcu_url" value="$(arg fcu_url)" />
<arg name="gcs_url" value="$(arg gcs_url)" />
<arg name="tgt_system" value="$(arg tgt_system)" />
<arg name="tgt_component" value="$(arg tgt_component)" />
<arg name="log_output" value="$(arg log_output)" />
<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
<arg name="respawn_mavros" default="$(arg respawn_mavros)" />
</include>
</group>
</launch>
然后分别启动两个launch就会有/uav_1/mavros和/uav_2/mavros了。
然后在代码中增加订阅的话题前缀即可完成多无人机通信。
前提是要在从机上搭建好环境和硬件连接。