ROS基础(一):创建工作空间与功能包&发布者Publisher的编成实现

学习ROS基础的电子笔记,摘录自各类ROS基础课程,文末会附上本次内容参考的相关课程视频链接。

  1. 工作空间( workspace ):工作空间是一个存放工程开发相关文件的文件夹
  • src:代码空间(source space)
  • build:编译空间(build space)
  • devel:开发空间(development space)
  • install:安装空间(install space)
// 创建工作空间catkin_ws
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

// 编译工作空间catin_ws
cd ~/catkin_ws/
catkin_make
catkin_make install

// 设置环境变量
vim devel/setup.bash
source devel/setup.bash

// 查看环境变量
echo $ROS_PACKAGE_PATH
  1. 功能包:ROS中放置源码的最小单元
    它的创建语句基本格式如下:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3] ...
  • <package_name>指功能包的名称
  • [depend] 是创建的功能包需要依赖的ROS其它功能包的名称
// 创建功能包
cd ~/catkin_ws/src;
catkin_create_pkg test_pkg rospy roscpp std_msgs

// 编译功能包
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

在功能包命名时需要注意的规则,在同一工作空间下,不允许存在同名功能包;在不同工作空间下,允许存在同名功能包。

  1. 话题模型(发布/订阅)
  • 这个例子是海龟运动模拟,其实现代码如下:
// 创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

// 编写velocity_publisher.cpp
 vim ~/catkin_ws/src/learning_topic/src/velocity_publisher.cpp

// 编写cpp文件内容
/**
 * 该例程将发布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_msg::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相关的API的一些资源,创建发布者、API调用,都是使用句柄进行调用的。
  • 配置发布者代码编译规则
vim ~/catkin_ws/src/learning_topic/CMakeLists.txt
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
  • add_executable语句,其主要作用是将src目录下的velocity_publisher.cpp文件编译为可执行文件velocity_publisher。
  • target_link_libraries语句,其主要作用是链接外部依赖的libraries。
  • 开始编译运行
// 编译程序
cd ~/catkin_ws
catkin_make
source devel/setup.bash

// 运行程序
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher

在执行第2句rosrun时,发现在catkin_make后的终端中运行才是可行的,任意终端不可行。我认为应该是&ROS_PACKAGE_PATH路径设置的问题,但因为系统里还存在其他工作空间,如何管理这部分的路径是一个问题,留待后续解决。
程序运行结果如下:
在这里插入图片描述
参考课程: ROS入门21讲(古月居-第11讲)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值