odri_master_board_sdk package from odri_master_board repoodri_master_board_sdk |
|
Package Summary
Tags | No category tags. |
Version | 1.0.7 |
License | BSD 3-Clause |
Build type | CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/stack-of-tasks/odri_master_board_sdk_release.git |
VCS Type | git |
VCS Version | master |
Last Updated | 2024-07-01 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Maximilien Naveau
- Olivier Stasse
- Guilhem Saurel
Authors
SDK
The SDK provide a simple C++ class interface to send command to the masterboard via Ethernet or Wifi.
Prepare you interface
You first need to identify you interface name. To get a list of the interface on your computer, run
Ethernet
A direct connection should me made between the master board and you computer. It is not possible to use the same interface for local network and master board connection.
Optional configuration:
Some packet will be sent by the OS to the master board. Their are not usefull since the master board only use raw MAC frame. To disable ARP packet run:
sudo ifconfig MY_INTERFACE -arp
where MY_INTERFACE is your lan interface name.
To disable IPV6 trafic, add this line into
net.ipv6.conf.MY_INTERFACE.disable_ipv6 = 1
where MY_INTERFACE is your lan interface name.
Optional configuration (macOS):
To disable IPV6 and IPV4 you can use
networksetup -listnetworkserviceorder
to have the list of NetworkService (Hardware Port) related to the interface.
It is then possible to switch off IPV6 with:
networksetup -setv6off NetworkService
Wifi
Your interface should support monitor mode and injection since the procol used by the master board is not a standard wifi. You need to configure your interface. A script is available in the sdk folder. to use it run
sudo ./setup_wifi.sh MY_INTERFACE
where MY_INTERFACE your wlan interface name.
How to run the C++ example
main.cpp is a simple example to test the SDK, tested on ubuntu. It will execute a sinusoid trajectory on the first N_CONTROLLED_SLAVE to compile it go into the sdk folder and run:
make
a bin folder is created. to run the example run:
sudo ./bin/exec MY_INTERFACE
where MY_INTERFACE is the name of the network interface used to connect to the master board.
How to run the Python examples
-
Clone the repository:
git clone --recursive https://github.com/open-dynamic-robot-initiative/master-board.git
-
Get into the repository:
cd master-board
-
Set the number of controlled drivers by opening
sdk/master_board_sdk/example/example.py
and tuning theN_SLAVES_CONTROLED
constant:N_SLAVES_CONTROLED 4
if you are using 4 driver boards (1 per leg) -
Get in
sdk/master_board_sdk/
:cd sdk/master_board_sdk/
-
Create a build folder:
mkdir build
-
Get into the folder:
cd build
- Two possibilities:
- Using
ccmake ..
turn on Python bindings by settingBUILD_PYTHON_INTERFACE
toON
andCMAKE_BUILD_TYPE
toRELEASE
. Then compile and create the bindings:cmake ..
thenmake
- Directly use
cmake -DBUILD_PYTHON_INTERFACE=ON -DCMAKE_BUILD_TYPE=RELEASE ..
thenmake
. If you want to run the scripts with Python 3 then usecmake -DBUILD_PYTHON_INTERFACE=ON -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$(which python3) ..
instead.
- Using
- Run the control script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/example.pyc -i name_interface
- Run the listener script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/listener.pyc -i name_interface
- Run the communication analyser script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/com_analyser.pyc -i name_interface
How to run an executable based on the SDK without root permissions
To run an executable named EXECUTABLE_NAME without root permissions, run :
sudo setcap cap_net_admin,cap_net_raw+ep EXECUTABLE_NAME
remember to reset the capabilities on python if you use it other you can get into trouble:
sudo setcap -r /usr/bin/python3.6
Changelog for package odri_master_board_sdk
1.0.7 (2024-06-24)
- Fix header to have the package working on Noble (\@olivier-stasse)
- Fix building Python bindings on Mac (\@ManifoldFR)
- Remove fetching Catch2 v3 and detect automatically the installed version. (\@olivier-stasse)
- Add Rolling github action (\@olivier-stasse)
1.0.6 (2023-11-15)
- Makes cmake-format happy !
- [CMakeList.txt] Fix CMakeLists.txt to install the header.
- Add cmake-format.
- Change name of the package to make it release in ROS-2.
- CMake: update submodule use
- CMake: bump catch2
- Partial support of the new Power-Board hardware
- Fix two bugs (FLOAT_TO_D8QN and compiling issue) + remove warnings on the core library.
- [master_board_sdk] Fix compilation error on master_board_interface.cpp l.263 Introduced by commit 782c348 it fails because %s is expecting char * and not std::string. This fails on clang.
- [master_board_sdk] Fix warnings. There are still some warnings wih Catch2 and clang. But Catch2 is a dependency and should be fixed upstream.
- [protocol] FLOAT_TO_D8QN has a wrong bracket. This commit fix this.
- [cmake] Synchronize to remove error during install process.
- Add error, thrown by sdk, for protocol version mismatch (during init)
- Add ament_cmake build_type export in package.xml and install package.xml file
- Update sdk/master_board_sdk/CMakeLists.txt
- [master_board_sdk/CMakeLists.txt] Remove useless CMAKE_PREFIX_INSTALL specification.
- [master_board_sdk/package.xml] Remove ament_cmake dependency and buildtool dependency.
- [CMakeLists.txt] Remove dependency to ament_cmake and generates files for Colcon underlays.
- [package.xml] Add dependence to ament_cmake if ROS-2 is detected.
- [CMakeLists.txt] Uses ROS-2 if the environment is compatible.
- [package.xml] Add ament_cmake export for colcon support.
- [cmake] Add install procedure for file package.xml
- Adding ROS-2 rolling CI to the repository and some changes to have it working.
- [sdk/master_board_sdk/tests/test_protocol.cpp] Commented the test on NaN which is failing.
- [sdk/master_board_sdk/package.xml] Fix package dependency. Update version to 3. Add dependencies to libboost-python. Add git for dependencies.
- [cmake/sdk_master_board/CMakeLists.txt] Improve CMakeLists.txt.
- [cmake/master_board_sdk/CMakeLists.txt] Removing components
- [cmake] Change again python detection place.
- [cmake] Change place for python detection
- [sdk/master_board_sdk/CMakeLists.txt] Update Find Python detection. Update message when detection is failing.
- [Cmake] remove python components.
- [master_board_sdk/CMakeLists.txt] Provides better Python detection
- [cmake] Synchronize
- [package.xml] XML version 1.0
- [package.xml] Remove Boost depend.
- Cmake
- pre-commit run -a
- sync submodule
- (Small) Fix for sdk examples with python >=3.8
- Apple support for wired connection.
- [Link_manager] Fix message when the priority is not set correctly and fails using assert.
- [cmake] Switch back the default to ON if this is not an APPLE platform
- Add Python bindings for SetKp/Kd/SaturationCurrent and fix example.py
- Zero-initialise all members of Motor
- Change macro name for platform from UNIX to linux. Include net/if_arp.h only for APPLE.
- Fix missing header.
- Fix wrong elif condition and missing brackets.
- Apple support for wired connection.
- example.py: Initialise all reference values and gains to zero This should not really be needed anymore since values are already zero-initialised in [Motor]{.title-ref} but better be safe than sorry.
- fix example.py: time.clock() has been removed [time.clock()]{.title-ref} has been deprecated in Python 3.3 and does not exist anymore in newer versions. Use [perf_counter]{.title-ref} instead.
- Add Python bindings for Motor::SetKp/Kd/SaturationCurrent At least by now they are implemented in motor.cpp, so there's no reason to not add bindings for them.
- Zero-initialise all members of Motor This should fix an issue that was likely caused by [kp]{.title-ref} being set to some random non-zero value, resulting in the motor unintentionally being held at some position.
- Missing include
- plateform and distro modules optionnal for sdk example com_analyser.py
- Swap process_time and clock for better intelligibility
- Protocol version added in init_ack packet & version mismatch throw runtime error in sdk
- Fix sdk examples for python version >=3.8
- CMake: add unit tests
- Fix minor build error and update cmake submodule
- CMake: add unit tests
- Handle out-of-range motor params without wraparound (#117) Avoid fixed-point overflow
- Minor CMakelist change and cmake update
- SDK: fix a few warnings
- [CMake] set RPATH for executables
- SDK: fix warnings
- Add Python bindings for powerboard data
- add pyton bindings for power baord
- [SDK][Firmware] Add partial support for power-board, Update protocol version and sdk accordingly
- Contributors: EtienneAr, Felix Kloss, Guilhem Saurel, Naveau, Olivier Stasse, Thomas Flayols, Trevor Blackwell, odri, thomasfla
1.0.5 (2022-06-30)
- Merge pull request #110 from open-dynamic-robot-initiative/fwidmaier/version Bump version to 1.0.5 and add changelog
- Bump version to 1.0.5 and add changelog
- fix package.xml for catkin build compatibility
- Merge pull request #109 from open-dynamic-robot-initiative/jviereck/mailbox_only Use mailbox for SPI communication
- fix example_imu_data_collection
- Add MasterBoardInterface::get_imu_data() Add method to easily get the full IMU data.
- Adding CMakeList entry for new example
- Adding example for collecting and plotting IMU data for 10 seconds
- SDK: cherry-pick fixes, fix #106 initial commit: 32b0252c64a064c55e8cd07115a003b15c0d0a86
- Contributors: Felix Widmaier, Guilhem Saurel, Julian Viereck, Maximilien Naveau
1.0.4 (2021-07-21)
- Merge pull request #99 from paLeziart/add-parse-sensor-data Add parse sensor data
- Add comment to explain the call to ParseSensorData
- Add a ParseSensorData in MasterBoardInterface Init function
- Merge pull request #97 from open-dynamic-robot-initiative/jviereck/fix_regression Fix problem with reference to packed fields in MasterBoardInterface ParseSensorData
- Fix problem with reference to packed fields in MasterBoardInterface::ParseSensorData
- Merge pull request #94 from open-dynamic-robot-initiative/jviereck/fix92 Set close to zero velocity to zero. Fixes #92
- Address review comments
- Set close to zero velocity to zero. Fixes #92
- Contributors: Julian Viereck, odri, paLeziart
1.0.3 (2021-06-09)
- Merge pull request #90 from open-dynamic-robot-initiative/mnaveau/python_bindings_by_default Update CMakeLists.txt
- Update CMakeLists.txt
- Contributors: Naveau
1.0.2 (2021-05-11)
1.0.1 (2021-04-16)
- Merge pull request #82 from open-dynamic-robot-initiative/jviereck/attempt_three Make communication more robust
- Increase the CONFIG_SPI_N_ATTEMPT from 2 to 3. Add a counter in the example to see number of times an error was reported
- Merge pull request #78 from open-dynamic-robot-initiative/mnaveau/missing_definition [sdk] fix missing definition from the Motor class
- Merge pull request #77 from open-dynamic-robot-initiative/jviereck/error_encoder_2 SDK: Adding error code for encoder2 error
- Merge pull request #75 from open-dynamic-robot-initiative/mbogdanovic/fix_stat_overflow SDK: Fix bug/crash with overflow in statistic computation
- [sdk] fix missing definition from the Motor class
- SDK: Adding error code for encoder2 error
- Update README.md
- Update README.md
- SDK: Fix bug/crash with overflow in statistic computation
- Merge pull request #72 from open-dynamic-robot-initiative/mnaveau/export_library Warning Hunt and CMake export.
- update target names
- update the interface to double values
- remove warning in the example_pd
- fix a couple of warnings
- Synchronize.
- export the includes and install them
- fix project name
- add Boost to the package.xml
- add the license and package.xml
- export the cmake library
- Merge pull request #74 from open-dynamic-robot-initiative/jviereck/current_sat [SDK] Add support for current saturation
- [SDK] Add support for current saturation
- Merge pull request #71 from thomasfla/master Add local joint impedance control interface + improve python binding packaging
- Merge pull request #1 from nim65s/master Update CMake
- CMake: ensure python lib always find c++ lib
- CMake: fix sdk installation path, fix #45
- CMake: update submodule and its use
- Tune data representation in the protocol for usefull gains levels, Fix conevrsion of Kp Kd
- Add IQ scalling for Kp and Kd values
- Merge pull request #66 from maximekli/internship-major-refactor [Firmware][SDK][Doc] Major refactor and protocol update;
- Merge pull request #19 from AlexisPotier/communication Fixed overflow issue in com analyser script
- Fixed overflow issue on com_analyser
- Plot graphs even if the script is stopped by a master board timeout
- Merge pull request #17 from AlexisPotier/communication Better way to get wifi channel
- Better way to get wifi channel
- Removed listener mode special case because mb does not send packets in waiting for init anymore
- Merge pull request #3 from maximekli/master Update fork
- Merge pull request #15 from AlexisPotier/communication Added communication analyser script to test the network link between PC and MB + channel 14 support
- Small refactor
- Replaced latency script by communication analyser script
- Added getters for wifi channel and protocol version
- Enable channel 14 for wifi communication
- Merge pull request #2 from maximekli/master Update fork
- Merge branch 'AlexisPotier-print'
- Merge branch 'print' of https://github.com/AlexisPotier/master-board into AlexisPotier-print + some formatting
- Avoid displaying headers when there is no spi connected
- Merged PrintCmdStats and PrintSensorStats, improved the display of wifi/eth stats
- Improved the display of IMU, ADC and motors data
- Revert "Changing scheduler param to realtime in examples" This reverts commit beead35848bc759a2ef147b0a68dc79b47e57f74.
- Improving display of latency test result
- Changed protocol version from 2 to 3
- Merge pull request #13 from AlexisPotier/latency Latency script for network link into master branch
- Changing scheduler param to realtime in examples
- Documentation update : added informations about the latency calculator script
- Creation of a python script to compute the latency of the wifi/ethernet communication
- Changed the protocol to be able to compute the latency for ethernet/wifi communication
- Initialization of pointer + extra safety when stopping the interface
- Added member function to check if driver is enabled
- Fix division by zero
- git push origin masterMerge branch 'AlexisPotier-master'
- Merge branch 'master' of https://github.com/AlexisPotier/master-board into AlexisPotier-master
- Fix for command loss feedback reset and overflow
- Get first packet loss to avoid jump in value
- Proper getter and setters for a few driver properties
- git push origin masterMerge branch 'maximekli-master'
- Merge branch 'master' of https://github.com/maximekli/master-board into maximekli-master
- Merge branch 'memory_leaks'
- Merge branch 'signal_handler'
- Small fixes after merge
- git push origin masterMerge branch 'AlexisPotier-signal_handler'
- Merge branch 'signal_handler' of https://github.com/AlexisPotier/master-board into AlexisPotier-signal_handler
- git push origin masterMerge branch 'AlexisPotier-memory_leaks'
- Merge branch 'memory_leaks' of https://github.com/AlexisPotier/master-board into AlexisPotier-memory_leaks
- Small refactor when checking drivers
- Free link_handler when the program is stopped by SIGINT signal
- Removed "virtual" keyword for stop function in ESPNOW_manager
- Close correctly the pthread to avoid memory leaks
- Added destructors in the interface to close correctly link_handler_ and avoid memory leaks
- Small refactor
- Added extra safety when closing interface
- Merge pull request #5 from AlexisPotier/master Fix seg fault on stopping the interface
- Added default argument for listener mode in interface constructor
- Handling Keyboard Interrupt signal to close threads correctly when the script is interrupted by the user
- Update doc with listener example
- Updated outdated doc
- Added connected status as an attribute in motor_driver class and adapting interface and example with it
- Small refactor
- Rework for listener to work in more cases Added getters for session id and reset packet loss stats method
- Override stop method to stop differently wifi and ethernet connexions
- Initialization of bpf in ESPNOW_manager
- Small refactor on shutting down the interface
- Little fix
- Merge branch 'feedback_on_packet_loss'
- Merge branch 'AlexisPotier-feedback_on_packet_loss'
- Merge branch 'feedback_on_packet_loss' of https://github.com/AlexisPotier/master-board into AlexisPotier-feedback_on_packet_loss
- Added getters for feedback and changed stats print functions
- Created listener script that gathers sensor data from any connected mb
- Adapted both examples for the new listener mode
- Added listener mode to the interface that allows to get sensor data from any running mb (no session id checking)
- Updated python example with failed spi transactions support
- Added failed spi transactions support to example
- Added protocol version to init msgs in interface
- Updating interface and examples with the connected spi slaves feedback
- Removed state machine test example
- Fixed the error (invalid pointer) occurring at the end of the example
- Fixed the segmentation fault occurring at the end of the example
- Merge branch 'AlexisPotier-new_branch'
- Merge branch 'new_branch' of https://github.com/AlexisPotier/master-board into AlexisPotier-new_branch
- Giving feedback on packet loss
- update files to merge
- update feedback packet loss using latest version
- Merge branch 'master' of https://github.com/open-dynamic-robot-initiative/master-board
- Merge pull request #62 from open-dynamic-robot-initiative/fwidmaier/fix-clang-error Using constant value for array length
- Using constant value for array length Using the value from [this->bpf.len]{.title-ref} for defining the array length seems to be accepted by GCC but resulted in an error with clang. Therefore store the value to a constexpr and use that instead.
- Merge branch 'master' of https://github.com/AlexisPotier/master-board
- add feedback on packet loss
- Merge pull request #59 from AlexisPotier/master Added setcap solution in the SDK documentation and fixed a problem with the images in the SPI documentation
- Update README.md
- Adapting the examples for the new interface timeout (while waiting for acknowledgment)
- Adding a new timeout to the interface in order to shut it down if we wait for an acknowledgment msg for too long
- Added session id handling in sdk interface
- Moving the master board state machine test program to its own folder and editing the CMakeLists and README files to run it
- New python test file in the sdk to demonstrate every state of the master board state machine
- Adapting python example for use with new master board state machine. Runs ok but seg fault in the end while stoping interface.
- Adapting python master board sdk for use with new state machine
- Small change to match previous commit
- Small method name change to be more consistent with previous code
- Adapting the example for use with the new master board firmware that uses init messages
- Adapting master board interface for the new masterboard firmware that uses init messages. Not adapted for use with python.
- Merge pull request #55 from open-dynamic-robot-initiative/jviereck/link_manager_destruct LinkManager: Close connection on destruction
- LinkManager: Close connection on destruction
- Merge pull request #52 from thomasfla/fix_linacc [sdk] rescale linear acceleration to SI, fix typo in python bindings
- [sdk] rescale linear acceleration to SI, fix typo in python bindings
- Merge pull request #35 from paLeziart/guide_python_script [SDK] Small guide on how to compile and launch the Python example
- Merge pull request #50 from thomasfla/encoders_offset [SDK] Add a settable offset on position reading and reference positio…
- Merge pull request #49 from open-dynamic-robot-initiative/mnaveau/timeout_send_command Timeout of the SendCommand only after the first command
- Update the timeout of the SendCommand only after the first command as been set.
- [SDK] Small guide on how to compile and launch the Python example
- [SDK] Add a settable offset on position reading and reference position. Usefull for encoder offset calibration routines
- Merge pull request #46 from thomasfla/tflayols_devel [SDK] [Firmware] Expose estimated linear acceleration from IMU
- [SDK] expose accelerations in m/s\^2 instead of g
- [Firmware][SDK] Configure IMU to send linear acceleration estimate, adapt protocol and sdk to read it. Warning! Protocol has changed, the Master board needs to be flashed
- [SDK] Remove N_SLAVE_CONTROLED from the library, use it only in the example; Set default value to 1
- Merge pull request #34 from nim65s/master [Python] replace getopt by argparse
- Merge pull request #40 from nim65s/cmake [CMake] PKG_CONFIG_APPEND_BOOST_LIBS has been fixed
- Merge pull request #42 from open-dynamic-robot-initiative/jviereck/si_velocity_example_py_followup Update example.py as for d gain si unites
- Update example.py as followup to #39.
- Merge pull request #39 from open-dynamic-robot-initiative/jviereck/fix38_si_velocity [sdk] Fix velocity si unit conversion. Fixes #38
- [CMake] PKG_CONFIG_APPEND_BOOST_LIBS has been fixed
- [Python] replace getopt by argparse Which is cleaner, and comes with more functionnalities
- [Python] avoid lines > 120 chars
- [sdk] Fix velocity si unit conversion. Fixes #38
- Merge pull request #36 from paLeziart/fix_typos_connection [SDK] Fix typos: connection instead of connexion
- [SDK] Fix typos: connection instead of connexion
- Merge pull request #33 from nim65s/master [CMake] clean master_board_sdk
- [CMake] PKG_CONFIG_APPEND_BOOST_LIBS doesn't work with boost python for now
- [CMake] typo
- [CMake] build python example
- [CMake] sync submodule
- remove symlinks build directory could be anywhere
- [CMake] python .pc is configured in scrcpy/
- [CMake] build python .so in standard place
- [CMake] install python .so in PYTHON_SITELIB
- CMAKE_INSTALL_PREFIX is implied
- PROJECT_NAME has dashes, so this can't work with python import system
- [CMake] boost python is required for python
- [CMake] update project definition
- [CMake] remove end-of-line spaces
- Merge pull request #29 from paLeziart/IMU_bindings [SDK] Python bindings for IMU data (accelerometer, gyroscope, attitude)
- Merge pull request #30 from paLeziart/shutdown-timeout [SDK] Timeout of MasterBoardInterface if the master board is not resp…
- [SDK] Timeout of MasterBoardInterface if the master board is not responding
- [SDK] Python bindings for IMU data (accelerometer, gyroscope, attitude)
- Merge pull request #26 from open-dynamic-robot-initiative/tflayols_devel [Firmware] Fix the IMU driver to deal with combined messages from IMU …
- [sdk] fix makefile
- Merge pull request #25 from paLeziart/bindings_adc_and_gains [SDK] Adapting gains for SI units + Python bindings for adc property …
- [SDK] Adapting gains for SI units + Python bindings for adc property and printADC function
- Merge pull request #20 from paLeziart/noprintf [SDK] Option to have no printf when running on realtime loop
- [SDK] Option to have no printf when running on realtime loop
- Merge pull request #9 from open-dynamic-robot-initiative/jviereck_adc Add support for reading and printing ADC values from the cards
- Set SP_QN_ADC and UD_QN_ADC from 14 back to 16
- Merge branch 'master' into jviereck_adc
- Merge pull request #14 from open-dynamic-robot-initiative/jviereck_motor_si_units Changes motor position, velocities, kp and kd to SI units
- Merge pull request #17 from paLeziart/master [SDK] Python bindings of MasterBoardInterface, MotorDriver and Motor …
- [SDK] Python bindings of MasterBoardInterface, MotorDriver and Motor classes with Boost + example.py script
- Changes motor position, velocities, kp and kd to SI units
- Add support for reading and printing ADC values from the cards
- Merge pull request #7 from open-dynamic-robot-initiative/mnaveau/catkin_compatiblity catkin compatiblity
- fix the move of the sdk include to a sub-folder
- move the include in a subfolder call master_board_sdk for general packaging consistency
- moved all the files to clean the sdk folder
- Contributors: AlexisPotier, Felix Widmaier, Guilhem Saurel, Julian Viereck, Maxime K, Maximilien Naveau, MaximilienNaveau, Miroslav Bogdanovic, Naveau, Pierre-Alexandre Leziart, Thomas Flayols, jviereck@tuebingen.mpg.de, maximekli, paLeziart, thomasfla
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged odri_master_board_sdk at Robotics Stack Exchange
odri_master_board_sdk package from odri_master_board repoodri_master_board_sdk |
|
Package Summary
Tags | No category tags. |
Version | 1.0.7 |
License | BSD 3-Clause |
Build type | CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/stack-of-tasks/odri_master_board_sdk_release.git |
VCS Type | git |
VCS Version | master |
Last Updated | 2024-07-01 |
Dev Status | DEVELOPED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Maximilien Naveau
- Olivier Stasse
- Guilhem Saurel
Authors
SDK
The SDK provide a simple C++ class interface to send command to the masterboard via Ethernet or Wifi.
Prepare you interface
You first need to identify you interface name. To get a list of the interface on your computer, run
Ethernet
A direct connection should me made between the master board and you computer. It is not possible to use the same interface for local network and master board connection.
Optional configuration:
Some packet will be sent by the OS to the master board. Their are not usefull since the master board only use raw MAC frame. To disable ARP packet run:
sudo ifconfig MY_INTERFACE -arp
where MY_INTERFACE is your lan interface name.
To disable IPV6 trafic, add this line into
net.ipv6.conf.MY_INTERFACE.disable_ipv6 = 1
where MY_INTERFACE is your lan interface name.
Optional configuration (macOS):
To disable IPV6 and IPV4 you can use
networksetup -listnetworkserviceorder
to have the list of NetworkService (Hardware Port) related to the interface.
It is then possible to switch off IPV6 with:
networksetup -setv6off NetworkService
Wifi
Your interface should support monitor mode and injection since the procol used by the master board is not a standard wifi. You need to configure your interface. A script is available in the sdk folder. to use it run
sudo ./setup_wifi.sh MY_INTERFACE
where MY_INTERFACE your wlan interface name.
How to run the C++ example
main.cpp is a simple example to test the SDK, tested on ubuntu. It will execute a sinusoid trajectory on the first N_CONTROLLED_SLAVE to compile it go into the sdk folder and run:
make
a bin folder is created. to run the example run:
sudo ./bin/exec MY_INTERFACE
where MY_INTERFACE is the name of the network interface used to connect to the master board.
How to run the Python examples
-
Clone the repository:
git clone --recursive https://github.com/open-dynamic-robot-initiative/master-board.git
-
Get into the repository:
cd master-board
-
Set the number of controlled drivers by opening
sdk/master_board_sdk/example/example.py
and tuning theN_SLAVES_CONTROLED
constant:N_SLAVES_CONTROLED 4
if you are using 4 driver boards (1 per leg) -
Get in
sdk/master_board_sdk/
:cd sdk/master_board_sdk/
-
Create a build folder:
mkdir build
-
Get into the folder:
cd build
- Two possibilities:
- Using
ccmake ..
turn on Python bindings by settingBUILD_PYTHON_INTERFACE
toON
andCMAKE_BUILD_TYPE
toRELEASE
. Then compile and create the bindings:cmake ..
thenmake
- Directly use
cmake -DBUILD_PYTHON_INTERFACE=ON -DCMAKE_BUILD_TYPE=RELEASE ..
thenmake
. If you want to run the scripts with Python 3 then usecmake -DBUILD_PYTHON_INTERFACE=ON -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$(which python3) ..
instead.
- Using
- Run the control script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/example.pyc -i name_interface
- Run the listener script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/listener.pyc -i name_interface
- Run the communication analyser script with the name of your Ethernet interface instead of
name_interface
(for instanceenp1s0
):
sudo PYTHONPATH=. python example/com_analyser.pyc -i name_interface
How to run an executable based on the SDK without root permissions
To run an executable named EXECUTABLE_NAME without root permissions, run :
sudo setcap cap_net_admin,cap_net_raw+ep EXECUTABLE_NAME
remember to reset the capabilities on python if you use it other you can get into trouble:
sudo setcap -r /usr/bin/python3.6
Changelog for package odri_master_board_sdk
1.0.7 (2024-06-24)
- Fix header to have the package working on Noble (\@olivier-stasse)
- Fix building Python bindings on Mac (\@ManifoldFR)
- Remove fetching Catch2 v3 and detect automatically the installed version. (\@olivier-stasse)
- Add Rolling github action (\@olivier-stasse)
1.0.6 (2023-11-15)
- Makes cmake-format happy !
- [CMakeList.txt] Fix CMakeLists.txt to install the header.
- Add cmake-format.
- Change name of the package to make it release in ROS-2.
- CMake: update submodule use
- CMake: bump catch2
- Partial support of the new Power-Board hardware
- Fix two bugs (FLOAT_TO_D8QN and compiling issue) + remove warnings on the core library.
- [master_board_sdk] Fix compilation error on master_board_interface.cpp l.263 Introduced by commit 782c348 it fails because %s is expecting char * and not std::string. This fails on clang.
- [master_board_sdk] Fix warnings. There are still some warnings wih Catch2 and clang. But Catch2 is a dependency and should be fixed upstream.
- [protocol] FLOAT_TO_D8QN has a wrong bracket. This commit fix this.
- [cmake] Synchronize to remove error during install process.
- Add error, thrown by sdk, for protocol version mismatch (during init)
- Add ament_cmake build_type export in package.xml and install package.xml file
- Update sdk/master_board_sdk/CMakeLists.txt
- [master_board_sdk/CMakeLists.txt] Remove useless CMAKE_PREFIX_INSTALL specification.
- [master_board_sdk/package.xml] Remove ament_cmake dependency and buildtool dependency.
- [CMakeLists.txt] Remove dependency to ament_cmake and generates files for Colcon underlays.
- [package.xml] Add dependence to ament_cmake if ROS-2 is detected.
- [CMakeLists.txt] Uses ROS-2 if the environment is compatible.
- [package.xml] Add ament_cmake export for colcon support.
- [cmake] Add install procedure for file package.xml
- Adding ROS-2 rolling CI to the repository and some changes to have it working.
- [sdk/master_board_sdk/tests/test_protocol.cpp] Commented the test on NaN which is failing.
- [sdk/master_board_sdk/package.xml] Fix package dependency. Update version to 3. Add dependencies to libboost-python. Add git for dependencies.
- [cmake/sdk_master_board/CMakeLists.txt] Improve CMakeLists.txt.
- [cmake/master_board_sdk/CMakeLists.txt] Removing components
- [cmake] Change again python detection place.
- [cmake] Change place for python detection
- [sdk/master_board_sdk/CMakeLists.txt] Update Find Python detection. Update message when detection is failing.
- [Cmake] remove python components.
- [master_board_sdk/CMakeLists.txt] Provides better Python detection
- [cmake] Synchronize
- [package.xml] XML version 1.0
- [package.xml] Remove Boost depend.
- Cmake
- pre-commit run -a
- sync submodule
- (Small) Fix for sdk examples with python >=3.8
- Apple support for wired connection.
- [Link_manager] Fix message when the priority is not set correctly and fails using assert.
- [cmake] Switch back the default to ON if this is not an APPLE platform
- Add Python bindings for SetKp/Kd/SaturationCurrent and fix example.py
- Zero-initialise all members of Motor
- Change macro name for platform from UNIX to linux. Include net/if_arp.h only for APPLE.
- Fix missing header.
- Fix wrong elif condition and missing brackets.
- Apple support for wired connection.
- example.py: Initialise all reference values and gains to zero This should not really be needed anymore since values are already zero-initialised in [Motor]{.title-ref} but better be safe than sorry.
- fix example.py: time.clock() has been removed [time.clock()]{.title-ref} has been deprecated in Python 3.3 and does not exist anymore in newer versions. Use [perf_counter]{.title-ref} instead.
- Add Python bindings for Motor::SetKp/Kd/SaturationCurrent At least by now they are implemented in motor.cpp, so there's no reason to not add bindings for them.
- Zero-initialise all members of Motor This should fix an issue that was likely caused by [kp]{.title-ref} being set to some random non-zero value, resulting in the motor unintentionally being held at some position.
- Missing include
- plateform and distro modules optionnal for sdk example com_analyser.py
- Swap process_time and clock for better intelligibility
- Protocol version added in init_ack packet & version mismatch throw runtime error in sdk
- Fix sdk examples for python version >=3.8
- CMake: add unit tests
- Fix minor build error and update cmake submodule
- CMake: add unit tests
- Handle out-of-range motor params without wraparound (#117) Avoid fixed-point overflow
- Minor CMakelist change and cmake update
- SDK: fix a few warnings
- [CMake] set RPATH for executables
- SDK: fix warnings
- Add Python bindings for powerboard data
- add pyton bindings for power baord
- [SDK][Firmware] Add partial support for power-board, Update protocol version and sdk accordingly
- Contributors: EtienneAr, Felix Kloss, Guilhem Saurel, Naveau, Olivier Stasse, Thomas Flayols, Trevor Blackwell, odri, thomasfla
1.0.5 (2022-06-30)
- Merge pull request #110 from open-dynamic-robot-initiative/fwidmaier/version Bump version to 1.0.5 and add changelog
- Bump version to 1.0.5 and add changelog
- fix package.xml for catkin build compatibility
- Merge pull request #109 from open-dynamic-robot-initiative/jviereck/mailbox_only Use mailbox for SPI communication
- fix example_imu_data_collection
- Add MasterBoardInterface::get_imu_data() Add method to easily get the full IMU data.
- Adding CMakeList entry for new example
- Adding example for collecting and plotting IMU data for 10 seconds
- SDK: cherry-pick fixes, fix #106 initial commit: 32b0252c64a064c55e8cd07115a003b15c0d0a86
- Contributors: Felix Widmaier, Guilhem Saurel, Julian Viereck, Maximilien Naveau
1.0.4 (2021-07-21)
- Merge pull request #99 from paLeziart/add-parse-sensor-data Add parse sensor data
- Add comment to explain the call to ParseSensorData
- Add a ParseSensorData in MasterBoardInterface Init function
- Merge pull request #97 from open-dynamic-robot-initiative/jviereck/fix_regression Fix problem with reference to packed fields in MasterBoardInterface ParseSensorData
- Fix problem with reference to packed fields in MasterBoardInterface::ParseSensorData
- Merge pull request #94 from open-dynamic-robot-initiative/jviereck/fix92 Set close to zero velocity to zero. Fixes #92
- Address review comments
- Set close to zero velocity to zero. Fixes #92
- Contributors: Julian Viereck, odri, paLeziart
1.0.3 (2021-06-09)
- Merge pull request #90 from open-dynamic-robot-initiative/mnaveau/python_bindings_by_default Update CMakeLists.txt
- Update CMakeLists.txt
- Contributors: Naveau
1.0.2 (2021-05-11)
1.0.1 (2021-04-16)
- Merge pull request #82 from open-dynamic-robot-initiative/jviereck/attempt_three Make communication more robust
- Increase the CONFIG_SPI_N_ATTEMPT from 2 to 3. Add a counter in the example to see number of times an error was reported
- Merge pull request #78 from open-dynamic-robot-initiative/mnaveau/missing_definition [sdk] fix missing definition from the Motor class
- Merge pull request #77 from open-dynamic-robot-initiative/jviereck/error_encoder_2 SDK: Adding error code for encoder2 error
- Merge pull request #75 from open-dynamic-robot-initiative/mbogdanovic/fix_stat_overflow SDK: Fix bug/crash with overflow in statistic computation
- [sdk] fix missing definition from the Motor class
- SDK: Adding error code for encoder2 error
- Update README.md
- Update README.md
- SDK: Fix bug/crash with overflow in statistic computation
- Merge pull request #72 from open-dynamic-robot-initiative/mnaveau/export_library Warning Hunt and CMake export.
- update target names
- update the interface to double values
- remove warning in the example_pd
- fix a couple of warnings
- Synchronize.
- export the includes and install them
- fix project name
- add Boost to the package.xml
- add the license and package.xml
- export the cmake library
- Merge pull request #74 from open-dynamic-robot-initiative/jviereck/current_sat [SDK] Add support for current saturation
- [SDK] Add support for current saturation
- Merge pull request #71 from thomasfla/master Add local joint impedance control interface + improve python binding packaging
- Merge pull request #1 from nim65s/master Update CMake
- CMake: ensure python lib always find c++ lib
- CMake: fix sdk installation path, fix #45
- CMake: update submodule and its use
- Tune data representation in the protocol for usefull gains levels, Fix conevrsion of Kp Kd
- Add IQ scalling for Kp and Kd values
- Merge pull request #66 from maximekli/internship-major-refactor [Firmware][SDK][Doc] Major refactor and protocol update;
- Merge pull request #19 from AlexisPotier/communication Fixed overflow issue in com analyser script
- Fixed overflow issue on com_analyser
- Plot graphs even if the script is stopped by a master board timeout
- Merge pull request #17 from AlexisPotier/communication Better way to get wifi channel
- Better way to get wifi channel
- Removed listener mode special case because mb does not send packets in waiting for init anymore
- Merge pull request #3 from maximekli/master Update fork
- Merge pull request #15 from AlexisPotier/communication Added communication analyser script to test the network link between PC and MB + channel 14 support
- Small refactor
- Replaced latency script by communication analyser script
- Added getters for wifi channel and protocol version
- Enable channel 14 for wifi communication
- Merge pull request #2 from maximekli/master Update fork
- Merge branch 'AlexisPotier-print'
- Merge branch 'print' of https://github.com/AlexisPotier/master-board into AlexisPotier-print + some formatting
- Avoid displaying headers when there is no spi connected
- Merged PrintCmdStats and PrintSensorStats, improved the display of wifi/eth stats
- Improved the display of IMU, ADC and motors data
- Revert "Changing scheduler param to realtime in examples" This reverts commit beead35848bc759a2ef147b0a68dc79b47e57f74.
- Improving display of latency test result
- Changed protocol version from 2 to 3
- Merge pull request #13 from AlexisPotier/latency Latency script for network link into master branch
- Changing scheduler param to realtime in examples
- Documentation update : added informations about the latency calculator script
- Creation of a python script to compute the latency of the wifi/ethernet communication
- Changed the protocol to be able to compute the latency for ethernet/wifi communication
- Initialization of pointer + extra safety when stopping the interface
- Added member function to check if driver is enabled
- Fix division by zero
- git push origin masterMerge branch 'AlexisPotier-master'
- Merge branch 'master' of https://github.com/AlexisPotier/master-board into AlexisPotier-master
- Fix for command loss feedback reset and overflow
- Get first packet loss to avoid jump in value
- Proper getter and setters for a few driver properties
- git push origin masterMerge branch 'maximekli-master'
- Merge branch 'master' of https://github.com/maximekli/master-board into maximekli-master
- Merge branch 'memory_leaks'
- Merge branch 'signal_handler'
- Small fixes after merge
- git push origin masterMerge branch 'AlexisPotier-signal_handler'
- Merge branch 'signal_handler' of https://github.com/AlexisPotier/master-board into AlexisPotier-signal_handler
- git push origin masterMerge branch 'AlexisPotier-memory_leaks'
- Merge branch 'memory_leaks' of https://github.com/AlexisPotier/master-board into AlexisPotier-memory_leaks
- Small refactor when checking drivers
- Free link_handler when the program is stopped by SIGINT signal
- Removed "virtual" keyword for stop function in ESPNOW_manager
- Close correctly the pthread to avoid memory leaks
- Added destructors in the interface to close correctly link_handler_ and avoid memory leaks
- Small refactor
- Added extra safety when closing interface
- Merge pull request #5 from AlexisPotier/master Fix seg fault on stopping the interface
- Added default argument for listener mode in interface constructor
- Handling Keyboard Interrupt signal to close threads correctly when the script is interrupted by the user
- Update doc with listener example
- Updated outdated doc
- Added connected status as an attribute in motor_driver class and adapting interface and example with it
- Small refactor
- Rework for listener to work in more cases Added getters for session id and reset packet loss stats method
- Override stop method to stop differently wifi and ethernet connexions
- Initialization of bpf in ESPNOW_manager
- Small refactor on shutting down the interface
- Little fix
- Merge branch 'feedback_on_packet_loss'
- Merge branch 'AlexisPotier-feedback_on_packet_loss'
- Merge branch 'feedback_on_packet_loss' of https://github.com/AlexisPotier/master-board into AlexisPotier-feedback_on_packet_loss
- Added getters for feedback and changed stats print functions
- Created listener script that gathers sensor data from any connected mb
- Adapted both examples for the new listener mode
- Added listener mode to the interface that allows to get sensor data from any running mb (no session id checking)
- Updated python example with failed spi transactions support
- Added failed spi transactions support to example
- Added protocol version to init msgs in interface
- Updating interface and examples with the connected spi slaves feedback
- Removed state machine test example
- Fixed the error (invalid pointer) occurring at the end of the example
- Fixed the segmentation fault occurring at the end of the example
- Merge branch 'AlexisPotier-new_branch'
- Merge branch 'new_branch' of https://github.com/AlexisPotier/master-board into AlexisPotier-new_branch
- Giving feedback on packet loss
- update files to merge
- update feedback packet loss using latest version
- Merge branch 'master' of https://github.com/open-dynamic-robot-initiative/master-board
- Merge pull request #62 from open-dynamic-robot-initiative/fwidmaier/fix-clang-error Using constant value for array length
- Using constant value for array length Using the value from [this->bpf.len]{.title-ref} for defining the array length seems to be accepted by GCC but resulted in an error with clang. Therefore store the value to a constexpr and use that instead.
- Merge branch 'master' of https://github.com/AlexisPotier/master-board
- add feedback on packet loss
- Merge pull request #59 from AlexisPotier/master Added setcap solution in the SDK documentation and fixed a problem with the images in the SPI documentation
- Update README.md
- Adapting the examples for the new interface timeout (while waiting for acknowledgment)
- Adding a new timeout to the interface in order to shut it down if we wait for an acknowledgment msg for too long
- Added session id handling in sdk interface
- Moving the master board state machine test program to its own folder and editing the CMakeLists and README files to run it
- New python test file in the sdk to demonstrate every state of the master board state machine
- Adapting python example for use with new master board state machine. Runs ok but seg fault in the end while stoping interface.
- Adapting python master board sdk for use with new state machine
- Small change to match previous commit
- Small method name change to be more consistent with previous code
- Adapting the example for use with the new master board firmware that uses init messages
- Adapting master board interface for the new masterboard firmware that uses init messages. Not adapted for use with python.
- Merge pull request #55 from open-dynamic-robot-initiative/jviereck/link_manager_destruct LinkManager: Close connection on destruction
- LinkManager: Close connection on destruction
- Merge pull request #52 from thomasfla/fix_linacc [sdk] rescale linear acceleration to SI, fix typo in python bindings
- [sdk] rescale linear acceleration to SI, fix typo in python bindings
- Merge pull request #35 from paLeziart/guide_python_script [SDK] Small guide on how to compile and launch the Python example
- Merge pull request #50 from thomasfla/encoders_offset [SDK] Add a settable offset on position reading and reference positio…
- Merge pull request #49 from open-dynamic-robot-initiative/mnaveau/timeout_send_command Timeout of the SendCommand only after the first command
- Update the timeout of the SendCommand only after the first command as been set.
- [SDK] Small guide on how to compile and launch the Python example
- [SDK] Add a settable offset on position reading and reference position. Usefull for encoder offset calibration routines
- Merge pull request #46 from thomasfla/tflayols_devel [SDK] [Firmware] Expose estimated linear acceleration from IMU
- [SDK] expose accelerations in m/s\^2 instead of g
- [Firmware][SDK] Configure IMU to send linear acceleration estimate, adapt protocol and sdk to read it. Warning! Protocol has changed, the Master board needs to be flashed
- [SDK] Remove N_SLAVE_CONTROLED from the library, use it only in the example; Set default value to 1
- Merge pull request #34 from nim65s/master [Python] replace getopt by argparse
- Merge pull request #40 from nim65s/cmake [CMake] PKG_CONFIG_APPEND_BOOST_LIBS has been fixed
- Merge pull request #42 from open-dynamic-robot-initiative/jviereck/si_velocity_example_py_followup Update example.py as for d gain si unites
- Update example.py as followup to #39.
- Merge pull request #39 from open-dynamic-robot-initiative/jviereck/fix38_si_velocity [sdk] Fix velocity si unit conversion. Fixes #38
- [CMake] PKG_CONFIG_APPEND_BOOST_LIBS has been fixed
- [Python] replace getopt by argparse Which is cleaner, and comes with more functionnalities
- [Python] avoid lines > 120 chars
- [sdk] Fix velocity si unit conversion. Fixes #38
- Merge pull request #36 from paLeziart/fix_typos_connection [SDK] Fix typos: connection instead of connexion
- [SDK] Fix typos: connection instead of connexion
- Merge pull request #33 from nim65s/master [CMake] clean master_board_sdk
- [CMake] PKG_CONFIG_APPEND_BOOST_LIBS doesn't work with boost python for now
- [CMake] typo
- [CMake] build python example
- [CMake] sync submodule
- remove symlinks build directory could be anywhere
- [CMake] python .pc is configured in scrcpy/
- [CMake] build python .so in standard place
- [CMake] install python .so in PYTHON_SITELIB
- CMAKE_INSTALL_PREFIX is implied
- PROJECT_NAME has dashes, so this can't work with python import system
- [CMake] boost python is required for python
- [CMake] update project definition
- [CMake] remove end-of-line spaces
- Merge pull request #29 from paLeziart/IMU_bindings [SDK] Python bindings for IMU data (accelerometer, gyroscope, attitude)
- Merge pull request #30 from paLeziart/shutdown-timeout [SDK] Timeout of MasterBoardInterface if the master board is not resp…
- [SDK] Timeout of MasterBoardInterface if the master board is not responding
- [SDK] Python bindings for IMU data (accelerometer, gyroscope, attitude)
- Merge pull request #26 from open-dynamic-robot-initiative/tflayols_devel [Firmware] Fix the IMU driver to deal with combined messages from IMU …
- [sdk] fix makefile
- Merge pull request #25 from paLeziart/bindings_adc_and_gains [SDK] Adapting gains for SI units + Python bindings for adc property …
- [SDK] Adapting gains for SI units + Python bindings for adc property and printADC function
- Merge pull request #20 from paLeziart/noprintf [SDK] Option to have no printf when running on realtime loop
- [SDK] Option to have no printf when running on realtime loop
- Merge pull request #9 from open-dynamic-robot-initiative/jviereck_adc Add support for reading and printing ADC values from the cards
- Set SP_QN_ADC and UD_QN_ADC from 14 back to 16
- Merge branch 'master' into jviereck_adc
- Merge pull request #14 from open-dynamic-robot-initiative/jviereck_motor_si_units Changes motor position, velocities, kp and kd to SI units
- Merge pull request #17 from paLeziart/master [SDK] Python bindings of MasterBoardInterface, MotorDriver and Motor …
- [SDK] Python bindings of MasterBoardInterface, MotorDriver and Motor classes with Boost + example.py script
- Changes motor position, velocities, kp and kd to SI units
- Add support for reading and printing ADC values from the cards
- Merge pull request #7 from open-dynamic-robot-initiative/mnaveau/catkin_compatiblity catkin compatiblity
- fix the move of the sdk include to a sub-folder
- move the include in a subfolder call master_board_sdk for general packaging consistency
- moved all the files to clean the sdk folder
- Contributors: AlexisPotier, Felix Widmaier, Guilhem Saurel, Julian Viereck, Maxime K, Maximilien Naveau, MaximilienNaveau, Miroslav Bogdanovic, Naveau, Pierre-Alexandre Leziart, Thomas Flayols, jviereck@tuebingen.mpg.de, maximekli, paLeziart, thomasfla