Scorpi

From Rsewiki

Overview

Development nodes

Raspberry pi

Raspberry pi 5 installation

  • enable serial IO hardware (GPIO pin 14,15) - but it doesn't seem to work on pi-5, can't read or write.

Install packages:

libreadline-dev
libopencv-dev
libgpiod-dev
gpiod
cmake
subversion
aptitude
ntp
ntpdate
nmap
lsof
swig
sudo apt install libreadline-dev libopencv-dev libgpiod-dev gpiod cmake subversion aptitude nmap lsof swig

YDLidar (S4B)

YDlidar serial connected like this:

YDLIDAR   cable color   Raspberry 
1 Vcc (5V)   black        4  (5V)
2 Tx         red          10 (GPIO 15) (RxD)
3 Rx         white        8  (GPIO 14)(TxD)
4 Gnd        Yellow       6  (Ground)
5 M_SCP      Orange       18 (GPIO 24)
6 Dev_enable Green        16 (GPIO 23)
7 M_enable   Blue         12 (GPIO 18)
8 NC         Purple       14 (ground, to use all pins)

Software YDLidar-SDK

From Git repository

$ mkdir -p git
$ cd git
$ git clone https://github.com/YDLIDAR/YDLidar-SDK.git
$ cd YDLidar-SDK
$ mkdir build
$ cd build
$ cmake ..
$ make -j4

Ros2 Iron

Installation on Raspberry Pi 5 running default 64-bit OS: Debian GNU/Linux 12 (bookworm)

Base

Add en_DK.UTF-8 in this list

$ sudo dpkg-reconfigure locales

Then run

$ sudo update-locale LC_ALL=en_DK.UTF-8 LANG=en_DK.UTF-8
$ export LANG=en_DK.UTF-8

Compiled packages are not supported for Raspberry 64-bit OS, so install from source, Followed:

https://docs.ros.org/en/iron/Installation/Alternatives/Ubuntu-Development-Setup.html

The result goes into ~/ros2_iron

Note that rosdep fails in most cases, as the platform is not that much supported. Manual dependency updates are therefore used in most cases.

Note, this command takes maybe 3 hours to compile all (on Raspberry Pi 5 - (8G memory):

cd ~/ros2_iron/ colcon build --symlink-install

Add this line to ~/.bashrc

source /home/local/ros2_iron/install/setup.bash

The examples should now work (in separate terminals)

ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener

ROS2 domain

Ros2 domain over local network

$export | grep ROS_

could show

declare -x ROS_AUTOMATIC_DISCOVERY_RANGE="SUBNET"
declare -x ROS_DISTRO="iron"
declare -x ROS_DOMAIN_ID="8"
declare -x ROS_LOCALHOST_ONLY="0"
declare -x ROS_PYTHON_VERSION="3"
declare -x ROS_VERSION="2"

In this case, ROS cooperates with others on the local network who also have ROS_DOMAIN_ID="8."

If used, insert these into ~/.bashrc

export ROS_DOMAIN_ID=8
export ROS_LOCALHOST_ONLY="0"

ROS_DOMAIN=0 is the default.

YDLidar driver

Make a new ROS2 workspace for this application, here called scorpi_ws

mkdir -p ~/scorpi/src
cd scorpi_ws/src

Get the modified YDLidar driver (modified for iron)

ls
  ydlidar_ros2

Modify scorpi_ws/src/ydlidar/params/ydlidar.yaml to the type of YDlidar you use, For YDlidar X4 it could look like

ydlidar_node:
 ros__parameters:
   port: /dev/ttyUSB0
   frame_id: laser_frame
   ignore_array: ""
   baudrate: 128000
   samp_rate: 9
   resolution_fixed: true
   singleChannel: false
   auto_reconnect: true
   reversion: true
   isToFLidar: false
   angle_max: 180.0
   angle_min: -180.0
   max_range: 16.0
   min_range: 0.1
   frequency: 10.0

Now build the driver

cd ..
colcon build

You should get a few warnings only.

With the YDLidar X4 connected test with the driver nodes.

cd ~/scorpi_ws
ros2 run ydlidar ydlidar_node

And get something like:

[YDLIDAR INFO] Current ROS Driver Version: 1.4.5
[YDLIDAR INFO] port: /dev/ttyUSB0
[YDLIDAR INFO] baudrate: 128000
[YDLIDAR]:SDK Version: 1.4.5
[YDLIDAR]:Lidar running correctly ! The health status: good
[YDLIDAR] Connection established in [/dev/ttyUSB0][128000]:
Firmware version: 1.4
Hardware version: 1
Model: X4
Serial: 2018060400000037
[YDLIDAR INFO] Current Sampling Rate : 5K
[YDLIDAR INFO] Now YDLIDAR is scanning ......

The node should publish /scan, e.g.:

ros2 topic list
/parameter_events
/rosout
/scan

SLAM toolbox

Fetch the SLAM toolbox from https://github.com/SteveMacenski/slam_toolbox.git

cd ~/scorpi_ws/src
git clone https://github.com/SteveMacenski/slam_toolbox.git

This can not be build right away, as some dependencies are missing

sudo apt install libsuitesparse-dev
sudo apt install libeigen3-dev
sudo apt install libceres-dev
# sudo apt install libquantlib0-dev
cd ~/scorpi_ws
colcon build

Compile failed with:

In file included from /home/local/scorpi_ws/src/slam_toolbox/src/slam_toolbox_common.cpp:23:
/home/local/scorpi_ws/src/slam_toolbox/include/slam_toolbox/slam_toolbox_common.hpp:34:10: fatal error: bondcpp/bond.hpp: 
No such file or  directory
 34 | #include "bondcpp/bond.hpp"