参考赵虚左老师的课程整理:
http://www.autolabor.com.cn/book/ROSTutorials/
1、ROS相关命令总结
1.1增
catkin_create_pkg 自定义包名 依赖包 #创建新的ROS功能包
sudo apt install xxx #安装 ROS功能包
1.2删
sudo apt purge xxx #删除某个功能包
1.3改
rosed 包名 文件名 #修改功能包文件
1.4查
rospack list #列出所有功能包
rospack find 包名 #查找某个功能包是否存在,如果存在返回安装路径
roscd 包名 #进入某个功能包
rosls 包名 #列出某个包下的文件
apt search xxx #搜索某个功能包
1.5 执行
- roscore:启动ROS的核心服务,必须在运行其他ROS命令之前先运行该命令
- rosrun:在ROS包中执行指定的节点程序,例如:rosrun package_name node_name。
- roslaunch:使用XML文件启动一个或多个ROS节点,该命令可以启动多个节点,并设置节点的参数和命名空间,例如:roslaunch package_name launch_file.launch。
- rosnode:用于与ROS节点进行交互的命令行工具,可以使用该命令查看正在运行的节点列表、获取节点信息等,例如:rosnode list、rosnode info node_name。
rosnode ping #测试到节点的连接状态
rosnode list #列出活动节点
rosnode info #打印节点信息
rosnode machine #列出指定设备上节点
rosnode kill #杀死某个节点
rosnode cleanup #清除不可连接的节点
- rostopic:用于与ROS话题进行交互的命令行工具,可以使用该命令查看正在发布的话题、发布消息到话题、订阅话题等,例如:rostopic list、rostopic echo topic_name、rostopic pub topic_name message_type args。
rostopic bw #显示主题使用的带宽
rostopic delay #显示带有 header 的主题延迟
rostopic echo #打印消息到屏幕
rostopic find #根据类型查找主题
rostopic hz #显示主题的发布频率
rostopic info #显示主题相关信息
rostopic list #显示所有活动状态下的主题
rostopic pub #将数据发布到主题
rostopic type #打印主题类型
- rosmsg:用于显示有关 ROS消息类型的 信息的命令行。
rosmsg show 显示消息描述
rosmsg info 显示消息信息
rosmsg list 列出所有消息
rosmsg md5 显示 md5 加密后的消息
rosmsg package 显示某个功能包下的所有消息
rosmsg packages 列出包含消息的功能包
- rosservice:用于与ROS服务进行交互的命令行工具,可以使用该命令列出可用的服务、调用服务等,例如:rosservice list、rosservice call service_name args。
rosservice args 打印服务参数
rosservice call 使用提供的参数调用服务
rosservice find 按照服务类型查找服务
rosservice info 打印有关服务的信息
rosservice list 列出所有活动的服务
rosservice type 打印服务类型
rosservice uri 打印服务的 ROSRPC uri
- rosparam:包含rosparam命令行工具,用于使用YAML编码文件在参数服务器上获取和设置ROS参数。
rosparam set 设置参数
rosparam get 获取参数
rosparam load 从外部文件加载参数
rosparam dump 将参数写出到外部文件
rosparam delete 删除参数
rosparam list 列出所有参数
- rosbag:用于记录和回放ROS消息的工具,可以使用该命令将ROS消息保存到一个称为"bag"的文件中,并在以后的时间回放这些消息,例如:rosbag record -a、rosbag play bag_file.bag。
- rqt_graph:用于显示当前ROS系统中节点和话题之间关系的图形化工具。
- rqt_console:用于显示ROS节点的日志消息的图形化工具。
- rviz:ROS中的三维可视化工具,可以用于显示传感器数据、机器人模型、路径规划等。
2、作业
要求: 创建工作空间并在其中完成以下内容:自定义一个MSG消息→基于该消息编写一个发布器和订阅器,并将订阅的消息打印在屏幕上。
首先编写launch文件,打包运行小乌龟,launch文件代码如下:
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen" />
<node pkg="turtlesim" type="turtle_teleop_key" name="key" output="screen" />
</launch>
再编写订阅器,代码如下:
#include "ros/ros.h"
#include "turtlesim/Pose.h"
void doPose(const turtlesim::Pose::ConstPtr& p){
ROS_INFO("乌龟位姿信息:x=%.2f,y=%.2f,theta=%.2f,lv=%.2f,av=%.2f",
p->x,p->y,p->theta,p->linear_velocity,p->angular_velocity
);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ROS 节点
ros::init(argc,argv,"sub_pose");
// 3.创建 ROS 句柄
ros::NodeHandle nh;
// 4.创建订阅者对象
ros::Subscriber sub = nh.subscribe<turtlesim::Pose>("/turtle1/pose",1000,doPose);
// 5.回调函数处理订阅的数据
// 6.spin
ros::spin();
return 0;
}
效果如下: