TB3_OpenCR_Pub_Sub - 8BitsCoding/RobotMentor GitHub Wiki
μ¬κΈ°λ OpenCR μ½λλΆμ~
Pub
- sensor_state
void publishSensorStateMsg(void)
{
bool dxl_comm_result = false;
sensor_state_msg.header.stamp = rosNow();
sensor_state_msg.battery = sensors.checkVoltage();
dxl_comm_result = motor_driver.readEncoder(sensor_state_msg.left_encoder, sensor_state_msg.right_encoder);
if (dxl_comm_result == true)
updateMotorInfo(sensor_state_msg.left_encoder, sensor_state_msg.right_encoder);
else
return;
sensor_state_msg.bumper = sensors.checkPushBumper();
sensor_state_msg.cliff = sensors.getIRsensorData();
// TODO
// sensor_state_msg.sonar = sensors.getSonarData();
sensor_state_msg.illumination = sensors.getIlluminationData();
sensor_state_msg.button = sensors.checkPushButton();
sensor_state_msg.torque = motor_driver.getTorque();
sensor_state_pub.publish(&sensor_state_msg);
}
- firmware_version
void publishVersionInfoMsg(void)
{
version_info_msg.hardware = "0.0.0";
version_info_msg.software = "0.0.0";
version_info_msg.firmware = FIRMWARE_VER;
version_info_pub.publish(&version_info_msg);
}
- imu
void publishImuMsg(void)
{
imu_msg = sensors.getIMU();
imu_msg.header.stamp = rosNow();
imu_msg.header.frame_id = imu_frame_id;
imu_pub.publish(&imu_msg);
}
- cmd_vel_rc100
void publishCmdVelFromRC100Msg(void)
{
cmd_vel_rc100_msg.linear.x = goal_velocity_from_rc100[LINEAR];
cmd_vel_rc100_msg.angular.z = goal_velocity_from_rc100[ANGULAR];
cmd_vel_rc100_pub.publish(&cmd_vel_rc100_msg);
}
- odom, joint_states
void publishDriveInformation(void)
{
unsigned long time_now = millis();
unsigned long step_time = time_now - prev_update_time;
prev_update_time = time_now;
ros::Time stamp_now = rosNow();
// calculate odometry
calcOdometry((double)(step_time * 0.001));
// odometry
updateOdometry();
odom.header.stamp = stamp_now;
odom_pub.publish(&odom);
// odometry tf
updateTF(odom_tf);
odom_tf.header.stamp = stamp_now;
tf_broadcaster.sendTransform(odom_tf);
// joint states
updateJointStates();
joint_states.header.stamp = stamp_now;
joint_states_pub.publish(&joint_states);
}
- battery_state
void publishBatteryStateMsg(void)
{
battery_state_msg.header.stamp = rosNow();
battery_state_msg.design_capacity = 1.8f; //Ah
battery_state_msg.voltage = sensors.checkVoltage();
battery_state_msg.percentage = (float)(battery_state_msg.voltage / 11.1f);
if (battery_state == 0)
battery_state_msg.present = false;
else
battery_state_msg.present = true;
battery_state_pub.publish(&battery_state_msg);
}
- magnetic_field
void publishMagMsg(void)
{
mag_msg = sensors.getMag();
mag_msg.header.stamp = rosNow();
mag_msg.header.frame_id = mag_frame_id;
mag_pub.publish(&mag_msg);
}
Sub
- cmd_vel
void commandVelocityCallback(const geometry_msgs::Twist& cmd_vel_msg)
{
goal_velocity_from_cmd[LINEAR] = cmd_vel_msg.linear.x;
goal_velocity_from_cmd[ANGULAR] = cmd_vel_msg.angular.z;
goal_velocity_from_cmd[LINEAR] = constrain(goal_velocity_from_cmd[LINEAR], MIN_LINEAR_VELOCITY, MAX_LINEAR_VELOCITY);
goal_velocity_from_cmd[ANGULAR] = constrain(goal_velocity_from_cmd[ANGULAR], MIN_ANGULAR_VELOCITY, MAX_ANGULAR_VELOCITY);
tTime[6] = millis();
}
- sound
void soundCallback(const turtlebot3_msgs::Sound& sound_msg)
{
sensors.makeSound(sound_msg.value);
}
- motor_power
void motorPowerCallback(const std_msgs::Bool& power_msg)
{
bool dxl_power = power_msg.data;
motor_driver.setTorque(dxl_power);
}
- reset
void resetCallback(const std_msgs::Empty& reset_msg)
{
char log_msg[50];
(void)(reset_msg);
sprintf(log_msg, "Start Calibration of Gyro");
nh.loginfo(log_msg);
sensors.calibrationGyro();
sprintf(log_msg, "Calibration End");
nh.loginfo(log_msg);
initOdom();
sprintf(log_msg, "Reset Odometry");
nh.loginfo(log_msg);
}