wired is not good for creative experience
Table of Contents
As according to my experience on being wired to phone, one of the consequence of being wired to a thing is decrease in mobility and making changes
. This is particularly not a good state to be in when doing something creative, for example, optimizing robot controller.
1. Example: My experience on PID Wallfollowing robot controller
When I was building a PID wallfollowing robot controller a while ago(actually just now, I’ve not finished yet), I was given a skeleton that have not bad performance. I was told to extend it to do Bug1 and Bug2. After a while I ended up at an architecture where robot is controlled by a method that sets wheel velocity explicitly. (setVelocity(base, control)
)
The problem I’m facing is that:
- the controller cause the robot to oscillate a lot. looking at conventional PID signal graph, this is not abnormal, but I’m looking for smoother performance -> which implies using steering instead of setting Velocity explicitly
- the robot sometimes would bump into outer corners. This is due to turning is not PID controlled and sometimes when walls end when the robot is going further away from it, turning initiated too early
- the sensors are quite unstable. From lookuptable it should have been a straight line with 0.01 standard deviation, but in practice, when the robot is bumping into wall, the sensor facing it would give maxRange value(which indicates 5m, in [0,5]), or alternating a very short distance and the maxRange(
.16, 5, .16, 5
) For the record, I did not expect there to be any maxRange value in here, I expect 0.01 standard deviation means .16 would sometimes be detected as .18, not 5.
These problems are in the logic and architecture, and could not be easily solved by just adding if...else
clauses, but requires designs of new mechnisms and redesigns of the old to incorporate the new. Namely,
- to add steering, the basic controll paradigm has to be changed, from explicityly setting wheel speed to an automated controll based on steering force, which would reqiure a step() method to be called every timeStep.
- to solve the bumping, the stretegy of outer corner has to be reconsidered, and take in mechnism such as buffering, or additional logic based on sign of error/control(would indicate which direction robot is facing)
- to solve the sensor issue, buffering would be required, which would also involve a step() method, in which all sensor values are captured and buffered in a period of time for further query
All of them would mean big change to the code, and more: would involve sitting back, taking up pencil and paper and sketch a new system to be implemented, which would be the right thing to do at the moment; Yet I’m wired
from 3 hours of writing codes and building robot controller, that I just went forward to tune all possible parameters(kp,ki,kd,robot speed, reference wall distance), or just make simple local value changes, when formal specification and experiment records would be miles faster and more efficient.
2. Reflecting on the example
Being wired at writing code has caused lots of problems in the example:
- shortsightedness
- unuable to step back to see the big picture and make drastic changes; unuable to focus on observing and analysising the situation long enough to come up with effective fix.
- immobility
- even though I have a vague idea of what mechnism may work, any amount of work with my hands off the keyboard becomes extremely hard, and have everything in my mind is just not going to work due to the size of the changes to be made.(large)
- blob thinking
- as complex as this problem is, it would require breaking down the problem to smaller easier ones that could be focused on, yet when wired to writing codes, I have a strong tendency to think everything together as a giant blob, where none of them are thought clearly and thorough, while the scope taking into consideration very quickly shrink to just the stuffs I could see, which would comprise of 5 windows that happens to be open on the desktop.
3. Note
- there should be literature around this, could check it out
Backlinks
wired
Wired/wiredness/staticity refers to the state where:
- your attention is [intensively] projected to a fixed, small space [screen, cat, mostly screen]
- the state tends to enhence itself, resulting in you focusing on a fixed, small space for a long time.
avoid getting wired by heterogenizing activity
- heterogenizing activity
alternate delivery, format, nature in general of the focused material, and/or method of attention.
For example, on one’s way to understand a concept such as “what is PID controller”, they may go through the following activities:
- homogenous version: watch film[on film] -> watch film[on film] -> read passage[on words] -> watch film[on film]
- heterogeneous version: watch film[on film] -> literate idea[on reasoning, concepts, and observation] -> read article[on words] -> talk about the idea [serializing components] -> make graph [imagine, visualization]
- heterogenization in action
controll the time you continuously do one thing; when having done it for long, change it’s delivery, format, or topic.
When you have written code on computer for 30 minutes, stop writing it and either take a look at the design, draw a graph of the code[format], sum up the progress, write it on paper, check the logic, or just do some little exercise.
- why
homogeneous content would cause one to be wired, which is not good for creative experience for many reasons.
heterogenizing focused materials/means of analysis prevent one to be wired because of this.
- (no term)
- phone in heterogenizing activity