Scorpi: Difference between revisions

From Rsewiki
Line 189: Line 189:
  sudo apt install libeigen3-dev
  sudo apt install libeigen3-dev
  sudo apt install libceres-dev
  sudo apt install libceres-dev
  # sudo apt install libquantlib0-dev
  sudo apt install libbondcpp-dev


  cd ~/scorpi_ws
  cd ~/scorpi_ws
Line 200: Line 200:
  No such file or  directory
  No such file or  directory
   34 | #include "bondcpp/bond.hpp"
   34 | #include "bondcpp/bond.hpp"
It seems like bond.hpp is not included in the version of libbondcpp-dev.
Bond is used by the lifecycle manager - that can be disabled. So, assuming it will run without, I removed all references to bond in
include/slam_toolbox/slam_toolbox_common.hpp
src/slam_toolbox_common.cpp
Two include files, one pointer in the hpp file, two functions and two calls to these functions in the cpp file.
Then the package compiled OK.

Revision as of 13:18, 16 April 2024

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 libbondcpp-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"

It seems like bond.hpp is not included in the version of libbondcpp-dev.

Bond is used by the lifecycle manager - that can be disabled. So, assuming it will run without, I removed all references to bond in

include/slam_toolbox/slam_toolbox_common.hpp
src/slam_toolbox_common.cpp

Two include files, one pointer in the hpp file, two functions and two calls to these functions in the cpp file.

Then the package compiled OK.