32 #include <boost/assign.hpp> 34 #include <boost/math/special_functions/round.hpp> 41 #define TICS_PER_RADIAN (41.0058030317 / 2) 42 #define QTICS_PER_RADIAN (TICS_PER_RADIAN * 4) 43 #define VELOCITY_READ_PER_SECOND \ 44 10.0 // read = ticks / (100 ms), so we have scale of 10 for ticks/second 45 #define CURRENT_FIRMWARE_VERSION 24 50 boost::assign::list_of(
"left_wheel_joint")(
"right_wheel_joint");
52 for (
size_t i = 0; i < joint_names.size(); i++) {
59 joint_state_handle, &
joints_[i].velocity_command);
117 ROS_FATAL(
"Firmware version %d, expect %d or above",
119 throw std::runtime_error(
"Firmware version too low");
129 int16_t odomLeft = (odom >> 16) & 0xffff;
130 int16_t odomRight = odom & 0xffff;
138 std_msgs::Int32 left;
139 std_msgs::Int32 right;
141 int16_t leftSpeed = (speed >> 16) & 0xffff;
142 int16_t rightSpeed = speed & 0xffff;
144 left.data = leftSpeed;
145 right.data = rightSpeed;
160 ROS_WARN(
"left Integral limit reached");
163 ROS_WARN(
"right Integral limit reached");
170 std_msgs::UInt32 umsg;
171 std_msgs::Int32 smsg;
225 int32_t data = (left_tics << 16) | (right_tics & 0x0000ffff);
228 std_msgs::Int32 smsg;
229 smsg.data = left_tics;
248 ROS_ERROR(
"setting deadman to %d", (
int)deadman_timer);
265 std::vector<MotorMessage> commands;
281 commands.push_back(p);
291 commands.push_back(i);
302 commands.push_back(d);
313 commands.push_back(denominator);
326 commands.push_back(winsize);
329 if (commands.size() != 0) {
335 std::vector<MotorMessage> commands;
345 commands.push_back(led1);
355 commands.push_back(led2);
void registerInterface(T *iface)
FirmwareParams prev_pid_params
void publish(const boost::shared_ptr< M > &message) const
MotorMessage::MessageTypes getType() const
int16_t calculateTicsFromRadians(double radians) const
void setData(int32_t data)
int transmitCommand(MotorMessage command)
hardware_interface::JointStateInterface joint_state_interface_
MotorMessage::Registers getRegister() const
int32_t pid_moving_buffer_size
int transmitCommands(const std::vector< MotorMessage > &commands)
ros::Publisher rightError
static FirmwareParams firmware_params
struct MotorHardware::Joint joints_[2]
std::vector< std::string > V_string
void setDeadmanTimer(int32_t deadman)
#define VELOCITY_READ_PER_SECOND
void setDebugLeds(bool led1, bool led2)
void setParams(FirmwareParams firmware_params)
FirmwareParams pid_params
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
void registerHandle(const JointStateHandle &handle)
static CommsParams serial_params
void setRegister(MotorMessage::Registers reg)
double calculateRadiansFromTics(int16_t tics) const
hardware_interface::VelocityJointInterface velocity_joint_interface_
void setType(MotorMessage::MessageTypes type)
#define CURRENT_FIRMWARE_VERSION
MotorMessage receiveCommand()
MotorSerial * motor_serial_
MotorHardware(ros::NodeHandle nh, CommsParams serial_params, FirmwareParams firmware_params)