ROS实践手册(三) RoboWare实现learning_topic编程实验

笔者根据 古月居 · ROS入门21讲 学习整理,并参考《ROS机器人开发实践》一书。
相关课件及源码可参考 Github/huchunxu/ros_21_tutorials

RoboWare Studio IDE

  • 安装
    • 为支持 Python 相关功能,需要安装 pylint。
      • $ sudo apt-get install python-pip
      • $ sudo python -m pip install pylint
    • 为支持 clang-format 相关功能,需要安装 clang-format-3.8 或更高版本。
      • $ sudo apt-get install clang-format-3.8
    • Github/TonyRobotics/RoboWare 下载 RoboWare Studio 最新版,双击.deb文件即可。
  • 由于Github下载单一文件较为复杂,笔者在此提供个人仓库便于读者下载 RoboWare Studio 1.2.0,该仓库中包含amd64(64位)、i386(32位)的deb文件以及CHS、EN的中英文使用手册pdf文件。另可通过 git clone [email protected]:ME-Msc/RoboWare_Studio_1.2.0.git 进行下载。

编程实现话题发布者Publisher

  • 点击 “新建工作区” 创建新工作空间 catkin_ws
  • 右键点击 ROS 工作区下的 “src” ,选择 “新建ROS包” ,输入包名称及其依赖包的名称 learning_topic roscpp rospy std_msgs geometry_msgs turtlesim ,回车后,会创建名为 “learning_topic” 、以 “roscpp” 、“rospy”、“std_msgs”、“geometry_msgs”和“turtlesim” 为依赖的 ROS 包。
  • 右键点击 catkin_ws/src/learning_topic/src 文件夹,点击 “新建CPP源文件” 输入文件名velocity_publisher ,点击回车键弹出列表,选择 “加入到新的可执行文件中” ,则会创建一个与cpp文件同名的可执行文件(ROS节点)。此时CMakeLists.txt文件会自动更新下述三条编译规则:
    • add_executable(velocity_publisher src/velocity_publisher.cpp):描述将某个cpp文件编译成相应的可执行文件
    • add_dependencies(velocity_publisher ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) :添加cmake库的目标依赖项
    • target_link_libraries(velocity_publisher ${catkin_LIBRARIES}):将可执行文件与ROS的库进行链接
  • 编辑 velocity_publisher.cpp 文件如下。
/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */

#include 
#include 

int main(int argc, char **argv)
{
    // ROS节点初始化
    ros::init(argc, argv, "velocity_publisher");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
    ros::Publisher turtle_vel_pub = n.advertise("/turtle1/cmd_vel", 10);

    // 设置循环的频率
    ros::Rate loop_rate(10);

    int count = 0;
    while (ros::ok())
    {
        // 初始化geometry_msgs::Twist类型的消息
        geometry_msgs::Twist vel_msg;
        vel_msg.linear.x = 0.5;
        vel_msg.angular.z = 0.2;

        // 发布消息
        turtle_vel_pub.publish(vel_msg);
        ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z);

        // 按照循环频率延时
        loop_rate.sleep();
    }
    return 0;
}
  • 点击“文件-首选项-设置”,选择“ROS”,修改构件工具为“catkin_make”,并关闭保存。
  • 在主界面左上角,修改资源管理器旁的构建方式为“Debug”,并点击小锤子进行构建。
  • 在主界面左下角“ROS节点-learning_topic-velocity_publisher”,即可进行调试、运行、配置参数等。
  • 点击主界面上方“ROS-运行roscore”
  • 在主界面右侧下方点击“+”创建新终端,输入 $ rosrun turtlesim turtlesim_node 启动小海龟仿真器。
  • 在主界面左下角“ROS节点-learning_topic-velocity_publisher”,点击“运行文件”,使得海龟按照代码进行运动。
    ROS实践手册(三) RoboWare实现learning_topic编程实验_第1张图片

编程实现话题订阅者Subscriber

  • 右键点击 catkin_ws/src/learning_topic/src 文件夹,点击 “新建CPP源文件” 输入文件名pose_subscriber ,点击回车键弹出列表,选择 “加入到新的可执行文件中” 。
  • 编辑 pose_subscriber.cpp 文件如下。
/**
 * 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
 */
 
#include 
#include "turtlesim/Pose.h"

// 接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
    // 将接收到的消息打印出来
    ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}

int main(int argc, char **argv)
{
    // 初始化ROS节点
    ros::init(argc, argv, "pose_subscriber");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);

    // 循环等待回调函数
    ros::spin();

    return 0;
}
  • 在主界面左上角,修改资源管理器旁的构建方式为“Debug”,并点击小锤子进行构建。
  • 点击主界面上方“ROS-运行roscore”
  • 在主界面右侧下方点击“+”创建新终端,输入 $ rosrun turtlesim turtlesim_node 启动小海龟仿真器。
  • 在roboware外创建新终端,输入 $ rosrun turtlesim turtle_teleop_key 启动键盘控制节点。因为后续需要在RoboWare中运行pose_subscriber,不能同时运行键盘控制,所以不适用RoboWare内置的终端。
  • 在主界面左下角“ROS节点-learning_topic-pose_subscriber”,点击“运行文件”,接收海归位置信息并打印在主界面下方“调试控制台”中。ROS实践手册(三) RoboWare实现learning_topic编程实验_第2张图片

你可能感兴趣的:(ROS)