Skip to content

BryanStuurman/doosan-robot

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bryan has made some changes:

  • shebangin' on that python3 the way the ubuntu gods intended
  • fake roscontrol interface in radians
  • deleted a wayward cmakelists in the root that called the roskinetic catkin cmake...? colcon wouldnt build it so I got rid of it.
  • fixed a missing return in drflex.h
  • reduced publisher and subscriber buffering to 1 message in /command topics.
  • installed python library DSR_ROBOT so there no more relative import horrors
  • added a realtime example (untested!)

bryan other notes

  • Watch out for the emulator not coming up fast enough for the driver to connect to it, get around that by running it a priori: rosrun common run_dcrf_noetic.sh

  • I didnt really read too hard when I converted the command to radians, so it could break other services.That's a future bryan problem.

  • Ros control interface is faked for commands:
    dsr_hw_interface.cpp does this on line 732:
    m_sub_joint_position = private_nh_.subscribe("dsr_joint_position_controller/command", 10, &DRHWInterface::positionCallback, this);

    and of course DRHWInterface::positionCallback just calls amovej() on line 1067:
    Drfl.amovej(target_pos.data(), 50, 50);

bryan #TODOs

  • write a velocity interface using RT components.
  • tweak the RT services so that they can time out, seeing as how UDP is stateless and those commands can simply disappear into the void.

license - apache 2.0 License support level: community

overview

Doosan ROS Video

Doosan ROS Online Lecture(Kor)
Doosan ROS Online Lecture(Eng)

build

Doosan Robot ROS Package is implemented at ROS-Kinetic.
### We recoomand the /home/<user_home>/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/doosan-robotics/doosan-robot
rosdep install --from-paths doosan-robot --ignore-src --rosdistro kinetic -r -y
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash

package list

sudo apt-get install ros-kinetic-rqt* ros-kinetic-moveit* ros-kinetic-industrial-core ros-kinetic-gazebo-ros-control ros-kinetic-joint-state-controller ros-kinetic-effort-controllers ros-kinetic-position-controllers ros-kinetic-ros-controllers ros-kinetic-ros-control ros-kinetic-serial

packages for mobile robot

sudo apt-get install ros-kinetic-lms1xx ros-kinetic-interactive-marker-twist-server ros-kinetic-twist-mux ros-kinetic-imu-tools ros-kinetic-controller-manager ros-kinetic-robot-localization

usage

Operation Mode

Virtual Mode

If you are driveing without a real robot, use virtual mode
When ROS launches in virtual mode, the emulator(DRCF) runs automatically.

(DRCF) location: doosan-robot/common/bin/ DRCF

roslaunch dsr_launcher single_robot_gazebo.launch mode:=virtual

One emulator is required for each robot

Real Mode

Use real mode to drive a real robot
The default IP of the robot controller is 192.168.127.100 and the port is 12345.

roslaunch dsr_launcher single_robot_gazebo.launch mode:=real host:=192.168.127.100 port:=12345

dsr_description

roslaunch dsr_description m0609.launch    
roslaunch dsr_description m1013.launch color:=blue # Change Color
roslaunch dsr_description m1509.launch gripper:=robotiq_2f # insert robotiq gripper
roslaunch dsr_description m0617.launch color:=blue gripper:=robotiq_2f # change color & insert robotiq gripper
roslaunch dsr_description a0509.launch 

$ roslaunch dsr_description m1013.launch

$ roslaunch dsr_description m0617.launch color:=blue gripper:=robotiq_2f


dsr_moveit_config

arguments

color:= ROBOT_COLOR <white / blue> defalut = white

roslaunch moveit_config_m0609 m0609.launch
roslaunch moveit_config_m0617 m0617.launch
roslaunch moveit_config_m1013 m1013.launch color:=blue
roslaunch moveit_config_m1509 m1509.launch
roslaunch moveit_config_a0509 a0509.launch


dsr_control (default model:= m1013, default mode:= virtual)

arguments

host := ROBOT_IP defalut = 127.0.0.1 port := ROBOT_PORT default = 12345
mode := OPERATION MODE <virtual / real> defalut = virtual
model := ROBOT_MODEL <m0609 / 0617 / m1013 / m1509 / a0509 / a0912 / h2017 / h2515> defalut = m1013
color := ROBOT_COLOR <white / blue> defalut = white
gripper := USE_GRIPPER <none / robotiq_2f> defalut = none
mobile := USE_MOBILE <none / husky> defalut = none

dsr_moveit

roslaunch dsr_launcher dsr_moveit.launch
roslaunch dsr_launcher dsr_moveit.launch model:=m0609 mode:=virtual
roslaunch dsr_launcher dsr_moveit.launch model:=m0617 mode:=virtual
roslaunch dsr_launcher dsr_moveit.launch model:=m1013 mode:=virtual
roslaunch dsr_launcher dsr_moveit.launch model:=m1509 mode:=virtual
roslaunch dsr_launcher dsr_moveit.launch model:=a0509 mode:=virtual

dsr_moveit + gazebo

roslaunch dsr_launcher dsr_moveit_gazebo.launch
How to use MoveIt Commander
You can run Moveit with CLI commands through the moveit commander package.
You can install the "moveit_commander" package using below command.
sudo apt-get install ros-kinetic-moveit-commander
MoveitCommander usage example
roslaunch dsr_launcher dsr_moveit.launch model:=m1013
In another terminal 
ROS_NAMESPACE=/dsr01m1013 rosrun moveit_commander moveit_commander_cmdline.py robot_description:=/dsr01m1013/robot_description   
moveit commander CLI is executed.
> use arm 
> goal0 = [0 0 0 0 0 0]        # save the home position to variable "goal0"
> goal1 = [0 0 1.57 0 1.57 0]  # save the target position to varialbe "goal1" / radian
> go goal1                     # plan & excute (the robot is going to move target position)
> go goal0                     # paln & excute (the robot is going to move home position)

dsr_launcher

If you don`t have real doosan controller, you must execute emulator before run dsr_launcer.

arguments

host:= ROBOT_IP defalut = 127.0.0.1 ##controller IP = 192.168.127.100 port:= ROBOT_PORT default = 12345
mode:= OPERATION MODE <virtual / real> defalut = virtual
model:= ROBOT_MODEL <m0609 / m0617 / m1013 / m1509 / a0509> defalut = m1013
color:= ROBOT_COLOR <white / blue> defalut = white
gripper:= USE_GRIPPER <none / robotiq_2f> defalut = none
mobile:= USE_MOBILE <none / husky> defalut = none

roslaunch dsr_launcher single_robot_rviz.launch host:=127.0.0.1 port:=12345 mode:=virtual model:=m1013 color:=blue gripper:=none mobile:=none
roslaunch dsr_launcher single_robot_gazebo.launch host:=192.168.127.100
roslaunch dsr_launcher single_robot_rviz_gazebo.launch gripper:=robotiq_2f mobile:=husky
roslaunch dsr_launcher multi_robot_rviz.launch
roslaunch dsr_launcher multi_robot_gazebo.launch model:=m0609
roslaunch dsr_launcher multi_robot_rviz_gazebo.launch

dsr_example

single robot
<launch>
  - single robot in rviz : 
  roslaunch dsr_launcher single_robot_rviz.launch model:=m1013 color:=white
  - single robot in gazebo : 
  roslaunch dsr_launcher single_robot_gazebo.launch model:=m1013 color:=blue
  - single robot in rviz + gazebo : 
  roslaunch dsr_launcher single_robot_rviz_gazebo.launch model:=m1013 color:=white
<run application node>
  rosrun dsr_example_py single_robot_simple.py dsr01 m1013
<ex>
  roslaunch dsr_launcher single_robot_rviz_gazebo.launch model:=m1013 color:=white
  rosrun dsr_example_py single_robot_simple.py

$ roslaunch dsr_launcher single_robot_rviz_gazebo.launch

$ rosrun dsr_example_py single_robot_simple.py

multi robot
<launch>
  - multi robot in rviz : 
  roslaunch dsr_launcher multi_robot_rviz.launch
  - multi robot in gazebo : 
  roslaunch dsr_launcher multi_robot_gazebo.launch
  - multi robot in rviz + gazebo : 
  roslaunch dsr_launcher multi_robot_rviz_gazebo.launch
<run application node>
  rosrun dsr_example_py multi_robot_simple.py
<ex>
    roslaunch dsr_launcher multi_robot_rviz_gazebo.launch
    rosrun dsr_example_py multi_robot_simple.py  

$ roslaunch dsr_launcher multi_robot_rviz_gazebo.launch

$ rosrun dsr_example_py multi_robot_simple.py

robot + gripper

insert argument gripper:=robotiq_2f

  • single robot + gripper
roslaunch dsr_launcher single_robot_rviz.launch gripper:=robotiq_2f

<run application node>
  rosrun dsr_example_py pick_and_place_simple.py
  • Serial Test(Loopback)
rosrun serial_example_node serial_example_node ttyUSB0 115200
rostopic echo /serial_read
rostopic pub /serial_write std_msgs/String 'data: 100'
robot + mobile

insert argument mobile:=husky

  • single robot on mobile
roslaunch dsr_launcher single_robot_rviz.launch mobile:=husky
  
<run application node>
  rosrun dsr_example_py single_robot_mobile.py

$ roslaunch dsr_launcher single_robot_rviz mobile:=husky color:=blue

  • multi robot on mobile
roslaunch dsr_launcher multi_robot_rviz.launch mobile:=husky

<run application node>
  rosrun dsr_example_py multi_robot_mobile.py  

$ roslaunch dsr_launcher multi_robot_rviz mobile:=husky

gazebo+rviz+virtual

roslaunch dsr_launcher single_robot_rviz_gazebo.launch
rosrun dsr_example_py single_robot_simple.py
  <include file="$(find dsr_gazebo)/launch/dsr_base.launch">
    <arg name="ns" value="dsr01"/> # Robot ID
    <arg name="model" value="m1013"/> # Robot Model
    <arg name="host" value="192.168.127.100"/> # Robot IP
    <arg name="port" value="12345"/> # Robot Port
    <arg name="mode" value="virtual"/> # Robot Controller Mode 
    # Position & Posture in Gazebo
    <arg name="x" value="2"/>
    <arg name="y" value="-4"/>
    <arg name="yaw" value="0.7"/>
  </include>
  <include file="$(find dsr_gazebo)/launch/dsr_base.launch">
    <arg name="ns" value="dsr02"/> # Secondary Robot ID
    <arg name="model" value="m1013"/> # Secondary Robot Model
    <arg name="host" value="192.168.127.102"/> # Secondary Robot IP
    <arg name="port" value="12346"/> # Robot Port
    <arg name="mode" value="virtual"/> # Secondary Robot Controller Mode
    # Secondary Position & Posture in Gazebo
    <arg name="x" value="2"/>
    <arg name="y" value="-4"/>
    <arg name="yaw" value="0.7"/>
  </include>

Run multi-robot by command line

roslaunch dsr_launcher multi_robot_rviz.launch
rostopic pub /dsr01m1013/joint_position_controller/command std_msgs/Float64MultiArray "layout:
  dim:
  - label: ''
    size: 0
    stride: 0
    data_offset: 0
data: [10, 10, 40, 10, 60, 10]"

Service Call

rosservice call /dsr01m1013/motion/move_joint "pos: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
vel: 0.0
acc: 0.0
time: 0.0
radius: 0.0
mode: 0
blendType: 0
syncType: 0"

manuals

Manual(Kor)

Manual(Eng)

demo

Doosan-Robots In Gazebo

Doosan-Robots & Mobile in Rviz

About

ROS for Doosan Robot

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 53.4%
  • C++ 40.7%
  • C 3.9%
  • CMake 1.9%
  • Shell 0.1%