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

 

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...