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。
- 安装步骤
- 首先卸载cmake
- 然后安装build-essential
sudo apt-get install build-essential
- 重新安装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>