[Documentation] [TitleIndex] [WordIndex

  Show EOL distros: 

cob_driver: cob_arm | cob_base | cob_base_drive_chain | cob_battery | cob_camera_sensors | cob_canopen_motor | cob_forcetorque | cob_generic_can | cob_head_axis | cob_hokuyo | cob_joint_state_aggregator | cob_joy | cob_light | cob_manipulator | cob_oodl_scanner | cob_powercube_chain | cob_pseudo_joint_state_publisher | cob_relayboard | cob_sdh | cob_sick_s300 | cob_sound | cob_torso | cob_touch | cob_trajectory_controller | cob_tray | cob_tray_sensors | cob_undercarriage_ctrl

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

cob_driver: cob_base_drive_chain | cob_base_velocity_smoother | cob_camera_sensors | cob_canopen_motor | cob_collision_velocity_filter | cob_footprint_observer | cob_generic_can | cob_head_axis | cob_hokuyo | cob_hwboard | cob_light | cob_phidgets | cob_relayboard | cob_sick_s300 | cob_sound | cob_touch | cob_trajectory_controller | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

cob_driver: cob_base_drive_chain | cob_base_velocity_smoother | cob_camera_sensors | cob_canopen_motor | cob_collision_velocity_filter | cob_footprint_observer | cob_generic_can | cob_head_axis | cob_hokuyo | cob_hwboard | cob_light | cob_phidgets | cob_relayboard | cob_sick_s300 | cob_sound | cob_touch | cob_trajectory_controller | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

cob_driver: cob_base_drive_chain | cob_base_velocity_smoother | cob_cam3d_throttle | cob_camera_sensors | cob_canopen_motor | cob_collision_velocity_filter | cob_footprint_observer | cob_generic_can | cob_head_axis | cob_hokuyo | cob_hwboard | cob_light | cob_phidgets | cob_relayboard | cob_sick_s300 | cob_sound | cob_touch | cob_trajectory_controller | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

cob_driver: cob_base_drive_chain | cob_camera_sensors | cob_canopen_motor | cob_generic_can | cob_head_axis | cob_hokuyo | cob_hwboard | cob_light | cob_phidgets | cob_relayboard | cob_sick_lms1xx | cob_sick_s300 | cob_sound | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

  • Maintainer status: developed
  • Maintainer: Matthias Gruhler <mig AT ipa.fhg DOT de>
  • Author: Christian Connette
  • License: LGPL
  • Source: git https://github.com/ipa320/cob_driver.git (branch: hydro_release_candidate)
cob_driver: cob_base_drive_chain | cob_bms_driver | cob_camera_sensors | cob_canopen_motor | cob_elmo_homing | cob_generic_can | cob_light | cob_mimic | cob_phidgets | cob_relayboard | cob_scan_unifier | cob_sick_lms1xx | cob_sick_s300 | cob_sound | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

  • Maintainer status: maintained
  • Maintainer: Matthias Gruhler <mig AT ipa.fhg DOT de>
  • Author: Christian Connette
  • License: Apache 2.0
  • Source: git https://github.com/ipa320/cob_driver.git (branch: indigo_release_candidate)
cob_driver: cob_base_drive_chain | cob_bms_driver | cob_camera_sensors | cob_canopen_motor | cob_elmo_homing | cob_generic_can | cob_light | cob_mimic | cob_phidgets | cob_relayboard | cob_scan_unifier | cob_sick_lms1xx | cob_sick_s300 | cob_sound | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

  • Maintainer status: developed
  • Maintainer: Matthias Gruhler <mig AT ipa.fhg DOT de>
  • Author: Christian Connette
  • License: Apache 2.0
  • Source: git https://github.com/ipa320/cob_driver.git (branch: kinetic_release_candidate)
cob_driver: cob_base_drive_chain | cob_bms_driver | cob_camera_sensors | cob_canopen_motor | cob_elmo_homing | cob_generic_can | cob_light | cob_mimic | cob_phidgets | cob_relayboard | cob_scan_unifier | cob_sick_lms1xx | cob_sick_s300 | cob_sound | cob_undercarriage_ctrl | cob_utilities | cob_voltage_control

Package Summary

This package contains classes that are able to control the platform of the Care-O-Bot. This means to establish a CAN communication to drive and steering motors of the platform and later send motion commands and receive motor information.

  • Maintainer status: maintained
  • Maintainer: Matthias Gruhler <mig AT ipa.fhg DOT de>
  • Author: Christian Connette
  • License: Apache 2.0
  • Source: git https://github.com/ipa320/cob_driver.git (branch: kinetic_release_candidate)

Platform Control

To keep the communication with the Care-O-Bot platform variable (as different motors or CAN-hardware could be used), cob_base_drive_chain::CanCtrlPltfCOb3 implements the communication to different motors through a generic interface cob_canopen_motor::CanDriveItf and for different CAN modules through cob_generic_can::CanItf. The used CAN module is specified in an .ini-File, as well as motor-specific parameters. Each motor-object is loaded with appropriate parameters and during initialization each wheel is homed.

After initialization, the user can easily command the platform using the provided functions of cob_base_drive_chain::CanCtrlPltfCOb3 like setVelGearRadS.

To bring these communication facilities to the ROS network, the node cob_base_driove_chain_node uses that communication class and provides its functions to the ROS network as services. This makes it quite easy to create different controllers (e.g. joystick, keyboard, vision-based...) without taking care of the basic communication.

cob_base_drive_chain_node

This node provides access to the platform control of the Care-O-Bot (steer and drive motors) to the ROS network.

Subscribed Topics

joint_command (pr2_controllers_msgs/JointTrajectoryControllerState)

Published Topics

JointState (sensor_msgs/JointState) Diagnostic (diagnostic_msgs/DiagnosticStatus)

Services

Init (cob_srvs/Trigger) Reset (cob_srvs/Trigger) Shutdown (cob_srvs/Trigger) GetJointState (cob_srvs/GetJointState) ElmoRecorderConfig (cob_srvs/ElmoRecorderConfig) ElmoRecorderReadout (cob_srvs/ElmoRecorderReadout)

Using the Elmo Recorder

Elmo controllers (like the Harmonica drive) have the functionality to record drive information (like position,velocity, current) at a very high frequency into their own flash memory. Later on, the user can read out that data to precisely analyse the data. The described tool makes it easy for the user to use this feature. It is preconfigured to record the values velocity, position, active current, commanded velocity.

It is implemented in cob_base_drive_chain::CanCtrlPltfCOb3 and again provided to the ROS network via services. To use the Elmo Recorder without the services, you can use the interface of cob_base_drive_chain::CanCtrlPltfCOb3 directly as desribed below.

ROS service interface

In order to record and extract data using cob_base_drive_chain node in the ROS environment, the only thing you have to do is calling two services offered by base_drive_chain_node:

You always get a success code and an answer message. When requesting a read-out, you can't relay on the success-code, as the availability of the recorder first has to be checked.

All the operations (configuring and reading out the Recorder) are done for all available motors at once. You will find one file for each motor in the specified log-directory.

In the log file, the first column contains the time of the data point, the second contains the exponential representation of the data point of the selected record source.

Developer interface

There are two other levels of “user”-interfaces, to keep the drive interface-classes slight. The function CanCtrlPltfCOb3::ElmoRecordings basically is just a wrapper function for the main Elmo-Recorder interface in cob_canopen_motor::CanDriveHarmonica::setRecorder(int iFlag, int iParam, std::string sParam). With these arguments you can control all of the Recorders features. iFlag specifies the general task, you are going to set up:

iParam = iRecordingGap, which specifies every which time quantum (4*90usec) a new data point is recorded

Return values are 0: Everything is fine, 1: Recorder hasn't been configured yet, 2: Data collection still in progress.

To keep all the CAN communication the process going, be sure to evaluate the CAN-buffer continuous. Also take care of the watchdogs using the heartbeat message.

Implementation

The most difficult point of the Recorder read-out process is the asynchronous and delayed collection of data. If you wanted to give all the data back (like in a return) to the calling function, you had to create a giant loop, that would block all the program (and therefore also the communication facilities to the respective motor).

To avoid that effect, the user only has to start-up the read-out process. From then, the transfer process is running autonomously, triggered by the receive of data packets, which are led to the appropriate functions after having been fetched from the CAN-buffer. During such a segmented SDO transfer, the data is collected in the cob_canopen_motor::SDOSegmented collection class. It also holds some SDO-transfer-specific features like the state of the transmission. When receiving the last segment of a transfer, the collected data is handed to an adequate processing function. In our case, it's ElmoRecorder::processData(). Finally, the collected data is saved to a file; you also could imagine of keeping it temporarily in a variable to give the calling function the opportunity to process the data itself.

How to read out data from the Elmo Recorder is described in cob_canopen_motor.


2019-11-09 12:34