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 是一个 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
使用修改后的 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 目前支持以下开箱即用的机器人平台:
下表概述了当前实现的模式。这些模式分为运动模式和投票模式。每个模式可以是基本模式,也可以是组合模式,它们利用一个或多个其他模式来创建更复杂的行为。
图案 | 领域 | 类型 | 模拟 | 机器人 |
---|---|---|---|---|
驾驶 | 移动 | 基本的 | ✔ | ✔ |
分散 | 移动 | 基本的 | ✔ | ✔ |
吸引力 | 移动 | 基本的 | ✔ | ✔ |
磁力计 | 移动 | 基本的 | ❌ | ✔ |
极简植绒 | 移动 | 基本的 | ✔ | ✔ |
随机游走 | 移动 | 基本的 | ✔ | ✔ |
讨论色散模式 | 移动 | 结合 | ✔ | ✔ |
投票模式 | 表决 | 基本的 | ✔ | ✔ |
多数规则 | 表决 | 基本的 | ✔ | ✔ |
此外,还启动了硬件保护层来防止冲突。
我们简要概述了模式组件、启动脚本和 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:
对于机器人类型 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”。
WaffelPi_Model_Extension/turtlebot3_waffle_pi_invisible_sensors
到
turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models
WaffelPi_Model_Extension/turtlebot3_waffle_pi_invisible_sensors.urdf
到
turtlebot3_ws/src/turtlebot3/turtlebot3_description
cd ~/turtlebot3_ws && colcon build --symlink-install
number_robots:=waffle_pi_invisible_sensors
source ~/turtlebot3_ws/install/setup.bash
安装指南
本指南是在 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
设置语言环境
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
设置源
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
安装 ROS 2 包
sudo apt update
sudo apt install ros-foxy-desktop
echo 'source /opt/ros/foxy/setup.bash' >> ~/.bashrc
安装 argcomplete(可选)
sudo apt install -y python3-pip
pip3 install -U argcomplete
测试是否安装成功新终端
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener
安装 colcon
sudo apt install python3-colcon-common-extensions
安装Gazebo
sudo apt install ros-foxy-gazebo-ros-pkgs
安装cartographer
sudo apt install ros-foxy-cartographer
sudo apt install ros-foxy-cartographer-ros
安装Nav2
sudo apt install ros-foxy-navigation2
sudo apt install ros-foxy-nav2-bringup
安装 TurtleBOt3 软件包
TurtleBot3 包和源代码:
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
环境配置
echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
安装turtlebot3_simulation包
cd ~/turtlebot3_ws/src/
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
ROS2swarm 包仅支持 turtlebot3 包的以下提交。
turtlebot3:
cd ~/turtlebot3_ws/src/turtlebot3
git checkout 8237b796ea1571033bf3230fbc78d1143968ddd1
turtlebot3_msgs:
cd ~/turtlebot3_ws/src/turtlebot3_msgs
git checkout cf5c56be94b335b1d2c9817bd2dcaceec21ccc68
turtlebot3_simulations:
cd ~/turtlebot3_ws/src/turtlebot3_simulations
git checkout f5d86bbeb614f46a176f47b3697c85a8a9b989f9
设置Gazebo模型路径
echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
构建turtlebot3包
cd ~/turtlebot3_ws && colcon build --symlink-install
echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
source ~/.bashrc
测试示例仿真是否有效
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
将项目文件夹放在您的主目录中(也是使用脚本所必需的)
git clone git@gitlab.iti.uni-luebeck.de:ROS2/ros2swarm.git
cd ~/ROS2swarm
colcon build --symlink-install
echo 'source ~/ROS2swarm/install/setup.bash' >> ~/.bashrc
测试 ROS2swarm 包是否启动模拟
source ~/.bashrc
bash ~/ROS2swarm/restart.sh
将 PyCharm 安装为 IDE
sudo snap install pycharm-educational --classic
将 ROS 引入 PyCharm
sudo nano /var/lib/snapd/desktop/applications/pycharm-educational_pycharm-educational.desktop
用 Exec 行中的命令替换 /snap/bin/pycharm-educational
bash -i -c "/snap/bin/pycharm-educational"
或者如果结果不起作用,则恢复更改并使用源 ROS2 从控制台启动 IDE
snap run pycharm-educational
选择 python3.7 作为默认值(仅在需要旧模板中)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 3
安装pip
sudo apt install python-pip
安装升级点
pip install --upgrade pip
安装 open_cv
pip install opencv-python