paradise-fi / rofi Goto Github PK
View Code? Open in Web Editor NEWDistributed Metamorphic Robots
License: Other
Distributed Metamorphic Robots
License: Other
Configuration has unused attribute matricesVal
, which should tell us if we have to compute matrices or they have not changed since the last time we computed them.
Also consider changing it to just boolean instead of ternary logic.
EDIT: see comment below, these are probably not correct steps to reproduce.
exporting CMAKE_GENERATOR=Ninja
into shell which is used to build RoFI breaks the build
$ export CMAKE_GENERATOR=Ninja
$ . setup.sh -f Release
$ rcfg doc
$ rmake doc
Compiling suite doc
make: *** No targets specified and no makefile found. Stop.
Build of suite doc failed. See output above
Either rmake
should respect the generator used in CMake, or make sure CMAKE_GENERATOR
is not set when rcfg
invokes cmake
.
Currently, it is hard to detect if RoFICoM connected to the passive counterpart or not. But it has an easy solution - the passive counterpart should have pins with orientation sensing resistors. In that way, we can check if the connection was successful or not.
Design the PCB and mount it on passive connectors.
Target failing_test-gazebosimRoficom
in softwareComponents/gazebosim/roficom/tests/
is failing.
The problem seems to be with EAST and WEST orientation.
rcfg --all
is no longer availableDebug
configuration, but the letter on next lines is R
(Also before the letter there should be a space, but that's a minor thing.)Remove custom scripts, use KiKit: https://github.com/yaqwsx/KiKit Possibly some extension to KiKit is required (e.g. printed stencil generator)
Go through repo and check whether we use type ID whenever it makes sense.
Broken by fcd31ff
Right now this is everywhere computed explicitly without function.
Also: Change spannSucc to use that logic as well.
The generate
tool is rather a hacky "script in C++" than a full-featured tool. The tool should present a CLI interface to specify parameters of configuration. No hardcoded values.
It seems rcfg doc
does not properly check if dependencies are available:
$ rcfg doc
Configuring suite doc
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xstill/repo/rofi/build.Release/doc
$ rmake doc
Compiling suite doc
[1/5] Extracting Doxygen for sim
FAILED: doc/doxygen/sim/xml/index.xml /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/sim/xml/index.xml
cd /home/xstill/repo/rofi/build.Release/doc/doc && /home/xstill/repo/rofi/releng/doc/extractDoxygen.sh sim /home/xstill/repo/rofi/softwareComponents/rofiHalSim /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/sim
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 36: doxygen: command not found
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 37: doxygen: command not found
[2/5] Extracting Doxygen for lib
FAILED: doc/doxygen/lib/xml/index.xml /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/lib/xml/index.xml
cd /home/xstill/repo/rofi/build.Release/doc/doc && /home/xstill/repo/rofi/releng/doc/extractDoxygen.sh lib /home/xstill/repo/rofi/softwareComponents /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/lib
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 36: doxygen: command not found
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 37: doxygen: command not found
[3/5] Extracting Doxygen for driver
FAILED: doc/doxygen/driver/xml/index.xml /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/driver/xml/index.xml
cd /home/xstill/repo/rofi/build.Release/doc/doc && /home/xstill/repo/rofi/releng/doc/extractDoxygen.sh driver /home/xstill/repo/rofi/softwareComponents/rofiHalPhys /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/driver
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 36: doxygen: command not found
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 37: doxygen: command not found
[4/5] Extracting Doxygen for roficom
FAILED: doc/doxygen/roficom/xml/index.xml /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/roficom/xml/index.xml
cd /home/xstill/repo/rofi/build.Release/doc/doc && /home/xstill/repo/rofi/releng/doc/extractDoxygen.sh roficom /home/xstill/repo/rofi/hardwareModules/RoFICoM/software/control_board /home/xstill/repo/rofi/build.Release/doc/doc/doxygen/roficom
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 36: doxygen: command not found
/home/xstill/repo/rofi/releng/doc/extractDoxygen.sh: line 37: doxygen: command not found
ninja: build stopped: subcommand failed.
Build of suite doc failed with Command '['ninja']' returned non-zero exit status 1.. See output above
(the build also reports exitcode 0 as in the case reported in #132)
We have functions to read config from file in IO.h, but theres no function to print config into file.
self explanatory.
I created #100 to demonstrate the bug.
When calling rofi-tool preview data/configurations/init.in 0
and rofi-tool preview data/configurations/init.in 1
, the output should be the same (see the changes in the code). - But it's not.
Currently there is a way to add a connection between two Module
s, but I found no way to remove a connection.
When other connection will be enabled, there is no guarantee that they will have the same orientation, so the connect
function might not apply to them
For testing purposes it would be useful to have generator of random configurations.
Right now we can only generate configurations with tree structure.
It shouldn't be possible to violate the invariants of the configuration from the user.
parent
and type
in Module
are exposed and can be modified by the user.
Generally only thinks that don't have any constraints should be available as public attributes (also, clang-tidy will warn about public attributes except when all attributes are public).
The SWD connectors are mirrored (on the other side of the UART pin headers)
The SWD connectors are too close to each other
Consider a single large board with mounting holes and both, regular and debug, connectors
There are some new dependencies to qt libraries.
If a Module
is connected to any other and changes it's id, the configuration get to an inconsistent state.
(Also check all other Joints and components)
I believe we need to add some configuration to the build system. So that user may set up installation dir, or enable/disable components to be built. I would appreciate a single directory with binaries so that I can add that path to my $PATH environment variable.
Github CI sometimes fails on the setup phase of rofiFirmware
(for me it happened twice on the Release
compilation).
WARNING: Download failure HTTP Error 503: Backend unavailable, connection timeout
Extracting /work/build.deps/esp-tools/dist/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/tools/xtensa-esp32-elf/esp-2021r2-8.4.0
WARNING: Failed to download https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
Installing [email protected]
Downloading xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
WARNING: Download failure HTTP Error 503: Backend unavailable, connection timeout
WARNING: Failed to download https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
Downloading xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
WARNING: Download failure HTTP Error 503: Backend unavailable, connection timeout
Downloading xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
WARNING: Failed to download https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz to /work/build.deps/esp-tools/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz.tmp
ERROR: Failed to download, and retry count has expired
Traceback (most recent call last):
File "/work/build.deps/esp-idf/tools/idf_tools.py", line 1818, in <module>
main(sys.argv[1:])
File "/work/build.deps/esp-idf/tools/idf_tools.py", line 1814, in main
action_func(args)
File "/work/build.deps/esp-idf/tools/idf_tools.py", line 1461, in action_install
tool_obj.download(tool_version)
File "/work/build.deps/esp-idf/tools/idf_tools.py", line 714, in download
raise DownloadError()
When calling source setup.sh
, it doesn't check if the build configuration exists. Some check is already being made in configurationDesc
, but only if the user uses the alter prompt version.
When calling source setup.sh
, it doesn't check if you are in the right directory, but instead it says that some file is missing - and then appears as success. Either check if it was called in the right directory and fail - or allow the call to be made from any directory.
Neither rcfg
nor rnake
propagates error exitocode
$ export CMAKE_GENERATOR=Ninja # might be irrelevant
$ . setup.sh -f Release
$ rcfg desktop
Configuring suite desktop
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Version: 6.1.2
-- Build type: Release
-- CXX_STANDARD: 20
-- Performing Test has_std_20_flag
-- Performing Test has_std_20_flag - Success
-- Performing Test has_std_2a_flag
-- Performing Test has_std_2a_flag - Success
-- Performing Test SUPPORTS_VARIADIC_TEMPLATES
-- Performing Test SUPPORTS_VARIADIC_TEMPLATES - Success
-- Performing Test SUPPORTS_USER_DEFINED_LITERALS
-- Performing Test SUPPORTS_USER_DEFINED_LITERALS - Success
-- Performing Test FMT_HAS_VARIANT
-- Performing Test FMT_HAS_VARIANT - Success
-- Looking for strtod_l
-- Looking for strtod_l - not found
-- pybind11 v2.6.2
CMake Warning (dev) at /usr/share/cmake/Modules/CMakeDependentOption.cmake:84 (message):
Policy CMP0127 is not set: cmake_dependent_option() supports full Condition
Syntax. Run "cmake --help-policy CMP0127" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Call Stack (most recent call first):
/home/xstill/repo/rofi/build.Release/desktop/_deps/pybind11-src/CMakeLists.txt:98 (cmake_dependent_option)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Found PythonInterp: /usr/bin/python3.10 (found version "3.10.2")
-- Found PythonLibs: /usr/lib/libpython3.10.so
-- Performing Test HAS_FLTO
-- Performing Test HAS_FLTO - Success
-- cxxopts version 2.2.0
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Armadillo (missing: ARMADILLO_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindArmadillo.cmake:117 (find_package_handle_standard_args)
CMakeLists.txt:107 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/xstill/repo/rofi/build.Release/desktop/CMakeFiles/CMakeOutput.log".
See also "/home/xstill/repo/rofi/build.Release/desktop/CMakeFiles/CMakeError.log".
CMake invocation for suite desktop failed. See output above
# → EXITCODE 0 !
$ rmake desktop
Compiling suite desktop
ninja: error: loading 'build.ninja': No such file or directory
Build of suite desktop failed with Command '['ninja']' returned non-zero exit status 1.. See output above
# → EXITCODE 0 !
I would expect exitcode indicates if the command was actually successful.
To work properly, rofi-vis binary must be executed from the build directory, otherwise, it does not work (perhaps the binary relies on relative paths only).
From const
objects from the configuration, the user shouldn't be able to modify the configuration in any way
Now, it's possible to do this:
Module & removeConst( const Module & mod ) {
return *mod.parent->getModule( mod.getId() );
}
In general, pointers shouldn't be public
- even for simple structure types. (except when you really think it through, never return it the wrong way etc.)
rofiHalSim
Actors in vtk can share resources. This could save some memory, but atm is not critical (the runtime seems fine).
It should be possible to test if a configuration is prepared and valid even on const Roficom
s.
When this is fixed, use the check in simplesim and simplesim-client.
QoL improvements:
rofi::configuration
)configuration/rofibot.hpp
pattern as in atoms)ModuleHandle
for internal representation (which is not just a typedef) and export ModuleId
for external usageOrientation
to be more specific, or move it to a nested namespacedetail
namespacemakeJoint
to be more precise (e.g. makeComponentJoint
)std::vector< int >
exactly match joints in Component
. Maybe use a typedef JointId
or somethingbodies
in Module
can be written as components().subspan( _connectorCount )
. (Similar for connectors
.)component
, body
and connector
, I would like to have an assert
Module::clone
should be there like this - at least make it return a unique_ptr
Rofibot::getModule
method makes no sense (dereferencing and then taking the address). With that said, I feel like returning a reference would be better.Usually after executing action we don’t have to recompute all the matrices.
We should recompute positions of shoes of modules only if they have changed their position.
Right now we are only checking whether there exists edge on the spot. We do not check if the edges are same.
clearComponentPositions
in Module
doesn't invalidate _prepared
in Rofibot
. We should go through all functions that are not const
and check if they invalidate any positions.
Right now only modules that are connected to a program have a topic through which they can be controlled.
And when the program finishes, this topic gets invalidated.
There is often the use case to flash firmware into devices with variable flash size. The esptool.py
can detect the flash size. We could use this inside rflash
to build the correct-size image from the .elf
file and flash it.
Add "C" to the generated configuration
there is a wrong cutout on the floor for the voltage regulator
shaft should provide more clearance for the motor shaft & pinion
The hole for the connector in the motor clamp is small - there are some pin headers that do not fit.
Fix analog MCU pin mismatch
Change sense pull resistors on skirt to around 6k
There is a problem with the SPI & debug connectors. They seem unreliable:
Add bigger input capacitors on the control board
Increase thickness of motor clip - there is enough space and it could improve overall stiffness of the mechanism
Make shaft taller. The reason is the same as in the previous point
Lidar enable resistor is reversed - it makes the chip sleep
Currently, the interrupt handlers are represented by std::function
or funtion2
. This, however, presents a problem when the interrupt handler should be changed inside the interrupt handler. It yields undefined behavior - an object is deleted from within its method.
The solution is to use double-buffered interrupt handlers. Basically introduce a an object that stores two instances and upon writing, it swaps them.
rcfg
to allow compilation without the need to install gazebo librariesA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.