Skip to content
Snippets Groups Projects
Commit d81d4620 authored by Younes Oubkis's avatar Younes Oubkis
Browse files

submodule cleanup

parent 9ff6a6cb
No related branches found
No related tags found
No related merge requests found
Showing
with 547 additions and 1 deletion
phantomx_reactor_arm @ 5b88ef75
Subproject commit 5b88ef75a2678557a2bd799a90bfdc0deffa5da5
*~
{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/opt/ros/humble/include/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}
\ No newline at end of file
{
"ros.distro": "humble",
"python.autoComplete.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages"
],
"python.analysis.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages"
]
}
\ No newline at end of file
Software License Agreement (BSD License)
Copyright (c) 2015, Robotnik Automation SLL. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Robotnik Automation SSL nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
# phantomx_reactor_arm
<h2>Description</h2>
The PhantomX Reactor Robot Arm is the first in Interbotix Labs' offering of Arbotix based research grade robotic arms. The Reactor Arm was designed with reach and agility in mind, but it still boasts considerable strength for an arm of its size. The PhantomX Reactor Robot Arm was designed with entry-level research and university use in mind, providing one of the highest featured arms on the market today while not breaking one's budget.
<h2>Supported Hardware</h2>
![Image of PhantomX reactor arm](http://www.trossenrobotics.com/resize/Shared/images/PImages/reactor/reactor-1a.jpg?bw=1000&bh=1000)
# phantomx_reactor_arm_description
This package contains the PhantomX reactor arm model (urdf, meshes, ...).
# phantomx_reactor_arm_controller
This package contains the configuration files for the controllers used by the model.
The arm can be controller either through the Arbotix-M controller or the USB2Dynamixel.
## Installation and configuration
### Setting up the Arbotix-M board
In order to work with ROS it is necessary to upload the firmware into the Arbotix-M board.
* Download Arduino ide from https://downloads.arduino.cc/arduino-1.0.6-linux64.tgz
* wget https://downloads.arduino.cc/arduino-1.0.6-linux64.tgz
* Extract it into a folder.
* Download the firmware archives from https://github.com/trossenrobotics/arbotix/archive/master.zip
* wget https://github.com/trossenrobotics/arbotix/archive/master.zip
* Extract it into a folder like ~/Documents/Arduino
* Run arduino from the folder you extracted it previously
* cd ~/Downloads/arduino-1.0.6
* ./arduino
* Once Arduino IDE is running, change the Sketchbook folder location to /Documents/Arduino/arbotixmaster or the one you extracted it previously.
* File->Preferences->Sketchbook Location
* Tools->Board->Arbotix
* Tools->Serial Port->/dev/ttyUSBX
* File->Sketchbook->Arbotix Sketches ->ros
* Verify + Upload
* The Arbotix is ready to work with ROS!!
### Downloading the package
clone the repo into your workspace and compile it.
```
git clone https://github.com/RobotnikAutomation/phantomx_reactor_arm.git
```
### Creating the udev rule for the device
#### For the Arbotix-M and USB2Dynamixel
In the phantomx_reactor_arm_controller/config folder there's the file 57-reactor_arbotix.rules/reactor_usb2dynamixel.rules. You have to copy it into the /etc/udev/rules.d folder.
```
sudo cp 57-reactor_arbotix.rules /etc/udev/rules.d
```
You have to set the attribute ATTRS{serial} with the current serial number of the ftdi device
```
udevadm info -a -n /dev/ttyUSB0 | grep serial
```
Once modified you have to reload and restart the udev daemon
```
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
```
### Running the controller
#### Arbotix-M
* For the arm with wrist
```
roslaunch phantomx_reactor_arm_controller arbotix_phantomx_reactor_arm_wrist.launch
```
* For the arm without wrist
```
roslaunch phantomx_reactor_arm_controller arbotix_phantomx_reactor_arm_no_wrist.launch
```
#### USB2Dynamixel Controller
* Run the controller
```
roslaunch phantomx_reactor_arm_controller dynamixel_phantomx_reactor_arm_wrist.launch
```
* Load description and run the robot state publisher
```
roslaunch phantomx_reactor_arm_description phantomx_reactor_wrist_load_description.launch
```
* Run Moveit plugin for RVIZ
Moveit only works (for now) for the USB2Dynamixel option.
If you run the moveit demo, the previous launch with the description is not necessary.
Runnig demo with fake controllers (no real arm needed).
```
roslaunch phantomx_reactor_arm_moveit_config demo.launch
```
Running demo with the real controllers
```
roslaunch phantomx_reactor_arm_moveit_config demo_real.launch
```
### Commanding the controller
#### Arbotix-M
**Be carefull with dependency of j2-j3 and j4-j5!!! Try not to command directly the joints topics processed by the arbotix node.**
Use the command topic subscribed by the node phantomx_reactor_parallel_motor_joints.py
```
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"
```
#### USB2Dynamixel Controller
```
rostopic pub /shoulder_yaw_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /shoulder_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /elbow_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /wrist_yaw_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /wrist_pitch_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /gripper_revolute_joint/command std_msgs/Float64 "data: 0.0"
rostopic pub /gripper_prismatic_joint/command std_msgs/Float64 "data: 0.0"
```
{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"/home/youni/Documents/Development/dynamixel_contr/install/include/**",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/install/include/**",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/devel/include/**",
"/home/youni/miniforge3/envs/ros_env/include/**",
"/usr/include/**"
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "c++14"
}
],
"version": 4
}
\ No newline at end of file
{
"python.autoComplete.extraPaths": [
"/home/youni/Documents/Development/arbotix_robotnik/devel/lib/python3.9/site-packages",
"/home/youni/Documents/Development/dynamixel_contr/install/lib/python3.9/site-packages",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/install/lib/python3.9/site-packages",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/devel/lib/python3.9/site-packages",
"/home/youni/miniforge3/envs/ros_env/lib/python3.9/site-packages"
],
"python.analysis.extraPaths": [
"/home/youni/Documents/Development/arbotix_robotnik/devel/lib/python3.9/site-packages",
"/home/youni/Documents/Development/dynamixel_contr/install/lib/python3.9/site-packages",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/install/lib/python3.9/site-packages",
"/home/youni/Documents/Development/Arbotix_ROS_Controller/devel/lib/python3.9/site-packages",
"/home/youni/miniforge3/envs/ros_env/lib/python3.9/site-packages"
],
"ros.distro": "humble"
}
\ No newline at end of file
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package phantomx_reactor_arm_controller
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0.1.4 (2016-09-05)
------------------
* modified 4dof launch file
* Contributors: carlos3dx
0.1.3 (2016-08-10)
------------------
* Corrected the Cmakelists and Setup.py files
* Changing path in setup.py
* Adding missing dependencies
* Contributors: AliquesTomas
0.1.2 (2016-08-09)
------------------
0.1.1 (2016-08-09)
------------------
* Added package to indigo and wiki
* Adding controller and description. Only for 4dof for now
* Contributors: AliquesTomas, RomanRobotnik
cmake_minimum_required(VERSION 2.8.3)
project(phantomx_reactor_arm_controller)
find_package(catkin REQUIRED COMPONENTS rospy arbotix_python dynamixel_controllers dynamixel_msgs)
catkin_python_setup()
catkin_package()
install(DIRECTORY launch
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY config
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
catkin_install_python(PROGRAMS src/phantomx_reactor_parallel_motor_joints.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
catkin_install_python(PROGRAMS src/phantomx_reactor_gripper.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
catkin_install_python(PROGRAMS src/dynamixel_joint_state_publisher.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
cmake_minimum_required(VERSION 2.8.3)
project(phantomx_reactor_arm_controller)
find_package(catkin REQUIRED COMPONENTS rospy arbotix_python dynamixel_controllers dynamixel_msgs)
catkin_python_setup()
catkin_package()
install(DIRECTORY launch
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY config
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
catkin_install_python(PROGRAMS src/phantomx_reactor_parallel_motor_joints.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A904NK42", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_REACTOR"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A904NK42", MODE:="0666", GROUP:="dialout", SYMLINK+="ttyUSB_REACTOR"
# Config file for PhantomX Reactor
port: /dev/ttyUSB_REACTOR
rate: 50
joints: {
arm_1_joint: {id: 1, max_speed: 75.0},
arm_2_joint: {id: 2, max_speed: 75.0},
arm_2_1_joint: {id: 3, max_speed: 75.0},
arm_3_joint: {id: 4, max_speed: 75.0},
arm_3_1_joint: {id: 5, max_speed: 75.0},
arm_4_joint: {id: 6, max_speed: 75.0},
arm_gripper_joint: {id: 8, max_speed: 125.0, range: 180, min_angle: -90.0, max_angle: 0},
}
#
# Be carefull with dependency of j2-j3 and j4-j5!!!
# Use the node phantomx_reactor_parallel_motor_joints.py for that purpose
#
# controllers: {
# arm_controller: {type: follow_controller, joints: [arm_1_joint, arm_2_joint, arm_3_joint, arm_4_joint, arm_5_joint, arm_6_joint, arm_8_joint]}
# }
# arm_8_joint: {id: 8, max_speed: 125.0, range: 180.0, min_angle: -90.0, max_angle: 90.0},
# Config file for PhantomX Reactor
port: /dev/ttyUSB0
rate: 100
read_rate: 15
write_rate: 25
joints: {
shoulder_yaw_joint: {id: 1, max_speed: 30.0, type: dynamixel},
shoulder_pitch_joint: {id: 2, max_speed: 30.0, type: dynamixel},
shoulder_pitch_mimic_joint: {id: 3, max_speed: 30.0, type: dynamixel},
elbow_pitch_joint: {id: 5, max_speed: 30.0, type: dynamixel},
elbow_pitch_mimic_joint: {id: 4, max_speed: 30.0, type: dynamixel},
wrist_pitch_joint: {id: 6, max_speed: 30.0, invert: true, type: dynamixel},
wrist_roll_joint: {id: 7, max_speed: 30.0, type: dynamixel},
gripper_revolute_joint: {id: 8, max_speed: 40.0, range: 180, min_angle: -90.0, max_angle: 0, type: dynamixel},
}
controllers: {
arm_controller: {type: follow_controller, joints: [shoulder_yaw_joint, shoulder_pitch_joint, shoulder_pitch_mimic_joint, elbow_pitch_joint, elbow_pitch_mimic_joint, wrist_pitch_joint, wrist_roll_joint, gripper_revolute_joint]},
}
#
# Be carefull with dependency of j2-j3 and j4-j5!!!
# Use the node phantomx_reactor_parallel_motor_joints.py for that purpose
#
joints: ['shoulder_yaw_joint', 'shoulder_pitch_joint', 'elbow_pitch_joint', 'wrist_pitch_joint', 'wrist_roll_joint', 'gripper_revolute_joint']
shoulder_yaw_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: shoulder_yaw_joint
joint_speed: 1.5
motor:
id: 1
init: 512
min: 0
max: 1023
shoulder_pitch_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller_dual_motor
type: JointPositionControllerDual
joint_name: shoulder_pitch_joint
joint_speed: 1.0
motor_master:
id: 2
init: 512
min: 200
max: 800
motor_slave:
id: 3
elbow_pitch_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller_dual_motor
type: JointPositionControllerDual
joint_name: elbow_pitch_joint
joint_speed: 1.0
motor_master:
id: 5
init: 512
min: 200
max: 800
motor_slave:
id: 4
wrist_pitch_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: wrist_pitch_joint
joint_speed: 1.5
reverse: true
motor:
id: 6
init: 512
min: 768
max: 256
wrist_roll_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: wrist_roll_joint
joint_speed: 1.5
motor:
id: 7
init: 512
min: 256
max: 768
gripper_revolute_joint:
controller:
package: dynamixel_controllers
module: joint_position_controller
type: JointPositionController
joint_name: gripper_revolute_joint
joint_speed: 1.5
motor:
id: 8
init: 512
min: 0
max: 900
arm_controller:
controller:
package: dynamixel_controllers
module: joint_trajectory_action_controller
type: JointTrajectoryActionController
joint_trajectory_action_node:
min_velocity: 0.1
constraints:
goal_time: 0.1
namespace: dxl_manager
serial_ports:
arbotix_port:
port_name: "/dev/ttyUSB0"
baud_rate: 1000000
min_motor_id: 1
max_motor_id: 8
update_rate: 10
<?xml version="1.0"?>
<launch>
<param name="robot_description" command="$(find xacro)/xacro.py '$(find phantomx_reactor_arm_description)/robots/phantomx_reactor_arm_no_wrist.urdf.xacro'" />
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<rosparam file="$(find phantomx_reactor_arm_controller)/config/arbotix_config_phantomx_no_wrist.yaml" command="load" />
</node>
<node name="phantomx_reactor_controller" pkg="phantomx_reactor_arm_controller" type="phantomx_reactor_parallel_motor_joints.py" output="screen"/>
<!--node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
<param name="use_gui" value="TRUE"/>
</node-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
<!-- Show in Rviz -->
<node name="rviz" pkg="rviz" type="rviz"/>
</launch>
<?xml version="1.0"?>
<launch>
<!--param name="robot_description" command="$(find xacro)/xacro.py '$(find phantomx_reactor_arm_description)/robots/phantomx_reactor_arm_wrist.urdf.xacro'" /-->
<!-- Load arbotix_driver -->
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<!-- Load params in ROS parameter server -->
<rosparam file="$(find phantomx_reactor_arm_controller)/config/arbotix_config_phantomx_wrist.yaml" command="load" />
</node>
<!-- This node coordinates the motors with the parallel/mimic joints -->
<node name="phantomx_reactor_controller" pkg="phantomx_reactor_arm_controller" type="phantomx_reactor_parallel_motor_joints.py" output="screen"/>
<!-- Start the node to publish and command the parallel gripper -->
<node name="phantomx_reactor_parallel_gripper" pkg="phantomx_reactor_arm_controller" type="phantomx_reactor_gripper.py" output="screen" >
<param name="rate" value="15"/>
<param name="prismatic_command" value="/phantomx_reactor_controller/gripper_prismatic_joint/command"/>
</node>
<!--node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/-->
<!-- Show in Rviz -->
<!--node name="rviz" pkg="rviz" type="rviz"/-->
</launch>
<?xml version="1.0"?>
<launch>
<node name="dynamixel_manager" pkg="dynamixel_controllers" type="controller_manager.py" required="true" output="screen">
<rosparam file="$(find phantomx_reactor_arm_controller)/config/dynamixel_manager.yaml" command="load" />
</node>
<!-- Load controller configuration to parameter server -->
<rosparam file="$(find phantomx_reactor_arm_controller)/config/dynamixel_controllers.yaml" command="load" />
<!-- start specified joint controllers -->
<node name="dynamixel_controller_spawner" pkg="dynamixel_controllers" type="controller_spawner.py"
args="--manager=dxl_manager
--port=arbotix_port
--type=simple
gripper_revolute_joint
wrist_roll_joint
wrist_pitch_joint
elbow_pitch_joint
shoulder_pitch_joint
shoulder_yaw_joint"
output="screen"/>
<node name="dynamixel_controller_spawner2" pkg="dynamixel_controllers" type="controller_spawner.py"
args="--manager=dxl_manager
--type=meta
arm_controller
wrist_roll_joint
wrist_pitch_joint
elbow_pitch_joint
shoulder_pitch_joint
shoulder_yaw_joint"
output="screen"/>
<node name="grip_controller" pkg="arbotix_controllers" type="gripper_controller" output="screen" >
<param name="model" value="parallel"/>
<param name="joint" value="gripper_revolute_joint"/>
</node>
<!-- Start the Dynamixel Joint States Publisher -->
<node name="dynamixel_joint_states_publisher" pkg="phantomx_reactor_arm_controller" type="dynamixel_joint_state_publisher.py" output="screen" >
<param name="rate" value="10"/>
</node>
<!-- Start the node to publish and command the parallel gripper -->
<node name="phantomx_reactor_parallel_gripper" pkg="phantomx_reactor_arm_controller" type="phantomx_reactor_gripper.py" output="screen" >
<param name="rate" value="10"/>
</node>
</launch>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment