Skip to content

ROS 使用教程

本文介绍 ROS 的基本使用方法,包括创建工作空间、配置 URDF 模型、通过 MoveIt 控制机器人以及 C++ 编程实现控制。可结合视频教程 NexDroid 与 ROS 结合-连接和使用 一起学习。

1. 创建工作空间

bash
mkdir -p ~/inexbot/src
cd ~/inexbot/src
catkin_init_workspace

如果出现异常:

catkin_init_workspace 报错示意图,显示初始化工作空间时出现异常提示

执行以下命令:

bash
ls -al ~/inexbot/src

之后再运行工作空间初始化命令即可:

bash
catkin_init_workspace
cd ../
catkin_make

2. 配置 ~/.bashrc

bash
gedit ~/.bashrc

在文件末尾添加:

bash
source ~/inexbot/devel/setup.bash

将 inexbot 功能包复制到 ~/inexbot/src 目录下。

3. 配置 MoveIt

安装 MoveIt

新开一个终端,执行:

bash
sudo apt-get install ros-melodic-moveit
source /opt/ros/melodic/setup.bash
sudo apt-get install ros-melodic-moveit-resources

启动 MoveIt Setup Assistant

bash
cd ~/inexbot
source ./devel/setup.bash
roslaunch moveit_setup_assistant setup_assistant.launch

MoveIt Setup Assistant 启动界面,左侧导航栏高亮 Start,中间加载 URDF 模型路径,右侧显示机械臂 3D 可视化模型

MoveIt Setup Assistant 步骤截图:生成 Self-Collisions 自碰撞矩阵配置界面

MoveIt Setup Assistant 步骤截图:Virtual Joints 虚拟关节配置界面

MoveIt Setup Assistant 步骤截图:Planning Groups 规划组配置界面

MoveIt Setup Assistant 步骤截图:Robot Poses 机器人姿态配置界面

MoveIt Setup Assistant 步骤截图:End Effectors 末端执行器配置界面

MoveIt Setup Assistant 步骤截图:Passive Joints 被动关节配置界面

MoveIt Setup Assistant 步骤截图:ROS Control 控制器配置界面

MoveIt Setup Assistant 步骤截图:Simulation 仿真配置界面

MoveIt Setup Assistant 步骤截图:3D Perception 三维感知配置界面

MoveIt Setup Assistant 步骤截图:Author Information 作者信息填写界面

MoveIt Setup Assistant Configuration Files 步骤,显示配置包生成成功并保存到指定路径

MoveIt 配置生成后的 qj_ws/src 工作空间目录结构截图

将 inexbot_driver 文件中的两个文件夹拷贝进来,以及生成的 moveit 文件:

拷贝 inexbot_driver 文件夹以及生成的 moveit 文件到工作空间 src 目录的示意图

qj_ws/src/inexbot_support/launchmoveit_planning_execution.launch 里所有默认的 moveit 文件夹名称改成 qj_moveit(moveit 文件夹的实际名称):

moveit_planning_execution.launch 文件内容,图中红框标注三处 qj_moveit 字符串需要替换

launch 文件修改后的效果截图

inexbot_support/config 中两个 .yaml 文件的 joints 名称改成 URDF 中的 joints name:

joint_names.yaml 配置文件内容,显示六轴机器人的 controller_joint_names 关节列表

qj_moveit/launch/qj_moveit_controller_manager.launch.xml 中红框内容改成 (find inexbot_support)/config/controllers.yaml

qj_moveit_controller_manager.launch.xml 配置截图,红框标注需要将 ros_controllers.yaml 修改为 controllers.yaml

打开终端,编译并启动:

bash
cd ~/inexbot
catkin_make
source devel/setup.bash
roslaunch inexbot_support moveit_planning_execution.launch sim:=false robot_ip:=192.168.1.13

4. 通过 MoveIt 控制机器人

方法一:设置 Goal State

点击 Plan 生成规划轨迹,底部会显示计算用时 Time。

MoveIt RViz 控制面板,点击 Plan 按钮生成规划轨迹,底部显示 Time 计算用时

点击 Execute 执行,也可以点击 Plan & Execute 规划完立即执行。

MoveIt RViz 控制面板,点击 Execute 或 Plan & Execute 按钮执行规划轨迹

方法二:拖拽规划器

拖拽规划器前端的绿色小球,光标放在小球上时,下方出现一个三维坐标,拖拽到目标点,点击 Plan 产生规划轨迹,点击 Execute 执行,也可以点击 Plan & Execute 规划完立即执行。

MoveIt RViz 中使用拖拽规划器,拖动末端执行器到目标点并生成规划轨迹的截图

5. C++ 编程控制机器人

创建功能包

bash
cd ~/inexbot/src
catkin_create_pkg inexbot_code std_msgs rospy roscpp
cd ../
catkin_make

关节空间规划示例

将以下代码保存为 src/moveit_joint_demo.cpp,放入 ~/inexbot/src/inexbot_code/src/

cpp
#include <ros/ros.h>
#include <moveit/move_group_interface/move_group_interface.h>

int main(int argc, char **argv)
{
    ros::init(argc, argv, "moveit_joint_demo");
    ros::AsyncSpinner spinner(1);
    spinner.start();

    // manipulator 是通过 MoveIt 设置的规划组名称
    moveit::planning_interface::MoveGroupInterface arm("manipulator");

    // 设置关节容许误差
    arm.setGoalJointTolerance(0.001);
    // 设置最大加速度
    arm.setMaxAccelerationScalingFactor(0.2);
    // 设置最大速度
    arm.setMaxVelocityScalingFactor(0.2);

    // 控制机械臂回到初始化位置(home 为 MoveIt 预设位置)
    arm.setNamedTarget("home");
    arm.move();
    sleep(1);

    // 设置关节空间的六个轴角度
    double targetPose[6] = {0.391410, -0.676384, -0.376217, 0.0, 1.052834, 0.454125};
    std::vector<double> joint_group_positions(6);
    joint_group_positions[0] = targetPose[0];
    joint_group_positions[1] = targetPose[1];
    joint_group_positions[2] = targetPose[2];
    joint_group_positions[3] = targetPose[3];
    joint_group_positions[4] = targetPose[4];
    joint_group_positions[5] = targetPose[5];

    arm.setJointValueTarget(joint_group_positions);
    arm.move();
    sleep(1);

    // 控制机械臂回到初始化位置
    arm.setNamedTarget("home");
    arm.move();
    sleep(1);

    ros::shutdown();
    return 0;
}

修改 CMakeLists.txt

add_executable 标签上方添加:

cmake
add_executable(moveit_joint_demo src/moveit_joint_demo.cpp)
target_link_libraries(moveit_joint_demo ${catkin_LIBRARIES})

编译并运行

bash
cd ~/inexbot
catkin_make
rosrun inexbot_code moveit_joint_demo