Teensy interface

From Rsewiki

Back to Scorpi

Installation packages

See installation notes for needed OS-packages: Scorpi Pi installation.

Teensy interface source

For the Teensy interface fetch the software here:

mkdir -p ~/svn
cd ~/svn
svn checkout svn://repos.gbar.dtu.dk/jcan/scorpi

Teensy_interface - CMake

Then go to the Teensy_interface and compile like this:

cd scorpi/teensy_interface
mkdir build
cd build
cmake ..

-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr (found version "4.5.1") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in thread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
# Is a RASPBERRY; CPU=aarch64 (Pi3=armv7l, pi4=aarch64)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/local/svn/scorpi/teensy_interface/build

A Makefile is now generated.

Compile Teensy_interface

To compile:

cd ~/svn/scorpi/teensy_interface/build
make -j3

local@joe:~/svn/scorpi/teensy_interface/build $ make -j3
Scanning dependencies of target teensy_interface
[  9%] Building CXX object CMakeFiles/teensy_interface.dir/src/cheading.cpp.o
[  9%] Building CXX object CMakeFiles/teensy_interface.dir/src/bplan100.cpp.o
[ 13%] Building CXX object CMakeFiles/teensy_interface.dir/src/cmixer.cpp.o
[ 18%] Building CXX object CMakeFiles/teensy_interface.dir/src/cmotor.cpp.o
[ 22%] Building CXX object CMakeFiles/teensy_interface.dir/src/cservo.cpp.o
[ 27%] Building CXX object CMakeFiles/teensy_interface.dir/src/main.cpp.o
[ 31%] Building CXX object CMakeFiles/teensy_interface.dir/src/maruco.cpp.o
[ 36%] Building CXX object CMakeFiles/teensy_interface.dir/src/mpose.cpp.o
[ 40%] Building CXX object CMakeFiles/teensy_interface.dir/src/sas5147u.cpp.o
[ 45%] Building CXX object CMakeFiles/teensy_interface.dir/src/scam.cpp.o
[ 50%] Building CXX object CMakeFiles/teensy_interface.dir/src/sencoder.cpp.o
[ 54%] Building CXX object CMakeFiles/teensy_interface.dir/src/sgpiod.cpp.o
[ 59%] Building CXX object CMakeFiles/teensy_interface.dir/src/simu.cpp.o
[ 63%] Building CXX object CMakeFiles/teensy_interface.dir/src/sjoylogitech.cpp.o
[ 68%] Building CXX object CMakeFiles/teensy_interface.dir/src/spyvision.cpp.o
[ 72%] Building CXX object CMakeFiles/teensy_interface.dir/src/sstate.cpp.o
[ 77%] Building CXX object CMakeFiles/teensy_interface.dir/src/steensy.cpp.o
[ 81%] Building CXX object CMakeFiles/teensy_interface.dir/src/upid.cpp.o
[ 86%] Building CXX object CMakeFiles/teensy_interface.dir/src/uservice.cpp.o
/home/local/svn/scorpi/teensy_interface/src/steensy.cpp: In member function ‘bool UOutQueue::setMessage(const char*)’:
/home/local/svn/scorpi/teensy_interface/src/steensy.cpp:66:12: warning: ‘char* strncpy(char*, const char*, size_t)’ output may be  truncated copying 3 bytes from a string of length 3 [-Wstringop-truncation]
   66 |     strncpy(msg, cc, 3);
      |     13:06, 21 July 2024 (CEST)~~^13:06, 21 July 2024 (CEST)13:06, 21 July 2024 (CEST)~
[ 90%] Building CXX object CMakeFiles/teensy_interface.dir/src/usocket.cpp.o
[ 95%] Building CXX object CMakeFiles/teensy_interface.dir/src/utime.cpp.o
[100%] Linking CXX executable teensy_interface
[100%] Built target teensy_interface

After a while, all should be compiled with a few warnings. Test if it can run:

Test the compiled Teensy_interface

local@joe:~/svn/scorpi/teensy_interface/build $ ./teensy_interface 
# UService:: created directory log_20240721_130326.804/
# UService::setup: open to Teensy 0
# UService::setup: open to Teensy 1
# SGpiod::setup there is no GPIO chip found - disable function
# SpyVision:: disabled in robot.ini
# UCam:: disabled in robot.ini
# --------- terminating -----------
# UService:: configuration saved to robot.ini

Output depends on the configuration file "robot.ini" created with default values.

Configuration in Robot.ini

This file could look something like this (other options are probably added or removed since this dump):

[service]
use_robot_hardware = true
logpath = log_%d/
; the '%d' will be replaced with date and timestamp (must end with a '/'). =   

[teensy0]
use = true
type = robobot
idx = 93
; robot 'name' and 'idx' are read-only, use command line option to change = 
name = Rumle
device = /dev/ttyACM0
log = true
print = false
confirm_timeout = 0.04
encrev = true
hardware = 10

[state]
log = true
print = false
regbot_version = 1646
shutdown_file = shutdown.now

[encoder0]
rate_ms = 8
log = true
print = false
encoder_reversed = true

[imu1teensy0]
rate_ms = 12
gyro_offset = 0 0 0
log = true
print_gyro = false
print_acc = false

[imu2teensy0]
rate_ms = 12
gyro_offset = 0 0 0
log = true
print_gyro = false
print_acc = false 

[servotn0]
rate_ms = 50
log = true
print = true 

[teensy1]
use = false
type = robobot
idx = 2
; robot 'name' and 'idx' are read-only, use command line option to change = 
name = noname
device = /dev/ttyACM1
log = true
print = false
confirm_timeout = 0.04
encrev = true

[state1]
log = true
print = false
regbot_version = 000 

[encoder1]
rate_ms = 8
log = true
print = false
encoder_reversed = true 

[imu1teensy1]
rate_ms = 12
gyro_offset = 0 0 0
log = true
print_gyro = false
print_acc = false

[imu2teensy1]
rate_ms = 12
gyro_offset = 0 0 0
log = true
print_gyro = false
print_acc = false

[servotn1]
rate_ms = 50
log = true
print = true

[pose]
gear = 19.0
wheeldiameter = 0.146
enctickperrev = 68
wheelbase = 0.243
log = true
print = false

[gpio]
pins_out = 12=0 16=0
stop_on_stop = true
blink_period_ms = 600
log = true
print = false

[mixer]
log = true
print = false

[heading]
kp = 10.0
lead = 0.0 1.0
taui = 0.0
maxturnrate = 3.0
log = true
print = false

[pyvision]
host = localhost
port = 25001
log = true
print = false
enabled = false

[joy_logitech]
log = true
print = false
device = /dev/input/js0
limit = 1.5 1.5 0.1
button_fast = 5
axis_vel = 4
axis_turn = 3
slow_factor = 0.3
axis_servo = 1
servo = 1
log_all = true
device_type = Logitech Gamepad F710

[camera]
device = 0
width = 1280
height = 720
fps = 25
matrix = 1000 0 640 0 1000 360 0 0 1
distortion = -0.415 0.2244 -6.875e-5 0.001279 -0.073412
imagepath = img
imagename = %d
log = true
print = false
enabled = false
pos = 0.11 0 0.23
cam_tilt = 0.01

[aruco]
imagepath = aruco
save = true
log = true
print = true

[in]
; set 'saveconfig' to 'false' to avoid autosave = 
saveconfig = true
version = 11 2024-04-22 14:40:34

[plan100]
log = true
run = true
print = true

[as5147u_0]
rate_pos_ms = 8
rate_vel_ms = 81
rate_err_ms = 82
logpos = true
logvel = true
logerr = true
print = false

[as5147u_1]
rate_pos_ms = 8
rate_vel_ms = 81
rate_err_ms = 82
logpos = true
logvel = true
logerr = true
print = false


[motor_teensy_0]
kp = 7.0
lead = 0 1.0
taui = 0.05
maxmotv = 10.0
log_pid_m1 = false
log_pid_m2 = false
log_pid_m3 = false
log_pid_m4 = false
log_voltage = true
print_m1 = false
print_m2 = false
print_m3 = false
print_m4 = false
motv_sample_time = 33
motpwm_sample_time = 33

[motor_teensy_1]
kp = 7.0
lead = 0 1.0
taui = 0.05
maxmotv = 10.0
log_pid_m1 = false
log_pid_m2 = false
log_pid_m3 = false
log_pid_m4 = false
log_voltage = true
print_m1 = false
print_m2 = false
print_m3 = false
print_m4 = false
motv_sample_time = 33
motpwm_sample_time =