ROS控制crazyflie无人机
- 参考资料
- 测试环境
- 一、设置用户权限
- 二、安装Crazyflie程序库和客户端
- 三、安装crazyflie_ros程序包
- 四、遥控器控制crazyflie无人机
本篇博客记录了测试使用ros控制crazyflie无人机。
参考资料
- Flying Multiple UAVs Using ROS
- crazyflie_ros
- crazyflie-lib-python
测试环境
- Ubuntu 18.04
- ROS Melodic
- Crazyflie 2.1
- Crazyradio PA
一、设置用户权限
- 打开一个终端,输入:
$ sudo groupadd plugdev
$ sudo usermod -a -G plugdev $USER
- 创建.rules文件,在终端中输入
$ sudo gedit /etc/udev/rules.d/99-crazyradio.rules
然后在创建的文件中添加
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev"
保存文件并退出。继续在该文件夹下创建另一个文件,在终端中输入
$ sudo gedit /etc/udev/rules.d/99-crazyflie.rules
然后在创建的文件中添加
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0664", GROUP="plugdev"
保存文件并退出。
- 重载rules。在终端中输入:
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
完成上述操作后需要重新登录用户,以使更改生效,然后在PC上插入一个Crazyradio PA。
二、安装Crazyflie程序库和客户端
- 安装crazyflie-lib-python库。
首先安装相关依赖文件:
$ sudo apt-get install python3-pip python3-pyqt5 python3-numpy python3-zmq
$ sudo pip3 install pyusb==1.0.0b2
$ sudo pip3 install pyqtgraph appdirs
然后安装程序库:
$ mkdir ~/crazyflie
$ cd ~/crazyflie
$ git clone https://github.com/bitcraze/crazyflie-lib-python.git
$ cd crazyflie-lib-python
$ pip3 install --user -e .
- 安装crazyflie-client-python客户端
$ cd ~/crazyflie
$ git clone https://github.com/bitcraze/crazyflie-clients-python.git
$ cd crazyflie-clients-python
$ pip3 install --user -e .
可以在终端中输入下面的命令来启动客户端:
$ cd ~/crazyflie/crazyflie-clients-python
$ python3 bin/cfclient
注意:本次测试时,使用的crazyflie-lib-python和crazyflie-client-python版本分别为
- de15fc461baf0853489a4d081629ead2bfe74809
- d77c1d7179046f51aba19828bc9c0dcb45570fc0
三、安装crazyflie_ros程序包
- 安装和编译crazyflie_ros程序包。在终端中输入:
$ mkdir -p ~/ROS/crazyflie_ws/src
$ cd ~/ROS/crazyflie_ws/src
$ catkin_init_workspace
$ git clone https://github.com/whoenig/crazyflie_ros.git
$ cd ~/ROS/crazyflie_ws
$ catkin_make
$ source ~/crazyflie_ws/devel/setup.bash
- 扫描和检测crazyflie无人机
打开一个crazyflie无人机。在终端中输入:
$ rosrun crazyflie_tools scan
将会启动对范围内的无人机的扫描,并在终端中返回该无人机的uri号,如
radio://0/80/2M
注意:本次测试时,使用的crazyflie_ros程序包的版本为
- 83d1fcf8b2b4dbcaebce899fc11b1a542f6959b7
四、遥控器控制crazyflie无人机
- 使用XBox360遥控器
打开一个终端,输入:
$ roslaunch crazyflie_demo teleop_xbox360.launch uri:=radio://0/80/2M
其中uri:=radio://0/80/2M为无人机uri参数设置,需要根据前面的扫描结果进行相应更改。运行该文件会打开一个rviz可视化窗口,
其中的红色箭头显示了从crazyflie上读取到的实时的IMU数据。由于我手头上目前没有XBox360遥控器,因此无法对无人机进行遥控,但我们可以查看此时ros中消息的传递过程。打开一个终端,输入:
$ rqt_graph
可以看到
控制无人机的关键是/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的桨叶开始旋转。
- 使用Logitech遥控器
连接遥控器与电脑(USB),电脑将会自动创建一个新的设备文件/dev/input/js0。通常为js0,可以通过命令
$ ls /dev/input
进行查看。然后在终端中运行
$ rosrun joy joy_node _dev:=/dev/input/js0
并在另一个终端中查看ros消息
$ rostopic echo /joy
通过按动遥控器上的按钮和推杆,就可以找到其与无人机飞行轴之间的对应关系。根据该遥控器的对应关系,对xbox360.launch文件和crazyflie_demo/scripts/controller.py文件中的映射进行相应更改,就可以使用该遥控器直接操纵crazyflie了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)