ros学习笔记

       

目录

1.如何直接添加源:

2.如何git clone 一个功能包后编译这个功能包

3.如何创建工作空间

4.如何创建功能包

5.ros工作空间介绍

6.创建了功能包,里面会包含一个CMakeLists.txt文件和package.xml

7.如何用.launch 同时运行多个节点

8.安装vim 应用

9.节点查看


  • 1.如何直接添加源:

一般在运行一个功能空间时,要先输入source ~/catkin_ws/devel/setup.bash

打开新终端输入:

sudo gedit .bashrc

在最后面添加 source ~/catkin_ws/devel/setup.bash

ros学习笔记_第1张图片

就可直接运行

  • 2.如何git clone 一个功能包后编译这个功能包

catkin_make --pkg rplidar_ros

3.如何创建工作空间

mkdir -p ~/catkin_ws/src  

cd ~/catkin_ws/src

catkin_init_workspace

cd ~/catkin_ws 进入到工作空间,cd 进入 cd ..退出

catkin_make编译工作空间

4.如何创建功能包

catkin_create_pkg  功能包名字  依赖项

catkin_create_pkg rplidar_ros roscpp std_msgs

 

5.ros工作空间介绍

src文件夹叫源文件空间:放置功能包、项目、克隆包等 

build文件夹叫做编译空间,CMake和catkin为功能包和项目保存缓存信息和配置

devel 叫做开发空间,保存编译后的程序

 

6.创建了功能包,里面会包含一个CMakeLists.txt文件和package.xml

创建节点,打开新终端 ctrl+alt+T

cd ./catkin_ws/src/a_pkg  到达这个下

touch a.cpp 创建一个.cpp文件

节点名node_a

发布消息程序如下

#include "ros/ros.h"    //包含了使用ROS节点的必要文件
#include "std_msgs/String.h"    //包含了使用的数据类型
#include 
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_a");    //初始化ROS,节点名命名为node_a,节点名必须保持唯一
    ros::NodeHandle n;    //实例化节点, 节点进程句柄
    ros::Publisher pub = n.advertise("str_message", 1000);    //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(10);    //设置发送数据的频率为10Hz
//ros::ok()返回false会停止运行,进程终止。
    while(ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss<<"Hello World";
        msg.data = ss.str();
        ROS_INFO("node_a is publishing %s", msg.data.c_str());
        pub.publish(msg);    //向话题“str_message”发布消息
        ros::spinOnce();    //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
        loop_rate.sleep();    //按前面设置的10Hz频率将程序挂起
    }
 
    return 0;
}

接受节点文件名b.cpp,节点名node_b

#include "ros/ros.h"
#include "std_msgs/String.h"
//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
}
 
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_b");    //初始化ROS,节点命名为node_b,节点名必须唯一。
    ros::NodeHandle n;    //节点句柄实例化
    ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback);    //向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用chatterCallbck函数。
 
    ros::spin();    //程序进入循环,直到ros::ok()返回false,进程结束。
 
    return 0;
}

编号程序,想要节点运行,还需在编写 CMakeLists,txt文件

add_executable(a src/node_a.cpp)    #将node_a.cpp文件编译成可执行文件Test1_node_a
add_executable(b src/node_b.cpp)

add_dependencies(a ROS_Test1_generate_message_cpp)    #添加可执行文件的消息依赖项
add_dependencies(b ROS_Test1_generate_message_cpp)

target_link_libraries(a ${catkin_LIBRARIES})    #为可执行文件Test_node_a添加链接库
target_link_libraries(b ${catkin_LIBRARIES})

在终端中输入

catkin_make rplidar_ros(包名)

7.如何用.launch 同时运行多个节点

在功能包下创建一个专门放launch文件的包

cd  ~/catkin_ws/src/rplidar_ros

mkdir launch

vim a.launch(若没有vim,使用命令 sudo apt-get install vim)






8.安装vim 应用

cd 到文件家目录

vim 文件名.launch 

按i可以编辑

退出按esc,按 

:w 保存

:q  退出

ros学习笔记_第2张图片

 

9.节点查看

rosnode list 

rosrun rqt_graph rqt_graph

下面所有关于moveit的报错,都是因为没有安装 Moveit造成的,

所以

    sudo apt-get install ros-indigo-moveit-full
    可以解决下面所有关于moveit的报错

 

1 , could not find a package configuration file provided by "moveit_core" with

-- sudo apt-get install ros-indigo-moveit-core


2 , Could not find a package configuration file provided by "control_toolbox"

--  sudo apt-get install ros-indigo-control-toolbox


3, Could not find a package configuration file provided by
  "gazebo_ros_control" with any of the following names:

--  sudo apt-get install ros-indigo-gazebo-ros-control


总的来说就是缺少什么装什么


rosdep update , rosdep init 出问题时,基本都是公司的网络设置造成的。

 

 

参考:https://blog.csdn.net/David_Han008/article/details/53966532

你可能感兴趣的:(Linux)