@Jockey 打包时缺少了一些头文件。这里的.h文件也需要添加到头文件引用中 https://github.com/BluewhaleRobot/GalileoSDK/tree/master/iot
使用最新的1.3.4版本,已经添加了对应的头文件
@Jockey 打包时缺少了一些头文件。这里的.h文件也需要添加到头文件引用中 https://github.com/BluewhaleRobot/GalileoSDK/tree/master/iot
使用最新的1.3.4版本,已经添加了对应的头文件
在Ubuntu上安装CUDA一直是比较麻烦的事情。由于不同版本的CUDA对显卡驱动有着不同的需求。而在有些电脑上安装最新的Nvidia闭源显卡驱动会导致无法进入图形界面。CUDA中也自带了Nvidia的显卡驱动,但是如果采用默认安装,自动安装显卡驱动会导致电脑重启后无法进入图形界面。
下面就说明一下在Ubuntu上如何安装CUDA
首先安装Nvidia显卡驱动。这里采用ppa安装。
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
然后根据CUDA驱动版本要求安装驱动。也可以直接安装最新的驱动
# 2019-07-27 当前驱动最新版本
sudo apt-get install nvidia-430-dev
安装完成之后可以先重启一下。如果能够正常进入图形界面就说明驱动安装成功了。
接着下载和安装CUDA。注意下载时选择下载.run的文件。这个安装成功的概率更高。
安装CUDA需要关闭图形界面
按下 Ctrl + Alt + F1
进入文本界面,输入用户名密码登录后。输入
sudo service lightdm stop
关闭图形界面。
然后给下载的run文件添加可执行权限
# xxx是你的cuda安装文件名称
sudo chmod +x xxx.run
接着执行这个run文件
./xxx.run
根据提示进行安装,注意默认是会安装自带的显卡驱动的,这个一定要禁用掉。否则再重启之后就无法开机了
。
安装完成之后根据最后的提示修改环境变量就可以了。
@lovelyyoshino 可能是充电模块串口没插好,也可能是udev规则没设置好
GalileoSDK是由我们开发的机器人导航系统SDK。通过SDK用户能够方便的操控机器人。现在小强用户已经可以免费体验到SDK的功能了。SDK内部集成了物联网连接功能。设置完成后用户能够通过SDK跨局域网遥控和获取机器人状态。下面介绍物联网功能的配置方法。
首先获取自己机器人的ID
在机器人上执行
bwgetid
会有如下输出
这一长串字符串就是你的ID
然后向 http://iot.bwbot.org/api/device
发送post数据,内容为此ID。
比如利用curl
curl -H "Content-Type: application/json" -X POST -d '"8FB56D27D6C961E9036F62182ADE9544D71E23C31E5DF4C7DD692B9E4296A131434B1066D365"' http://iot.bwbot.org/api/device
返回如下
{"status":"OK","description":"q2x9TeimxvuQh3UYpy1jD4729ac3QldX"}
description中的这一长串字符串就是你的物联网客户端密码,我们需要将其复制到system_monitor的IOT_SECRET中。然后在startup/launch/startup.launch
中添加iot节点。默认startup中是没有iot节点的。
<node pkg="system_monitor" type="iot_client.py" name="iot_client" respawn="true" respawn_delay="10"/>
这样机器人端已经设置完成。剩下的就是写一个物联网连接程序了。下面是一个c++的例子
#include "GalileoSDK.h"
#include "galileo_serial_server/GalileoStatus.h"
#ifndef _WIN32
void Sleep(uint64_t miliseconds)
{
usleep(miliseconds * 1000);
}
#endif
void testIOTSetSpeed()
{
connected = false;
GalileoSDK::GalileoSDK sdk;
//通过物联网连接机器人,第一个参数是机器人id,第二个参数是连接超时时间,第三个为机器人密码由[system_monitor中的 IOT_PASSWORD](https://github.com/BluewhaleRobot/system_monitor/blob/kinetic_service_bot/utils/config.py#L49)指定,最后是连接回调函数和离线回调函数。
if (sdk.Connect("8FB56D27D6C961E9036F62182ADE9544D71E23C31E5DF4C7DD692B9E4296A131434B1066D365", 10000, "xiaoqiang", NULL, NULL) != GalileoSDK::GALILEO_RETURN_CODE::OK)
{
std::cout << "Connect to server failed" << std::endl;
}
while (true)
{
galileo_serial_server::GalileoStatus status;
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
sdk.SetSpeed(0.1, 0);
Sleep(5 * 1000);
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
sdk.SetSpeed(0, 1);
Sleep(5 * 1000);
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
sdk.SetSpeed(-0.1, 0);
Sleep(5 * 1000);
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
sdk.SetSpeed(0, -1);
Sleep(5 * 1000);
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
sdk.SetSpeed(0, 0);
Sleep(5 * 1000);
sdk.GetCurrentStatus(&status);
std::cout << "currentSpeedX: " << status.currentSpeedX << std::endl;
std::cout << "currentSpeedTheta: " << status.currentSpeedTheta << std::endl;
}
}
int main()
{
testIOTSetSpeed();
}
机器人会被这个程序遥控着进行前进后退等等。
@Arieszzh 你指令写错了,那个是让你根据系统输入的意思,linux输入
python setup.py build
ROS的网络通信提供了两种方式,一种是TCP协议,一种是UDP协议。默认采用TCP进行通信。但是在实际的WIFI网络使用中发现用户经常反馈客户端和机器人连接中断且无法重新建立连接。在ROS wiki中官方也有说明,ROSTCP更适合有线网连接的网络,而ROSUDP更适合wifi等网络不可靠的无线网络。下面介绍一下如何在ROS中使用UDP连接。
首先你的消息发布者必须是用roscpp写的。rospy不支持udp连接。然后在订阅的时候添加 ros::TransportHints
指定连接方式。如下面的代码
#include <ros/ros.h>
#include <std_msgs/String.h>
void print_message(const std_msgs::String data)
{
ROS_INFO_STREAM("received: " << data);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "udp_test_node");
ros::AsyncSpinner spinner(4);
spinner.start();
ros::NodeHandle private_nh("~");
ros::Subscriber chatter_sub = private_nh.subscribe("/chatter", 10, print_message,
ros::TransportHints().unreliable().maxDatagramSize(1000));
while (ros::ok())
{
sleep(1);
}
}
unreliable
会指定采用udp连接。
详细的例子可以参照这个项目
@雾琴水音 看看权限设置对不对,一般有这个的话是不会出现上面的错误的
连接路由器wifi,然后在地址栏输入 192.168.1.1
,打开路由器管理界面
设置管理员密码
点击中间窗口中的小×。
选择自动获取ip
设置wifi名称, 也可以不设置直接跳过
可以选择不设置密码, 选择加密
选择高级设置
选择wds无线桥接
点击下一步
选择要桥接的网络并输入wifi密码
等待连接完成
设置本路由的名称和密码
注意默认会设置成桥接的路由名称,这样就会找不到这个路由的wifi。可以设置成其他名称,这样在桥接之后就能找到这个路由wifi了
保存之后就桥接完成了
@huapiaoxiang21 sudo apt-get install ros-kinetic-audio-*
这样试试