ROS小问题总结

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

ros::init(argc, argv, "hec395");
ros::NodeHandle nh;  
ros::Publisher IMU_pub = nh.advertise<sensor_msgs::Imu>("imu_data", 50);
ros::NodeHandle nh("myname");  
ros::NodeHandle nh("~myname");  
ros::NodeHandle nh("~");  
--------------------- 
作者:weixin_33751566 
来源:CSDN 
原文:https://blog.csdn.net/weixin_33751566/article/details/86873834 
版权声明:本文为博主原创文章,转载请附上博文链接!

在这里插入图片描述

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值