memristor / mep3 Goto Github PK
View Code? Open in Web Editor NEWMemristor Eurobot Platform based on ROS 2
Home Page: https://memristorrobotics.com
License: Apache License 2.0
Memristor Eurobot Platform based on ROS 2
Home Page: https://memristorrobotics.com
License: Apache License 2.0
commit: 2f84846
The cylinders that hold the hat are added but they are not detected by the Lidar. The bounding object and physics have been added to the cylinders. Is there something else needed to be added to the cylinders in order for them to be detected or does the Lidar not publish very small distances? @lukicdarkoo
Make BT Subtrees to do the following actions on the purple side:
Big robot:
Mislim da se nešto poremetilo u poslednja tri commit-a. Proverio sam ponovo commit cdb5aff, strategija se izvršava bez problema. Zanemariti protivničke robote, isto se dešava i kad oni nisu pored.
Should align dynamixel servo driver with webots simulation servo driver.
Ovo treba hitno resiti, previse vremena mi oduzima, nekad treda samo jedan paket da instaliram i moram menjati hotspot-ove. Plus treba nam pristup git repozitorijumu.
Prekucati:
https://github.com/memristor/mep2/blob/master/modules/drivers/Servo.py
u Ros node...
za MX ide drugi protokol
https://emanual.robotis.com/docs/en/dxl/protocol2/
Dusan: Blazic je koristio asyncio, a mislim da ne moras bas tako
Ima ovo da se povezes na CAN:
https://python-can.readthedocs.io/en/master/
Predlazem da napravimo web alternativu Groot-u.
Utvrdili smo da Groot ima dosta problema, neke izmjene bi bile prihvacene od Groot tima, ali se bojim da ne bismo uspjeli da izmijenimo sve sto nam je potrebno. Vjerujem da nije previse kompleksno da reimplementiramo osnovne funkcionalnosti Groot editora.
Web verziju Groot-a bi mogli hostovati na memristorrobotics.com, a interfejs bi interagovao sa robotom preko posebnog, jednostavnog, daemon-a.
Sljedeca biblioteka bi trebalo da je od pomoci:
https://github.com/retejs/rete
https://github.com/cs01/pyxtermjs/blob/master/pyxtermjs/app.py
https://xtermjs.org/
WARNING: RobotMemristor (PROTO) > Shape > Mesh: Too many triangles (27604) in mesh: unable to cast shadows, please reduce the number of triangles below 21845 or set Shape.castShadows to FALSE to disable this warning.
Veoma je mala sansa, ali ipak je moguce da se desi restart kretacke ploce tokom rada.
Ponekad, RPP krene bas dosta da osciluje. Dodacu primjer koji se moze reprodukovati kasnije.
Potrebno je omogućiti slanje komandi sa računara preko CAN-a na Dynamixel aktuatore. Imamo primer koda koji je radio unutar mep2.
Skrenuo bih pažnju na problem koji je postojao tad: ukoliko se pošalje nekoliko komandi zaredom ka više servoa (pokrenuti 3-4 servoa istovremeno) desi se da neki ne odreaguje. Primitivno rešenje koje je korišćeno jeste ubacivanje malog sleep-a između komandi ka servoima.
Nije isključeno da je problem u firmveru aktuatorske ploče. Moguće je da se prijemni FIFO CAN kontrolera na aktuatorskoj prepuni. Treba proveriti i da li svi servoi imaju podesenu istu vrednost Response Delay Time
.
Treba da implementiramo drajver za Dynamixel servoe preko ros2_control umjesto #68. Odlucili smo se za #68 zbog nedostataka u trenutnoj implementaciji JointTrajectoryController (npr. timeout se ne moze definisati na nivou akcije).
Takodje, vjerovatno bi bilo dobro izmijeniti prilagodnu da mozemo povezati Dynamixel servoe direktno na Raspberry Pi.
Additional info about the problem can be found on this link.
We need to find a way to tell the PnP algorithm that the z axis is always faced up, in order to minimize the rotation error.
Also, it would be nice if we could tell the algorithm that the z axis distance from the world frame (e.g. ArUco tag no. 42) is always 510 mm, in order to minimize the translation error.
Vrednosti treba da budu:
orientation -0.33 0.33 1 1.67
position 0 -4.2 3.5
umesto:
orientation -0.5773502691896258 0.5773502691896258 0.5773502691896258 2.0944
position 0 0 10
@angstrem98
Napravili smo prvu strategiju pomoću komande PreciseNavigateToAction, međutim ta akcija se vrti više nego što bi trebalo. Molim te uđi u commit e732ccd, i pokreni sledeće komande:
ros2 launch mep3_bringup simulation_launch.py
ros2 run mep3_behavior_tree mep3_behavior_tree first_strategy --ros-args -r __ns:=/big
Potrebno je pokernuti LCD iz ROS-a i obezbediti mehanizam za dodavanje bodova servis/akcija + odgovarajući BT čvor.
Cilj je napraviti sistemske testovi koji pokrecu simulaciju i provjeravaju poziciju elemenata (recimo robota) nakon izvrsene komande (recimo cmd_vel). Svi testovi treba da se izvrsavaju u CI na svaki komit.
CI for ROS:
https://github.com/ros-industrial/industrial_ci
colcon build
colcon test
Za brži rad u terminalu predlažem da dodamo sledeće alias-e u ~/.bashrc
razvojnog okruženja:
cb
colcon build --symlink-install
rr
rm -rf ~/ros2_ws/install/ ~/ros2_ws/build/
s
source ~/ros2_ws/install/local_setup.bash
sim
ros2 launch mep3_simulation simulation_launch.py
br
ros2 launch mep3_bringup simulation_launch.py
rv
ros2 launch mep3_bringup rviz_launch.py
Ako imate još neku ideju, pišite u komentarima 🙃
Pored praćenja protivničkih robota LIDAR-om, dobro bi bilo i da pratimo diskove kamerom kako ih pri kretanju robot ne bi gurao.
Treba da integrisemo Navigation2 paket:
https://navigation.ros.org/
Primjer:
https://github.com/cyberbotics/webots_ros2/tree/master/webots_ros2_tiago
Ovo mozemo poceti odmah nakon #19
Reference:
This will be a basic ROS 2 integration, we need to expose only cmd_vel
(Twist) and odom
(Odometry) topics. It will allow us to command the robot and read the robot's position obtained through the wheel odometry.
The webots_ros2
package comes with a webots_ros2_control
package that integrates ros2_control
. Thanks to the ros2_control
we can spin a diffdrive_controller
node that will automatically expose necessary topics.
Reference:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
Example:
If can0
is not up, RCLCPP_FATAL log error message is shown, but we should somehow kill everything since motion is not going to work.
Predložio bih da za sada, po defaultu i kamera i protivnički roboti budu isključeni kako bi se dodatni fičeri mogli lakše ubacivati i testirati (trenutno moramo ručno da isključimo kontrolere kad nešto novo radimo).
Izvući maksimalnu precznost RPP kontrolera.
/home/filip/galactic_ws/src/mep3/mep3_behavior_tree/include/mep3_behavior_tree/team_color_strategy_mirror.hpp:207:22: error: ‘static std::string mep3_behavior_tree::StrategyMirror::strip_server_name(const string&)’ cannot be overloaded with ‘static std::string mep3_behavior_tree::StrategyMirror::strip_server_name(const string&)’
Trenutna implementacija NavigateToAction
akcije ne može da se halt-uje.
Test stablo za verifikaciju rešenja je na slici ispod. Robot treba da se zaustavi nakon 5 sekundi i da se tada ispiše
[ERROR] [ <timestamp> ] [behavior_tree_ros_node]: Halted the action
Cilj da izbjegnemo manualno kombinovanje <Navigation/>
i <PreciseNavigate/>
vec da to kontroler sam radi. Primitive, kao sto su okreni se u mjestu i idi naprijed, mozemo definisati u behavior_server
(msm da vec postoji sve sto nam je potrebno)
Imam problem sa učitavanjem statičkih transformacija terena u robot detection node, ako pokrenem:
ros2 run mep3_localization static_broadcaster
ros2 run mep3_localization robot_detection
Trebalo bi da se transformacije između kamere, mape i markera 42 učitaju u tf2 stablo, što se i vizualizuje u RViz-u i prikazuje preko komande npr. ros2 run tf2_ros tf2_echo map camera_static
, kao i da se učitaju u robot detection node, ali se kod ovde i dalje blokira:
mep3/mep3_localization/mep3_localization/robot_detection.py
Lines 70 to 74 in afc3e84
Nije nešto suštinski bitno, mogu se uneti transformacije ručno u kod, ali mi ovo deluje kao elegantnije rešenje.
Bacite pogled na excavation squares. Za sad koliko vidim, ostala su 2 problema da se reše:
Obezbediti raspberry za drugog robota i pripremiti SD kartice.
Potrebno je obezbediti komunikaciju sa senzorskom pločom i prikupiti podatke sa fotoelektričnih senzora.
Postoji poruka sensor_msgs/Range
i podržava naš tip senzora (fiksna distanca). Uvezivanje sa nav2
paketom je jednostavno pomoću range_layer
-a.
Sam podatak sa senzora prethodno treba obraditi, slično lidaru, da se ne detektuju predmeti van stola i statičke prepreka kao što je toranj.
Mehanika se malo menja i ruke ce se podizati gore-dole pomocu Lynxmotion HT1 servoa.
Za ovakve situacije name treba PreciseNavigateToAction:
ali postoji mogucnost da nam se pojavi protivnik.
Moj prijedlog (mislim da je i @angstrem98 spominjao) je da napravimo subtree koji ce definisati ponasanje robota kada IR senzor detektuje nesto ispred robota. Recimo, robot moze u tom slucaju da stane, saceka 2s, ako i dalje postoji onda fejluje.
Trenutno postoji problem sa senkama, previše utiču na sliku, treba dodati smisleno osvetljenje...
@lukicdarkoo dao dobru ideju, da na slučajan način generišemo osvetljenje, simulirajući i npr okidanje blica, kamermana koji snima s uključenim svetlom, sunce pod uglom i slično.
A algoritme praviti da budu otporni na to.
Starting >>> mep3_navigation
--- stderr: mep3_navigation
CMake Error at CMakeLists.txt:23 (find_package):
By not providing "Findnav2_core.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"nav2_core", but CMake did not find one.
Could not find a package configuration file provided by "nav2_core" with
any of the following names:
nav2_coreConfig.cmake
nav2_core-config.cmake
Add the installation prefix of "nav2_core" to CMAKE_PREFIX_PATH or set
"nav2_core_DIR" to a directory containing one of the above files. If
"nav2_core" provides a separate development package or SDK, be sure it has
been installed.
make: *** [Makefile:326: cmake_check_build_system] Error 1
__
Treba nam map -> odom
TF umjesto odom -> base_link
u distance-angle regulatoru
Pokretanje aplikacije na Raspberry Pi je sporo, moramo ubrzati. Vjerujem da brzinu pokretanje aplikacije najvise utice broj ROS cvorova, broj akcionih servera, Python implementacije i broj procesa. Evo prijedloga:
ROS cvorovi | Akcioni serveri | Python | Procesi | Ostalo | |
---|---|---|---|---|---|
Obrisati distance angle kontroler (integrisati u RPP) |
-1 | -1 | -1 | ||
Integrisati laser scan republisher u costmap plugin | -1 | -1 | smanjuje se slanje velikih poruka | ||
Integrisati Dynamixel drajver u ros2_control | -1 | -7 | -1 | ||
Nav2 composition | -6 | ||||
Integrisati cinc drajver u ros2_control | -1 | -1 | -1 | ||
Integrisati drajver za pumpe u ros2_control | -1 | -4 | -1 | -1 | |
Prebaciti LCD drajver u C++ | -1 | ||||
Ukupno | -5 | -12 | -3 | -11 |
(pretpostavka da robot ima 8 Dynamixel motora i 4 vakum pumpe)
(pumpe prebaciti u servise)
Dodatno, uraditi review nav2 plugina koje koristimo:
mep3/mep3_navigation/params/nav2_params_big.yaml
Lines 16 to 47 in 8092a04
Dosta tih plugina vjerujem da ne koristimo, a potencijalno kreiraju akcione klijente/servere. Recimo, Spin
plugin je ucitan i kreira akcioni server, a ne koristimo ga.
Dodati model diska sa promenjivim ArUco markerima
A 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.