记录学习ROS day01 第一个Node节点

创建节点前准备

因为节点不能脱离包而存在,所以为Node找一个上级组织——包,eg:ssr_pkg(格式为xx_pkg)。注:也可以用集合的包含关系来解释

此时在这个ssr_pkg包中就有了此节点,随便命个名:超声波_Node(格式为xx_Node)。

工作空间:catkin_ws 文件夹

创建软件包:首先进入工作空间src目录下

cd catkin_ws/src/                 #进入工作空间的src目录下
catkin_create_pkg ssr_pkg rospy roscpp std_msgs     #创建包  catkin_create_pkg <包名> <依赖项列表>

解释一下:依赖项(把通用的节点/资源封装在一起,形成的包,因此这个包就成了通用的依赖项,可以参考Java语言中的“封装”思想)。所以以下3项均为包,查看包可以用:roscd roscpp通过ls查看,创建包时,也一定要选择系统中已经存在的软件包!

rospy    python语言支持

roscpp   C++语言支持

ros std_msgs   标准消息包

这里创建了4个项,前两个是文件,后俩是目录(位置在工作空间下src下,进入包中ssr_pkg,便可看到)

接下来进入VSCode中,找到ssr_pkg目录下,可以看到多了CMakeLists.txt文件,这个文件是编译相关的配置文件。package.xml是对包的描述。

创建Node节点

进入code,在ssr_pkg包下的src,右键创建文件,命名chao_node.cpp(格式:xx_node.cpp)

首先

#include <ros/ros.h>

int main(int argc, char  *argv[])
{       
        ros::init(argc,argv,"chao_node");
        printf("Hello World!\n");
        return 0;
}

接下来在CMakeLists.txt文件最后加上

add_executable(chao_node src/chao_node.cpp)

解释一下:代码来源CMakeLists.txt文件中,在build下找合适的编译规则

原指令:# add_executable(${PROJECT_NAME}_node src/ssr_pkg_node.cpp)

其中:${PROJECT_NAME}_node是可执行文件名,我这里的可执行文件是chao_node,

第二项src/ssr_pkg_node.cpp是指定从哪个代码文件进行编译,这里选择的是src目录下的chao_node.cpp

所以更改为上述指令,最后别忘了去掉#以及保存。

编译节点

在code中:Ctrl+shift+B

或者在终端依次输入

cd catkin_ws       #进入包中
catkin_make          #编译整个包

运行节点

首先启动ros系统,在终端中输入roscore

运行节点

rosrun ssr_pkg chao_node

解释:rosrun <包名> <节点文件>

若出现找不到ssr_pkg包,source一下(找到setup.bash,也可以尝试把工作空间的环境参数加载到终端程序中,具体操作见补充)

source ~/catkin_ws/devel/setup.bash

然后重新运行节点

你就会得到"Hello World!"啦

完善节点信息

以下为一个案例:

#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char  *argv[])
{       
        ros::init(argc,argv,"chao_node");
        printf("我是111!\n");

        ros::NodeHandle nh;
        ros::Publisher pub = nh.advertise<std_msgs::String>("shang_ke_le",10);


        ros::Rate loop_rate(10);
        while(ros::ok())
        {
           printf("我要刷屏了\n");
           std_msgs::String msg;
           msg.data = "我是傻子";
           pub.publish(msg);
           loop_rate.sleep();
        }
        return 0;
}

诸君且听我娓娓道来

ros::init(,,);           //用来初始化,前两个是mian的参数:argc,argv,第三位填节点名称

有了这个,就要有相对应的库函数:#include <std_msgs/String.h>

在CMakeLists.text文件中,加上:

target_link_libraries(chao_node
  ${catkin_LIBRARIES}
)

然后编译,运行....

补充:

最后:把工作空间的环境参数加载到终端程序中

在终端输入

code ~/.bashrc

进入到了setup.bash文件,在这个文件的最后加上

source ~/catkin_ws/devel/setup.bash

就欧克啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值