古月居ros21讲

目录

ros安装:

ros概念:

ROS命令行工具

创建工作空间和功能包

发布者Publisher编程实现


ros安装:

Ubuntu18.04+Ros Melodic安装及环境配置+Ros安装常见问题解决方法(亲测安装成功)_Robot_Tiger_的博客-CSDN博客

ros概念:

话题(T opic):异步通信机制,即单向数据传输

消息(Message):话题数据

服务(Service):同步通信机制 

话题和服务,参数(全局共享字典),功能包等

所有节点都可以通过网络来访问这个全局共享字典,即可以理解成一个公共的共享的变量库,但是不适合存储那种随时都有可能发生变化的变量(动态参数配置适合随时变化的变量)。

功能包是完成具体某一个功能的,比如图像识别,人脸识别等。 

ROS命令行工具

可以用于代码编写、调试、测试等

一些指令:

rqt_graph:输出ros系统的节点关系图

 rosnode:
注:如果不知道rosnode后面加什么,那么只需要输入rosnode后点回车即可显示,其他命令也同理。

rosnode list:输出全部node节点
rosnode info /nodename:输出一个node的信息
rostopic list:输出话题的list,话题解释查看上一知识点
rosservice list:服务相关的命令行list,仿真器里面提供的所有服务内容
格式:rosservice call 服务名称

rosbag:

话题记录:rosbag record -a -O cmd_record(文件名字)
话题浮现:rosbag play cmd_record.bag
其中-a代表all全部-O代表压缩包

一个例子更好的理解rostopic:

我们打开海龟模拟器

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

再打开第四个终端输入rostopic回车:

可以发现rostopic pub的作用是发布数据给topic ,我们可以使用键盘在ros控制上下左右在终端“rosrun turtlesim  turtle_teleop_key ”中对小海龟进行控制,其实控制的最终命令就是在rostopic pub上面,所以我们可以通过改动rostopic pub来对小海龟进行控制:

输入rostopic pub +对应的topic后按tab两次补全即可对小海龟进行移动:

 这里将x设置为1:发现海龟向前移动了一段之后停止

之后再这样修改后,即加上一个-r 10(每秒10次)和在角速度z上面改为1:

 

 就会一直转圈

  

创建工作空间和功能包

 src:源码,配置文件,lunch文件

build:编译过程中的中间文件,一般不用管

devel:编译生成的可执行文件,库,脚本等

install:使用install这个指令安装的东西

开始创建:

创建环境 

mkdir catkin_ws
cd catkin_ws/
mkdir src
cd src/
catkin_init_workspace #将当前文件夹初始化,变成一个workspace
cd ..
catkin_make  #会去编译src文件夹下的所有功能包的源码,结果会放到devel和install里面,install是在下面那条命令
catkin_make install 
#devel和install是类似的,只不过devel是在开发过程中存放的可执行文件和库等,install是存放最后编译生成的可执行文件。即一个是开发过程中,一个是开发完毕给客户使用的

创建功能包

cd src
catkin_create_pkg test_pkg roscpp rospy std_msgs  #包的名字为test_pkg,后面跟着的三个是依赖 

#src里面是功能包,功能包点开一定有CMakeLists.txt和Package这两个文件。

编译功能包

cd ..     返回到catkin_ws
catkin_make
source devel/setup.bash 设置环境变量,只有运行了这一步,path里面才会有功能包的路径,才能找到功能包

CMakeLists.txt:
主要是用来描述功能包里面的编译规则,使用CMake语法。怎么编译cpp代码,编译的时候要依赖哪些库等等

注:

其中catkin_ws为一个工作空间,src中的tesk_pkg为一个功能包

 同一个工作空间下不允许存在两个同名的功能包的

发布者Publisher编程实现

实现途中publisher这个部分的功能

首先在上一讲的基础上:

1 在src里面创建功能包:

catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

2 然后是创建一个发布者,在learning_topic的src里面创建一个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;

	    // 通过之前创建的publisher来发布消息
		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;
}

3 然后在最外层catkin_us进行编译:

catkin_make

然后执行编译好的程序:

先Ctrl+alt+t打开两个终端分别输入:

roscore 
rosrun turtlesim  turtlesim_node 

然后打开第三个终端:

source /home/gzy/ROS/catkin_ws/devel/setup.bash   #添加ROS的环境变量,使得使用ros命令的时候可以直接找到这个环境下的可执行文件
rosrun learning_topic velocity_publisher #使用rosrun执行可执行文件velocity_publisher

补充:

我们也可以省掉每次运行添加环境变量这个步骤:

1 打开主目录下的影藏文件.bashrc
2 在最末尾加上 source /home/gzy/ROS/catkin_ws/devel/setup.bash

这样就在每次打开终端的时候自动添加了这个路径下的环境变量

Subscriber编程实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值