Netduino home hardware projects downloads community

Jump to content


The Netduino forums have been replaced by new forums at community.wildernesslabs.co. This site has been preserved for archival purposes only and the ability to make new accounts or posts has been turned off.

Brandon G's Content

There have been 92 items by Brandon G (Search limited from 24-May 23)


By content type

See this member's


Sort by                Order  

#7600 NetDuino Quadrocopter

Posted by Brandon G on 13 January 2011 - 08:52 PM in Netduino 2 (and Netduino 1)

also i should mention that i did get this build list from warthox, http://warthox.bplaced.net/?page_id=76 , whom has some of the craziest quad and tri copter videos i have seen yet on the web, which is what started me wanting to do this so badly



#7597 NetDuino Quadrocopter

Posted by Brandon G on 13 January 2011 - 08:43 PM in Netduino 2 (and Netduino 1)

Thanks for your reply Chris, That's the exact architecture i was thinking. A state machine that instantiated all the main objects at startup and then using a messaging pipeline with handlers for interacting with the state machine cqrs style, will make for easily debuggable code as well as rapid development and future feature building, ie gps, accelerometer, sonar, magnetometer, video, wifi, cellular communication, autonomous functions, load carrying etc. The initial setup is as follows motor: emax fc2822 1200kv esc: hobbyking ss 25/30 props: epp 8×4.5 cw/ccw sbec: hk turnigy 5A frame: quadframe.com battery: turnigy 3s3000 20C controller: kkmulticontroller 5.5 once up and running i will start with the netduino board and add: 3 HobbyCity HK401B gyros and try to get those to work with the netduino Will be ordering components soon and will keep you all appraised of my progress.



#7665 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 05:43 PM in Netduino 2 (and Netduino 1)

gryo disassembly http://www.kkmultico...embly&Itemid=65 they are just using what they need



#7784 NetDuino Quadrocopter

Posted by Brandon G on 16 January 2011 - 11:51 PM in Netduino 2 (and Netduino 1)

http://forums.netdui...pter-for-netmf/



#9121 NetDuino Quadrocopter

Posted by Brandon G on 07 February 2011 - 04:34 PM in Netduino 2 (and Netduino 1)

Hi dan, we've made some great progress in the last week. Our gc is running once every 10 seconds and is a very fast sweep, thats with telemetry logging via my custom serialization class. We will be moving source to eith GITHub or codeplex in the next few days. I have no personal experience with the shield given that we are starting simple only using 3 degrees to get off the ground, we want to be stable with only a gyro, then we can get fancy later. our main thread can be found here http://forums.netdui...pter-for-netmf/ we are also going to start posting on rcgroups once we finally get some hardware in and show our first stable flight via video



#9146 NetDuino Quadrocopter

Posted by Brandon G on 08 February 2011 - 05:35 AM in Netduino 2 (and Netduino 1)

kind of a strange idea to combine hydrogen and a quad, whats the lift lb/vol? wonder if you could add hydrogen to the structure without compromising aerodynamics and not blowing up (i would suggest inert). We've taken a pretty good look at all the open source offerings, they are all good but all quite specialized and dont read well. long term goal is to run all on the same mcu but as the hardware and framework stand now, impractical. We are running gyro and motors on netduino, radio on another mcu. The razor is great but defeats the purpose of what we're trying to do, we want to make the predictions and math and understand it, not have it written for us. On the other thread we have another interested user that has written a netmf handler for razor. From here on out i would suggest you write to other thread



#7654 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:38 PM in Netduino 2 (and Netduino 1)

dones, thanks for the PID link. great point starting with just one plane might be easier as a proof of concept, I was thinking of doing some simple tests with the gryos before i considered flying at all. a simple 2 prop setup might be a good way to start. Jan I will look at them more deeply, my understanding was they using one gyro for each roll pitch yaw and that they were being sent back to the controller for pid changes, they had basically taken those things apart and done a straight sodder to their custom board, they were chosen because they were cheap and they had the best success with them. I have read sparkfuns gyro acceleromter guide and man is it thorough, my hope was to go with what was proven out there and follow their same steps. Sparkfun has some great ones with 3 axis in one that would be ideal for this application but are more expensive and a more of an unknown but if your above post is correct then may be the way i need to go



#7614 NetDuino Quadrocopter

Posted by Brandon G on 13 January 2011 - 10:55 PM in Netduino 2 (and Netduino 1)

thanks chris, i'll look at swapping them out. Yea im trying to start with the cheap basics and move my way up from there as i get more familiar (crash less) hopefully i can get it off the ground. The gyros/esc's ive mentioned, do you think i'll have any issues communicating with them on netduino



#7633 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:23 AM in Netduino 2 (and Netduino 1)

corey, i will prolly try and start a little heavier than that and optimize as i go and if the quad requires it, not being silly mind you but will try to make it elegant to start and get tighter in high traffic areas.



#7631 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:02 AM in Netduino 2 (and Netduino 1)

I agree GC is always going to be an issue and that i am not running on a xeon processor, but if i can keep things simple and be cognizant of the types i use i think i can do this pretty simply without gc killing me. Have many people linked netduino's together to get more punch or isolate processes, there is a possibility i could chain them and use individual boards for individual operations with incredibly simple operations back to a duino that is the master controller. This is partially why i have decided upon the kk code, seriously, take a look, its scary simple and low throughput. if i get more complex i could distribute the processing a bit. Mark, Chris, in no way did i mean to question your abilities as programmers, my college drag and drop comments were against the attacks of the .net framework as a whole, not the netmf running on lil processors. I've done some walkthroughs on code on some of the netmf sites to get an idea of the hardware integration side and the code makes me shudder. Take my most humblest of apologies if i offended, was not my intent and i plan to be on this site for quite some time and learn from everyones experiences in order to get better on the hardware side. thanks again for all your input and i will post back as i go.



#7635 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:34 AM in Netduino 2 (and Netduino 1)

and i always love the moon reference, its bloody amazing they did it at all. its funny but a quad is harder and requires more calcs



#7632 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:18 AM in Netduino 2 (and Netduino 1)

Chris W, thanks, as i said i hopefully wont have to break the microsecond barrier in any way from the outset, if so i will prolly throw my quad against the wall in frustration, as for the release i understand and will try not to be a burden i know you guys are busy and need o focus on your core business



#7581 NetDuino Quadrocopter

Posted by Brandon G on 13 January 2011 - 05:21 PM in Netduino 2 (and Netduino 1)

I didnt mean to start any kind of war here either but i must object to the radical inefficiencies that you are both speaking of, there's a difference between 20 million operations and processing 20 million operational messages a second on one thread updating a domain with 100 millions objects in memory. Granted GC is an issue, i am not claiming i am going to have 400 passengers on my quad but conversely i will guarantee any code i write will not fly to 90' until it runs out of batteries. Perhaps this is the disconnect between hardware programmers that are hardware first software second. I am going to admit i am a noob when it comes to the hardware side but i cant imagine it this inefficient. no program i have ever made is content with a 20 second lag because of gc, thats drag and drop college kids. These are teeny objects and GC should have no impact if you are cognizant day one (which i always am). I have worked in .NET since the beta, I have run billions of dollars through .NET at millisecond efficiency(i agree on the sleep statement btw, .NET timer classes are awful), i have beat other programs to the punch($) by being more efficient and agile, these include ones written in c and c++, by programmers that are not as aware of speed given their bias of their language. Back to quad, for me this is a fun project to do something neat and cool to get my mind off the constant shite of work, hopefully i can find a community that wants to embark on it as i do with my limited hardware skill or i will try and do so on my own, the former favourable, i would hope this community would want to do more with its framework than what i have seen in the showcases, .NET is a great language and has huge potential in this space if WE can make it better, managed code has a bad rap because of bad programmers the easy barrier to entry, those at the forefront can make it a feasible and quick alternative for practical applications if we work around/with the inherent disadvantages / advantages. In closing i will say that for me this netduino project is an opportunity to step out of just programming and see material physical results of my effort, which is a huge, I have always wanted to bridge the gap between the real world and the virtual and thats what i love most about this project. anyway brandon



#7634 NetDuino Quadrocopter

Posted by Brandon G on 14 January 2011 - 04:30 AM in Netduino 2 (and Netduino 1)

n regards to the deterministic comments, gc is a mofo and can kill you at the worst times. what i think will compensate is the PID algos and making them smartand aware of the state of system. If there were on thing i wish would be built into .NET would be more ability to talk to GC and get stats and state of it. I have messed with GC a few times with very little success. It would be great to know where it is at in operation, so i could query it and understand that i should in this case, try and level out my quad or purge my queue because i know it to be too late etc



#7778 NetDuino Quadrocopter

Posted by Brandon G on 16 January 2011 - 09:42 PM in Netduino 2 (and Netduino 1)

Have started some source control on this, just taking some initial stabs at getting a nice generic framework put together for project. Separating hardware / frameworks from implementations as a trial of framework i put in chris setos old esc driver code with some modifications, havent tested it against any hardware nor put in test cases but wanted to assert the structure first then will deal with implementational details later starting pooint of code is Quad.Net.FlightController.Implementations.Netduino PM me for address, it should be a readonly right now, but as i get things solidified i would like to open it up to contributions, thoughts/criticisms always welcome



#7779 NetDuino Quadrocopter

Posted by Brandon G on 16 January 2011 - 09:44 PM in Netduino 2 (and Netduino 1)

Good call. BTW, the quantum is a constant and can be changed in code. We've never tried increasing it but it could be possible to increase it to, say, a few weeks/months. If everything is executing on a single thread and one is not using events or threading, this could be a valuable mod.

Chris



Chris where do i change this setting?



#7773 Netduino ESC driver

Posted by Brandon G on 16 January 2011 - 07:24 PM in Netduino 2 (and Netduino 1)

thanks chris, do have a link to more upto date code, i assume frame width would be a config point



#7750 Netduino ESC driver

Posted by Brandon G on 16 January 2011 - 07:25 AM in Netduino 2 (and Netduino 1)

Chris, as i look through how to do this best you are turning out to be a great resource, thanks it really appreciated. the above code, just trying to get my head around the concepts and expose my newbie skill sets here. the SetPulse method of the pwm, what is the 20,000, trying to find docs on it but dont quite get it I will attach my changes/ assumptions afterwards



#8783 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 01 February 2011 - 01:20 AM in General Discussion

So i started to get into it and I have come across some road blocks and cant seem to find a way around it. Reflection being limited i cant even call CreateInstance() or the other method i had up my sleeve FormatterServices.GetUninitializedObject() or Activator.CreateInstance, is there anyway to initialize an object from a string at all in netmf, otherwise i think we're shit out of luck short of some ugly case statements



#8811 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 01 February 2011 - 04:34 PM in General Discussion

i ended up finding that shortly thereafter, thanks Corey. I've stubbed out the whole thing just going for some optimization now. My current application for it is the quadrocopter so has to be heavily optimized and optimistic, a more generic library can be made off it after, will post when done



#7609 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 13 January 2011 - 10:28 PM in General Discussion

building a lightweight serializer wouldnt be too hard, I have some old source that could work, its optimistic and only handles simple objects. I will more than likely be re-visiting it soon in my quad project. What are you wanting to serialize (what types of objects)?



#8860 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 02 February 2011 - 05:18 AM in General Discussion

Heres a very prelim write of this with some simple implementations as you can see i am putting the responsibility on the ISerializable object for now, not a full object graph, as i extend this i will update, right now its pretty ugly and specific


EDIT: didnt like what i posted earlier, here`s a revamp
using Quad.Net.Commons.Serialization;

namespace Quad.Net.Commons.Logging
{
    public interface ILogger
    {
        void Flush();
        void Write(ISerializable obj);
    }
}

using System.IO;
using Quad.Net.Commons.Serialization;

namespace Quad.Net.Commons.Logging
{
    public class PersistenceWriter : ILogger
    {
        private readonly IBinaryFormatter _formatter;
        private readonly string _fileName;
        private readonly FileStream _fileStream;

        public PersistenceWriter(string fileName, IBinaryFormatter formatter)
        {
            _formatter = formatter;
            _fileName = fileName;
            _fileStream = new FileStream(_fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, 512);
        }

        public void Flush()
        {
            _fileStream.Flush();
        }

        
        public void Write(ISerializable obj)
        {
            _formatter.Serialize(_fileStream, obj);

        }
    }
}


using System.IO;
using Quad.Net.Commons.Serialization;

namespace Quad.Net.Commons.Logging
{
    public class PersistanceReader
    {
        private readonly IBinaryFormatter _binaryFormatter;

        public PersistanceReader(IBinaryFormatter binaryFormatter)
        {
            _binaryFormatter = binaryFormatter;
            
        }
        public ISerializable[] GetMessages(string readPath)
        {
            FileStream readFile = new FileStream(readPath, FileMode.Open, FileAccess.Read);
            return _binaryFormatter.Deserialize(readFile);
        }
    }
}

using System;
using System.IO;

namespace Quad.Net.Commons.Serialization
{
    public interface IBinaryFormatter
    {
        void Serialize(Stream stream, Object graph);//not implemented
        ISerializable[] Deserialize(Stream stream);
        void Serialize(Stream stream, ISerializable graph);//optimistic
    }
}


namespace Quad.Net.Commons.Serialization
{
    public interface ISerializable //:  where T : new() in classic C# this is what i would do force a parameterless contructor, cant do thisin netmf
    {
        byte[] Serialize();
        object Deserialize(byte[] buffer);
    }
}

using System;
using System.Collections;
using System.IO;

namespace Quad.Net.Commons.Serialization
{
    public class TelemetryFormatter:IBinaryFormatter
    {
        public void Serialize(Stream stream, object graph)
        {
            throw new NotImplementedException();
        }

        public ISerializable[] Deserialize(Stream stream)
        {
            ISerializable[] items = new ISerializable[stream.Length/44];
            int counter = 0;
            while (stream.Position < stream.Length)
            {
                byte[] buffer = new byte[44];
                stream.Read(buffer, 0, 44);
                ISerializable item  = (ISerializable) typeof(TelemetryData).GetConstructor(new Type[0]).Invoke(new object[0]);
                item.Deserialize(buffer);
                items[counter] = item;
                counter++;
            }
            return items;
        }

        public void Serialize(Stream stream, ISerializable graph)
        {
            byte[] buffer = graph.Serialize();
            stream.Write(buffer, 0, buffer.Length);
        }
    }
}


using System;
using Microsoft.SPOT.Hardware;
using Quad.Net.Avionics;
using Quad.Net.Commons.Serialization;
using Quad.Net.Commons.Utilities;

namespace Quad.Net.FlightController
{
    public class TelemetryData : ISerializable
    {
        private readonly AircraftPrincipalAxes  _gyroAxes;
        private readonly AircraftPrincipalAxes _radioAxes;
        private readonly AircraftPrincipalAxes _pidAxes;
        private long _currentTime;
        private readonly byte[] _buffer;
        public TelemetryData()
        {
            _gyroAxes= new AircraftPrincipalAxes(0,0,0);
            _radioAxes = new AircraftPrincipalAxes(0, 0, 0);
            _pidAxes = new AircraftPrincipalAxes(0, 0, 0);
            _currentTime = DateTime.Now.Ticks;
            _buffer = new byte[44];
        }

        public void Update(AircraftPrincipalAxes gyroAxes, AircraftPrincipalAxes radioAxes, AircraftPrincipalAxes pidAxes, long currentTime)
        {
            _gyroAxes.Update(gyroAxes.Pitch,gyroAxes.Roll,gyroAxes.Yaw);
            _radioAxes.Update(radioAxes.Pitch, radioAxes.Roll, radioAxes.Yaw);
            _pidAxes.Update(pidAxes.Pitch, pidAxes.Roll, pidAxes.Yaw);
        }

        public byte[] Serialize()
        {
            Utility.InsertValueIntoArray(_buffer, 0, 4, (uint)(_currentTime >> 32));
            Utility.InsertValueIntoArray(_buffer, 4, 4, (uint)_currentTime);
            Utility.InsertValueIntoArray(_buffer, 8, 4, (uint)_gyroAxes.Pitch);
            Utility.InsertValueIntoArray(_buffer, 12, 4, (uint)_gyroAxes.Roll);
            Utility.InsertValueIntoArray(_buffer, 16, 4, (uint)_gyroAxes.Yaw);

            Utility.InsertValueIntoArray(_buffer, 20, 4, (uint)_radioAxes.Pitch);
            Utility.InsertValueIntoArray(_buffer, 24, 4, (uint)_radioAxes.Roll);
            Utility.InsertValueIntoArray(_buffer, 28, 4, (uint)_radioAxes.Yaw);

            Utility.InsertValueIntoArray(_buffer, 32, 4, (uint)_pidAxes.Pitch);
            Utility.InsertValueIntoArray(_buffer, 36, 4, (uint)_pidAxes.Roll);
            Utility.InsertValueIntoArray(_buffer, 40, 4, (uint)_pidAxes.Yaw);
            return _buffer;
        }

        public object Deserialize(byte[] buffer)
        {
            _currentTime = BitConverter.ToLong(buffer, 0);
            _gyroAxes.Update(
                Utility.ExtractValueFromArray(buffer, 8, 4),
                Utility.ExtractValueFromArray(buffer, 12, 4),
                Utility.ExtractValueFromArray(buffer, 16, 4)
                );
            _radioAxes.Update(
                Utility.ExtractValueFromArray(buffer, 20, 4),
                Utility.ExtractValueFromArray(buffer, 24, 4),
                Utility.ExtractValueFromArray(buffer, 28, 4)
                );
            _pidAxes.Update(
                Utility.ExtractValueFromArray(buffer, 32, 4),
                Utility.ExtractValueFromArray(buffer, 36, 4),
                Utility.ExtractValueFromArray(buffer, 40, 4)
                );
            return this;
        }

        public override string ToString()
        {
            //csv format
            return _currentTime + "," +
                   _gyroAxes.Pitch + "," +
                   _gyroAxes.Roll + "," +
                   _gyroAxes.Yaw + "," +
                   _radioAxes.Pitch + "," +
                   _radioAxes.Roll + "," +
                   _radioAxes.Yaw + "," +
                   _pidAxes.Pitch + "," +
                   _pidAxes.Roll + "," +
                   _pidAxes.Yaw + ",";
        }
    }
}




#8886 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 02 February 2011 - 04:15 PM in General Discussion

updated above, as i said this a very very specific and optimistic serialization system for my exact purposes, but the idea is sound and could be used in other places, u merely have to implement ISerializable on your class and insert a type into the serialize message in order to dynamically invoke the constructor, i know i am in this instance only serializing one type with this formatter so i have put that statically in, you could easily put in a header to accomplish this such as stx....type...data...etx once you know your type merely parse and dynamically invoke and assume T : new()



#8861 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 02 February 2011 - 05:20 AM in General Discussion

oh and i havent written tests for it yet, once i have and made this a little more generic i will psot as a zip



#7610 Microsoft.SPOT.Reflection.Serialize() / Deserialize() throws System.NotImplem...

Posted by Brandon G on 13 January 2011 - 10:34 PM in General Discussion

Chris are the interfaces there to be implemented? IFormatter etc http://codebetter.co...-serialization/ old but still works




home    hardware    projects    downloads    community    where to buy    contact Copyright © 2016 Wilderness Labs Inc.  |  Legal   |   CC BY-SA
This webpage is licensed under a Creative Commons Attribution-ShareAlike License.