Git Product home page Git Product logo

crazyflie_ros's Introduction

Build Status

WARNING: This repository is deprecated. Please use the Crazyswarm instead, even when only operating a single Crazyflie. If you are missing features in the Crazyswarm, feel free to open an open issue.

crazyflie_ros

ROS stack for Bitcraze Crazyflie (http://www.bitcraze.se/), with the following features:

  • Support for Crazyflie 1.0 and Crazyflie 2.0 (using stock firmware)
  • Publishes on-board sensors in ROS standard message formats
  • Supports ROS parameters to reconfigure crazyflie parameters
  • Support for using multiple Crazyflies with a single Crazyradio
  • Includes external controller for waypoint navigation (if motion capture system is available)
  • No dependency to the Bitcraze SDK (Driver and Controller written in C++)

A tutorial (for a slightly older version) is available in W. Hönig and N. Ayanian. "Flying Multiple UAVs Using ROS", Chapter in Robot Operating System (ROS): The Complete Reference (Volume 2), Springer, 2017. (see http://act.usc.edu/publications.html for a free pre-print).

Citing This Work

This project is published under the very permissive MIT License. However, if you use the package we appreciate if you credit this project accordingly.

For academic publications, you can cite the following book chapter:

@Inbook{crazyflieROS,
  author={Wolfgang H{\"o}nig
          and Nora Ayanian},
  editor={Anis Koubaa},
  title={Flying Multiple UAVs Using ROS},
  bookTitle={Robot Operating System (ROS): The Complete Reference  (Volume 2)},
  year={2017},
  publisher={Springer International Publishing},
  pages={83--118},
  isbn={978-3-319-54927-9},
  doi={10.1007/978-3-319-54927-9_3},
  url={https://doi.org/10.1007/978-3-319-54927-9_3}
}

If your work is related to Mixed Reality, you might cite the paper which introduced the package instead, using the following bibtex entry:

@conference{HoenigMixedReality2015,
  author = {Wolfgang H{\"o}nig and Christina Milanes and Lisa Scaria and Thai Phan and Mark Bolas and Nora Ayanian},
  booktitle = {IEEE/RSJ Intl Conf. Intelligent Robots and Systems},
  pages = {5382 - 5387},
  title = {Mixed Reality for Robotics},
  year = {2015}}

For any other mentioning please include my affiliation (ACTLab at University of Southern California or USC in short; The link to our webpage is http://act.usc.edu) as this work was partially done as part of my research at USC.

Installation

Clone the package into your catkin workspace:

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

Use catkin_make on your workspace to compile.

Usage

There are six packages included: crazyflie_cpp, crazyflie_driver, crazyflie_tools, crazyflie_description, crazyflie_controller, and crazyflie_demo. Note that the below description might be slightly out-of-date, as we continue merging the Crazyswarm and crazyflie_ros.

Crazyflie_Cpp

This package contains a cpp library for the Crazyradio and Crazyflie. It can be used independently of ROS.

Crazyflie_driver

This package contains the driver. In order to support multiple Crazyflies with a single Crazyradio, there is crazyflie_server (communicating with all Crazyflies) and crazyflie_add to dynamically add Crazyflies. The server does not communicate to any Crazyflie initially, hence crazyflie_add needs to be used.

Crazyflie_tools

This package contains tools which are helpful, but not required for normal operation. So far, it just support one tool for scanning for a Crazyflie.

You can find connected Crazyflies using:

rosrun crazyflie_tools scan

Crazyflie_description

This package contains a 3D model of the Crazyflie (1.0). This is for visualization purposes in rviz.

Crazyflie_controller

This package contains a simple PID controller for hovering or waypoint navigation. It can be used with external motion capture systems, such as VICON.

Crazyflie_demo

This package contains a rich set of examples to get quickly started with the Crazyflie.

For teleoperation using a joystick, use:

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

where the uri specifies the uri of your Crazyflie. You can find valid uris using the scan command in the crazyflie_tools package.

For hovering at (0,0,1) using VICON, use:

roslaunch crazyflie_demo hover_vicon.launch uri:=radio://0/100/2M frame:=/vicon/crazyflie/crazyflie x:=0 y:=0 z:=1

where the uri specifies the uri of your Crazyflie and frame the tf-frame. The launch file runs vicon_bridge automatically.

For multiple Crazyflies make sure that all Crazyflies have a different address. Crazyflies which share a dongle should use the same channel and datarate for best performance. The performance degrades with the number of Crazyflies per dongle due to bandwidth limitations, however it was tested successfully to use 3 CFs per Crazyradio.

roslaunch crazyflie_demo multi_teleop_xbox360.launch uri1:=radio://0/100/2M/E7E7E7E7E7 uri2:=radio://0/100/2M/E7E7E7E705

Please check the launch files in the crazyflie_demo package for other examples, including simple waypoint navigation.

ROS Features

Parameters

The launch file supports the following arguments:

  • uri: Specifier for the crazyflie, e.g. radio://0/80/2M
  • tf_prefix: tf prefix for the crazyflie frame(s)
  • roll_trim: Trim in degrees, e.g. negative if flie drifts to the left
  • pitch_trim: Trim in degrees, e.g. negative if flie drifts forward

See http://wiki.bitcraze.se/projects:crazyflie:userguide:tips_and_tricks for details on how to obtain good trim values.

Subscribers

cmd_vel

Similar to the hector_quadrotor, package the fields are used as following:

  • linear.y: roll [e.g. -30 to 30 degrees]
  • linear.x: pitch [e.g. -30 to 30 degrees]
  • angular.z: yawrate [e.g. -200 to 200 degrees/second]
  • linear.z: thrust [10000 to 60000 (mapped to PWM output)]

Publishers

imu

  • sensor_msgs/IMU
  • contains the sensor readings of gyroscope and accelerometer
  • The covariance matrices are set to unknown
  • orientation is not set (this could be done by the magnetometer readings in the future.)
  • update: 10ms (time between crazyflie and ROS not synchronized!)
  • can be viewed in rviz

temperature

magnetic_field

  • sensor_msgs/MagneticField
  • update: 100ms (time between crazyflie and ROS not synchronized!)

pressure

  • Float32
  • hPa (or mbar)
  • update: 100ms (time between crazyflie and ROS not synchronized!)

battery

  • Float32
  • Volts
  • update: 100ms (time between crazyflie and ROS not synchronized!)

Similar Projects

Notes

  • The dynamic_reconfigure package (http://wiki.ros.org/dynamic_reconfigure/) seems like a good fit to map the parameters, however it has severe limitations:
    • Changed-Callback does not include which parameter(s) were changed. There is only a notion of a level which is a simple bitmask. This would cause that on any parameter change we would need to update all parameters on the Crazyflie.
    • Parameters are statically generated. There are hacks to add parameters at runtime, however those might not work with future versions of dynamic_reconfigure.
    • Groups not fully supported (ros-visualization/rqt_common_plugins#162; This seems to be closed now, however the Indigo binary packages did not pick up the fixes yet).

crazyflie_ros's People

Contributors

acxz avatar ataffanel avatar jgsuw avatar jpreiss avatar lkumar93 avatar mikehamer avatar robotpilot avatar spohorec avatar vibashan avatar whoenig avatar yotamgani avatar zhenghao-dai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crazyflie_ros's Issues

How to choose radio URIs for multiple copter flight

Hi!

I was wondering what the different "pieces" of the radio URIs should be set for multiple copter flight:

radio://<radio_num>/<channel>/<address>

For the sake of simplicity, let's say that we are flying two CFs with a single CR.
If I understand correctly, then I can leave the <radio_num> to zero for both CFs.
Then I have to pick a <channel> and an <address> for each CF.
But then:

  • Assuming that the two different CF should have two different URIs, is it ok to just set different <channel>s, or should I (also) set different <address>es?

  • How do I pick a <channel>? Are there any constraints?
    (For example: "it has to be a positive integer less than 100".)

  • And how do I pick an <address>? Is there a format constraint?

  • Is there a place in the Bitcraze wiki or tutorials that I am missing where I can read this things up?

Thanks in advance!

Multiple crazyradios

Do you have any tips for connecting to multiple crazyradios through the ROS architecture? I would really appreciate it!

no tf data with crazyflie_demo

Hi, Wolfgang

I am trying to test the basic function of the crazyflie 2.0 while I do not have a joystick right now. I use the command roslaunch crazyflie_demo teleop_xbox360.launch uri:=radio://0/100/2M to test. Others all function well while the rviz shows that there is error with global status. I guess it's not triggered by not installing joy package and not connecting to a xbox360 gamepad. I don't know what is wrong here. Could you help me about it? Thanks in advance.

Bin

screenshot from 2017-02-10 16-21-58

PID Controller query

Hi Whoening,

I'm trying to understand your code a little better and I have a doubt in your PID controller I was hoping you could clear it out for me. In lines 192-195 in controller.cpp (https://github.com/whoenig/crazyflie_ros/blob/master/crazyflie_controller/src/controller.cpp#L192-195)
msg.linear.x = m_pidX.update(0, targetDrone.pose.position.x);
msg.linear.y = m_pidY.update(0.0, targetDrone.pose.position.y);
msg.linear.z = m_pidZ.update(0.0, targetDrone.pose.position.z);
msg.angular.z = m_pidYaw.update(0.0, yaw);

why do you send a 0 instead of the current drone position from the mocap to the PID controller input argument value?

Thanks

Syntax error in the controller?

When

rosrun crazyflie_controller controller.cpp

I get

line 9: syntax error near unexpected token `('
line 9: `double get('

Question about waypoint tracking controller

Hi Whoening,

I am starting to work on crazyflie 2.0 for swarm robotics, and run into your ROS driver. It is pretty well organized. Thanks for your great work. I have a question about your waypoint tracking controller in "crazyflie_controller/src/controller.cpp" line 195-200.

geometry_msgs::Twist msg; msg.linear.x = m_pidX.update(0, targetDrone.pose.position.x); msg.linear.y = m_pidY.update(0.0, targetDrone.pose.position.y); msg.linear.z = m_pidZ.update(0.0, targetDrone.pose.position.z); msg.angular.z = m_pidYaw.update(0.0, yaw); m_pubNav.publish(msg);

The PID controller computes outputs using the current value and target value. However, why you use [0, 0, 0, 0] for the current value? Shouldn't you use the values updated from the tracking system?
position, quaternion = self.listener.lookupTransform(self.worldFrame, self.frame, t); rpy = tf.transformations.euler_from_quaternion(quaternion); msg.linear.x = m_pidX.update(position[0], targetDrone.pose.position.x); msg.linear.y = m_pidY.update(position[1], targetDrone.pose.position.y); msg.linear.z = m_pidZ.update(position[2], targetDrone.pose.position.z); msg.angular.z = m_pidYaw.update(rpy[2], yaw);

Thanks,

Li

Altitude Hold

Hello,

I am just starting with the CF quadrotor and I had some questions. Is it possible with this implementation to maintain a given altitude and control linear velocities in x and y independently? Or do i have to send commands in thrust as well if I'm publishing on the cmd_vel topic?

multi waypoint not working

Hello,

Whenever i try to launch the multi_waypoint_vicon demo, i keep having this issue

Log: 42
[ INFO] [1449255005.156678767]: Ready...
[ INFO] [1449255009.122393262]: Takeoff requested!
terminate called after throwing an instance of 'tf2::InvalidArgumentException'
what(): Quaternion malformed, magnitude: 0 should be 1.0

[crazyflie1/controller-6] process has died [pid 26478, exit code -6, cmd /home/maverick/indigo_ws/devel/lib/crazyflie_controller/crazyflie_controller __name:=controller __log:=/home/maverick/.ros/log/d329d03a-9ab7-11e5-b21a-0025647bb69f/crazyflie1-controller-6.log].
log file: /home/maverick/.ros/log/d329d03a-9ab7-11e5-b21a-0025647bb69f/crazyflie1-controller-6*.log

i changed the launch file to make it run for just one crazyflie. Any help

Thanks

Control with protective frame

Hi Wolfgang,

When you started flying with the 3D printed frame, did you have to make some adjustments to the crazyflie (roll and pitch trimming, internal PID controller) or the position controller in ROS?

I was just testing some configurations on a 3D printed frame I found online http://www.thingiverse.com/thing:1151252 and I noticed that the crazyflie became much more sensitive, and several of the crazyflies I tested just started oscillating when holding a position and some became unstable. I then tested a specific configuration in two different crazyflies and noticed that in one there were almost no oscillations and in the other there were a lot, which makes me think that I really need to adjust the propellers very well, or that there may be some differences with respect to the IMU, so that one of them would need roll/pitch trimmings and the other didn't. One thing I noticed is that even if the markers are very lightweight, their configuration must be symmetric, otherwise the crazyflie tilts a lot and becomes unbalanced.

Did these issues also happened to you when using a frame? It would be great to know if you have any tips regarding this. One thing I have different from your configuration is that my battery is placed on the bottom since I am using the wireless charger.

Thanks a lot for the help again!

Best,
José

Dynamic waypoint tracking

Hi,

I was trying to look at the demo "multi_waypoing_vicon" to try to understand how you could make the crazyflie track points in a sequential manner, but I could not understand how this is actually performed.

In my application, I would like to have the waypoints being defined by another application (say go to point A, then change to point B) and was wondering how to modify your code to allow this. In the hover application, the point is fixed and set inside the pose node, which runs publish_pose.py, where it is running continuously at the rate speed right?

Where would you suggest to be the best place to add a code that reads from a socket (to get new position waypoints) and sends those values to the controller? Also, if I wanted to use a specific yaw angle, how could this be done, since from what I understood in the current hover example that is not performed?

Since I do not have much experience with python, I would prefer to do it in c++, but I would go for python if that would be easier.

Thanks a lot for the help again and sorry if I have missed something in your examples that provide answers to my questions!

Setting up the communication with crazyflie.

Hi. We are trying to use the ros nodes to set up the server and connect to a crazyflie, however we can't get a connection.
We are running:
roslaunch crazyflie crazyflie_server.launch
roslaunch crazyflie crazyflie_add.launch uri:=radio://0/10/250K

But the callback to connected, is not called and ROS never prints "connected" to the screen.
So we are not able to get any /imu msgs from the crazyflie.
We are however able to publish cmd_vel msgs and make the rotors turn.

Can you help us with this? We spent many hours looking at the ros code and the crazyflie python apis, but couldn't really figure it out.
Thank you in advance.

Hovering using VICON problem

Hi,
Excellent contribution.

I am new to Vicon, so the following might be quite trivial to solve.

The Crazyflie_tools and the teleop_xbox360 demo are working. However, I am struggling with the hover_vicon demo. To be specific, when I do:
roslaunch crazyflie_demo hover_vicon.launch uri:=radio://0/80/250k frame:=/vicon/crazyflie/crazyflie x:=0 y:=0 z:=1
There are no errors in the console log, but the RViz GUI shows two errors:

  1. Fixed Frame Fixed Frame [world] does not exist
  2. crazyflie/base_link No transform from [crazyflie/base_link] to [world]

Any pointers on what might be wrong?

Thank you for your help in advance.

Not allowing TakingOff and Automatic modes in controller.cpp unless something is posted in /goal

It is not a bug as such, but the process dies because in the Automatic state in iteration the m_goal has not changed and is all 0. This throws an exception in the "m_listener.transformPose(m_frame, targetWorld, targetDrone);" because the scalar of the quaternion cannot be 0.

Of course the point is to have set a goal when the user calls the takeoff service, but when testing the software with many other launchers, services and real world devices, sometimes I forget to publish in /goal before.

It would be nice if the takeoff service checked m_goal and if 0 would not set m_state to TakingOff and throw a Warning or an Error, urging the user to set the goal before.

PID reset

I noticed that in controller.cpp, the PIDreset command

void pidReset() { m_pidX.reset(); m_pidZ.reset(); m_pidZ.reset(); m_pidYaw.reset(); }

resets pidZ twice and does not reset pidY.

Best way to use Vicon?

When using the Vicon system, what is the best way to position the markers? I'm having a hard time getting the minimum 3 markers on the crazyflie such that I can create a subject and observe it using the vicon bridge.

Is there a way to track just a single marker (and thus unlabeled?) I'm relatively new to the Vicon system.

connection from PC to crazyflie not working?

Hi,

I am trying to run the demo example "roslaunch crazyflie_demo teleop_xbox360.launch" and I get the data correctly from the crazyflie (battery, temperature, IMU) but for some reason I cannot send commands to the crazyflie using my logitech gamepad. I tried the cfclient and it works to receive data and control the crazyflie with the gamepad, but for some reason it is not working with your demo example. I tried also to use the logitech_gamepad.launch from the hector project (had to modify it as you did for the xbox360.launch, but also did not work). Any good way to debug this?

I am running ROS Jade, Ubuntu 14.04, Crazyflie 2.0.

Thanks for the help, great work and thank you for sharing!

Cmake Error

Hi,

I have attempted to compile the ros file using the Jade distribution.

using clean make and catkin_make commands I still receive the same error.

I have looked at the cmakefillist on line 8 it has: find_library(USB_LIB usb-1.0)

I have also cloned the package and still receiving the same error.

Where can I locate the usb-1.0 library or ammend the cmakelist?

Error Returned:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
USB_LIB
linked by target "crazyflie_server" in directory /home/bitcraze/catkin_ws/src/crazyflie_ros/crazyflie_driver

-- Configuring incomplete, errors occurred!
See also "/home/bitcraze/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/bitcraze/catkin_ws/build/CMakeFiles/CMakeError.log".
Makefile:456: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed

Adding custom log block

I want to log additional information, like motor inputs, from Crazyflie. It seems that this package provides a way to add custom logBlock (see crazyflie_driver/crazyflie_server.cpp at line 309), but there is no details on that. Therefore, I wonder how can I use that?

Thank you

Crazyflie shutdown while running

Hi,
I wrote a simple code to publish pitch, roll and thrust to the cmd_vel topic which the crazyflie subscribes to. But when i run the code the propellers will turn on for a second then the crazyflie just shuts down. Have you ever encounter this problem before?

Information of when Crazyflie connection is ready

For the UWB LPS I need to set parameters in the Crazyflie at connection time. It is for setting the anchor positions. However parameters cannot be set before the Crazyflie is actually connected so I would need to know when the connection is actually done (ie. when "Ready ..." is printed in the log).

I can implement that myself but I am not really sure how to do it in the most "ROS way".

crazyflie 2 doesn't respond to /cmd_vel topic

Hi!
I have connected the crazyflie 2.0 using crazyradio. I get all the data from IMU, magnetometer etc. But when I publish the values on /cmd_vel, crazyflie doesn't respond. I checked the topic using rostopic echo and it is getting the values. I have tried changing the radio, crazyflie, computer but the problem persists.
Could you please help me with this?

Thanks!
Bhargav Jha


I found out that the problem was due to changed firmware. Which version of firmware should I use with the crazyflie ros package?

Flying 3 Crazyflie 1.0 Quads

  1. Multi Hover with 3 quads - I am able to connect to two, but the system cannot connect to the third one. I've check if its an issue witht the quad so instead I switched the sequence of which quad connects first. It always lets the first two connect.

    I have flashed all 3 CF1.0 to the same address: //0/10/2M/'address' - I don't think I can bootload configure the 'address' value for CF1.0
    Q1. How would I go about running one ROS environment for 2 x Crazyradio dongles? i.e 6 CF 1.0 on 2 dongles
    This is my launch file for multi hover: https://www.dropbox.com/s/3ma6s5hqvfkkdx4/multi_hover_vrpn_3.launch?dl=0

  2. Way point Navigation
    @whoenig I have modified the demo.py script to fit for stampedtransform
    Edited demo.py: https://www.dropbox.com/s/4uij5n9z9k2nyp9/demo.py?dl=0
    Edited demo1.py: https://www.dropbox.com/s/ze3zfytb30vfn6v/demo1.py?dl=0
    Edited: hover_vrpn_waypoint.launch: https://www.dropbox.com/s/2tpb8hy99vptu4q/hover_vrpn_waypoint.launch?dl=0

let me know what you think? I will try these scripts tomorrow.

Using Qualisys mocap

Hi,

I am trying to change the vicon mocap to the qualisys mocap and run the hover demo. I am using the Qualisys ROS driver provided by https://github.com/KumarRobotics/motion_capture_system. I get the following errors when running the demo code inside RViz

  • Fixed Frame [world] does not exist
  • No transform from [crazyflie/base_link] to [world]

which is because I am not having a world frame output. When performing rosrun tf tf_monitor the output I get is (one of the continuous prints)

Frames:
Frame: /crazyflie/base_link published by unknown_publisher Average Delay: -0.0997525 Max Delay: 0
Frame: crazyflie published by unknown_publisher Average Delay: 0.00022675 Max Delay: 0.00036054

The output of "rosrun tf view_frames" gives me two "states", one with "mocap" and the other with "crazyflie" as follows:
frames.pdf

I have very new to both the mocap and ROS and I am not able to understand what is meant by the world frame and how I get to output that. I read the issue #17 but I could not make sense of this part.

Also, what would the input to "frame" be in my case when running "roslaunch crazyflie_demo hover_qualisys.launch uri:=radio://0/80/2M frame:=crazyflie x:=0 y:=0 z:=1"

Running ROS Jade on Ubuntu 14.04

Thanks for the help again!

(Update: "Size doesn't match!" error) Crazyflie won't log battery, temperature, etc.

IMU and RSSI are working fine, but I can't seem to get battery data through the package. I tried connecting via cfclient, and it showed me the battery level, but when I runrostopic echo /crazyflie/battery, there is no data returned. I haven't changed any of the default logging parameters, which are appearing as 'true'. Any idea why this might be happening?

testing connection to crazyflie

How do I test if the connection between the running services and Crazyflie (2.0) was successfull?

Steps I did:
1.) roslaunch crazyflie_server.launch
2.) roslaunch crazyflie_add.launch

I also cannot find the
"crazyflie_driver/AddCrazyflie.h" and "crazyflie_driver/UpdateParams.h"
which are included i.e. in the crazyflie_server.cpp.

-ROS: Jade
-Ubuntu: 14.04

Thanks for the support.

Hover issues

Continuining on from this reply:

"Your VRPN server should publish to "/crazyflie". "/crazyflie/base_link" is only required for visualization in RVIZ, and you can easily add a static transformation (see https://github.com/whoenig/crazyflie_ro ... launch#L40).

You said you can take-off: Does that mean autonomously? That indicates that your optitrack works fine (otherwise it would just not take off). Are you using CF 1.0 or 2.0? Which firmware are you running?"

  1. I have configured the server to publish to /crazyflie
  2. Yes I can take off
  3. Currently the crazyflie ramps to 50,000 then cuts out. - I have tried it with 3 different crazyflies and still the same issue
  4. Using CF 1.0 - I am using the fimrware source from your github.

I have attached my frame configuration and graph of the ros environment.
rqt graph_ connected nodes
rqt_frames_connected

multi_waypoint_vicon

Hi Wolfgang,

I was trying now the demo multi_waypoint_vicon and for some reason, when I press take-off, both CFs start and try to take off, but when they are like 5cm from the ground, they both shut down the motors again. Have you ever experienced this issue? No error message is outputted from the application.

I am setting one CF with radio://0/80/2M and the other with radio://0/100/2M/E7E7E7E7E8 and I can see that both are being captured by the mocap system and the data is being correctly received. I also checked and the controller code is moving from take off to automatic..

The pose is being correctly computed (asking them to go to 0 0 1 and 0 0.5 1 in the start) and the output of
msg.linear.x = m_pidX.update(0, targetDrone.pose.position.x);
msg.linear.y = m_pidY.update(0.0, targetDrone.pose.position.y);
msg.linear.z = m_pidZ.update(0.0, targetDrone.pose.position.z);

is always being zero for all of them, even though the targetDrone.pose.position.x, y, z is always non zero and the transformed goal positions.

I am using the original controller code and it is working when I run teleop_vicon for each of the CFs.

Thanks for the help!

Launch crazyflie that is turned off

Hi Wolfgang,

I noticed from the beginning that if I launched the application with multiple CFs, and one of the CFs would be turned off, then the complete ROS application hangs for all CFs. Today I was trying to investigate how to avoid this, since it could be the case that I would be starting the application and one of the CFs had ran out of battery and died, or if I would just like to remove one CF from the experiment, but not remove it from the launch. I would like all the others to still run their applications in case that would happen. Do you think that it would be possible to avoid this in a nice way?

I dig a bit into the code and saw that things get stuck at crazyflie.cpp, line 81 to 85, after the constructor is initiated at the crazyflie_server. I could not think of a good way yet to do this and thought of asking you first before starting to modify the code.

Thanks for the help again!

Error launching the demo files

I'm trying to roslaunch the demo files but I'm getting

[ERROR] [1443209803.433117116]: Exception thrown while processing service call: Could not find Crazyradio with given devId!
[ERROR] [1443209803.433242638]: Service call failed: service [/add_crazyflie] responded with an error: Could not find Crazyradio with given devId!

Can you help to solve the error.

Using Optitrack instead of Vicon

Hi

first of all great work, thank you for sharing!

I'm trying to get hovering working with an Optitrack Mocap system instead of a Vicon system. However, I'm new to ROS so I'm having some trouble.

I'm trying to run the hovering example you have.
I modified hover_vicon.launch file as follow
include file="$(find vicon_bridge)/launch/vicon.launch"
for
include file="$(find mocap_optitrack)/launch/mocap.launch"

to launch the optitrack system instead of the vicon system. I'm using the "Mocap_Optitrack" package to retrieve the CF position. (http://wiki.ros.org/mocap_optitrack). This seems to work fine.

I think the issue is providing the correct node to hover_vicon.launch. The optitrack package can publish poses of configured rigid bodies as tf transforms, poses, and/or 2D poses.

However, I don't know if this are compatible with your controller code or that needs to be modified too. Can you give me some pointers?

In the RViz window under display I'm getting a status: Error under RobotModel:
no transform from [crazyflie/base_link] to [world]

Thnak you

using ps3 controller with ros

Hello im having a trouble at using ps3 controller on crazyflie ros
i installed cflib and python client and checked it running successfully
and i installed crazyfile ros and tried rosrun crazyfile_tools scan and found the address of my crazyfile
but when i try
kyujin@kyujin-Samsung-Desktop-System:~/catkin_ws$ roslaunch crazyflie_demo teleop_ps3.launch uri:=radio://0/80/250K

then i get a error like this
ERROR: cannot launch node of type [crazyflie_demo/controller.py]: can't locate node [controller.py] in package [crazyflie_demo](viz and sensor reading are normal only controls are malfuntioning)
i checked a launch file controller.launch and found default arg for crazyfileSDK was set to

but i found that i don't have such path crazyflie-clients-python/lib
list of contents in my crazyflie-clients-python is

(venv) kyujin@kyujin-Samsung-Desktop-System:~/crazyflie-clients-python$ ls -l
total 104
-rw-rw-r-- 1 kyujin kyujin 587 9월 25 02:33 appveyor.yml
drwxrwxr-x 2 kyujin kyujin 4096 9월 25 02:33 bin
-rw-rw-r-- 1 kyujin kyujin 15468 9월 25 02:33 bitcraze.ico
-rw-rw-r-- 1 kyujin kyujin 225 9월 25 02:33 CMakeLists.txt
-rw-rw-r-- 1 kyujin kyujin 2236 9월 25 02:33 CONTRIBUTING.md
-rw-rw-r-- 1 kyujin kyujin 725 9월 25 02:33 CREDITS.txt
drwxrwxr-x 2 kyujin kyujin 4096 9월 25 02:33 examples
-rw-rw-r-- 1 kyujin kyujin 18415 9월 25 02:33 LICENSE.txt
-rw-rw-r-- 1 kyujin kyujin 180 9월 25 02:33 MANIFEST.in
-rw-rw-r-- 1 kyujin kyujin 56 9월 25 02:33 module.json
-rw-rw-r-- 1 kyujin kyujin 1071 9월 25 02:33 package.xml
-rw-rw-r-- 1 kyujin kyujin 7529 9월 25 02:33 README.md
-rw-rw-r-- 1 kyujin kyujin 1901 9월 25 02:33 RELEASE_CHECKLIST.md
-rw-rw-r-- 1 kyujin kyujin 5484 9월 25 02:33 setup.py
drwxrwxr-x 7 kyujin kyujin 4096 9월 25 02:34 src
drwxrwxr-x 3 kyujin kyujin 4096 9월 25 02:33 tools
drwxrwxr-x 2 kyujin kyujin 4096 9월 25 02:33 win32install

please help me solve this prob..

thanks for your wonderful work and thanks in advance

How to get IMU data

Hi Wolfgang,

Thanks for your contribution for this package. I have achieved hover and multi-point track using your ros package. While I want to go further, I think I need to understand about the onboard controller. However, I found really little information about the onboard controller. Here, I want to get information about the imu, I do find the rostopic IMU, but when I echo this topic, there is nothing printed. So how can I get these information? Moreover, how can I control the onboard controller. I really did not find much about that.

Thanks a lot.
Bin

Exception thrown while processing service call: Could not find Crazyradio with given devId!

Hello,

I recently reformatted my system and got back to work but i cannot seem to get the crazyflies to connect. It was working befor but now its giving me this error

process[crazyflie/controller-6]: started with pid [32333]
[ INFO] [1455740151.123687176]: Adding radio://0/80/2M as crazyflie with trim(0.000000, 0.000000). Logging: 1, Parameters: 0
LIBUSB_ERROR_ACCESS
[ERROR] [1455740151.131435717]: Exception thrown while processing service call: Could not find Crazyradio with given devId!
[ERROR] [1455740151.131795260]: Service call failed: service [/add_crazyflie] responded with an error: Could not find Crazyradio with given devId!
process[crazyflie/pose-7]: started with pid [32353]
/vicon/crazyflie/crazyflie

I tried it on several systems and got the same results. I do not have the crazyflie client installed but i dont think i need that to use this package.

Im connected to the vicon system and getting data and everything is as it should be.

Any help ?

Thanks.

Problem while conntecting two CFs with one CrazyRadio Dongle

Hi @whoenig ,

Recently I want to hover two CFs with one CrazyRadio Dongle, while there is no error and the progress seems fine, like I can see two CFs in the visualization window. But I can clearly see that the CFs are not really connected since the light on CrazyRadio Dongle is still red which is different from normal case. So it is obvious that there is no response to the takeoff command. Do you have any idea about why it would cause that? Do I need to flash new firmware, cause I see other issues then I flashed Crazyflie2-nrf-firmware to my CFs, still cannot connect.

By the way, it works fine separately. Thanks in advance.

How to properly configure Crazyflies for multi_teleop

Hi,

Thank you very much for your package it has been really helpful.

I have four Crazfyflies 2.0 and two crazyradio dongles.

What I have done until now:

  1. Installed the latest firmware in all the Crazyflies using the official client: https://github.com/bitcraze/crazyflie-release/releases/tag/2016.02
  2. Using the official client I modified the address, channel and datarate as follows:
    • Crazyflie 1: radio://0/120/2M/E7E7E7E700
    • Crazyflie 2: radio://0/120/2M/E7E7E7E701
    • Crazyflie 3: radio://1/100/2M/E7E7E7E702
    • Crazyflie 4: radio://1/100/2M/E7E7E7E703
  3. I successfully tested each crazyflie independently using: roslaunch crazyflie_demo teleop_xbox360.launch uri:=radio://0/120/2M
  4. Then I wanted to control two at the same time using:
    roslaunch crazyflie_demo multi_teleop_xbox360.launch uri1:=radio://0/120/2M/0xE7E7E7E700 uri2:=radio//0/120/2M/0xE7E7E7E701

The problem is that nothing happens, all the windows open (rviz, rqtplot) but no data is being received and no data is being sent, also there are no errors.

Then I tried to connect with the official client with the first pair of crazyflies turned on. Independent of the address value that I set on the client, both crazyflies react to the joystick and also I see a degradation of performance on the received values. My guess is that the firmware somehow is not implementing the addressing and since both crazyflies are using the same channel and datarate then both receive the joystick commands without addressing filtering. I also tried your old client with same results.

Can you please point me in the right direction?. Is there any special firmware which I have to install on the crazyflies?

Best regards,

Raul

Crazyradio timeout when transmitting to multiple crazyflies

Hey Whoenig, thank you for the work you have put into this system.

Currently I am getting libusb_timeout errors when I attempt to run multiple crazyflies off the one crazyradio. Physically this results in the radio having a solid red led.

Additionally, when running crazyflies off different radios I have been getting some strange behaviour.

I was hoping you had an idea for either of these issues and could also provide what versions of firmware for the radios and crazyflies that you use.

Thank you very much

Ryan

multi_teleop connection issues

I am having troubles connecting to multiple quadrotors using your ROS node. I have been following your comments on the bitcraze blog:

https://www.bitcraze.io/2015/04/towards-crazyswarms-2/

I have downloaded your radio_multi-link python client and my radio and crazyflies have the most up-to-date firmware. I am currently running on ROS hyrdo, but will shortly be upgrading to Indigo, on Ubuntu 12.04.

When I run the mutli_teleop_xbox360 node I get the following errors over and over:

[INFO] [WallTime: 1430944581.092314] Connecting to radio://0/80/2M
[INFO] [WallTime: 1430944581.092744] Connecting to radio://0/72/2M
[FATAL] [WallTime: 1430944581.093472] Connection to radio://0/72/2M failed: Couldn't load link driver: Link already open!

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/cflib/crazyflie/init.py", line 217, in open_link
self._link_error_cb)
File "/usr/local/lib/python2.7/dist-packages/cflib/crtp/init.py", line 90, in get_link_driver
instance.connect(uri, link_quality_callback, link_error_callback)
File "/usr/local/lib/python2.7/dist-packages/cflib/crtp/radiodriver.py", line 110, in connect
raise Exception("Link already open!")
Exception: Link already open!

Thanks!

joystick configuration

Hi everyone,

After I have configured the crazyflie_ros and optitrack motion capture system, I have come up with a new problem, which is how to configure joystick. I do know that I need to install the hector_quadrotor package. But the thing is that I really don't know how to install this package on ROS Kinetic on ubuntu 16.04.

My solution to install this package is git clone <url> -b kinetic-devel, then I use wstool to install all the dependencies which is described in the hector_quadrotor.rosinstall file. After all these, I went to the workspace to catkin_make, but after I have done all these, it still does not work. Does anyone have installed this package on kinetic? All help would be very appreciated.

ImportError: No module named cflib ??

Hello Whenever i try to run the launch file i get the following error. Any advice ???

Thank you.

maverick@maverick:~/indigo_ws$ roslaunch crazyflie_demo teleop_xbox360.launch
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
... logging to /home/maverick/.ros/log/a31abbc2-20df-11e5-977f-d0df9a8cc6bf/roslaunch-maverick-17184.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
started roslaunch server http://localhost:52025/

SUMMARY

PARAMETERS

  • /crazyflie1/crazyflie_add/enable_logging: True
  • /crazyflie1/crazyflie_add/pitch_trim: 0
  • /crazyflie1/crazyflie_add/roll_trim: 0
  • /crazyflie1/crazyflie_add/tf_prefix: crazyflie1
  • /crazyflie1/crazyflie_add/uri: radio://0/80/2M
  • /crazyflie1/joy/dev: /dev/input/js0
  • /crazyflie1/quadrotor_teleop/x_axis: 5
  • /crazyflie1/quadrotor_teleop/x_velocity_max: 30
  • /crazyflie1/quadrotor_teleop/y_axis: 4
  • /crazyflie1/quadrotor_teleop/y_velocity_max: -30
  • /crazyflie1/quadrotor_teleop/yaw_axis: 1
  • /crazyflie1/quadrotor_teleop/yaw_velocity_max: -200
  • /crazyflie1/quadrotor_teleop/z_axis: 2
  • /crazyflie1/quadrotor_teleop/z_velocity_max: 60000
  • /crazyflie_server/crazyflieSDK: ~/crazyflie/crazy...
  • /rosdistro: indigo
  • /rosversion: 1.11.13

NODES
/crazyflie1/
crazyflie_add (crazyflie/crazyflie_add.py)
crazyflie_demo_controller (crazyflie_demo/controller.py)
joy (joy/joy_node)
quadrotor_teleop (hector_quadrotor_teleop/quadrotor_teleop)
/
crazyflie_server (crazyflie/crazyflie_server.py)
rqt_plot (rqt_plot/rqt_plot)
rqt_plot2 (rqt_plot/rqt_plot)
rviz (rviz/rviz)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[crazyflie_server-1]: started with pid [17202]
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[crazyflie1/crazyflie_add-2]: started with pid [17203]
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[crazyflie1/joy-3]: started with pid [17208]
[ INFO] [1435859830.461233524]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
Traceback (most recent call last):

Traceback (most recent call last):
File "/home/maverick/indigo_ws/src/crazyflie_ros/crazyflie/scripts/crazyflie_server.py", line 289, in
from cfclient.utils.logconfigreader import LogConfig
ImportError: No module named cfclient.utils.logconfigreader

process[crazyflie1/quadrotor_teleop-4]: started with pid [17236]
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[crazyflie1/crazyflie_demo_controller-5]: started with pid [17266]
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
[INFO] [WallTime: 1435859830.619038] wait_for_service /add_crazyflie
process[rviz-6]: started with pid [17279]
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[rqt_plot-7]: started with pid [17282]
[crazyflie_server-1] process has died [pid 17202, exit code 1, cmd /home/maverick/indigo_ws/src/crazyflie_ros/crazyflie/scripts/crazyflie_server.py __name:=crazyflie_server __log:=/home/maverick/.ros/log/a31abbc2-20df-11e5-977f-d0df9a8cc6bf/crazyflie_server-1.log].
log file: /home/maverick/.ros/log/a31abbc2-20df-11e5-977f-d0df9a8cc6bf/crazyflie_server-1*.log
WARNING: Package "cfclient" does not follow the version conventions. It should not contain leading zeros (unless the number is 0).
process[rqt_plot2-8]: started with pid [17304]

Catkin_make error -> Invoking "make -j1 - l1" failed

Hi,

I'm trying to install the package in a Jade distribution.

I cloned the repository to ~/catkin_ws/src and called catkin_make. Midway through the process I get the error "Invoking "make -j1 -l1" failed".

/home/rshum/catkin_ws/src/crazyflie_ros/crazyflie_driver/src/crazyflie_server.cpp: In member function ‘void CrazyflieROS::run()’:
/home/rshum/catkin_ws/src/crazyflie_ros/crazyflie_driver/src/crazyflie_server.cpp:244:7: error: ‘sleep_for’ is not a member of ‘std::this_thread’
make[2]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_server.dir/src/crazyflie_server.cpp.o] Error 1
make[1]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_server.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j1 -l1" failed

Any inside on why I'm getting this error?

thanks

Crazyflies not communicating after startup: stuck inside crazyflie_server

Hi Wolfgang,

So I spent some time now investigating the problem I told you before that when I start the CFs via roslaunch, not all selected CFs start and the red led just keeps flashing. I am now trying with 12 CFs and 6 radios.

I went through some debugging and it appears that whenever one CF does not work, it gets suck inside the crazyflie_server in the step when you call "logBlockImu.reset(new LogBlock" or "logBlock2.reset(new LogBlock". I placed couts before and after that point and whenever one does not work, it does not go through one of those functions. I noticed that the ones that dont work go through the line ROS_INFO("Requesting Logging variables...") but never get to print ROS_INFO("Ready...") so I started from there.

Do you have any idea why this would be happening?

Thanks a lot for the help!

Missing AddCrazyflie.h

Hi,
just compiled this project under ROS indigo and got following report

/home/joker/crazyflie_ros/src/crazyflie_ros/crazyflie_driver/src/crazyflie_add.cpp:2:36: fatal error: crazyflie/AddCrazyflie.h: No such file or directory
 #include "crazyflie/AddCrazyflie.h"
                                    ^
compilation terminated.
/home/joker/crazyflie_ros/src/crazyflie_ros/crazyflie_driver/src/crazyflie_server.cpp:2:36: fatal error: crazyflie/AddCrazyflie.h: No such file or directory
 #include "crazyflie/AddCrazyflie.h"
                                    ^
compilation terminated.
make[2]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_add.dir/src/crazyflie_add.cpp.o] Error 1
make[1]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_add.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_server.dir/src/crazyflie_server.cpp.o] Error 1
make[1]: *** [crazyflie_ros/crazyflie_driver/CMakeFiles/crazyflie_server.dir/all] Error 2
make: *** [all] Error 2

It seems crazyflie/AddCrazyflie.h is missing and I could not get this file in this project and Github. Any help about this issue ?

cannot launch more than 4 at a time

Hello,

I have been trying to launch 5-9 crazyflies but every time I try to do so, it crashes with this error


[INFO] [WallTime: 1457722863.580024] waiting for land service
[INFO] [WallTime: 1457722863.581063] found land service
[INFO] [WallTime: 1457722863.581311] waiting for takeoff service
[INFO] [WallTime: 1457722863.581536] found land service
[INFO] [WallTime: 1457722863.581775] waiting for takeoff service
[INFO] [WallTime: 1457722863.582818] found takeoff service
[INFO] [WallTime: 1457722863.583233] found takeoff service
[crazyflie_server-2] process has died [pid 434, exit code -6, cmd /home/swapnil/catkin_ws/devel/lib/crazyflie_driver/crazyflie_server __name:=crazyflie_server __log:=/home/swapnil/.ros/log/978b61a0-e7bb-11e5-90fc-60a44c53d68d/crazyflie_server-2.log].
log file: /home/swapnil/.ros/log/978b61a0-e7bb-11e5-90fc-60a44c53d68d/crazyflie_server-2*.log
[crazyflie1/crazyflie_add-4] process has finished cleanly
log file: /home/swapnil/.ros/log/978b61a0-e7bb-11e5-90fc-60a44c53d68d/crazyflie1-crazyflie_add-4*.log
[crazyflie3/crazyflie_add-14] process has finished cleanly
log file: /home/swapnil/.ros/log/978b61a0-e7bb-11e5-90fc-60a44c53d68d/crazyflie3-crazyflie_add-14*.log
[INFO] [WallTime: 1457722863.797127] found land service
[INFO] [WallTime: 1457722863.797527] waiting for takeoff service
[INFO] [WallTime: 1457722863.799560] found takeoff service
[crazyflie2/crazyflie_add-9] process has finished cleanly

i Have no issues with 4 crazyflies but once i go with 5, it doesn’t work. or it doesn’t connect to more than 1 or 2.

i am using 2 usb hubs and the hubs work fine with 4 radios. Im using a single radio for each crazyflie.

any idea what could be wrong?.

Thanks

High-frequency output of the controller

Hi!
first, I want to thank you for this project, because it is the fundament of the experimental part of my master thesis! Be sure that I will cite you in my report :)

I hope you could help me with the following issue with your PID. I won't go deep in what my application actually is, but basically, I'm running the controller at 60Hz and I'm publishing way points at 20hz with distance variable from the Crazyflies, but always on the same plane(mostly, on a circular path). I'm using your standard setting for the PID parameters, I only increased the boundaries of the control output from [-10,10] to [-30,30] (degrees?). The problem is in the shape of the control output that I get, that is shown in the figure attached: the blue and the red are respectively the X and Y PID outputs. The Zone 1 is a time that goes from the take-off to the reach of an initial static hovering point. Zone 2 consists of the time in which the Crazyflie is hovering, then in Zone 3, I start publishing a moving goal.
Questions: do you have any clue of why do I get so much high-frequency chattering? Moreover, even if I was reaching saturations and I had to increase the max amplitudes (and in spite of this I still get some saturation), (i know that the saturation could normally mean that gains are too high or the goal is too fast), the crazyflie doesn't seem to behave "aggressively", because it is naturally filtering a command signal like this. Do you have any idea of what could be the cause of this? How "normal" is an output like this from your PID?

Thanks in advance!

60hz

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.