as-wiki

Contents:

  • HOW TO USE THE WIKI
    • Summary
    • Reasons for using the wiki in this way
    • Too Long; Didn’t Read (TL;DR)
    • Too Tedious; Didn’t Bother (TT;DB)
    • What this wiki is NOT
    • What this wiki is
    • How this wiki suits you
    • Be realistic
  • LINUX COMMAND LINE
    • Navigating directories
    • Editing filenames and directories
    • Displaying files
    • Editing files
    • Executing files
    • Installing programs
    • Secure shell and secure copying
    • Mosh - mobile shell connection
    • Miscellaneous
  • GIT - VERSIONING CONTROL FOR CODE
    • What is git and why use it?
      • What is git?
      • Why use git?
    • Working with Git
      • Links to git tutorials
      • Where to host your git
      • Clone your git
      • Typical git workflow
      • View previous commits
    • Git Merge from Upstream Fork
      • Add the upstream remote
      • Merge in changes from the upstream remote
  • SOFTWARE INSTALLATION
    • Manual Installation
      • Fresh install of Operating System
      • Respond to broadcast pings
      • Install mosh
      • Install I2C library
      • Install GPIO library
      • Install ROS
      • Clone the asclinic-system repository
      • Compile the ASClinic ROS package
      • Add ROS setup scripts to bashrc
      • Install the Slamtec RPLidar ROS package
      • Symbolic USB link for Slamtec RPLidar devices
      • Install the Video for Linux (v4l) utilities
      • OpenCV Installation for Python3
        • Install pip3
        • Upgrade pip3
        • Upgrade numpy
        • Install OpenCV Contributions for python
        • Install ROS packages for running python3 scripts
        • Extra steps for some camera use cases
    • Installation Script
    • CLI for Managing Network Connections
      • Available devices and status
      • Display available WiFi networks
      • Connecting to a new WiFi network
      • Working with saved connections
  • ROBOT OPERATING SYSTEMS (ROS)
    • ROS IN WORDS
      • What is ROS?
      • Why use ROS (for robotics)?
      • The key elements of ROS
        • Nodes
        • Topics
        • Messages
        • Publishing and Subscribing
        • Advertising versus publishing
        • Services
        • Namespaces
        • Parameters and the Parameter Server
        • ROS Master
        • Put it all together
        • What does it all mean for you?
    • ROS CODE: STARTING FROM A CLEAN SLATE
      • Create a catkin workspace and a ROS package
        • TL;DR
        • Source the ROS setup.bash
        • (Optional) add ROS setup.bash to the .bashrc
        • Make the catkin_ws directory
        • Use catkin_make to initialise
        • Source the setup.bash of the catkin workspace
        • (Optional) add the catkin workspace setup.bash to the .bashrc
        • Double check what is on the ROS_PACKAGE_PATH
        • What is a ROS Package
        • Create a ROS Package
        • Interrogating and customizing your package
        • Git ignore and git push
        • References
      • Code up a ROS node from scratch (C++ and Python)
        • TL;DR
        • Python only: interpreter and encoding directives
        • Import the appropriate ROS API (Application Programming Interface)
        • Add the main function
        • Initialise the node
        • C++ only: start the node
        • Display the namespace of the node
        • Keep the alive by spinning in a while loop
        • Keep the alive with the ROS spin function
        • References
      • Make nodes executable (C++ and Python)
        • TL;DR
        • Add the C++ node to the C Make List
        • Compile the C++ node
        • Make the Python file executable
        • References
      • Run, launch, and interrogate nodes
        • TL;DR
        • rosrun - run a single node
        • roslaunch - launch multiple nodes at once
        • rosnode - command line tool for interrogating nodes
        • References
      • Code for spinning at a specified frequency (C++ and Python)
        • TL;DR
        • High-level description
        • Python only: add a class definition
        • Add a callback function for when the timer triggers
        • Initialise a timer and connect it to the callback
        • Add the C++ node to the C Make List and compile
        • Make the Python file executable
        • Launch and test
        • Alternative: Fixed frequency spinning in the main
        • References
      • Code for a simple publisher and subscriber (C++ and Python)
        • TL;DR - (PUBLISHER)
        • TL;DR - (SUBSCRIBER)
        • TL;DR - launch (BOTH)
        • High-level description (BOTH)
        • Import the header for the message type (BOTH)
        • List of the standard message (std_msgs) types (BOTH)
        • C++ only: initialise a node handle for the node’s namespace (BOTH)
        • Python only: make the namespace a global variable (BOTH)
        • C++ only: declare the publisher as a member variable (PULISHER)
        • Initialise the publisher variable (PULISHER)
        • Publish a message (from the timer callback function) (PULISHER)
        • Initialise the subscriber variable (SUBSCRIBER)
        • Add the subscriber callback function for when messages are received (SUBSCRIBER)
        • Add the C++ nodes to the C Make List and compile (BOTH)
        • Make the Python file executable (BOTH)
        • Launch and test (BOTH)
        • Topic namespace options (BOTH)
        • References
      • Define and use custom message types (C++ and Python)
        • TL;DR
        • High-level description (BOTH)
        • Define the custom message, in a *.msg file
        • Compile the custom message type
        • Import the custom message definition into your C++ and Python code
        • Using custom messages within C++
        • Using custom messages within Python
        • References
    • ROS COMMAND LINE
      • Compiling
      • Sourcing a ROS package
      • Launching nodes
      • Displaying information about nodes
      • Displaying information about topics
      • Miscellaneous
  • AUTONOMOUS SYSTEM BUILDING BLOCKS
    • 1. Obtaining RPLidar Data
      • 1.1. Install and compile the RPLidar ROS package
      • 1.2. Launch the RPLidar node
      • 1.3. Format of the RPLidar scan data
      • 1.4. Subscribe to the RPLidar scan data
      • 1.5. External links
    • 2. USB Camera Settings
      • 2.1. Install the v4l2-ctl command line tool
      • 2.2. Find the device
      • 2.3. Display the manual
      • 2.4. Get and set the controls
      • 2.5. Check the available video formats
      • 2.6. Get and set the focus
      • 2.7. Get and set the resolution
      • 2.8. Display everything about a device
      • 2.9. Quick Setup
      • 2.10. External links
    • 3. Camera calibration
      • 3.1. Install OpenCV
      • 3.2. Capture camera images
      • 3.3. Capture chessboard images
      • 3.4. Compute the intrinsic parameters
    • 4. ArUco Marker Detection
      • 4.1. Install OpenCV
      • 4.2. Template overview
      • 4.3. Setup steps
      • 4.4. Detection steps
      • 4.5. Robot pose estimation
    • 5. Stream ROS Images to web browser
      • 5.1. Background
      • 5.2. Install web_video_server package
      • 5.3. Launch the web_video_server node
      • 5.4. View the steam of images from a web browser
      • 5.5. Configure your package.xml and CMakeLists.txt accordingly
      • 5.6. Ensure that your Image message uses an appropriate encoding
    • 6. ROS Interface with an I2C Bus
      • 6.1. Checking the I2C bus
      • 6.2. ROS templates
      • 6.3. Important notes on I2C usages in ROS nodes
      • 6.4. Step-by-step guides for the I2C device drivers
    • 7. Using the DC motor driver interface (Pololu SMC G2)
    • 8. Using the servo driver interface (PCA9685)
    • 9. Interface with a Single GPIO Pin
    • 10. Counting encoder ticks via GPIO pins
      • 10.1. TL;DR (ROS encoder counter node)
      • 10.2. TL;DR (stand-alone C++ encoder counter)
      • 10.3. High level description
      • 10.4. Standard threads, boost threads or p threads - which one to use
      • 10.5. Prototypical multi-threaded code structure
      • 10.6. Compile and run (before adding more complexity)
      • 10.7. Monitoring multiple GPIO pins for the encoder channels
      • 10.8. Reading and displaying the current encoder counts (and resetting)
      • 10.9. Compile and run with the actual encoders
      • 10.10. Putting it into a ROS node
      • 10.11. Launch file with parameters
  • SOFTWARE DRIVERS FOR SENSORS AND ACTUATORS
    • I2C Driver for CPP
      • Class definition
      • Enumerations
      • Member variables
      • Class constructor
      • Getter functions
      • Member functions
    • I2C Driver for Pololu Simple Motor Controller (SMC)
      • Class definition
      • Member variables
      • Class constructor
      • Getter functions
      • Setter functions
      • Member functions
        • Convenience function for initialisation
        • Start and stop commands
        • Convenience functions for commanding the motor duty cycle
        • Brake command
        • Forward duty cycle commands
        • Reverse duty cycle commands
        • Workhorse functions for getting and setting via I2C
        • List of functions for setting limits
        • List of functions for getting variables
  • BILL OF MATERIALS (BoM)
    • Compute modules
    • Sensors
    • Actuators
    • Power supply
    • Wheels
    • Miscellaneous
  • POWER SUPPLY
    • Voltaic V88 Power Bank
      • On/Off Switch
      • To Change Voltage
      • Always On Mode
      • Auto Off Mode
      • Tips
      • Charge From AC Power
      • Specifications
      • Power a Robot
    • Jetson Plugged Wall Adapter
  • SINGLE BOARD COMPUTERS (SBC)
    • Jetson TX2 Developer Kit
      • Documentation links
      • 40-pin expansion header
        • Pin layout
        • Configuring the function of each pin
        • Mapping pin number to line number
    • Jetson Xavier NX Developer Kit
      • Documentation links
      • 40-pin expansion header
        • Pin layout
        • Configuring the function of each pin
        • Mapping pin number to line number for gpiod
  • COMMUNICATION PROTOCOLS
    • Single Pin GPIO (General Purpose Input Output)
      • The gpiod library
      • Using gpiod in C++ code
      • Command line tools from gpiod
      • Test that a GPIO input is working
    • I2C (Inter-Integrated Circuit)
      • I2C via command line
      • I2C via C++
      • I2C addresses
  • SPHYINX RST CHEAT SHEET
    • Section headings
    • Lists
    • Contents of an individual .rst file
    • Admonition directives
      • With custom title
      • With pre-specified titles
as-wiki
  • Search


Built with Sphinx using a theme provided by Read the Docs.