赞
踩
本篇内容旨在快速了解crazyswarm2的安装、系统概况和API变化。据我所知,这是csdn上第一篇有关crazyswarm2项目的分享,希望领域内的小伙伴私聊沟通共同学习。
学习资料:
源码GitHub - IMRCLab/crazyswarm2: A Large Quadcopter Swarm
安装bug细节:
【crzayswarm2】中的chooser.py【报错】配置
关键代码解读:
【crazyswarm2】中Crazyflies.yaml参数文件配置
【crazyswarm2】中serve.yaml参数文件配置
【crazyswarm2】中motion_capture.yaml参数文件配置-CSDN博客
动作捕捉集成。在 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节点或启动其他工具。
目录
首次安装参考官方文档安装说明即可,需要在以下环境安装,只支持ros2版本:
Ubuntu | Python | ROS 2 |
20.04 | 3.7, 3.8 | Galactic |
22.04 | 3.10 | Humble |
①ros的安装:文档中推荐使用ros官方文档,但是博主建议使用鱼香ros,一键安装:
wget http://fishros.com/install -O fishros && . fishros
②安装完ros后还需要配置环境的依赖项,按照文件执行即可:(如果没装pip3会提示你,根据命令行安装即可)
- sudo apt install libboost-program-options-dev libusb-1.0-0-dev
- pip3 install rowan
此外,如果你计划使用CFlib后端,还需要配置以下环境:(可选,这里可能会卡顿,合理使用上网方法)
- pip3 install cflib transforms3d
- sudo apt-get install ros-*DISTRO*-tf-transformations %这里的*DISTRO*是你的ros版本:如20.04为Galactic
③设置 ROS 2 工作区,安装crazyswarm2的代码,并安装motion_capture_tracking(运动捕捉系统的ROS包,这里可能会提醒你下载pip):
- mkdir -p ros2_ws/src
- cd ros2_ws/src
- git clone https://github.com/IMRCLab/crazyswarm2 --recursive
- git clone --branch ros2 --recursive https://github.com/IMRCLab/motion_capture_tracking.git
④ 编译你的工作区(这里可能会有warnig,可能是cmake版本问题,忽略即可)
- cd ../
- colcon build --symlink-install
值得一提的是:symlink-install允许您编辑Python和配置文件,而无需每次都运行colcon build。
如果你需要在线仿真的话,你还需要执行以下的环境配置:
①在ros2工作区外,下载crazyflie-firmware文件:
git clone --recursive https://github.com/bitcraze/crazyflie-firmware.git
②进入crazyflie-firmware文件下,按照bitcraze网站构建python绑定:
- sudo apt install swig %如果已经安装过swig则不需要执行
- make cf2_defconfig
- make bindings_python
- cd build
- 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:
- . install/local_setup.bash
- ros2 launch crazyflie launch.py backend:=sim
可以看到打开了rviz2的终端并有一架无人机等待命令:
step2:打开终端2,先进入ROS 2工作区,再执行hello world仿真例程:
- . install/local_setup.bash
- ros2 run crazyflie_examples hello_world --ros-args -p use_sim_time:=True
可以看到无人机起飞一段距离并保持一段时间 这样表示仿真环境安装成功!!!
由于crazyswarm2还在保持更新中,如果你想要更新到最新的版本,可以利用下面命令对系统文件进行更新:
- cd ros2_ws/src/crazyswarm2
- git pull
- git submodule sync
- git submodule update --init --recursive
- cd ../
- colcon build --symlink-install
①基本的文件夹
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 :遥控器的配置。
crazyfile服务器将多个(官方称15架,实际上可以满足大概20架)无人机(左):crazyflies和一个或多个信号发射器(右):Crazyradio PA链接。
它有两个后端供您选择:
cpp:这是基于最低层的crazyflie-link-cpp。
cflib:这是基于crazyflie-lib-python,日志记录,参数和命令发送处理。
根据查表可知,他们能够支持后端的功能不同:
Functionality | Cpp | CFlib | Sim |
---|---|---|---|
Parameters | Yes | Yes | No |
Logging | |||
| Yes | Yes | No |
| Yes | Yes | No |
| No | Yes | No |
| Yes | Yes | No |
| No | Yes | No |
Broadcasts | Yes | No | n/a |
Manual control | |||
| Yes | No | Yes |
| Yes | No | No |
| No | Yes | No |
High-level control | |||
| Yes | Yes | Yes |
| Yes | Yes | Yes |
| Yes | No | Yes |
Positioning System | |||
| Yes | Yes | No |
| Yes | Yes | No |
| Yes | Yes | No |
| Yes | Yes | No |
它处理与Crazyflies的几个低级通信方面:
参数转 ROS 2 参数处理:接收来自 Crazyflie 的参数 ToC,将其转换为 ROS 2 参数,并根据 crazyflies.yaml 输入设置 CF2 参数。
记录到 ROS 2 主题处理:服务器在 crazyflie 中为数据流设置日志块,并将收到的变量转换为 ROS 2 topic,运行时日志块启用目前仅在服务器的 CFLIB 后端受支持。
运行时配置:当服务器与Crazyflies连接时,可以在运行时配置参数和日志记录。请检查使用情况。
设置的几项高级指令(这些功能crazyswarm1也支持):
起飞/着陆/GoTo:使用单个服务命令和给定的高度或坐标,您可以使连接的疯狂苍蝇起飞,前往某个位置并降落。
上传/开始轨迹:您可以上传预定义的轨迹并指示疯狂苍蝇是否需要开始飞行。
紧急情况 :在出现问题时关闭电机。
/all 或 /cf2 :服务设置为所有疯狂的苍蝇响应,或者每个单独的疯狂苍蝇,取决于前缀。
模拟器使用Crazyflie固件作为软件在环(SIL)。它提供与服务器相同的ROS接口,因此可以与C++或Python用户代码一起使用。
目前,所需的设定值在 rviz2 中可视化(请参阅用法)。但是,该代码也准备在未来支持基于物理的仿真。
ROS API 的任何使用,包括高级 Python 脚本,都可以在执行前可视化。机器人的初始位置和数量取自crazyflies.yaml配置文件。 仿真使用固件代码作为软件在环,并可以选择包括机器人动力学。 模拟的配置(物理模拟器、控制器等)可以在 server.yaml 中更改。
相关案例在本篇文章的1.2仿真配置的最后给出了例子。
首先要在每个终端链接ROS2工作区:
. install/local_setup.bash
Crazyflies.yaml :①设置与机器人相关的一切,无论是仿真还是实飞都涉及该文件配置。每个无人机都应该有一个唯一的URI,可以在Bitcraze的CFclient中进行更改。 ②包含不同的robot_types,以指示每个平台之间的差异。③yaml 文件还包含一个“all”字段,供您想要为所有连接的疯蝇启用参数或日志记录。
- robots:
- cf231:
- enabled: true
- uri: radio://0/80/2M/E7E7E7E7E7
- initial_position: [0, 0, 0]
- type: cf21 # see robot_types
-
- cf5:
- enabled: false
- uri: radio://0/80/2M/E7E7E7E705
- initial_position: [0, -0.5, 0]
- type: cf21 # see robot_types
-
-
- robot_types:
- cf21:
- motion_capture:
- enabled: true
- # only if enabled; see motion_capture.yaml
- marker: default_single_marker
- dynamics: default
- big_quad: false
- battery:
- voltage_warning: 3.8 # V
- voltage_critical: 3.7 # V
-
- cf21_mocap_deck:
- motion_capture:
- enabled: true
- # only if enabled; see motion_capture.yaml
- marker: mocap_deck
- dynamics: default
- big_quad: false
- battery:
- voltage_warning: 3.8 # V
- voltage_critical: 3.7 # V
-
-
- all:
- firmware_logging:
- enabled: false
- default_topics:
- pose:
- frequency: 10 # Hz
- #custom_topics:
- # topic_name1:
- # frequency: 10 # Hz
- # vars: ["stateEstimateZ.x", "stateEstimateZ.y", "stateEstimateZ.z", "pm.vbat"]
- # topic_name2:
- # frequency: 1 # Hz
- # vars: ["stabilizer.roll", "stabilizer.pitch", "stabilizer.yaw"]
- firmware_params:
- commander:
- enHighLevel: 1
- stabilizer:
- estimator: 2 # 1: complementary, 2: kalman
- controller: 2 # 1: PID, 2: mellinger
相较于crazyswarm1的python api,主要有以下部分,其中画删除线部分的API在crazyfile.py中被注释掉了。具体含义参考可以参考Crazyswarm1的Python API Referencehttps://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的讨论区中,有人说可以将已经注释的函数继续使用,继续设置参数即可,这一块我不是很理解:
①首先保障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的可视化。
这一部分需要硬件支持,包括 一个光学导航传感器 Flow deck 和激光测距传感器 Multi-ranger :
还需要安装 slam 工具箱,并打开crazyflie 服务器和速度命令处理程序,通过遥控实现建图:
需要安装安装 Navigation2 启动包,在RVIZ2中设置目标实现导航避障:
在某些情况下,向机器人提供运动捕捉空间中刚体的位置或姿势可能很有用。 例如,考虑在需要知道的固件上实现的避免碰撞算法 障碍物的位置。在这种情况下,可以在crazyflies.yaml中定义“虚拟”机器人。
- robots:
- obstacle:
- enabled: true
- initial_position: [0, -0.5, 0]
- type: marker # see robot_types
- id: 255
-
- robot_types:
- # Just a marker to track, not a robot to connect to
- marker:
- connection: none
- motion_capture:
- enabled: true
- marker: default_single_marker
- dynamics: default
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。