Skip to content

Commit 9bd2fbe

Browse files
committed
fix odom publishing to tf and turn off hokuyo time calibration
1 parent 662d2c0 commit 9bd2fbe

4 files changed

Lines changed: 29 additions & 4 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ IF(${CMAKE_BUILD_MODE} MATCHES "Hardware")
117117
src/vesc_driver/vesc_interface.cpp
118118
src/vesc_driver/vesc_packet.cpp
119119
src/vesc_driver/vesc_packet_factory.cpp)
120-
ament_target_dependencies(vesc_driver rclcpp std_msgs geometry_msgs nav_msgs sensor_msgs amrl_msgs rosidl_default_runtime)
120+
ament_target_dependencies(vesc_driver rclcpp std_msgs geometry_msgs nav_msgs sensor_msgs amrl_msgs rosidl_default_runtime tf2_ros)
121121
target_include_directories(vesc_driver PRIVATE
122122
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_cpp>)
123123
target_link_libraries(vesc_driver ${libs} ${UT_AUTOMATA_TYPESUPPORT_LINK})

launch/hokuyo_10lx.launch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ def generate_launch_description():
2222
'serial_port': '',
2323
'serial_baud': 115200,
2424
'frame_id': 'laser',
25-
'calibrate_time': True,
26-
'publish_intensity': False,
25+
'calibrate_time': False,
26+
'publish_intensity': True,
2727
'publish_multiecho': False,
2828
'angle_min': -2.25,
2929
'angle_max': 2.25,

src/vesc_driver/vesc_driver.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@
1010
#include <unistd.h>
1111
#include <regex>
1212

13-
#include "boost/bind.hpp"
13+
#include "boost/bind/bind.hpp"
1414
#include "gflags/gflags.h"
1515
#include "glog/logging.h"
1616
#include "ut_automata/msg/car_status_msg.hpp"
1717
#include "ut_automata/msg/vesc_state_stamped.hpp"
1818
#include "amrl_msgs/msg/ackermann_curvature_drive_msg.hpp"
1919
#include "nav_msgs/msg/odometry.hpp"
2020
#include "geometry_msgs/msg/twist_stamped.hpp"
21+
#include "tf2_ros/transform_broadcaster.h"
22+
#include "geometry_msgs/msg/transform_stamped.hpp"
2123

2224
#include "config_reader/config_reader.h"
2325
#include "shared/math/math_util.h"
2426

27+
using namespace boost::placeholders;
28+
2529
static const bool kDebug = false;
2630
static const float kCommandRate = 20;
2731
static const float kCommandInterval = 1.0 / kCommandRate;
@@ -159,6 +163,7 @@ VescDriver::VescDriver(rclcpp::Node::SharedPtr nh,
159163
odom_pub_ = nh_->create_publisher<nav_msgs::msg::Odometry>("odom", rclcpp::QoS(10));
160164
drive_pub_ = nh_->create_publisher<geometry_msgs::msg::TwistStamped>("vesc_drive", rclcpp::QoS(10));
161165
car_status_pub_ = nh_->create_publisher<ut_automata::msg::CarStatusMsg>("car_status", rclcpp::QoS(10));
166+
tf_broadcaster_ = std::make_unique<tf2_ros::TransformBroadcaster>(nh_);
162167

163168
ackermann_curvature_sub_ = nh_->create_subscription<amrl_msgs::msg::AckermannCurvatureDriveMsg>(
164169
"/ackermann_curvature_drive", rclcpp::QoS(10),
@@ -470,7 +475,25 @@ void VescDriver::updateOdometry(float rpm, float steering_angle) {
470475
position_y = position_y + del_y;
471476
orientation = math_util::AngleMod(orientation + del_theta);
472477

478+
// Create and publish tf2 transform
479+
geometry_msgs::msg::TransformStamped transform;
480+
transform.header.stamp = current_frame_time;
481+
transform.header.frame_id = "odom";
482+
transform.child_frame_id = "base_link";
483+
484+
transform.transform.translation.x = position_x;
485+
transform.transform.translation.y = position_y;
486+
transform.transform.translation.z = 0.0;
487+
488+
transform.transform.rotation.w = cos(0.5 * orientation);
489+
transform.transform.rotation.x = 0.0;
490+
transform.transform.rotation.y = 0.0;
491+
transform.transform.rotation.z = sin(0.5 * orientation);
492+
493+
tf_broadcaster_->sendTransform(transform);
494+
473495
// Create an odometry message
496+
odom_msg_.header.stamp = current_frame_time;
474497
odom_msg_.twist.twist.linear.x = lin_vel;
475498
odom_msg_.twist.twist.angular.z = rot_vel;
476499
odom_msg_.pose.pose.position.x = position_x;

src/vesc_driver/vesc_driver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "geometry_msgs/msg/twist_stamped.hpp"
1818
#include "ut_automata/msg/vesc_state_stamped.hpp"
1919
#include "ut_automata/msg/car_status_msg.hpp"
20+
#include "tf2_ros/transform_broadcaster.h"
2021

2122
#include "vesc_driver/vesc_interface.h"
2223
#include "vesc_driver/vesc_packet.h"
@@ -52,6 +53,7 @@ class VescDriver
5253
rclcpp::Subscription<amrl_msgs::msg::AckermannCurvatureDriveMsg>::SharedPtr ackermann_curvature_sub_;
5354
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr joystick_sub_;
5455
rclcpp::TimerBase::SharedPtr timer_;
56+
std::unique_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
5557

5658
// driver modes (possible states)
5759
typedef enum {

0 commit comments

Comments
 (0)