Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build
  7. include ros_lib
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build
  7. include ros_lib
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

Here is file: https://github.com/nquantum/stm32_rosserial

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build
  7. include ros_lib
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

Here is file: https://github.com/nquantum/stm32_rosserial

https://github.com/nquantum/stm32_rosserial image description

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build
  7. include ros_lib
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

Here is file: https://github.com/nquantum/stm32_rosserial image description

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so fat it work in polling..

FYI: Lost sync with device, restarting

can communicate but maybe set timeout for write/read too long so spinonce() timeout

Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino

from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

Since using polling , uart timeout too long and too short will not successful and get error in rosserial

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build
  7. include ros_lib
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so fat it work in polling..

FYI: FYI:

Lost sync with device, restarting

restarting - can communicate but maybe set timeout for write/read too long so spinonce() timeout

Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino


-
from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

  • Since using polling , uart timeout too long and too short will not successful and get error in rosserial

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from buildbuild , right click folder then untick exclude so it will compile this source in this folder
  7. include ros_lib in project property for c, c++
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.hSTM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so fat it work in polling..

FYI:

Lost sync with device, restarting - can communicate but maybe set timeout for write/read too long so spinonce() timeout

Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino
- from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

  • Since using polling , uart timeout too long and too short will not successful and get error in rosserial

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build , right click folder then untick exclude so it will compile this source in this folder
  7. include ros_lib in project property for c, c++
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already takr take 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so fat it work in polling..

FYI:

Lost "Lost sync with device, restarting restarting" - can communicate but maybe set timeout for write/read too long so spinonce() timeout

Unable "Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino
Arduino" - from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

  • Since using polling , uart timeout too long and too short will not successful and get error in rosserialrosserial. In those website I overview they seem to use interupt with ring buffer I will try to improved my code later

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build , right click folder then untick exclude so it will compile this source in this folder
  7. include ros_lib in project property for c, c++
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import ti to Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already take 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so fat far it work in polling..

FYI:

"Lost sync with device, restarting" - can communicate but maybe set timeout for write/read too long so spinonce() timeout

"Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino" - from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

  • Since using polling , uart timeout too long and too short will not successful and get error in rosserial. In those website I overview they seem to use interupt with ring buffer I will try to improved my code later

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!

"Update: add example subscribe and publish to main.cpp"

During wait for answer I've search and try some. I think I got it working now. Maybe not perfect since I'm still learning C++

Here is my file: https://github.com/nquantum/stm32_rosserial image description

from install for arduino: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

  1. I install rosserial libraries on PC-Linux sudo apt-get install ros-kinetic-rosserial sudo apt-get install ros-rosserial-arduino

  2. building Arduino library >> after this we get ros_lib for our microcontroller , can copy to linux or windows cd <some_empty_directory> rosrun rosserial_arduino make_libraries.py .

  3. get ros_lib ready to import to Arduino or other micro

  4. get working project & set preprocessor c , c++ > I use from cubeF4 example project uart_polling to make sure usart work
  5. copy ros_lib into project
  6. exclude from build , right click folder then untick exclude so it will compile this source in this folder
  7. include ros_lib in project property for c, c++
  8. rename main.c to main.cpp
  9. in main try #include <ros.h> compile error because it for arduino ros.h,ArduinoHardware.h, ArduinoTcpHardware.h
  10. replace ros.h and copy STM32Hardware.h
  11. adjust usart parameter in main.h to usartx, x = your number , I should move these parameter to STM32Hardware.h or from STM32Hardware.h to main.h to make it centralize. Maybe later...

test 1st terminal 1. roscore

2nd terminal 1. rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600

3rd terminal 1. rostopic list 2. rostopic echo /chatter

Now you can see from those topic. Which I adjust from Hello World (example publisher) - Arduino : http://wiki.ros.org/rosserial_arduino/Tutorials/Hello%20World

Also reference from AVR and Adding Support for New Hardware http://wiki.ros.org/rosserial_client/Tutorials/Using%20rosserial%20with%20AVR%20and%20UART http://wiki.ros.org/rosserial_client/Tutorials/Adding%20Support%20for%20New%20Hardware

Another example: https://github.com/bosch-ros-pkg/stm32 https://github.com/spiralray/stm32f1_rosserial These two also interface stm32 to rosserial but they use library C++ of HAL. I see it not convenience for me , new in C++ and I like to use ST HAL which can easy import to Eclipse and generate from CubeMX.

Let me know if it work or recommendation. Since I now learn to make it work with FreeRTOS. I'm also new in ROS so still learn from tutorial.

Now is more happy coz since Arduino Uno have SRAM 2048 or 2K, simple Hello World already take 1358 or 66%. If I try more code it take 70% above then it unable to communicate with rosserial already. But now I use STM32F469 Discovery Board have SRAM 320K with Hello World take for 1.3K-1.5K I've plenty of room to play with plus power of 32bit and HAL library.

I use HAL_UART function in polling mode in client-side rosserial implementation. Maybe interupt mode should be better. I don't know if/how I can use interupt mode for the rosserial coz it seem like function read() and void write(uint8_t* data, int length) get call periodically. Shold I interupt read then place in buffer and read from those buffer? Anyway so far it work in polling..

FYI:

"Lost sync with device, restarting" - can communicate but maybe set timeout for write/read too long so spinonce() timeout

"Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino" - from can not communicate to those com port maybe set wrong com port or read/write function not work or wrong baud rate host<>board

  • Since using polling , uart timeout too long and too short will not successful and get error in rosserial. In those website I overview they seem to use interupt with ring buffer I will try to improved my code later

STM32 Discovery board have virtual comport very convenience just use those com port then plug-in usb to host pc then communicate!