crazyswarm开发记录

Crazyflie测试

测试环境
  • Ubuntu 18.04
  • ROS Melodic
  • Crazyflie 2.1
  • Crazyradio PA
  • motive2.01

Crazyflie参考资料

https://github.com/bitcraze

https://www.bitcraze.io/documentation/start/

https://www.bitcraze.io/documentation/tutorials/getting-started-with-crazyflie-2-x/

https://github.com/whoenig/crazyflie_ros

https://crazyswarm.readthedocs.io/en/latest/

https://crazyswarm.readthedocs.io/en/latest/tutorials/tutorials.html

ROS-melodic安装

  1. 安装源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 设置key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 更新
sudo apt-get update
  1. 安装,这里介绍Desktop-Full安装: (Recommended) : ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception 和 安装rosinstall,便利的工具
sudo apt-get install ros-melodic-desktop-full 
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
  1. 解决依赖
sudo rosdep init
rosdep update
  1. 环境设置
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 测试
roscore

如果出现以下信息,则安装成功

  .. logging to /home/ubuntu/.ros/log/cb38e680-dee2-11ea-bae1-70665563e003/roslaunch-nx-1205.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://nx:36773/
ros_comm version 1.14.7


SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.7

NODES

auto-starting new master
process[master]: started with pid [1215]
ROS_MASTER_URI=http://nx:11311/

setting /run_id to cb38e680-dee2-11ea-bae1-70665563e003
process[rosout-1]: started with pid [1228]
started core service [/rosout]

控制台安装

(Linux端)安装:

1获取crazyflie-client-python源代码,在终端输入:

git clone https://github.com/bitcraze/crazyflie-clients-python.git

2安装python3, pip, pyqt5,在终端输入:

sudo apt-get install python3 python3-pip python3-pyqt5 python3-pyqt5.qtsvg

3打开刚刚git clone的crazyflie-client-python源代码的路径,安装crazyflie-client,在终端输入:

``

cd crazyflie-clients-python

pip3 install -e .

4重启电脑后,打开client,在终端输入:

cfclient

5配置crazyradio pa,在终端输入

``

cat <<EOF | sudo tee /etc/udev/rules.d/99-bitcraze.rules > /dev/null
# Crazyradio (normal operation)
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev"
# Bootloader
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev"
# Crazyflie (over USB)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0664", GROUP="plugdev"
EOF

控制台介绍

Crazyflie_ros下载

``

git clone https://github.com/whoenig/crazyflie_ros.git
cd crazyflie_ros
git submodule init
git submodule update

工作区上使用 catkin_make进行编译

Crazyswarm下载

按照官网的安装步骤可能会报错,在环境安装过程中直接用python2

设置安装环境

export CSW_PYTHON=python2 

安装依赖

sudo apt install -y ros-melodic-tf ros-melodic-tf-conversions ros-melodic-joy
sudo apt install -y libpcl-dev libusb-1.0-0-dev
sudo apt install -y swig libpython2.7-dev python2.7-pip
python2 -m pip install pytest numpy PyYAML scipy

安装仿真可视化软件

python2 -m pip install matplotlib

安装录制软件(可选)

python2 -m pip install matplotlib

安装Crazyswarm

git clone https://github.com/USC-ACTLab/crazyswarm.git
cd crazyswarm
./build.sh
cd ros_ws/src/crazyswarm/scripts
source ../../../devel/setup.bash
cd ros_ws/src/crazyswarm/scripts
source ../../../devel/setup.bash
python2 -m pytest

飞行测试

1,手机

下载对应app

ios:crazyflie

2,电脑端,插入Crazyradio PA,打开飞机
a,打开控制台

在终端输入:

cfclient

b,获取飞机的uir,在终端输入:

rosrun crazyflie_tools scan

将会启动对范围内的无人机的扫描,并在终端中返回该无人机的uri号,如

radio://0/80/2M

c,遥控器控制crazyflie无人机(XBox360遥控器)

roslaunch crazyflie_demo teleop_xbox360.launch uri:=radio://0/80/2M

控制无人机的关键是/crazyflie/cmd_vel话题。打开一个终端,输入:

$ rostopic pub -r 50 /crazyflie/cmd_vel geometry_msgs/Twist "linear: x: 0.0 y: 0.0 z: 40000.0 angular: x: 0.0 y: 0.0 z: 0.0"

可以看到crazyflie的桨叶开始旋转。

电脑Crazyradio连接多个crazyflie

  • 启动控制台

    $ cfclient

  • 确保地址字段设置为0xE7E7E7E7E7,并单击“scan”

  • 包含“选择接口”的下拉框现在应该有另一个包含您的CranchyFlie URI的条目radio://0/100/2M,并单击“connect”

  • 在“Connect”菜单中,选择结果中的“Configure 2.0”项对话框,将 Radio Address 更改为唯一的数字,例如0xE7E7E7E7F0用于第一个crazyflie,第二个crazyflie为0xE7E7E7F1,以及等等。选择“Write”,然后选择“Exit”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B93qFqSR-1655467754227)(Crazyflie测试.assets/3db92d2d96b58487887e9df8f9278df-16539000925307.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBFyg1N4-1655467754228)(Crazyflie测试.assets/bf7c45aaffdd8272804e212d7b7c60e-16538999999122-16539000034714.png)]

  • 在控制台中,选择“Disconnect”

  • 重新启动crazyflie

  • 更新控制台的地址字段为更改的Radio Address (如0xE7E7E7E7F0)并单击“扫描”。

  • 在下拉列表中看到更长的URI装有radio://0/100/2M/E7E7E7E701

    此时Crazyradio即可连接多个crazyflie。(注:每台crazyflie的Radio Address 更改后要记录好。不然后面电脑连不上crazyflie)

代码固件升级

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VufkFDb-1655467754230)(Crazyflie测试.assets/image-20220530163222716.png)]

  • 使用 Crazyradio 连接到 Crazyflie
  • 转到菜单Crazyflie->Bootloader
  • 从下拉菜单中选择最新版本。(从Github 发布页面下载)
  • 单击“程序”并等待 STM 和 NRF 都被刷新。
  • crazyflie 会自动重启几次。
  • 在所有闪烁完成并在底部看到“状态:空闲”之前,请勿触摸或重新启动您的 crazyflie。
  • 检查固件版本,在View菜单下,打开Tabs->Console选项卡并查看连接到 Crazyflie 2.X 时的输出

动捕定位系统测试(OptiTrack)

在动捕电脑中

标定 Calibration

与其他多相机测量系统类似,光学运动捕捉系统首先要进行标定才能够使用。在标定过程中, 系统通过捕获的图像计算每个相机的位置、 角度、以及畸变。 通过标定, Motive 构建 3D 捕获空间。 具体来说,通过观察多个同步相机的 2D 图像,关联到通过三角测量得到的每个相机已知的标定 Marker 的位置。 注意, 如果标定之后相机有任何变化, 需要重新进行标定。即便外部设置没有改变,随着时间的变化、 温度其他环境的波动,标定精度会下降,建议每天标定一次系统。
标定步骤
1、准备、 优化捕获设置;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cSnJTLy7-1655467754230)(image/Crazyflie测试/1655365422142.png)]

2、 在相机预览窗口( Camera Preview) 中, 点击 清除现有的 Mask 区域;
3、 打开标定窗口,使用 Mask Visible 去除场地中不能移除的反光物体;
4、 采集标定采样点( Wanding);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0R926wYm-1655467754231)(image/Crazyflie测试/1655365669705.png)]

5、 计算、 检查标定结果;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w12M4F0I-1655467754231)(image/Crazyflie测试/1655365695109.png)]

6、 放入L型标定杆,设置地面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eN0iiJYq-1655467754231)(image/Crazyflie测试/1655365706293.png)]

创建刚体

将所要创建模型的刚体贴好标记点,放置在标定好的场地内,在 Motive 的 3D 视图中框选住代表刚体模型的标记点。 然后点击右键选择 Rigid Body 下的 Create From Selected Markers;或者使用热键: Ctrl +T;或者在 Asset 窗口点击,选择 New Rigid Body。通过以上三种方式都可以对选中 Marker 点完成刚体创建。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgTY3ooJ-1655467754232)(image/Crazyflie测试/1655365718987.png)]

刚体跟踪

对于创建的刚体,由其枢轴点( Pivot Point)代表该刚体的位置和姿态。 当创建刚体时,其枢轴点将默认放置在其几何中心, 方向轴将与全局坐标轴对齐。
Rigid Body->Real-Time Info 窗口可以查看选中 Rigid Body 的实时信息, Rigid
Body 的位置信息是枢轴点相对于世界坐标系坐标轴原点的位置,姿态信息是相对于初始创建刚体坐标轴的变化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CV30VU4T-1655467754233)(image/Crazyflie测试/1655365730417.png)]

Data Streaming

Motive 可以通过多种方式,将跟踪的数据 实 时 传 输 到 其 他 程 序 : Autodesk MotionBuilder、 Visual3D、 Unreal Engine 4、 3ds Max、 Maya (VCS)、 VRPN、 Trackd。Natnet SDK 支持用户创建自定义客户端用来接收数据,数据流选项不需要单独的许可证。常 见 的 运 动 捕 捉 应 用 依 赖 于 实 时 跟 踪 ,OptiTrack 系统旨在提供低延时的数据,Streaming 窗口中配置选定的服务器通过网络广播数据。 可通过 View 选项下 Data Streaming Pane

红色部分都要打开:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMypWSnl-1655467754233)(image/Crazyflie测试/1655365742031.png)]

在第三方电脑中

配置crazyswarm、crazyflie和动捕系统之间的通信

配置crazyflie
  • 启动控制台

    $ cfclient

  • 确保地址字段设置为0xE7E7E7E7E7,并单击“scan”

  • 包含“选择接口”的下拉框现在应该有另一个包含您的CranchyFlie URI的条目radio://0/100/2M,并单击“connect”

  • 在“Connect”菜单中,选择结果中的“Configure 2.0”项对话框,将 Radio Address 更改为唯一的数字,0xE7E7E7E701用于第一个crazyflie,第二个crazyflie为0xE7E7E7F1,以及等等。选择“Write”,然后选择“Exit”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZR5kybCE-1655467754233)(Crazyflie测试.assets/3db92d2d96b58487887e9df8f9278df-16539000925307.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZFSgRwjd-1655467754234)(Crazyflie测试.assets/bf7c45aaffdd8272804e212d7b7c60e-16538999999122-16539000034714.png)]

  • 在控制台中,选择“Disconnect”
  • 重新启动crazyflie
  • 更新控制台的地址字段为更改的Radio Address (0xE7E7E7E701)并单击“扫描”。
  • 在下拉列表中看到更长的URI装有radio://0/100/2M/E7E7E7E701

此时这台crazyflie的Address为0xE7E7E7E701;用 rosrun crazyflie_tools scan已经扫描不出来了。(用标签纸记录好并粘贴到机身)

配置crazyswarm

hover_swarm.launch文件

在文件ros_ws/src/crazyswarm/launch/hover_swarm.launch中更改动捕型号并添加动捕电脑的ip地址

motion_capture_type: "optitrack"
motion_capture_host_name: "optitrackPC" # hostname or IP address
motion_capture_interface_ip:"optitrackPC"# IP address
object_tracking_type: "motionCapture"
crazy.yalm
# ros_ws/src/crazyswarm/launch/crazyflies.yaml
crazyflies:
  - id: 1 # id 与动捕刚体的名字对应,id :1 == 动捕名字:cf1,id:n == 动捕名字:cfn
    channel: 100 #这里的channel要和crazyflie的IP地址对应
    initialPosition: [1.5, 1.5, 0.0] #飞机的初始位置
    type: default #与飞机的种类有关,我们购买的属于default
  - id: 2
    channel: 110
    initialPosition: [1.5, 1.0, 0.0]
    type: medium

测试

1. 在动捕系统中创建名为cf1的飞机刚体
2. 连接一架crazyswarm
3. 运行crazyswarm

在第三方电脑中连接无人机后运行

roslaunch crazyswarm hover_swarm.launch
cd ros_ws/src/crazyswarm/scripts
python2 python hello_world.py

无人机悬停一段时间后降落

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值