![Antons Mindstorms](/img/default-banner.jpg)
- 173
- 1 125 178
Antons Mindstorms
Netherlands
Приєднався 2 жов 2008
Check out the creations I make with Lego Mindstorms. I love to do remote controlled stuff with bluetooth.
Immersive FPV Pod Race - SPIKE vs Robot Inventor!
Dive into the thrilling world of FPV (First Person View) racing using LEGO SPIKE Prime and Robot Inventor! In this project, I built two pod racers: one with LEGO SPIKE Prime and one with LEGO MINDSTORMS Robot Inventor. I made them so that you can remote control them with a PlayStation gamepad or Xbox controller. Then I added cameras to the pods, and I let the cameras stream video over wifi to my smartphone. Finally, I put my smartphone in a DroneMask2 google for a full immersive experience!
💬 Please like and ask any questions you have in the comments!
Here’s the list of materials
- You can build a pod racer with either a LEGO SPIKE Prime kit or a Robot Inventor Kit.
- For the video streaming capability, an OpenMV Came H7 Plus with Wifi Shield or an OpenMV RT1060 with built-in wifi is essential.
- You’ll also need a spike-openmv board to supply the camera with power from the hub: www.antonsmindstorms.com/product/spike-smart-camera-breakout-board-spike-openmv/
- A gamepad like Xbox Series X/S controller linked via Bluetooth.
- Optionally, if you’re using other types of game pads, an lms-esp32 module will be necessary: www.antonsmindstorms.com/product/wifi-python-esp32-board-for-mindstorms/
- To view the live video feed, use a smartphone paired with DroneMask2 goggles for an immersive experience: dronemask.com/?aff=113
--- Links ---
Full project description on my blog
👉 www.antonsmindstorms.com/?p=8744
Get the T-Shirt 👕 here:
👉 www.antonsmindstorms.com/product-category/t-shirts/
Support 🙏 my work:
👉 www.patreon.com/antonsmindstorms/
For complete building instructions 📄 and in-depth articles go to:
👉 www.antonsmindstorms.com
--- Chapters ---
00:00:00 Introduction
00:00:58 Unboxing the Dronemask2
00:04:47 Remote control Pod Racer Setup with gamepad
00:05:21 Head-on two person FPV Pod Race!
00:07:11 How to create your own LEGO FPV Pod Racers
💬 Please like and ask any questions you have in the comments!
Here’s the list of materials
- You can build a pod racer with either a LEGO SPIKE Prime kit or a Robot Inventor Kit.
- For the video streaming capability, an OpenMV Came H7 Plus with Wifi Shield or an OpenMV RT1060 with built-in wifi is essential.
- You’ll also need a spike-openmv board to supply the camera with power from the hub: www.antonsmindstorms.com/product/spike-smart-camera-breakout-board-spike-openmv/
- A gamepad like Xbox Series X/S controller linked via Bluetooth.
- Optionally, if you’re using other types of game pads, an lms-esp32 module will be necessary: www.antonsmindstorms.com/product/wifi-python-esp32-board-for-mindstorms/
- To view the live video feed, use a smartphone paired with DroneMask2 goggles for an immersive experience: dronemask.com/?aff=113
--- Links ---
Full project description on my blog
👉 www.antonsmindstorms.com/?p=8744
Get the T-Shirt 👕 here:
👉 www.antonsmindstorms.com/product-category/t-shirts/
Support 🙏 my work:
👉 www.patreon.com/antonsmindstorms/
For complete building instructions 📄 and in-depth articles go to:
👉 www.antonsmindstorms.com
--- Chapters ---
00:00:00 Introduction
00:00:58 Unboxing the Dronemask2
00:04:47 Remote control Pod Racer Setup with gamepad
00:05:21 Head-on two person FPV Pod Race!
00:07:11 How to create your own LEGO FPV Pod Racers
Переглядів: 450
Відео
Pantasy Astro Boy Set 86203 review and speed build
Переглядів 218Місяць тому
Join Anton as he reviews the incredible brick model of Astro Boy! Discover unique features like expressive eyes and arm rockets that bring this beloved character to life. Perfect for fans of all ages who love anime and creative building. Don't forget to subscribe for more awesome content! This model is NOT LEGO. Pantasy offered me a set to review, and I chose to review Astro Boy because I reall...
Four-legged Servo spider with MINDSTORMS Robot Inventor
Переглядів 1 тис.Місяць тому
This LEGO spider has 4 legs, with two joints per leg. It walks forward, turns, and makes curves. You can remote control it with a gamepad or put it in autonomous mode. I programmed the legs with keyframe animation that I transform live. In a next version I want to use inverse kinematics and three-joint-legs. To build it, you need: - 1 set of 51515 LEGO Robot Inventor - 4 geekservo 2kg (I ordere...
Compare performance of Speed vs Torque Vectoring for a rack steering SPIKE Prime Hot Rod
Переглядів 630Місяць тому
A four-wheel car needs a differential gear to allow the inside wheel to turn slower in a curve. If you don't use that gear, but you put a motor on each wheel, you need to change speed or power to accommodate turns. Here's a video comparing both. Bonus: I also compared an Ackerman steering setup for the rack steering. 💬 Please like and ask any questions you have in the comments! Links The car us...
Interactive LEGO Star Wars Emperor's Throne Lightsaber Fighting Game with EV3!
Переглядів 3972 місяці тому
Join Anton from Anton's Mindstorms as he transforms the classic LEGO Emperor's Throne Room diorama into an epic interactive lightsaber duel game! Perfect for Star Wars fans and MINDSTORMS enthusiasts alike. Discover how simple yet critical timing can lead you to victory or defeat in this two-player battle. Get inspired by our modifications using mostly retail EV3 set parts along with some addit...
Mastering Turns: Build a SPIKE Prime Car with an Electronic Differential
Переглядів 8202 місяці тому
Join Anton from 'Anton's Mindstorms' as he unveils the secrets behind building a SPIKE Prime car equipped with an electronic differential - just like modern electric cars! Discover how adjusting rear wheel speeds proportional to your turning radius can significantly enhance handling. Dive deep into simple mathematics behind this genius mechanism and learn how you can program your very own LEGO ...
How To Add Blinkers & Brake Lights To Your SPIKE Car!
Переглядів 8773 місяці тому
Dive into an electrifying DIY project with Anton as he guides you through creating a SPIKE Prime remote control car equipped with working LED lights! Perfect for LEGO enthusiasts and budding engineers alike. Learn how to use Python scripting on SPIKE3 alongside an LMS-ESP32 board for full control over movement and lighting effects. 💬 Please like and ask any questions you have in the comments! C...
LEGO MINDSTORMS conversion of the Mars Rover Perseverance
Переглядів 3,1 тис.5 місяців тому
🚀🤖🛠️ Join me as I transform the LEGO Technic Perseverance Rover into a fully programmable robotic marvel using MINDSTORMS Robot Inventor electronics. You can even remote controle with a second hub. This isn't just a build; it's a complete reimagining that blends the art of LEGO with the fascinating world of robotics. 🌌 In this video, we delve into: - The step-by-step process of building the LEG...
FPV Drone car with LEGO MINDSTORMS and DroneMask2
Переглядів 7105 місяців тому
In this video I show how to drive your LEGO car like an FPV (First Person View) drone car. You can remote control it with a Technic hub. This has better tactile feedback than the LEGO apps. With the OpenMV camera, I created a lagless video stream over wifi. 💬 Please like and ask any questions you have in the comments! Chapters 00:00:00 FPV LEGO Drone car driving with wifi streaming video 00:00:...
MIDI Guitar over Bluetooth with LEGO MINDSTORMS
Переглядів 1,1 тис.7 місяців тому
🎸🤖🎶 Dive into the fascinating world of LEGO and music with our latest creation: a LEGO MINDSTORMS MIDI Guitar! This isn't just any guitar; it's a programmable, robotic musical instrument that bridges the gap between LEGO building and music production. Inspired by Daniele Benedetelli's design from his 'MINDSTORMS Robot Inventor Activity Book', we've taken it to the next level with some cool modi...
LEGO Spike Prime robot hates balls 🤣
Переглядів 1,5 тис.9 місяців тому
OpenMV powered spike prime robot looks for red balls in the environment and tries to kick them. how does it know the ball is close enough 🤔. #ai #computervision #lego #legorobotics #micropython #openmv
How to connect directly to a PS4 gamepad with LEGO MINDSTORMS Robot Inventor
Переглядів 6 тис.2 роки тому
How to connect directly to a PS4 gamepad with LEGO MINDSTORMS Robot Inventor
Animated active Neopixel lighting kit for Technic Extreme Off-roader
Переглядів 9762 роки тому
Animated active Neopixel lighting kit for Technic Extreme Off-roader
MINDSTORMS Robot Inventor Mecanum Wheels drives in EVERY Direction
Переглядів 15 тис.2 роки тому
MINDSTORMS Robot Inventor Mecanum Wheels drives in EVERY Direction
Python programmed Robot Snake with LEGO MINDSTORMS Robot Inventor
Переглядів 4 тис.2 роки тому
Python programmed Robot Snake with LEGO MINDSTORMS Robot Inventor
130cm Robot Snake with LEGO MINDSTORMS Robot Inventor: obstacle avoidance and programming
Переглядів 9 тис.2 роки тому
130cm Robot Snake with LEGO MINDSTORMS Robot Inventor: obstacle avoidance and programming
OpenMV vs. Huskylens: which one to buy with LEGO MINDSTORMS or SPIKE
Переглядів 10 тис.2 роки тому
OpenMV vs. Huskylens: which one to buy with LEGO MINDSTORMS or SPIKE
How to Remote Control Robot Inventor with EV3
Переглядів 3,9 тис.2 роки тому
How to Remote Control Robot Inventor with EV3
With and without differential: turning performance and explanation
Переглядів 9 тис.2 роки тому
With and without differential: turning performance and explanation
Remote control LEGO MINDSTORMS EV3 with a Robot Inventor transmitter
Переглядів 2,7 тис.2 роки тому
Remote control LEGO MINDSTORMS EV3 with a Robot Inventor transmitter
How to remote control SPIKE Prime with LEGO MINDSTORMS EV3
Переглядів 9 тис.2 роки тому
How to remote control SPIKE Prime with LEGO MINDSTORMS EV3
Python brick to brick Remote Control with SPIKE Prime and Robot Inventor
Переглядів 7 тис.2 роки тому
Python brick to brick Remote Control with SPIKE Prime and Robot Inventor
How to solder the Distance Sensor Breakout board for connecting electronics to MINDSTORMS
Переглядів 1,1 тис.3 роки тому
How to solder the Distance Sensor Breakout board for connecting electronics to MINDSTORMS
How to solder the LMS-ESP-wifi-i2c board for connecting third party electronics to MINDSTORMS
Переглядів 6903 роки тому
How to solder the LMS-ESP-wifi-i2c board for connecting third party electronics to MINDSTORMS
How to solder an LMS-uart-onvertor 1.0 board
Переглядів 7943 роки тому
How to solder an LMS-uart-onvertor 1.0 board
Ultra-fast SPIKE wall follower robot with laser distance sensor in word blocks.
Переглядів 4,7 тис.3 роки тому
Ultra-fast SPIKE wall follower robot with laser distance sensor in word blocks.
One-kit Rubik's Cube Solver with LEGO MINDSTORMS Robot Inventor
Переглядів 44 тис.3 роки тому
One-kit Rubik's Cube Solver with LEGO MINDSTORMS Robot Inventor
Distance sensor breakout board for SPIKE Prime and MINDSTORMS Robot Inventor
Переглядів 2,2 тис.3 роки тому
Distance sensor breakout board for SPIKE Prime and MINDSTORMS Robot Inventor
Fun with a Neopixel ws2812 RGB led strip on the SPIKE prime
Переглядів 1,2 тис.3 роки тому
Fun with a Neopixel ws2812 RGB led strip on the SPIKE prime
Interview with Mr Hino, the famous robotics teacher
Переглядів 1,3 тис.3 роки тому
Interview with Mr Hino, the famous robotics teacher
Hi Anton, i bought your new version of ESP board. I managed to load up the 3 python programs into the ESP board and uartremote into the Spike Hub accordingly using thornny app. From the thornny app, i can see the lase sensor is reading, but when i coonect to my spike hub, i can see the sensor detected but no distance was reading - shown only 200cm. Any help is much appreciated. (I was trying to work this on Spike scratch program btw)
This was very informational and helped me to build my car. However with me being 11 I don't understand. I just know it makes a very successful car.
hmmm china...
Hi, my primary hub is connected to laptop and sends signal to two secondary hubs. Both the secondary hubs are ON. If they are idle for around 3 mins, then they automatically Switch OFF. How to avoid this
Really cool idea!
Great job!!! I love the fact that you are actually looking at the minifigure's nape! This makes me think about getting an updated version of the openMV camera...
It was super cool racing
Nice even I am a lego mindstorms fan and have my own channel. Tech Booster
😯 this is incredi-ball
This guy is better than my math teacher to explaine
This guy is a genius
Djjdnndjjsjhsjj
😮
I'm trying to connect my SPIKE using VScode on Windows. I can't find the Windows equivalent of /dev. I have looked in C:/ and don't see anything like a Devices folder (even with hidden items shown). So how do I do this with Windows?
Use COM1, COM2 etc...
@@AntonsMindstorms I can't find anything on Google about the directory of the COM thingies. I have dir C:/<something, something, something>/COM14, do you have any idea what the <something, something, something> is?
@@blakec8723 No Idea. I use Mac mostly. Google 'COM port windows'
@@AntonsMindstorms Okay I got them to connect, I just haven't figured out how to do the screen thing. I can't find a Windows equivalent. I have also heard of a LInux equivalent tmux, is this compatible with Windows?
@@blakec8723 There is a windows subsystem for linux. WSL, I believe. Does that work for you?
Very cool. I had the Mindstorms NXT and I could never have enough motors :D
Yeah, then EV3 had 4, and now you can do 8!
In my universe spiders have 8 legs, but cool anyway 😎 Thanks for sharing 👍🏼
Makes me think of the spider tank from ghost in the shell.
Yes, that is an awesome tank!
This unlocks many possibilities for building robots that require more than 6 motors and only 1 hub. Thanks Anton for the amazing work ❤
thats very impressive
I love spike but i dont think my parents wil let me
Show them some videos!
Anton, thank you for continuing to inspire us with great projects. Do you know if your Python code on the EV3 will still work with the updated Spike hub firmware that was forced to install when we upgraded to the Spike App 3?
I've been successful setting up the EV3 with Pybricks and the code but with an updated Spike hub the EV3 Bluetooth Start Scan never sees the Spike hub. So sad LEGO changed the Spike Bluetooth way to connect. Does anyone know of a way around this for EV3s to see updated Spike hubs?
Thanks for sharing 👍
To really test the ideas against each other you need to gear up the drive, so that you actually CAN break traction on the wheels while cornering. You are right about the observation that the lower performance of speed controlled vehicle is due to the control reserve, but also very right that you can't really give up that margin while retaining speed control. Using torque vectoring effectively gives you that edge just because it's stable at 100% duty cycle on the outside wheel. If you manage to get that vehicle fast enough so that it slides out in the corners, you are likely to observe a bigger edge towards torque vectoring, as it will keep the cornering forces of the front wheels useful. Thanks for the update! You may mention next time, where the input came from 😛
I tuned the Torque Vectoring algorithm to edge of understeer. Interesting fact: with Ackerman I need less power reduction on the inside wheel (-40%) than with a parallel rack (-60%). So Ackerman not only makes tighter turns, it also gets more out of the cornering wheels! It is really difficult to make LEGO wheels break traction. I've only had success with rubberless wheels and rotocasters.
@@AntonsMindstorms you may try with the old technic wheels with integrated tyres, the ones from the universal sets, that have round axle holes (so you need the belt wheels put inside the rims to drive them). They have quite poor traction, but still better than blank plastic. I'll have to dig those up and do some tests. Btw: to check traction in corners you'd usually keep the steering angle constant and keep increasing speed until you break traction. You should be able to actually see the limit approaching by watching the gyro signal, but flying out of the corner is just as good an indicator - at least as long, as toy cars are concerned 🤪
@@MarekLewandowski_EE High-powered RC cars use a diff gear and a single motor and a gyro for drift control. It also looks cool, but I guess it's different because the gyro widgets seem to change your steering angle. ua-cam.com/video/sx1CNSHLc10/v-deo.htmlsi=4s7SkQmFkubJeaxV&t=248
@@AntonsMindstorms that's a different pair of socks, that's a sort of a mistuned ABS/ESP unit. What I mean is, when you circle faster and faster, at first your raw hub gyro signal should show a constant, slowly increasing yaw rate, corresponding to your angular speed around the loop. As you approach the point of loss of traction this signal may start having some unsteadiness to it, as the wheels start to slip on bumps but catch on flats. I haven't tried it with Spike hub yet, so I'm not sure if this is going to be visible
i want to buy, breakout board, but i cant. Can you shipping to capital of Kazakhstan - Astana?
I added Kazakhstan as a destination. Thanks for asking.
Thank you 😊@@AntonsMindstorms
I bought from your website, I received a message in the mail, but there is no information about the order on your website. My order is number 8613
@@Erlan004 It's best to reply to that message you received, then I can track and send you an update.
More info about the product?
I use this www.antonsmindstorms.com/product/wifi-python-esp32-board-for-mindstorms/ and a generic vl53L0x laser rangefinder. You can use it like a normal distance sensor.
Very cool, I'd like to order few, but can not find the product on your page, any place to find it? Thank you!
It is here: www.antonsmindstorms.com/product/spike-smart-camera-breakout-board-spike-openmv/
This is an official reply from LEGO custormers service: "Unfortunately, it is true that the Mindstorm app will no longer be available for download by August 2024 at the latest and support will unfortunately be discontinued sooner or later. " I tried using the Legacy App with my 51515 Hub, but it doesn't work with my Computer setup. The only thing that seems to work is PyBricks, but the free version only allows you to use Python and it is not as user-friendly right now. I am really disappointed that LEGO never intended to continue support of the Mindstorms brick even though it only seems to be a question of a firmware update.
Anton, thank you for this incredible insight. What would happen if O directly connected a UART TOF sensor to the RX/TX pins of the Spike breakout board? How would I tell the hub that a Ultrasonic sensor was connected?
The hub only understands a very specific LEGO UART protocol. That's why you need the ESP board in between. We have new version called LMS-ESP32, which also features votlage conversion! www.antonsmindstorms.com/product/wifi-python-esp32-board-for-mindstorms/
Need some information. I have seen many projects wherein two spike prime smart hubs can be connected together, but can can we also connect 2 smart hubs from Robot Inventor 51515 sets together and use it in one project. E.g. In Lego WeDo we can connect 3 smart hubs together.
Yes, you can. With one central and two peripherals. My snake video does that: ua-cam.com/video/03hD9RofsG8/v-deo.html
@@AntonsMindstorms thanks a lot. Very helpful
@@AntonsMindstorms can we also connect robot inventor 51515 hub and Spike prime hub together and use in one project
@@shyamsaraf5739 Yes, if both run pybricks
Code isn’t working
Go to mindcuber.com
do you know how to program a 4 motor 2 wheel sumobot?
What have you tried? You can join my patreon: www.patreon.com/antonsmindstorms
super!!!
Nice, another video with the detail about the pins used to link the spike prime port to the board and also what strings do they change, and how these are "translated" to the led strip could be great. I guess with another IDE it is possible to expand the integration with other peripheral items. I also loved the math introduction, before starting to code, a goob example of a steam educational practice.
Hi Anton. It's a nice video, but it's not right... It's a complex thing, but I'll try to go step by step: The front wheels (even if you build the car right, i.e. with Ackerman steering or similar, so that the inside wheel turns more into the turn) do not travel on tangents of their circles. The car needs to be turned around, but due to inertia it 'wants' to keep moving straight, so if the front wheels are to be useful, i.e. apply sideways force to turn the vehicle and not just support the weight of the front bumper, they will 'understeer' and have a sideways 'walk'. By how much? Depends on speed, surface, etc. Since you cannot predict this exactly, you cannot use speeds as set-points for the rear axle motors. What you want is not speed vectoring, but torque vectoring, i.e. you want to apply more torque to the outside wheel to actually result in net torque around the vertical vehicle axis, that will be part of the torque resulting from the front wheels being turned into the curve. Ideally these two torques should be proportion of front vs rear grip, at Spike Prime speeds it's going to be weight distribution between front and back.
You are right. However, if you don't do anything, the car doesn’t turn, and this system is a simple way to have some fun with the car without a differential gearbox. What programming approach do you propose instead? Which inputs for the control system?
@@AntonsMindstorms generally I'd experiment with two approaches: approach 1, slightly unorthodox but should be easy enough to code and might work satisfactorily, would be to run the outer motor at a given set speed and the inner motor at a percentage (below 100%) of the actual reported outer motor power, the percentage being smaller the tighter the radius of turn is. This way we use the speed controller from Spike Prime (which gives the power as output value, the 'power' being really the duty cycle of the motor power stage) and just slave the inner motor power to the outer motor. The second approach would be to make one's own speed controller and distribute its output between the left and right wheel duty cycle based on a factor proportional to the turn rate, i.e. if the requested ducy is 60%, split it 60%+x and 60%-x with x = f(steering angle). A good first approach is to assume you want the same total force at each wheel, assuming all wheels are identical and the weight is evenly distributed. The front wheels will only see lateral forces, the driven wheels will almost only see longitudinal forces with some lateral forces at high speed (likely irrelevant for Spike speed). Assume maximum usable force transfer is at 2% wheel slip, since we have full rubber wheels with toroidal cross section it's same sideways as in driving direction. From there you can take the math to find the maximum cornering rate at any given speed 😁 The real torque vectoring in a vehicle is linked to the esp (electronic stability control) module and takes feedback from the vehicle IMU to compare the commanded turn rate (steering wheel input) and the actual turn rate (gyro reported) and the estimated vehicle grip limits and from there it decides what to do - use driven wheels torque, selective braking etc. Much more complex thing and very proprietary.
@@MarekLewandowski_EE...or maybe I could extend the calculated radius by a few percent to give the front wheels something to 'do'?
@@AntonsMindstorms it depends whether you want to teach about how it should be done or if you want a hack. The way you have coded it works, but it's a hack and the explanation in your video doesn't touch on the topic of why and how twin drive can actually improve handling. There are many solutions that work on a LEGO scale, there are many 'wrong' solutions that work for specific reasons better than 'right' solutions even on real vehicle scales (karts not having diffs, some F1 cars having reverse Ackermann steering with outer wheel turning more into the curve etc.), so it's really about what educational value you want to put in.
Woah! It never occurred to me that karts don't have diffs. That's why they say it helps to lean out in a turn!
I... can't believe it, I'm trying to make a BuWizz-powered technic car and was struggling with this exact problem! Thanks so much for posting this video!
Heh! Do you have a video of your car?
can you control in scratch prime too?
Yes, but you need a LOT of blocks.
@@AntonsMindstorms could you do a video on woed block version?
@@AntonsMindstorms do you have a 4 motor on 2 wheel, 2 eye ev3 program for sumobot?
@@drjuit no, it's been a while since played sumo.
@@AntonsMindstorms I havent been able to make it work I have been trying it for 2 weeks, clould you please help me out? I can pay for your trouble
Papa!
Really cool! I would just suggest one change to the way the color matrix is programmed. It would be nice to turn the mapping around. So you would pick for each of the 12 LEDs which spot on the color matrix corresponds to that LED. That would allow to map more than one LED to the same spot on the 3x3. This could on one hand simplify your headlights (all could map to the same spot) and also allow to simultaneously light up every LED, even when there are lots more than 9 LEDs connected…
Cool idea! Will do!
Thank you for all you do! :)
Hi, Im big fan I really love your videos❤
I can´t find this app :/
I made it with a free tool, it doesn't work anymore.
We are attempting to run the code, but receive an error check_port: 49 Does anyone have any tips to help us correct this?
nice work. But to learn, we need to know the general plan, and only later dive into details.
can we somehow get the code of how you detect the balls field and robot please
Hi Antons. Nice video that introduced me into LDcad after using studio solely. I know your video is for mindstorms cables but i was doing a drawing for lego boost and noticed that studio parts don't have cables at all and LDcad has cables but apparently, are not flexible. Is it me missing something or is there any unofficial parts for boost motors and sensors that allow cable connection and flex?
I found some parts with flex cables, but only the plug side. Not the motor side.
Hello, good day, I want to ask you that I want to connect 2 more motors to the PS4 controller, what code do you recommend I use since we are doing a school project. I thank you in advance.
I recommend ev3dev pybricks with vs code.
Escuse meee can you make a insrution!
HELP ME !!
[Errno 19] ENODEV While writing pyhuskylens.mpy[Errno 19] ENODEV While opening file for hash check.Traceback (most recent call last): File "install_mpy_robot_tools", line 67, in <module>NameError: name 'hash_check' isn't defined ??????