From f2aedf52bb14074b837aa516e17b4330d7876901 Mon Sep 17 00:00:00 2001
From: daviddudas <david.dudas@outlook.com>
Date: Wed, 15 Jan 2020 17:24:05 +0100
Subject: [PATCH] wheel separation length parameter added

---
 launch/demo.launch              | 50 ++++-----------------------------
 launch/revvy-config.launch      | 42 ---------------------------
 nodes/mecanum_drive_controller  |  2 ++
 nodes/mecanum_drive_odometry    |  2 ++
 src/mecanum_drive/controller.py |  9 ++++--
 src/mecanum_drive/odometry.py   |  3 ++
 6 files changed, 18 insertions(+), 90 deletions(-)
 delete mode 100755 launch/revvy-config.launch

diff --git a/launch/demo.launch b/launch/demo.launch
index 60711d5..48b1480 100755
--- a/launch/demo.launch
+++ b/launch/demo.launch
@@ -2,67 +2,27 @@
 
   <arg name="ticks_per_meter" value="10000" />
   <arg name="wheel_separation" value="0.2" />
+  <arg name="wheel_separation_length" value="0.3" />
 
-  <arg name="urdf_file" default="$(find diff_drive)/urdf/diff_drive_description.xacro" />
-  <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg urdf_file)" />
-
-  <!-- Publish the robot state -->
-  <node name="robot_state_publisher" pkg="robot_state_publisher"
-        type="robot_state_publisher">
-    <param name="publish_frequency" value="10.0"/>
-  </node>
-
-  <!-- Provide simulated control of the robot joint angles -->
-  <node name="joint_state_publisher" pkg="joint_state_publisher"
-        type="joint_state_publisher">
-    <param name="use_gui" value="False" />
-    <param name="rate" value="10.0"/>
-  </node>
-
-  <node name="controller" pkg="diff_drive" type="diff_drive_controller"
+  <node name="controller" pkg="mecanum_drive" type="mecanum_drive_controller"
         output="screen">
     <rosparam subst_value="true">
       ticks_per_meter: $(arg ticks_per_meter)
       wheel_separation: $(arg wheel_separation)
+      wheel_separation_length: $(arg wheel_separation_length)
       max_motor_speed: 3000
       timeout: 1.0
     </rosparam>
     <remap from="cmd_vel" to="/robot/cmd_vel" />
   </node>
   
-  <node name="odom_publisher" pkg="diff_drive" type="diff_drive_odometry"
+  <node name="odom_publisher" pkg="mecanum_drive" type="mecanum_drive_odometry"
         output="screen">
     <rosparam subst_value="true">
       ticks_per_meter: $(arg ticks_per_meter)
       wheel_separation: $(arg wheel_separation)
+      wheel_separation_length: $(arg wheel_separation_length)
     </rosparam>
   </node>
 
-  <node name="robot" pkg="diff_drive" type="diff_drive_mock_robot"
-        output="screen">
-    <remap from="~lwheel_desired_rate" to="lwheel_desired_rate" />
-    <remap from="~rwheel_desired_rate" to="rwheel_desired_rate" />
-    <remap from="~lwheel_ticks" to="lwheel_ticks" />
-    <remap from="~rwheel_ticks" to="rwheel_ticks" />
-  </node>
-
-  <node name="diff_drive_go_to_goal" pkg="diff_drive"
-        type="diff_drive_go_to_goal" output="screen">
-    <param name="~rate" value="20" />
-    <param name="~kP" value="0.5" />
-    <param name="~kA" value="1.0" />
-    <param name="~kB" value="-0.8" />
-    <param name="~max_linear_speed" value="0.2" />
-    <param name="~min_linear_speed" value="0.05" />
-    <param name="~max_angular_speed" value="0.7" />
-    <param name="~min_angular_speed" value="0.1" />
-    <param name="~linear_tolerance" value="0.01" />
-    <param name="~angular_tolerance" value="0.04" />
-    <param name="~forwardMovementOnly" value="false" />
-    <remap from="cmd_vel" to="/robot/cmd_vel" />
-  </node>
-
-  <node name="rviz" pkg="rviz" type="rviz"
-        args="-d $(find diff_drive)/config/view.rviz" />
-
 </launch>
diff --git a/launch/revvy-config.launch b/launch/revvy-config.launch
deleted file mode 100755
index 39ab4be..0000000
--- a/launch/revvy-config.launch
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<launch>
-
-  <arg name="ticks_per_meter" value="1800" />
-  <arg name="wheel_separation" value="0.1" />
-
-  <arg name="urdf_file" default="$(find diff_drive)/urdf/diff_drive_description.xacro" />
-  <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg urdf_file)" />
-
-  <!-- Publish the robot state -->
-  <node name="robot_state_publisher" pkg="robot_state_publisher"
-        type="robot_state_publisher">
-    <param name="publish_frequency" value="10.0"/>
-  </node>
-
-  <!-- Provide simulated control of the robot joint angles -->
-  <node name="joint_state_publisher" pkg="joint_state_publisher"
-        type="joint_state_publisher">
-    <param name="use_gui" value="False" />
-    <param name="rate" value="10.0"/>
-  </node>
-
-  <node name="controller" pkg="diff_drive" type="diff_drive_controller"
-        output="screen">
-    <rosparam subst_value="true">
-      ticks_per_meter: $(arg ticks_per_meter)
-      wheel_separation: $(arg wheel_separation)
-      max_motor_speed: 3000
-      timeout: 1.0
-    </rosparam>
-  </node>
-  
-  <node name="odom_publisher" pkg="diff_drive" type="diff_drive_odometry"
-        output="screen">
-    <rosparam subst_value="true">
-      ticks_per_meter: $(arg ticks_per_meter)
-      wheel_separation: $(arg wheel_separation)
-    </rosparam>
-  </node>
-
-
-</launch>
diff --git a/nodes/mecanum_drive_controller b/nodes/mecanum_drive_controller
index d788a3a..f6be0a7 100755
--- a/nodes/mecanum_drive_controller
+++ b/nodes/mecanum_drive_controller
@@ -28,11 +28,13 @@ class ControllerNode:
 
         self.ticksPerMeter = float(rospy.get_param('~ticks_per_meter'))
         self.wheelSeparation = float(rospy.get_param('~wheel_separation'))
+        self.wheelSeparationLength = float(rospy.get_param('~wheel_separation_length'))
         self.maxMotorSpeed = int(rospy.get_param('~max_motor_speed'))
         self.rate = float(rospy.get_param('~rate', 10.0))
         self.timeout = float(rospy.get_param('~timeout', 0.2))
 
         self.controller.setWheelSeparation(self.wheelSeparation)
+        self.controller.setWheelSeparationLength(self.wheelSeparationLength)
         self.controller.setTicksPerMeter(self.ticksPerMeter)
         self.controller.setMaxMotorSpeed(self.maxMotorSpeed)
 
diff --git a/nodes/mecanum_drive_odometry b/nodes/mecanum_drive_odometry
index 74c05ac..a7546bf 100755
--- a/nodes/mecanum_drive_odometry
+++ b/nodes/mecanum_drive_odometry
@@ -47,6 +47,7 @@ class OdometryNode:
 
         self.ticksPerMeter = int(rospy.get_param('~ticks_per_meter'))
         self.wheelSeparation = float(rospy.get_param('~wheel_separation'))
+        self.wheelSeparationLength = float(rospy.get_param('~wheel_separation_length'))
         self.rate = float(rospy.get_param('~rate', 20.0))
         self.baseFrameID = rospy.get_param('~base_frame_id', 'base_link')
         self.odomFrameID = rospy.get_param('~odom_frame_id', 'odom')
@@ -54,6 +55,7 @@ class OdometryNode:
         self.encoderMax = int(rospy.get_param('~encoder_max', 32767))
 
         self.odometry.setWheelSeparation(self.wheelSeparation)
+        self.odometry.setWheelSeparationLength(self.wheelSeparationLength)
         self.odometry.setTicksPerMeter(self.ticksPerMeter)
         self.odometry.setEncoderRange(self.encoderMin, self.encoderMax)
         self.odometry.setTime(rospy.get_time())
diff --git a/src/mecanum_drive/controller.py b/src/mecanum_drive/controller.py
index c7f8be4..28b290d 100755
--- a/src/mecanum_drive/controller.py
+++ b/src/mecanum_drive/controller.py
@@ -25,8 +25,8 @@ class Controller:
     
         # print(linearXSpeed,linearYSpeed,angularSpeed)
     
-        WHEEL_SEPARATION_WIDTH = 0.1
-        WHEEL_SEPARATION_LENGTH = 0.13
+        WHEEL_SEPARATION_WIDTH = self.wheelSeparation
+        WHEEL_SEPARATION_LENGTH = self.wheelSeparationLength
         
         speeds = MotorCommand()
         
@@ -53,7 +53,10 @@ class Controller:
         return speeds
 
     def setWheelSeparation(self, separation):
-        self.wheelSeparation = separation
+        self.wheelSeparation = separation 
+        
+    def setWheelSeparationLength(self, separation):
+        self.wheelSeparationLength = separation
 
     def setMaxMotorSpeed(self, limit):
         self.maxMotorSpeed = limit
diff --git a/src/mecanum_drive/odometry.py b/src/mecanum_drive/odometry.py
index 5e36026..bfb621d 100755
--- a/src/mecanum_drive/odometry.py
+++ b/src/mecanum_drive/odometry.py
@@ -17,6 +17,9 @@ class Odometry:
     def setWheelSeparation(self, separation):
         self.wheelSeparation = separation
 
+    def setWheelSeparationLength(self, separation):
+        self.wheelSeparationLength = separation
+
     def setTicksPerMeter(self, ticks):
         self.ticksPerMeter = ticks
         
-- 
GitLab