Welcome to real_robot’s documentation!¶
RealRobot¶
Real robot interface and utilities for asynchronous real-time deployment. Previously developed to connect with ManiSkill2.
Runs camera capturing and visualization as separate processes to make it closer to using ROS.
Installation¶
From PyPI
python3 -m pip install -U real_robot
For different functionalities, you can install the optional dependencies as follows:
real_robot:SharedObjectsupport only, please only use submodulereal_robot.utils.multiprocessing.real_robot[vis]: support for most visualization, use submodulereal_robot.utils.visualization.real_robot[vis_all]: include support for URDF.real_robot[all]: all optional dependencies (e.g.,pyrealsense2,sapien, etc.).
If you need to install the optional xarm dependency, you must install from GitHub repo
python3 -m pip install -U real_robot[all,xarm]@git+https://github.com/KolinGuo/RealRobot.git
Run unittests with
python3 -m pip install -U pytest
python3 -m pytest [--collect-only]
Calibrated camera poses are stored in real_robot/assets/hec_camera_poses/ and loaded in real_robot/sensors/camera.py.
Helpful Tools¶
Capture Color/Depth/IR images from RS camera, do
python3 -m real_robot.tools.rs_capture
Get detailed device information of connected RealSense device (e.g., supported stream configs, sensor intrinsics, extrinsics between sensors), do
python3 -m real_robot.tools.enumerate_rs_devices > info.log
Convert recorded ROS bag file and save rgb & depth images into .npz, do
python3 -m real_robot.tools.convert_rosbag_to_frames <bag_path>
TODO¶
Add type support for
SharedObject[x]
complex[x]
bytearray[ ]
tuple[ ]
list[ ]
set[ ]
dict[x] [Preliminary] Support only 1
np.ndarrayas values
[x] Add string length? A 8-bytes length of strings is
2**(8*8-1)-1 = 8 exa bytes, which should be enough.[ ] Ensure compound data types works with recursive compound structure
[ ] Add prefixes for all
SharedMemorycreated.[ ] Proper clean up zombie
SharedMemorybefore or after multiprocessing code
Notes¶
To fix an unindexed rosbag recorded from RSDevice, do
apt install -y python3-rosbag
rosbag reindex <bag_path>
Known Issue¶
[ ] When controlling xArm7 with
motion_mode="cartesian_online"andwait=True, sometimes the robot will be stuck indefinitely inwait_move()due toget_state()returns wrong state (i.e., returnsstate=1thinking it’s still in motion). Simple solution can be just to control briefly via UFACTORY Studio to get it unstuck.
Changelog¶
0.1.0
Added Enabled Enabled Enabled Enabled Added a default Allow enabling selected camera streams from Added Change Add Add Rename Rename Switch from Rename all For Enable gripper and set to maximum speed in Remove all Loggers created as global variables (they will be created
at import, which might not be saved under Bugfix in xArm-Python-SDK: enable New features¶
SharedObject to create/mount objects stored in SharedMemoryRSDevice to run as a separate process (now Camera will create
RSDevice as a separate process)RSDevice to record camera streams as a rosbag fileXArm7 to run as a separate process (for streaming robot states)CV2Visualizer and O3DGUIVisualizer to run as separate processes (for visualization)FileHandler to all Logger created through real_robot.utils.logger.get_loggerRSDevice and sensors.camera.Camerasensors.simsense_depth.SimsenseDepth class to generate depth image from stereo IR imagesAPI changes¶
real_robot.agents.xarm
XArm7 parameters for clarity (safety_boundary => safety_boundary_mm, boundary_clip_eps => boundary_clip_mm)get_gripper_position() to get gripper opening width in mm or mgripper_speed parameter to set_action() to control gripper speedreal_robot.utils.visualization.visualizer
Visualizer method show_observation() => show_obs()real_robot.sensors.camera
CameraConfig now accepts a config parameterCameraConfig parameter parent_pose_fn => parent_pose_so_namereal_robot.utils.realsense
RSDevice now accepts device_sn instead of an rs.deviceRSDevice now accepts config as parameter (width, height, fps) instead of rs.configOther changes¶
gym to gymnasiumcontrol_mode by removing pd_ prefix for clarity. No PD controller is used.real_robot.agents.xarm
XArm7 will not clear “Safety Boundary Limit” error automatically in set_action()motion_mode == "position", switch from using set_tool_position() to set_position()reset()REAL_ROBOT_LOG_DIR)wait=True for modes other than position mode
0.0.2
Added motion_mode to XArm7 agent
Added several control_mode:
pd_ee_pos,pd_ee_pose_axangle,pd_ee_delta_pose_axangle,pd_ee_pose_quat,pd_ee_delta_pose_quat