Articles tagged with Networking:

  • Eyepot - Programming

    Let's program the robot I built in the previous article!

    The Eyepot works by using in conjunction a Raspberry Pi Zero W and an Arduino Pro Mini connected by a serial link. Therefore, we'll write the Arduino code first, then a Python program for the Raspberry Pi. Then, we'll setup remote control from a web browser.

    You can find the entire source code for the project licensed under GPLv3 on my repository on GitHub.

    The finished Eyepot moving

    The finished Eyepot moving

    Arduino program

    The Arduino Pro Mini is responsible for driving the eight servos of the legs. Commands to specify target angles are sent from the Raspberry Pi through a serial link.

    The custom serial protocol is text-based and quite simple. It can easily be typed manually when debugging, but it is still compact enough to allow short transmission times even at low bitrates. Each line contains a one-character command, an optional space, and an optional parameter as a base-10 integer. Implemeted commands are as follows:

    • 0 to 7: store target angle for corresponding servo (0 to 7)
    • R: reset stored target angle to default for each servo
    • C: commit stored target angles (apply the stored angle for each servo)

    So, for instance …


  • A telepresence robot - Enhancements

    In this article, I'm going to describe architecture enhancements for the control system of the WebRTC-controlled telepresence robot I built a few months ago, presented in a previous article.

    The four-wheel base of the telepresence robot

    The four-wheel base of the telepresence robot

    Since I did not manage to have a satisfying WebRTC support directly in a native Android app, I previously settled for a hack where the smartphone of the Telebot uses two different connections to the signaling channel: one to receive user control in the Android app, and one to handle the WebRTC session in the browser.

    This was bad for two reasons:

    • The robot can enter an incoherent state if one connection is closed and not the other.
    • User control commands do not benefit from WebRTC, instead they travel through the server, adding latency and jitter.

    The idea for the new architecture is to have the Android app run a small HTTP server in background that can accept motor control commands and send them to the Bluetooth device. We will send users commands on an RTCDataChannel and forward them to this small HTTP server with JavaScript in the browser.

    General schematic of the enhanced architecture

    General schematic of the enhanced architecture

    Let's put together a tiny single-threaded HTTP server for …


  • Streaming from Linux to a Chromecast

    The Google Chromecast is an impressive little device. If you haven't encountered one already, it's a small HDMI dongle which, when connected to a TV screen, allows to play audio, video, or visual content of a compatible webapp from a computer or mobile device.

    Google Chromecast

    However, it is primarily designed to only stream content from the Web, and not from your computer itself, which follows the current trend that everything should be "in the cloud" and is infuriatingly limiting. As you can guess, that dubious ideology is not my cup of tea.

    Luckily, the excellent library PyChromecast allows to control the device from a Python program. Yet the issue is that it only works for codecs the Chromecast is able to decode natively, i.e., H.264 and VP8. Besides, the Chromecast is only able to handle a few containers like MP4 and WebM. What if you want to stream other video formats ? Besides, what if you want to stream dynamically-generated content, for instance your screen or a live video from a camera ?

    Introducing ffmpeg!

    ffmpeg -i test.avi -c:v libvpx -c:a libvorbis -f webm out.webm
    

    In this example, ffmpeg reads test.avi, recodes the video stream as …


  • A telepresence robot - Programming

    In this article we are going to program the Telebot we have built in the previous article.

    We will use WebRTC, which is the new standard for real-time communication in Web browsers, and take advantage of the necessary signaling channel to also transmit commands to move the robot.

    General schematic of the whole control system

    General schematic of the whole control system

    Programming the robot actually consists of three different steps:

    • Writing Arduino-flavored C++ code for the Arduino-like controller to properly move and balance the robot
    • Building a specific Android application to handle a WebRTC session on the smartphone and relay commands to the controller via Bluetooth
    • Setting up a node.js server to serve an HTML5 control page over HTTPS allowing visioconference and remote control
    The Telebot ready to be programmed

    The Telebot ready to be programmed

    Therefore, the project will be a mix of Arduino, Android Java, and Javascript (client-side and server-side). The source code is free software, licensed under BSD 2-clause license and GPLv3 (Arduino code). The complete source for the project is available on my repository on GitHub.

    Arduino programming

    First, motor control is achieved through an extremely simple text protocol over the Bluetooth serial, with one single-letter command and one value per line. Motors are driven with PWM …


  • An ethernet Tor box

    You are without doubt already familiar with the Tor project. The Tor browser is already a very handy tool to surf anonymously, but what if we had an entire network's traffic forwarded through Tor via a special gateway? Let's transform a tiny router in a transparent Tor proxy, a portable Wifi access point redirecting all traffic to the Tor network!

    Tor logo

    Let's begin with a short presentation of one of my favorite hackable network devices: the TL-MR3020.

    TP-link TL-MR3020

    The portable 3G/4G wireless N router TL-MR3020 from TP-Link

    Despite being marketed as a portable 3G/4G wireless N router, it does not possess any kind of mobile telecommunication interface. Instead, it's a very small and cheap router featuring a 802.11n 150Mbps Wifi interface, a 100Mbps ethernet port, and a USB port. It is powered over a mini-B USB port and it has an extremely low power consumption with an average current draw around 120mA at 5V, i.e. 600mW. Its hardware is pretty limited: an Atheros AR9331 SoC with a 400MHz MIPS processor, 32MB of RAM, and 4MB of flash memory.

    The preliminary step for our Tor box is to install OpenWRT (this example uses Barrier Breaker) so we have a …


  • A smart VPN gateway

    My network setup at home is surprisingly pretty common: a DSL modem (VDSL2 actually) followed by a router featuring an ethernet switch and an 802.11n Wifi access point, configured as a NAT gateway.

    My home network setup before modifications

    My home network setup before modifications

    Let's imagine I'm in a country that doesn't care about the right to private life of its citizens and performs automated mass surveillance, on the pretext of fighting against terrorism or copyright infringement. A gloomy perspective for sure, but let's keep that as our work hypothesis, for what the future holds in store.

    Of course, I could just set up on every computer a VPN whose gateway happens to be in a foreign and more respectful country. However, multiple VPNs on multiple computers are a highly impractical setup for various reasons:

    • VPN configuration has to be done multiple times, and I'm allergic to repetitive tasks
    • The maximum number of concurrent connections is restricted by VPN service providers
    • Access to resources on a local network at the same time is a hassle and need specific configuration, like DNS settings

    So, why not install the VPN once and for all in a privacy-enhancing gateway? We will implement it in a clean, IPv6-compatible …


Categories
Tags
Feeds