ROS小问题总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_28455067/article/details/79576983

1.Nodehandle句柄到底是什么

传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持。句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的。创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针。
NodeHandle节点类

  • ros::NodeHandle管理内部的引用计数
  • 开始节点
ros::NodeHandle nh;
  • 创建时候,如果内部节点没有开始,ros::NodeHandle会开始节点,ros::NodeHandle实例销毁,节点就会关闭。

命名空间

  • NodeHandle可以指点命名空间给构造器

命名空间

查阅ROS命名空间文档
NodeHandle可以指定命名空间给构造器:
ros::NodeHandle nh(“my_namespace”);
这使得任何相对名称可用,NodeHandle相对于<node_namespace>/my_namespace而不是 <node_namespace>。
也可以指定父NodeHandle和命名空间:
ros::NodeHandle nh1(“ns1”);
ros::NodeHandle nh2(nh1, “ns2”);
这个放nh2 进入<node_namespace>/ns1/ns2 命名空间.
全局名称

你可以指定全局名,如:
ros::NodeHandle nh("/my_global_namespace");
这通常不鼓励,因为它阻止了节点被推为命名空间(如roslaunch)。然而,有时在代码中使用全局名称可能是有用的。
私有名称

直接使用私有名称比使用带有私有名称的nodehandle方法会更令人混淆。
相反,你必须在一个私有空间创建一个新的nodehandle:
ros::NodeHandle nh("~my_private_namespace");
ros::Subscriber sub = nh.subscribe(“my_private_topic”, …);
上面的例子会订阅<node_name>/my_private_namespace/my_private_topic

2.ROS的可执行文件的名称

launch中有三个重要的参数,`name`,`pkg`,`type`
    分别代表着:
名称 作用
name 节点名,launch可以覆盖ros::init()
pkg 包名,CMakelist中的项目名称
type 可执行文件名称 ,add_executable(可执行文件名称,源文件)

PS:add_executable(${PROJECT_NAME}_node src/node/Stereo_Camera_node.cpp)

3.解决’ascii’ codec can’t decode byte 0xcb in position 29:ordinal not in range(128)

启动roslaunch时,出现

‘ascii’ codec can’t decode byte 0xcb in position 29:ordinal not in range(128)

解决方式:
工作空间的目录含有中文,切换到英文目录即可

4. catkin_make 错误:could not find CMAKE_ROOT!!!

  • 首先检查cmake版本,查看是否找到cmake 库
cmake --version   //检查cmake

如果没有报错,说明cmake 安装升级的时候更改了安装路径,基本在/usr/share,或者在。/usr/local/share中,如果
链接出现问题,可以重新安装cmake。

  • 安装步骤
  1. 首先卸载cmake
  2. 然后安装build-essential
    sudo apt-get install build-essential
  3. 重新安装Cmake 3.5.1
wget http://www.cmake.org/files/v3.5/cmake-3.5.1.tar.gz     //连接网络
tar xf cmake-3.5.1.tar.gz
cd cmake-3.5.1
./configure --prefix=/usr     //  配置选择安装路径       
make
sudo make install
cmake --version

然后可以解决问题

5.在launch 文件中重新打开一个终端

在launch文件中可以添加语句 aunch-prefix="gnome-terminal -e"

<launch>

        <arg name="marker_size"        default="0.18"/>
        <arg name="mark_frame_link"   default="camera_link"/>


    <node pkg="aruco_ros" type="landmark_pub_node" name="landmark_pub_node" output = "screen" launch-prefix="gnome-terminal -e">
        <remap from="/camera_info" to="/camera/rgb/camera_info" />
        <remap from="/image" to="/camera/rgb/image_raw" />

        <param name="marker_size" value="$(arg marker_size)"/>
        <param name="mark_frame_link" value="$(arg mark_frame_link)"/>
    </node>

</launch>

猜你喜欢

转载自blog.csdn.net/baidu_28455067/article/details/79576983
今日推荐