GithubHelp home page GithubHelp logo

autonomylab / ardrone_autonomy Goto Github PK

View Code? Open in Web Editor NEW
358.0 54.0 228.0 11.53 MB

ROS driver for Parrot AR-Drone 1.0 and 2.0 quadrocopters

Home Page: http://wiki.ros.org/ardrone_autonomy

License: BSD 3-Clause "New" or "Revised" License

CMake 2.24% Makefile 0.03% C 53.75% C++ 41.82% Python 2.15%
ros parrot-ar-drone parrot ardrone uav ardrone-autonomy

ardrone_autonomy's Introduction

ardrone_autonomy's People

Contributors

0x326 avatar boris-il-forte avatar garyservin avatar jacobperron avatar jscatena88 avatar lesire avatar mani-monaj avatar mikehamer avatar sameerparekh avatar younata 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  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

ardrone_autonomy's Issues

What are we actually commanding with the cmd_vel input?

It isn't exactly related to the code, but here's an interesting question I hope one of you other researchers have answered before. When you send a command to the drone, for example cmd_vel.linear.x =1, are you controlling via velocity or acceleration?

The paper concerning this platform The Navigation and Control technology inside the AR. Drone micro UAV seems to go against the SDK.

The SDK 2.0 states that the input is "a percentage of maximum inclination as configured", while the paper says "velocity setpoints proportional to orientation of the handheld device"

What have you guys found in your work thus far? My lab is just beginning with the platform.

Groovy supported driver, but catkin?

I recently installed the Ros Groovy and i'm having difficulties with the installation of the driver package. As mentioned, since JAn 9. groovy is supported, what does that mean?

I cant find the package.xml and nor the CMakeList.txt is in the new format, so I'm not able to compile with catkin_make the package.
The error is:

CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake:71 (find_package):
Could not find a configuration file for package camera_info_manager.

Set camera_info_manager_DIR to the directory containing a CMake
configuration file for camera_info_manager. The file will have one of the
following names:

camera_info_managerConfig.cmake
camera_info_manager-config.cmake

Call Stack (most recent call first):
ardrone_autonomy2/CMakeLists.txt:13 (find_package)

My package.xml downladable from: https://dl.dropbox.com/u/921645/package.xml

and the CMakeList.txt:

cmake_minimum_required(VERSION 2.4.6)
project(ardrone_autonomy)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)    
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation image_transport sensor_msgs std_srvs tf camera_info_manager)    
catkin_package()    
include_directories(include  ${catkin_INCLUDE_DIRS} )    
#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)    
#add_message_files()
#generate_messages()     
find_package(Boost REQUIRED )                           
set(SDK ARDroneLib/)
link_directories(${PROJECT_SOURCE_DIR}/lib/)
include_directories(${SDK} ${SDK}/FFMPEG/Includes ${SDK}/Soft/Common ${SDK}/Soft/Lib ${SDK}/VP_SDK     ${SDK}/VP_SDK/VP_Os/linux )
rosbuild_add_executable(ardrone_driver src/ardrone_driver.cpp src/video.cpp src/ardrone_sdk.cpp     src/teleop_twist.cpp)    
target_link_libraries(ardrone_driver pc_ardrone avcodec avutil swscale vlib  sdk SDL )

How can I install it? Where can i find a version which is for the new catkin maker?

Image topic and Camera_info unsynchronized

Hi all,

The messages of the Image and Camera info are not synchronized and that can cause problems to people working with that images...
My suggestion is this little modification in ardrone_driver.cpp (line 452):

    sensor_msgs::Image image_msg;        
    sensor_msgs::Image::_data_type::iterator _it;

    // Image and info msg need the same time stamp.
    ros::Time camera_time = ros::Time::now();

    image_msg.header.stamp = camera_time;
    cinfo_msg_hori.header.stamp = camera_time;
    cinfo_msg_vert.header.stamp = camera_time;

    if (cam_state == ZAP_CHANNEL_HORI)

Thank you,

Josep Bosch
Ocean System Lab
Heriot-Watt University

Image, Camera Info timestamp mismatch - AR.Drone 2.0

Attempting to use the ROS package image_proc on the '/ardrone/front/image_raw' or '/ardrone/bottom/image_raw' steams fails to produce any corrected streams when used with the AR.Drone 2.0

The image_proc publishes the corrected streams, but gives an error indicating mismatched timestamps between images and the corresponding camera info when the stream is viewed.

The problem appears to occur due to lines 452-454 in ardrone_driver.cpp:

    image_msg.header.stamp = ros::Time::now();
cinfo_msg_hori.header.stamp = ros::Time::now();
cinfo_msg_vert.header.stamp = ros::Time::now();

This doesn't guarantee the timestamps are matched as ros::Time::now() can change between calls.

The code was changed to:

    image_msg.header.stamp = ros::Time::now();
    cinfo_msg_hori.header.stamp = image_msg.header.stamp;
    cinfo_msg_vert.header.stamp = image_msg.header.stamp;

This ensures timestamps are matched. The change appears to resolve the issue and image_proc is is able to correctly produce streams.

Whether or not this is also an issue for the original AR.Drone has not been tested.

Unable to run ardrone_driver on drone 1.0 (firmware 1.7.11)

Hello,

I am working with both the ardrone 1.0 and 2.0. When I run the ardrone_driver while connected to the drone 2.0 it runs fine. However, when I run the driver while connected to the drone 1.0 I get a message that it connected successfully with a 0% battery and then looses the nave data. The LED lights then turn red. This is all despite the fact that my battery was fully charged.

Below is what I see in my terminal:

Timeout when reading navdatas – resending a navdata request on port 5554
Timeout when reading navdatas – resending a navdata request on port 5554
Timeout when reading navdatas – resending a navdata request on port 5554
[INFO] [1353539677.060302095]: Successfully connected to 'My ARDrone' (AR-Drone 1.0 – Firmware: 1.7.11) – Battery(%): 0
Timeout when reading navdatas – resending a navdata request on port 5554

Question about cmd_vel

Hi,

I was wondering how the cmd_vel commands are relayed to the AR.Drone. When a linear-x is specified, is there an internal controller in the node that translates the desired linear-x to a pitch command to send to the drone? Or is setting linear-x the same as giving the drone a desired pitch (ie. is the command ardrone_at_set_progress_cmd(0, 0, 0.5, 0, 0) sent to the drone, or something of that nature?)? If there is some internal controller present, is there a way to directly send desired pitch and roll angles to the drone? Thank you!

Sarah

Problem with navdata_pwm.altitude_integral

While flying an ardrone parrot 2.0, we are seeing a random drop in altitude. Watching the values from navdata_pwm, we noticed that the altitude_integral is resetting from 60.0 to 0.0 when the drop occurs. The integral term then rebuilds and the quad rises back to the desired altitude.

Has anyone else seen issues with this value resetting and if so how it can be fixed?

camera toggle doesn't work

Hey!

I'm using an AR-Drone 2.0 with Firmware: 2.2.6. I try to switch between the bottom and front cam with $ rosservice call /ardrone/togglecam. But the result is that the /ardrone/front video feed is passed to the /ardrone/bottom so when i toggle the front video cam feed in on both topics and not different camera feeds on different topics.

I tired to launch the driver with the ardroen.launch, my.launch and with rosrun. Same result. The heli is on the ground, it works only after take off?
Am I missing something/ doing wrong, or this is a bug?
Screenshot

slower takeoff

Hi all,

i am ashlih, i am newbie with ardrone and still learning.

i was wondering, is there a way to takeoff but with more slower speed,
so i can adjust the height of the first takeoff?

thank you very much for your answer..

Can not compile AR Drone SDK

Hi, I am trying to install your package in order to use the tum_ardrone package.
Unfortunately I can not build the AR Drone SDK: After I issued the build command following error is displayed:

Libs already extracted
Building target static
Architecture x86_64 is already built
Creating universal static lib file from architectures x86_64
Build done.
Checking required Ubuntu packages ...
ok.
Building ARDroneTool/Lib
ar rcs libvlib.a video_codec.o video_controller.o video_mem32.o video_dct.o video_huffman.o video_macroblock.o video_packetizer.o video_picture.o video_quantizer.o P263/p263_codec.o P263/p263_huffman.o P263/p263_mb_layer.o P263/p263_gob_layer.o P263/p263_picture_layer.o P264/p264_zigzag.o P264/p264_transform.o P264/p264_Qp.o P264/p264_intra_pred.o P264/p264_inter_mc.o P264/p264_merge.o P264/p264_codec.o P264/p264.o P264/p264_gob_layer.o P264/p264_mb_layer.o P264/p264_picture_layer.o P264/video_p264.o Stages/vlib_stage_decode.o Stages/vlib_stage_encode.o UVLC/uvlc_codec.o UVLC/uvlc.o UVLC/uvlc_gob_layer.o UVLC/uvlc_mb_layer.o UVLC/uvlc_picture_layer.o Platform/x86/video_utils.o Platform/x86/UVLC/uvlc_codec.o
make[5]: /home/hendrik/bin/ar: Kommando nicht gefunden
make[5]: *** [../../Soft/Build/targets_versions/vlib_PROD_MODE_Linux_3.5.0-21-generic_GNU_Linux_homehendrikbingcc_/libvlib.a] Fehler 127
make[4]: *** [all] Fehler 2
make[3]: *** [build_vlib] Fehler 2
make[2]: *** [all] Fehler 2
make[1]: *** [build_libs] Fehler 2
make: *** [all] Fehler 2

Could you please give some advice how to fix this?
I am not exactly a linux expert, so please forgive me if this error is trivial.
I am using ROS Groovy on an Ubuntu 12.10 machine.

Flat Trim

I noticed that doing a flat trim before every take-off sometimes drastically improves the accuracy of the sonar data(as it is now calibrated to zero) and leads to more stable take-offs...Unfortunately I don't have the time now to figure out how pull requests work, so please consider adding this code to enable flat trims!

in ardrone_driver.cpp add

flatTrim_sub = node_handle.subscribe("ardrone/flatTrim",1,&flatTrimCallback);

in ardrone_driver.h add

ros::Subscriber flatTrim_sub;

in `teleop_twist.cpp` add

void flatTrimCallback(const std_msgs::Empty &msg)
{
    vp_os_mutex_lock(&twist_lock);
    ROS_INFO("Setting flat trim now!");
    ardrone_at_set_flat_trim();
    ROS_INFO("Flat trim Set!");
    vp_os_mutex_unlock(&twist_lock);
}

user then publishes empty message to 'ardrone/flatTrim' topic to do a flat trim!

Issue flying with indoor frame.

For some reason I am unable to fly either of my drones with the indoor or outdoor frame on the robot. The only way I can get it off the ground reliably is to fly the drone with out any of the covers over the battery.
Looking at the new motor pwm commands confirms that with the covers on the drone the motors are running about maxed out ~200 to 225. Without the frame, they are just below 200 and allow for full flight.
Has anyone else seen this problem or found a fix? Can anyone fly with the indoor frame on the robot?

Thanks-
parcon

Bottom Camera Feed

I'm able to run the ardrone_drive properly and also control its movements using the cmd_vel topic.

When I do either rosrun image_view image_view image:=/ardrone/image_raw or rosrun image_view image_view image:=/ardrone/front/image_raw I can get a 640X360 pixel image.

But once I do rosrun image_view image_view image:=/ardrone/bottom/image_raw, I only get a blank window with no data..Right clicking gives a prompt saying "no data"!

Please help! I've made sure my firewall is disable while trying this, and have tested the bottom camera to be okay using both the Free Flight app and the Linux_sdk_demo...

Error : Register publisher failed to contact master

Hi. Am using ardrone_autonomy package and trying to run the executable ardrone_driver

however, it is not working even after connecting to the drone. am getting the following error.

[ERROR] [1371144822.249433366]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying...

Can you please tell me wat is rong? Is it connection issue? I wanted to try this package, but am stuck here. please help me.

looking for a launchfile for starting with the ardrone and to say 'great job'

hi mani-monaj ,
first off all i will say this. great work that you have done.

it is for me the greatest, to look in the morning, if you have done something new.
the imu topic and also the camera calibration thing. all things that i want to do, but never had the time
or the experience to do this. fine to see how you solve all this things.
thx for all.

another question,
have you build launch files, where you use maybe things like robot_state_publisher or robot-pose-ekf
where i am able to see the drones doing in rviz. maybe like it was in the hector_quadrotor: packages.
or localize the drone via the tag detection?

this will be great if you publish something like that.

i build something like that with the starmac package, for the old drone.
you can see here.
[email protected]:mmyself/jh_ardrone.git
but this was yery rough.

all i really can recommend is the drone_teleop_3d i build,
great experience to fly the drone with a 3d mouse, because of the intuitive flying over the z-axis,

greats jan

Video feed from front cam choppy

When I try to access the video feed from the front camera I'm not getting a consistent video stream. It seems to publish (viewing using image_view or rviz) when there is not much detail on the screen (i.e. viewing my hand from up close or a constant color page) but it freezes (doesn't show anything) with complex images such as an outside scene or even a bookshelf with many colored books. I've tried to lower the bitrate by setting parameters 'bitrate_ctrl_mode' to 'VBC_MANUAL' and 'bitrate' to '1000' but that doesn't seem to change anything.

The bottom camera works smoothly with any complexity image.

It doesn't seem to be a problem with the camera as I get a reasonable picture using my iPhone and the FreeFlight app.

I tried to calibrate but the camera won't publish a picture as complicated as the checkerboard, I can get maybe 4 squares before it freezes again.

Running fuerte on Ubuntu 12.04 VM (hosted on windows 7)
Ardrone 1
Pulled the ardrone_autonomy git down on Friday (I believe)...not sure how to check the version

I doubt this is a bug in your code, but I'm wondering if you've seen this kind of behavior.

thanks

Using Multiple Instances of ardrone_autonomy

I am curently working to get multiple ardrones flying at the same time from a single desktop. I've built a simple launch file to create an instance of ardrone_autonomy in a namespace called "quad1". I also pass in ip arguments and a statement to handle which controller each drone is to be commanded from. My question is this: Even with compiling a second copy of ardrone_driver and attempting to run it along side the first instance of ardrone_autonomy, the second ardrone_driver fails. Does anyone know a way to resolve this error?

I see this error message:

[quad1/ARdrone-1] restarting process
process[quad1/ARdrone-1]: started with pid [17386]
Using custom ip address 192.168.1.10
Wait authentification
Wait authentification
Wait authentification
===================+> 192.168.1.10
[ INFO] [1360280789.946051099]: Root Frame is: 0
[ INFO] [1360280789.947098353]: ~cov/imu_la set to [0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1]
[ INFO] [1360280789.948039719]: ~cov/imu_av set to [1, 0, 0, 0, 1, 0, 0, 0, 1]
[ INFO] [1360280789.949083298]: ~cov/imu_or set to [1, 0, 0, 0, 1, 0, 0, 0, 100000]
[ WARN] [1360280789.949989201]: Automatic IMU Caliberation is active.
[ INFO] [1360280789.950096522]: using default calibration URL
[ INFO] [1360280789.950166558]: camera calibration URL: file:///home/parcon/.ros/camera_info/ardrone_front.yaml
[ INFO] [1360280789.953101752]: using default calibration URL
[ INFO] [1360280789.953193572]: camera calibration URL: file:///home/parcon/.ros/camera_info/ardrone_bottom.yaml
Deleting Profile -cea48d22
Deleting Application -e182b69b
Input device Teleop added
Starting thread video_stage
Starting thread update_ros

video stage thread initialisation

Video multisocket : init 2 sockets
Video multisocket : connecting socket 0 on port 5555 UDP
Thread update_ros started

  • Connection failed
    Video multisocket : connecting socket 1 on port 5555 TCP
    Failed to open AT
    Starting thread navdata_update
    Starting thread ardrone_control
    VP_Com : Failed to open socket for navdata
    PA : Start thread thread_academy_download
    Academy download stage resumed
    MEMORY SPACE ALLOWED : 40 MB
    Start thread thread_academy
    Start thread thread_academy_upload
    • Connection failed

video stage thread ended

Academy download stage paused
[ INFO] [1360280795.015007096]: SEND: CAT_COMMON/altitude_max = 2500.000000 (DEFAULT = 3000.000000)
[ INFO] [1360280795.015084296]: SEND: CAT_COMMON/enemy_colors = 2.000000 (DEFAULT = 1.000000)
[ INFO] [1360280795.015169021]: SEND: CAT_APPLI/navdata_options = 268435456.000000 (DEFAULT = 65537.000000)
[ INFO] [1360280795.015248827]: SEND: CAT_USER/euler_angle_max = 0.087000 (DEFAULT = 0.209440)
[ INFO] [1360280795.015302954]: SEND: CAT_USER/control_yaw = 1.750000 (DEFAULT = 1.745329)
[ INFO] [1360280795.015363624]: SEND: CAT_APPLI/bitrate = 4000.000000 (DEFAULT = 1000.000000)
[ INFO] [1360280795.015419406]: SEND: CAT_SESSION/max_bitrate = 4000.000000 (DEFAULT = 1000.000000)
[ INFO] [1360280795.015475310]: SEND: CAT_SESSION/detections_select_h = 32.000000 (DEFAULT = 0.000000)
[quad1/ARdrone-1] process has died [pid 17386, exit code -11].
log files: /home/parcon/.ros/log/7240ab1e-717e-11e2-a955-1c6f65c6b0bc/quad1-ARdrone-1*.log
respawning...
[quad1/ARdrone-1] restarting process
process[quad1/ARdrone-1]: started with pid [17607]
Using custom ip address 192.168.1.10

imu_calibration

So according to this paper, (http://cas.ensmp.fr/~petit/papers/ifac11/PJB.pdf) the navdata velocity estimates are based on fused estimates from the optical flow and the aerodynamic model of the drone. When an estimate is unavailable from the bottom camera, simply the aerodynamic model is used.

This means the biases are recalculated automatically as and when the estimate switches from a fused one to the aerodynamic one. So, does it make sense for you to still do your recalibration in the beginning and stick with that value through a given run of the drone? Wouldn't that already be done much better on the embedded system?

Ability to hover without enabling the "hover" state

The hover state takes into account features on the image plane to keep the ardrone stationary, but I would like to be able to hover without using the cv methods. So far I believe that using very small velocities in the cmd_vel/linear message is the best way to accomplish this.

According to the SDK this is a simple bit value that is sent with the command velocity. Is their a way to set this bit manually? Maybe the cmd_vel/angular/x or cmd_vel/angular/y could be high-jacked for this function, since they are not in use.

Segfault when trying run ardrone_driver

Hello,
...After getting a successful Rosmake of the package, when I tried to run the driver it emits a segfault during the initialization process. I'm not sure what exactly is going and would really appreciate some help.

Thanks,

Sen

Ubuntu 12.10
Ros Groovy

heres the output...

user$~ rosrun ardrone_autonomy ardrone_driver
Wait authentification
Wait authentification
Wait authentification
===================+> 192.168.1.1
[ INFO] [1368262008.957043787]: Root Frame is: 0
[ INFO] [1368262008.958842421]: No values found for ~cov/imu_la in parameters, set all to zero.
[ INFO] [1368262008.960211071]: No values found for ~cov/imu_av in parameters, set all to zero.
[ INFO] [1368262008.961594793]: No values found for ~cov/imu_or in parameters, set all to zero.
Deleting Profile -cea48d22
Deleting Application -e182b69b
Input device Teleop added
Starting thread video_stage
Starting thread video_recorder

video stage thread initialisation

Starting thread update_ros
Video multisocket : init 2 sockets
Video multisocket : connecting socket 0 on port 5555 UDP
Video recorder thread initialisation
Video multisocket : connecting socket 1 on port 5555 TCP
Set IP_TOS ok
Starting thread navdata_update
Thread update_ros started
Starting thread ardrone_control
Thread navdata_update in progress...
Start thread thread_academy_download
Academy download stage resumed
PA : MEMORY SPACE ALLOWED : 40 MB
Start thread thread_academy
Start thread thread_academy_upload
Segmentation fault (core dumped)

How to change front camera resolution?

I'm using the Ar.Drone 2.0. with Firmware: 2.2.6.
The front camera can be used with resolution : 360p (640x360) or 720p (1280*720). The default setup is the first one, 360p. I would like to use the 720p.
How can I change it? Is there a parameter in the launch file?

Is there any update in camera togle issue?

Switch between camera streams as fast as possible?

Hello everyone,

I would like to acquire images from both AR Drone cameras as fast as possible. To do so I have programmed a test code using ROS (using the ardrone_autonomy driver https://github.com/AutonomyLab/ardrone_autonomy , which in turn uses the AR Drone SDK). From what I have seen, a fair ammount of images can be received (around 10-20) when switching between cameras. The problem is that part of the images received from the frontal camera are in reality from the bottom camera; and the same happens the other way around. For instance when I visualize the video streams "ardrone/front/image_rect_color" and "ardrone/bottom/image_rect_color" on two separate "image_view" nodes; I will get images from both cameras on both "image_view" windows. Has anybody encountered the same problem before?

I am using the latest version of the SDK and the ardrone_autonomy software on Ubuntu 12.04 and an AR Drone 2.0.

Please note that there other users interested on this issue:
https://projects.ardrone.org/boards/1/topics/show/1609
https://projects.ardrone.org/issues/show/172

My question is if other people are facing the same problem, and whether this bug is a problem on the SDK or on the ardrone_autonomy node.
Thanks for your help,

jespestana

Latching on takeoff/land/reset topics

I'm using roscpp, and can't seem to get the drone to take off unless I enable latching on the takeoff publisher:

ros::Publisher launch = n.advertise<std_msgs::Empty>("ardrone/takeoff", 5, true);
ros::Duration(1.0).sleep();
std_msgs::Empty empty;
launch.publish(empty);

Even then (and with or without latching on the land publisher) I can't get the drone to land from roscpp.

However, command line works great for takeoff landing and reset:

$ rostopic pub -1 /ardrone/takeoff std_msgs/Empty

Why?

Control configuration changes not reflected on drone?

It appears that changes in control parameters (and other CAT_USER) settings do not affect the drone.

When running ardrone_driver, the following is printed:

Wait authentification
===================+> 192.168.1.1
[ INFO] [1352234370.655983884]: Root Frame is: 0
[ INFO] [1352234370.656905814]: No values found for `~cov/imu_la` in parameters, set all to zero.
[ INFO] [1352234370.657902223]: No values found for `~cov/imu_av` in parameters, set all to zero.
[ INFO] [1352234370.658896658]: No values found for `~cov/imu_or` in parameters, set all to zero.
[ INFO] [1352234370.663244082]: SET ~bitrate_ctrl_mode            : 0.00
[ INFO] [1352234370.664260742]: SET ~max_bitrate                  : 2000.00
[ INFO] [1352234370.665207506]: SET ~outdoor                      : 1.00
[ INFO] [1352234370.666118191]: SET ~flight_without_shell         : 1.00
[ INFO] [1352234370.667830458]: SET ~altitude_max                 : 5000.00
[ INFO] [1352234370.668715842]: SET ~altitude_min                 : 100.00
[ INFO] [1352234370.670661813]: SET ~enemy_colors                 : 3.00
[ INFO] [1352234370.671968513]: SET ~enemy_without_shell          : 0.00
[ INFO] [1352234370.673430208]: SET ~control_vz_max               : 2000.00
[ INFO] [1352234370.674487957]: SET ~control_yaw                  : 350.00
[ INFO] [1352234370.675655010]: SET ~euler_angle_max              : 0.50
[ INFO] [1352234370.676419481]: SET ~bitrate                      : 2000.00
[ INFO] [1352234370.677528147]: SET ~navdata_demo                 : 0.00
[ INFO] [1352234370.678744205]: SET ~detect_type                  : 10.00
[ INFO] [1352234370.679771770]: SET ~detections_select_h          : 32.00
[ INFO] [1352234370.680836172]: SET ~detections_select_v_hsync    : 4.00
Input device Teleop added
Starting thread video_stage
Starting thread video_recorder
Starting thread update_ros

video stage thread initialisation

Video multisocket : init 2 sockets
Video multisocket : connecting socket 0 on port 5555 UDP
Video multisocket : connecting socket 1 on port 5555 TCP
Thread `update_ros` started 
Video recorder thread initialisation
Set IP_TOS ok
Starting thread navdata_update
Starting thread ardrone_control
Thread navdata_update in progress...
PA : MEMORY SPACE ALLOWED : 40 MB
Start thread thread_academy
Start thread thread_academy_upload
Start thread thread_academy_download 
Academy download stage resumed
Academy download stage paused
Timeout when reading navdatas - resending a navdata request on port 5554
Academy download stage resumed
Academy download stage paused
Sending default CAT_SESSION settings
[ INFO] [1352234375.681546174]: Successfully connected to 'My ARDrone' (AR-Drone 2.0 - Firmware: 2.1.20) - Battery(%): 57

Investigating the drone's configuration files (see next code snippet) shows that the CAT_SESSION values (for example detect_type, detections_select_h, detections_select_v_hsync) are correctly set (as implied by the driver output), but custom CAT_USER settings are not set. The type of each parameter can be read in config_keys.h.

CAT_SESSION parameters correctly set

# pwd
/data/custom.configs/sessions
# cat config.7bc641ad.ini 

[control]
flying_mode                    = 0
hovering_range                 = 1000

[video]
codec_fps                      = 30
video_codec                    = 129
max_bitrate                    = 2000
video_channel                  = 0

[detect]
groundstripe_colors            = 16
detect_type                    = 10
detections_select_h            = 32
detections_select_v_hsync      = 4
detections_select_v            = 0

[userbox]

[gps]
latitude                       = 5.0000000000000000e+02
longitude                      = 5.0000000000000000e+02
altitude                       = 0.0000000000000000e+00

[custom]
application_id                 = e182b69b
profile_id                     = 00000000
session_id                     = 7bc641ad
session_desc                   = Session 7bc641ad

But CAT_USER not?

# cd ../profiles/
# ls

There are no user profiles created by the application.

Further debugging by setting #define _GENERAL_NAVDATA_DEBUG (1) in ardrone_general_navdata.c produces the following output on driver startup:

Wait authentification
===================+> 192.168.1.1
[ INFO] [1352234370.655983884]: Root Frame is: 0
[ INFO] [1352234370.656905814]: No values found for `~cov/imu_la` in parameters, set all to zero.
[ INFO] [1352234370.657902223]: No values found for `~cov/imu_av` in parameters, set all to zero.
[ INFO] [1352234370.658896658]: No values found for `~cov/imu_or` in parameters, set all to zero.
[ INFO] [1352234370.663244082]: SET ~bitrate_ctrl_mode            : 0.00
[ INFO] [1352234370.664260742]: SET ~max_bitrate                  : 2000.00
[ INFO] [1352234370.665207506]: SET ~outdoor                      : 1.00
[ INFO] [1352234370.666118191]: SET ~flight_without_shell         : 1.00
[ INFO] [1352234370.667830458]: SET ~altitude_max                 : 5000.00
[ INFO] [1352234370.668715842]: SET ~altitude_min                 : 100.00
[ INFO] [1352234370.670661813]: SET ~enemy_colors                 : 3.00
[ INFO] [1352234370.671968513]: SET ~enemy_without_shell          : 0.00
[ INFO] [1352234370.673430208]: SET ~control_vz_max               : 2000.00
[ INFO] [1352234370.674487957]: SET ~control_yaw                  : 350.00
[ INFO] [1352234370.675655010]: SET ~euler_angle_max              : 0.50
[ INFO] [1352234370.676419481]: SET ~bitrate                      : 2000.00
[ INFO] [1352234370.677528147]: SET ~navdata_demo                 : 0.00
[ INFO] [1352234370.678744205]: SET ~detect_type                  : 10.00
[ INFO] [1352234370.679771770]: SET ~detections_select_h          : 32.00
[ INFO] [1352234370.680836172]: SET ~detections_select_v_hsync    : 4.00
Input device Teleop added
Starting thread video_stage
Starting thread video_recorder
Starting thread update_ros

video stage thread initialisation

Video multisocket : init 2 sockets
Video multisocket : connecting socket 0 on port 5555 UDP
Video multisocket : connecting socket 1 on port 5555 TCP
Thread `update_ros` started 
 Video recorder thread initialisation
Set IP_TOS ok
Starting thread navdata_update
Starting thread ardrone_control
Thread navdata_update in progress...
PA : MEMORY SPACE ALLOWED : 40 MB
Start thread thread_academy
Start thread thread_academy_upload
Start thread thread_academy_download 
Academy download stage resumed
Academy download stage paused
Timeout when reading navdatas - resending a navdata request on port 5554
[286] General Navdata : Need to check multiconfig ... request config file
Academy download stage resumed
Academy download stage paused
[69] General Navdata : Config callback called with result 1
[72] General Navdata : State : 6
[76] General Navdata : Got config file
[102] General Navdata : End of config callback call
[166] General Navdata : Checking drone version ...
[170] General Navdata : Drone supports multiconfig
[69] General Navdata : Config callback called with result 1
[72] General Navdata : State : 7
[80] General Navdata : Got ids list
[102] General Navdata : End of config callback call
[184] General Navdata : Got AR.Drone ID list. Switch->1,1,1. ND->1
[198] General Navdata : Checking application efc8fd84 (desc : com.parrot.freeflight)
[198] General Navdata : Checking application b6bc397b (desc : com.digitalsirup.dronecontrolhd)
[198] General Navdata : Checking application e182b69b (desc : ardrone_driver)
[201] General Navdata : Found our application ... should not init
[234] General Navdata : We're requesting default user (00000000), do nothing.
Sending default CAT_SESSION settings
[69] General Navdata : Config callback called with result 1
[72] General Navdata : State : 8
[84] General Navdata : Got current ids
[102] General Navdata : End of config callback call
[292] General Navdata : Send application navdata demo/options
[69] General Navdata : Config callback called with result 1
[72] General Navdata : State : 9
[88] General Navdata : Got navdatas
[102] General Navdata : End of config callback call
[301] General Navdata : Refreshing from MULTICONFIG FSM
[ INFO] [1352234375.681546174]: Successfully connected to 'My ARDrone' (AR-Drone 2.0 - Firmware: 2.1.20) - Battery(%): 57

The driver seems to use the default user profile, which is not updated according to the set ros parameters.

Changing the euler_angle_max parameter to 30º instead of the default 12º and running the drone in a vicon system shows no change in drone behavior with the increased parameter value (this is also visually apparent).

Perhaps I am doing something incorrectly, in which case please let me know! If however this is an issue, I am happy to help debug – let me know what I can do!

Mike

Discussion on Driver's Threading Architecture

This issue is related to #39 & #41

First I restate one of my previous comments with modifications:

I did more tests on "realtime" and "legacy" publishing of "Navdata" and here are my thoughts:

"Full Speed Navdata" is not a good idea. The current implementation bypasses main ROS loop running in a different thread while instantly publishes the data which may generate undefined behaviour. I say this because I could not find any information about ROS that states it is safe to bypass the same ROS loop from another thread.

When navdata_demo is turned on and the Drone is publishing at 200Hz, the main ROS loop can not catch up even with 500Hz loop rate. I think this is because of expensive memory copies done in video and navdata callback functions, many locks/unlocks between two threads and other custom code/ROS overheads during the ROS loop.

In order to examine it more, I put a ROS_INFO inside this if block to print the difference between copy_current_frame_id and last_frame_id. If ROS loop is in sync with drone update loop, this number should be always 1, otherwise it shows the number of navdata misses between consequent ROS updates which consequently leads to frame rates less than 200Hz. The result was as I expected. There are lots of misses when the looprate is set to 200Hz. Increasing that number will lead to better navdata frame rate (and less misses). In my case setting that number to 1000Hz would lead to 200Hz navdata update rate.

In summary, I suggest to remove the "Full Speed Navdata". Anyone who is interested in getting 200Hz navdata update, can increase the looprate variable appropriately.

The current driver thread model is that ROS update loop (ARDroneDriver::run()) is being run in another thread alongside SDK2's video_thread and navdata_update using SDK2 threading macros. The problem of the ROS thread being unable to catch up with fast (200Hz) navdata_update is that the ROS loop has a wait inside it. While ROS loop is [busy] waiting by pre-defined frequency (loop_rate.sleep()), it will eventually miss a couple of data frames that is being received in the other thread in navdata_custom_process.

The reason why the fullspeed_navdata works is that it pushes the new data into ROS publish buffer for a topic which will be pushed to topic's queue on ros::spinOnce() looprate times in a second. I was wondering if it is a good idea that we re-structure the driver's code so that publish_navdata and publish_video is being called directly from SDK2 thread exactly the same way that rosDriver->PublishNavdataTypes(shared_raw_navdata) is being called now.

My concern is whether publishing to ROS from another thread is safe or not. As far as I could understand, the ROS multi-threaded spinning model is meant for subscribers/publishers from different thread, which is slightly different from our case.

I would really appreciate any comments @mikehamer, @JakobEngel.

changing height and wind_comp_angle question

Hey,

Can anybody help me what exactly does this wind_comp_angle do? Can I stabilize the drone with this angles? If yes, how to use it ?

I also notice that while changing height only in Free flight drone also compensates for the wind, so that the drift is not to big. If using ROS and it's progressive commands, the drift is not compensated.

Any thoughts, or help?

thank's

Grega

Unstable during yaw

The new commit makes the stability much better than the previous one, thanks a lot for that! However everytime I give the drone a yaw or throttle command, the drift is way too much to ignore. Roll and Pitch is fine, and hovering is very good now. Of course, I tested the drone in the same configuration with the official apps, and yaw and throttle are both alright then...

So, is there a reason why this could be happening?

AR.Drone 2.0 Videoframe Timestamp.

The 2.0 drone sends timestamps with each videoframe (parrot_video_encapsulation_t field timestamp).

It would be extremely helpful for me to get these somehow attached to each frame, however that's not thet easy, as they get lost somewhere in the parrot video-processing pipeline (i.e. would have to add a driver_pre_stages or hack around in the SDK). Also, these timestamps are not in sync with the navdata timestamps, i dont know how you could synchronize them.

no video after pulling the new changes

Hi, i am not sure why and if it is really in issue.
But after pulling the new updates i have no video more.
any ideas what can go wrong there.
is it possible the no video subscriber thing make the trouble for me?
i only check if the video is there with
rosrun image_view image_view image:=/ardrone/image_raw

with a reset to
git reset 58d20cd

it works again.

greets jan

Git Readme.MD Typo

There's some typos in the Navdata section in Readme.MD:

The lines:

rotx: Left/right tilt in degrees (rotation about the X axis)
roty: Forward/backward tilt in degrees (rotation about the Y axis)
rotz: Orientation in degrees (rotation about the Z axis)

Should be rotX, rotY and rotZ (capital letter for axis name)

Not able to lift the ardrone more than 50 cm?? Suggestions

I0m starting to use ROS and this library, and I made this simple program to lift the ardrone more than a certain threshold (threshold = umbral in my program). First I send and empty message and to /ardrone/takeoff , it take offs, and the when I start running my program, the ar drone looses altitude and it is not able to reach an altitude greater than 40 cm or so. I'll really appreciate tips or advices... I'm new at this stuff...

Some defines and variables are not used, i declared them thinking in using them afterwards

include "ros/ros.h"

include "ardrone_autonomy/Navdata.h"

include "geometry_msgs/Twist.h"

include cstdio

include cstdlib

define ROTX_REF 0.15

define ROTY_REF 8.2

define ROTX_UMBRAL 20

define ROTY_UMBRAL 20

float altitud;
float rotx;
float roty;
float rotz;

float umbral = 400;
float vz=0;
float ax=0;
float ay=0;
bool flag = true;

void navDataCallback(const ardrone_autonomy::Navdata::ConstPtr& navigationData){
if (flag){
umbral_rotz = navigationData->rotZ;
umbral = navigationData->altd + umbral;
flag = false;
}
altitud = navigationData->altd;
ROS_INFO("%f \t %f \t error: %f", altitud, umbral, umbral-altitud);
}

int main(int argc, char ** argv){
ros::init(argc, argv, "ardrone");
ros::NodeHandle n;
ros::Subscriber navDataSub = n.subscribe("/ardrone/navdata", 100, &navDataCallback);

ros::Publisher pub = n.advertise <geometry_msgs::Twist> ("/cmd_vel",1000);

ros::Rate loop_rate(10);

while(ros::ok){
geometry_msgs::Twist msg;
if (altitud>umbral+200){
vz = -1.0;
}
else if (altitud<umbral){
vz = 1.0;
}
else{
vz = 0;
}

msg.linear.z = vz;
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();

}
return 0;
}

ardrone/flattrim does not seem to exist

In the documentation, it says to call the service ardrone/flattrim. After running the driver successfully, the service does not exist, and after searching the directories I couldn't find it. Has it been implemented yet?

Choppy stream from Cameras

I'm trying to implement autonomous landing using the bottom camera, and this application heavily relies on a steady, constant camera frame rate. The current frame rate can vary from anywhere between 0.1-0.12 secs, and sometimes when it freezes, there is no image for up to 2 secs altogether. although I don't need the front camera now, the stream from it seems to be fairly constant, but the bottom camera gives a very choppy stream more often than not.

I've tested this with my freeflight app of course, and it seems fine then.

This feed is usually accompanied by messages like "Timeout when reading navdatas - resending a navdata request on port 5554", "Decoding failed for I frame", "Decoding Failed for P frame". What can i do to improve the link between the computer and the drone? I'm guessing that's the cause for this, and not a bug in the driver?

Unable to run rosrun ardrone_autonomy ardrone_driver

Please forgive me if this is the wrong place to ask this. I am working with the ardrone for my senior thesis and ardrone_autonomy looks absolutely awesome. Thanks for your hard work.

I was wondering if you could check out the issue I am having. When I try and run rosrun ardrone_autonomy ardrone_driver, I get the following output, ending in "The AR-Drone has a suspicious Firmware number."

https://gist.github.com/3825341

As far as stats, I am running Ubuntu 12.04 and have an ardrone 2. I would appreciate any help you could offer. Thanks!

Turn on recording onto USB drive?

Does the ardrone_driver expose the interface to turn on and off video recording to the USB drive? I noticed the video_on_usb parameter, which defaults to 1, but I connected a USB drive to my AR.Drone and recording did not happen. I also quickly reviewed the AR.Drone SDK documentation and source code, and I couldn't find a call in there which enabled recording to the USB. Any ideas?

Thanks
-s

Commanding multiple drones

The tread has seemed a little dead lately....so how about another question- I've been having trouble getting multiple drones working with the drivers. Has anyone found a good method for multiple drones? I'm expecting to use multiple wireless cards, and if necessary, some custom static routes.

Import ardrone_autonomy.msg

I have problems when trying to import "from ardrone_autonomy.msg import NavData" with python.
Could you help me?

`ToggleCam` Service

Hi! First of all, thank you for taking the time to create such a helpful package, I''m finding it very useful for my senior thesis project. One point of clarification - the instructions say to call the togglecam service with an empty message. There's additionally a CamSelect.srv service messages as well. What is the difference between the two? Thank you!

Patch for ROS Groovy ardrone_driver

I just tried ti build the ardrone_driver in ROS Groovy. In Groovy some things concerning the bullet engine have been changed[1]. That's why the driver won't build (btQuaternion not defined). Here's my proposed patch:

--- ardrone_driver.cpp 2012-12-21 15:17:32.706078979 +0100
+++ ardrone_driver.cpp.old 2012-12-21 15:27:34.022090067 +0100
@@ -2,7 +2,6 @@
#include "teleop_twist.h"
#include "video.h"
#include <signal.h>
-#include <tf/LinearMath/Quaternion.h>

////////////////////////////////////////////////////////////////////////////////
// class ARDroneDriver
@@ -699,7 +698,7 @@
imu_msg.linear_acceleration.z = msg.az * 9.8;

 // IMU - Rotation Matrix
  • tf::Quaternion q;
  • btQuaternion q;
    q.setEulerZYX(msg.rotZ * _DEG2RAD, msg.rotY * _DEG2RAD, msg.rotX * _DEG2RAD);
    tf::quaternionTFToMsg(q, imu_msg.orientation);

[1] http://ros.org/wiki/bullet/ChangeList

default for enemy_without_shell

a very small issue. not really important.
you wrote in the readme that the default value is 1
enemy_without_shell - Default: 1

but in the code it is 0.0
ardrone_application_default_config.enemy_without_shell = (bool) rosDriver->getRosParam("~enemy_without_shell", (double) 0.0);

Failure rosmake ardrone_autonomy with ROS Groovy

I installed new release of ROS (Groovy) and when I compile ardrone_autonomy rosmake returned an
error. I resolve by changing ardrone_driver.cpp like below:

// IMU - Rotation Matrix
btQuaternion q;
q.setEulerZYX(msg.rotZ * _DEG2RAD, msg.rotY * _DEG2RAD, msg.rotX * _DEG2RAD);
tf::quaternionTFToMsg(q, imu_msg.orientation);

---->
// IMU - Rotation Matrix
tf::Quaternion q;
q.setEulerZYX(msg.rotZ * _DEG2RAD, msg.rotY * _DEG2RAD, msg.rotX * _DEG2RAD);
tf::quaternionTFToMsg(q, imu_msg.orientation);

cmd_vel topic

I'm fairly new to ROS so I may be wrong here, but shouldn't the commands for controlling the drone be published to cmd_vel topic rather than the ardrone/cmd_vel topic? The manual says the publish on the second topic, which basically does nothing...publishing on the first one works though!

Detection of shell tags with front camera?

Hi Guys,

Firstly I want to thank you for releasing this driver publicly, it's been a huge assistance to me.

I've been trying the last few days to enable shell-tag detection from the front camera of my AR.Drone 2.0, but unfortunately without success. The following parameters are set to the drone:

SET ~bitrate_ctrl_mode : 0.00
SET ~max_bitrate : 4000.00
SET ~outdoor : 1.00
SET ~flight_without_shell : 1.00
SET ~altitude_max : 5000.00
SET ~altitude_min : 100.00
SET ~enemy_colors : 3.00
SET ~enemy_without_shell : 0.00
SET ~control_vz_max : 2000.00
SET ~control_yaw : 350.00
SET ~euler_angle_max : 0.50
SET ~bitrate : 4000.00
SET ~navdata_demo : 0.00
SET ~detect_type : 10.00
SET ~detections_select_h : 32.00
SET ~detections_select_v_hsync : 128.00

Where:
enemy_colors = 3 = ARDRONE_DETECTION_COLOR_ORANGE_BLUE (my tag color)
detect_type = 10 = CAD_TYPE_MULTIPLE_DETECTION_MODE
detections_select_h = 32 = TAG_TYPE_SHELL_TAG_V2
detections_select_v_hsync = 128 = TAG_TYPE_BLACK_ROUNDEL

Detection of the black roundel from the bottom camera works successfully and reliably.

Do you have any suggestions about what I could be doing wrong?

Thanks and best regards,
Mike

libavutil/common.h:179: error: ‘UINT64_C’

i run in Ubuntu 10.04 64bit in this little issue by rosmake ardrone_autonomy

In file included from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/FFMPEG/Includes/libavutil/avutil.h:125,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/VP_SDK/VP_Api/vp_api_picture.h:16,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/VLIB/video_controller.h:5,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/VLIB/video_codec.h:4,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/Soft/Common/config_keys.h:29,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/Soft/Common/ardrone_api.h:739,
from /home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/Soft/Lib/ardrone_tool/ardrone_tool.h:4,
from /home/jan/ros/stacks/ardrone_autonomy/src/ardrone_sdk.h:25,
from /home/jan/ros/stacks/ardrone_autonomy/src/ardrone_driver.h:8,
from /home/jan/ros/stacks/ardrone_autonomy/src/ardrone_driver.cpp:1:
/home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/FFMPEG/Includes/libavutil/common.h: In function ‘int32_t av_clipl_int32_c(int64_t)’:
/home/jan/ros/stacks/ardrone_autonomy/ARDroneLib/FFMPEG/Includes/libavutil/common.h:179: error: ‘UINT64_C’ was not declared in this scope

solved it with this small code, found by google

ifndef INT64_C

define INT64_C(c) (c ## LL)

define UINT64_C(c) (c ## ULL)

endif

wonder why. because the SDK2.0 compile in this system well, also the examples.
maybe a make flag thing in ros???

Fuerte rosdep

Hi,

I'm pretty new with ROS so please, bear with me.
When I entered

rosdep install ardrone_autonomy

into the terminal, I got

ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies:
ardrone_autonomy: Cannot locate rosdep definition for [libsdl-dev]

I'm currently using Ubuntu 12.04 with ROS Fuerte. I checked to make sure libsdl-dev was installed on my OS, and it said it has libsdl1.2-dev. I also tried changing the manifest.xml file in ardrone_autonomy to say libsdl1.2-dev instead of libsdl-dev, but that didn't help.

Can I please get some help on this issue? Thanks!

EDIT:
I've already looked at

http://answers.ros.org/question/35426/problem-with-linking-sdl-when-compiling-ardrone_brown-node/

They had the same problem, but the version of ardrone_autonomy I'm using already has SDL at the end of the target_link_libraries(...).

rosmake ardrone_autonomy permission issues

I apologize if I am posting this issue in the wrong area. When I enter:

$ rosmake ardone_autonomy

I get the following message:

mkdir: cannot create directory 'build': Permission denied

I have tried the follow to fix this:
$ sudo -i
$./build_sdk

which executes, but when I go to rosmake ardone_autonomy I still get the same error. Is there something simple I overlooked in the tutorial? I am using the VirtualBox virtual image with Ubuntu 12.04.1 LTS and ROS Fuerte pre-installed. If this is the incorrect location for this issue, could anyone point me to the correct forum. Thank you

ARDrone Cam-url

So I'm using the April Tag Detector for the autonomous landing operation, and that requires me to specify a url of the camera I want it to stream the images from. For example, the URL of my webcam is

v4l2:///dev/video0

Is there a way I can specify the url of the drone's bottom camera to the application?

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.