Lucas Walter
keyboard only pixel paint
updated
github.com/fintelia/terra
There must be configuration options to set the date and time, but didn't see them. Ultimately I'd like to use it as a library, overlay geotiffs to get images of a certain resolution and camera intrinsics and position so will probably go back to C++ and osgearth (github.com/gwaldron/osgearth).
I commented out the line `.with_fullscreen(Some(winit::window::Fullscreen::Borderless(monitor)))`
to get it to be in windowed mode.
It seems like it ought to be able to go into reverse but doesn't know how to bring in the earlier frames. Also it would be nice if the video could go in a loop and it was smart enough to blend the end and start together.
Even nicer but probably much more work if multiple datasets where the vehicle turned down different streets could be commingled, then during playback either route could be steered into.
Can it do depth images? Maybe those could be converted into what looks like lidar and it would work with that. If no depth data at all does it still work? Pure odometry but no gps?
github.com/lucasw/vista/tree/ros_integration forked from github.com/vista-simulator/vista
youtube.com/watch?v=z0UHdAI3sXI
https://vista.csail.mit.edu/
https://news.mit.edu/2022/researchers-release-open-source-photorealistic-simulator-autonomous-driving-0621
github.com/peterbrittain/asciimatics
This works fine on my phone but glitches in chrome on the desktop- frame jumps forward and back- maybe it needs more processing time.
Panoramic equirectangular version youtu.be/8ADfLafygCk
360 viewer version created with spatialmedia: youtu.be/ZHBaS0F0pIs
Made in Blender 2.93 with cycles equirectangular camera and glare composition effect. Tried out 8K frames but ffmpeg locks up with those, so went down to 4K (but youtube only is allowing playback at 2K at least for now?).
The render is only 30 frames but is looped 400 times with ffmpeg:
ffmpeg -threads 14 -stream_loop 400 -framerate 30 -pattern_type glob -i '*.jpg' grid_pano_long.mp4
Try rendering with motion blur, that may reduce aliasing artifacts.
Future Eevee versions are supposed to support panoramic rendering, that would have speeded this up a lot, but I like the cycles glare composition effect more than the built-in eevee equivalent.
Equirectangular images software rendered with C++ and OpenCV - the stars are cv::ellipses that get wide near the poles at the top and bottom of the frame github.com/lucasw/stars_pano
Rendered at 4096 x 2048, I would have gone to the youtube maximum of 8192 x 4096 but ffmpeg couldn't handle that - maybe importing as an image sequence into blender would work?
3D sequel to the 2D youtube.com/watch?v=oE2ZVhHwxAU
github.com/lazarus-pkgs/panini was useful for viewing individual images.
The animated delay map can be seen at 0:33
github.com/lucasw/frei0r/blob/delay_map/src/mixer2/delay_map/delay_map.cpp
github.com/lucasw/gephex
github.com/lucasw/binarymillenium/blob/master/gephex_graphs/galaxynew3
More graphs github.com/lucasw/binarymillenium/tree/master/gephex_graphs
TODO get them running again and re-upload.
Drag and drop images onto an imgui window, it then is published as a ros Image to rqt_image_view.
Using SDL2 which gets the drop events in the form of file names, which are then loaded from disk with opencv. Would like to be able to received copied images from Chrome, but those are different (the entire image is on the clipboard?).
Went back to ros1 with imgui_ros because of ros2 uses too much cpu, haven't ported all the 3D visualization parts yet.
github.com/lucasw/imgui_ros/issues/81
'endless' stars moving to the left- there ought to be something better (and longer than a few seconds) already on youtube but it seemed faster to make one from scratch than dig deep into youtube search results. (There are a lot of moving forward through stars, but not the side scrolling)
Stars are just circles, should try making a few be made out of circles with an alpha gradient
Also could have bigger stars with lens flares, also via a transparent image rather than a drawn circle.
The drawn circles probably take more cpu than a scaled down image.
Recorded with simplescreenrecorder in Ubuntu.
Panoramic sequel youtube.com/watch?v=qrQOVp3ivhY
Used in youtube.com/watch?v=8Q_PtjvVLt4
ROS tf is used for the positioning of geometry - if not for the imgui widget the position could come from another tf publisher, and the cube image is getting published out as a ros sensor_msgs Image.
github.com/lucasw/imgui_ros/issues/52
See also youtube.com/watch?v=t3fQJTo7QWc
Not sure what k2so is doing- dancing?
Also though it would be easier to concatenate an mp4 from kazam with an image sequence of a different resolution in shotcut, but I think shotcut is confused about framerate and resolution.
Sequel to the ros1 version: youtube.com/watch?v=mc1xC_bGN5E
github.com/lucasw/image_manip/blob/bouncy/image_manip/launch/stop_motion_launch.py
ros2 version of usb_cam:
github.com/lucasw/usb_cam/tree/bouncy
github.com/lucasw/imgui_ros/tree/bouncy - currently using the SDL + OpenGL3 backend
Old ros1 qt version: youtube.com/watch?v=2vLw7mZvy1M
github.com/lucasw/image_manip/tree/bouncy
github.com/ocornut/imgui
github.com/lucasw/lambda_synth
In the upper left is a positive reflecting wall, on the right a negative reflecting wall, and an absorbing wall on the lower left (and what does a regular wall in real life correspond to?).
It doesn't really use ROS at this point but costmaps could be used as walls later on. Being able to move the walls during the simulation is a goal but maybe requires deeper digging into lambda to support.
The 'pseudo spectral' method is supposed to be faster than the more traditional technique used in lambda, but this non-apples-apples example actually took a much longer time to calculate than a similarly simple room in lambda. Perhaps it is higher fidelity than the lambda equivalent.
Are diagonal walls supposed to be possible?
It isn't clear there is any way to export to audio or even raw floating point files for either the microphone or the entire scene. png/jpg export didn't work correctly (or my settings were wrong). It wouldn't be hard to hack support for this in, that part of the code looks straight-forward enough.
This is ~2.0 built from the master branch (with a few modifications to make it run work with Ubuntu 18.04 - see github.com/lucasw/openPSTD/tree/include_vector and gist.github.com/lucasw/574e325be0c4ccf7112e3d8f68caa954 ).
So far I can only run the default room which is in this video- any modifications result in a crash. It isn't clear how to modify the domain (room walls), some are clearly set to reflect and others to absorb the sound waves. I'm not sure what the number labels on the walls mean.
There is 3.0 and 3.1 branch but those don't work at all for me, both crash immediately after attempting to simulate and take 100% cpu even when doing nothing.
I think I'll go back to lambda, which is more robust and looks easy enough to modify for my purposes. I also have some old electromagnetic wave propagation code lying around that could probably be modified to simulate sound instead.
github.com/openPSTD/openPSTD
http://www.openpstd.org
Slower speed playback avoids some of that.
Paint spectrograms in Gimp and exported tifs are turned into looping audio.
It takes a second or two from when I export the image (which may be any number of seconds after the image is edited) before the changes take effect and are heard.
Kazam set to capture the window only doesn't get the menus when I use them, but most of the effects ought to be self explanatory.
Use the area capture next time.
Used Gimp 2.9 to get 32-bit floating point images, but probably regular lower precision images work equally well.
github.com/lucasw/spectrogram_paint
9:00 - sort of neat frequency slide
19:30 - some nice pulsing noise
25:10 - noise + slide thing
I've imported the Tao 'A Software Package for Sound Synthesis with Physical Model' (http://taopm.sourceforge.net) into github github.com/lucasw/tao_synth, replaced configure with cmake, and eliminated what I don't want to maintain. Some of that may come back as python scripts.
The visuals and sound don't match up, the visuals are proceeding at a tiny fraction of the audio rate.
add and re-encode audio to silent ogv video
ffmpeg -i 40strings.ogv -i 40strings_b.mp3 -vcodec copy 40strings_with_audio.ogv
roslaunch bullet_server bullet_server.launch use_sim_clock:=true rigid_only:=false
roslaunch bullet_server grasp.launch
rosrun bullet_server icosphere.py __ns:=bullet_server _pressure:=500 _mass:=1.5 _levels:=3
It would be good to try a volume sphere as well, or turn it into an ellipsoid or make other shapes.
Perhaps the friction could be cranked up so the squishier spheres wouldn't slip out. Maybe finger tips would help too.
Picking up a piece of simulated cloth would be interesting, and probably difficult.
bullet_server is using about 60% of a cpu with about 3000Hz internal update rate, that could probably be reduced (though soft body penetrations seem to get more common then), and the real time factor increased for faster simulation.
I'm using an rviz branch that allows light sources, the bullet_server.launch that launches rviz will likely fail elsewhere (so just start a new one and subscribe a Marker to visualization_marker_array).
github.com/lucasw/simple_sim_ros
roslaunch bullet_server bullet_server.launch
roslaunch bullet_server grasp.launch
rosrun bullet_server grasp_sequence.py
Also requires pid package.
github.com/lucasw/image_manip
It would be nice if the rqt dynamic reconfigure could have a mode to send constant updates rather than waiting for the slider to be released.
The video gets fouled up with large coefficients because the processing is being done with 8-bit color- probably the frames should be filtered in 16-bit signed and then converted back to 8 for published, though with a large performance penalty.
github.com/lucasw/image_manip
Source video is the cc licensed youtube.com/watch?v=ERtQIyaw5Yg
github.com/lucasw/open_simplex_noise_ros
Sort of sequel to old vimjay version youtube.com/watch?v=JuRLf9DHGrw
Not really pushing the (emulated) hardware much, just learning the basics of the VCS and 6503 assembly.
It would be nice to have more levels, use additional playfields, and maybe multiple gaps in the same wall occasionally, and scrolling stars in the background using the missile sprites.
The stella emulator looks to be oriented around DASM rather than ca65, it doesn't load the label and map outputs generated by it, maybe that could be added easily.
Each wheel has gear teeth which intermesh with the gaps between the track plates.
There isn't any suspension, no tensioning between the drive wheels, and the friction coefficients might be too low, which results in a poor ability to climb up obstacles.
There is also a bug in bullet_server where fixed constraints aren't being handled properly, so I've used hinges instead with small angular limits.
github.com/lucasw/simple_sim_ros
also clone github.com/mogumbo/rviz_lighting
sudo apt install ros-melodic-pid
then build and run:
roslaunch bullet_server bullet_server.launch
rosrun bullet_server ground_plane.py _ns:=bullet_server
roslaunch bullet_server tracked_vehicle.launch
github.com/lucasw/simple_sim_ros/tree/softbody
roslaunch bullet_server bullet_server.launch
roslaunch bullet_server spawn.launch
Spoiler alert: it turns out square squishy wheels don't work very well.
github.com/lucasw/simple_sim_ros/tree/softbody
Also youtube.com/watch?v=C9BbFv-C9Zo has something similar implemented.
github.com/lucasw/rviz_textured_quads/tree/image_topic
The system is buggy and locks up around 1:00, unfortunately.
http://www.robothon.org/robothon/popcan.php
github.com/lucasw/simple_sim_ros
Bodies and constraints (joints) can be created live, which is not always a great idea for stability but can be entertaining- when a constraint is created between two distant objects they sometimes spring high into the air.
Bodies and Constraints and Impulses are created via topics currently, though at least for the first two I should switch to services.
The source image is on the left, the distorted image next, then the rectified image, then the difference of the input image and the rectified image on the right.
The difference isn't always zero because information is lost in the distortion- parts of the image go out of the boundaries, or are so distorted to a subpixel level they can't be brought back.
I've been meaning to git forward image distortion added to OpenCV for several years, but have neglected to push for it. The source code is currently here github.com/lucasw/vimjay/blob/master/src/standalone/distort_image.cpp
Using ros:
roslaunch vimjay distort.launch
More details here:
http://lucasw.github.io/ros-stop-motion-animation
github.com/lucasw/vimjay/blob/master/src/nngen/nngen.cpp
The source code is available under the GPLv3 license github.com/lucasw/road_vision
Modifying a simple filter on webcam input. I make syntax mistake at one point, the error is shown in the lower left terminal.
The GPLv3 source code is here:
github.com/lucasw/cl_misc
You can try it out here: http://lucasw.github.io/pixbot
Or download the GPL 3.0 project here github.com/lucasw/pixbot
Inspired by http://en.wikipedia.org/wiki/Turtle_graphics and http://light-bot.com/hoc.html from the Hour of Code.
The generous Creative Commons license that allows derivatives makes this possible/legal, the book is available here:
http://craphound.com/down/?page_id=1625
There is already a much more understandable human generated audio book version of this elsewhere on youtube, but I thought it would be fun to try this process out.
github.com/lucasw/screengrab_ros
Some other discussion is here: plus.google.com/+LucasWalter/posts/f7fLhyWL3A4
The white line is the initial curve, the green line is the solution Ceres found, and the grey squares are the obstacles. The control points also have lines drawn between them.
It doesn't always work that well, and some refinements could probably improve it, and also using bezier control points probably isn't as good as just moving the path itself around directly (though the curve smoother).
The source code to this is GPL and located here: github.com/lucasw/bezier_solve
The music is Kevin MacLeod 'Blipotron' and is Royalty-free/Creative Commons Attribution. See http://incompetech.com
Most of the work was from 2008 but I hadn't until now made any videos of it, the source code is available on github.com/lucasw/binarymillenium/blob/master/processing/astar/astar.pde
(There used to be an embedded applet linked from code.google.com/p/binarymillenium/wiki/AStarSearch before google archived google code)
I think there are cases where it won't choose a slightly shorter path but I may have gotten most of those.
Music is the creative commons licensed free for commercial use Kevin Macleod - Cut and Run http://incompetech.com/
I've been seeing Kevin MacLeod credited all over the place in the last year, in indie games and random youtube videos (especially monetized ones) and elsewhere, but only recently looked him up. The next step seemed to be to start using his music in my own stuff, and first I would have to listen to a lot of it and get familiar with it. I then downloaded a bunch of mp3 and the set about trying to turn a folder of mp3s into videos with static title images, and then joining those together into one long video with a script.
The latter step was a struggle until I also came across a partial explanation of the the whole acrimonious ffmpeg/avconv split, and then promptly went back to using a proper version of ffmpeg instead of the Ubuntu supplied avconv.
Kevin MacLeod royalty free Creative Commons Attribution music from http://incompetech.com/:
8bit Dungeon Boss
8bit Dungeon Level
Ambler
Babylon
Basement Floor
Blipotron
Blue Scorpion
Call to Adventure
Cephalopod
Chipper Doodle
Chipper Doodle v2
Cipher2
Clenched Teeth
Club Diver
Cognitive Dissonance
Consequence
Constancy Part Three
Constancy Part Two
Cut and Run
Cut Trance
The scripts for making the static image music videos are here:
http://binarymillenium.com/2013/07/turn-set-of-mp3s-into-static-image.html
The music is the Creative Commons licensed Perpetual Motion by destinazione_altrove http://ccmixter.org/files/destinazione_altrove/42765
I need to make it easier to have a variety of stock saved graphs, and be able to quickly load them while modifying their source imagery. Working up a novel graph (or rough replication of an old one from memory) is sort of interesting as performance art but not as suitable for a dance floor.
Also having a default bank of source imagery videos to switch among, or cycle through- right now there is one directory of random bitmaps, and some number images- those got repetitive quickly.
Rot2D is overused, I need to use it more subtly- very rarely rotate or zoom out beyond certain thresholds that make it obvious that effect is in use.
It needs to be easier to create instrument panels for graphs, so that navigating the whole node graph in the standard ui is not necessary while just making numerical modifications.
github.com/lucasw/soundpaint
http://binarymillenium.com/2013/05/soundpaint.html
I'm using processing with a separate P3D graphics target for the voxel preview, but it seems not to work completely- ortho() didn't work and neither did changing the fov or trying to change lighting.
To run this you will want to download Processing (http://processing.org/download) and my code which is here (and free and open source):
github.com/lucasw/pixelpaint


