ROS2Swarm群机器人案例(Dashing+Foxy)
REFERENCES
[1] H. Hamann, Swarm Robotics: A Formal Approach. Cham: Springer International Publishing, 2018.
[2] I. A. D. Nesnas, R. Simmons, D. Gaines, C. Kunz, A. Diaz-Calderon, T. Estlin, R. Madison, J. Guineau, M. McHenry, I.-H. Shu, and D. Apfelbaum, “CLARAty: Challenges and steps toward reusable robotic software,” International Journal of Advanced Robotic Systems, vol. 3, no. 1, p. 5, 2006.
[3] C. Pinciroli and G. Beltrame, “Buzz: a programming language for robot swarms,” IEEE Software, vol. 33, no. 4, pp. 97–100, 2016.
[4] M. Quigley, J. Faust, T. Foote, and J. Leibs, “ROS: an open-source Robot Operating System,” in ICRA workshop on open source software, vol. 3, no. 3.2. Kobe, Japan, 2009, p. 5.
[5] M. Dorigo, G. Theraulaz, and V. Trianni, “Swarm robotics: Past, present, and future [point of view],” Proceedings of the IEEE, vol. 109, no. 7, pp. 1152–1165, 2021.
[6] Y. Maruyama, S. Kato, and T. Azumi, “Exploring the performance of ROS2,” in 2016 International Conference on Embedded Software (EMSOFT), 2016, pp. 1–10.
[7] A. Barcis, M. Barci ´ s, and C. Bettstetter, “Robots that Sync and Swarm: ´ A proof of concept in ROS 2,” in 2019 International Symposium on Multi-Robot and Multi-Agent Systems (MRS), 2019, pp. 98–104.
[8] A. Barcis and C. Bettstetter, “Sandsbots: Robots that sync and swarm,” ´ IEEE Access, vol. 8, pp. 218 752–218 764, 2020.
[9] A. Testa, A. Camisa, and G. Notarstefano, “ChoiRbot: A ROS 2 toolbox for cooperative robotics,” IEEE Robotics and Automation Letters, vol. 6, no. 2, pp. 2714–2720, 2021.
[10] J. P. Queralta, Y. Xianjia, L. Qingqing, and T. Westerlund, “Towards large-scale scalable MAV swarms with ROS2 and UWB-based situated communication.”
[11] T. De Wolf and T. Holvoet, “Design patterns for decentralised coordination in self-organising emergent systems,” in Proceedings of the 4th International Conference on Engineering Self-Organising Systems, ser. ESOA’06. Berlin, Heidelberg: Springer-Verlag, 2006, p. 28–49.
[12] J. L. Fernandez-Marquez, G. Di Marzo Serugendo, S. Montagna, M. Viroli, and J. L. Arcos, “Description and composition of bioinspired design patterns: a complete overview,” Natural Computing, vol. 12, no. 1, pp. 43–67, Mar. 2013.
[13] L. Pitonakova, R. Crowder, and S. Bullock, “Information exchange design patterns for robot swarm foraging and their application in robot control algorithms,” Frontiers in Robotics and AI, vol. 5, p. 47, 2018.
[14] D. St-Onge, V. S. Varadharajan, I. Svogor, and G. Beltrame, “From ˇ design to deployment: Decentralized coordination of heterogeneous robotic teams,” Frontiers in Robotics and AI, vol. 7, p. 51, 2020.
[15] C. Xuefeng, C. Zhongxuan, W. Yanzhen, and Y. Xiaodong, “micros swarm framework - ROS Wiki,” 2019. [Online]. Available: https://wiki.ros.org/micros swarm framework
[16] K. Morris, G. Arpino, S. Nagavalli, and K. Sycara, “Full stack swarm architecture,” RISS Working Papers Journal, 2018.
[17] C.-E. Hrabia, T. K. Kaiser, and S. Albayrak, “Combining selforganisation with decision-making and planning,” in Multi-Agent Systems and Agreement Technologies, F. Belardinelli and E. Argente, Eds. Cham: Springer International Publishing, 2018, pp. 385–399.
[18] V. C. Kalempa, M. A. S. Teixeira, A. S. de Oliveira, and J. A. Fabro, “Intelligent dynamic formation of the multi-robot systems to cleaning tasks in unstructured environments and with a single perception system,” in 2018 Latin American Robotic Symposium, 2018 Brazilian Symposium on Robotics (SBR) and 2018 Workshop on Robotics in Education (WRE), Nov 2018, pp. 71–76.
[19] Y. Liu, A. Ali, and G. Dare, “swarm robot ros sim,” 2020. [Online]. Available: https://github.com/yangliu28/swarm robot ros sim
[20] Gazebo, “Gazebo,” 2020. [Online]. Available: http://gazebosim.org/
[21] C. Moeslinger, T. Schmickl, and K. Crailsheim, “A minimalist flocking algorithm for swarm robots,” in Advances in Artificial Life. Darwin Meets von Neumann, G. Kampis, I. Karsai, and E. Szathmary, Eds. ´ Berlin, Heidelberg: Springer Berlin Heidelberg, 2011, pp. 375–382.
[22] G. Valentini, E. Ferrante, H. Hamann, and M. Dorigo, “Collective decision with 100 Kilobots: Speed vs accuracy in binary discrimination problems,” Journal of Autonomous Agents and Multi-Agent Systems, vol. 30, no. 3, pp. 553–580, 2016.
[23] G. Valentini, E. Ferrante, and M. Dorigo, “The best-of-n problem in robot swarms: Formalization, state of the art, and novel perspectives,” Frontiers in Robotics and AI, vol. 4, p. 9, 2017.
[24] D. Thomas, E. Fernandez, and W. Woodall, “State of ROS 2 - demos and the technology behind,” in ROSCon Hamburg 2015. Open Robotics, September 2015. [Online]. Available: https://doi.org/10.36288/ROSCon2015-900743
[25] F. Arvin, K. Samsudin, and A. R. Ramli, “A short-range infrared communication for swarm mobile robots,” in 2009 International Conference on Signal Processing Systems, 2009, pp. 454–458.
[26] L. Wang, A. D. Ames, and M. Egerstedt, “Safety barrier certificates for collisions-free multirobot systems,” IEEE Transactions on Robotics, vol. 33, no. 3, pp. 661–674, 2017.
[27] C. Steup, S. Parlow, S. Mai, and S. Mostaghim, “Generic componentbased mission-centric energy model for micro-scale unmanned aerial vehicles,” Drones, vol. 4, no. 4, p. 63, 2020.
摘要:为移动机器人开发可重复使用的软件仍然具有挑战性。尽管机器人控制器具有理想的简单性,但对于群机器人来说更是如此。由于多机器人设置,原型设计和实验很困难,并且通常需要机器人与机器人之间的通信。此外,群机器人硬件平台的多样性增加了对独立于硬件的软件概念的需求。常用的机器人软件架构 ROS 2 的主要优点是模块化和平台独立性。文章提出了一个新的 ROS 2 包 ROS2SWARM,用于群机器人的应用,它提供了一个现成的群行为原语库。我们展示了我们的方法在三个不同平台上的成功应用,即 TurtleBot3 Burger、TurtleBot3 Waffle Pi 和 Jackal UGV,以及一组不同的行为原语,例如聚合、分散和集体决策。所提出的方法易于维护、可扩展,并且在未来应用中具有简化群体机器人实验的良好潜力。
gitlab.iti.uni-luebeck.de/ROS2/ros2swarm
ROS2swarm手册 版本 1.1.0
ROS2swarm 是一个 ROS 2 (Dashing, Foxy) 包,提供了群行为模式。它由计算机工程研究所在德国吕贝克大学机器人研究所和医学电气工程研究所的支持下开发。
项目贡献者:Tanja Katharina Kaiser、Marian Johannes Begemann、Tavia Plattenteich、Lars Schilling、Georg Schildbach、Heiko Hamann、Vincent Jansen、Daniel Tidde、Steffen Fleischmann
当前的 ROS2swarm 版本是 1.1.0(Foxy)。
ICRA 2022 论文“ROS2swarm - A ROS 2 Package for Swarm Robot Behaviors”指的是版本 1.0.0 (Dashing),也可在此处找到。
关于 ROS2swarm
- 安装指南
- 如何使用 ROS2swarm
- 支持的机器人平台
- 现有模式
- 整体架构
- 模式的组成部分
- 启动脚本概述
- 仿真
- 机器人
- 封装结构
所需软件
使用修改后的 TurtleBot3 模型
ROS2swarm 可用于 ROS 2 版本
Dashing (dashing-dev)和Foxy (foxy-dev)。
群体行为模式由基于运动和投票的模式组成。组合模式可以使用基本模式从基本组件中创建更复杂的行为。这些行为可用于模拟,并且适用于多个受支持的机器人平台。提供启动脚本和 shell脚本来启动ROS2swarm。
安装指南
要查看 ROS2swarm 软件包的完整安装指南,请参阅安装指南。
如何使用 ROS2swarm
ROS2swarm 提供启动脚本以在模拟或真实机器人上启动模式。启动脚本的参数,例如机器人类型,可以通过编辑以下脚本的参数部分来设置。
脚本 | 功能 |
---|---|
start_simulation.sh | 使用所需数量的指定机器人启动 Gazebo 模拟。要开始行为执行,请运行 start_command.sh 脚本。 |
start_robot.sh | 启动一个物理机器人。要开始执行行为,请运行 start_command.sh 脚本。 |
start_command.sh | 在网络中的所有机器人上开始执行行为。 ros2 主题 pub --once /swarm_command communication_interfaces/msg/Int8Message "{data: 1}" |
脚本/add_robots_to_simulation.sh | 将额外的机器人添加到正在运行的 Gazebo 模拟中。这些可以是不同的机器人类型,提供了一种模拟异构群的简单方法。 |
支持的机器人平台
ROS2swarm 目前支持以下开箱即用的机器人平台:
- TurtleBot3 Waffle Pi
- TurtleBot3 Burger
- Jackal UGV
现有模式
下表概述了当前实现的模式。这些模式分为运动模式和投票模式。每个模式可以是基本模式,也可以是组合模式,它们利用一个或多个其他模式来创建更复杂的行为。
图案 | 领域 | 类型 | 模拟 | 机器人 |
---|---|---|---|---|
驾驶 | 移动 | 基本的 | ✔ | ✔ |
分散 | 移动 | 基本的 | ✔ | ✔ |
吸引力 | 移动 | 基本的 | ✔ | ✔ |
磁力计 | 移动 | 基本的 | ❌ | ✔ |
极简植绒 | 移动 | 基本的 | ✔ | ✔ |
随机游走 | 移动 | 基本的 | ✔ | ✔ |
讨论色散模式 | 移动 | 结合 | ✔ | ✔ |
投票模式 | 表决 | 基本的 | ✔ | ✔ |
多数规则 | 表决 | 基本的 | ✔ | ✔ |
此外,还启动了硬件保护层来防止冲突。
系统架构
我们简要概述了模式组件、启动脚本和 ROS2swarm 的包。
模式的组成部分
模式由行为实现本身以及配置和启动文件组成。
文件 | 功能 |
---|---|
ros2swarm/pattern_domain/pattern_type/pattern_name.py | 模式的行为逻辑。 |
config/robot_type/pattern_domain/pattern_type/pattern_name.yaml | 模式的参数配置。每种机器人类型都有一个文件。 |
启动/pattern_domain/pattern_type/pattern_name.launch.py | 使用 pattern_name.yaml 中指定的参数启动 ROS 节点的启动文件。 |
要添加新模式,请从任何现有模式(例如驱动模式)复制文件,并实现所需的行为。还要记住将新模式的文件添加到 setup.py 并在那里注册新模式的主要功能。新模式可以通过 start_*.sh 脚本启动,其名称在 setup.py 中定义。
启动脚本概述
提供的启动脚本帮助用户启动 ROS2swarm 并执行所需的行为。有几个链接的脚本。在本节中,我们将解释它们的目的和内部调用顺序。我们提供脚本,用于在模拟和真实机器人上启动所需的群体行为。
仿真
对于机器人类型 TurtleBot3 Waffle Pi 和 TurtleBot3 Burger:
-
start_simulation.sh - 启动 Gazebo 模拟器和 ROS2swarm 的 shell 脚本
- launch_turtlebot_gazebo/launch/create_environment.launch.py - 中央模拟启动脚本,它调用其他启动脚本
- launch_turtlebot_gazebo/launch/start_gazebo.launch.py - 启动 Gazebo 模拟器
- launch_turtlebot_gazebo/launch_turtlebot_gazebo/add_bot_node.py - 为每个机器人添加一个 Gazebo 机器人节点
- ros2swarm/launch/bringup_patterns.launch.py - 使用自己的命名空间管理每个机器人的模式开始
- ros2swarm/hardware_protection_layer.py - 硬件保护层节点
- ros2swarm/pattern_domain/pattern_type/pattern_name.launch.py - 模式节点的启动脚本
- robots_state_publisher 包 - robots_state_publisher 节点
- launch_turtlebot_gazebo/launch/create_environment.launch.py - 中央模拟启动脚本,它调用其他启动脚本
-
scripts/add_robots_to_simulation.sh - 将更多机器人添加到仿真的 shell 脚本
- launch_turtlebot_gazebo/launch/add_turtlebot.launch.py - 允许将其他机器人添加到由创建环境脚本启动的模拟中(见上文)
- launch_turtlebot_gazebo/launch_turtlebot_gazebo/add_bot_node.py - 为每个机器人添加一个 Gazebo 机器人节点
- ros2swarm/launch/bringup_patterns.launch.py - 使用自己的命名空间管理每个机器人的模式开始
- 等如上
- launch_turtlebot_gazebo/launch/add_turtlebot.launch.py - 允许将其他机器人添加到由创建环境脚本启动的模拟中(见上文)
对于机器人类型 Jackal UGV:
开始一个 roscore
运行 rosbridge:https ://github.com/ros2/ros1_bridge
开始豺狼模拟:https ://gitlab.iti.uni-luebeck.de/plattenteich/jackal-swarm-addition
start_simulation.sh - 使用机器人:=jackal
真正的机器人
对于机器人类型 TurtleBot3 Waffle Pi 和 TurtleBot3 Burger:
start_robot.sh - 在单个机器人上启动 ROS2swarm 的 shell 脚本
ros2swarm/bringup_robot.launch.py - 中央机器人启动脚本,将其他启动脚本添加到启动描述中
ros2swarm/turtlebot3_bringup.launch.py - 启动 TurtleBot3 机器人节点并启动文件
对于机器人类型 Jackal:
start_robot.sh - 使用robot:=jackal 在单个机器人上启动ROS2swarm 的shell 脚本
不启动jackal对应,只提供行为模式的订阅者和发布者
封装结构
ROS2swarm 由三个 ROS 包组成:
ros2swarm
包含行为模式及其配置和启动文件的主包。
launch_turtlebot_gazebo
启动 Gazebo 模拟的脚本
通信接口
模式使用的特殊 ROS 消息的接口
所需软件
Dashing
Ubuntu 18.04 LTS
ROS 2 Dashing Diademata
ROS 2 TurtleBot3 软件包
Python 3.6
用于仿真的 Gazebo 9
Foxy
Ubuntu 20.04 LTS
ROS 2 Foxy
ROS 2 TurtleBot3 软件包
Python 3.8.10
用于仿真的 Gazebo 11
使用修改后的 TurtleBot3 模型
ROS2swarm 为修改后的 Turtlebot3 模型提供网格。要使用它们,必须将它们复制到 turtlebot3 包的工作区,如下所述。要选择标准 Turtlebot3 Waffle Pi 机器人,请在启动脚本中使用“waffle_pi”。要选择修改后的 Turtlebot3 Waffle Pi 版本,请在启动脚本中使用“waffle_pi_name_of_modification”。然后在使用提供的启动脚本时自动选择 Gazebo 的网格。TurtleBot3“汉堡”模型也是如此。下面描述了使用修改后的模型的步骤。
Gazebo 中没有传感器可视化的 TurtleBot3
要使用 TurtleBot3 Burger,请将下面的“waffle_pi”替换为“burger”。
- 复制
<code class="hljs">WaffelPi_Model_Extension/turtlebot3_waffle_pi_invisible_sensors</code>
到
<code class="hljs">turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models</code>
- 复制
<code class="hljs">WaffelPi_Model_Extension/turtlebot3_waffle_pi_invisible_sensors.urdf</code>
到
<code class="hljs">turtlebot3_ws/src/turtlebot3/turtlebot3_description</code>
- 构建turtlebot3_ws
<code class="hljs">cd ~/turtlebot3_ws && colcon build --symlink-install</code>
- 在 start_*.sh 中使用机器人选择参数
<code class="hljs">number_robots:=waffle_pi_invisible_sensors</code>
<code class="hljs">source ~/turtlebot3_ws/install/setup.bash</code>
安装指南
本指南是在 Ubuntu 20.04 操作系统上安装 ROS2swarm 包以与 TurtleBot3 一起使用的详细分步说明。它是根据指南建立一个turtlebot3开发环境并使用手动安装的
https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/
https://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/
先决条件
本指南要求已安装 OS Ubuntu Bionic 20.04。
安装 ROS 2 Foxy
安装 ROS 2 桌面版如下:
https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html
设置语言环境
<code class="hljs">locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings</code>
设置源
<code class="hljs">sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null</code>
安装 ROS 2 包
<code class="hljs">sudo apt update
sudo apt install ros-foxy-desktop
echo 'source /opt/ros/foxy/setup.bash' >> ~/.bashrc</code>
安装 argcomplete(可选)
<code class="hljs">sudo apt install -y python3-pip
pip3 install -U argcomplete</code>
测试是否安装成功新终端
<code class="hljs">ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener</code>
安装依赖的 ROS 2 包,包括Gazebo
安装 colcon
<code class="hljs">sudo apt install python3-colcon-common-extensions</code>
安装Gazebo
<code class="hljs">sudo apt install ros-foxy-gazebo-ros-pkgs</code>
安装cartographer
<code class="hljs">sudo apt install ros-foxy-cartographer
sudo apt install ros-foxy-cartographer-ros</code>
安装Nav2
<code class="hljs">sudo apt install ros-foxy-navigation2
sudo apt install ros-foxy-nav2-bringup</code>
安装turtlebot3
安装 TurtleBOt3 软件包
TurtleBot3 包和源代码:
<code class="hljs">mkdir -p ~/turtlebot3_ws/src
cd ~/turtlebot3_ws/src/
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
sudo apt install ros-dashing-dynamixel-sdk
cd ~/turtlebot3_ws && colcon build --symlink-install</code>
环境配置
<code class="hljs">echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc</code>
安装turtlebot3_simulation包
<code class="hljs">cd ~/turtlebot3_ws/src/
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git</code>
切换到支持的版本
ROS2swarm 包仅支持 turtlebot3 包的以下提交。
turtlebot3:
<code class="hljs">cd ~/turtlebot3_ws/src/turtlebot3
git checkout 8237b796ea1571033bf3230fbc78d1143968ddd1</code>
turtlebot3_msgs:
<code class="hljs">cd ~/turtlebot3_ws/src/turtlebot3_msgs
git checkout cf5c56be94b335b1d2c9817bd2dcaceec21ccc68</code>
turtlebot3_simulations:
<code class="hljs">cd ~/turtlebot3_ws/src/turtlebot3_simulations
git checkout f5d86bbeb614f46a176f47b3697c85a8a9b989f9</code>
设置Gazebo模型路径
<code class="hljs">echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc</code>
构建turtlebot3包
<code class="hljs">cd ~/turtlebot3_ws && colcon build --symlink-install
echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
source ~/.bashrc</code>
测试示例仿真是否有效
<code class="hljs">ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py</code>
安装 ROS2swarm 包
将项目文件夹放在您的主目录中(也是使用脚本所必需的)
<code class="hljs">git clone git@gitlab.iti.uni-luebeck.de:ROS2/ros2swarm.git
cd ~/ROS2swarm
colcon build --symlink-install
echo 'source ~/ROS2swarm/install/setup.bash' >> ~/.bashrc</code>
测试 ROS2swarm 包是否启动模拟
<code class="hljs">source ~/.bashrc
bash ~/ROS2swarm/restart.sh</code>
基于模板的附加安装
将 PyCharm 安装为 IDE
<code class="hljs">sudo snap install pycharm-educational --classic</code>
将 ROS 引入 PyCharm
<code class="hljs">sudo nano /var/lib/snapd/desktop/applications/pycharm-educational_pycharm-educational.desktop</code>
用 Exec 行中的命令替换 /snap/bin/pycharm-educational
<code class="hljs">bash -i -c "/snap/bin/pycharm-educational"</code>
或者如果结果不起作用,则恢复更改并使用源 ROS2 从控制台启动 IDE
<code class="hljs">snap run pycharm-educational</code>
选择 python3.7 作为默认值(仅在需要旧模板中)
<code class="hljs">sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3</code>
安装pip
<code class="hljs">sudo apt install python-pip</code>
安装升级点
<code class="hljs">pip install --upgrade pip</code>
安装 open_cv
<code class="hljs">pip install opencv-python</code>
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/124653260
- 点赞
- 收藏
- 关注作者
评论(0)