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安装
- 安装源
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'
- 设置key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 更新
sudo apt-get update
- 安装,这里介绍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
- 解决依赖
sudo rosdep init
rosdep update
- 环境设置
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 测试
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
``
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
无人机悬停一段时间后降落