ROS-nanorobot教学
2 base_control功能包使用及作用
1、使用Xshell无线连接到nanocar
2、运行指令
roslaunch base_control base_control.launch
3、新开一个会话,连接上nanocar,如果 PC 上的系统中没有安装 teleop_twist_keyboard 功能包则需要手
动安装 sudo apt-get install ros-kinetic-teleop-twist-keyboard
4、然后启动键盘控制功能包
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
可以得到:
前进 i
后退 ,
静止k
左前拐 u
同理右前拐,左后拐,右后拐,j和l无反应
q/z 增加/降低速度(包括线速度和角速度)
w/x 增加/降低线速度
e/c 增加/降低角速度
注意,在调整速度的时候,默认会执行最后一次的方向,所以在调整速度的时候可以按下k后在调整,且必须在该终端下。
5、用手机控制,在Master URI下
http://192.168.31.75:11311
然后点击连接即可控制,需在同一个wifi下
4、ROS话题列表查看及话题订阅
在完成3的前提下,查看当前哪些话题在使用
rostopic list
如果想查看话题的信息:
rostopic echo /话题名字
eg:
rostopic echo /battery
5、ubuntu虚拟机的使用及ROS分布式通讯介绍
1、首先使用Xshell启动base_control.launch文件
2、然后确定虚拟机网络是桥接模式
3、修改虚拟机中的配置文件
sudo vim /etc/hosts
要加上一句
192.168.31.75 matser_ip
# 也就是机器人的ip
# 因为使用的不是提供的虚拟机,所以我们在这里修改了为了防止影响其他的使用,一般在使用完之后会修改回来
4、修改.bashrc 文件
打开
vim ~/.bashrc
在文件末尾
加上
#nanocar ROS多机通讯的配置
export ROS_IP=`hostname -I | awk '{print $1}'`
export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
export ROS_MASTER_URI=http://master_ip:11311
source ~/nanorobot/devel/setup.bash
5、这里我使用的是自己搭建的环境,所以还需要修改nanocar的配置,如果不是自己的环境就不需要修改,修改的话是:
在机器人下:
vim ~/.bashrc
然后,将里面的
export ROS_IP=`hostname -I | awk '{print $1}'`
export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
export ROS_MASTER_URI=http://master_ip:11311
三行中的最后一行修改为:
export ROS_MASTER_URI=http://`hostname -I | awk '{print $1}'`:11311
至此,分布式通讯配置完成
如果没问题的话,在Xshell运行base_cotrol情况下,在PC终端可以查看rostopic话题
PC下
rostopic list
如果有打印出话题列表则设置正常,如果输出“ERROR: Unable to
communicate with master!”则设置有问题,请检查设置
6、ubuntu下ssh远程登陆和免密登录设置
1、远程登录:前提是完成第5节中的配置
ssh nanorobot@192.168.31.75
2、免密登录
退出机器人端
exit
然后在PC端
ssh-keygen
一路回车过去
然后输入:
ssh-copy-id -i .ssh/id_rsa.pub nanorobot@192.168.31.75
# 后面为自己的机器人的id
输入密码,会出现:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'nanorobot@192.168.31.75'"
and check to make sure that only the key(s) you wanted were added.
可惜我没成功,不知道为啥,不过这不重要,不影响之后的实验。
7、启动机器人摄像头并查看图像
1、首先在虚拟机登陆进机器人
两种方法都行,第一种方法要进行第5节
ssh nanorobot@master_ip
ssh nanorobot@192.168.31.75
2、在nanorobot下执行:
启动摄像头
roslaunch robot_vision robot_camera.launch
3、在PC端检查一下话题
rostopic list
结果是:
/camera_info
/image_raw
/image_raw/compressed
/image_raw/compressed/parameter_descriptions
/image_raw/compressed/parameter_updates
/image_raw/compressedDepth
/image_raw/compressedDepth/parameter_descriptions
/image_raw/compressedDepth/parameter_updates
/image_raw/theora
/image_raw/theora/parameter_descriptions
/image_raw/theora/parameter_updates
/rosout
/rosout_agg
4、查看图像
rqt_image_view
如果没有安装rqt,执行下面四句代码即可:
sudo apt-get install ros-kinetic-rqt -y
sudo apt-get install ros-kinetic-rqt-multiplot -y
sudo apt-get install libqwt-dev -y
sudo rm -rf ~/.config/ros.org/rqt_gui.ini
8、人脸检测demo演示
1、 在机器人端启动摄像头
roslaunch robot_vision robot_camera.launch
2、在机器人端启动人脸识别,但是在电脑上启动也是可以,因为ros分布式通讯,这个节点与硬件无关,所以可以
roslaunch robot_vision face_detector.launch
3、在PC端启动rqt
rqt_image_view
4、选择消息类型为:
/cv_bridge_image
10、机器人激光SLAM建图demo演示
1、在机器人端
启动激光SLAM的laucnh文件:
roslaunch robot_navigation robot_slam_laser.launch
2、启动PC端图形环境:
roslaunch robot_navigation slam_rviz.launch
3、启动键盘控制的节点,PC端:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
4、在机器人端保存地图
roscd robot_navigation/maps //直接跳转到功能包下
rosrun map_server map_saver -f map
地图保存完成,为导航做好准备
11、机器人导航动态避障demo演示
1、前提是已经完成第10讲,并保存了地图
2、Demo 中默认使用 maps 文件夹下的 map 文件,如果需要使用其他文件,请修改 robot_navigation.launch 文件中的文件名或者路径:
<arg name="map_file" default="$(find robot_navigation)/maps/map.yaml"/>
3、由于我的小车是四轮 小车,不适合阿克曼结构存在最小转向半径,不可原地转向,所以通过planner传入参数制定TEB规划器
roslaunch robot_navigation robot_navigation.launch planner:=teb
4、在PC端打开rviz
roslaunch robot_navigation navigation_rviz.launch
12、机器人Stage仿真的使用
这个用不到,也应该教程即可
13、机器人仿真建图与导航
同12
14、机器人多点巡航
1、启动机器人的导航应用,机器人端:
roslaunch robot_navigation robot_navigation.launch planner:=teb
2、在PC端打开rviz界面
roslaunch robot_navigation navigation_rviz.launch
3、定位
4、这里要使用laucnh文件,可以先去其目录下看一下
roscd robot_navigation/launch/
ls
vim way_point.launch
结果为:
<launch>
<!-- For Simulation -->
<arg name="sim_mode" default="false" />
<param name="/use_sim_time" value="$(arg sim_mode)"/>
<arg name="loopTimes" default="0" />
<!-- move base -->
<node pkg="robot_navigation" type="way_point.py" respawn="false" name="way_point" output="screen">
<!-- params for move_base -->
<param name="goalListX" value="[1.0, 1.0, 0.5, 0.5]" />
<param name="goalListY" value="[0.0, 0.5, 0.5, 0.0]" />
<param name="goalListZ" value="[0.707, 1.0, -0.707, 0.0]" />
<param name="loopTimes" value="$(arg loopTimes)"/>
<param name="map_frame" value="map" />
</node>
</launch>
5、确定目标点
在PC端执行:
订阅话题
rostopic echo /move_base_simple/goal
然后让小车去目标点,使用rviz里的2D Nav goal
然后记录下来订阅话题的消息的position里的x、y和orientation里的z,这三个值是我们关心的,精确到小数点后两位就可以了
这里我选择了三个点:
simple/goal
header:
seq: 0
stamp:
secs: 1617244345
nsecs: 381119024
frame_id: "map"
pose:
position:
x: 2.47713708878
y: -0.0375968813896
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.194478361895
w: 0.980906808395
---
header:
seq: 1
stamp:
secs: 1617244360
nsecs: 542564238
frame_id: "map"
pose:
position:
x: 2.4008102417
y: 0.458069682121
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.997299830726
w: -0.07343737219
---
header:
seq: 2
stamp:
secs: 1617244372
nsecs: 70168956
frame_id: "map"
pose:
position:
x: 0.0802084356546
y: 0.016568094492
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.999992663691
w: -0.00383047826046
---
则在机器人端修改成:
<launch>
<!-- For Simulation -->
<arg name="sim_mode" default="false" />
<param name="/use_sim_time" value="$(arg sim_mode)"/>
<arg name="loopTimes" default="0" />
<!-- move base -->
<node pkg="robot_navigation" type="way_point.py" respawn="false" name="way_point" output="screen">
<!-- params for move_base -->
<param name="goalListX" value="[2.48, 2.40, 0.08]" />
<param name="goalListY" value="[-0.03, 0.46, 0.02]" />
<param name="goalListZ" value="[-0.19, 1.00, 1.00]" />
<param name="loopTimes" value="$(arg loopTimes)"/>
<param name="map_frame" value="map" />
</node>
</launch>
6、在机器人端启动多点巡航:
roslaunch robot_navigation way_point.launch
# 此为无限循环
roslaunch robot_navigation way_point.launch loopTimes:=2
# 此为循环两次
这里我们 loopTimes 参数为巡航次数,设置为 2 则机器人在巡航点
来回巡航两遍后停止,如果设置为 0 则一直巡航。
机器人在巡航中每到达一个巡航点会输出下一巡航点的目标 ID,巡
航次数到达后会输出 Loop: 2 Times Finshed 信息,到这里巡航功能
就介绍完了。
为了避免混乱,我们来梳理一下,通过 rviz 发布目标点,输出 goal
话题,修改 launch 文件,只是为了正确的设置巡航点坐标,并不是
每次都要执行的操作,在以后执行巡航只需要 3 个步骤
第一, 启动机器人导航的 launch 应用
第二, 指定机器人在地图中真实位置
第三, 启动巡航的 launch
15、感言
此主要为自己做笔记,如有问题,留言一起讨论呀,解决问题点个赞支持下呀!!!