Skip to content

Commit 2e28d55

Browse files
committed
Add can_id to speedCallback
- VESC now able to send messages with can_id - Create new message VescCommand.msg usable by all callbacks
1 parent 62d81e2 commit 2e28d55

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

vesc_driver/include/vesc_driver/vesc_driver.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
#include "vesc_driver/vesc_interface.h"
3939
#include "vesc_driver/vesc_packet.h"
40+
#include "vesc_msgs/VescCommand.h"
4041

4142
namespace vesc_driver
4243
{
@@ -95,15 +96,12 @@ class VescDriver
9596
int fw_version_major_; ///< firmware major version reported by vesc
9697
int fw_version_minor_; ///< firmware minor version reported by vesc
9798

98-
// Optional
99-
int can_id_ = -1;
100-
10199
// ROS callbacks
102100
void timerCallback(const ros::TimerEvent& event);
103101
void dutyCycleCallback(const std_msgs::Float64::ConstPtr& duty_cycle);
104102
void currentCallback(const std_msgs::Float64::ConstPtr& current);
105103
void brakeCallback(const std_msgs::Float64::ConstPtr& brake);
106-
void speedCallback(const std_msgs::Float64::ConstPtr& speed);
104+
void speedCallback(const vesc_msgs::VescCommand::ConstPtr& speed);
107105
void positionCallback(const std_msgs::Float64::ConstPtr& position);
108106
void servoCallback(const std_msgs::Float64::ConstPtr& servo);
109107
};

vesc_driver/launch/vesc_can.launch

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!-- -*- mode: XML -*- -->
2+
<launch>
3+
4+
<arg name="node_name" default="vesc_driver_node" />
5+
6+
<!-- Optionally launch in GDB, for debugging -->
7+
<arg name="debug" default="false" />
8+
9+
<arg if="$(arg debug)" name="launch_prefix" value="gdb -ex run --args" />
10+
<arg unless="$(arg debug)" name="launch_prefix" value="" />
11+
12+
<!-- VESC driver parameters -->
13+
<arg name="port" default="/dev/serial/by-id/usb-STMicroelectronics_ChibiOS_RT_Virtual_COM_Port_304-if00" />
14+
15+
<!-- VESC driver node -->
16+
<node pkg="vesc_driver" type="vesc_driver_node" name="$(arg node_name)"
17+
output="screen" launch-prefix="$(arg launch_prefix)" >
18+
<param name="port" value="$(arg port)" />
19+
<param name="can_id" value="2" />
20+
</node>
21+
22+
</launch>

vesc_driver/src/vesc_driver.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@ VescDriver::VescDriver(ros::NodeHandle nh,
5858
ros::shutdown();
5959
return;
6060
}
61-
62-
if (private_nh.getParam("can_id", can_id_))
63-
ROS_INFO("Communicating with can_id = %d", can_id_);
6461

6562
// attempt to connect to the serial port
6663
try
@@ -231,14 +228,18 @@ void VescDriver::brakeCallback(const std_msgs::Float64::ConstPtr& brake)
231228
* driver. However, note that the VESC may impose a more restrictive bounds on the
232229
* range depending on its configuration.
233230
*/
234-
void VescDriver::speedCallback(const std_msgs::Float64::ConstPtr& speed)
231+
void VescDriver::speedCallback(const vesc_msgs::VescCommand::ConstPtr& speed)
235232
{
233+
ROS_DEBUG("Received speed callback.");
236234
if (driver_mode_ == MODE_OPERATING)
237235
{
238-
if (can_id_ > 0)
239-
vesc_.setSpeed(speed_limit_.clip(speed->data), can_id_);
236+
if (speed->can_id > 0)
237+
{
238+
ROS_DEBUG("Setting speed with can_id");
239+
vesc_.setSpeed(speed_limit_.clip(speed->command), speed->can_id);
240+
}
240241
else
241-
vesc_.setSpeed(speed_limit_.clip(speed->data));
242+
vesc_.setSpeed(speed_limit_.clip(speed->command));
242243
}
243244
}
244245

vesc_msgs/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ find_package(catkin REQUIRED COMPONENTS
99
add_message_files(
1010
DIRECTORY msg
1111
FILES
12+
VescCommand.msg
1213
VescState.msg
1314
VescStateStamped.msg
1415
)

vesc_msgs/msg/VescCommand.msg

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
float32 command
2+
int32 can_id

0 commit comments

Comments
 (0)