机器人视觉学习记录
1 环境安装
# 1. 创建环境(Python 3.9 兼容性最好)conda create-nrobot_visionpython=3.9-y# 2. 激活环境conda activate robot_vision# 3. 安装 PyBullet 及核心依赖pipinstallpybullet numpy scipy matplotlib opencv-python# 4. 安装 3D 视觉和机器人相关库(Demo 2-4 需要)pipinstallopen3d ikpy# 5. 安装 ROS2 接口(可选,如果后续用 ROS2)# pip install rclpy # 仅当你本地有 ROS2 安装时2 环境测试
importpybulletaspimportpybullet_data physicsClient=p.connect(p.GUI)p.setAdditionalSearchPath(pybullet_data.getDataPath())plane_id=p.loadURDF("plane.urdf")box_id=p.loadURDF("cube.urdf",basePosition=[0,0,1])# 无限循环,直到 GUI 窗口被关闭whilep.isConnected():p.stepSimulation()# 窗口关闭后自动执行到这里print("GUI 已关闭")3 坐标转换
来源:浅析相机相关坐标系的相互转换
针孔相机模型的数学定义(规定像平面位于f)
4 其他数学公式推导
- 图像坐标系到相机坐标系
图像坐标系=>物理坐标系
x = u -u 0 u_0u0= u -c x c_xcx
x/f x f_xfx=X c X_cXc/Z c Z_cZc
X c X_cXc= (u -c x c_xcx)Z c Z_cZc/f x f_xfx
同理:
根据上述图像坐标系和相机坐标系的y轴方向相反,可得:
v f l i p v_{flip}vflip= height-1-v (图像坐标是从0到height-1)
Y c Y_cYc= (v f l i p v_{flip}vflip-c y c_ycy)Z c Z_cZc/f y f_yfy
- 视角场和焦距的关系
由上图得到:f = width / (2 × tan(fov/2))
文档和资料
- pybullet code: https://github.com/bulletphysics/bullet3/tree/master
