gHowl

gHowl is a set of components which extend Grasshopper's ability to communicate and exchange information with other applications and physical devices.

Load Previous Comments
  • Luis Fraguada

    Two posts by P&A Lab showing Processing connections to Grasshopper via gHowl:

    Swarm Cell

    Swarmy

  • EliseElsacker

    Imagine an architecture that reacts on affective, expressive or cognitive signals via Brain Computer Interface Technology
  • Matas Ubarevicius

    Great work Elise. At the moment I'm writing theory thesis on exactly this kind of interaction ;) That is a ground breaking thing...
  • Luis Fraguada

    Elise, very cool!  Can you let us know a bit more about this?  Was it as simple as 'plug and play' or did you run into issues along the way?  I wonder how this would operate with multiple users, 10, 100, 1000, etc!  How does the architecture negotiate that information?

  • Lauren Campbell

    I've downloaded Ghowl several times along with the open office and the other thing it says you must have and still can not figure out how to get the components in GH

    Any help would be fantastic

  • Luis Fraguada

    Hello Lauren,

    Open Office is not necessary anymore.  Everything you need should be in the gHowl download.  Check out the 'Dependencies' folder for an installer which will enable spreadsheet functionality.  Which version of Rhino/Grasshopper/Windows are you using?

  • Igor Mitrić Lavovski

    Hallo Luis,

    Can you maybe explain a GetElevation option.

    Do I need to get familiar with google maps Api pr. and get data from them, and than plug this data to GE node?

    Thanks

    Igor

  • Luis Fraguada

    Hello Igor,

    The Elevation Service needs you to provide a coordinate like this:

    {longitude,latitude,0}

    *notice the brackets, it is formatted like a GH point.

    Longitude and latitude are in decimal degrees.  The component returns the elevation at that point.  Let me know if you need any more information.

  • Igor Mitrić Lavovski

    Thanks for that!

    How do you get a list of a points (coordinates), do you manually draw them on google earth map with placemaker, than read a coordinate and then assign them in a GH?

    I hope not :)

    I manage on this way, following your explanation somewhere in forum, to send a model in to google earth.

    Thanks

  • Igor Mitrić Lavovski

    Or to draw a GPS route with http://www.gpsvisualizer.com/draw/

    and use that for coordinates and terrains line...

    I will try this one..

    Still if you have some cleaner way, I am open :)

    Thanks

  • Luis Fraguada

    What I do is to bring in a screenshot from Google Earth through the picture frame command in Rhino, I scale it according to the scale indicated (to 1:1) then I pick a point in XYZ which I can easily look up in google earth, such as a sharp corner.  I bring in the xyz to gh, and I write in a panel its corresponding {lon,lat,0}.  You can then use the XYZ>GEO component to convert any points you draw or generate in Rhino / GH from XYZ coordinates to {lon,lat,alt} coordinates.  You can now feed these into the elevation component.

  • Igor Mitrić Lavovski

    Hi Luis,

    Thanks for everything! I really do not want to be annoying.

    I followed your instructions:

     I divide PictureFrame as Surface into number of points. I pluged this points into XZY – GEO Node, also one reference point to in order to get elevations data. Then I decomposed points and made them again with new Z lengths. Build a IntCrv and loft it. Works fine.

    Now, I culled the lowest point in a list (with sort list) . Put a XY Plane trough, duplicate it with Series and specific number 2.0 and intersect this planes with lofted surface, in order to get isohypsen. Works also fine.  

    I am just not sure, that with this way , intersection,  I get really thing!?

    City is Graz (AU)

    Thanks a lot one more time !

    IgorGhowl%20to%20Google%20Earth.gh

    GrazInnenstadt.3dm

  • Luis Fraguada

    Hello Igor,

    Not clear on what the issue is.  What is it you are expecting to get?

    best,

    Luis

  • Jeremy Bamberger

    Hi Luis et al,

     

    I am working with Ben Golder's Python script to read in shapefiles from GIS. I have the entire land use map (by parcel, ~150,000 polygons) of San Francisco and coordinated with the SF Assessor/Recorder's office to getting 10 years worth of property valuations (excel docs, again ~150,000 rows of data).

     

    I've been trying to get gHowl to read in this large excel file. I've been dividing the data in half until GH stops freezing and landed at around 5,000 rows of data. Can gHowl do better?

     

    I can probably script a method to parse the existing excel files then merge them back in GH, but that would be less than ideal (10 years x 40 separate files = 400 excel docs!).

     

    Any ideas? Is there a more efficient manner to perhaps grab a csv file?

     

    Thanks!

     

    Jeremy Bamberger

    jbamberger@cca.edu

  • Luis Fraguada

    Hello Jeremy,

    I have not tried with such a large file.  I would need to have a file like that in order to debug and come up with a better way to parse the data.

    Best,

    Luis

  • Peter Liebsch

     

    Hi Luis,

    Great tool. Thanks for making it accessible!

    I just have a question. I run a GH file where I get data from OSC iPad app in via gHowl as well as sensor data from an Arduino via FireFly.

    The OSC are just simple horizontal sliders.

    The problem I'm facing is that additional toggle items in OSC, which write only 0 or 1, don't get through properly. They do without problems as long as the timer on the FireFly is off. I also can write to the OSC app via gHowl to turn LEDs on or off.

    As soon the FireFly timer is back on the toggle get lost in 8 of 10 attempts. The sliders still get through correct.

    Any idea if this is because of a timing problem between gHowl and FireFly? I played around with different GH timer settings but that didn’t change much.

    Cheers,

    Peter

  • Luis Fraguada

    gHowl is designed to not need / use timers.  Each time a timer fires, the solution is recomputed and this can significantly slow things down depending on what you are doing. 

    How are you storing the toggle values?  Which OSC components are you using?  If you store the toggle in the OSC channel component, what happens, do you still loose the information?  Does the component return a null value or does it go to 0? 

  • Andy Payne

    It sounds like this problem might be because of a threading issue.  As Luis said, one of the great things about the OSC listener in GHowl is that it does not need timers.  It has (I think) it's own threading model which allows it to be very fast.  On the other hand, it's possible that there could be some inconsistencies in the data transfer if the threading isn't sync'd up with the Grasshopper UI threading model (especially if the data is being sent very quickly).  

    One thought could be to try the OSC listener in Firefly.  It works similarly to the GHowl version with a couple exceptions... the first is that it requires the use of the GH_Timer to automatically update.  I've found that you can still get pretty good speed using the GH_Timer (I've been able to get up to around 60 fps) but the fact that you're using the GH_Timer means that the solution will always be recomputed in sync with the UI threading.  And since you're already using the GH_Timer for the Firefly component, you should be able to use this same timer to recompute both components.  I've been able to use TouchOSC and the Arduino components without having these issues, so I definitely think it's possible.  Here's one example: http://vimeo.com/26073521.  Anyway, I hope this helps.

  • Peter Liebsch

    @Luis

    I'm using a OSC Dispatch. It collects the information but struggles as soon as the timer on the FireFly is on. Funny enough it only struggles with the toggle data, the slider data gets through fine.

    @Andy

    Thanks for your video link and explanation. I tried to hook up my OSC app via the FireFly OSC Listener but it reports no data... I assume the port is the same for gHowl UDP Reciver and FireFly OSC Listener, right? My setup looks the same as yours in the video... any idea?

  • Andy Payne

    Hi Peter,

    Yes, the setup is basically the same as with the GHowl components.  You just need to specify the UDP port you're listening to. You'll also need to connect a GH_Timer component so that it expires the component quickly (trying to get the latest message sent from the TouchOSC app).  

    On you're TouchOSC app, you'll need to specify the IP address of the computer you're trying to send it to.   GHowl has an excellent tool for pinging your IP address called Network Source.  Just enter the IP address of your computer into the app, and pick an outgoing Port number you want to send the message (note: you're Grasshopper component should also use this same port number).  

    The only other thing I could think of that might possibly be causing you trouble is whether your network is blocking your UDP message.  Could you describe your network setup.  Are you trying this at home (on a personal router) or at school/work?  Sometimes, different networks block UDP messages (this often happens if I try to connect on an institutional network, like at school).  In this instance, it could be a good idea to try to create an ad hoc network on your computer.  Here are instructions on how to do this: http://windows.microsoft.com/en-US/windows7/Set-up-a-computer-to-co...  Once you've created an ad hoc network, make sure both your phone and computer are connected to this same network.  It may take a while to regenerate your IP address (on your computer), but once it does... enter this new number in your phone app.  The port number can stay the same.  Ideally, this should solve your problem.  Let me know if you still have problems.

    -Andy

  • Peter Liebsch

    Hi Andy,

    Did the setup as discribed but no data comes through. So I assume it's our firewall or network in general as I do that in our office. I will try it at home and see if that resolves this issue.

    Thx

    Peter

  • larry lopez

    hi, sorry for asking a this, I know that here is probably not the best place to do so, since my question has to do more with how can I split and re-asign a set of coordinates to an array of objects in processing. I asked there (forum.processing.org) with no luck so far. 

    Right now I just have a bunch of 3d points, not more than 20, plug to gHowls dpu sender and a simple sketch in processing just to understend how to use this info.

    Any ideas on how to do so? I have attached both the sketch and definition just in case it helps, it needs gHowl and the dpu lib for processing; but if you have or know of an example I can look at will be enough.

    thanks!

    nodes_not_working.pde

    nodes_send_notworking.gh

  • Jeremy Bamberger

    Hey Luis,

    I've been away, but I wanted to follow up from my post in November about large xls files being read into GH via gHowl. The relevant files (I'm importing GIS data using Ben Golder's python script) are 16.8MB, so if you could pass along your email I'd be happy to forward them to you.

    I have parcel data for all of San Francisco, and the xls sheet include property value information for each parcel (~ 180,000 columns). Using gHowl as it stands freezes my computer. I've had success importing at most 10,000 columns, but parsing out the data would be too tiresome. I have property value data for the preceeding 10 years.

    You'll need the python plugin for GH. You will also have to update the pathname for the files (its setup to read from the desktop, just update the user). If you have a chance I would be grateful for any ideas. Thanks!

    jbamberger@cca.edu

  • Bramiozo

    I've been trying to setup communication between Grasshopper and Flash by using ghowl and bubblebird's Flash library (http://bubblebird.at/tuioflash/). So far I've been able to send an OSC message to grasshopper by defining the address and value and it comes across fine. so far so good. However when I want to put together a bundle of messages with different addresses and dito values or when I try to send these messages rapidly after oneanother it doesn't work anymore.

    When I rapidly send 3 messages after oneanother the first two get dropped and only the last message (address and value) gets across. When I bundle the three msgs the whole bundle gets across but doesn't 'get parsed' so the output of the UDP component shows out the D output: lines 0 till 5 showing on the even index the addresses and on the uneven indexes the values (I guess this is ok?).

    The OSC_Dispatch component doesn't seem to split this bundle message. I input the three adresses in the DispatchObject D input (which works fine with single messages). The D Output shows in the output of address0 the rest of the message : "data1,address2,data2,address3,data3" and the data 2 and data 3 fields are empty. I would like to have data2 in the field coupled to address 2, like it the case when I use single messages.


    Anybody have any thoughts on how to fix this ? Thanks!

  • Luis Fraguada

    Hello Bramiozo, Can you post a screenshot of what is happening?

  • Bramiozo

    Sure!

    I've blurred out the non-relevant part for this test to make it a bit easier to find :).

    Also I've noticed that I've been getting some dropped msgges in general when Rhino is occupied with excuting a command I send to Rhino through a VB script _ViewCaptureToViewport.

  • Luis Fraguada

    So in the blurred part, these are other OSC channels which are working ok?

    Can you try using the single OSC Channel component?  You would need to name each one by right clicking in the center of the component and entering the name of the channel (i.e. /5/nr1).   You would repeat this for each one.  Try this out and let me know how it goes.  I might need to rework the dispatch component to better handle bundles...

  • Bramiozo

    Jup, those work fine!

    They are sent by the client when an input variable (slider) changes value. In my client app I would like to implement a save function. It would be great if it could send data to multiple addresses in the same go. Sending them after another doesn't work (only the last msg gets across, though as far I can debug, they are being sent by the client) so I figured bundles may be the solution.

    I've tried using the single OSC Channel component but it seems to have the same problem.

    I'm also having some dropped msgs. It's probably related to a timer that executes _ViewCaptureToClipboard every second is there something I can do to fix that?

    Let me know if 'd like me to try something!

  • Constantinos Miltiadis

    added a simple osc method for processing>GH real-time communication sending a 2d point array. Hope it helps. comes with pde and gh files

    http://www.grasshopper3d.com/forum/topics/processing-to-grasshopper...

  • Luis Fraguada

    Thanks for the example!

  • Luis Fraguada

    Here is another nice example: http://www.twylah.com/Spatial_3D/tweets/195648004827525120

    via @Spatial_3D

  • Chan

    I think I am getting confuse with the terminology and definition, may some one clarify the difference between osc and udp? Does osc need to be bundle or encode when it sent through udp? I am employing osc when I am sending message vvvv and grasshopper?

  • Luis Fraguada

    Hello Chan,

    UDP // OSC

    OSC is a protocol running on top of UPD.  A part of the OSC message has information about where the message came from, for example it would tell you which device and which control of the device has just sent you the information. 

    Both UDP and OSC can be sent or received from the same gHowl components.  To invoke OSC, you should change the sending or receiving pattern to 999.  To send OSC, you should compose a message where the first element in the list is the device address and the other entries are the data.  Check the gHowl examples where you will find OSC examples for VVVV and processing.  Let me know if you have any issues and we can help to resolve them!

  • dd

    Hi Guys,

    I'm new to grasshopper and I am attempting to link Processing to Grasshopper via Ghowl.

    but I have a problem that I couldn't figure out:


    opening socket failed!
    > address:null, port:6005 [group:null]
    > Address already in use: Cannot bind

    This is the error which appears in processing.Can you help me to figure it out?

    Cheers,

    DD

  • Luis Fraguada

    Hello dd,

    I would need to see how you are coding in Processing.  Have you tried the examples?  Are they working for you? 

  • dd

    Hi Luis,

    Thanks for reply.I tried the examples and they worked.But when I code the lines into my processing, the error appears.

    Di

     

  • Luis Fraguada

    Ok, I will need to see what your processing looks like in order to help you further...

  • dd

    Hi Luis,

    Is it possible for me to email the script to you instead? So I would be glad for you to give me your email id.

    Di

  • Luis Fraguada

    Hello dd,

    Evert Amador discovered this issue on the processing side.  For reference, you can check his code here: http://www.grasshopper3d.com/group/ghowl/forum/topics/udp-problem

    The issue is in two lines of code.  For the setup you should have (assuming you have a UDP object called 'udps'):

    void setup() {
      udps = new UDP(this);

    ...

    }

     and then for the sending:

    udps.send( message, null, port );

    Hope this helps!

  • Constantinos Miltiadis

    another example of processing>GH  via OSC, for a kinetic spacegrid structure simulation.

    http://www.youtube.com/watch?v=zdqsBtYTC94&feature=youtu.be&...

    and at my blog:

    http://at-nowhere.tumblr.com/post/22669358307/kinetic-canopy

    though I have same receptibility problems when sending multiple (2) streams of data to GH.(i don't know what is the problem maybe its something like a buffer stuck) and i have to do some manipulations.

    do you think that UDP would be a better way?

  • Luis Fraguada

    hmm, In this case I might consider sending a packet with all of the control point positions.  You could check in GH if the control pt position has changed, if it has, update the position.  In UDP you could send a comma-delimited string, maybe if you want to keep it in OSC you could consider sending an OSC Bundle.

  • Constantinos Miltiadis

    i'll try again in OSC, to pack everything in a single string

    thanks ;)

  • Luis Fraguada

    To note, an OSC Bundle is different than an OSC Packet.  An OSC bundle comes across to GH as a list of values where as an OSC packet would be sending one value (one string or one number for example).  You could do one OSC packet as a string, or an OSC Bundle which would be deserialized as a list in GH (at least that is how I thought I coded it, it needs to be tested!).

  • Constantinos Miltiadis

    the packed string seems ok, combined with split string in GH.

    i'll try the bundle later. i'll get back to you for feedback

    for now:

    An example of how to create OSC bundles in P5 from Andreas Schlegel. (it's not made to receive bundles yet)

    http://www.sojamo.de/libraries/oscP5/reference/oscP5/OscBundle.html

  • Constantinos Miltiadis

    the OSC bundle seems to work. gHowl gets the different messages, along with their filter, but the OSC channel does not separate them

  • yahya ibraheem

    hello guys, how can i get started to connect an excel file to grasshopper ? please help

  • Luis Fraguada

    Hello Dhruv,

    Do you have the JMyron Library installed?

    Best,

    Luis

  • Philipp

    please, help me with connecting to rss.

    have no idea how to work with it

  • Luis Fraguada

    Phillip, what is the link to the rss feed?

  • Luis Fraguada

    here is the gHowl XML parser with the rss feed link of the gHowl forums...