From 0c8a437f1b2135895f19f94aebf08b92e1ebb9a6 Mon Sep 17 00:00:00 2001 From: muelmarc <muelmarc@student.ethz.ch> Date: Fri, 31 Mar 2017 17:05:12 +0200 Subject: [PATCH] Publishers and callbacks to send data to crazyradio.py added to PPSClient.pps; Crayzradio node added to ppsLaunch.launch; Subcriber added to Crazyradio.py which successfully subscribes to motorCommand even if no cf is connected. --- .../src/d_fall_pps/crazyradio/CrazyRadio.py | 44 ++++++--- .../d_fall_pps/crazyradio/cflib/__init__.pyc | Bin 1182 -> 1182 bytes .../crazyradio/cflib/crazyflie/__init__.pyc | Bin 15562 -> 15562 bytes .../crazyradio/cflib/crazyflie/commander.pyc | Bin 2173 -> 2173 bytes .../crazyradio/cflib/crazyflie/console.pyc | Bin 1678 -> 1678 bytes .../crazyradio/cflib/crazyflie/log.pyc | Bin 19930 -> 19930 bytes .../crazyradio/cflib/crazyflie/mem.pyc | Bin 27976 -> 27976 bytes .../crazyradio/cflib/crazyflie/param.pyc | Bin 11522 -> 11522 bytes .../cflib/crazyflie/platformservice.pyc | Bin 1580 -> 1580 bytes .../crazyradio/cflib/crazyflie/toc.pyc | Bin 7071 -> 7071 bytes .../crazyradio/cflib/crazyflie/toccache.pyc | Bin 3809 -> 3809 bytes .../crazyradio/cflib/crtp/__init__.pyc | Bin 2559 -> 2559 bytes .../crazyradio/cflib/crtp/crtpdriver.pyc | Bin 3669 -> 3669 bytes .../crazyradio/cflib/crtp/crtpstack.pyc | Bin 5176 -> 5176 bytes .../crazyradio/cflib/crtp/debugdriver.pyc | Bin 27858 -> 27858 bytes .../crazyradio/cflib/crtp/exceptions.pyc | Bin 1069 -> 1069 bytes .../crazyradio/cflib/crtp/radiodriver.pyc | Bin 12349 -> 12349 bytes .../crazyradio/cflib/crtp/serialdriver.pyc | Bin 1867 -> 1867 bytes .../crazyradio/cflib/crtp/udpdriver.pyc | Bin 3552 -> 3552 bytes .../crazyradio/cflib/crtp/usbdriver.pyc | Bin 7434 -> 7434 bytes .../crazyradio/cflib/drivers/__init__.pyc | Bin 254 -> 254 bytes .../crazyradio/cflib/drivers/cfusb.pyc | Bin 5866 -> 5866 bytes .../crazyradio/cflib/drivers/crazyradio.pyc | Bin 9622 -> 9622 bytes .../crazyradio/cflib/utils/__init__.pyc | Bin 241 -> 241 bytes .../crazyradio/cflib/utils/callbacks.pyc | Bin 1737 -> 1737 bytes pps_ws/src/d_fall_pps/launch/ppsLaunch.launch | 5 +- pps_ws/src/d_fall_pps/src/PPSClient.cpp | 90 ++++++++++++++---- .../d_fall_pps/src/SafeControllerService.cpp | 2 +- 28 files changed, 102 insertions(+), 39 deletions(-) diff --git a/pps_ws/src/d_fall_pps/crazyradio/CrazyRadio.py b/pps_ws/src/d_fall_pps/crazyradio/CrazyRadio.py index 782ff3d7..e137fc0c 100755 --- a/pps_ws/src/d_fall_pps/crazyradio/CrazyRadio.py +++ b/pps_ws/src/d_fall_pps/crazyradio/CrazyRadio.py @@ -1,9 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import roslib; roslib.load_manifest('crazypkg') +import roslib; roslib.load_manifest('d_fall_pps') import rospy -from crazypkg.msg import ControllerOutputPackage +from d_fall_pps.msg import AngleCommand +from d_fall_pps.msg import RateCommand +from d_fall_pps.msg import MotorCommand # General import @@ -91,25 +93,31 @@ class PPSRadioClient: self._cf.send_packet(pk) def motorCommandCallback(data): - """Callback for motor controller actions""" - cf_client._send_to_commander(0, 0, 0, data.motorCmd1, data.motorCmd2, data.motorCmd3, data.motorCmd4, CONTROLLER_MOTOR) - rospy.loginfo("motor controller callback: %s, %s, %s, %s", data.motorCmd1, data.motorCmd2, data.motorCmd3, data.motorCmd4) + """Callback for motor controller actions""" + rospy.loginfo("test motorCommandCallback") def angleCommandCallback(data): - """Callback for angle controller actions""" - cf_client._send_to_commander(data.roll,data.pitch,data.yaw,data.thrust, 0, 0, 0, 0, CONTROLLER_ANGLE) - rospy.loginfo("angle controller callback: %s, %s, %s", data.roll,data.pitch,data.yaw,data.thrust) + """Callback for angle controller actions""" + ###cf_client._send_to_commander(data.roll,data.pitch,data.yaw,data.thrust, 0, 0, 0, 0, CONTROLLER_ANGLE) + ####rospy.loginfo("angle controller callback: %s, %s, %s", data.roll,data.pitch,data.yaw,data.thrust) + rospy.loginfo("test angleCommandCallback") def rateCommandCallback(data): - """Callback for rate controller actions""" - cf_client._send_to_commander(data.roll,data.pitch,data.yaw,data.thrust, 0, 0, 0, 0, CONTROLLER_RATE) - rospy.loginfo("rate controller callback: %s, %s, %s", data.roll,data.pitch,data.yaw,data.thrust) + """Callback for rate controller actions""" + ###cf_client._send_to_commander(data.roll,data.pitch,data.yaw,data.thrust, 0, 0, 0, 0, CONTROLLER_RATE) + ###rospy.loginfo("rate controller callback: %s, %s, %s", data.roll,data.pitch,data.yaw,data.thrust) + rospy.loginfo("test rateCommandCallback") + +def testCallback(data): + """Callback used to test data receipt if no crazyfly was found""" + rospy.loginfo("Crazyradio.py successfully subscribed and received testvalues: %f", data.cmd1) if __name__ == '__main__': rospy.init_node('CrazyRadio', anonymous=True) # Initialize the low-level drivers (don't list the debug drivers) cflib.crtp.init_drivers(enable_debug_driver=False) + while not rospy.is_shutdown(): # Scan for Crazyflies and use the first one found @@ -126,13 +134,19 @@ if __name__ == '__main__': cf_client = PPSRadioClient(available[0][0]) time.sleep(3.0) #TODO: change publisher name if not correct - rospy.Subscriber("PPSClient/MotorCommands", MotorCommand, motorCommandCallback) - rospy.Subscriber("PPSClient/AngleCommands", AngleCommand, angleCommandCallback) - rospy.Subscriber("PPSClient/RateCommands", RateCommand, rateCommandCallback) + rospy.Subscriber("PPSClient/topicMotorCommand", MotorCommand, motorCommandCallback) + rospy.loginfo("trying to subscribe") + #rospy.Subscriber("PPSClient/AngleCommands", AngleCommand, angleCommandCallback) + #rospy.Subscriber("PPSClient/RateCommands", RateCommand, rateCommandCallback) rospy.spin() else: - rospy.logerr("No Crazyflies found, cannot run example") + #rospy.logerr("No Crazyflies found, cannot run example") + #for testing try to subscribe even if no crazyflie was found + rospy.loginfo("No Crazyflies found, still trying to subscribe") + rospy.Subscriber("PPSClient/topicMotorCommand", MotorCommand, testCallback) + rospy.spin() + time.sleep(0.5) diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/__init__.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/__init__.pyc index c691ab2630d8b6d69d40d6d126cd82676449f86c..f5e936ccbb0fd4da975be38c2a121c3f618e5b17 100644 GIT binary patch delta 42 ycmbQoIggW_`7<w<!`#~&*{xXEQgqW2b8;qov8Zw-7bR9z7A2-+=1(qT(EtD+zYW9y delta 42 ycmbQoIggW_`7<xqw&+tE*{xVOlZz6oD${Z@QzyH#sInI)7iAWd6i+T=(EtE2Iu1<$ diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/__init__.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/__init__.pyc index 4ce7384997efaabbe7f55a3e6b14360cde89900a..b09a12f550842caeaa953ba1c7a810c6c4aaaf89 100644 GIT binary patch delta 1026 zcmX?Ad8(3~`7<w<!`#~&*^^n=QgqW2b8;pZ%BXTB7bR9z7A2-+=1-oeAhUTlOBilx z*~!VA{kSzxcIH}uN7jUUE*@DWp2>J**?6bomfie@*O3XQwCv=1feScgWi~GmG-Jdm zExTDmI1!)pZ4qWX(vuCuzTq@mW^=jtGkluYOFqY`Sr%wC>*lvo)wm6i*}PL`F*9}( zHcwPoj$5bf<SwOC*foL@$>gQVn{dl+UZJ9j$LP)SYPWGmmds{vO&J_+23x&DXAT~# zm+Fe)wpwO0kG=>#=|Y1XeA0SGviPLu7)Rifb~UZUC(UoZ8+WM4PL{E1$K&lUR<5|s KmYv*fV-Em#Q)`?6 delta 1026 zcmX?Ad8(3~`7<xqw&+tE*^^l~lZz6oD${Z@QztLvRb?+uF3Kz@DV{u0L1y!AmN4AX zvXhfJ`*CZY?98<QkE{vzTs*Q$Jd^RrvhhyEExY**uOkyqY1zs30vB+~%4}XBXvT<B zT6VLBa3VhG+ak<(q$eAQeZy(C%;s|OXZSR)mwb*>vn<eP*3ECFs&N}2vw5e?VrJ|n zY@VpF9Jfx{$z4jPuxkV*lF3VzH{q7uyh244kI|du)o$aCESb&Tnld=t47PfQ&Kx{e zFVz*pZMDp19(@sf(uD>&_@woWWbsMQF^<3|?P^+yPnzF+H||i8oh)P3j>p?ytXy%M KEjzi}#vTA3J$;D) diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/commander.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/commander.pyc index 60e1d661e5f06bdbfeaf1bbe0d8449209016fa04..1a4551165f13f85143fbb07424587f5960cf074a 100644 GIT binary patch delta 164 zcmew>@K=DH`7<w<!`#~&*|VA0QgqW2b8;r%Wme@%E=sJbEJ{qt%%AMQp|trV6E`DH cX}QhnEM~ZM%T3<E)`U~D?Bo{qcAT=d0E6B+YXATM delta 164 zcmew>@K=DH`7<xqw&+tE*|V8AlZz6oD${Z@Qzr{@sInI)7iAWd6i;^GP}+QwiJK9p cwA^NO7Bk$s<tA@nYr?5nc5(}QJ5E_!03rf6xBvhE diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/console.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/console.pyc index 7dbd2d9d6d6da40aa68d74f41c7059d3ff08e269..7eda3dbedd01ce70ec7b102c900beb60cab58b61 100644 GIT binary patch delta 129 zcmeC<?c-%<{>;neF!%OG_Nz>6DY|KiIXRQdSyZ`_ixR6UixN{Z^EV4J$1-A<nk>jH TJ$WBXE*{xx)`d7^1KDf=`Y|hn delta 129 zcmeC<?c-%<{>;m@E&9|(_Nz>s$wi4(m1#Mdsgn&^RoRP^i!uvJiZ=@~$1-A<nk>jH TJ$WBXE*{xx)`d7^1KDf=K&UJ? diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/log.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/log.pyc index 40ace216e4a3a559c79ba9354e98c46ae7d1585c..d210b97174cb49fbd0506298c0ccae2dd1f3d8e8 100644 GIT binary patch delta 980 zcmcaLoAK6cMt0`Uyj%`*Z*OFO$jz3bo0gc9Gx;O8Dpzt*VpU~PVoGNIWJ7g{$)-HN z@W|HiZpS0r!1oT1>~8*coU-DZ`vl^d@km>Wlr!O!mYA#{!?KxC+z6kN2FX=;3}}#K znOrTEN<f97^ddYe6lAjT%Cc_0E0d1flQNs9Dv09o!RGHuw;6F;uvuR9E)MC<hU%es z44!;h^8ikB#W&yAI)z)a_~x&=!Z@r2rYG^uA^QCIq}LmW;gc3LV#8;5vWY!D-S15A z;?pf|`JEM~za=I&NOEjWwx5gB0w<ZtfsU)O8?f2X=?pt|DR8KGdI{h(7Z_+uy=UW= KmYCe@>k9x-&|a|s delta 980 zcmcaLoAK6cMt0`Uyj<I&Pi<s>$jzBtlvq`nmXnz}d7_LedvS76W<g2uWJ7g{$)-HN z@W|HiZpS0r!1oT1>~8*coU-DZ`vl^d@km>Wlr!O!mYA#{!?KxC+z6kN2FX=;3}}#K znOrTEN<f97^ddYe6lAjT%Cc_0E0d1flQNs9Dv09o!RGHuw;6F;uvuR9E)MC<hU%es z44!;h^8ikB#W&yAI)z)a_~x&=!Z@r2rYG^uA^QCIq}LmW;gc3LV#8;5vWY!D-S15A z;?pf|`JEM~za=I&NOEjWwx5gB0w<ZtfsU)O8?f2X=?pt|DR8KGdI{h(7Z_+uy=UW= KmYCe@>k9xi8DaVW diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/mem.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/mem.pyc index d61009696ecb5f8d5e8365430732bb8265f8f88e..81bb975962c1dd992cb3a97871cedbca6f3738ce 100644 GIT binary patch delta 1775 zcmaKsODM!q6vq2A56vJ6|4V<SX+~Li<Smp(o*~bKQZt!kLNbGpJu4Q6mDe!Enp1W{ z3Rx<f5oJNhVq_=s7~A>o`ghLvefQjR??phl2q?zL_ZU;<`pus4JksFG8g!0~P<vCl zX~5&0o$)wb?lH<WspK>0*`l*4l9EOJnS}Zb&k}lVT!vKeK~x<!{(_Av&6@im6>N`o zM?kFcU91_q3NDJ1bgQ(Pq~~C~11qSsmhcGeLjn|xH&P&RMp`ulso*Yk4hPWKntYG% zTu^K3Dbx;a1P!G1hOgkav_d>v!Cq@M4kpM^pd*8AH@x=mJ_`D<O-tyJ9o##&r|07% zYkZyYEsJf<Op#z($lk!A*qftZYr!XZ9g>l-qo5h#`@&ajODV-u5_(%ajw!E}d?M3a zlSWUa>$sV&%J7?3dB1#8GD@DP*u>8N%jc@{Vt2MzS7CjP4r=_knRaR~G3CR$H7qT7 zr*Ruc7qrqeEYWUhw&=oR-fCOIx+=|e+=Ooo{onr17YY6Q-S4`RB=TI@{eZDxPmk=- g?Ce{_BU8Do|JV%U32t!D%e=MWWsLuKMH#LC0YETm2LJ#7 delta 1775 zcmX?ci}A!QMt0`Uyj<I&Pi<sB&dixylvq`nmXnz}*-=lGy*Rljv!JASvLToF<OOW3 zo8?)Q8SyCTV?BmPb^+T<JhE5Wr{I*8*u0Iy4Y$RAacUHwT*V!WQ&wWL3Qr~zPHCCV z_xQMR+bXfyOaPB=@yYYWST}zVO2BP`_~bbv&v04~Hem7xA@<3)L@V*C%D^cru{lJ% z2DbxbHY-X##2x1nll^56<1`zbA|@xxMPgU6`J<dE?y!~ET&(DX+hG!u6HHhpvnemf zZZ<GIN=*KxT!BY+zY30c-yEoFjN8jHo3Cp8$LDNC9VtB0lRNb0;da#KVtq#3R!eL? zXcUAeNH!;!_~4R$X!-`XwUedH%kaqFH7~?1yLq<7A6%9ia>-17VKo=G=E;|=ap!6A z&6{jW@dV}O68rhMZH6Si6vtxRwr^H(a>Q-E%;aq@i*ak7yv+3!ZrROy-R9snT4M7u z&qcVME-`tkcQzigeSPFvuuE@V7|@T~T=B^@LASAM1ef27gJ0p11(ojiLd5VGzu6(| wDQ;<r%|#LTJiR$Fst<RNiEp-!J;06Ac@mpFGTZUlEt5S3w=^WJFy^`g09dJZh5!Hn diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/param.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/param.pyc index 2f3cf00bc16fad78ecb3bbf4bb7cdd384f04d9ac..300adf07e0912abb81c395eab49e516c272d5c0f 100644 GIT binary patch delta 688 zcmZpQYKmfK{>;neF!%OG_M2>MDY|KiIXROXl~lQsixR6UixN{Z^C$aDNlw;dUyNIJ zvph!&BTi|l&7U|wGU1Un;x)moTXORjK39Cw?gA3bcnn`BT!>G1uILwh((A>;@kmb& zkvxXo>dpRA%(yj5ZC)rXgWJ)Pley(_hqlz_zw*_1f^+h5rE}OF1&m0k%}<m$@j1*! jH4C5gSG8Dt(hD_wa7#;0w${qV<Fc<>)%Y~;({TX+&vWl- delta 688 zcmZpQYKmfK{>;m@E&9|(_M2>+$wi4(m1#Mdsgo6?RN0G@i!uvJiYNO^Nlw;dUyNIJ zvph!&BTi|l&7U|wGU1Un;x)moTXORjK39Cw?gA3bcnn`BT!>G1uILwh((A>;@kmb& zkvxXo>dpRA%(yj5ZC)rXgWJ)Pley(_hqlz_zw*_1f^+h5rE}OF1&m0k%}<m$@j1*! jH4C5gSG8Dt(hD_wa7#;0w${qV<Fc<>)%Y~;({TX+lD+SY diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/platformservice.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/platformservice.pyc index e0f185d94aab0d8b11573478ed5d61d8a63cfdf4..c983623f14c9112fa7340dc67dae8cf239564dad 100644 GIT binary patch delta 133 zcmZ3(vxbMA`7<w<!`#~&*?E}QQgqW2b8;sCXIAA(E=sJbEJ{qt%%7~yqOv)Msf!V( V^fH_>%9Ax&yK%~@Oy*^i2LJ*tEujDa delta 133 zcmZ3(vxbMA`7<xqw&+tE*?E{alZz6oD${Z@Qz!pnR%I_vF3Kz@DW0s&qOv)Msf!V( V^fH_>%9Ax&yK%~@Oy*^i2LOb$FI)fs diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/toc.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/toc.pyc index aa0e28b806abec352c54ff269edcf545f3adc1a8..4f1b78dbfca9968abd4baa1f92115eb83a5a37ac 100644 GIT binary patch delta 485 zcmbPlKHr?3`7<w<!`#~&+21j-rRb(5=HyJ0Qsqi6O023ZN=(VjpWG-ZG1-avKQ2k} z$-OK!I3+iSva&JamR-(fhey_sqX(y~#AGh6FSrbr*zC=1ibv~No($Ytn|N7phs5T~ r{AY0*EWY`TpeP<$UtviW-1cr3pNUg%8BT4JU8HW~k`$kuEo}k-z>}wX delta 501 zcmbPlKHr?3`7<xqw&+tE+21j7CKn}ERi@=+rcO>|Q)MqsF3Kz@DW2RYDKXiJ`9Drs z@yWd`HMnIrhqAIU;*nm?W`|GOkfR5;w8UgCt}i&vme}mgZHiCxS)L3$nwxl8@C3=` s%lv0?n=QWiji4w#X<uPU7Cd%u7N3b*cNuPtlU<~4<CGPjoGonv0IEB)4FCWD diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/toccache.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crazyflie/toccache.pyc index f7ec39db18ee58402fe076ba5710ded82671d339..b8a5da1d4d2221ea5b2848d45378c56f3f277164 100644 GIT binary patch delta 226 zcmaDT`%sph`7<w<!`#~&*^`;sQgqW2b8;r<^Qm$r7bR9z7A2-+=1&&jl-<0CIg$yF rbUIrJ4(ZJToJSdP>Xg~6#+`#ldh%nQ2Hct_Z{gj9Q&x8J4n9o)yEaTE delta 226 zcmaDT`%sph`7<xqw&+tE*^`+$lZz6oD${Z@Qzt*<P-QPpF3Kz@DV{9ADZ6<Ob0iZU r>2$Ud9MYQwIFB;o)G4!BjXMXA^yJ4p4Y)N=-om>Hr>yMc9ekPqb|g|8 diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/__init__.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/__init__.pyc index 69bc9be5a104d24a54da83c47d8b7f4d927a029b..d51361206bc0697d66635adddef42367f3445640 100644 GIT binary patch delta 150 zcmew_{9l-z`7<w<!`#~&*-tUCrRb(5=HyJi#iYuWT$ET<S(KQPnZKEhxt$S*)FBpK VTv94*CvizBaYW;gn!JhA7XSx=HWvT@ delta 150 zcmew_{9l-z`7<xqw&+tE*-tTXCKn}ERi@=+rcS=jq{?2LT$EW*QoNasxt$S*)FBpK VTv94*CvizBaYW;gn!JhA7XY|YI5+?R diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/crtpdriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/crtpdriver.pyc index b3a490ee42b9334900c9ee9cb7b6c67a8c54c7f4..ccd50c1a2b57d9278b134e4e69ca71755eafaea9 100644 GIT binary patch delta 362 zcmcaAb5(|&`7<w<!`#~&*=?BEQgqW2b8;s0v#N3>7bR9z7A2-+=1*4OliNIvX*DAb z=?!dBlP9p0;g;PT%BqH2^Df*PC+}omfI}AOrpaqK&f}2Xz<Cvy4A8Mxxc1<X1)2Jo aI|GMo1J8OKG8@<=C)e`k;gD6}GX(%U-g~+L delta 362 zcmcaAb5(|&`7<xqw&+tE*=?9OlZz6oD${Z@QztjFsj?R*7iAWd6i-&*liNIvX*DAb z=?!dBlP9p0;g;PT%BqH2^Df*PC+}omfI}AOrpaqK&f}2Xz<Cvy4A8Mxxc1<X1)2Jo aI|GMo1J8OKG8@<=C)e`k;gD6}GX(&%!iFsX diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/crtpstack.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/crtpstack.pyc index 3eb90eb5ed7b7874acca4dbdf74ef08c6117a12f..442e4dafa5e3fe75cdaf89fafdabe6efc3fad89e 100644 GIT binary patch delta 506 zcmdm?u|tEM`7<w<!`#~&*$tW4QgqW2b8;p-GO2PU7bR9z7A2-+=1=~}C%L(eX*F(X ziOF@WT{tyMOb%t+ghw`ny%CS>2Oh4;Ivf-6s$iQez}bXH#eL4Jcx729vvJ?XsX}tH zK2HfwS&7Xbc+N25ls<}6Mq)Cvz+s%Sl9NRQkKmM*n5-&<+hobf7Q&P9=#>yr000ZT Bv=smV delta 506 zcmdm?u|tEM`7<xqw&+tE*$tUElZz6oD${Z@Qzu^(R%I_vF3Kz@DW3e1PjYh`(`ww( z5|is#yKrijm>kNs36E?Ddm|p%4?J9xbvP#CRlzn{fU^mYiu;^b@yfDJX5+q%Q-$PY zeV!7WvJ#s=@SI`9DSZ^DjKpMSfx|duB`1pr9>FOqF<Dgzx5<)|ErciI(JLXM006Mj B#Ml4; diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/debugdriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/debugdriver.pyc index f28249048fede5906ec54557b98d959df95754e6..6b2576f59196bc4b770a3d5df22a1ff1427fd798 100644 GIT binary patch delta 1103 zcmca~lkw6`Mt0`Uyj%`*Z*OF8Wn)XxO-szlnS9Y&l`FX@v8u8tF(os9@<FyGIAj)T z$xq(NUV%eaF-v-LBgZEpJkp1ylbCTxA7qoBTq<9JN7hmy9jC1P<}V7xtT?5mH*Z&K zXT&W%xldyy9@%!yr#NI6YE8i*0}72+?ITRMr6<qSn~qy{bA!G%p0L{d+lU{Re?eA9 zS>)l;4U(3y`HL$!K+>sp<~R)Be9?IpE}g(A+`QZMIzD?Jd4Ax)<7cH{MtlKQ99oV? zvsKuA7Ch3K(bBja4)pTmD>3_VYo7c#HVe1x=DBgd@j3fNVig|Eo06RIxyv=B43B2+ g)OviueJeu<x7oPz8Ylrg&GNvd@gST0<i?yp01n!q{Qv*} delta 1103 zcmca~lkw6`Mt0`Uyj<I&Pi<sxW#ddPO023(%gIcgywOONy*Rljv!JAS@<FyGIAj)T z$xq(NUV%eaF-v-LBgZEpJkp1ylbCTxA7qoBTq<9JN7hmy9jC1P<}V7xtT?5mH*Z&K zXT&W%xldyy9@%!yr#NI6YE8i*0}72+?ITRMr6<qSn~qy{bA!G%p0L{d+lU{Re?eA9 zS>)l;4U(3y`HL$!K+>sp<~R)Be9?IpE}g(A+`QZMIzD?Jd4Ax)<7cH{MtlKQ99oV? zvsKuA7Ch3K(bBja4)pTmD>3_VYo7c#HVe1x=DBgd@j3fNVig|Eo06RIxyv=B43B2+ g)OviueJeu<x7oPz8Ylrg&GNvd@gST0<i?yp0AxC<AOHXW diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/exceptions.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/exceptions.pyc index 3eafb262e3d3ac3a49949b7b8635706859b222b8..60f4731de97ab8939d73b92c20b3cf87f32cdbfe 100644 GIT binary patch delta 102 zcmZ3>v6h3K`7<w<!`#~&*}0k6QgqW2b8;q2GpTYV7bR9z7A2-+=1;a`mYST%v;wDW MGfo-F$^0yG0Ft~QcK`qY delta 102 zcmZ3>v6h3K`7<xqw&+tE*}0iGlZz6oD${Z@Qz!E?tFjj-7iAWd6i>EemYST%v;wDW MGfo-F$^0yG0Oe&Nv;Y7A diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/radiodriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/radiodriver.pyc index 5c813e26bef192cc8be323764abc89307a9d2694..ba8b4dd57c47ce72b0371ab0982658814c939458 100644 GIT binary patch delta 757 zcmdm+us4C7`7<w<!`#~&*(F)nQgqW2b8;pp3aWA?7bR9z7A2-+=1*4CkltLta*z#& zw4jLe=0<KsCfw4KKPa$l{>Gchh)2nK{>gY`CkY(GBfCQIGY(mx(<i?c`iNb2v!I9; zGj=JkpS#5m;*xHZUWi-cWCvN6$z?KCcvVcnE6XxjL#~~G3TAmiD(=Z2!eIs|&ORs{ z#1|oq%C$H&H%iM-zN9=2hb$<y>`>9dl^j4ZQozD8*-U*Kb^|smYACW|mzoT8_T)*r WI5dLeY=)i;E>AT|D@^7zFaZGnN&$5M delta 757 zcmdm+us4C7`7<xqw&+tE*(F&xlZz6oD${Z@QztJJQe`hrF3Kz@DW0sTA-%bP<scgl zX+aU`&5hiOOt_^de^6lA{Eau05s#Af{FCv>P7*kVM|OqaXB@IXr%!$@^bx!4W<e1x zX6#a6KX;2C#3kJ*y%4v?$quqClgnhP@T!=CSC(b6hFm)V70mL4RNRw4gu@I_oPAI@ zh%Z7Im1}WmZj_dvd`Wp44p~rY*`cC^D>;B-q=1EGvYGle>;`OB)KFx_E;SkG?8%dK WacBg`*$h1yT%Kx_R+!9bU;+R#<q?Pg diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/serialdriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/serialdriver.pyc index cf7f19bdc9799ac60bf5936db90efd5de8f4a75e..a750b4443eac55cb030929271f9cd05899348aec 100644 GIT binary patch delta 193 zcmX@jcbbo#`7<w<!`#~&*_oKwQgqW2b8;qMWLD)$E=sJbEJ{qt%%5z)CcQb5DW4Iy e^kfN^JUp`3STgX)_Oa&TlwFBaMtZU)yAlBM@j@X0 delta 193 zcmX@jcbbo#`7<xqw&+tE*_oI)lZz6oD${Z@QztXBsj?R*7iAWd6i+r_linQ3l+TD; eda?vd9v<0iEE#xY`&e^v%C5vIBRyG@T?qhBw?FIv diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/udpdriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/udpdriver.pyc index cb845b82eba07b47050b5b3820bc2441ef2e033a..d1bd738f1d44c57b3967c315484bead65cc82ee4 100644 GIT binary patch delta 315 zcmaDL{Xm+X`7<w<!`#~&+5MQ<QgqW2b8;qs<Wl8IE=sJbEJ{qt%%8lFMPl<Jrc;dA zr8h5RQNX8@k3AEIPLRQqk8n)DZZ24MA?Hjyvh7@ncw|kvGw{g1;;z9dD>-=!&sLnW K5|g*_Y5@QrrgSL) delta 315 zcmaDL{Xm+X`7<xqw&+tE+5MO}lZz6oD${Z@Qztucsj?R*7iAWd6i;5rBC&Z9(<w&m z(wi5uDB#n{$DWBpC&=K*M>r;6Hy13skaH#;*><i(JhG<T8F*x0ao6CKm7KhVXDd!w JiOJh|wE(>EaeM#( diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/usbdriver.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/crtp/usbdriver.pyc index 0706d7d037264bc184b7d997125cf8538a1288fe..ce85a2d9158d09302e4287d02ca52494a49aea28 100644 GIT binary patch delta 496 zcmeCO>at>I{>;neF!%OG_Fv3wDY|KiIXROJxK+85ixR6UixN{Z^CuUGNNo0FnaYAw zT5_`?=Ql<?(xu$9aZ5`~j^*vet$DHq-)`Kpn;rRm@EE=MmcVJ;(vp)u3r)gp_T<aL y88~HE;*^otoF=*px1|!3bH%sg(Of9O#e_q8gH!_!8Bi3}O7q~hRd(`i8GQg4IH@-P delta 496 zcmeCO>at>I{>;m@E&9|(_Fv4L$wi4(m1#MdsgoT=RN0G@i!uvJiYFI{NNo0FnaYAw zT5_`?=Ql<?(xu$9aZ5`~j^*vet$DHq-)`Kpn;rRm@EE=MmcVJ;(vp)u3r)gp_T<aL y88~HE;*^otoF=*px1|!3bH%sg(Of9O#e_q8gH!_!8Bi3}O7q~hRd(`i8GQh9m$8Zf diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/__init__.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/__init__.pyc index 55c08d1fb913181c63048089e35802f5bfab0ad3..3a1be3d44723ddc6e2148aa5d17d34b9b6948f6e 100644 GIT binary patch delta 39 vcmeyz_>YmD`7<w<!`#~w*(b53=%yv+<V;+o%9UJ{SXEh+n39=4@tgqwDZ&p_ delta 39 vcmeyz_>YmD`7<xqw&+t6*(Y%(7bR9zrsZU&PMojGUYuN%Sx{0u@tgqwHs253 diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/cfusb.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/cfusb.pyc index a9e4663144f91afb1d934d409fa194847e80b9b9..8c8e137aa5f0c8add477e9fb323ae6583c6f6e8d 100644 GIT binary patch delta 378 zcmaE*`%0Ic`7<w<!`#~&+3z#6rRb(5=HyI%&#cOoT$ET<S(KQPnLjy^TVk^@%R)TT zlNC9x;?_Lbne!JO*)Fa{IA!1Al#$pxhligDkMs||<BYhaC-Vp{#VISk`LAFMZq4GG VmkLYZmX_GeCF+Amdh%j1cK{(3h-?4= delta 378 zcmaE*`%0Ic`7<xqw&+tE+3z!RCKn}ERi@=+rcU0-r^;TOT$EW*Qam}4TVk^@%R)TT zlNC9x;?_Lbne!JO*)Fa{IA!1Al#$pxhligDkMs||<BYhaC-Vp{#VISk`LAFMZq4GG VmkLYZmX_GeCF+Amdh%j1cK}v?ix&U@ diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/crazyradio.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/drivers/crazyradio.pyc index d1609aa6f8b03c5cca508565b9065d939f830156..fc0771ba3cc7a0596f8cb15beeb6f4c3ad6c6b0c 100644 GIT binary patch delta 619 zcmbQ{J<Xe)`7<w<!`#~&*+p2`QgqW2b8;p-NUL%s7bR9z7A2-+=5G#Q;bX)uH93Gq zX7hShIX0ZqvYX|33~}q0oxF(m9Zt<Mn;-I-;MOcNIZfakZq1Wh1&`p7oh5V!x9sNQ z!n(LEmYwV-x*oUY$!=n2@yMo#$KsTg-7GAjfy3g>1(L^cNKGz~RNFjBTAmrF!7`JX h<p1NA-5jJ)fy-=A97`)n;FE4q&c-b*JK0e+6aeXJ&c*-$ delta 619 zcmbQ{J<Xe)`7<xqw&+tE*+p15lZz6oD${Z@Qzt93sInI)7iAWd6mJe-;bX)uH93Gq zX7hShIX0ZqvYX|33~}q0oxF(m9Zt<Mn;-I-;MOcNIZfakZq1Wh1&`p7oh5V!x9sNQ z!n(LEmYwV-x*oUY$!=n2@yMo#$KsTg-7GAjfy3g>1(L^cNKGz~RNFjBTAmrF!7`JX h<p1NA-5jJ)fy-=A97`)n;FE4q&c-b*JK0e+6aaF*(&YdE diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/utils/__init__.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/utils/__init__.pyc index 9cb912d8126dc08dbd5fbdcd9e63c645575bff6f..9a836124b1252f7c20851b151691a737f68a4bde 100644 GIT binary patch delta 39 vcmey!_>qyF`7<w<!`#~w+1uGtbkh=Zawbk!<w`C}tg0+ZOv%ijcvuerBnuB0 delta 39 vcmey!_>qyF`7<xqw&+t6+1ojjixR6U({eIXCr(jiFHSDXEGQ|ScvuerF-Z@g diff --git a/pps_ws/src/d_fall_pps/crazyradio/cflib/utils/callbacks.pyc b/pps_ws/src/d_fall_pps/crazyradio/cflib/utils/callbacks.pyc index 7a74eeba740be7823fb8adb7248b5c4ead6e1897..74e35185cd8928cfd392adc026a7e4c35c1703a1 100644 GIT binary patch delta 188 zcmX@fdy<!(`7<w<!`#~&*=I1arRb(5=HyJi$E3=YT$ET<S(KQPnLn9}S!(h-#^*R? fPvDf1nykoj9*?X&YXJ_~C#=;tWI(Q2$0iK`>TN>` delta 188 zcmX@fdy<!(`7<xqw&+tE*=I0vCKn}ERi@=+rcS=iq{?2LT$EW*QaqW9S!(h-#^*R? fPvDf1nykoj9*?X&YXJ_~C#=;tWI(Q2$0iK`@Igh9 diff --git a/pps_ws/src/d_fall_pps/launch/ppsLaunch.launch b/pps_ws/src/d_fall_pps/launch/ppsLaunch.launch index 8075f512..b2bb001d 100644 --- a/pps_ws/src/d_fall_pps/launch/ppsLaunch.launch +++ b/pps_ws/src/d_fall_pps/launch/ppsLaunch.launch @@ -1,7 +1,6 @@ <launch> - <!-- Might be needed when our CrazyRadio works. There is no CrazyRadio.launch file yet! - <include file="$(find d_fall_pps)/launch/CrazyRadio.launch" /> - --> + + <node pkg="d_fall_pps" name="CrazyRadio" output="screen" type="CrazyRadio.py"/> <node pkg="d_fall_pps" name="ViconDataPublisher" output="screen" type="ViconDataPublisher"> </node> diff --git a/pps_ws/src/d_fall_pps/src/PPSClient.cpp b/pps_ws/src/d_fall_pps/src/PPSClient.cpp index c95e2149..481eeb7b 100644 --- a/pps_ws/src/d_fall_pps/src/PPSClient.cpp +++ b/pps_ws/src/d_fall_pps/src/PPSClient.cpp @@ -26,6 +26,9 @@ #include "ros/ros.h" #include "d_fall_pps/ViconData.h" #include "d_fall_pps/RateController.h" +#include "d_fall_pps/AngleCommand.h" +#include "d_fall_pps/RateCommand.h" +#include "d_fall_pps/MotorCommand.h" using namespace d_fall_pps; @@ -36,6 +39,14 @@ std::string cflie; //global sevices ros::ServiceClient rateClient; +ros::Publisher AngleCommandPublisher; +ros::Publisher RateCommandPublisher; +ros::Publisher MotorCommandPublisher; + +//uncommenting the next line causes FATAL Error at runtime: "You must call ros::init() before creating the first NodeHandle" +//ros::NodeHandle nodeHandle; + + //extract data from "data" and publish/add to service for controller //not void: sould give back controlldata void ppsClientToController(ViconData data){ @@ -138,7 +149,7 @@ void CControlMgr::SendToCrazyflie(ControllerOutput package) { if(m_isStopped) { - m_packageToSend.motorCmd1=0; + c.motorCmd1=0; m_packageToSend.motorCmd2=0; m_packageToSend.motorCmd3=0; m_packageToSend.motorCmd4=0; @@ -168,6 +179,48 @@ void CControlMgr::SendToCrazyflie(ControllerOutput package) */ //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + +//callback method to publish d_fall_pps::AngleCommand +void callbackAngleCommand(const ros::TimerEvent&) +{ + d_fall_pps::AngleCommand AngleCommandPkg; + AngleCommandPkg.rollAngle = 1; + AngleCommandPkg.pitchAngle = 1; + AngleCommandPkg.yawAngle = 1; + + AngleCommandPublisher.publish(AngleCommandPkg); + ROS_INFO_STREAM("AngleCommandTimer pubslishes: " << AngleCommandPkg.rollAngle << ", " << AngleCommandPkg.pitchAngle << ", " << AngleCommandPkg.yawAngle); +} + +//callback method to publish d_fall_pps::RateCommand +void callbackRateCommand(const ros::TimerEvent&) +{ + d_fall_pps::RateCommand RateCommandPkg; + RateCommandPkg.rollRate = 2; + RateCommandPkg.pitchRate = 2; + RateCommandPkg.yawRate = 2; + + RateCommandPublisher.publish(RateCommandPkg); + ROS_INFO_STREAM("RateCommandTimer pubslishes: " << RateCommandPkg.rollRate << ", " << RateCommandPkg.pitchRate << ", " << RateCommandPkg.yawRate); +} + +//callback method to publish d_fall_pps::MotorCommand +void callbackMotorCommand(const ros::TimerEvent&) +{ + d_fall_pps::MotorCommand MotorCommandPkg; + MotorCommandPkg.cmd1 = 3; + MotorCommandPkg.cmd2 = 3; + MotorCommandPkg.cmd3 = 3; + MotorCommandPkg.cmd4 = 3; + + MotorCommandPublisher.publish(MotorCommandPkg); + ROS_INFO_STREAM("MotorCommandTimer pubslishes: " << MotorCommandPkg.cmd1 << ", " << MotorCommandPkg.cmd2 << ", " << MotorCommandPkg.cmd3 << ", " << MotorCommandPkg.cmd4); +} + + + + int main(int argc, char* argv[]){ ROS_INFO_STREAM("PPSClient started"); @@ -183,26 +236,26 @@ int main(int argc, char* argv[]){ ROS_ERROR("Failed to get CrazyFlieName"); } - ROS_INFO_STREAM("about to subscribe"); ros::Subscriber ViconSubscriber = nodeHandle.subscribe("/ViconDataPublisher/ViconData", 1, viconCallback); - ROS_INFO_STREAM("subscribed"); + ROS_INFO_STREAM("successfully subscribed to ViconData"); + + //ros::Timers to call method that publishes controller outputs for crayzradio node /* - //publish package_for_crazyradio>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - //m_pNodeHandle=nodeHandle; - //m_pCallbackQueueControlMgr=new ros::CallbackQueue(); - //m_pNodeHandle->setCallbackQueue(m_pCallbackQueueControlMgr); - - - ROS_INFO_STREAM("creating publishers for package_for_crazyradio"); - ros::Pubslisher AngleCommandsPublisher = nodeHandle.advertise <d_fall_pps::AngleCommandsPackage>("AngleCommands", 10)); - ros::Pubslisher AngleCommandsPublisher = nodeHandle.advertise <d_fall_pps::RateCommandsPackage>("RateCommands", 10)); - ros::Pubslisher AngleCommandsPublisher = nodeHandle.advertise <d_fall_pps::MotorCommandsPackage>("MotorCommands", 10)); - - //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + Timers let you schedule a callback to happen at a specific rate through the same callback queue mechanism used by subscription, service, etc. callbacks. + Timers are not a realtime thread/kernel replacement, rather they are useful for things that do not have hard realtime requirements. + Reference: http://wiki.ros.org/roscpp/Overview/Timers */ - - + ROS_INFO("creating publishers for package_for_crazyradio"); + ros::Timer AngleCommandTimer = nodeHandle.createTimer(ros::Duration(0.1), callbackAngleCommand); + ros::Timer RateCommandTimer = nodeHandle.createTimer(ros::Duration(0.1), callbackRateCommand); + ros::Timer MotorCommandTimer = nodeHandle.createTimer(ros::Duration(0.1), callbackMotorCommand); + + + //ros::Publishers to advertise on the three command type topics + AngleCommandPublisher = nodeHandle.advertise <d_fall_pps::AngleCommand>("topicAngleCommand", 1000); + RateCommandPublisher = nodeHandle.advertise<d_fall_pps::RateCommand>("topicRateCommand", 1000); + MotorCommandPublisher = nodeHandle.advertise <d_fall_pps::MotorCommand>("topicMotorCommand", 1000); //service: now only one available: to add several services depending on controller @@ -210,9 +263,6 @@ int main(int argc, char* argv[]){ - - - ros::spin(); return 0; } diff --git a/pps_ws/src/d_fall_pps/src/SafeControllerService.cpp b/pps_ws/src/d_fall_pps/src/SafeControllerService.cpp index 122fec3b..e56560cf 100644 --- a/pps_ws/src/d_fall_pps/src/SafeControllerService.cpp +++ b/pps_ws/src/d_fall_pps/src/SafeControllerService.cpp @@ -55,7 +55,7 @@ int main(int argc, char* argv[]) { ros::NodeHandle nodeHandle("~"); ros::ServiceServer service = nodeHandle.advertiseService("RateController", calculateControlOutput); - ROS_INFO("SafeControllerService ready"); + ROS_INFO("SafeControllerService ready to send"); ros::spin(); return 0; -- GitLab