目 录CONTENT

文章目录

ROS-NetSim框架说明

Rho
Rho
2023-08-20 / 0 评论 / 0 点赞 / 57 阅读 / 3803 字

ROS-NetSim

用于集成机器人和网络模拟器的框架

ROS-NetSim_architecture-xopqwjnt.png

ROS-NetSim是一个ROS包,它充当机器人和网络模拟器之间的接口。通过准确模拟感知-行动-通信循环,ROS-NetSim可以实现机器人和网络交互的高保真度表示。ROS-NetSim具有以下特点:

  • 对ROS目标应用程序透明
  • 不依赖于特定的网络和物理模拟器
  • 可以调整保真度和复杂度

安装

克隆存储库并执行以下命令:

cd <repo_root>
source /opt/ros/melodic/setup.bash
rosdep install -i --from-paths . -y
catkin init
catkin config --cmake-args -DPYTHON_EXECUTABLE=/path/to/python3
catkin build

在作者的机器上,Python 3可执行文件的位置为:/usr/bin/python3

测试ROS-NetSim

为了测试ROS-NetSim的正确行为,我们将运行一个虚拟模拟。此示例的配置参数在example/cfg/example.yaml中描述。这个测试模拟使用了两个虚拟模拟器,它们只是关闭了同步循环。虚拟物理模拟器为代理生成随机位置,而虚拟网络模拟器拦截数据包并延迟500毫秒。

首先,通过执行以下命令运行虚拟网络模拟器:

rosrun example net_sim_dummy.py src/example/cfg/example.yaml 

虚拟网络模拟器将等待其他组件运行。接下来,在另一个终端中,通过执行以下命令启动虚拟物理模拟器(对于这个测试示例,还包括物理协调器):

rosrun example phy_sim_dummy.py src/example/cfg/example.yaml 

同样,此组件将等待模拟的其他部分启动。最后,通过执行以下命令运行网络协调器:

rosrun network_coordinator network_coordinator.py src/example/cfg/example.yaml 

请注意,由于网络协调器需要操作网络接口,它需要root权限。

一旦所有组件都在运行,同步将开始,物理模拟器将开始生成类似以下的任意节点位置:

node_list: 18.195842521106556
node_list: 11.684340332903446
node_list: 2.8332447228696123
node_list: -0.654501732905802
node_list: -0.29849447880207103
node_list: 0.6936700224299548
node_list: 0.03674816634892308
node_list: 4.211485046377071
node_list: 3.1339309588288455
node_list: 8.129863384306084
node_list: 0.43109771468538166
node_list: -0.45313386141764833
node_list: 0.047726476809024414
node_list: -0.7788110473286639
path_details {
  ids: 2
  ids: 1
  los: true
  num_hops: 1
  hop_points: 0.06865299159276339
  hop_points: 0.2702797061757798
  hop_points: 0.7462493334641866
  hop_points: 0.7346620894670425
}

这些对应于在ROS-NetSim组件之间共享的同步更新。此外,网络协调器已经为IP地址192.168.0.1192.168.0.2创建了两个虚拟网络接口,正如配置文件example.yaml中指定的那样。然后,我们可以通过执行从一个地址到另一个地址的ping命令来测试这些IP地址之间的流量,例如ping -I 192.168.0.1 192.168.0.2。输出应该类似于以下内容:

ping -I 192.168.0.1 192.168.0.2
PING 192.168.0.2 (192.168.0.2) from 192.168.0.1 : 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=1005 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=1008 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=1012 ms
^C
--- 192.168.0.2 ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3005ms
rtt min/avg/max/mdev = 1005.133/1008.736/1012.983/3.438 ms, pipe 2

应该看到数据包被延迟500毫秒,导致往返时间约为1000毫秒。这意味着流量被重定向到虚拟网络模拟器,并且ROS-NetSim正常工作。

0

评论区