Skip to content

This is a repository for RPI manifactured Omnidirectional Assistive Robots (OARbots)

Notifications You must be signed in to change notification settings

rpiRobotics/Assistive-Robotics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Assistive Robotics

This is a repository for multi-robot assitive applications that utilizes Clearpath Dingo Omni-directional robots.

Computers in the System:

Description Username Hostname (Computer Name) MAC Address IP Password OS ROS
GUI Tablet tablet tablet20 AC:67:5D:57:30:50 192.168.1.99 1234 Ubuntu 20.04 Noetic
Main Computer ??? ????? 3C:8C:F8:EB:0E:C8 192.168.1.100 ???? Ubuntu 20.04 Noetic
Dingo 1 Base (Right Arm Config) administrator cpr-do100-10000050 0C:7A:15:CB:A6:0B 192.168.1.101 clearpath Ubuntu 20.04 Noetic
Dingo 1 Helper oarbot_blue oarbot-blue-P15 F4:46:37:FF:E5:A1 192.168.1.102 1234 Ubuntu 18.04 Melodic
Dingo 2 Base (Left Arm Config) administrator cpr-do100-10000051 F0:B6:1E:B7:29:1F 192.168.1.103 clearpath Ubuntu 20.04 Noetic
Dingo 2 Helper oarbot_silver oarbot-silver-P15 4C:77:CB:EC:81:87 192.168.1.104 1234 Ubuntu 18.04 Melodic
Overhead Camera Kinect Processor nuc nuc-18 1C:69:7A:0D:A3:E0 192.168.1.90 1234 Ubuntu 18.04 Melodic

Setting up the system

Click to expand

Setting up the Helper Computers

Installing Ubuntu 18.04 to Lenovo Thinkpad P15 Gen2 Laptops

Installing Ubuntu 18.04 to Lenovo Thinkpad P15 Gen2 Laptops

See the hardware specs of this computer model in https://psref.lenovo.com/syspool/Sys/PDF/ThinkPad/ThinkPad_P15_Gen_2/ThinkPad_P15_Gen_2_Spec.pdf

We have CPU: Core i7-11850H GPU: NVIDIA T1200 (4GB GDDR4, 60W) RAM: 16 GB DDR4-3200MHz SCREEN: 1080P IPS STORAGE: 512GB SSD M.2 2280 SSD PCIe NVMe WIFI: Intel Wi-Fi® 6E AX210, 802.11ax 2x2 Wi-Fi + Bluetooth 5.2

Prepare the BIOS settings

As described here: https://download.lenovo.com/pccbbs/mobiles_pdf/tp_p1_gen2_ubuntu_18.04_lts_installation_v1.0.pdf (Note that this file is for P1, not for P15, so not all of steps here works for installing ubuntu 18.04 to P15)

  • Disable "OS Optimized Defaults" in "Restart"
  • Make sure "Hybrid Graphics" is selected instead of "Discrete Graphics" under Config>Display settings. Later we will have to make this "Discrete Graphics" again.
  • F10 "Save & Exit"

Install Ubuntu 18.04 with a USB

  • Insert Ubuntu 18.04 installation USB and boot up the laptop.
  • Press "Enter" while you are booting.
  • Press "F12" to select the USB device.
  • In the GRUB menu select "Install Ubuntu"
  • Make sure you are connected to internet via Ethernet (WIFI does not work for now)
  • Select Normal installation,
  • For the Other options select "Download Updates while installing Ubuntu" and "Install third-party software for graphics and Wifi hardware..." options
  • Do the storage managements as you wish (I did without encryption)
  • For the username and computer name use the devices info table at the top of this readme file.
  • After the installation if the computer does not boot after the GRUB menu, (see https://askubuntu.com/questions/162075/my-computer-boots-to-a-black-screen-what-options-do-i-have-to-fix-it.)
  • Basically you will boot with nomodeset option in the grub menu instead of quiet splash and then you will install graphics card after you boot in
  • While booting keep pressing "shift" buttons to see GRUB menu,
  • Press "e" while the OS that you would like to boot is selected.
  • Go to line that starts with "linux" and erase "quiet splash" and write "nomodeset" instead.
  • Press "Ctrl+x", you will be able to boot
  • We will have to install NVIDIA graphics card and WIFI drivers

Install NVIDIA drivers

  • open a terminal and do sudo apt update and sudo apt upgrade
  • press windows key and search for "Software & Updates"
  • From ubuntu Software tab select Download From Main Server
  • From Updates tab Select Never for Notify me of a new Ubuntu version
  • From Additional Drivers tab select Using Nvidia driver metapackage from nvidia-driver495 (proprietary)
  • Press Apply Changes button and once it finished reboot
  • This will install the NVIDIA driver but you can also see options of the section 5 of this for other installation options (We did not try those)
  • When it boots up, go to BIOS settings and select "Discrete Graphics" instead of "Hybrid Graphics" under Config>Display settings.
  • Save and Exit
  • Once you reboot, now without doing the "nomodeset" step in GRUB menu you will be able to login

Install Wifi Drivers

At the time of this installation, the most up-to-date Ubuntu 18.04 kernel version is 5.4.0 (you can check yours with command uname -a). However, the wifi hardware used on this computer (Intel Wi-Fi® 6E AX210) requires at least kernel version 5.10 (You can verify this at here). As stated in one of the answers in this link, "The Linux 5.10 kernel (or later) will ship as part of Ubuntu 21.04 in April. This version will also get backported to Ubuntu 20.04 LTS at a later date. It's possible to manually install a mainline kernel in Ubuntu however if it breaks you get the pieces." We will install kernel 5.11 to make the wifi adapter work, but as suggested in the same answer be warned to review the implications of installing a kernel version manually here.

Installing Kernel 5.11

  • First install Mainline as a graphical kernel installing tool. (See details here)
  • run sudo add-apt-repository ppa:cappelikan/ppa
  • sudo apt update
  • sudo apt install mainline
  • Open Mainline Kernel Installer and install 5.11.0
  • After installation, reboot.
  • sudo update-grub and sudo reboot
  • As described here, the output of sudo dmesg | grep iwl will show us some errors with the information about which firmware we need to install.
  • For example we needed iwlwifi-ty-a0-gf-a0-39 to iwlwifi-ty-a0-gf-a0-59.

Installing Firmware

  • At the output of dmesg command it is suggested to check https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/
  • Go this website and download the newest firmware (eg. as of today it was linux-firmware-20211027.tar.gz (sig))
  • It takes some time to download, be patient
  • Uncompress the file with tar -zxvf linux-firmware-20211027.tar.gz
  • cd linux-firmware-20211027/
  • Copy the firmwares to /lib/firmware/ with command sudo cp -ax * /lib/firmware
  • Now reboot and the wifi should work!

Additional settings

  • Connect the wifi to lab network.
  • Open settings on Privacy tab, disable automatic screen lock, location services enabled.
  • Sharing tab, enable sharing and screen sharing, select require a password and make the password 1234
  • Power tab, disable dim screen when inactive, blank screen 5 minutes, Automatic suspend OFF, When power button is pressed Power Off
  • Details tab, Users tab, Unlock and enable automatic log in
  • Install GNOME Tweaks and launch
  • On Power tab disable suspend when laptop lid is closed
  • Install Dconf Editor and launch
  • on /org/gnome/desktop/remote-access, disable require-encryption
  • sudo apt install ssh

Install ROS Melodic

Setting Up Kinect Azure

Setting Up Kinect Azure

Setup the Sensor SDK and Body SDK for Kinect Azure following https://docs.microsoft.com/en-us/azure/kinect-dk/sensor-sdk-download and https://docs.microsoft.com/en-us/azure/kinect-dk/body-sdk-download .

At the time of this document the support is only for Ubuntu 18.04 with an AMD64 architecture CPU, additionally a dedicated GPU is a must (with minimum model specified as NVIDIA Geforce GTX 1050 see here for other requirements)

The steps are summarized as:

Ssh into the Kinect Processor Computer of the robots

The passwords are given at the top for the Kinect Processors. Use the information given and ssh into the robots. For example,

ssh oarbot_blue@192.168.1.101

or

ssh oarbot_silver@192.168.1.102

Then on each robot, follow the steps below:

Setting up Linux Software Repository for Microsoft Products

curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
sudo apt-get update

Setting up the SDKs

sudo apt install libk4a1.4-dev
sudo apt install libk4abt1.1-dev
sudo apt install k4a-tools

Adding permissions for Azure Kinect as a usb device

cd /etc/udev/rules.d
sudo wget https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/scripts/99-k4a.rules

Plug in the USB of Kinect Azure and connect it to the power. Then you can verify the installation with k4aviewer or k4abt_simple_3d_viewer commands.

Setting up the ROS packages for Kinect Azure

(See the instructions for building here as reference)

sudo apt-get install ros-melodic-rgbd-launch
cd ~/catkin_ws_assistive/src
git clone https://github.com/burakaksoy/Azure_Kinect_ROS_Driver.git
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES='azure_kinect_ros_driver'
source ~/.bashrc
source ~/catkin_ws_assistive/devel/setup.bash

Troubleshooting:

If you see this kind of error during the catkin_make command execution:

    Finding K4A SDK binaries
    CMake Error at Azure_Kinect_ROS_Driver/cmake/Findk4a.cmake:22 (message):
    Error: Azure Kinect SDK Version numbers contain exactly 3 components
    (major.minor.rev).  Requested number of components: 2
    Call Stack (most recent call first):
    /usr/local/share/cmake-3.18/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
    /usr/lib/cmake/k4abt/k4abtConfig.cmake:3 (find_dependency)
    Azure_Kinect_ROS_Driver/cmake/Findk4abt.cmake:35 (find_package)
    Azure_Kinect_ROS_Driver/CMakeLists.txt:94 (find_package)

    -- Configuring incomplete, errors occurred!

Change 2 components in the version number given in this line of file /usr/lib/cmake/k4abt/k4abtConfig.cmake from this:

find_dependency(k4a 1.3 REQUIRED)

to this:

find_dependency(k4a 1.3.0 REQUIRED)

and try again the catkin_make command above.

For more information about this issue see: microsoft/Azure_Kinect_ROS_Driver#143

Adjusting Default launch parameters for Azure Kinect

You can edit the default FPS argument value to 30 in /src/Azure_Kinect_ROS_Driver/launch/kinect_rgbd.launch.

Finally you can verify Kinect Ros installation working by

roslaunch azure_kinect_ros_driver kinect_rgbd.launch

and in a new terminal you can check for the published images with

rqt_image_view

For further information about the topics and the usage see https://github.com/microsoft/Azure_Kinect_ROS_Driver/blob/melodic/docs/usage.md

Bonus: Installing Kinect Azure on Ubuntu 20.04

(Source: microsoft/Azure-Kinect-Sensor-SDK#1263 (comment))

sudo apt purge libk4a*
sudo apt purge k4a
sudo apt purge k4a*
sudo apt autoremove 
sudo apt remove libk4a*
sudo apt remove libk4abt*
sudo apt remove libk4a1*
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo apt-add-repository https://packages.microsoft.com/ubuntu/20.04/prod
sudo apt-get update
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo apt-add-repository https://packages.microsoft.com/ubuntu/20.04/prod
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
curl -sSL https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft-prod.list
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-get update
sudo apt install libk4a1.4=1.4.1
sudo apt install libk4a1.4-dev=1.4.1
sudo apt install libk4abt1.1-dev=1.1.2
sudo apt install k4a-tools=1.4.1
sudo apt install ros-noetic-rgbd-launch

# Copy rules
# sudo cp 99-k4a.rules /etc/udev/rules.d/

# k4aviewer
# k4abt_simple_3d_viewer 

Also hold these packages to prevent update:

sudo apt-mark hold libk4a1.4
sudo apt-mark hold libk4a1.4-dev
sudo apt-mark hold libk4abt1.1-dev
sudo apt-mark hold k4a-tools
# sudo apt-mark showhold
# sudo apt-mark unhold <package-name>

Moreover, in the cmakelists.txt file of the kinect ros package you may need to edit:

# find_package(k4a 1.4.0 QUIET MODULE REQUIRED)
find_package(k4a 1.3.0 QUIET MODULE REQUIRED)

...

# find_package(k4abt 1.1.0 QUIET MODULE)
find_package(k4abt 1.0.0 QUIET MODULE)

Bonus 2: How to resolve high CPU usage issue with body tracking

(Source: microsoft/Azure-Kinect-Sensor-SDK#1007) Set openMP environment variable as export OMP_WAIT_POLICY=Passive before launching kinect!!!

Setting Up Kinova Arm for robots

Setting Up Kinova Arm for robots

Hardware Setup

  1. Plugin the powercable and the joystick
  2. Connect the USB cable to your laptop
  3. Powerup the arm

The green light on the joystick will be flashing for around a minute. After that, there will be two results after you do that

Joystick Steady Green light

You are good to go! Please direct to software setup.

Joystick Green Light flashing or Steady Red Light

You need to update the firmware of the arm. If you try to use the ROS package when this situation happens, it'll show connection error.

  1. Please follow the instruction in this webpage.
  2. You can find the latest firmware here.
  3. You can find the installation files of Development Center, a GUI available with the SDK here in the first question of "Usage". If the download link is missing, you can find it here (File name is "PS 0000 0009_1.5.1.zip") and the document here or here.
  4. We only tested the Development Center in win10 while updating the firmware. However, Development Center in both win10 and ubuntu20.04 (using the ubuntu16.04 version in the file) can connected to the arm and control the arm.
  5. While rebooting the arm in the updating firmware step, you might want to do some "physical therapy" for the arm (basically move the arms around) and wait a bit before restarting your arm.

Software Setup

Control the arm via Development Center

You can find the installation files of Development Center, a GUI available with the SDK here in the first question of "Usage". If the download link is missing, you can find it here and the document here.

Add Translation offset if you have Bota Rokubi FT sensors installed on Kinova robots

Since the Kinematics change due to the additional hardware with the installed FT sensor, we need to add translation offset to the robot settings.

  • Open up the Development Center from /opt/JACO-SDK/GUI/DevelopmentCenter.
  • From General Settings enter 0.077 to z-axis (the other axes are 0).
  • Select the check box that says Activate Offset.
  • Hit Save button.

Note that after reboot of the arm the check box is automatically unchecked. Instead of opening the Development Center each time, on the joystick of the arm one can press 1 button. It lits up the right most blue light on the joystick which indicates the offset is activated.

Control the arm via ROS package

Please direct here for how to launch the arm, perform joint angle and cartetian space control.

Put the arm to service mode

  • Plug in USB your robot
  • Open the C:\Program Files (x86)\JACO-SDK\RobotConfiguration or the equivalent path on you system.
  • Put the last firmware you upload in your robot in the firmware folder.
  • Run ActivateServiceConfiguration.exe (it is a console app, see the outputs by running it from a terminal/command line) If that works well at General setting > update at the arm type field you will see JAco v2 6dof Service.

To use admittance control

  1. Open Development Center GUI, general setting > update
  2. Verify that main firmware is updated.
  3. Arm type is in service mode (see above).
  4. Actuator firmware is updated.
  5. Verify that all the torque sensors are functional. (see details below)
  6. Do the torque calibration. (see details below)
  7. Verify that the gravity vector and the payload correctly defined. (see details below)
Steps 1-4 are already done in the above.
5. Verifying all torque sensors are functional

Open the Development Center and go to Monitoring >angular >torque column

  • Push against each joint to apply an external torque to each joint and observe if the value on screen reacts accordingly to your action. Push in both direction and the torque should be positive in one direction and negative in the opposite one.
  • If it does not react as expected, You have a problem with one or more of your torque sensor.
  • If it reacts as expected, try step 6.
6. Doing the torque calibration

Calibrate arm torque by reset sensors to zero value. Get the user Guide. Go at the page 58 and place the robot at the picture position (candle like position)

  • Once the arm is in the right position, you have to open the Development Center and go to Advanced settings and press 4 times to the Apply to all button in torque zero menu.
  • Try to put the arm in torque mode with torque console, but close the Development Center before opening Torque console.
  • If the arm does not switch to torque control try step 7.
7. Verify that the gravity vector and the payload correctly defined.
  • Open the Torque Console Interface and set the Gravity vector.
  • Then set the payload if you have one.
  • When it is done, try to switch to torque mode with the Torque Console Interface

If after all of those step it continue to not work, it may be a hardware issue. That need further investigation

Setting Up Dingo Base Computers

Getting Started

Getting Started

Four Dingo-O robots arrived with a printed document named "Custom Robot Quickstart Guide". We only needed to apply section 3 and section 5 of this document after the batteries are fully charged (both the robot batteries and the PlayStation controller batteries). The texts are in these sections are copied below:

Section 3: Getting Started

Your system has been configured to allow you to get started immediately after receipt. Follow these instructions to get moving.

  1. Remove the Dingo's side panels and top fairings (yellow), insert the batteries provided (or confirm they are inserted), then replace the top fairings and side panels.
  2. Turn on the Dingo via the HMI button pad on the rear. Note that the computer may beep when starting up.
  3. Press "PS" button on gamepad to turn it on.

Section 5: Wireless

To set up the wireless communications on your Dingo, you must either first establish a wired Ethernet connection or use the HDMI output and USB keyboard from the robots's computer. If you use the Ethernet option, connect your computer to an Ethernet port on the Dingo's computer by removing the Dingo fairing, and set a static IP on your computer to 192.168.131.19 (for example). If there are no free ethernet ports you may temporarily disconnect one of the payloads such as a lidar sensor. SSH into the robot computer with:

ssh administrator@192.168.131.1

Enter the login password when prompted. Once you have successfully logged in, you can connect the robot's computer to a desired wireless network.

If you use the HDMI and USB keyboard option, when you bootup the robot, the login terminal screen of Ubuntu comes up. Enter in the username and password given at the top of this document and log in.

Once you log in, you can connect your robot to a desired wireless network using Netplan.

Simply create a file called 60-wireless.yaml inside of the /etc/netplan folder on your robot's computer. Copy and paste the contents below into the file, and make sure to modify the wireless interface, SSID, and password fields.

network:
    wifis:
    # Replace WIRELESS_INTERFACE with the name of the wireless network device, e.g. wlane or wlp3s0
    # Fill in the SSID_GOES_HERE and PASSWORD_GOES_HERE fields as appropriate. The password may be included
    as plain-text
    # or as a password hash. To generate the hashed password, run
    # echo -n 'WIFI_PASSWORD' | iconv -t UTF-16LE | openssl md4 -binary | xxd -p
    # If you have multiple wireless cards you may include a block for each device.
    # For more options, see https://netplan.io/reference/
    WIRELESS_INTERFACE:
        optional: true
        access-points:
            SSID_GOES HERE:
            password: PASSWORD_GOES_HERE
        dhcp4: true
        dhcp4-overrides:
            send-hostname: true

Once you have saved the file, you will then need to apply your new Netplan configuration and bring up your wireless connection by running:

sudo netplan apply

More advanced networking examples, including configurations for accessing a wifi network requiring WPA Enterprise credentials, can be found here: https://netplan.io/examples/

You can verify that your robot is connected to a wireless network by running:

ip a

This will show all active connections and their IP addresses, including your robot's connection to the desired wireless network, and the IP address assigned to the robot's computer.

Disable the WiFi Power Saving

List the wifi devices with command:

iw dev

To check the current power management setting of your WiFi interface, use the following command (Assuming the device is wlp2s0):

iw dev wlp2s0 get power_save

To Disable Power Saving Temporarily (Assuming the device is wlp2s0):

sudo iw dev wlp2s0 set power_save off

To Make the disabling permenant, create a Systemd Service:

sudo nano /etc/systemd/system/wifi-power-management.service

Paste the following:

[Unit]
Description=Disable WiFi Power Management
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iw dev wlp2s0 set power_save off
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Make sure to replace wlp2s0 with the actual name of your wireless interface.

To enable and start the service:

sudo systemctl enable wifi-power-management.service
sudo systemctl start wifi-power-management.service

To verify (Assuming the device is wlp2s0):

iw dev wlp2s0 get power_save

Note: I also tried installing NetworkManager and edit its config file sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf by making

[connection]
wifi.powersave = 2

and then sudo systemctl restart NetworkManager. However this did not disable the WiFi power management when I tried to verify with iw dev wlp2s0 get power_save command. Therefore I selected to use creating Systemd Service.

Needed Software Customizations on a factory fresh Dingo-O robot

Needed Software Customizations on a factory fresh Dingo-O robot

WARNING: You may want to create a backup of the edited files before begin the process described here. To make the dingo robots work as desired in this repository, there are some customizations needed.

Follow the instructions in ReadMe.md file of in src/dingo_customization/ of this repository.

Physical UWB setup

Physical UWB setup

Related websites for the Qorvo (DecaWave) UWB module documents

DW1000 https://www.qorvo.com/products/p/DW1000#documents

DW1001C https://www.qorvo.com/products/p/DWM1001C#documents

DWM1001-DEV https://www.qorvo.com/products/p/DWM1001-DEV#documents

MDEK1001 https://www.qorvo.com/products/p/MDEK1001#documents

Download the Android DRTLS phone app

https://www.qorvo.com/products/p/MDEK1001#documents

Download DRTLS App : Android Application APK

Calibration Script

Used to determine the every module's (tags and anchors) offsets based on this white paper with name: Antenna Delay Calibration of DW1000-Based Products and Systems (Application Note APS014).

Set 4 of them an on a nice square with best possible known manual position measurements.

(3 of them gives only one solution, 4 of them gives a Least Squares solution with RMSE error to have an idea of how accurate the calculated offsets are.)

Take note of the manually measured distances, they are needed in the calibration script.

From the android app, put all the modules in the same network and set them as anchors. From the powered ones, only one of them must be set as initiator.

Use antenna_offset_finding.m MATLAB script in uwb_matlab_scripts/ directory of this repo to find the offsets of each UWB module. Then set the offsets in antenna_calibration.yaml in src/assistive_launch/config/ folder. Comments of the script should be sufficient to guide you for further details.

Note: This script would work on Windows 10 but not in Windows 11 as of writing this document. See details here

This script uses the BLE interface of the firmware to communicate with the tags. For further information see section 7 of DWM1001 Firmware API Guide

After the calibration is done, set modules back as tags those you won't to use as anchors from the Android app.

Script to Calculate and Write the Anchor positions into the Modules

Mount the UWB anchors in the physical workspace area. Measure the distances between them with a laser distance meter. Use truck_bay_uwb_locations.m MATLAB script in uwb_matlab_scripts/ directory of this repo. Comments of the script should be sufficient to guide you for further details.

Note: This script would work on Windows 10 but not in Windows 11 as of writing this document. See details here

This script uses the BLE interface of the firmware to communicate with the tags. For further information see section 7 of DWM1001 Firmware API Guide

Configuring USB Ports of the UWB Tags Mounted on the Robots

At each robot equipped with the UWB tags, this step is required to read data from the UWB tags.

Determine the USB serial ports of the UWB tags by unplugging and re-pluggin the USB cables of the tags and using this command:

ls /dev/serial/by-path/

The determined port should be something like this:

/dev/serial/by-path/pci-0000:00:14.0-usb-0:3:1.0

For each UWB tag, edit the <robot_name>_uwb_<# of the UWB tag>.yaml config files in assistive_launch/config/ directory and assign the serial_port parameter to the determined port.

For example, we name the first Dingo robot as d1 and the USB port of its 2nd UWB tag is specified in assistive_launch/config/d1_uwb_2.yaml file with the following content:

serial_port: '/dev/serial/by-path/pci-0000:00:14.0-usb-0:3:1.0'
topic_name: 'uwb/tag_2_serial_ranging'

Setting Up Tablet (Graphical User Interface Device) Computer

The tablet device as the GUI of the system is based on 'ARM Smart Teacpendant Project' hardware.

Tablet OS Setup

Tablet OS Setup

Steps to install Ubuntu (20.04 or 18.04) on Surface Go 2 Tablet

Requires a USB-C to USB-A adapter and flash drive

  1. Update Windows 10/11 using Settings -> Updates

  2. Download and create Ubuntu 20.04 amd64 USB install drive

  3. Disable Windows bitlocker and reboot. If it says “waiting to active”, finish activation, then disable: https://www.isunshare.com/windows-10/4-ways-to-remove-or-disable-bitlocker-encryption-on-windows-10.html

  4. Shrink the Windows 10 partition using Windows disk manager: https://www.tenforums.com/tutorials/96288-shrink-volume-partition-windows-10-a.html Suggested to shrink by 64000 MB

  5. Connect bootable USB drive and reboot using advanced startup options: https://www.digitalcitizen.life/boot-your-windows-10-pc-usb-flash-drive The bootable usb drive may have the title “Linpus Lite”

  6. Install Ubuntu as normal

  7. Remove the USB drive

  8. At this point Ubuntu is installed, but will not boot automatically. Do the advanced startup options again, and select “ubuntu”. This will boot into Ubuntu. Follow these instructions in Ubuntu to disable Windows boot: https://www.reddit.com/r/SurfaceLinux/comments/egds33/possible_fix_for_booting_directly_to_grub_on/ Windows can still be booted using Grub menu Ubuntu should now boot. The post is copied here for convenience:

        Possible fix for booting directly to grub on Surface Go
        If you're having trouble getting your Surface Go to boot to grub instead of the Windows Boot Manager, I might have something to try if you're brave: I moved the Microsoft folder in /boot/efi/EFI out of the way (In Ubuntu: sudo mv /boot/efi/EFI/Microsoft /boot/efi/EFI/Microsoft.bak) and now grub is loaded by default. I'd really only recommend this if you:
    
        Have a Windows USB recovery made and you know it's bootable
    
        Have your files backed up off the SSD (both Linux and Windows (if you care))
    
        Feel comfortable screwing around fixing a potentially broken EFI partition
    
        Aren't the sort of person who blames other people when you break your own computer following instructions you found on the Internet!
    
        All that said, it works for me on my recently purchased 8GB/128GB Surface Go w/ Ubuntu 19.10. I had already dumped the WIndows partition though, so I never tested whether grub had any issues loading Windows. You may also need to mess around with efibootmgr to fix the boot order, but I'm not sure.
    
  9. You may also need to disable secure boot. This is achived from the BIOS settings. To enter the BIOS settings, while powering up the tablet, Press and hold the volume-up button on your Surface and at the same time, press and release the power button. When you see the Surface logo, release the volume-up button. The UEFI menu will display within a few seconds.

  10. The default kernel version installed with ubuntu 20.04 as of writing this document is 5.15 however this version causes hanging problem when shutting down. Installing kernel version 5.4.243 via Mainline kernel installer resolves the issue for this specific tablet.

  11. After the install of the OS, make sure the wifi power saving is disabled by editing:

    sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf

    By default there is:

    [connection]
    wifi.powersave = 3

    Change the value to 2. Then to take effect, run:

    sudo systemctl restart NetworkManager

    Disabling wifi power saving reduces the wifi latency by a considerable amount! For more information see here.

    For further reducing latency, you can tune the network stack with the following commands:

    sudo sysctl -a | grep ipv4
    sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
    sudo sysctl -w net.core.rmem_default=10000000
    sudo sysctl -w net.core.wmem_default=10000000
    sudo sysctl -w net.core.rmem_max=16777216
    sudo sysctl -w net.core.wmem_max=16777216
    sudo sysctl -w net.ipv4.tcp_low_latency=1  # intended to give preference to low latency over higher throughput; setting =1  # disables IPV4 tcp prequeue processing
    sudo sysctl -w net.ipv4.tcp_timestamps=0  # Only advised in cases where sack is needed.
    sudo sysctl -w net.ipv4.tcp_sack=0  # setting to 1 enables selective acknowledgment for IPV4, which requires enabling tcp_timestamps and adds some packet overhead, which you don't need if you don't experience packetloss
    sudo sysctl -w net.ipv4.tcp_window_scaling=1  # RFC 1323 - support for IPV4 TCP window sizes larger than 64K - generally needed on high bandwidth networks
    sudo sysctl -w net.ipv4.tcp_reordering=3  # The maximum times an IPV4 packet can be reordered in a TCP packet stream without TCP assuming packet loss and going into slow start.
    sudo sysctl -w net.ipv4.tcp_fastopen=1  # Enable to send data in the opening SYN packet.
    
    sudo sysctl -p # to apply the changes without rebooting
    
    sudo systemctl restart NetworkManager
    

    Note that these changes are not persistent and will be lost after a reboot. To make them persistent, you can add them to the /etc/sysctl.conf file as follows:

    sudo nano /etc/sysctl.conf
    

    Paste the following:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    net.core.rmem_default = 10000000
    net.core.wmem_default = 10000000
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_low_latency = 1  # intended to give preference to low latency over higher throughput; setting =1  # disables IPV4 tcp prequeue processing
    net.ipv4.tcp_timestamps = 0  # Only advised in cases where sack is needed.
    net.ipv4.tcp_sack = 0  # setting to 1 enables selective acknowledgment for IPV4, which requires enabling tcp_timestamps and adds some packet overhead, which you don't need if you don't experience packetloss
    net.ipv4.tcp_window_scaling = 1  # RFC 1323 - support for IPV4 TCP window sizes larger than 64K - generally needed on high bandwidth networks
    net.ipv4.tcp_reordering = 3  # The maximum times an IPV4 packet can be reordered in a TCP packet stream without TCP assuming packet loss and going into slow start.
    net.ipv4.tcp_fastopen = 1  # Enable to send data in the opening SYN packet.
    

    After adding the changes to the /etc/sysctl.conf file, you can apply them by running the following command:

    sudo sysctl -p # to apply the changes without rebooting
    
    sudo systemctl restart NetworkManager
    

    or you can reboot the machine to apply the changes.

    For more information on tuning the network stack, you can refer to the following resources:

System Bootup Process Instructions

Click to expand

Warning: The order in the following instructions are important for successful bootup process. Following the order especially in the Dingo battery powered up components (Dingo base computer, Dingo helper computer, and Kinova arm) is essential, because otherwise Dingo robots may shut down after ~30 seconds, probably as a default protective measurement by Clearpath (Further investigation is needed on this matter).

  1. Make sure that on each Dingo robot, the Kinova arm is switched off, the Dingo helper computer charger is unplugged, and the robot batteries are connected and charged.

  2. Turn on the master/main computer and run roscore.

  3. Turn on the GUI tablet.

  4. Make sure the overhead Kinect camera is plugged in to the power and connected to the Kinect Azure computer.

  5. Turn on the Overhead Camera (Kinect Azure) computer (NUC).

  6. Turn on each Dingo robot by using the button on the robot rear.

  7. Wait for the robot computer to complete its boot up process.

    This will launch the default robot control nodes, IMU node, UWB localization nodes, and front and rear Lidar sensor nodes

  8. Switch on the Kinova arm on the robots.

  9. Plug in the Dingo helper computer charger.

  10. Turn on the Dingo helper computer.

  11. Wait for the Dingo helper computer complete its boot up process.

  12. On master computer, launch `` file.

    This launch file will remotely launch the GUI node on the GUI tablet, the overhead camera and ArUco tag detection robot localization related nodes on the Overhead Camera computer (NUC), the Kinova arm, FT Sensor, and Kinect cameras on the Kinova arm wrist on each Dingo helper computer. Also, in the master/main computer it will launch the human body localization fusion.

    Note that further devices, nodes, and features can be added to each computer without updating the information written in the last explanation above. That paragraph is intended to cover the main idea of system architecture which explains what system component runs on which computer in the system and therefore to create a sense on the System Bootup Process Instructions.

Usage

Click to expand

run

./test_launcher_all_oarbots.bash

Then to correct the torque readings on Kinova arms, run:

./correct_kinova_torques.bash

To plot the Force/Torque plots either run:

./rqt_plotter.bash

Or if you have PlotJuggler installed, run:

./plotjuggler.bash

About

This is a repository for RPI manifactured Omnidirectional Assistive Robots (OARbots)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published