Visualizzazione post con etichetta ROS. Mostra tutti i post
Visualizzazione post con etichetta ROS. Mostra tutti i post

giovedì 6 novembre 2025

Ros Noetic Docker Phantomx Reactor Robotic Arm

Ci avevo provato qui ma non era andato bene (solo Arduino era ok)..ci riprovo adesso con il dispositivo fisico 

 

  

 

Attenzione: la scheda Arbotix deve essere gia' montato lo sketch ROS (vedi post precedente)

Per prima cosa si crea nella propria home

mkdir ~/ws_catkin

mkdir ~/ws_catkin/src 

xhost +local:docker

poi si lancia il docker (immagine completa di No Etic) 

sudo docker run -it   --net=host   --env="DISPLAY=$DISPLAY"   --env="QT_X11_NO_MITSHM=1"   --env="XAUTHORITY=$XAUTH"   --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw"   --volume="$HOME/ws_catkin:/root/ws_catkin:rw" --device=/dev/ttyUSB0:/dev/ttyUSB0 --privileged   --name ros_noetic_gui   osrf/ros:noetic-desktop-full

per testare si usa il simulatore turtle  

roscore&

rosrun turtlesim turtlesim_node&
 
si dovrebbe essere aperta una finestra grafica 

 
si richiedono i servizi disponibili
rosservice list
 
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
 
ed i topic 
rostopic list
 
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

 
si richiedono le info su un topic  
rostopic info /turtle1/cmd_vel 
 
Type: geometry_msgs/Twist
Publishers: None
Subscribers:
/turtlesim (http://...)



ed il formato dei messaggi
rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z



a questo punto si puo' muovere la tartaruga
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "{linear: {x: 3.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 2.0}}"
 
per lo spostamento assoluto 
rosservice call /turtle1/teleport_absolute 5 5 0

si puo' pilotare la tartaruga anche la pressione dei tasti usando  
rosrun turtlesim turtle_teleop_key 
 
a questo punto si inizia a modificare il container per impostarlo sul Phantomx Reactor 
sudo apt update
sudo apt install udev python3-serial 
 
a questo punto si inizia a preparare l'ambiente  ROS per il braccio robotico
 
cd /root/ws_catkin/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
cd ..
 
i file su Github sono fatti per Python 2.7 mentre Ros NoEtic usa Python3 ...delle due l'una ... o si installa python2.7 o si modificano i files 
 
 
cd ~/ws_catkin/src/phantomx_reactor_arm/phantomx_reactor_arm_controller/src


sed -i '1s|/usr/bin/env python|/usr/bin/env python3|' *.py

chmod +x *.py
 
sed -i 's/except rospy\.ROSException, e:/except rospy.ROSException as e:/' phantomx_reactor_parallel_motor_joints.py
 
 
catkin_make
source devel/setup.bash
rospack profile
  
 
0.023993   /opt/ros/noetic/share
0.002395   /root/ws_catkin/src
0.000854   /root/ws_catkin/src/arbotix_ros
0.000626   /root/ws_catkin/src/dynamixel_motor
0.000614   /root/ws_catkin/src/phantomx_reactor_arm

se tutto va bene 
rospack list | grep arbotix
arbotix_controllers /root/ws_catkin/src/arbotix_ros/arbotix_controllers
arbotix_firmware /root/ws_catkin/src/arbotix_ros/arbotix_firmware
arbotix_msgs /root/ws_catkin/src/arbotix_ros/arbotix_msgs
arbotix_python /root/ws_catkin/src/arbotix_ros/arbotix_python
arbotix_sensors /root/ws_catkin/src/arbotix_ros/arbotix_sensors
rospack list | grep phantomx
phantomx_reactor_arm_controller /root/ws_catkin/src/phantomx_reactor_arm/phantomx_reactor_arm_controller
phantomx_reactor_arm_description /root/ws_catkin/src/phantomx_reactor_arm/phantomx_reactor_arm_description
phantomx_reactor_arm_moveit_config /root/ws_catkin/src/phantomx_reactor_arm/phantomx_reactor_arm_moveit_config


si prepara la porta USB
sudo cp phantomx_reactor_arm/phantomx_reactor_arm_controller/config/57-reactor_arbotix.rules /etc/udev/rules.d/
 
lanciare il comando 
udevadm info -a -n /dev/ttyUSB0 | grep serial
che risponde 
ATTRS{serial}=="AH06H0KT"

e quindi
sudo nano /etc/udev/rules.d/99-reactor.rules
e si copia 
SUBSYSTEM=="tty", ATTRS{serial}=="AH06H0KT", SYMLINK+="ttyUSB_REACTOR"

si aggiorna udev 
sudo service udev reload
sudo service udev restart
sudo udevadm trigger 

se persistono problemi (ovvero che non viene vista la porta USB_REACTOR) puo' essere forzata con 
 
ln -s /dev/ttyUSB0 /dev/ttyUSB_REACTOR

quasi pronti...si dovrebbe lanciare il comando 

roslaunch phantomx_reactor_arm_controller arbotix_phantomx_reactor_arm_wrist.launch&
 
a questo punto si possono testare le stringhe comando
 
 
rostopic pub /phantomx_reactor_controller/shoulder_yaw_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/shoulder_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/elbow_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/wrist_yaw_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/wrist_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/gripper_revolute_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /phantomx_reactor_controller/gripper_prismatic_joint/command std_msgs/Float64 "data: 0.0"
 
i valori sono espressi tutti in radianti e sono valori assoluti
per spostarsi dalla posizione neutra al +90 gradi si immette data:1.57, per tornare indietro di immette data:0.0 e NON data:-1.57 

Per impostare la velocita' (espressa in rad/s)
rosparam set /arbotix/joints/shoulder_yaw_joint/max_speed 0.5
 
 
 
Oltre ad usare il braccio si puo' usare l'emulazione ma si devono fare delle modifiche
nano ~/ws_catkin/src/phantomx_reactor_arm/phantomx_reactor_arm_moveit_config/launch/planning_context.launch

e si modifica la linea cambiando xacro.py a xacro
 
 <param if="$(arg load_robot_description)" name="$(arg robot_description)" command="$(find xacro)/xacro '$(find phantomx_reactor_arm_description)/robots/phantomx_reactor_arm_wrist.urdf.xacro'"/>

sudo apt update
sudo apt install ros-noetic-moveit
export RVIZ_PLUGIN_PATH=/opt/ros/noetic/lib


e si ricompila il ws_catkin

roslaunch phantomx_reactor_arm_moveit_config demo.launch

visto tutto il lavoro fatto e' il caso di salvare le impostazione tramite commit
si apre una nuova shell e si lancia
docker ps -a
si legge l'id e si lancia
 
docker commit b8a109b1fd3b braccio_robotico:latest
 
per riaprire 
docker run -it --net=host braccio_robotico:latest

si ricorda che ad ogni nuovo riavvio si deve lanciare 
source ~/ws_catkin/devel/setup.bash

rosservice list
/arbotix/SetupAnalogIn
/arbotix/SetupDigitalIn
/arbotix/SetupDigitalOut
/arbotix/get_loggers
/arbotix/set_logger_level
/elbow_pitch_joint/enable
/elbow_pitch_joint/relax
/elbow_pitch_joint/set_speed
/elbow_pitch_mimic_joint/enable
/elbow_pitch_mimic_joint/relax
/elbow_pitch_mimic_joint/set_speed
/gripper_revolute_joint/enable
/gripper_revolute_joint/relax
/gripper_revolute_joint/set_speed
/move_group/get_loggers
/move_group/planning_scene_monitor/set_parameters
/move_group/set_logger_level
/phantomx_reactor_controller/get_loggers
/phantomx_reactor_controller/set_logger_level
/phantomx_reactor_parallel_gripper/get_loggers
/phantomx_reactor_parallel_gripper/set_logger_level
/robot_state_publisher/get_loggers
/robot_state_publisher/set_logger_level
/rosout/get_loggers
/rosout/set_logger_level
/servos/enable_all
/servos/relax_all
/shoulder_pitch_joint/enable
/shoulder_pitch_joint/relax
/shoulder_pitch_joint/set_speed
/shoulder_pitch_mimic_joint/enable
/shoulder_pitch_mimic_joint/relax
/shoulder_pitch_mimic_joint/set_speed
/shoulder_yaw_joint/enable
/shoulder_yaw_joint/relax
/shoulder_yaw_joint/set_speed
/wrist_pitch_joint/enable
/wrist_pitch_joint/relax
/wrist_pitch_joint/set_speed
/wrist_roll_joint/enable
/wrist_roll_joint/relax
/wrist_roll_joint/set_speed
 
topics
/diagnostics
/elbow_pitch_joint/command
/elbow_pitch_mimic_joint/command
/gripper_revolute_joint/command
/joint_states
/move_group/planning_scene_monitor/parameter_descriptions
/move_group/planning_scene_monitor/parameter_updates
/phantomx_reactor_controller/elbow_pitch_joint/command
/phantomx_reactor_controller/gripper_prismatic_joint/command
/phantomx_reactor_controller/gripper_revolute_joint/command
/phantomx_reactor_controller/joint_command
/phantomx_reactor_controller/shoulder_pitch_joint/command
/phantomx_reactor_controller/shoulder_yaw_joint/command
/phantomx_reactor_controller/wrist_pitch_joint/command
/phantomx_reactor_controller/wrist_roll_joint/command
/rosout
/rosout_agg
/shoulder_pitch_joint/command
/shoulder_pitch_mimic_joint/command
/shoulder_yaw_joint/command
/tf
/tf_static
/wrist_pitch_joint/command
/wrist_roll_joint/command
 
 
per abilitare un asse
 

rosservice call /elbow_pitch_joint/enable "data: true"

 rostopic echo /joint_states

 

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: 
 

Microfoni Kinect1

Ho trovato quasi per caso su Internet che il Kinect 1 ha un array di 4 microfoni che permettono di determinare la direzione del suono (ed es...