小强机器人学习笔记(1)

来源:互联网 发布:心怀魏阙的出处 知乎 编辑:程序博客网 时间:2024/05/02 23:34

问题1:roscore到底是什么,什么情况下必须先运行roscore

ERROR: Unable to communicate with master!

这是不运行roscore就rosnode list的下场。

但是小强机器人的远程链接

ssh xiaoqiang@xxx.xxx.xxx.xxx

这条指令一旦执行,就相当于运行了一个roscore,rostopic list和rosnode list就都直接能用了


问题二:复习一下以前的指令

参考:ros教程

节点http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingNodes

话题http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingTopics

rosrun [package_name] [node_name]
作用:rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)


rostopic echo [topic]
作用:可以显示在某个话题上发布的数据。



问题三:为什么视频传输不需要先建立远程链接

我想原因可能在于这句话

export ROS_MASTER_URI=http://xiaoqiang-desktop:11311     很重要

之前我们在我们电脑的/etc/hosts 文件内添加小强的 ip
192.168.X.X xiaoqiang-desktop

这样只要这句话一执行就相当于已经远程遥控了。

当我们在尝试使用rostopic list和rosnode list时,均可顺利执行,说明已经链接到小强。



实验表明这种方式和ssh方式的rostopic list和rosnode list看到的话题和节点是完全一样的

话题

/ORB_SLAM/Camera
/ORB_SLAM/Frame
/barDetectFlag
/camera_node/camera_info
/camera_node/image_raw
/camera_node/image_raw/compressed
/camera_node/image_raw/compressed/parameter_descriptions
/camera_node/image_raw/compressed/parameter_updates
/camera_node/image_raw/compressedDepth
/camera_node/image_raw/compressedDepth/parameter_descriptions
/camera_node/image_raw/compressedDepth/parameter_updates
/camera_node/image_raw/theora
/camera_node/image_raw/theora/parameter_descriptions
/camera_node/image_raw/theora/parameter_updates
/cmd_vel
/globalMoveFlag
/imu_cal
/joint_states
/nav_setStop
/odom_combined
/orb_scale/scaleStatus
/rosout
/rosout_agg
/system_monitor/report
/tf
/tf_static
/usb_cam/brightness
/usb_cam/image_raw
/xqserial_server/Odom
/xqserial_server/Pose2D
/xqserial_server/Power
/xqserial_server/StatusFlag
/xqserial_server/Twist

节点包括:

/appServer_node
/baselink_broadcaster
/camera_node
/joint_state_publisher
/motor_driver
/robot_state_publisher
/rosout
/system_monitor
/web_node


那么以后在远程控制的时候,如果我们都连在hrt的网络上(因为etc/host中的小强ip是我写的是在hrtwifi中他的的ip)我就可以直接export ROS_MASTER_URI=http://xiaoqiang-desktop:11311 就连接上了


那么问题来了


问题四:上面说的两条语句,同样是远程,区别在哪

我在使用了export ROS_MASTER_URI=http://xiaoqiang-desktop:11311之后,重新尝试了昨天的实验,但是发现首先系统状态(电量啊之类的)就查看不了

lielieyu@lielieyu-ThinkPad-T450:~$ export ROS_MASTER_URI=http://xiaoqiang-desktop:11311
lielieyu@lielieyu-ThinkPad-T450:~$ rostopic echo /system_monitor/report

ERROR: Cannot load message class for [system_monitor/Status]. Are your messages built?

同样,当我想远程控制小强运动时也失败了

rosrun nav_test control.py
[rospack] Error: package 'nav_test' not found

他说找不到这个包


所以我推测:我标红的那个命令是个假的,只是一个空壳,而没有实际内容,只能显示出小强上话题的名字而实际调用的时候却运行不了。


而摄像头之所以能用这种方式打开,事实上我推测是因为我们自己的电脑里有相关的包,这一点也得到了证实

这是他打开小强摄像头的程序

rosrun image_view image_view image:=/camera_node/image_raw _image_transport:=compressed

这是我从我的电脑中找这个包的语句

lielieyu@lielieyu-ThinkPad-T450:~$ rospack find image_view
/opt/ros/kinetic/share/image_view

说明image_view这个包在我电脑中是存在的

我估计后半句的意思是把摄像头的图像赋值给某个东西,得在了解一下。

所以我感觉,这两种控制方式的区别就是,ssh是真控制,可以运行小强中的节点和包。而红字实际上还是只能运行我们自己电脑中的包,是假控制。

感觉前者是我访问操作小强,而后者是小强把数据传给我。


从这个角度讲,就能解释我昨天遇到的问题了:我昨天ssh之后,又在ssh中进行视频传输的操作,这肯定不对。因为这里视频传输是我站在小强的外部,让小强给我发数据,昨天那么操作相当于我先ssh进入了小强内部,然后让小强给自己内部的东西发数据,这显然不合理。


所以我推测,二者一个是控制,另一个是通信。


原创粉丝点击