小车初步启动控制
小车终端运行l:
roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
控制终端运行(多机通讯设置后,可以不必执行这一步)
export ROS_HOSTNAME=192.168.224.122(控制终端ip)export ROS_MASTER_URI=http://192.168.224.208:11311(小车终端ip)rostopic list
输出
rostopic: error: you may only specify one input topic
rostopic echo /odom
键盘控制
roslaunch wheeltec_robot_rc keyboard_teleop.launch
多机通讯设置(源自以下链接,此处只做备份使用)
ROS连接两台设备
利用Ros通信,两台电脑需要处于同一局域网下.
1、查看主机/从机 ip hostname
$ ifconfig 查看ip
如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;
如果电脑连接的是无线,则 wlan0 部分的 inet addr 后就是 IP 地址。
$ cat /etc/hostname 查看hostname
2、修改hosts文件内容
$ sudo gedit /etc/hosts 注意hosts别打错了= =
A电脑(主机)
127.0.0.1 localhost
127.0.1.1 hostname_A
IP_A hostname_A
IP_B hostname_B
B电脑(从机)
127.0.0.1 localhost
127.0.1.1 hostname_B
IP_B hostname_B
IP_A hostname_A
3、修改bashrc文件内容
$ sudo gedit ~/.bashrc
在文件最后一行添加如下代码
A设备:
export ROS_MASTER_URI=http://hostname_A:11311
export ROS_HOSTNAME=hostname_A
B设备:
export ROS_MASTER_URI=http://hostname_A:11311
export ROS_HOSTNAME=hostname_B
A B 终端分别执行
source ~/.bashrc
4、测试
A:
$ roscore
$ rosrun turtlesim turtlesim_node
B:
$ rosrun turtlesim turtle_teleop_key
then, 就可以在从机B上用键盘控制主机A上小乌龟的移动啦
使用ROS连接两台电脑时,只能看到对方设备的IP,但是订阅不到ros消息_ros主从机通讯,从机接收不到主机的话题数据-CSDN博客
一键终端输入
为了简化在终端的输入步骤我把需要的命令都做成了.sh文件,代码如下,执行方式是在终端中输入./文件名.sh,读者请根据自己的文件夹和ip修改
001start_roscar_PC.sh
echo " " | sudo mount -t nfs 192.168.31.101:/home/wheeltec/wheeltec_robot /mnt/ros1_7000
#export ROS_HOSTNAME=192.168.31.99
#export ROS_MASTER_URI=http://192.168.31.101:11311./001_1SCP_SSH.sh
001_1SCP_SSH.sh
#!/usr/bin/expect
set login "登录端的用户名"
set addr "192.168.31.101"
set password "登录端的密码"spawn scp 001start_roscar_wheeltec.sh $login@$addr:~/wheeltec_robot/code_shexpect "$login@$addr\'s password:"
send "$password\r"
expect "#"spawn ssh -Y $login@$addrexpect "$login@$addr\'s password:"
send "$password\r"
expect "#"send "./wheeltec_robot/code_sh/001start_roscar_wheeltec.sh\r" # 这是我要执行的指令文件存放在登陆段的文件夹中interact
001start_roscar_wheeltec
cd ~/wheeltec_robot
source devel/setup.bash
#roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
#export ROS_IP=191.168.31.99 #这一句加上就打不开ros
roslaunch turn_on_wheeltec_robot mapping.launch
报错
ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/wheeltec/wheeltec_robot/src
ROS path [2]=/opt/ros/melodic/share
在小车终端下输入(不出现此错误则跳过)
sudo apt-get install ros-melodic-gmapping #根据自己的ros版本更改中间的名字我的是melodic
安装成功后输入
roslaunch turn_on_wheeltec_robot mapping.launch
雷达出错
我的雷达是镭神n10p所以我找到了对应的launch驱动文件
复制lsx10p到小车工作空间下src的文件夹
编译
catkin_make -DCATKIN_WHITELIST_PACKAGES="lsx10"
报错
WARNING: package "orb_slam2_ros" should not depend on metapackage "image_common" but on its packages instead
我没有理会
接着按照雷达的型号修改来lsx10功能包下的lslidar_driver/launch/lslidar_serial.launch文件
我的是n10p
接着打开rviz
Global Option下的Fixed Fram下输入laser(下拉菜单没有就自己输入)
增加LaserScan话题
雷达可以正常显示了。
下一步修改ros原雷达驱动。
在wheeltec小车中,雷达启动文件是
roslaunch rplidar_ros rplidar.launch
原有的 rplidar.launch
<launch><node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen"><param name="serial_port" type="string" value="/dev/wheeltec_lidar"/><param name="serial_baudrate" type="int" value="115200"/><!--A1/A2 --><!-- <param name="serial_baudrate" type="int" value="256000"/>--><!--A3 --><!--<param name="serial_baudrate" type="int" value="1000000"/>--> <!--S2 --><param name="frame_id" type="string" value="laser"/><param name="inverted" type="bool" value="false"/><param name="angle_compensate" type="bool" value="true"/></node>
</launch>
在导航的启动文件中我们发现雷达的launch文件是wheeltec_lidar.launch
开头第一句可以选择雷达型号
<arg name="rplidar_mode" default="ls_M10_uart" doc="opt: ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>
我对应型号修改后是
<arg name="rplidar_mode" default="ls_N10P" doc="opt: ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>
编译修改后的包
catkin_make -DCATKIN_WHITELIST_PACKAGES="turn_on_wheeltec_robot"
建图
小车终端下输入:
roslaunch turn_on_wheeltec_robot mapping.launch
电脑控制端打开rviz
在电脑控制端下输入rviz
配置rviz界面
Global Option在的Fixed Frame选择map!
按照显示添加RobotModel、TF;
按照话题添加LaserScan和Map;
此时才会显示地图
新开一个小车控制端口输入键盘控制命令
roslaunch wheeltec_robot_rc keyboard_teleop.launch
操纵小车移动,建立完整的地图
此外如果小车的初始位置不对,去找机身上的reset按键,按一下
保存地图
方法一:
这种方法保存的名字的默认的wheeltec,roslaunch turn_on_wheeltec_robot map_saver.launch;
地图保存在: 工作空间目录/src/turn_on_wheeltec_robot/map
这个方法保存的地图在之后的导航中会直接调用该地图。
方法二:
rosrun map_server map_saver -f 地图名
直接保存在工作空间目录下,但是好处是自主命名。
导航
roslaunch turn_on_wheeltec_robot navigation.launch
rviz配置
启动rviz和配置rviz的方式初步与建图是一致的
如果出现:点击2D Pose estimate后机器人位置没有改变的问题
仔细检查之前的“多机通讯设置”中的ip是否出错
如果没有设置静态ip 那么机器的ip地址会发生变化,导致出错,建议固定ip
固定ip的方式见以下链接:
Wheeltec小车的开发实录(0)-CSDN博客
总体需要添加的检测项如下
其中两个map订阅的话题一个是全局地图一个是局部地图
path设置
新加的两个path一个是全局一个是局部
左键选中
单击地图上的一点,便会自动规路径到达目标点
多个目标点
选中后,单击介个地图点就可以,别的方法教学视频有我就不写了。rviz配置那一节里了。