Appearance
ROS 使用教程
本文介绍 ROS 的基本使用方法,包括创建工作空间、配置 URDF 模型、通过 MoveIt 控制机器人以及 C++ 编程实现控制。可结合视频教程 NexDroid 与 ROS 结合-连接和使用 一起学习。
1. 创建工作空间
bash
mkdir -p ~/inexbot/src
cd ~/inexbot/src
catkin_init_workspace如果出现异常:

执行以下命令:
bash
ls -al ~/inexbot/src之后再运行工作空间初始化命令即可:
bash
catkin_init_workspace
cd ../
catkin_make2. 配置 ~/.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












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

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


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

qj_moveit/launch/qj_moveit_controller_manager.launch.xml 中红框内容改成 (find inexbot_support)/config/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.134. 通过 MoveIt 控制机器人
方法一:设置 Goal State
点击 Plan 生成规划轨迹,底部会显示计算用时 Time。

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

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

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