{"id":28303,"library":"standardbots","title":"Standard Bots RO1 Robotics API","description":"Python client for interacting with Standard Bots RO1 robotic arms. Provides high-level controls for movement, gripper actions, and system management. Version 2.x uses a modern async API; breaking changes from 1.x include removal of synchronous methods and renamed endpoints.","status":"active","version":"2.20260123.93","language":"python","source_language":"en","source_url":"https://pypi.org/project/standardbots/","tags":["robotics","api","async","standard-bots","ro1"],"install":[{"cmd":"pip install standardbots","lang":"bash","label":"Install latest"}],"dependencies":[{"reason":"Async HTTP client used internally","package":"aiohttp","optional":false},{"reason":"For Python 3.7 compatibility","package":"typing_extensions","optional":false}],"imports":[{"note":"Old 1.x API used class name 'StandardBots'","wrong":"import standardbots\nbot = standardbots.StandardBots()","symbol":"StandardBot","correct":"from standardbots import StandardBot"},{"note":"Exception classes moved to exceptions module in 2.x","wrong":"from standardbots import RobotConnectionError","symbol":"RobotConnectionError","correct":"from standardbots.exceptions import RobotConnectionError"}],"quickstart":{"code":"import asyncio\nfrom standardbots import StandardBot\n\nasync def main():\n    api_key = os.environ.get('STANDARDBOT_API_KEY', '')\n    robot = StandardBot(api_key=api_key, robot_id='your-robot-id')\n    await robot.connect()\n    await robot.move_to(x=0.3, y=0.0, z=0.4)\n    await robot.gripper.open()\n    await robot.disconnect()\n\nasyncio.run(main())","lang":"python","description":"Async quickstart: connect, move, grip, disconnect."},"warnings":[{"fix":"Wrap code in async def and use await for all robot methods.","message":"Version 2.x has async API only; synchronous methods removed. All calls require await.","severity":"breaking","affected_versions":"<2.0.0"},{"fix":"Use 'from standardbots import StandardBot' instead of 'import standardbots' and accessing class.","message":"Class renamed from StandardBots to StandardBot. Old import path fails.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Set env var or pass api_key explicitly: StandardBot(api_key='...')","message":"API key must be set via environment variable STANDARDBOT_API_KEY or passed as argument; constructor does not auto-read from .env.","severity":"gotcha","affected_versions":"all"},{"fix":"Verify coordinate frame in official docs; test with small movements first.","message":"Coordinate values are in meters and radians; axis orientation may differ from other robot SDKs.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Use direct import: from standardbots import StandardBot","cause":"Old import style from 1.x (e.g., 'import standardbots' then 'standardbots.StandardBot').","error":"AttributeError: module 'standardbots' has no attribute 'StandardBot'"},{"fix":"Always use async/await with asyncio.run() at top level.","cause":"Creating StandardBot in sync code without asyncio.run, causing event loop conflicts.","error":"RuntimeError: Task <Task pending ...> attached to a different loop"},{"fix":"Verify robot IP address and network connectivity. Check robot status via web interface.","cause":"Robot not reachable; IP/port wrong, or robot not powered on and connected to network.","error":"standardbots.exceptions.RobotConnectionError: Connection refused"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}