diff --git a/.gitignore b/.gitignore
index 35d74bb..b40f725 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.vscode/
devel/
logs/
build/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e526d5a..46f8812 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,8 +25,6 @@ find_package(nav_msgs)
find_package(rclcpp REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
-find_package(tf2_msgs REQUIRED)
-find_package(tf2_ros REQUIRED)
set(msg_files
"msg/RoboClawStatus.msg"
@@ -37,10 +35,10 @@ set(srv_files
)
rosidl_generate_interfaces(${PROJECT_NAME}
- "msg/RoboClawStatus.msg"
- "srv/ResetEncoders.srv"
- DEPENDENCIES builtin_interfaces std_msgs
- )
+ ${msg_files}
+ ${srv_files}
+# DEPENDENCIES builtin_interfaces std_msgs
+)
add_executable(
ros2_roboclaw_driver_node
@@ -55,8 +53,6 @@ ament_target_dependencies(
geometry_msgs
nav_msgs
std_msgs
- tf2_msgs
- tf2_ros
)
rosidl_target_interfaces(
diff --git a/package.xml b/package.xml
index 443b332..80bfffa 100755
--- a/package.xml
+++ b/package.xml
@@ -15,8 +15,6 @@
geometry_msgs
nav_msgs
std_msgs
- tf2_msgs
- tf2_ros
rosidl_default_generators
rosidl_default_runtime
diff --git a/src/motor_driver.cpp b/src/motor_driver.cpp
index 35ea419..514ec2f 100755
--- a/src/motor_driver.cpp
+++ b/src/motor_driver.cpp
@@ -1,21 +1,23 @@
+#include "motor_driver.h"
+
+#include
+#include
+#include
+
#include
#include
#include
-#include
-#include
#include
-#include
#include
-#include
-#include
-#include "motor_driver.h"
#include "roboclaw.h"
MotorDriver::MotorDriver()
- : Node("motor_driver_node"), device_name_("foo_bar"), wheel_radius_(0.10169), wheel_separation_(0.345)
-{
+ : Node("motor_driver_node"),
+ device_name_("foo_bar"),
+ wheel_radius_(0.10169),
+ wheel_separation_(0.345) {
this->declare_parameter("accel_quad_pulses_per_second", 600);
this->declare_parameter("device_name", "roboclaw");
this->declare_parameter("device_port", 123);
@@ -40,50 +42,40 @@ MotorDriver::MotorDriver()
this->declare_parameter("wheel_separation", 0.0);
}
-void MotorDriver::odomCallback(const nav_msgs::msg::Odometry::SharedPtr msg)
-{
-
- geometry_msgs::msg::TransformStamped transformStamped;
- transformStamped.header.stamp = rclcpp::Node::now();
- transformStamped.header.frame_id = "odom";
- transformStamped.child_frame_id = "t265";
- transformStamped.transform.translation.x = msg->pose.pose.position.x;
- transformStamped.transform.translation.y = msg->pose.pose.position.y;
- transformStamped.transform.translation.z = 0.0;
- transformStamped.transform.rotation.x = 0.0;
- transformStamped.transform.rotation.y = 0.0;
- transformStamped.transform.rotation.z = msg->pose.pose.orientation.z;
- transformStamped.transform.rotation.w = msg->pose.pose.orientation.w;
- broadcaster_->sendTransform(transformStamped);
- // RCUTILS_LOG_INFO("odom published");
-}
-
-void MotorDriver::cmdVelCallback(const geometry_msgs::msg::Twist::SharedPtr msg) const
-{
- double x_velocity = std::min(std::max((float) msg->linear.x, -max_linear_velocity_), max_linear_velocity_);
- double yaw_velocity = std::min(std::max((float) msg->angular.z, -max_angular_velocity_), max_angular_velocity_);
- if ((msg->linear.x == 0) && (msg->angular.z == 0))
- {
+void MotorDriver::cmdVelCallback(
+ const geometry_msgs::msg::Twist::SharedPtr msg) const {
+ double x_velocity =
+ std::min(std::max((float)msg->linear.x, -max_linear_velocity_),
+ max_linear_velocity_);
+ double yaw_velocity =
+ std::min(std::max((float)msg->angular.z, -max_angular_velocity_),
+ max_angular_velocity_);
+ if ((msg->linear.x == 0) && (msg->angular.z == 0)) {
roboclaw_->doMixedSpeedDist(0, 0, 0, 0);
- }
- else if ((fabs(x_velocity) > 0.01) || (fabs(yaw_velocity) > 0.01))
- {
- const double m1_desired_velocity = x_velocity - (yaw_velocity * wheel_separation_ / 2.0) / wheel_radius_;
- const double m2_desired_velocity = x_velocity + (yaw_velocity * wheel_separation_ / 2.0) / wheel_radius_;
+ } else if ((fabs(x_velocity) > 0.01) || (fabs(yaw_velocity) > 0.01)) {
+ const double m1_desired_velocity =
+ x_velocity - (yaw_velocity * wheel_separation_ / 2.0) / wheel_radius_;
+ const double m2_desired_velocity =
+ x_velocity + (yaw_velocity * wheel_separation_ / 2.0) / wheel_radius_;
- const int32_t m1_quad_pulses_per_second = m1_desired_velocity * quad_pulses_per_meter_;
- const int32_t m2_quad_pulses_per_second = m2_desired_velocity * quad_pulses_per_meter_;
- const int32_t m1_max_distance = fabs(m1_quad_pulses_per_second * max_seconds_uncommanded_travel_);
- const int32_t m2_max_distance = fabs(m2_quad_pulses_per_second * max_seconds_uncommanded_travel_);
- roboclaw_->doMixedSpeedAccelDist(accel_quad_pulses_per_second_, m1_quad_pulses_per_second, m1_max_distance, m2_quad_pulses_per_second, m2_max_distance);
+ const int32_t m1_quad_pulses_per_second =
+ m1_desired_velocity * quad_pulses_per_meter_;
+ const int32_t m2_quad_pulses_per_second =
+ m2_desired_velocity * quad_pulses_per_meter_;
+ const int32_t m1_max_distance =
+ fabs(m1_quad_pulses_per_second * max_seconds_uncommanded_travel_);
+ const int32_t m2_max_distance =
+ fabs(m2_quad_pulses_per_second * max_seconds_uncommanded_travel_);
+ roboclaw_->doMixedSpeedAccelDist(
+ accel_quad_pulses_per_second_, m1_quad_pulses_per_second,
+ m1_max_distance, m2_quad_pulses_per_second, m2_max_distance);
}
}
-void MotorDriver::onInit(rclcpp::Node::SharedPtr node)
-{
+void MotorDriver::onInit(rclcpp::Node::SharedPtr node) {
node_ = node;
- broadcaster_ = std::make_shared(this);
- this->get_parameter("accel_quad_pulses_per_second", accel_quad_pulses_per_second_);
+ this->get_parameter("accel_quad_pulses_per_second",
+ accel_quad_pulses_per_second_);
this->get_parameter("device_name", device_name_);
this->get_parameter("device_port", device_port_);
this->get_parameter("m1_p", m1_p_);
@@ -99,15 +91,18 @@ void MotorDriver::onInit(rclcpp::Node::SharedPtr node)
max_angular_velocity_ = -12.34;
this->get_parameter("max_angular_velocity", max_angular_velocity_);
this->get_parameter("max_linear_velocity", max_linear_velocity_);
- this->get_parameter("max_seconds_uncommanded_travel", max_seconds_uncommanded_travel_);
+ this->get_parameter("max_seconds_uncommanded_travel",
+ max_seconds_uncommanded_travel_);
this->get_parameter("quad_pulses_per_meter", quad_pulses_per_meter_);
- this->get_parameter("quad_pulses_per_revolution", quad_pulses_per_revolution_);
+ this->get_parameter("quad_pulses_per_revolution",
+ quad_pulses_per_revolution_);
this->get_parameter("vmin", vmin_);
this->get_parameter("vtime", vtime_);
this->get_parameter("wheel_radius", wheel_radius_);
this->get_parameter("wheel_separation", wheel_separation_);
- RCUTILS_LOG_INFO("accel_quad_pulses_per_second: %d", accel_quad_pulses_per_second_);
+ RCUTILS_LOG_INFO("accel_quad_pulses_per_second: %d",
+ accel_quad_pulses_per_second_);
RCUTILS_LOG_INFO("device_name: %s", device_name_.c_str());
RCUTILS_LOG_INFO("device_port: %d", device_port_);
RCUTILS_LOG_INFO("m1_p: %f", m1_p_);
@@ -122,9 +117,11 @@ void MotorDriver::onInit(rclcpp::Node::SharedPtr node)
RCUTILS_LOG_INFO("m2_max_current: %f", m2_max_current_);
RCUTILS_LOG_INFO("max_angular_velocity: %f", max_angular_velocity_);
RCUTILS_LOG_INFO("max_linear_velocity: %f", max_linear_velocity_);
- RCUTILS_LOG_INFO("max_seconds_uncommanded_travel: %f", max_seconds_uncommanded_travel_);
+ RCUTILS_LOG_INFO("max_seconds_uncommanded_travel: %f",
+ max_seconds_uncommanded_travel_);
RCUTILS_LOG_INFO("quad_pulses_per_meter: %d", quad_pulses_per_meter_);
- RCUTILS_LOG_INFO("quad_pulses_per_revolution: %d", quad_pulses_per_revolution_);
+ RCUTILS_LOG_INFO("quad_pulses_per_revolution: %d",
+ quad_pulses_per_revolution_);
RCUTILS_LOG_INFO("vmin: %d", vmin_);
RCUTILS_LOG_INFO("vtime: %d", vtime_);
RCUTILS_LOG_INFO("wheel_radius: %f", wheel_radius_);
@@ -133,7 +130,8 @@ void MotorDriver::onInit(rclcpp::Node::SharedPtr node)
RoboClaw::TPIDQ m1Pid = {m1_p_, m1_i_, m1_d_, m1_qpps_, m1_max_current_};
RoboClaw::TPIDQ m2Pid = {m2_p_, m2_i_, m2_d_, m2_qpps_, m2_max_current_};
- roboclaw_ = new RoboClaw(m1Pid, m2Pid, m1_max_current_, m2_max_current_, device_name_.c_str(), device_port_, vmin_, vtime_);
+ roboclaw_ = new RoboClaw(m1Pid, m2Pid, m1_max_current_, m2_max_current_,
+ device_name_.c_str(), device_port_, vmin_, vtime_);
RCUTILS_LOG_INFO("Main battery: %f", roboclaw_->getMainBatteryLevel());
rclcpp::QoS bestEffortQos(10);
@@ -142,15 +140,12 @@ void MotorDriver::onInit(rclcpp::Node::SharedPtr node)
bestEffortQos.durability_volatile();
cmdVelSub_ = node_->create_subscription(
- "/cmd_vel", bestEffortQos, std::bind(&MotorDriver::cmdVelCallback, this, std::placeholders::_1));
- odomSub_ = node->create_subscription(
- "/odom", bestEffortQos, std::bind(&MotorDriver::odomCallback, this, std::placeholders::_1));
+ "/cmd_vel", bestEffortQos,
+ std::bind(&MotorDriver::cmdVelCallback, this, std::placeholders::_1));
}
-MotorDriver &MotorDriver::singleton()
-{
- if (!g_singleton)
- {
+MotorDriver &MotorDriver::singleton() {
+ if (!g_singleton) {
g_singleton = new MotorDriver();
}
diff --git a/src/motor_driver.h b/src/motor_driver.h
index bf57eec..abca061 100755
--- a/src/motor_driver.h
+++ b/src/motor_driver.h
@@ -1,10 +1,8 @@
#pragma once
#include
-#include
#include
-#include
#include
#include
@@ -23,10 +21,7 @@ class MotorDriver : public rclcpp::Node {
void cmdVelCallback(const geometry_msgs::msg::Twist::SharedPtr msg) const;
- void odomCallback(const nav_msgs::msg::Odometry::SharedPtr msg);
-
uint32_t accel_quad_pulses_per_second_;
- std::shared_ptr broadcaster_;
std::string device_name_;
uint8_t device_port_;
float m1_p_;
@@ -53,7 +48,6 @@ class MotorDriver : public rclcpp::Node {
rclcpp::Node::SharedPtr node_;
rclcpp::Subscription::SharedPtr cmdVelSub_;
- rclcpp::Subscription::SharedPtr odomSub_;
static MotorDriver *g_singleton;
};
diff --git a/src/motor_driver_node.cpp b/src/motor_driver_node.cpp
index 231f640..4e4b8d5 100644
--- a/src/motor_driver_node.cpp
+++ b/src/motor_driver_node.cpp
@@ -8,7 +8,7 @@
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
- rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("ros2_roboclaw_driver");
+ rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("ros2_roboclaw_driver_node");
MotorDriver &motorDriver = MotorDriver::singleton();
motorDriver.onInit(node);