Browse Source

Added module.yaml and serial port configuration.

sbg
Timothy Scott 6 years ago committed by Julian Oes
parent
commit
3850322046
  1. 5
      ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover
  2. 3
      src/drivers/roboclaw/CMakeLists.txt
  3. 23
      src/drivers/roboclaw/RoboClaw.cpp
  4. 5
      src/drivers/roboclaw/RoboClaw.hpp
  5. 6
      src/drivers/roboclaw/module.yaml
  6. 14
      src/drivers/roboclaw/roboclaw_main.cpp
  7. 22
      src/drivers/roboclaw/roboclaw_params.c

5
ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover

@ -73,10 +73,13 @@ then @@ -73,10 +73,13 @@ then
param set RBCLW_BAUD 8
param set RBCLW_COUNTS_REV 1200
param set RBCLW_ADDRESS 128
# param set SER_TEL4_BAUD 115200
# 104 corresponds to Telem 4
param set RBCLW_SER_CFG 104
fi
# Start this driver after setting parameters, because the driver uses some of those parameters.
roboclaw start /dev/ttyS3
# roboclaw start /dev/ttyS3
# Configure this as rover
set MAV_TYPE 10

3
src/drivers/roboclaw/CMakeLists.txt

@ -37,6 +37,7 @@ px4_add_module( @@ -37,6 +37,7 @@ px4_add_module(
SRCS
roboclaw_main.cpp
RoboClaw.cpp
DEPENDS
MODULE_CONFIG
module.yaml
)

23
src/drivers/roboclaw/RoboClaw.cpp

@ -77,7 +77,7 @@ @@ -77,7 +77,7 @@
bool RoboClaw::taskShouldExit = false;
RoboClaw::RoboClaw(const char *deviceName):
RoboClaw::RoboClaw(const char *deviceName, const char *baudRateParam):
_uart(0),
_uart_set(),
_uart_timeout{.tv_sec = 0, .tv_usec = TIMEOUT_US},
@ -87,11 +87,10 @@ RoboClaw::RoboClaw(const char *deviceName): @@ -87,11 +87,10 @@ RoboClaw::RoboClaw(const char *deviceName):
_motorSpeeds{0, 0}
{
_param_handles.actuator_write_period_ms = param_find("RBCLW_WRITE_PER");
_param_handles.encoder_read_period_ms = param_find("RBCLW_READ_PER");
_param_handles.counts_per_rev = param_find("RBCLW_COUNTS_REV");
_param_handles.serial_baud_rate = param_find("RBCLW_BAUD");
_param_handles.serial_baud_rate = param_find(baudRateParam);
_param_handles.address = param_find("RBCLW_ADDRESS");
_parameters_update();
@ -580,39 +579,39 @@ void RoboClaw::_parameters_update() @@ -580,39 +579,39 @@ void RoboClaw::_parameters_update()
param_get(_param_handles.serial_baud_rate, &baudRate);
switch (baudRate) {
case 1:
case 2400:
_parameters.serial_baud_rate = B2400;
break;
case 2:
case 9600:
_parameters.serial_baud_rate = B9600;
break;
case 3:
case 19200:
_parameters.serial_baud_rate = B19200;
break;
case 4:
case 38400:
_parameters.serial_baud_rate = B38400;
break;
case 5:
case 57600:
_parameters.serial_baud_rate = B57600;
break;
case 6:
case 115200:
_parameters.serial_baud_rate = B115200;
break;
case 7:
case 230400:
_parameters.serial_baud_rate = B230400;
break;
case 8:
case 460800:
_parameters.serial_baud_rate = B460800;
break;
default:
_parameters.serial_baud_rate = B9600;
_parameters.serial_baud_rate = B2400;
}
}

5
src/drivers/roboclaw/RoboClaw.hpp

@ -84,10 +84,9 @@ public: @@ -84,10 +84,9 @@ public:
* serial port e.g. "/dev/ttyS2"
* @param address the adddress of the motor
* (selectable on roboclaw)
* @param pulsesPerRev # of encoder
* pulses per revolution of wheel
* @param baudRateParam Name of the parameter that holds the baud rate of this serial port
*/
RoboClaw(const char *deviceName);
RoboClaw(const char *deviceName, const char *baudRateParam);
/**
* deconstructor

6
src/drivers/roboclaw/module.yaml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
module_name: Roboclaw Driver
serial_config:
- command: roboclaw start ${SERIAL_DEV} ${BAUD_PARAM}
port_config_param:
name: RBCLW_SER_CFG
group: Roboclaw

14
src/drivers/roboclaw/roboclaw_main.cpp

@ -109,13 +109,14 @@ the driver terminates immediately. @@ -109,13 +109,14 @@ the driver terminates immediately.
The command to start this driver is:
$ roboclaw start <device>
$ roboclaw start <device> <baud>
`<device>` is the name of the UART port. On the Pixhawk 4, this is `/dev/ttyS3`.
`<baud>` is te baud rate.
All available commands are:
- `$ roboclaw start <device>`
- `$ roboclaw start <device> <baud>`
- `$ roboclaw status`
- `$ roboclaw stop`
)DESCR_STR");
@ -132,7 +133,7 @@ All available commands are: @@ -132,7 +133,7 @@ All available commands are:
int roboclaw_main(int argc, char *argv[])
{
if (argc < 2) {
if (argc < 4) {
usage();
}
@ -148,7 +149,7 @@ int roboclaw_main(int argc, char *argv[]) @@ -148,7 +149,7 @@ int roboclaw_main(int argc, char *argv[])
deamon_task = px4_task_spawn_cmd("roboclaw",
SCHED_DEFAULT,
SCHED_PRIORITY_MAX - 10,
1500,
2000,
roboclaw_thread_main,
(char *const *)argv);
return 0;
@ -183,14 +184,15 @@ int roboclaw_thread_main(int argc, char *argv[]) @@ -183,14 +184,15 @@ int roboclaw_thread_main(int argc, char *argv[])
argv += 2;
if (argc < 2) {
printf("usage: roboclaw start <device>\n");
printf("usage: roboclaw start <device> <baud>\n");
return -1;
}
const char *deviceName = argv[1];
const char *baudRate = argv[2];
// start
RoboClaw roboclaw(deviceName);
RoboClaw roboclaw(deviceName, baudRate);
thread_running = true;

22
src/drivers/roboclaw/roboclaw_params.c

@ -98,17 +98,17 @@ PARAM_DEFINE_INT32(RBCLW_ADDRESS, 128); @@ -98,17 +98,17 @@ PARAM_DEFINE_INT32(RBCLW_ADDRESS, 128);
* Roboclaw serial baud rate
*
* Baud rate of the serial communication with the Roboclaw. The Roboclaw must be configured to match this rate.
* @min 1
* @max 8
* @value 1 2400 baud
* @value 2 9600 baud
* @value 3 19200 baud
* @value 4 38400 baud
* @value 5 57600 baud
* @value 6 115200 baud
* @value 7 230400 baud
* @value 8 460800 baud
* @min 2400
* @max 460800
* @value 2400 2400 baud
* @value 9600 9600 baud
* @value 19200 19200 baud
* @value 38400 38400 baud
* @value 57600 57600 baud
* @value 115200 115200 baud
* @value 230400 230400 baud
* @value 460800 460800 baud
* @group Roboclaw driver
* @reboot_required true
*/
PARAM_DEFINE_INT32(RBCLW_BAUD, 1);
PARAM_DEFINE_INT32(RBCLW_BAUD, 2400);

Loading…
Cancel
Save