Compare commits

..

28 Commits

Author SHA1 Message Date
Kenwood b75e4b270b Basically a stash... 2021-12-11 23:00:00 -05:00
Kenwood a054e368cb Bump holes 2021-11-29 00:46:19 -05:00
Kenwood db1a261012 Create bottom layer for station2 stack 2021-11-28 23:27:16 -05:00
Kenwood 7b318831f2 Move filesystem 2021-11-28 23:06:16 -05:00
Kenwood 48c532a81c Add test-pattern 2021-11-28 16:42:12 -05:00
Kenwood c302674958 Attempt stream! 2021-11-27 21:49:48 -05:00
Kenwood c2df56e15e Add magic debug values via cli 2021-11-27 21:32:52 -05:00
Kenwood 93fd03e717 Implement fixes suggested by jinsun on irc 2021-11-27 21:28:07 -05:00
Kenwood 3682fc1448 Boilerplate RS code 2021-11-27 21:13:20 -05:00
Kenwood f67379f85d Final bleh 2021-11-27 16:54:52 -05:00
Kenwood ac4ff7a657 Boilerplate 2021-11-27 16:52:55 -05:00
Kenwood e94f342739 Shuffle it all up 2021-11-27 16:25:55 -05:00
Kenwood e421634432 Stay up to date 2021-11-27 16:03:37 -05:00
Kenwood fba81ef345 Add ability to log remote 2021-11-27 16:03:20 -05:00
Kenwood 888ed4db9d Levels by avahai 2021-11-27 15:20:58 -05:00
Kenwood e89b964d27 Who even needs a window manager anyway 2021-11-27 14:59:23 -05:00
Kenwood d74b40b7e2 Use urwid over curses 2021-11-27 14:39:18 -05:00
Kenwood 05e5785fc0 Bump entrypoint 2021-11-27 14:28:58 -05:00
Kenwood 716f01a5be Add readme: 2021-11-27 14:23:02 -05:00
Kenwood 5fad6f294c ignore gross 2021-11-27 14:21:09 -05:00
Kenwood 9a771e8cd4 Create all dashboard code 2021-11-27 14:20:22 -05:00
Kenwood 8a54cedb5b Spits out epoch time now, lol 2021-08-21 16:39:56 -04:00
Kenwood 8e3b3abe8a This testscreen generator works 2021-08-21 16:21:55 -04:00
Kenwood b50cfeaac8 Upgrade to fancy color changing test pattern while remote 2021-08-20 14:30:02 -04:00
Kenwood 8ac68b6ab0 this color method works fine! 2021-08-20 12:30:03 -04:00
Kenwood 502822a7a1 include image 2021-08-20 11:57:03 -04:00
Kenwood 0d0729cb99 This works! thank you discord server 2021-08-19 12:28:44 -04:00
Kenwood 6d7d7cbcfd 118 stepped in on support srv 2021-08-19 12:07:46 -04:00
50 changed files with 325 additions and 5058 deletions

2
.gitignore vendored
View File

@ -1,5 +1,7 @@
# Python
__pycache__
Pipfile
Pipfile.lock
# CAD
*.stl

BIN
CAD/Lewis_CAD/Frame.FCStd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

View File

@ -5,11 +5,3 @@ git clone <url>
cd lewis-crawler/crawler_software/raspberry_pi
make install?
```
# Getting started with the CAD
```
git clone https://kitsunehosting.net/gitea/Kenwood/lewis-crawler
git checkout crawler-cad
```
find cad under `lewis-crawler/crawler-cad`

View File

@ -1,11 +0,0 @@
<?xml version="1.0"?>
<model>
<name>Lewis_Crawler</name>
<version>1.0</version>
<sdf version="1.7">model.sdf</sdf>
<author>
<name>Joe Sedutto</name>
<email>kenwood364@gmail.com</email>
</author>
<description></description>
</model>

View File

@ -1,109 +0,0 @@
<?xml version='1.0'?>
<sdf version='1.7'>
<model name='Lewis_Crawler'>
<link name='chassis'>
<pose>-0.1524 -0.1 0.0508 0 0 0</pose>
<visual name='visual'>
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>/home/joe/git/lewis-crawler/Simulation/Meshes/LCFrame.dae</uri>
<scale>1 1 1</scale>
</mesh>
</geometry>
<material>
<lighting>1</lighting>
<script>
<uri>file://media/materials/scripts/gazebo.material</uri>
<name>Gazebo/Grey</name>
</script>
<shader type='pixel' />
</material>
<transparency>0</transparency>
<cast_shadows>1</cast_shadows>
</visual>
<collision name='collision'>
<laser_retro>0</laser_retro>
<max_contacts>10</max_contacts>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<mesh>
<uri>/home/joe/git/lewis-crawler/Simulation/Meshes/LCFrame.dae</uri>
<scale>1 1 1</scale>
</mesh>
</geometry>
</collision>
</link>
<link name="port_wheel">
<pose>0.1524 0 0.1016 0 1.5707 0</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
<link name="starboard_wheel">
<pose>-0.1524 0 0.1016 0 1.5707 0</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
<joint type="port_wheel" name="port_wheel_axle">
<pose>0 0 -0.03 0 0 0</pose>
<child>left_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
<joint type="starboard_wheel" name="starboard_wheel_axle">
<pose>0 0 0.03 0 0 0</pose>
<child>right_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
<static>0</static>
<allow_auto_disable>1</allow_auto_disable>
</model>
</sdf>

View File

@ -1,106 +0,0 @@
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor/>
<created>2022-03-11T12:26:21.628371</created>
<modified>2022-03-11T12:26:21.628375</modified>
<unit name="meter" meter="1.0"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_effects>
<effect id="effect_Body" name="effect_Body">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color>0.0 0.0 0.0 1.0</color>
</emission>
<ambient>
<color>0.0 0.0 0.0 1.0</color>
</ambient>
<diffuse>
<color>0.800000011920929 0.800000011920929 0.800000011920929 1.0</color>
</diffuse>
<specular>
<color>1 1 1 1.0</color>
</specular>
<shininess>
<float>0.0</float>
</shininess>
<reflective>
<color>0.0 0.0 0.0 1.0</color>
</reflective>
<reflectivity>
<float>0.0</float>
</reflectivity>
<transparent>
<color>0.0 0.0 0.0 1.0</color>
</transparent>
<transparency>
<float>1.0</float>
</transparency>
</phong>
</technique>
<extra>
<technique profile="GOOGLEEARTH">
<double_sided>0</double_sided>
</technique>
</extra>
</profile_COMMON>
</effect>
</library_effects>
<library_geometries>
<geometry id="geometry0" name="Body">
<mesh>
<source id="cubeverts-array0">
<float_array count="273" id="cubeverts-array0-array">0 0 0 0 0.0254 -4.3e-17 0.0254 0.0254 -3.7e-17 0.3048 0 0 0.2794 0.0254 -3.7e-17 0.3048 0.0254 -4.3e-17 0 1.28e-16 0.1651 0 0.0254 0.1651 -1.5e-17 0.0254 0.1397 -3e-18 0.0254 0.0254 0.3048 0.0254 0.0254 0.3048 0.0254 0.1397 0.3048 1.28e-16 0.1651 0.3048 0.0254 0.1651 0.0254 1.09e-16 0.1397 0.0254 2e-17 0.0254 0.2794 1.09e-16 0.1397 0.2794 2e-17 0.0254 0 0.5842 -1.258e-15 0.0254 0.5842 -9.98e-16 0.0254 0.0254 0.0254 0.2794 0.0254 0.0254 0.3048 0.5842 -1.258e-15 0.2794 0.5842 -9.98e-16 0.2794 0.0254 0.1651 0.1778 0.0254 0.1651 0.0254 0.0254 0.1651 0 0.5842 0.1397 -3.1e-17 0.1778 0.1397 0 0.5842 0.1651 -6e-18 0.1778 0.0254 0 0.5842 0.0254 0.3048 0.5842 0.0254 0.3048 0.1778 0.0254 0.3048 0.1778 0.1397 0.3048 0.5842 0.1397 0.3048 0.5842 0.1651 0.2794 0.0254 0.1397 0.0254 0.0254 0.1397 0.0254 0.5842 0.0254 0 0.6096 -1.176e-15 0.3048 0.6096 -1.176e-15 0.2794 0.5842 0.0254 0.2794 0.127 0.1651 0.2794 0.5842 0.1651 0.1778 0.127 0.1651 0.1778 0.0254 0.15875 0.2794 0.0254 0.15875 0.0254 0.5842 0.1651 0.0254 0.5842 0.1397 0.00635 0.1778 0.1397 0.00635 0.0254 0.1397 0 0.6096 0.1651 0 0.6096 0.1397 0.00635 0.1778 0.0254 0.00635 0.0254 0.0254 0.29845 0.1778 0.0254 0.29845 0.0254 0.0254 0.3048 0.6096 0.1397 0.3048 0.6096 0.1651 0.29845 0.1778 0.1397 0.2794 0.5842 0.1397 0.29845 0.0254 0.1397 0.0254 0.6096 0.0254 0.0254 0.6096 0.1397 0.2794 0.6096 0.0254 0.2794 0.6096 0.1397 0.2794 0.127 0.15875 0.2751267 0.6096 0.1651 0.02967325 0.6096 0.1651 0.1778 0.127 0.15875 0.1778 0.127 0.15875 0.2794 0.127 0.15875 0.1030465 0.7802151 0.1397 0.1524 0.8619303 0.1651 0.1524 0.8619303 0.1397 0.2017535 0.7802151 0.1397 0.02967325 0.6096 0.1397 0.1327197 0.7802151 0.1397 0.2751267 0.6096 0.1397 0.1720803 0.7802151 0.1397 0.1524 0.8128 0.1651 0.1016 0.7802151 0.1397 0.2032 0.7802151 0.1397 0.2032 0.8945151 0.1397 0.1016 0.8945151 0.1397 0.1524 0.8128 0.1397 0.1016 0.7802151 0.13335 0.2032 0.7802151 0.13335 0.1016 0.8945151 0.13335 0.2032 0.8945151 0.13335</float_array>
<technique_common>
<accessor count="91" source="#cubeverts-array0-array" stride="3">
<param type="float" name="X"/>
<param type="float" name="Y"/>
<param type="float" name="Z"/>
</accessor>
</technique_common>
</source>
<source id="cubenormals-array0">
<float_array count="594" id="cubenormals-array0-array">2.362205e-16 -1.692914e-15 -1 -2.362205e-16 -1.692913e-15 -1 -0 -1.456693e-15 -1 0 -1.456693e-15 -1 -1 0 5.90551e-16 -1 -1.312335e-17 -1.049869e-16 -1 -1.999504e-31 -1.181102e-16 -1 -5.905512e-16 4.578471e-31 1 -0 0 1 0 0 1 -0 0 1 0 0 2.725684e-17 -1 7.752877e-16 8.748921e-18 -1 7.786527e-16 0 -1 7.480312e-16 0 -1 7.480312e-16 0 -1 7.874015e-16 -8.748847e-18 -1 7.786527e-16 -2.725685e-17 -1 7.752877e-16 0 -1 7.874016e-16 2.362205e-16 -2.174302e-15 -1 1.023622e-14 -1.719757e-15 -1 0 1 0 0 1 0 -2.362206e-16 -2.174302e-15 -1 -1.023622e-14 -1.719757e-15 -1 0 -0 1 -0 0 1 0 0 1 0 0 1 0 0 1 -1 7.627952e-17 0 -1 -1.049869e-16 5.905509e-16 -1 0 1.220472e-15 -1 -1.968504e-17 -2.187227e-16 -1 -1.049869e-16 -1.049869e-16 -1 1.476378e-17 0 -1 -1.968504e-17 -1.181102e-16 -1 -5.136147e-31 -2.362205e-16 1 0 0 1 -0 0 1 -0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 0 1 0 0 1 1 0 0 1 -0 0 1 -0 0 1 -0 0 1.023622e-14 3.228349e-15 -1 0 -7.007887e-15 -1 -0 -7.007887e-15 -1 -1.023622e-14 3.228349e-15 -1 -1 0 0 -1 0 0 0 0 1 0 0 1 0 -0 1 -0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 -0 0 1 -0 0 -1 0 0 -1 0 0 -1 0 -0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 -0 0 -0 1 0 0 1 0 0 1 0 -0 1 -0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 -0 0 1 -0 0 -0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 -0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 -0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 -0 1 -0 0 1 0 -0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -0 1 0 0 1 0 0 0 -1 0 0 -1 1 -0 0 1 0 0 1 0 0 1 -0 0 0 -1 0 0 -1 0 -0.85599 0.5169924 0 -0.85599 0.5169924 0 -0.85599 0.5169924 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0.8559899 0.5169926 0 0.85599 0.5169923 0 0.85599 0.5169924 5.217055e-07 0 0 1 -0 0 1 0 0 -1 0 0 -1 0 0 -1 1 -0 0 1 0 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 -0 -1 0 0 -1 0 -0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 -0 0 1 -0 0 1 0 0 1 -0 -0 -1 0 0 -1 -0 0 -1 0 0 -1 0.85599 -0.5169924 0 0.8559901 -0.5169923 0 0.85599 -0.5169924 1.214709e-07 -0 -1 0 -0 -1 0 0 -1 0 0 -1 0 -0 -1 -0 -0 -1 -0 -0.8559899 -0.5169927 0 -0.85599 -0.5169923 -0 -0.85599 -0.5169924 -3.239225e-07 -1 0 0 -1 0 0 0 1 0 -0 1 0 1 0 0 1 0 0 0 0 1 0 0 -1 0 0 -1</float_array>
<technique_common>
<accessor count="198" source="#cubenormals-array0-array" stride="3">
<param type="float" name="X"/>
<param type="float" name="Y"/>
<param type="float" name="Z"/>
</accessor>
</technique_common>
</source>
<vertices id="cubeverts-array0-vertices">
<input semantic="POSITION" source="#cubeverts-array0"/>
</vertices>
<triangles count="198" material="ref_Body">
<input offset="0" semantic="VERTEX" source="#cubeverts-array0-vertices"/>
<input offset="1" semantic="NORMAL" source="#cubenormals-array0"/>
<p>0 0 1 0 2 0 3 1 4 1 5 1 3 2 0 2 2 2 3 3 2 3 4 3 6 4 7 4 8 4 0 5 8 5 9 5 0 6 9 6 1 6 0 7 6 7 8 7 3 8 5 8 10 8 11 9 3 9 10 9 12 10 11 10 13 10 12 11 3 11 11 11 0 12 14 12 6 12 15 13 14 13 0 13 16 14 12 14 6 14 16 15 6 15 14 15 17 16 15 16 0 16 3 17 16 17 17 17 3 18 12 18 16 18 3 19 17 19 0 19 2 20 1 20 18 20 2 21 18 21 19 21 20 22 4 22 2 22 21 23 4 23 20 23 5 24 4 24 22 24 22 25 4 25 23 25 12 26 13 26 24 26 25 27 12 27 24 27 6 28 25 28 26 28 6 29 26 29 7 29 6 30 12 30 25 30 27 31 28 31 29 31 8 32 7 32 28 32 7 33 29 33 28 33 30 34 9 34 28 34 9 35 8 35 28 35 30 36 31 36 18 36 1 37 9 37 30 37 18 38 1 38 30 38 32 39 33 39 22 39 10 40 5 40 33 40 5 41 22 41 33 41 34 42 10 42 33 42 34 43 11 43 10 43 34 44 35 44 36 44 13 45 11 45 34 45 36 46 13 46 34 46 37 47 14 47 38 47 16 48 14 48 37 48 17 49 16 49 37 49 17 50 37 50 21 50 15 51 17 51 21 51 15 52 21 52 20 52 14 53 15 53 20 53 14 54 20 54 38 54 2 55 19 55 39 55 20 56 2 56 39 56 19 57 18 57 40 57 23 58 40 58 41 58 23 59 19 59 40 59 22 60 23 60 41 60 23 61 4 61 42 61 4 62 21 62 42 62 43 63 36 63 44 63 24 64 13 64 43 64 13 65 36 65 43 65 45 66 25 66 43 66 43 67 25 67 24 67 25 68 46 68 26 68 26 69 46 69 38 69 47 70 37 70 46 70 37 71 38 71 46 71 7 72 26 72 29 72 29 73 26 73 48 73 49 74 50 74 27 74 50 75 28 75 27 75 38 76 51 76 50 76 49 77 38 77 50 77 27 78 29 78 52 78 27 79 52 79 53 79 31 80 53 80 40 80 31 81 27 81 53 81 18 82 31 82 40 82 30 83 50 83 54 83 30 84 28 84 50 84 54 85 39 85 31 85 30 86 54 86 31 86 55 87 20 87 54 87 20 88 39 88 54 88 42 89 56 89 32 89 56 90 33 90 32 90 21 91 57 91 56 91 42 92 21 92 56 92 32 93 22 93 41 93 58 94 32 94 41 94 35 95 58 95 59 95 35 96 32 96 58 96 36 97 35 97 59 97 60 98 34 98 56 98 56 99 34 99 33 99 60 100 61 100 35 100 34 101 60 101 35 101 62 102 37 102 60 102 37 103 61 103 60 103 62 104 57 104 37 104 37 105 57 105 21 105 38 106 20 106 51 106 51 107 20 107 55 107 42 108 39 108 19 108 23 109 42 109 19 109 53 110 63 110 40 110 64 111 63 111 53 111 58 112 65 112 66 112 63 113 65 113 40 113 58 114 41 114 65 114 65 115 41 115 40 115 67 116 43 116 44 116 67 117 44 117 61 117 37 118 47 118 67 118 61 119 37 119 67 119 44 120 36 120 59 120 44 121 59 121 68 121 69 122 44 122 68 122 48 123 69 123 52 123 48 124 44 124 69 124 29 125 48 125 52 125 25 126 70 126 46 126 25 127 45 127 70 127 45 128 43 128 70 128 70 129 43 129 67 129 47 130 71 130 72 130 46 131 71 131 47 131 26 132 38 132 48 132 48 133 38 133 49 133 51 134 55 134 54 134 51 135 54 135 50 135 31 136 49 136 27 136 39 137 49 137 31 137 52 138 73 138 53 138 73 139 74 139 75 139 52 140 74 140 73 140 62 141 60 141 57 141 57 142 60 142 56 142 42 143 35 143 61 143 32 144 35 144 42 144 74 145 76 145 75 145 76 146 59 146 58 146 74 147 59 147 76 147 39 148 42 148 63 148 63 149 42 149 65 149 77 150 73 150 78 150 64 151 73 151 77 151 53 152 73 152 64 152 49 153 39 153 64 153 64 154 39 154 63 154 42 155 66 155 65 155 42 156 61 156 66 156 66 157 76 157 58 157 79 158 80 158 76 158 79 159 76 159 66 159 44 160 48 160 49 160 61 161 44 161 49 161 81 162 59 162 74 162 81 163 68 163 59 163 81 164 52 164 69 164 74 165 52 165 81 165 68 166 79 166 69 166 69 167 79 167 77 167 75 168 82 168 73 168 75 169 76 169 83 169 75 170 83 170 84 170 85 171 75 171 84 171 85 172 82 172 75 172 66 173 61 173 79 173 61 174 77 174 79 174 77 175 49 175 64 175 61 176 49 176 77 176 78 177 69 177 77 177 81 178 78 178 86 178 81 179 69 179 78 179 73 180 82 180 87 180 78 181 73 181 87 181 88 182 80 182 78 182 88 183 78 183 87 183 76 184 80 184 88 184 83 185 76 185 88 185 80 186 81 186 86 186 68 187 80 187 79 187 68 188 81 188 80 188 87 189 85 189 89 189 82 190 85 190 87 190 89 191 84 191 90 191 85 192 84 192 89 192 84 193 83 193 88 193 84 194 88 194 90 194 86 195 78 195 80 195 87 196 89 196 88 196 88 197 89 197 90 197</p>
</triangles>
</mesh>
</geometry>
</library_geometries>
<library_materials>
<material id="mat_Body" name="Body">
<instance_effect url="#effect_Body"/>
</material>
</library_materials>
<library_visual_scenes>
<visual_scene id="myscene">
<node id="node0" name="node0">
<instance_geometry url="#geometry0">
<bind_material>
<technique_common>
<instance_material symbol="ref_Body" target="#mat_Body"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#myscene"/>
</scene>
</COLLADA>

Binary file not shown.

View File

@ -0,0 +1,22 @@
Setting up getty override
=========================
```console
systemctl edit getty@tty1.service
```
add
```
[Service]
ExecStart=
ExecStart=-/opt/lewis-crawler/companion_software/dashboard/entrypoint.sh
StandardInput=tty
StandardOutput=tty
```
then
```
systemctl daemon-reload; systemctl restart getty@tty1.service
```

View File

@ -0,0 +1,9 @@
#!/bin/bash
cd /opt/lewis-crawler/companion_software
git pull
pipenv install -r requirements.txt
pipenv run python -m houston -v

View File

@ -0,0 +1,43 @@
# Lewis Crawler
# 2021 - 2022
# Kitsune Scientific
import logging
import argparse
import verboselogs
import coloredlogs
from houston.houston import Houston
# Get debug args
parser = argparse.ArgumentParser()
parser.add_argument(
'-d', '--debug',
help="Print lots of debugging statements",
action="store_const", dest="loglevel", const='DEBUG',
default='WARNING',
)
parser.add_argument(
'-v', '--verbose',
help="Be verbose",
action="store_const", dest="loglevel", const='INFO',
)
args = parser.parse_args()
# Install verbose logs
verboselogs.install()
# Create a logger object.
logger = logging.getLogger('Houston_Log')
# Install colored logs
coloredlogs.install(level=args.loglevel,
logger=logger,
fmt='%(asctime)s,%(msecs)03d %(hostname)s %(levelname)s %(message)s') # noqa: E501
logger.info('Lewis Companion Software Started.')
if __name__ == '__main__':
app = Houston(logger)
app.run()

View File

@ -0,0 +1,30 @@
# Lewis Crawler
# 2021 - 2022
# Kitsune Scientific
import time
from houston.robotstreamer.streamer import RobotStreamer
class Houston:
def __init__(self, logger):
# Setup logger
self.log = logger
# Setup robotstreamer
self.rs = RobotStreamer(self.log)
# We're ready to go!
self.log.success('Ready to robot!')
def run(self):
self.rs.run()
# Junk~
while True:
try:
self.log.debug('Nothing to do.')
time.sleep(1)
except KeyboardInterrupt:
break

View File

@ -0,0 +1,3 @@
# Lewis Crawler
# 2021 - 2022
# Kitsune Scientific

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -0,0 +1 @@
ffmpeg -f image2 -loop 1 -framerate 25 -video_size 1280x720 -r 25 -i Test-Pattern.jpg -vcodec libx264 -profile:v main -preset:v medium -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -b:v 2500k -maxrate 2500k -bufsize 2500k -sws_flags lanczos+accurate_rnd -acodec aac -b:a 96k -ar 48000 -ac 2 -f flv -maxrate 55k "rtmp://rtmp.robotstreamer.com/live/4619?key=jEquBubjizYDMQNe8nKjLdu88iqFpNe3sVQmGRJ2tzbxd4QJrkSSEZBQhi9UTL3k"

View File

@ -0,0 +1,30 @@
# Lewis Crawler
# 2021 - 2022
# Kitsune Scientific
import ffmpeg
class RobotStreamer:
def __init__(self, logger):
self.log = logger
def run(self):
self.log.debug('Running RobotStreamer')
stream = ffmpeg.input(
'houston/robotstreamer/resources/Test-Pattern.jpg',
f='image2',
loop='1',
framerate=25,
video_size='1280x720')
stream = ffmpeg.output(
stream,
'http://robotstreamer.com/<secret>/1280/720',
f='mpegts',
bf=0,
muxdelay=0.001,
codec='mpeg1video')
ffmpeg.run(stream)

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,79 @@
import time
from PIL import Image, ImageDraw, ImageFont
def testScreen(
x=1280, y=720,
image=None,
stripeList=["lightgrey",
"yellow",
"cyan",
"lightgreen",
"magenta",
"red",
"blue"]):
if image is None:
image = Image.new("RGB", (x, y))
draw = ImageDraw.Draw(image)
for i, stripe in enumerate(stripeList):
draw.rectangle((
(x/len(stripeList)) * i, 0,
(x/len(stripeList)) * (i + 1), x),
fill=stripe)
draw.rectangle((
0, y - (y/3),
x, y),
fill="black")
for i, stripe in enumerate(stripeList):
if i % 2 != 0:
_fill = "black"
else:
_fill = stripeList[len(stripeList) - i - 1]
draw.rectangle((
(x/len(stripeList)) * i, y - (y/3.1),
(x/len(stripeList)) * (i + 1), y - (y/4.9)),
fill=_fill)
draw.rectangle((
(x/(len(stripeList)/4)), y - (y/5.3),
(0), y),
fill="darkblue")
draw.rectangle((
(x/(len(stripeList)/2)), y - (y/5.3),
(x/(len(stripeList)/1)), y),
fill="white")
return image
def drawText(image):
# get a font
fnt = ImageFont.truetype("FreeMono.ttf", 50)
# get a drawing context
d = ImageDraw.Draw(image)
# draw multiline text
d.multiline_text((10, 10), str(time.time()), font=fnt, fill=(0, 0, 0))
return image
if __name__ == '__main__':
blank_screen = testScreen()
while True:
annotated_image = drawText(blank_screen.copy())
annotated_image.save('Test-Pattern.png')
time.sleep(2)
# testScreen().save('Test-Pattern.png')

View File

@ -0,0 +1 @@
ffmpeg -re -f image2 -loop 1 -framerate 25 -video_size 1280x720 -r 25 -i Test-Pattern.png -c:v libx264 -b:v 1M -g 50 -bf 0 -muxdelay 0.001 -f flv "rtmp://rtmp.robotstreamer.com/live/4619?key=jEquBubjizYDMQNe8nKjLdu88iqFpNe3sVQmGRJ2tzbxd4QJrkSSEZBQhi9UTL3k"

View File

@ -0,0 +1,3 @@
coloredlogs
verboselogs
ffmpeg-python

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,14 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
picamera = "*"
PySSTV = "*"
pyotp = "*"
[dev-packages]
[requires]
python_version = "3.9"

View File

@ -0,0 +1,88 @@
{
"_meta": {
"hash": {
"sha256": "bd19925493e125dc5aa15b339778c61c21e0f1a5574097d1721abf99245fa605"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.9"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"picamera": {
"hashes": [
"sha256:890815aa01e4d855a6a95dd3ad0953b872a6b954982106407df0c5a31a163e50"
],
"index": "pypi",
"version": "==1.13"
},
"pillow": {
"hashes": [
"sha256:0b2efa07f69dc395d95bb9ef3299f4ca29bcb2157dc615bae0b42c3c20668ffc",
"sha256:114f816e4f73f9ec06997b2fde81a92cbf0777c9e8f462005550eed6bae57e63",
"sha256:147bd9e71fb9dcf08357b4d530b5167941e222a6fd21f869c7911bac40b9994d",
"sha256:15a2808e269a1cf2131930183dcc0419bc77bb73eb54285dde2706ac9939fa8e",
"sha256:196560dba4da7a72c5e7085fccc5938ab4075fd37fe8b5468869724109812edd",
"sha256:1c03e24be975e2afe70dfc5da6f187eea0b49a68bb2b69db0f30a61b7031cee4",
"sha256:1fd5066cd343b5db88c048d971994e56b296868766e461b82fa4e22498f34d77",
"sha256:29c9569049d04aaacd690573a0398dbd8e0bf0255684fee512b413c2142ab723",
"sha256:2b6dfa068a8b6137da34a4936f5a816aba0ecc967af2feeb32c4393ddd671cba",
"sha256:2cac53839bfc5cece8fdbe7f084d5e3ee61e1303cccc86511d351adcb9e2c792",
"sha256:2ee77c14a0299d0541d26f3d8500bb57e081233e3fa915fa35abd02c51fa7fae",
"sha256:37730f6e68bdc6a3f02d2079c34c532330d206429f3cee651aab6b66839a9f0e",
"sha256:3f08bd8d785204149b5b33e3b5f0ebbfe2190ea58d1a051c578e29e39bfd2367",
"sha256:479ab11cbd69612acefa8286481f65c5dece2002ffaa4f9db62682379ca3bb77",
"sha256:4bc3c7ef940eeb200ca65bd83005eb3aae8083d47e8fcbf5f0943baa50726856",
"sha256:660a87085925c61a0dcc80efb967512ac34dbb256ff7dd2b9b4ee8dbdab58cf4",
"sha256:67b3666b544b953a2777cb3f5a922e991be73ab32635666ee72e05876b8a92de",
"sha256:70af7d222df0ff81a2da601fab42decb009dc721545ed78549cb96e3a1c5f0c8",
"sha256:75e09042a3b39e0ea61ce37e941221313d51a9c26b8e54e12b3ececccb71718a",
"sha256:8960a8a9f4598974e4c2aeb1bff9bdd5db03ee65fd1fce8adf3223721aa2a636",
"sha256:9364c81b252d8348e9cc0cb63e856b8f7c1b340caba6ee7a7a65c968312f7dab",
"sha256:969cc558cca859cadf24f890fc009e1bce7d7d0386ba7c0478641a60199adf79",
"sha256:9a211b663cf2314edbdb4cf897beeb5c9ee3810d1d53f0e423f06d6ebbf9cd5d",
"sha256:a17ca41f45cf78c2216ebfab03add7cc350c305c38ff34ef4eef66b7d76c5229",
"sha256:a2f381932dca2cf775811a008aa3027671ace723b7a38838045b1aee8669fdcf",
"sha256:a4eef1ff2d62676deabf076f963eda4da34b51bc0517c70239fafed1d5b51500",
"sha256:c088a000dfdd88c184cc7271bfac8c5b82d9efa8637cd2b68183771e3cf56f04",
"sha256:c0e0550a404c69aab1e04ae89cca3e2a042b56ab043f7f729d984bf73ed2a093",
"sha256:c11003197f908878164f0e6da15fce22373ac3fc320cda8c9d16e6bba105b844",
"sha256:c2a5ff58751670292b406b9f06e07ed1446a4b13ffced6b6cab75b857485cbc8",
"sha256:c35d09db702f4185ba22bb33ef1751ad49c266534339a5cebeb5159d364f6f82",
"sha256:c379425c2707078dfb6bfad2430728831d399dc95a7deeb92015eb4c92345eaf",
"sha256:cc866706d56bd3a7dbf8bac8660c6f6462f2f2b8a49add2ba617bc0c54473d83",
"sha256:d0da39795049a9afcaadec532e7b669b5ebbb2a9134576ebcc15dd5bdae33cc0",
"sha256:f156d6ecfc747ee111c167f8faf5f4953761b5e66e91a4e6767e548d0f80129c",
"sha256:f4ebde71785f8bceb39dcd1e7f06bcc5d5c3cf48b9f69ab52636309387b097c8",
"sha256:fc214a6b75d2e0ea7745488da7da3c381f41790812988c7a92345978414fad37",
"sha256:fd7eef578f5b2200d066db1b50c4aa66410786201669fb76d5238b007918fb24",
"sha256:ff04c373477723430dce2e9d024c708a047d44cf17166bf16e604b379bf0ca14"
],
"markers": "python_version >= '3.6'",
"version": "==8.3.1"
},
"pyotp": {
"hashes": [
"sha256:9d144de0f8a601d6869abe1409f4a3f75f097c37b50a36a3bf165810a6e23f28",
"sha256:d28ddfd40e0c1b6a6b9da961c7d47a10261fb58f378cb00f05ce88b26df9c432"
],
"index": "pypi",
"version": "==2.6.0"
},
"pysstv": {
"hashes": [
"sha256:91f85096591606e774811de8940aef57f30e10cbf81387064f8a686cff0ac3fa"
],
"index": "pypi",
"version": "==0.5.2"
}
},
"develop": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB