官网教程:Python Demos — Interbotix X-Series Arms Documentation
系统:Ubuntu20.04,ROS1
相关的硬件编译配置跳过
Python Demos
这些演示展示了使用 Interbotix Python Arm 模块的各种方法(点击链接查看完整的代码文档;还可以查看 interbotix_xs_modules 软件包,以便更好地了解如何使用该模块和其他模块)。简而言之,创建该应用程序接口是为了让几乎没有 ROS 经验的用户也能控制 interbotix_xs_sdk 支持的任何 Interbotix Arm。具体来说,该应用程序接口还允许用户让机械臂摆出所需的末端执行器姿势或遵循笛卡尔轨迹。最后一项功能由现代机器人技术实现: 西北大学创建的现代机器人:机械、规划和控制代码库使最后一项功能成为可能。
要使应用程序接口正常工作,必须将机械臂关节设置为 “位置 ”控制,并将抓手设置为 “PWM ”控制(很方便,这些都是 interbotix_xsarm_control 软件包中的默认配置)。此外,应用程序接口还假定所有臂节电机的驱动模式寄存器都设置为 “基于时间的配置文件”(这也是默认配置)。简而言之,通过这种设置,用户可以非常轻松地自定义手臂从一个姿势到下一个姿势的运动持续时间和平滑度。
Python Arm 模块(位于 interbotix_xs_modules ROS 软件包中)建立在 interbotix_xs_sdk 软件包之上。要熟悉上图中的其他节点,请查看各个软件包的 README。
机器人操纵(robot_manipulation)--一个 ROS 节点(在 “幕后 ”运行),负责接收通过 Python API 输入的命令,并根据需要将数据发布到各种 ROS 主题中。它不是一个典型的 ROS 节点,因为它不能通过 ROS 启动文件启动,也不能使用 rosrun 命令从终端运行。相反,Python 应用程序接口模块包含一个类,该类实例化后,节点就有了生命。程序结束时,该对象被销毁,节点也随之消亡。
Usage
To get started, open up a terminal and type (assuming a WidowX-250 is being launched)…
roslaunch interbotix_xsarm_control xsarm_control.launch robot_model:=wx250s
Then, in another terminal, navigate to this directory and type…
python bartender.py # python3 bartender.py if using ROS Noetic
您应该看到机器人(从虚拟吧台后面)拿起一个虚拟瓶子,旋转使末端执行器朝向相反方向,(在虚拟吧台上)倒一杯虚拟饮料,然后将 “瓶子 ”放下,恢复到睡眠姿势。
其他脚本的工作方式类似,但您必须确保将文件中的机器人名称改为您所拥有的机械臂。如果使用的是较小的机械臂模型(如 PincherX 100),您可能还需要调整指令姿势/轨迹,因为有些姿势/轨迹在物理上可能无法实现。为了方便起见,每个脚本还概述了让机器人移动所需的命令!
注意:
If you want to test out your code first on a simulated arm, make sure to set the use_sim
arg to true like this: (如果想先在模拟臂上测试代码,请确保将 use_sim 参数设置为 true,就像这样:)
roslaunch interbotix_xsarm_control xsarm_control.launch robot_model:=wx250s use_sim:=true
运行该launch文件成功后的显示效果如下:
总结:
要运行一个基于python脚本控制的demo,需要使用如下指令:
roslaunch interbotix_xsarm_control xsarm_control.launch robot_model:=wx250s
launch文件启动无误后,机械臂的灯光应该为彩灯,随后继续:
cd ~/interbotix_ws/src/interbotix_ros_manipulators/interbotix_ros_xsarms/examples/python_demos
python bartender.py
机械臂即可实现运动!
最后给出机械臂的运动控制测试代码:
from interbotix_xs_modules.arm import InterbotixManipulatorXS
import numpy as np
import sysdef main():bot = InterbotixManipulatorXS("wx250s", "arm", "gripper")if (bot.arm.group_info.num_joints < 5):print('This demo requires the robot to have at least 5 joints!')sys.exit()bot.gripper.open()bot.gripper.close()bot.arm.set_ee_pose_components(x=0.3, y=0.0, z=0.3) # 末端位姿控制 bot.arm.set_ee_cartesian_trajectory(x=0.0, y=0.0, z=-0.1) # 相对距离控制# roll横滚, pitch俯仰, yaw偏航 末端执行器的目标姿态(单位通常为弧度)1弧度 ≈ 57.3度。bot.arm.set_ee_cartesian_trajectory(pitch=0.5) bot.arm.set_ee_cartesian_trajectory(pitch=-0.5)bot.arm.set_ee_cartesian_trajectory(roll=0.5) bot.arm.set_ee_cartesian_trajectory(roll=-0.5)bot.arm.set_ee_cartesian_trajectory(yaw=0.5) bot.arm.set_ee_cartesian_trajectory(yaw=-0.5)# bot.arm.set_ee_cartesian_trajectory(roll=0.5, pitch=0.5, yaw=0.5) # bot.arm.set_ee_cartesian_trajectory(roll=-0.5, pitch=-0.5, yaw=-0.5)bot.gripper.open()bot.arm.set_ee_cartesian_trajectory(x=-0.1, y=0.0, z=0.1) # 相对距离控制# bot.arm.set_single_joint_position("waist", np.pi/6.0) # waist腰关节旋转30度 # bot.arm.set_single_joint_position("waist", -np.pi/6.0)# bot.arm.go_to_home_pose()bot.arm.go_to_sleep_pose()if __name__=='__main__':main()
该脚本主要演示了使用Interbotix ROS控制库对机械臂进行一系列操作,包括:
- 初始化机器人对象和检查自由度。
- 控制夹爪的开合。
- 通过绝对位置控制和相对位移控制来设置末端执行器的位置。
- 调整末端执行器的姿态(roll、pitch、yaw),单位为弧度。
- 最后,将机械臂移入安全的休眠位姿。
整个流程可以用于展示机械臂在完成抓取、倒料、放置等任务时的运动规划与执行过程。通过调整各个参数,你可以根据实际应用场景定制机械臂的运动轨迹和动作。