Move motor in velocity mode with ros_canopen
I am trying to get my nanotec motors running in velocity mode using roscanopen. I managed to initialize the motor node, but I am stuck with sending commands to the motor. When I try to send commands with ./canopencomm I get discarded messages in the launch-terminal. Right now, I don't know how to get on going with the roscanopen library.
Is there something obvious that I am missing or do you have some input for me? Is there from this starting point a guide that I can follow, so I can get my motors turning at a defined speed?
My reduced driver_controller.yaml:
## joint_names
joint_names: [orthos_motor_right_1_joint]
## control_mode_adapter
#max_command_silence: 0.5
## joint_state_controller
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
## velocity controller
arm_2_joint_velocity_controller:
type: velocity_controllers/JointVelocityController
joint: orthos_motor_right_1_joint
required_drive_mode: 2
my reduced controller.yaml
name: locomotion
defaults:
eds_pkg: orthos_driver
eds_file: "/config/PD4.eds" # the parser reads EDS and DCF
dcf_overlay:
"1017": "1000"
"6098": "34"
"6502": "0x000003CF"
"1A00sub1": "0x60410010"
"1A00sub2": "0x60610008"
"1A01sub1": "0x60640020"
"1A02sub1": "0x60440010"
"1A02sub2": "0x606C0020"
"1A03sub1": "0x60FD0020"
"1600sub1": "0x60400010"
"1600sub2": "0x60600008"
"1600sub3": "0x32020020"
"1601sub1": "0x607A0020"
"1601sub2": "0x60810020"
"1602sub1": "0x60420010"
# optional, all defaults can be overwritten per node
motor_allocator: canopen::Motor402::Allocator # select allocator for motor layer
switching_state: 2
nodes:
orthos_motor_right_1_joint:
id: 1
my robot.launch file, that I can launch without errors:
<?xml version="1.0"?>
<launch>
<!-- send urdf to param server -->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find orthos_description)/urdf/orthos.xacro'" />
<!-- motor node -->
<node ns="locomotion" name="locomotion_driver" pkg="canopen_motor_node" type="canopen_motor_node" output="screen" clear_params="true" launch-prefix="">
<rosparam command="load" file="$(find orthos_driver)/config/can0.yaml" />
<rosparam command="load" file="$(find orthos_driver)/config/driver.yaml" />
</node>
<!-- load controller-->
<rosparam ns="locomotion" command="load" file="$(find orthos_driver)/config/driver_controller.yaml" />
<!-- start/spawn controller-->
<node ns="locomotion" name="locomotion_driver_spawner" pkg="controller_manager" type="controller_manager" args="spawn joint_state_controller" respawn="false" output="screen"/>
<node ns="locomotion" name="joint_states_relay" pkg="topic_tools" type="relay" args="joint_states /joint_states" cwd="node" respawn="true" output="screen"/>
</launch>
The initialization:
rosservice call /locomotion/driver/init
success: True
message: ''
Asked by simons on 2019-10-29 15:06:08 UTC
Comments
Hi, I'm also trying to send a velocity command. Did you get it working ?
Asked by Cyril Jourdan on 2020-10-10 03:27:10 UTC