![Photo](http://forums.netduino.com/uploads/av-1172.jpg?_r=0)
Quad.Net Quadrocopter for .NETMF
#1
Posted 16 January 2011 - 11:49 PM
- NeonMika / Markus VV. likes this
#2
Posted 19 January 2011 - 06:46 PM
#3
Posted 19 January 2011 - 10:46 PM
#4
Posted 19 January 2011 - 10:58 PM
![:)](http://forums.netduino.com/public/style_emoticons/default/smile.png)
![:)](http://forums.netduino.com/public/style_emoticons/default/smile.png)
#5
Posted 19 January 2011 - 11:40 PM
#7
Posted 22 January 2011 - 09:14 PM
#8
Posted 23 January 2011 - 03:58 AM
Edited by magoocas, 23 January 2011 - 04:09 AM.
- NeonMika / Markus VV. likes this
#9
Posted 23 January 2011 - 05:18 PM
#10
Posted 23 January 2011 - 05:44 PM
#11
Posted 23 January 2011 - 06:25 PM
![;)](http://forums.netduino.com/public/style_emoticons/default/wink.png)
- NeonMika / Markus VV. likes this
#12
Posted 23 January 2011 - 07:45 PM
#13
Posted 23 January 2011 - 08:14 PM
Magoocas,
I am impressed, i think we found our starting point and might want to involve Luke in what we are trying to do. if you've looked at source control you can see the implementational way in which im approaching.
We have
the Quad.Net solution with:
Framework (contains interfaces like IPWM)
Framwork.Implementations.SecretLabs (implementations like SecretLabs.NETMF.Hardware.PWM)
This allows for us to swap out framework specific implementations, ie using fez's custom framework
Hardware (contains generic interfaces for things like motors, gyros and escs)
Hardware.Implementations (implemntations of hardware like HobbyKings ss2530 ESC)
Hardware.Implementations.Secretlabs (implementations for things specific to netduino board, things like Pins)
Quad.Net.FlightController (main entry point but in the form of interfaces, requires an implemntation, like fez or netduino)
Quad.Net.FlightController.Netduino (specific implementation of netduino board and its settings)
Example of Netduino Implemntation with a speedcontroller
using System.Threading; using Quad.Net.ElectricSpeedController; using Quad.Net.Framework.Implementations.SecretLabs.PulseWidthModulation; using Quad.Net.Framework.PulseWidthModulation; using Quad.Net.Hardware.ElectricSpeedController; using Quad.Net.Hardware.Implementations.ElectricSpeedController.Implementations; using Quad.Net.Hardware.Implementations.SecretLabs.Pin; using Quad.Net.Hardware.Pin; using SecretLabs.NETMF.Hardware.Netduino; namespace Quad.Net.FlightController.Implementations.Netduino { public class Program { public static void Main() { ICpuPin pin = new CpuPin(Pins.GPIO_PIN_D9); ISpeedControllerSettings electricSpeedControllerSettings = new HobbyKingSs2530Settings(pin); IPWM pwm = new SecretLabsPWM(pin); Controller controller = new Controller(electricSpeedControllerSettings,pwm); for (int i = 0; i <= 100; i++) { controller.ElectricSpeedController.SetThrottle(i); Thread.Sleep(50); } } } }What i have tried to accomplish with this is a framework where any contributor can swap out hardware, gyros or microcontroller that supports netmf and specific implementations of framework, fez vs secretlabs
What i'm hoping will happen is a user can throw a new esc in, implement an ESC interface specific to that esc, and fly 5 minutes later, or a board or a gyro or eventually other sensors, if we keep this generic enough we could add features and hardware very quickly and segregate the project in a more agile framework than what is being done in other projects as well as allow for various combinations of hardware software with little or no effort. Everyone else code that i have veiwed ha been scary dependent on hardware or assumptions and thus why the project falls down
#14
Posted 23 January 2011 - 11:13 PM
Attached Files
#15
Posted 24 January 2011 - 12:41 AM
If i get hardware and some skills with soddering i could be up and running right now, I cleaned up alot of his code as well
Magoocas, its in source control
Here's an entry point to give u an idea
using Quad.Net.Commons.Configuration; using Quad.Net.ElectricSpeedController; using Quad.Net.Framework.Implementations.SecretLabs.PulseWidthModulation; using Quad.Net.Framework.PulseWidthModulation; using Quad.Net.Hardware.ElectricSpeedController; using Quad.Net.Hardware.Gyro; using Quad.Net.Hardware.Implementations.ElectricSpeedController.Implementations; using Quad.Net.Hardware.Implementations.Gyro; using Quad.Net.Hardware.Implementations.Radio; using Quad.Net.Hardware.Implementations.SecretLabs.Pin; using Quad.Net.Hardware.Pin; using Quad.Net.Hardware.Radio; using SecretLabs.NETMF.Hardware.Netduino; namespace Quad.Net.FlightController.Implementations.Netduino { public class Program { public static void Main() { IConfiguration settings = GetStaticSettings(); //Assumes one type of speed controller on quad ISpeedControllerSettings speedControllerSettings = new HobbyKingSs2530Settings(); ICpuPin pinFrontESC = new CpuPin(Pins.GPIO_PIN_D9); IPWM pwmFront = new SecretLabsPWM(pinFrontESC); SpeedController electricSpeedControllerFront = new SpeedController(speedControllerSettings, pwmFront); ICpuPin pinRearESC = new CpuPin(Pins.GPIO_PIN_D8); IPWM pwmRear = new SecretLabsPWM(pinRearESC); SpeedController electricSpeedControllerRear = new SpeedController(speedControllerSettings, pwmRear); ICpuPin pinRightESC = new CpuPin(Pins.GPIO_PIN_D7); IPWM pwmRight = new SecretLabsPWM(pinRightESC); SpeedController electricSpeedControllerRight = new SpeedController(speedControllerSettings, pwmRight); ICpuPin pinLeftESC = new CpuPin(Pins.GPIO_PIN_D6); IPWM pwmLeft = new SecretLabsPWM(pinLeftESC); SpeedController electricSpeedControllerLeft = new SpeedController(speedControllerSettings, pwmLeft); Motors motors= new Motors(electricSpeedControllerFront,electricSpeedControllerRear,electricSpeedControllerRight,electricSpeedControllerLeft); AxesController axesController = new AxesController(settings); IGyro gyro = new DefaultGyro(); IRadio radio = new DefaultRadio(); ControllerLoopSettings loopSettings = new ControllerLoopSettings(settings); Controller controller = new Controller(motors, axesController, gyro, radio, loopSettings); } private static IConfiguration GetStaticSettings() { InMemoryConfiguration config = new InMemoryConfiguration(); config["PitchDerivativeGain"] = "-.5"; config["PitchItegralGain"] = "0"; config["PitchProportionalGain"] = "1.2"; config["RollDerivativeGain"] = "-.5"; config["RollItegralGain"] = "0"; config["RollProportionalGain"] = "1.2"; config["YawDerivativeGain"] = "0"; config["YawItegralGain"] = "0"; config["YawProportionalGain"] = "3"; config["RadioLoopFrequency"] = "25"; config["SensorLoopFrequency"] = "300"; config["MotorLoopFrequency"] = "300"; config["LoopUnit"] = "2"; return config; } } }
#16
Posted 24 January 2011 - 01:01 AM
#17
Posted 24 January 2011 - 01:08 AM
#18
Posted 24 January 2011 - 02:05 AM
#19
Posted 24 January 2011 - 02:14 AM
#20
Posted 24 January 2011 - 03:04 AM
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users