ROS入门、ROS完整教程

这篇博客是ROS入门教程,涵盖了ROS常用命令的使用,如rosnode、rostopic和rosservice等。详细介绍了工作空间的创建与配置,包括src、build、devel和install目录的作用。此外,还通过实例讲解了如何创建和使用自定义话题消息、服务、参数以及TF坐标变换,并探讨了launch文件的基本语法和应用。
摘要由CSDN通过智能技术生成

ROS学习入门

说明:

1. ROS常用命令

(1)rosnode 显示当前 节点 信息

rosnode list                    #获得运行节点列表
rosnode info [node-name]        #获得特定节点的信息
rosnode ping  [node-name]       #测试节点是否连通
rosnode kill [node-name]        #终止节点

(2)**rospack ** 获取 软件包 的有关信息

rospack find                          #显示软件包的目录
rospack list                 #显示出当前的包信息
rospack depends1 [package_name]      #显示当前包的一级依赖
rospack depends [package_name]      #显示当前包的所有依赖

(3)rostopic 获取 话题 的有关信息

rostopic bw            #显示主题使用的带宽
rostopic delay         #从标题中的时间戳显示主题的延迟
rostopic echo          #将消息打印到屏幕
rostopic find          #按类型查找主题
rostopic hz            #显示主题的发布率
rostopic info          #打印有关活动主题的信息
rostopic list          #列出活动主题
rostopic pub           #将数据发布到主题
rostopic type          #打印主题或字段类型

(4)rosmsg 获取 消息 的有关信息

rosmsg show
rosmsg info
rosmsg list

(5)rosbag 运行 录制

rosbag record -a -o [file_name]      #将运行过程录制到文件中
rosbag play [file_name]              #回放bag文件
rosbag info [file_name]              #查看bag包内容

(6)rosservice 获取 服务 的有关消息

rosservice type
rosservice info
rosservice list

(7)rosparam 获取 参数 的有关消息

rosparam list                                   #列出当前的参数
rosparam get [param_key]                        #显示某个参数值
rosparam set [param_key] [param_value]          #设置某个参数值
rosparam dump [file_name]                       #保存到参数文件
rosparam load [file_name]                       #从文件中读取参数
rosparam delete [param_key]                     #删除参数

(8)显示 节点图

rqt_graph

(9)运行程序

rosrun

(10)运行launch文件

roslaunch

(11)启动 rqt_logger_level 图形化工具

rosrun rqt_logger_level rqt_logger_level

(12)启动 rqt_console图形化工具

rqt_console

(13)启动 rqt_top图形化工具

rosrun rqt_top rqt_top

(14)启动 rqt_topic图形化工具

rosrun rqt_topic rqt_topic

(15)启动 可视化监视器

rosrun rqt_runtime_monitor rqt_runtime_monitor

(16)启动 图形查看器

rosrun rqt_image_view rqt_image_view

(17)启动 rqt_bag图形化工具

rqt_bag

(18)启动 rqt_gui图形化工具

rosrun rqt_gui rqt_gui

(19)分析包的潜在问题

roswtf

(20)查看 ROS_PACKAGE_PATH环境变量

echo $ROS_PACKAGE_PATH

2.工作空间

工作空间是一个存放工程开发相关文件的文件夹

  • src:代码空间;存放功能包的源码
  • build:编译空间;存放编译过程中的中间文件
  • devel:开发空间;存放开发过程中的可执行文件和库
  • install:安装空间;存放最终生成的可执行文件

1.创建工作空间
mkdir -p /catkin_ws/src
cd catkin_ws
catkin_make            #产生build、devel空间
catkin_make install    #产生install空间
2.创建功能包
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
cd src
catkin_create_pkg test_pkg roscpp rospy std_msgs
# cd ..
# catkin_make          #可以进行编译
3.配置环境变量
source devel/setup.bash     #仅对当前终端有效
vim ./bashrc
source ~/catkin_ws/devel/setup.bash   #在文件最后添加

3.示例

发布者和订阅者示例

1.发布者示例
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim         # 创建功能包
cd learning_topin/src
vim velocity_publisher.cpp      #创建一个.cpp文件
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
 
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

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<geometry_msgs::Twist>("/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;
}

cd ..     # ~/catkin_ws/src/learning_topic
vim CMakeLists.txt           #打开CMakeLists.txt,新增两句
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${
   catkin_LIBRARIES})
cd ~/catkin_ws               #切换到工作空间
catkin_make                  #编译

接下来进行运行

1. roscore
2. rosrun turtlesim turtlesim_node
3. rosrun learning_topic velocity_publisher

2.发布者示例
cd learning_topin/src
vim pose_subscriber.cpp      #创建一个.cpp文件
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
 */
 
#include <ros/ros.h>
#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;
}

cd ..     # ~/catkin_ws/src/learning_topic
vim CMakeLists.txt           #打开CMakeLists.txt,新增两句
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${
   catkin_LIBRARIES})
cd ~/catkin_ws               #切换到工作空间
catkin_make                  #编译

接下来进行运行

1. roscore
2. rosrun turtlesim turtlesim_node
3. rosrun learning_topic pose_subscriber

4.自定义话题消息与使用

1.编写msg文件
cd ~/catkin_ws/src/learning_topic
mkdir msg
cd msg
vim Persion.msg     #创建.msg文件
string name
uint8  age
uint8  sex

uint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

在.xml文件中添加(固定配置)

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

CMakeList.txt文件中添加

find_package(... message_generation)

add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)

catkin_package(... message_runtime)
2.编写测试文件
cd ~/catkin_ws/src/learning_topic/src
vim person_publisher.cpp
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
 */
 
#include <ros/ros.h>
#include "learning_topic/Person.h"

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

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

    // 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
    ros::Publisher person_info_pub = n.advertise<learning_topic::Person>("/person_info", 10);

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

    int count = 0;
    while (ros::ok
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值