1.硬件
- 1个 Baxter Research Robot
- 1台PC机或笔记本,安装好Ubuntu系统(推荐Ubuntu16.04安装ROS kinetic)
- 1个无线路由器(千兆网口)
- 2根网线
2.安装Baxter SDK
# 1.创建ROS工作空间
mkdir -p ~/ros_ws/src
# 2.source ROS
# 在每次打开终端时,都先要运行source ROS命令才能运行ros相关命令,为了避免这一繁琐过程,可以事先在.bashrc文件(Home目录下)中添加这条命令
source /opt/ros/kinetic/setup.bash
# 3.编译与安装
cd ~/ros_ws
catkin_make
catkin_make install
# 4.安装依赖
sudo apt-get update
sudo apt-get install git-core python-argparse python-wstool python-vcstools python-rosdep ros-kinetic-control-msgs ros-kinetic-joystick-drivers
# 5. 安装Baxter SDK
cd ~/ros_ws/src/
wstool init
wstool merge https://raw.githubusercontent.com/RethinkRobotics/baxter/master/baxter_sdk.rosinstall
wstool update
在国内用网,执行到
wstool update
这一步可能会失败,在执行wstool update
之前,打开~/ros_ws/.rosinstall
,在每个uri
的前面加上https://ghproxy.com/
(访问github加速网址)
source /opt/ros/kinetic/setup.bash
cd ~/ros_ws/
catkin_make
catkin_make install
3.配置Baxter 通信
3.1 网络配置
Baxter 机器人网络连接参考网站:http://sdk.rethinkrobotics.com/wiki/Networking
将 Baxter 机器人与 PC 通过网线连接方式连接到路由器局域网上
PC 既可以通过 WIFI 连接到与 Baxter 相连的无线路由器,也可以通过网线连接路由器,我们通常是使用有限路由器连接
3.2 配置Baxter通讯
# 1.下载 baxter.sh,改变用户权限
wget https://github.com/RethinkRobotics/baxter/raw/master/baxter.sh
chmod u+x baxter.sh
# 2.编辑 baxter.sh,与自己的 Baxter 信息匹配
cd~/ros_ws/
gedit baxter.sh
# 3.编辑 baxter_hostname
> # Specify Baxter's hostname
> baxter_hostname="011xxxxxxxx.local" //baxter序列号见机器人背部接线处附近
# 4.编辑 your_hostname 或 your_ip(二选一)
# 推荐编辑 your_hostname ,此处不介绍更改 your_ip
your_hostname="cothink-Inspiron-5488.local"
# 5.修改ros_version
ros_version="kinetic"
# 6.更改完以上内容,保存 baxter.sh
# 7.初始化 SDK 环境
# 每次打开新的终端,执行命令时,应该首先按下面步骤初始化 Baxter 机器人 SDK 运行环境
cd ~/ros_ws/
./baxter.sh
hostname 可以通过在终端输入 hostname 命令得到,也可以点击 Ubuntu 右上角电源键中关于这台电脑(About This Computer)得到,设备名称(device name)对应的值为 hostname
3.3 查看、验证SDK环境配置
env | grep ROS
通过上述命令,会返回一些 ROS 相关的配置信息,关注以下几个字段即可
ROS_MASTER_URI — 机器人的主机名(baxter_hostname)
ROS_IP — 工作站IP(如果没有使用 ROS_HOSTNAME 模式这里应该包含工作站的IP地址,否则此项不可见)
ROS_HOSTNAME — PC的主机名(your_hostname)(如果没有使用ROS_IP模式, 这里应
该包含你的PC的主机名(your_hostname),否则此项不可见)
至此,工作空间配置就全部完成了
4.Hello Baxter
4.1 设置ROS环境
如果之前设置过ROS环境,那么在 ~/ros_ws
文件目录下应该会有一个 devel
文件夹,如果已经有了,可以跳过下面的代码(当然重复运行一次下面的代码也是没问题的),如果还没有此文件夹,那必须运行一遍下面的代码
cd ~/ros_ws
source /opt/ros/kinetic/setup.bash
catkin_make
接下来再 Source 一下 ROS 环境设置脚本,也就是 baxter.sh
./baxter.sh
4.2 检查ROS连接
4.2.1 检查PC与ROS Master(Baxter)的连接
这一步是检查PC能否给ROS Master发送数据
ping 011506P0014.local
如果显示有数据通信,就说明与ROS Master的连接正常,继续下一步
4.2.2 检查Baxter与开发工作空间PC的连接
这一步是想检查PC能否收到ROS Master(Baxter)发过去的命令
首先用SSH远程登录ROS Master,在ROS Master上ping我们的PC机,看是否有通信。
ssh ruser@<our ROS Master>
# 密码:
rethink
ssh ruser@011506P0014.local
# 现在我们SSH登录 到了机器人,我们可以验证往回Ping 开发PC是否可行
ruser@011506P0014.local:~$ ping <ROS_IP/ROS_HOSTNAME>
# 例子:
# ROS_IP
ruser@011506P0014.local:~$ ping 192.168.1.102
或者
ruser@011506P0014.local:~$ ping cothinkTab.local
如果能ping通,说明连接正常,可以退出远程登录了。
ruser@011506P0014.local:~$ exit
4.3 查看ROS Topic
如果双向通信没有问题了,我们就可以查看目前正在发生的ROS Topic了
rostopic list
4.4 使能Baxter
操作 Baxter 机器人之前,先要使能机器人。
在baxter_tools
SDK工具包中,提供了 “使能enable/反使能disable/重置reset/停止stop” 机器人的API。
这在急停按钮(E-STOP)按下后是必需执行的。
必须使能 Baxter才能主动控制任何电机。
rosrun baxter_tools enable_robot.py -e
输出的结果显示 Robot Enabled 表示已经成功使能 Baxter 机器人
4.5 运行一个示例程序
roscore
# 新开一个终端
rosrun baxter_examples joint_velocity_wobbler.py
4.6 自己编写一个程序来运行Baxter
写一个 Hello Baxter 程序,实现让 Baxter 机器人向我们挥手的功能
4.6.1 使能机器人
rosrun baxter_tools enable_robot.py -e
4.6.2 编写hello_baxter.py
# Import the necessary Python modules
# rospy - ROS Python API
import rospy
# baxter_interface - Baxter Python API
import baxter_interface
# initialize our ROS node, registering it with the Master
rospy.init_node('Hello_Baxter')
# create an instance of baxter_interface's Limb class
limb = baxter_interface.Limb('right')
# get the right limb's current joint angles
angles = limb.joint_angles()
# print the current joint angles
print angles
# reassign new joint angles (all zeros) which we will later command to the limb
angles['right_s0']=0.0
angles['right_s1']=0.0
angles['right_e0']=0.0
angles['right_e1']=0.0
angles['right_w0']=0.0
angles['right_w1']=0.0
angles['right_w2']=0.0
# print the joint angle command
print angles
# move the right arm to those joint angles
limb.move_to_joint_positions(angles)
# Baxter wants to say hello, let's wave the arm
# store the first wave position
wave_1 = {'right_s0': -0.459, 'right_s1': -0.202, 'right_e0': 1.807, 'right_e1': 1.714, 'right_w0':-0.906, 'right_w1': -1.545, 'right_w2': -0.276}
# store the second wave position
wave_2 = {'right_s0': -0.395, 'right_s1': -0.202, 'right_e0': 1.831, 'right_e1': 1.981, 'right_w0':-1.979, 'right_w1': -1.100, 'right_w2': -0.448}
# wave three times
for _move in range(3):
limb.move_to_joint_positions(wave_1)
limb.move_to_joint_positions(wave_2)
# quit
quit()
在Terminal中运行编辑好的python程序
python hello_baxter.py
此时可以看到 Baxter 做了一个招手的动作。