diff --git a/ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover b/ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover index 4fedb5032a..3e6e91404d 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover +++ b/ROMFS/px4fmu_common/init.d/airframes/50003_aion_robotics_r1_rover @@ -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 diff --git a/src/drivers/roboclaw/CMakeLists.txt b/src/drivers/roboclaw/CMakeLists.txt index 72d16eec65..5543f89146 100644 --- a/src/drivers/roboclaw/CMakeLists.txt +++ b/src/drivers/roboclaw/CMakeLists.txt @@ -37,6 +37,7 @@ px4_add_module( SRCS roboclaw_main.cpp RoboClaw.cpp - DEPENDS + MODULE_CONFIG + module.yaml ) diff --git a/src/drivers/roboclaw/RoboClaw.cpp b/src/drivers/roboclaw/RoboClaw.cpp index c8b5cca80a..7c27d7f68f 100644 --- a/src/drivers/roboclaw/RoboClaw.cpp +++ b/src/drivers/roboclaw/RoboClaw.cpp @@ -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): _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() 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; } } diff --git a/src/drivers/roboclaw/RoboClaw.hpp b/src/drivers/roboclaw/RoboClaw.hpp index 777db210cd..6f98e085f9 100644 --- a/src/drivers/roboclaw/RoboClaw.hpp +++ b/src/drivers/roboclaw/RoboClaw.hpp @@ -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 diff --git a/src/drivers/roboclaw/module.yaml b/src/drivers/roboclaw/module.yaml new file mode 100644 index 0000000000..81e5f694df --- /dev/null +++ b/src/drivers/roboclaw/module.yaml @@ -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 \ No newline at end of file diff --git a/src/drivers/roboclaw/roboclaw_main.cpp b/src/drivers/roboclaw/roboclaw_main.cpp index 2976d5cb65..76fee29c0b 100644 --- a/src/drivers/roboclaw/roboclaw_main.cpp +++ b/src/drivers/roboclaw/roboclaw_main.cpp @@ -109,13 +109,14 @@ the driver terminates immediately. The command to start this driver is: - $ roboclaw start + $ roboclaw start `` is the name of the UART port. On the Pixhawk 4, this is `/dev/ttyS3`. +`` is te baud rate. All available commands are: - - `$ roboclaw start ` + - `$ roboclaw start ` - `$ roboclaw status` - `$ roboclaw stop` )DESCR_STR"); @@ -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[]) 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[]) argv += 2; if (argc < 2) { - printf("usage: roboclaw start \n"); + printf("usage: roboclaw start \n"); return -1; } const char *deviceName = argv[1]; + const char *baudRate = argv[2]; // start - RoboClaw roboclaw(deviceName); + RoboClaw roboclaw(deviceName, baudRate); thread_running = true; diff --git a/src/drivers/roboclaw/roboclaw_params.c b/src/drivers/roboclaw/roboclaw_params.c index 519ef2b538..3f3c938c55 100644 --- a/src/drivers/roboclaw/roboclaw_params.c +++ b/src/drivers/roboclaw/roboclaw_params.c @@ -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);