引言
在本项目中,我们将配置AMD Kria™ KR260机器人入门套件来控制Trossen Robotics ReactorX 150机械臂。这个复杂的机械臂使用ROBOTIS DYNAMIXEL伺服器,其中不仅包含电机,还包含微控制器和网络功能。虽然这可以实现机器人应用所需的复杂电机驱动,但也意味着每个伺服器都有多个不同的驱动和控制机制。 通常情况下,对于如此复杂的伺服器和机器人应用,需要进行大量处理来规划和实现机器人运动。
为了与这些机器人交互或对其进行控制,工程师通常使用在Linux上运行的机器人操作系统 (ROS)。使用最多的ROS版本是ROS 2,它更新了ROS框架和工具,使其能适应更多环境,为实时环境提供支持,并使用经过显著更新的API。ROS 2为开发人员提供硬件驱动程序、机器人模型、数据类型等功能,并支持感知和同步定位与建图 (SLAM)。ROS 2还提供一系列有助于系统开发或运行的工具,如三维可视化工具RViz和模拟器Gazebo。
ROS 2是围绕Graph架构构建的;在此架构内,处理在节点中进行,节点可以接收和发布有关节点的数据,如传感器、控制、规划、执行器位置或当前状态。节点通过主题连接到ROS图上,主题是节点可以发布数据和接收信息的通信管道。除多个节点和主题外,单个节点也可以发布服务广告。这些服务只有一个结果,例如捕捉一帧视频、对传感器采样或打开执行器。
兼容DisplayPort™的显示器
USB键盘和鼠标
适用于AMD Kria™ KR260机器人入门套件的Ubuntu Linux发行版 (Ubuntu)
AMD Kria KR260机器人入门套件的入门指南 (AMD)
在本项目中,我们将在AMD Kria™ KR260机器人入门套件上安装Trossen Robotics软件包和ROS 2,以便控制机械臂。
安装Ubuntu
首先下载并安装适用于AMD Kria™ KR260套件的Ubuntu Linux发行版,可在“Resources”部分找到。获得发行版映像后,按照Kria KR260机器人入门套件的入门指南中的说明,将该映像写入到SD卡中。
成功启动AMD Kria KR260套件后,需要更新Ubuntu安装程序,以确保我们能正确安装ROS 2。
1. 安装resolvconf。
sudo apt update
sudo apt install resolvconf
2. 安装resolvconf后,确保其正常运行。
sudo systemctl status resolvconf.service
3. 确认服务正在运行后,添加您的首选DNS服务器。在本例中,我们使用Googles DNS。
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolvconf/resolv.conf.d/head
4. 因为我们做了更改,所以需要重启服务。
sudo systemctl restart resolvconf.service
sudo systemctl restart systemd-resolved.service
5. 防止KR260上的Ubuntu进入睡眠状态。
sudo gsettings set org.gnome.desktop.session idle-delay 0
sudo systemctl mask suspend.target
安装ROS 2
为了安装ROS 2和软件包来控制Trossen Robotics X系列机械臂,我们将对树莓派 (Raspberry Pi) 使用的指令稍做修改,树莓派与 AMD Kria™ KR260套件一样,使用Arm64 (aarch64) 指令集架构。
Trossen库支持的ROS 2最新版本是ROS 2 Humble。可使用以下命令安装ROS 2和Trossen库:
cd ~
sudo apt install curl
curl 'https://raw.githubusercontent.com/Interbotix/interbotix_ros_manipulators/main/interbotix_ros_xsarms/install/rpi4/xsarm_rpi4_install.sh' > xsarm_rpi4_install.sh
sed -i 's/sudo apt-get update && sudo apt -y upgrade/sudo apt-get update/g' xsarm_rpi4_install.sh
chmod +x xsarm_rpi4_install.sh
./xsarm_rpi4_install.sh -d humble -j rx150
在AMD Kria™ KR260套件上安装ROS 2后,我们将运行一个系统提供的演示应用程序。 在KR260上打开两个终端窗口。
1. 在第一个终端窗口中输入以下命令:
ros2 launch interbotix_xsarm_control xsarm_control.launch.py robot_model:=rx150
2. 在第二个终端窗口中输入以下命令:
python3 /home/ubuntu/interbotix_ws/src/interbotix_ros_manipulators/interbotix_ros_xsarms/interbotix_xsarm_control/demos/python_ros2_api/bartender.py
这将运行一个演示机械臂控制的应用程序。
演示详解
通过查看此应用程序中的代码,我们可以了解如何使用Python编程语言来控制机械臂。首先,我们需要从安装的InterbotiX库中导入InterbotixManipulatorXS机械臂软件包。为此,请输入以下命令:from interbotix_xs_modules.arm import InterbotixManipulatorXS
安装了这些软件包后,我们就可以开始使用Python编程语言来创建操纵机械臂的应用程序了。
查看示例代码,我们可以看到首先要用机器人的参数、模型、类型及其末端器对机器人进行初始化。
定义了机器人(代码中显示为bot)后,应用程序首先会检查该机器人是否拥有演示所需的正确关节数。一旦确认机器人适合演示,就可以使用几条Python命令来控制机器人,根据需要设置姿势或单个位置。还可以使用Python调用语句打开和关闭夹具。
bot = InterbotixManipulatorXS("rx150", "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.arm.set_ee_pose_components(x=0.3, z=0.2)
bot.arm.set_single_joint_position("waist", np.pi/2.0)
bot.gripper.open()
bot.arm.set_ee_cartesian_trajectory(x=0.1, z=-0.16)
bot.gripper.close()
最后,演示以安全地将机器人定位到原点结束。
bot.arm.go_to_home_pose()
bot.arm.go_to_sleep_pose()
了解了以上这些,我们就可以如本视频所示,开始创建自己的自定义应用程序了。不过首先我们需要能够在AMD Kria™板上远程开发应用程序。
为了开发远程应用程序,我们将在开发机器上使用Visual Studio Code。我们在开发机器上使用Visual Studio Code创建的Python应用程序将保存在AMD Kria™ KR260套件的文件系统中。这样做的好处在于无需连接显示器、键盘或鼠标,因为我们可以在开发环境中访问这一切。
我们还希望在开发应用程序(模拟模式或实际执行)时,能够远程查看机械臂的移动情况。
要实现远程开发和可视化,我们必须建立SSH连接并启用X11 Forwarding。
1. 使用Windows Powershell,通过以下命令安装OpenSSH。
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:/code>
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
2. 安装OpenSSH后,使用以下命令创建密钥。
ssh-keygen
默认情况下,系统会将密钥保存到C:\Users\<user>/.ssh/id_rsa。
3. 使用以下命令交换密钥。
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh ubuntu@<board_ip> "cat >> .ssh/authorized_keys"
要从Visual Studio Code建立SSH连接,我们必须先从扩展程序安装远程SSH选项(图1)。
图1:SSH远程连接应用程序。(图源:贸泽电子)
安装完成后,我们可以连接AMD Kria KR260板(图2),然后就可以在KR260文件系统中远程开发应用程序了。
图2:建立SSH远程连接。(图源:贸泽电子)
要使用X11 Forwarding,我们必须首先在开发机器上安装cXsrv Windows X Server(可在“Resources”部分找到)。运行X Server并进行配置,如图3–6所示。
图3:X Server显示器设置。(图源:贸泽电子)
图4:X Server客户端启动设置。(图源:贸泽电子)
图5:X Server额外设置。(图源:贸泽电子)
图6:X Server配置完成。(图源:贸泽电子)
在开发机器的命令窗口中运行以下命令,连接显示器:
set DISPLAY=127.0.0.1:0.0
然后,我们可以启动与AMD Kria KR260板的SSH连接,开始开发我们的机器人应用程序。
ssh -Y <user>@<board_ip>
在应用程序运行过程中,机械臂将会移动,您将在X Server上看到移动的显示效果(图7)。
图7:X Server机械臂的显示效果(图源:贸泽电子)
机器人技术可能很复杂。在这个项目中,我们看到AMD Kria™ KR260套件可以使用ROS 2快速开发机器人解决方案。KR260能够加速可编程逻辑元件内的功能,或者在可编程逻辑内集成更多的系统控制元件,如时间敏感网络。
AMD、AMD Arrow徽标、Kria及其组合为Advanced Micro Devices, Inc的商标。此处使用的其它产品名称仅用于标识目的,也可能是其各自公司的商标。
作者简介
Adam Taylor是嵌入式系统专业的教授、工程领域的领导者,也是FPGA/片上系统和电子设计领域的世界公认专家。