当前位置:   article > 正文

【Crazyswarm2】环境配置、系统概述和使用教程

crazyswarm

本篇内容旨在快速了解crazyswarm2的安装、系统概况和API变化。据我所知,这是csdn上第一篇有关crazyswarm2项目的分享,希望领域内的小伙伴私聊沟通共同学习。


学习资料:

 官方文档:Crazyswarm2: A ROS 2 testbed for Aerial Robot Teams — Crazyswarm2 1.0a1 documentation (imrclab.github.io)

 源码GitHub - IMRCLab/crazyswarm2: A Large Quadcopter Swarm

安装bug细节:

【crazyswarm2】安装PA的固件

【crzayswarm2】中的chooser.py【报错】配置

【crazyswarm2】中cfclient安装

关键代码解读:

【crazyswarm2】中launch.py参数文件配置

【crazyswarm2】中Crazyflies.yaml参数文件配置

【crazyswarm2】中serve.yaml参数文件配置

【crazyswarm2】中motion_capture.yaml参数文件配置-CSDN博客


Crazyswarm2与和Crazyswarm1有何不同?

  • 动作捕捉集成。在 Crazyswarm1 中,由于 ROS1 发布/订阅系统的限制,动作捕捉集成是crazyswarm_server的一部分。 相比之下,Crazyswarm2现在遵循更好的ROS风格设计,我们的动作捕捉抽象层和自定义。 逐帧跟踪作为单独的 ROS 2 包提供。 此外,Crazyswarm2 旨在从一开始就支持其他本地化方法(灯塔或仅限板载本地化)。

  • 通信后端。在 Crazyswarm2 中,我们依赖于最低层的 crazyflie-link-cpp,这与 Crazyswarm1 中的自定义链接实现不同。 这个新链接使用优先级队列,允许在飞行期间上传轨迹等新功能。此外,新链接应提高整体(通信)鲁棒性。 还有一个对crazyflie-lib-python后端的实验性支持。

  • 支持常见的无人机任务。Crazyswarm1被设计用于操作群体,不包括单个机器人操作的常见功能,例如远程操作。Crazyswarm2取代了Crazyswarm1和crazyflie_ros,因此支持任意URI,远程操作等。

  • 模拟。在 Crazyswarm1 中,支持高级 Python 脚本的设置点的简单可视化。不支持不使用高级 Python 脚本的 ROS 代码仿真,也不支持基于物理的仿真。 相比之下,Crazyswarm2将模拟实现为替代后端。这将支持多个物理/可视化后端(可选物理和空气动力学交互)。

  • 支持分布式群监控(计划)。在 Crazyswarm1 中,一个常见的群体监控工具是 chooser.py(启用/禁用 CF,检查电池电压等)。但是,当群运行时,此工具不起作用。 相比之下,Crazyswarm2将允许常见的集群监控任务,而无需重新启动ROS节点或启动其他工具。

目录

一、环境配置

1.1 基本配置

1.2 仿真配置

1.3 Crazyswarm2的文件更新

二、系统概述

2.1 crazyflie ROS 2 文件的概述

2.2 Crazyflie server

2.3 Crazyflie server支持的飞行指令服务

2.4 在线模拟功能

三、使用教程

3.1 Crazyflies.yaml 配置文件

3.2 Crazyswarm2 Python API

3.3新的演示功能:RVIZ可视化、SLAM、NAV、跟踪

3.3.1真实世界里飞行的RVIZ可视化

3.3.2SLAM影射

3.3.3导航NAV2

3.3.4 跟踪非机器人物体


一、环境配置

首次安装参考官方文档安装说明即可,需要在以下环境安装,只支持ros2版本

Ubuntu

Python

ROS 2

20.04

3.7, 3.8

Galactic

22.04

3.10

Humble

1.1 基本配置

①ros的安装:文档中推荐使用ros官方文档,但是博主建议使用鱼香ros,一键安装

wget http://fishros.com/install -O fishros && . fishros

②安装完ros后还需要配置环境的依赖项,按照文件执行即可:(如果没装pip3会提示你,根据命令行安装即可)

  1. sudo apt install libboost-program-options-dev libusb-1.0-0-dev
  2. pip3 install rowan

此外,如果你计划使用CFlib后端,还需要配置以下环境:(可选,这里可能会卡顿,合理使用上网方法)

  1. pip3 install cflib transforms3d
  2. sudo apt-get install ros-*DISTRO*-tf-transformations %这里的*DISTRO*是你的ros版本:如20.04为Galactic

③设置 ROS 2 工作区,安装crazyswarm2的代码,并安装motion_capture_tracking(运动捕捉系统的ROS包,这里可能会提醒你下载pip):

  1. mkdir -p ros2_ws/src
  2. cd ros2_ws/src
  3. git clone https://github.com/IMRCLab/crazyswarm2 --recursive
  4. git clone --branch ros2 --recursive https://github.com/IMRCLab/motion_capture_tracking.git

④ 编译你的工作区(这里可能会有warnig,可能是cmake版本问题,忽略即可)

  1. cd ../
  2. colcon build --symlink-install

 值得一提的是:symlink-install允许您编辑Python和配置文件,而无需每次都运行colcon build。


1.2 仿真配置

如果你需要在线仿真的话,你还需要执行以下的环境配置:

在ros2工作区外,下载crazyflie-firmware文件:

git clone --recursive https://github.com/bitcraze/crazyflie-firmware.git

进入crazyflie-firmware文件下,按照bitcraze网站构建python绑定

  1. sudo apt install swig %如果已经安装过swig则不需要执行
  2. make cf2_defconfig
  3. make bindings_python
  4. cd build
  5. python3 setup.py install --user

 ③之后,确保可以在 python 路径中找到绑定(比如我安装在根目录下就执行:export PYTHONPATH=~/crazyfile-firmware/build:$PYTHONPATH):

export PYTHONPATH=<replace-with-path-to>/crazyflie-firmware/build:$PYTHONPATH

④在仿真环境中执行hello world例程检验是否安装完成:

step1:打开终端1,所有终端都要进入ROS 2工作区(cd ../ros2_ws)执行,然后执行launch.py:

  1. . install/local_setup.bash
  2. ros2 launch crazyflie launch.py backend:=sim

可以看到打开了rviz2的终端并有一架无人机等待命令: 

step2:打开终端2,先进入ROS 2工作区,再执行hello world仿真例程:

  1. . install/local_setup.bash
  2. ros2 run crazyflie_examples hello_world --ros-args -p use_sim_time:=True

可以看到无人机起飞一段距离并保持一段时间 这样表示仿真环境安装成功!!!


1.3 Crazyswarm2的文件更新

由于crazyswarm2还在保持更新中,如果你想要更新到最新的版本,可以利用下面命令对系统文件进行更新:

  1. cd ros2_ws/src/crazyswarm2
  2. git pull
  3. git submodule sync
  4. git submodule update --init --recursive
  5. cd ../
  6. colcon build --symlink-install

二、系统概述

2.1 crazyflie ROS 2 文件的概述

①基本的文件夹

  • crazyflie/:包含crazyflie服务器节点和crazyflies.yaml的软件包,chooser在此文件夹下。

  • crazyflie_py/:包含 python 库的软件包,该库环绕着 ROS 2 服务和与 crazyflie 服务器节点连接的主题。

  • crazyflie_examples/:包含使用 crazyflie ROS 2 软件包的示例的软件包。

  • crazyflie_interfaces/:包含 crazyflie ROS 2 项目的所有 msg 和 srv 的软件包。

② 配置文件

  • Crazyflies.yaml :设置与机器人相关的一切。

  • server.yaml :设置与服务器相关的所有内容。

  • motion_capture.yaml :动作捕捉包的配置。

  • teleop.yaml :遥控器的配置。


2.2 Crazyflie server

 crazyfile服务器将多个(官方称15架,实际上可以满足大概20架)无人机(左):crazyflies和一个或多个信号发射器(右):Crazyradio PA链接。

它有两个后端供您选择:

 根据查表可知,他们能够支持后端的功能不同:

Functionality

Cpp

CFlib

Sim

Parameters

Yes

Yes

No

Logging

  • default: pose

Yes

Yes

No

  • default: scan

Yes

Yes

No

  • default: odom

No

Yes

No

  • custom

Yes

Yes

No

  • Add/Remove Srv

No

Yes

No

Broadcasts

Yes

No

n/a

Manual control

  • cmd_full_state

Yes

No

Yes

  • cmd_position

Yes

No

No

  • cmd_hover

No

Yes

No

High-level control

  • takeoff/land

Yes

Yes

Yes

  • go_to

Yes

Yes

Yes

  • upload/start traj

Yes

No

Yes

Positioning System

  • Motion Capture

Yes

Yes

No

  • Flow Deck

Yes

Yes

No

  • LightHouse

Yes

Yes

No

  • LPS

Yes

Yes

No

2.3 Crazyflie server支持的飞行指令服务

它处理与Crazyflies的几个低级通信方面:

  • 参数转 ROS 2 参数处理:接收来自 Crazyflie 的参数 ToC,将其转换为 ROS 2 参数,并根据 crazyflies.yaml 输入设置 CF2 参数。

  • 记录到 ROS 2 主题处理:服务器在 crazyflie 中为数据流设置日志块,并将收到的变量转换为 ROS 2 topic,运行时日志块启用目前仅在服务器的 CFLIB 后端受支持

  • 运行时配置:当服务器与Crazyflies连接时,可以在运行时配置参数和日志记录。请检查使用情况

设置的几项高级指令(这些功能crazyswarm1也支持):

  • 起飞/着陆/GoTo:使用单个服务命令和给定的高度或坐标,您可以使连接的疯狂苍蝇起飞,前往某个位置并降落。

  • 上传/开始轨迹:您可以上传预定义的轨迹并指示疯狂苍蝇是否需要开始飞行。

  • 紧急情况 :在出现问题时关闭电机。

  • /all 或 /cf2 :服务设置为所有疯狂的苍蝇响应,或者每个单独的疯狂苍蝇,取决于前缀。

2.4 在线模拟功能

模拟器使用Crazyflie固件作为软件在环(SIL)。它提供与服务器相同的ROS接口,因此可以与C++或Python用户代码一起使用。

目前,所需的设定值在 rviz2 中可视化(请参阅用法)。但是,该代码也准备在未来支持基于物理的仿真。

ROS API 的任何使用,包括高级 Python 脚本,都可以在执行前可视化。机器人的初始位置和数量取自crazyflies.yaml配置文件。 仿真使用固件代码作为软件在环,并可以选择包括机器人动力学。 模拟的配置(物理模拟器、控制器等)可以在 server.yaml 中更改。

相关案例在本篇文章的1.2仿真配置的最后给出了例子。

三、使用教程

首先要在每个终端链接ROS2工作区:

. install/local_setup.bash

3.1 Crazyflies.yaml 配置文件

  • Crazyflies.yaml :①设置与机器人相关的一切,无论是仿真还是实飞都涉及该文件配置。每个无人机都应该有一个唯一的URI,可以在Bitcraze的CFclient中进行更改。 ②包含不同的robot_types,以指示每个平台之间的差异。③yaml 文件还包含一个“all”字段,供您想要为所有连接的疯蝇启用参数或日志记录。

    1. robots:
    2. cf231:
    3. enabled: true
    4. uri: radio://0/80/2M/E7E7E7E7E7
    5. initial_position: [0, 0, 0]
    6. type: cf21 # see robot_types
    7. cf5:
    8. enabled: false
    9. uri: radio://0/80/2M/E7E7E7E705
    10. initial_position: [0, -0.5, 0]
    11. type: cf21 # see robot_types
    12. robot_types:
    13. cf21:
    14. motion_capture:
    15. enabled: true
    16. # only if enabled; see motion_capture.yaml
    17. marker: default_single_marker
    18. dynamics: default
    19. big_quad: false
    20. battery:
    21. voltage_warning: 3.8 # V
    22. voltage_critical: 3.7 # V
    23. cf21_mocap_deck:
    24. motion_capture:
    25. enabled: true
    26. # only if enabled; see motion_capture.yaml
    27. marker: mocap_deck
    28. dynamics: default
    29. big_quad: false
    30. battery:
    31. voltage_warning: 3.8 # V
    32. voltage_critical: 3.7 # V
    33. all:
    34. firmware_logging:
    35. enabled: false
    36. default_topics:
    37. pose:
    38. frequency: 10 # Hz
    39. #custom_topics:
    40. # topic_name1:
    41. # frequency: 10 # Hz
    42. # vars: ["stateEstimateZ.x", "stateEstimateZ.y", "stateEstimateZ.z", "pm.vbat"]
    43. # topic_name2:
    44. # frequency: 1 # Hz
    45. # vars: ["stabilizer.roll", "stabilizer.pitch", "stabilizer.yaw"]
    46. firmware_params:
    47. commander:
    48. enHighLevel: 1
    49. stabilizer:
    50. estimator: 2 # 1: complementary, 2: kalman
    51. controller: 2 # 1: PID, 2: mellinger

3.2 Crazyswarm2 Python API

相较于crazyswarm1的python api,主要有以下部分,其中画删除线部分的API在crazyfile.py中被注释掉了。具体含义参考可以参考Crazyswarm1的Python API Referenceicon-default.png?t=N7T8https://crazyswarm.readthedocs.io/en/latest/api.html

- setGroupMask(groupMask)

- enableCollisionAvoidance(others, ellipsoidRadii)

- disableCollisionAvoidance()

- takeoff(targetHeight, duration, groupMask=0)

- land(targetHeight, duration, groupMask=0)

- stop(groupMask=0)

- goTo(goal, yaw, duration, relative=False, groupMask=0)

- uploadTrajectory(trajectoryId, pieceOffset, trajectory)

- startTrajectory(trajectoryId, timescale=1.0, reverse=False, relative=True, groupMask=0)

- notifySetpointsStop(remainValidMillisecs=100, groupMask=0)

- position()

- getParam(name)

- setParam(name, value)

- setParams(params)

- cmdFullState(pos, vel, acc, yaw, omega)

- cmdVelocityWorld(vel, yawRate)

- cmdStop()

- cmdVel(roll, pitch, yawrate, thrust)

- cmdPosition(pos, yaw=0)

- setLEDColor(r, g, b)

 但是在crazyswarm2的讨论区中,有人说可以将已经注释的函数继续使用,继续设置参数即可,这一块我不是很理解:

3.3新的演示功能:RVIZ可视化、SLAM、NAV、跟踪

3.3.1真实世界里飞行的RVIZ可视化

 ①首先保障crazyflie.yaml中,确保添加或取消注释需要和不需要的飞机,以及all选项。

②在第一个终端中,启动服务器(如果需要 odom 主题,请使用 backend:=cflib)

ros2 launch crazyflie launch.py

③在第二个终端执行

rviz2

 ④然后将“fixed frame”设置为“world”并添加TF插件。然后在“TF”中,选中“show names’”复选框。 crazyfile的名字应该与它们的估计位置一起出现。

此 RVIZ2 可视化可以针对默认主题完成:

  • “pose”: '/cf1/pose/' 变换和姿势

  • 'odom': '/cf1/odom/' Odometry

  • “scan”: “/cf1/scan” Scan

这里是五架无人机在真实的世界里飞行的截图和rviz的可视化。

3.3.2SLAM影射

 这一部分需要硬件支持,包括 一个光学导航传感器 Flow deck 和激光测距传感器 Multi-ranger :

 还需要安装 slam 工具箱,并打开crazyflie 服务器和速度命令处理程序,通过遥控实现建图:

3.3.3导航NAV2

需要安装安装 Navigation2 启动包,在RVIZ2中设置目标实现导航避障:

3.3.4 跟踪非机器人物体

在某些情况下,向机器人提供运动捕捉空间中刚体的位置或姿势可能很有用。 例如,考虑在需要知道的固件上实现的避免碰撞算法 障碍物的位置。在这种情况下,可以在crazyflies.yaml中定义“虚拟”机器人。

  1. robots:
  2. obstacle:
  3. enabled: true
  4. initial_position: [0, -0.5, 0]
  5. type: marker # see robot_types
  6. id: 255
  7. robot_types:
  8. # Just a marker to track, not a robot to connect to
  9. marker:
  10. connection: none
  11. motion_capture:
  12. enabled: true
  13. marker: default_single_marker
  14. dynamics: default
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/323400
推荐阅读
相关标签
  

闽ICP备14008679号