ros初识笔记<3>

开坑time 2023-08-03 16:23:24

1. 创建工作空间与功能包

工作空间(workspace)

一个存放工程开发相关文件的文件夹

src(source space) :代码空间 (功能包)

build(Build space):  编译空间   (编译产生的中间文件)

devel(development space):开发空间 (编译生成的可执行文件,脚本)

install (Install space): 安装空间     (最终得到的一些可执行文件) 

 

创建工作空间:

已经有了,所以搞了第二个工作空间

catkin_init_workspace:将工作空间变成真正ROS的工作空间,实现属性的变化

接着做编译(空的工作空间也可以做编译)

回到工作根目录(catkin_ws)进行编译

catkin_make一下就可以了,会产生build和devel两个文件夹

 

再catkin_make install一下就可以生成install文件夹了

 

接下来可以在工作空间中开发代码

首先创建功能包(放置源码的最小单元)

cd ~/catkin_ws/src(放置在src里面)

catkin_create_pkg test_pkg(功能包名称) std_msgs rospy roscpp(依赖,py,cpp,std_msgs标准数据结构)

编译功能包

cd~/catkin_ws

catkin_make

source~/catkin_ws/devel/setup.bash

返回根目录catkin_make编译

最后进行环境变量设置

只有设置了环境变量

才能让系统找到工作空间

才能找到对应的功能包

再用echo $ROS_PACKAGE_PATH 来检查环境变量

查找所有ros功能包的路径

目的是打开新终端时,运行setup.bashsetup.bash可以让一些ROS* 开头的命令可以使用。

其他补充:

在终端中使用source命令设置的环境变量只能在当前终端中生效,如果希望环境变量在所有终端中有效,则需要在终端的配置文件中加入环境变量的设置:echo “source /WORKSPACE/devel/setup.bash”>>~/.bashrc,请使用工作空间路径替代 WORKSPACE。(将source /catkin_ws/devel/setup.bash命令放入.bashrc文件内)

CMakeLists规定了语法

package包含了功能包相关信息

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

不同工作空间下,允许存在同名功能包。

 

2.发布者Publisher的编程实现

模型图:

subscriber: 仿真器

message:数据类型:Twist,包含线速度和角速度

通过topic总线管道传输给sub

 

实现功能:不同于之前的键盘控制和命令行输入,采用程序控制海龟运动。

实现具体过程:

1.创建功能包

在src中创建功能包

 catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

 

2.创建发布者代码

古月滴例程(cpp版):

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/
 
/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
 
#include <ros/ros.h>                                          包含 头文件
#include <geometry_msgs/Twist.h>                  包含msgs库
 
int main(int argc, char **argv)
{
// ROS节点初始化,argc,argv为参数设置
ros::init(argc, argv, "velocity_publisher");
 
// 创建节点句柄,管理api资源
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);
 
// 设置循环的频率,pub的频率
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("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
vel_msg.linear.x, vel_msg.angular.z);
 
    // 按照循环频率延时
    loop_rate.sleep();
}
 
return 0;
}
 
步骤总结:
初始化ROS节点
向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
创建消息数据
按照一定频率循环发布信息
 
3.配置发布者代码编译规则
在CmakeLists里添加两行代码,把某个cpp编译成某个可执行文件
然后和ROS进行链接
设置需要编译的代码和生成的可执行文件
设置链接库
 
4.编译并运行发布者
直接在catkin_ws2(我是ws2工作空间)根目录下编译,catkin_make一下就编译会生成可执行文件
接着需要设置环境变量source devel/setup.bash
如果希望以后都不用设置的话
在主文件夹中按ctrl+h显示隐藏文件.bashrc双击打开在最后一行把

source /home/setiko/catkin_ws/devel/setup.bash添加上去

关掉所有终端

在catkin_ws2中打开终端运行roscore

再开一个终端运行rosrun turtlesim turtlesim_node

再开一个终端运行刚刚生成的可执行文件

rosrun learning_topic velocity_publisher

然后就达到了运行程序驱动小海龟的效果

ctrl+c结束进程

 

最后是python版本

不清楚怎么运行

 

 

2023-08-06 12:43:29

posted @ 2023-08-06 12:44  setiko  阅读(59)  评论(0)    收藏  举报