UPDATE: Sign ups will be closed at midnight PST. Join us on our YouTube stream.
Nov 13th 2021 10am to 3pm PST
Still plenty of slots open!
Pick up a throttle(virtually) to take a virtual spin around the Silicon Valley Lines layout for our Fall 2021 open house event. This event is open to all ages, first time operators and professionals alike.
What: SVLs Virtual open house where you can take control of a train on our 23’x73′ layout and get a engineers POV of our layout and a light demonstration of our virtual operating sessions ran monthly.
When: Saturday November 13th from 10am to 3pm PST in half hour running blocks.
Where: Your home, office, RV on a camping trip with good camp ground WiFi, another club, etc. The virtual throttle and camera feed can be run from an Android/iOS phone or tablet or a Windows/Mac/Linux based computer running a modern browser like Chrome or Safari.
How: Use this link to sign up, information will follow before the Open House.
If you are unsure about participating we have some demonstration and examples below.
Raspberry Pi OS Bullseye breaks the following instructions.
As Silicon Valley Lines adapts to the current global pandemic, it has become clear we will not be meeting as a full club in person for some time. This has spurred our search for a solution to allow us to run operating sessions and have fun with trains as SVL is foremost a operating layout. We tried a few approaches but it quickly became apparent that we need to give remote operators a way to get immersed with running a train on the layout. We wanted to provide a view from the locomotive cab that is fast and responsive. Thus the SVL CabCam Project was born. In addition we provide layout overview cameras and/or views from key locations on the railroad.
This write-up is the result of a lot of trial and error, getting products fully running then realizing the end-to-end latency was so severe it wouldn’t be workable. It is intended as a general overview for hobbyists wishing to get a track-level view of their own layout, and provides technical instructions for replicating our approach.
A cab view camera is useful for more than remote operations during COVID. Local ops sessions can benefit from this as well.
We describe how to set up a small computer to stream cab view video from an HO locomotive. This allows remote operation of trains at local or remote layouts, optionally connecting it to video conferencing software like Google Meet or Zoom.
Easy to set up and maintain.
Easy to access the cab view via a URL or via conference software eg. Zoom or Meet.
Distribute the setup to others for the betterment of the hobby.
Provide a low latency video stream to enable remote control via Engine Driver/WiThrottle
Keep the hardware within HO NMRA clearances.
Use commonly available components and open-source software where possible.
Hardware: We are using one Raspberry Pi Zero WH per CabCam car.
Camera: The Pi Zero Spy Camera works well for our purposes.
Software: The project uses Raspian Buster running MJPG Streamer on the CabCam car. This streams video from a URL on the local network. The video can be viewed locally or streamed to conference software via OBS and the OBS VirtualCam plugin.
Power: The Juiceb0x Zero is a “hat” for the Pi Zero. While the Pi Zero WH comes with the required header already installed, soldering is required to install header pins on the Juiceb0x Zero board.
Rolling Stock: The easiest approach is build a mounting sled out of styrene as shown below. With a little bit more work the setup can be installed inside a dummy engine, too.
This section describes the setup in more detail. Some familiarity with Raspberry Pi and respective software management is helpful.
Connect the camera to the Pi Zero WH. Solder the header pins to the Juiceb0x Zero per the instructions that come with it and attach it to the Pi Zero WH. Connect the battery to the Juiceb0x Zero. Connect the USB charger to the Juiceb0x Zero to charge the battery.
Never connect power to the USB ports of the Pi Zero WH while the Juiceb0x Zero is attached.
Run the software and select Choose OS, then Raspberry Pi OS (Other) and select Raspberry Pi OS Lite. Next Select your SD Card via Choose SD Card and hit Write. Once it is done writing, eject and reinsert the SD card into your computer.
4. WiFi Setup
Now we will configure wifi for your home or club network. With a text editor create (or edit) a file named wpa_supplicant.conf in the boot folder on the SD card. Paste the following text to this file.
Change the country code to your two character country code per the ISO 3166 alpha-2 country code. For many of us it will likely be US or GB. SSID refers to your wifi network name and PSK is your network’s password. Make the respective changes for your network and save the file.
To enable SSH access create an empty file called ssh in the boot folder on the SD card.
Eject and remove the SD card from your computer, insert it into the Pi, and power up the Pi by moving the small slider switch on the Juiceb0x Zero to On. The blue LED on the Juiceb0x Zero should light up, and you should see flashing green lights. Some cameras have LEDs on the connector strip, those should light up briefly as well. Give the Pi about two minutes to boot up.
5. Logging in to the Pi
Find the IP address your Pi is using and log in using ssh as user pi.
The default password is raspberry.
On a Mac use Terminal. On Windows use PuTTY (you may have to download it) and put in the IP of your Pi in the Hostname block. When you connect, the default username is pi and the password is raspberry.
On many networks the following also works:
6. Configuring the Pi
Once on the Pi command line type
to enter the configuration page for the Pi. First enter Change User Password and enter a new password if you want to secure the device. Next enter Network Options, select Hostname, and give your Pi a unique name like LayoutCabCam1 or similar. This is helpful to identify which Pi is which if your network supports hostnames. Next select Interfacing Options, select P1 Camera, and enable the camera interface. The last thing to do in the configurator is to expand the file system. Go to Advanced and select A1 Expand Filesystem. After that finishes, exit the configurator and allow the Pi to reboot.
7. Configuring MJPG Streamer
Now we are going to configure the software to allow us to stream the cab POV.
Log back into your Pi and run the following commands
to test the stream with the most basic settings. This should output some stuff on your terminal to let you know it is working. Point the browser on your computer to http://IP:8080?action=stream (replace IP with the IP address for the Pi from earlier). If you see output from your camera you are ready to move on. In the terminal, hit Ctrl+C to close the stream.
The following command uses the parameters we set at SVL.
The Internet uplink bandwidth at SVL is quite limited. For cab control with remote operators we found that SD resolution is sufficient and limits bandwidth demand. We are using a frame rate of 10 images per second. The stream doesn’t get smoother turning this up. If your camera is upside down you may need to insert -rot 180 before -fps.
We want to turn on the stream at on startup. A small startup script will get us there.
Hit CTRL+X to leave the editor, hit Y and Enter to write the file to the SD card.
Make this file executable with
sudo chmod a+x /home/pi/startcam.sh
To cause the camera stream to start whenever the Pi boots, edit the /etc/rc.local file. To do this run
sudo nano /etc/rc.local
and add /home/pi/startcam.sh close to the bottom of the file right above the exit 0 command. Exit the editor with CTRL+X Y Enter.
Reboot the Pi with sudo shutdown -r now. After reboot you should be able to see the stream in your browser at the URL you used above. After placing the camera on a flatcar, it should look something like this.
Put your CabCam car on the front of a train, and run the train while watching the video stream in the browser.
Bernhard wrote down some thoughts on camera placement and car choice on his blog.
9. What’s Next?
To stream the video to remote operators we use OBS with the VirtualCam plugin, configured with CabCam feeds. This is connected to Google Meet and can even stream to Youtube Live. Other video conferencing software like Zoom, Duo, Skype, etc. can be used, too. Remote operators join the video conference and use Engine Driver or WiThrottle to control trains via JMRI. We’ll cover that in a separate post.
Hardware: While we are using a Raspberry Pi Zero WH, any Pi with built-in Wifi will work.
Camera: Any compatible Raspberry Pi camera can be made to work. Possible options are the official Pi camera, the spy cameras, or other compatible cameras available from e.g. Adafruit.
Power: The Zero2Go board is an alternative to the Juiceb0xZero. However, the Zero2Go can’t charge the battery. In either case, do not power the Pi from the onboard USB while the power solution board is attached.
Some people had success with using a small form-factor USB power bank connected to a Pi Zero without additional hardware.
Over time we have made corrections to these instructions, or fine tuned settings. Below is a list of important revisions.
Fixed a bug with double quotes in the startcam.sh example above.
Reduced video resolution from 640×480@15fps to 480×360@10fps to help with bandwidth usage in certain Wifi environments.
At Silicon Valley Lines the layout is always changing in some way. Hemet is only a few years old and has come a long way. Silicon is another area under construction, it has had quite a lot going on for a long time but its been lacking the details.
About a year ago Silicon was selected as the group project space and progress has been mainly planning. Progress has been going steady at the north end of Silicon with the Mount Nickols. This has been balanced by the work going on in the south by Ravine.
This stretch of land was Homasote Central and recently started getting some scenery. First the rocks get a test fit.
After that some sculptamold gets added and the rocks set into it. After some paints and washes with some ground foam sprinkled on top the rocks get painted. A dry brushing of a light gray brings out the rocks highlights.
Once everything is dry the next step is static grass, a rather shocking way to charge the scenery up a notch.
Everything can be left to dry or if you short on time you can move onto the next step and add small brush etc.
A hour or two of work goes a long way to making a empty area seem alive. It has some more work but at this point it is presentable.
This post was originally started in February 2020 but then the world changed and the remaining work for this area has been put on hold.