ROS基础

 

一、ROS的核心概念

节点:

节点管理器:

话题:

消息:

服务:

参数:

二、 命令行工具的使用

命令行工具都是以ros开头的。

常用命令

  • rostopic
  • rosservice
  • rosnode
  • rosparam
  • rosmsg
  • rossrv

2.1 rostopic

2.2 rosservice

2.3 rosnode

2.4 rosrun

rosrun 包名 C++节点

三、创建工作空间与功能包

        所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下。因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包。

1. 创建工作空间

mkdir -p catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

2. 编译工作空间

cd ~/catkin_ws
catkin_make

3. 设置环境变量

source devel/setup.bash

4. 检查环境变量

echo $ROS_PACKAGE_PATH

 

5.创建功能包

cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp

注:功能包要放在src文件夹下,同一个工作空间不能有同名的功能包

创建功能包后,在功能包test_pkg文件夹下有src、include文件夹和package.xml、CMakeLists.txt文件

(1)src文件夹:放置代码文件
(2)include文件夹:放置头文件
(3)package.xml:与功能包相关的信息(如名字、版本号、许可证、作者信息、功能包的依赖信息等)
(4)CMakeLists.txt:描述功能包的编译规则
6.编译功能包

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

四、发布者的实现

主要步骤:

1.初始化ROS节点,并创建节点句柄;

    // ROS节点初始化
	ros::init(argc, argv, "velocity_publisher");
	// 创建节点句柄
	ros::NodeHandle n;


2.向ROS Master 注册节点信息,包括发布的话题名和话题中的消息类型;

// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10


ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);

3.创建消息数据;

 // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;


4.按照一定的频率循环发布消息

// 设置循环的频率
	ros::Rate loop_rate(10);
// 发布消息
	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();

整体如下:

//来自古月居21讲,自学做笔记用
/* 该例程将发布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;
}

 如何配置CMakeList.txt中的编译规则

1.设置需要编译的代码合生成可执行文件;
设置链接库;

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

add_executable(targetName source1 [source2 ...])

将创建一个可执行文件,它可以在CMake项目中被称为 targetName 。该名称可能包含字母、数字、下划线和连字符。构建项目时,将在构建目录中创建一个具有平台相关名称的可执行文件,默认名称基于目标名称。思考以下简单的命令示例:

source1 [source2 ...]:CPP文件

target_link_libraries(add_ex的可执行文件名   ${catkin_LIBRARIES})

添加头文件搜索路径: 在include_directories()添加所需要的头文件目录, 相当于编译过程中的 -I命令。
添加库文件搜索路径: 在link_directories()里添加所需要的库的目录,相当于编译过程中的 -L命令。
添加对库的链接:在target_link_libraries()里面添加需要添加的库的名称,相当于编译过程中的-l命令。
 

编译

$ cd ~/catkin_ws
$ catkin_make
$ roscore

运行

C++节点指的是可执行文件名,而不是cpp

cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点

source ~/工作空间/devel/setup.bash可以添加进.bashrc文件,使用上更方便

添加方式1: 直接使用 gedit 或 vi 编辑 .bashrc 文件,最后添加该内容

添加方式2:echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_42475191

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值