domenica 26 ottobre 2025

In attesa di Phantom Reactor

Aggiornamento: ho provato ad usare Docker al posto di una macchina virtuale...non riesce a funzionare in nessun modo anche con i suggerimenti di AI ed usando il docker compose ufficiale  il problema e' sempre di rete e si risolve con Unable to communicate with the master...rinuncio
========================================= 
 
Mi sono comprato scontatissimo un braccio robotico Phantomx Reactor per sperimentare con robot fisici. In attesa che arrivi mi sono messo a studiare ROS
Due problemi
1) il robot e' vecchio e ci sono i driver solo per ROS 1
2) il robot ha i servo accoppiati quindi sbagliare a pilotarlo ed azionare solo uno dei due servo della coppia portera' alla distruzione


Iniziamo con le cose facili....Arduino

si scarica Arduino IDE 1.0.6 (progetto vecchio IDE vecchia)

https://downloads.arduino.cc/arduino-1.0.6-linux64.tgz 

si scaricano le librerie del robot

https://github.com/trossenrobotics/arbotix/archive/master.zip 

si scompattano le librerie in un folder tipo ~/Documents/Arduino

si crea in ~/Documents/Arduino un folder hardware e si copia il file boards.txt dove c'e' la definizione della Arbotix

https://github.com/vanadiumlabs/arbotix/blob/master/hardware/arbotix/boards.txt

a questo punto si puo' aprire la IDE e

  • File->Preferences->Sketchbook Location
  • Tools->Board->Arbotix
  • Tools->Serial Port->/dev/ttyUSBX
  • File->Sketchbook->Arbotix Sketches ->ros
  • Verify + Upload

 in questo modo sulla scheda c'e' caricato il firmware per connettere il robot tramite ROS (ci sono altri sketch piu' semplici per muovere il robot senza passare da ROS)

Visto che si tratta di ROS1 ho montato una macchina virtuale Ubuntu 18.04.06 (ultima disponibile con ROS che permetta anche l'aggiornamento dei pacchetti con apt)

Questa e' la serie di comandi per installare Ros ed i driver del robot

Primo problema ...su Ubuntu 18.04 non si apre il terminale dopo installazione

la cosa piu' semplice e' installare una shell alternativa 

 ALT+F2 gnome-software tilix

secondo problema (emerso solo in una installazione ...la chiave di apt)


$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ curl http://repo.ros2.org/repos.key | sudo apt-key add -
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu lsb_release -cs main" > /etc/apt/sources.list.d/ros2-latest.list' 

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'


curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

sudo apt update
sudo apt install ros-melodic-desktop-full


sudo apt install python-rosdep
sudo rosdep init
rosdep update


echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc


mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc


per provare che tutto funzioni in un terminale si lancia il comando
roscore

e in un altro terminale 
rosrun turtlesim turtlesim_node

ed a questo punto ROS1 e' installato e funzionante

spostarsi in ~/catkin-ws/src (attenzione a src)

git clone https://github.com/vanadiumlabs/arbotix_ros.git
git clone https://github.com/RobotnikAutomation/phantomx_reactor_arm
git clone https://github.com/arebgun/dynamixel_motor.git

si torna poi indietro in ~/catkin-ws
 
source /opt/ros/melodic/setup.bash && catkin_make
 
a questo punto si cambia da python3 in python in arbotix_driver
 
 sed -i '1s|.*|#!/usr/bin/env python|' /home/luca/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_driver
 
fatto cio' si configura la porta seriale
 
cd catkin_ws/phantomx_reactor_arm/phantomx_reactor_arm_controller/config/
sudo cp 57-reactor_arbotix.rules /etc/udev/rules.d
udevadm info -a -n /dev/ttyUSB0 | grep serial 

 sudo service udev reload
sudo service udev restart
sudo udevadm trigger
 
sudo usermod -a -G dialout $USER
 
il robot si aspetta comandi su /dev/ttyUSB_REACTOR si rigira ttyUSB0 su ttyUSB_REACTOR
 
si lancia il comando 
 
udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n 1
 
si legge il valore del serial e lo si copia nel file (sostituire la stringa {serial} con la stringa del serial
 
sudo nano /etc/udev/rules.d/99-reactor.rules
 
SUBSYSTEM=="tty", ATTRS{serial}=="YOUR_SERIAL_HERE", SYMLINK+="ttyUSB_REACTOR"
 
e si aggiorna le udev
 
sudo udevadm control --reload-rules
sudo udevadm trigger

 
a questo punto dovremmo essere in grado di lanciare
 
cd ~/catkin_ws/phantomx_reactor_arm/phantomx_reactor_arm_controller/launch/
roslaunch phantomx_reactor_arm_controller arbotix_phantomx_reactor_arm_wrist.launch
 
 
 
 
# Move to positive angle
rostopic pub --once /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: 1.0"

# Wait a moment, then move to negative angle
rostopic pub --once /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: -1.0"

# Return to center
rostopic pub --once /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: 0.0" 
 
 
#!/bin/bash

while true; do
  echo "Moving to 1.0"
  rostopic pub --once /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: 1.0"
  sleep 2
  
  echo "Moving to -1.0"
  rostopic pub --once /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: -1.0"
  sleep 2
done 
 
 
 
 
rostopic echo /joint_states
header: 
  seq: 2785
  stamp: 
    secs: 1761918289
    nsecs: 796997070
  frame_id: ''
name: 
  - elbow_pitch_mimic_joint
  - shoulder_pitch_joint
  - wrist_pitch_joint
  - wrist_roll_joint
  - shoulder_yaw_joint
  - elbow_pitch_joint
  - gripper_revolute_joint
  - shoulder_pitch_mimic_joint
position: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
effort: []
---
header: 
  seq: 3318
  stamp: 
    secs: 1761918289
    nsecs: 800457000
  frame_id: ''
name: 
  - gripper_right_joint
position: [0.014999999999999998]
velocity: [0.0]
effort: [0.0]
---
header: 
  seq: 3319
  stamp: 
    secs: 1761918289
    nsecs: 902303934
  frame_id: ''
name: 
  - gripper_right_joint
position: [0.014999999999999998]
velocity: [0.0]
effort: [0.0]
---
header: 
  seq: 2786
  stamp: 
    secs: 1761918289
    nsecs: 925811052
  frame_id: ''
name: 
  - elbow_pitch_mimic_joint
  - shoulder_pitch_joint
  - wrist_pitch_joint
  - wrist_roll_joint
  - shoulder_yaw_joint
  - elbow_pitch_joint
  - gripper_revolute_joint
  - shoulder_pitch_mimic_joint
position: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
velocity: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
effort: []
---
header: 
  seq: 3320
  stamp: 
    secs: 1761918290
    nsecs:   7497072
  frame_id: ''
name: 
 

Nessun commento:

Posta un commento

Algoritmo Reed Solomon

 Sto progettando una trasmissione radio di immagini ed uno dei vincoli e' che non e' garantita la perfetta qualita' della trasmi...