A little script to wake up all Mikrotik devices on your network that have a DHCP lease, using Wake On LAN.
It may be a good idea to set your DHCP lease expiry to something long like 7 days. A short expiry may mean dynamic leases have expired if the device has been switched off for some time.
It should also wake up any devices with static leases, so you could also set all your devices as static in your DHCP.
For a long time I have wanted to build a remote controlled robot car capable of being controlled via the Internet, at long ranges using 4G/LTE cellular connectivity. So I did.
The robot is capable of connecting to the Internet using Wi-Fi. I was able to slightly increase the effective Wi-Fi range by using a Mikrotik router and altering the hardware retries setting and frame life settings. The intention was to quickly recover from transmission errors and avoid congestion. This discarded video packets that could not be delivered in real time, and kept the network clear for when transmission would be successful. I also used iptables and mangle to alter the DSCP of the live video stream packets with the same intention.
To enable a long range connection, I used Twilio Programmable Wireless to connect to local 4G/LTE cellular networks. I substantially lowered the data rate to around 250 Kbps to make transmission more reliable and reduce costs, and was able to get a virtually flawless live feed.
The live video and audio stream uses FFMPEG for compression and streaming, and has a plethora of settings to tune. I took the time to tune bitrate, buffering, keyframe interval. I also ensured the web camera was able to natively encode video with UVC at the selected resolution to reduce the load on the Raspberry Pi’s CPU. Video latency was often under a second, which is impressive especially considering the round trip involved.
The control system uses Let’s Robot (now Remo.tv), based at Circuit Launch in California, which has a community of robot builders who love to create and share their devices. The programming language of choice is Python, and I also linked to an existing API I had created in JavaScript with Node and PM2.
Mission 1
The first 4G/LTE long range mission was successful, and the
webcam was good enough to be used at night. Different members of the community
took turns to drive the robot. It didn’t always drive straight, so we had to
drive forward and turn to the left at regular intervals. The robot drove for around
30 minutes, and then got stuck when it fell down a sidewalk. I had to quickly
drive to retrieve it =)
Mission 2
The second mission was intended to drive from my location to
a friend working at a local business. However half way through the mission, a
suspicious member of the public grabbed the robot, threw it in a trash can, and
called the police. I waited for the police and calmly explained that the robot
was an educational project in telepresence, and also told the person reporting
the robot that there were no hard feelings, despite interfering and damaging my
personal property.
Mission 3
As part of the community site, it is common to leave your robot open to be controlled. While unattended, a sneaky individual drove my robot into a void of the house and managed to get it covered in spider webs and other filth, as you can see below. Thanks.
I found that cats were very curious about the robot invading their territory, as you can see below:
I was very pleased with how the project worked, and had the opportunity to use Python, Node, and fine-tune wireless networking and live video streaming, and of course remotely control the robot as I had wanted to do for a long time.
If you want to build your own robot, the guide to ‘building a Bottington’ is a great place to start.
Update: Twilio saw this post and gave me a $20.00 credit. Thank you 😁