ROS总结

ROS框架搭建及常用命令

ROS入门参考网站  cn/ROS/Tutorials - ROS Wiki

  • ROS工作空间目录结构

workspace_folder/         -- WORKSPACE

  src/                    -- SOURCE SPACE

    CMakeLists.txt        -- The 'toplevel' CMake file

    package_1/

      CMakeLists.txt

      package.xml

      ...

    package_n/

      CATKIN_IGNORE       -- Optional empty file to exclude package_n from being processed

      CMakeLists.txt

      package.xml

      ...

  build/                  -- BUILD SPACE

    CATKIN_IGNORE         -- Keeps catkin from walking this directory

  devel/                  -- DEVELOPMENT SPACE (set by CATKIN_DEVEL_PREFIX)

    bin/

    etc/

    include/

    lib/

    share/

    .catkin

    env.bash

    setup.bash

    setup.sh

    ...

  install/                -- INSTALL SPACE (set by CMAKE_INSTALL_PREFIX)

    bin/

    etc/

    include/

    lib/

    share/

    .catkin            

    env.bash

    setup.bash

    setup.sh

    ...

catkin_create_pkg

含义:脚本来创建一个新的catkin软件包,用法说明

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

举例子:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

catkin_make

含义:构建软件包

举例子:

cd ~/catkin_ws && catkin_make

rospack

查看这些一级依赖包。

举例子:

rospack depends1 beginner_tutorials

查看间接依赖。

举例子:

rospack depends1 rospy

echo $ROS_PACKAGE_PATH

含义:环境变量包含那些保存有ROS软件包的路径

  • ROS常用指令

 1 node list

含义:命令会列出这些活动的节点

rosout这个节点用于收集和记录节点的调试输出

2 rosrun

含义:可以让你用包名直接运行软件包内的节点(而不需要知道包的路径)。

举例子:

rosrun [package_name] [node_name]

rosnode ping my_turtle

3 rqt_graph

含义:用动态的图显示了系统中正在发生的事情

举例子:

rosrun rqt_graph rqt_graph

4 rostopic 

rostopic echo [topic]

含义:可以显示在某个话题上发布的数据

举例子:rostopic echo /turtle1/cmd_vel

rostopic pub [topic] [msg_type] [args]

含义:可以把数据发布到当前某个正在广播的话题上;

举例子:rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

rostopic type

含义:用来查看所发布话题的消息类型。

举例子:rostopic type /turtle1/cmd_vel

5 rostopic list

含义:能够列出当前已被订阅和发布的所有话题。

6 rosmsg

  rosmsg show     Show message description

  rosmsg list       List all messages

  rosmsg md5      Display message md5sum

  rosmsg package   List messages in a package

  rosmsg packages  List packages that contain messages

rosmsg show  < message type >

含义:查看话题的消息类型的结构体

举例子:rosmsg show geometry_msgs/Twist

7 rqt_plot

含义:命令可以在滚动时间图上显示发布到某个话题上的数据

举例子:

rosrun rqt_plot rqt_plot

8 rosservice

含义:可以很容易地通过服务附加到ROS客户端/服务器框架上。

rosservice list         输出活跃服务的信息

rosservice call         用给定的参数调用服务

rosservice type         输出服务的类型

rosservice find         按服务的类型查找服务

rosservice uri          输出服务的ROSRPC uri

查看服务具有参数的情况。

rosservice type /spawn | rossrv show

触发/spawn服务

rosservice call /spawn 2 2 0.2 ""

9 rosparam

含义:能让我们在ROS参数服务器(Parameter Server)上存储和操作数据

rosparam set            设置参数
rosparam get            获取参数
rosparam load           从文件中加载参数
rosparam dump          向文件中转储参数
rosparam delete          删除参数
rosparam list            列出参数名

rosparam get /

含义:来显示参数服务器上的所有内容

10 source devel/setup.bash

含义:使软件包的环境变量生效

11 roslaunch

含义:可以用来启动定义在launch(启动)文件中的节点,launch文件为XML语法,描述命名空间、话题的输入和输出等要素信息。

roslaunch beginner_tutorials turtlemimic.launch

  • ROS消息和服务

msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。

srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。

包含请求和响应,这两部分用一条---线隔开,下面是一个srv文件的示例。

int64 A

int64 B

---

int64 Sum

增加msg或者srv主要步骤:

打开package.xml, 确保它包含以下两行:

  <build_depend>message_generation</build_depend>

  <exec_depend>message_runtime</exec_depend>

CMakeLists.txt文件中,修改find_package、catkin_package以及add_message_files、generate_messages,新增部分为标黄的。

find_package(catkin REQUIRED COMPONENTS

   roscpp

   rospy

   std_msgs

   message_generation

)

catkin_package(

  ...

  CATKIN_DEPENDS message_runtime ...

  ...)

#添加msg

add_message_files(

  FILES

  Num.msg

)

#添加srv

add_service_files(

  FILES

  AddTwoInts.srv

)

generate_messages(

  DEPENDENCIES

  std_msgs

)

roswtf

错误检查,可以在线检查、环境变量检查等。

  • ROS实现发布与订阅

ROS实现C++发布者:

#include "ros/ros.h"

#include "std_msgs/String.h"

#include <sstream>

int main(int argc, char **argv)

{

  ros::init(argc, argv, "talker");

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);

  ros::Rate loop_rate(10);

  while (ros::ok())

  {

    std_msgs::String msg;

    std::stringstream ss;

    ss << "hello world " << count;

    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();

    ++count;

  }

  return 0;

}

ROS实现C++订阅者:

#include "ros/ros.h"

#include "std_msgs/String.h"

void chatterCallback(const std_msgs::String::ConstPtr& msg)

{

  ROS_INFO("I heard: [%s]", msg->data.c_str());

}

int main(int argc, char **argv)

{

  ros::init(argc, argv, "listener");

  ros::NodeHandle n;

  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

  ros::spin();

  return 0;

}

  • ROS服务节点和客户端节点

ROS编写服务节点

#include "ros/ros.h"

#include "beginner_tutorials/AddTwoInts.h"

bool add(beginner_tutorials::AddTwoInts::Request  &req,

         beginner_tutorials::AddTwoInts::Response &res)

{

  res.sum = req.a + req.b;

  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);

  ROS_INFO("sending back response: [%ld]", (long int)res.sum);

  return true;

}

int main(int argc, char **argv)

{

  ros::init(argc, argv, "add_two_ints_server");

  ros::NodeHandle n;

  ros::ServiceServer service = n.advertiseService("add_two_ints", add);

  ROS_INFO("Ready to add two ints.");

  ros::spin();

  return 0;

}

ROS编写客户端节点

#include "ros/ros.h"

#include "beginner_tutorials/AddTwoInts.h"

#include <cstdlib>

int main(int argc, char **argv)

{

  ros::init(argc, argv, "add_two_ints_client");

  if (argc != 3)

  {

    ROS_INFO("usage: add_two_ints_client X Y");

    return 1;

  }

  ros::NodeHandle n;

  ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");

  beginner_tutorials::AddTwoInts srv;

  srv.request.a = atoll(argv[1]);

  srv.request.b = atoll(argv[2]);

  if (client.call(srv))

  {

    ROS_INFO("Sum: %ld", (long int)srv.response.sum);

  }

  else

  {

    ROS_ERROR("Failed to call service add_two_ints");

    return 1;

  }

  return 0;

}

虚拟机安装

Ubuntu虚拟机安装VMware Tools

  1. 挂载VMware Tools镜像
    • VMware的菜单栏中,点击虚拟机”->“安装VMware Tools”
    • 系统会生成一个VMware Tools的虚拟光盘,并挂载到虚拟机中。通常,这个光盘会包含一个名为“VMwareTools-xxxx.tar.gz”的压缩文件。
  2. 复制并解压文件
    • 在虚拟机中,找到挂载的虚拟光盘(通常在桌面的“VMware Tools”图标下或者文件管理器中的虚拟机光驱下)。
    • “VMwareTools-xxxx.tar.gz”文件复制到桌面或其他方便的位置。
    • 使用文件管理器或终端命令解压该文件。例如,在终端中可以使用以下命令:tar -zxvf ~/Desktop/VMwareTools-xxxx.tar.gz -C ~/Desktop(将xxxx替换为实际的文件名)。
  3. 进入解压目录并安装
    • 解压完成后,会生成一个名为“vmware-tools-distrib”的文件夹。
    • 使用终端进入该文件夹:cd ~/Desktop/vmware-tools-distrib(路径可能因解压位置而异)。
    • 在该文件夹中,运行安装脚本:sudo ./vmware-install.pl
    • 根据脚本的提示,输入yes或回车以继续安装。直到出现“Enjoy, –the VMware team”字样,表示安装成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值