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