Faits :
A.
Par jugement du 9 novembre 2017, le Tribunal criminel de l'arrondissement de Lausanne a libéré X._ des chefs de prévention d'escroquerie et de violation d'une obligation d'entretien et l'a condamné, pour blanchiment d'argent et infraction grave à la LStup, à une peine privative de liberté de trois ans et demi, sous déduction de 444 jours de détention avant jugement, peine partiellement complémentaire à celle prononcée le 16 septembre 2015 par la Cour d'appel pénale vaudoise et partiellement additionnelle à celle prononcée le 20 octobre 2015 par le Ministère public du canton de Fribourg. Il a en outre révoqué les sursis accordés au prénommé les 16 septembre et 20 octobre 2015, a constaté que celui-ci avait subi six jours de détention dans des conditions illicites et a ordonné que trois jours soient déduits de sa peine.
B.
Par jugement du 29 mars 2018, la Cour d'appel pénale du Tribunal cantonal du canton de Vaud, statuant notamment sur l'appel formé par X._ contre ce jugement, a confirmé celui-ci pour ce qui le concernait.
La cour cantonale a retenu les faits suivants.
B.a. X._ est né en 1969 en Guinée-Conakry. Il est arrivé en Suisse en 1996 après avoir transité par l'Italie. Il s'est marié en 2001, deux enfants étant nés de cette union. Le prénommé est devenu Suisse en 2007. Il a divorcé en 2011, puis a eu deux nouveaux enfants avec une autre femme. Entre 2001 et 2011, X._ a eu divers employeurs. Depuis 2012, il émarge à l'aide sociale.
Son casier judiciaire suisse fait état d'une condamnation, en 2015, pour délit et crime contre la LStup ainsi qu'infractions d'importance mineure, et d'une condamnation, la même année, pour violation d'une obligation d'entretien.
B.b. La Brigade des stupéfiants de A._ a, dans le cadre d'une opération "B._", mis en évidence un trafic international de cocaïne conduit par une organisation guinéenne. Celle-ci avait des ramifications dans plusieurs pays d'Europe de l'ouest, notamment en Belgique, en France, aux Pays-Bas et en Suisse. Dans ce dernier pays, l'enquête a identifié un certain C._, lequel était l'un des commanditaires et organisateurs de l'envoi de cocaïne en Suisse. La surveillance directe d'un raccordement téléphonique utilisé par C._ a permis d'intercepter plusieurs conversations entre ce dernier et X._. L'analyse des conversations a permis de comprendre que le dernier nommé allait se rendre en France, afin de prendre en charge une "mule" pour la conduire en Suisse. Un dispositif d'observation a été mis en place durant la nuit du 21 au 22 août 2016. X._ s'est alors rendu en France au volant de sa voiture, y a pris en charge la "mule" D._, puis a regagné la Suisse pour être finalement interpellé à E._. Huit blocs de cocaïne, d'un poids net de 1,640 kg, ont été découverts scotchés sur le corps de D._. L'analyse de la drogue saisie a permis d'établir que celle-ci présentait un taux de pureté de 75,1%, soit une masse de substance pure correspondante de 1'232,90 g.
B.c. A A._, entre septembre 2010 et juin 2016, X._ a transféré à l'étranger, par l'intermédiaire d'agences de transfert de fonds, environ 31'546 fr. à destination de différentes personnes de sa famille et de tiers sans lien de parenté.
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre le jugement du 29 mars 2018, en concluant, avec suite de frais et dépens, principalement à sa réforme en ce sens qu'il est acquitté, qu'il est immédiatement libéré et qu'un délai lui est imparti pour faire valoir ses prétentions fondées sur l'art. 429 CPP. Subsidiairement, il conclut à son annulation et au renvoi de la cause à l'autorité précédente pour nouvelle décision, sa libération immédiate étant par ailleurs ordonnée et un délai lui étant imparti pour faire valoir ses prétentions fondées sur l'art. 429 CPP. Il sollicite en outre le bénéfice de l'assistance judiciaire.

Considérant en droit :
1.
Le recourant reproche à la cour cantonale d'avoir arbitrairement retenu qu'il savait, lors du trajet entre la France et la Suisse à l'issue duquel il a été appréhendé, que D._ transportait de la drogue.
1.1. Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de fait de la décision entreprise (art. 105 al. 1 LTF), à moins qu'elles n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, à savoir, pour l'essentiel, de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat (<ref-ruling> consid. 2.3.1 p. 244). En matière d'appréciation des preuves et d'établissement des faits, il n'y a arbitraire que lorsque l'autorité ne prend pas en compte, sans aucune raison sérieuse, un élément de preuve propre à modifier la décision, lorsqu'elle se trompe manifestement sur son sens et sa portée, ou encore lorsque, en se fondant sur les éléments recueillis, elle en tire des conclusions insoutenables (<ref-ruling> consid. 1.1 p. 503; <ref-ruling> consid. 2.3 p. 266 et les références citées). Le Tribunal fédéral n'entre ainsi pas en matière sur les critiques de nature appellatoire (<ref-ruling> consid. 2.4 p. 368).
1.2. La cour cantonale a fait siennes les constatations du tribunal de première instance à cet égard. Il en ressortait que, durant l'enquête, le recourant avait expliqué avoir rencontré par hasard D._ à F._, ce dernier l'ayant abordé pour lui demander de le transporter en Suisse. Confronté aux écoutes téléphoniques, le recourant avait indiqué, de manière extrêmement confuse, avoir voulu rendre service à C._ en allant chercher pour lui de l'argent bloqué dans une administration. D'une manière générale, ses déclarations avaient été confuses, constamment contradictoires et difficilement compréhensibles. Il était cependant ressorti des écoutes téléphoniques que le recourant et C._ se connaissaient bien, qu'ils avaient l'habitude de se voir et que les lieux de rendez-vous étaient usuels. Aucune des conversations ne faisait référence spécifiquement par leur nom à des tiers, ce qui démontrait que tous deux savaient parfaitement de qui ils parlaient. Dans l'une des conversations, C._ avait reproché au recourant d'avoir le même numéro depuis longtemps et ce dernier avait assuré qu'il allait en changer. Enfin, le jour de l'opération, soit le 21 août 2016, le recourant s'était fait réprimander par C._ parce qu'il avait emmené avec lui une tierce personne. Le prénommé avait déclaré que si celui-ci n'était pas seul dans la voiture, la "mule" n'y monterait pas. C._ avait donné au recourant les coordonnées précises du rendez-vous et lui avait demandé de rester à son service le lendemain. La suite des conversations avait permis de comprendre que ces deux correspondants avaient été en permanence au téléphone jusqu'au moment où le recourant avait trouvé D._. Ce dernier avait indirectement confirmé que le recourant était impliqué dans le trafic, en déclarant qu'il pensait que celui-ci savait ce qu'il transportait.
1.3. Le recourant fait grand cas des déclarations successives de D._, lequel aurait indiqué que l'intéressé ignorait la présence de stupéfiants durant le trajet à destination de la Suisse. On ne voit pas en quoi ces explications - au demeurant fort compréhensibles de la part d'une "mule" convaincue d'avoir transporté une importante quantité de drogue - rendraient insoutenables les constatations de la cour cantonale, fondées sur les écoutes téléphoniques, selon lesquelles le recourant s'est rendu au point de rendez-vous désigné par C._, avec lequel il communiquait en permanence et qui avait supervisé l'opération de transport de stupéfiants, y compris pendant le trajet concerné en demandant à D._ de lui passer l'intéressé au téléphone. Il n'était nullement arbitraire, pour la cour cantonale, de retenir que le recourant savait qu'il devait prendre en charge une "mule", ni d'écarter ses explications confuses, selon lesquelles il aurait simplement rendu service au dernier nommé, rencontré fortuitement. Le grief doit être rejeté.
2.
Le recourant reproche à la cour cantonale d'avoir considéré qu'il avait transporté des stupéfiants au sens de l'art. 19 al. 1 let. b LStup, ainsi que de l'avoir condamné, pour cette infraction, en qualité de coauteur.
Son argumentation est largement irrecevable, dans la mesure où elle s'écarte de l'état de fait de la cour cantonale, par lequel le Tribunal fédéral est lié (cf. art. 105 al. 1 LTF) et dont il n'a pas démontré l'arbitraire (cf. consid. 1 supra). Il en va ainsi lorsqu'il prétend avoir ignoré que D._ transportait de la drogue sous ses vêtements lors du trajet transfrontalier à l'issue duquel tous deux ont été interpellés.
Pour le reste, le grief du recourant est infondé. En effet, selon une jurisprudence bien établie, celui qui entreprend un déplacement en voiture avec un passager qu'il sait détenir de la drogue commet, en qualité de coauteur, un acte de transport réprimé par l'art. 19 al. 1 let. b LStup (cf. <ref-ruling> consid. 1a p. 163; arrêts 6B_381/2011 du 22 août 2011 consid. 2; 6P.60/2007 du 12 octobre 2007 consid. 11.1). Peu importe, comme le soutient le recourant, qu'il n'ait alors pas eu une maîtrise directe sur la drogue (cf. <ref-ruling> consid. 1b p. 163; arrêt 6B_1021/2013 du 29 septembre 2014 consid. 7.3). On peut certes admettre, comme le relève l'intéressé, que l'art. 19 al. 1 LStup n'exclut pas totalement une condamnation en qualité de complice (cf. art. 25 CP). Une telle configuration doit cependant être envisagée avec retenue (cf. <ref-ruling> consid. 3.2 p. 193 s.; arrêt 6B_687/2016 du 12 juillet 2017 consid. 1.4.4. et les références citées). En l'occurrence, le recourant a personnellement conduit sa voiture jusqu'en France, afin de prendre en charge la "mule" puis lui faire passer la frontière pour regagner la Suisse. Ce comportement ne saurait être assimilé à celui du simple complice qui se contenterait par exemple de mettre une voiture à disposition pour le trajet ou de prêter assistance au transporteur en raison d'une panne de véhicule (cf. <ref-ruling> consid. 2b p. 91; <ref-ruling> consid. 2b p. 73; arrêt 6B_914/2008 du 5 février 2009 consid. 3.3.2). La cour cantonale n'a donc pas violé l'art. 19 al. 1 let. b LStup ni l'art. 25 CP en condamnant le recourant en tant que coauteur. Le grief doit être rejeté dans la mesure où il est recevable.
3.
Le recourant reproche à la cour cantonale d'avoir violé les art. 19 et 20 CP en refusant de mettre en oeuvre une expertise psychiatrique portant sur sa responsabilité pénale.
3.1. En vertu de l'art. 20 CP, l'autorité d'instruction ou le juge ordonne une expertise s'il existe une raison sérieuse de douter de la responsabilité de l'auteur. L'autorité doit ordonner une expertise non seulement lorsqu'elle éprouve effectivement des doutes quant à la responsabilité de l'auteur, mais aussi lorsque, d'après les circonstances du cas particulier, elle aurait dû en éprouver, c'est-à-dire lorsqu'elle se trouve en présence d'indices sérieux propres à faire douter de la responsabilité pleine et entière de l'auteur au moment des faits (arrêt 6B_352/2014 consid. 5.1 non publié aux <ref-ruling>; <ref-ruling> consid. 3.3 p. 147). La ratio legis veut que le juge, qui ne dispose pas de connaissances spécifiques dans le domaine de la psychiatrie, ne cherche pas à écarter ses doutes lui-même, fût-ce en se référant à la littérature spécialisée, mais que, confronté à de telles circonstances, il recourt au spécialiste. Constituent de tels indices une contradiction manifeste entre l'acte et la personnalité de l'auteur, le comportement aberrant du prévenu, un séjour antérieur dans un hôpital psychiatrique, une interdiction prononcée en vertu du code civil, une attestation médicale, l'alcoolisme chronique, la dépendance aux stupéfiants, la possibilité que la culpabilité ait été influencée par un état affectif particulier ou l'existence de signes d'une faiblesse d'esprit ou d'un retard mental (<ref-ruling> consid. 4a p. 274; arrêts 6B_987/2017 du 12 février 2018 consid. 1.1; 6B_341/2010 du 20 juillet 2010 consid. 3.3.1).
3.2. La cour cantonale a exposé que le recourant n'était pas un consommateur de drogue, que son comportement n'avait rien d'aberrant et que l'intéressé n'avait jamais séjourné en hôpital psychiatrique. Il était père de famille et avait exercé différents emplois, même s'il ne bénéficiait d'aucune formation professionnelle. Le caractère inadéquat de ses déclarations - qualifiées de "fumeuses", contradictoires et incompréhensibles par le tribunal de première instance - pouvait simplement s'expliquer par la volonté de nier et la difficulté à apporter des dénégations crédibles. Le témoignage de l'assistante sociale G._ n'avait quant à lui pas apporté d'éléments suffisants pour ordonner une expertise. Le fait d'éprouver des difficultés dans les affaires administratives ou d'avoir un niveau de compréhension inférieur à la moyenne en la matière ne signifiait pas qu'il faille douter de la responsabilité du recourant.
3.3. A titre d'indices propres à faire douter de sa responsabilité pénale, le recourant évoque tout d'abord des extraits du jugement de première instance, dont il ressort que ses déclarations ont été "confuses, constamment contradictoires et difficilement compréhensibles", ou qu'il a présenté des "explications fumeuses, contradictoires et souvent incompréhensibles pour expliquer sa présence aux côtés de D._ et ses contacts fréquents avec un trafiquant reconnu". Il s'agissait en l'occurrence d'une appréciation relative à l'établissement des faits, respectivement à l'évaluation de la culpabilité du recourant, par laquelle le tribunal de première instance a manifestement souhaité indiquer - de manière assez banale - que l'intéressé, qui avait cherché à nier son implication dans un trafic de stupéfiants malgré divers éléments probatoires accablants, n'avait pas été capable de fournir des explications cohérentes concernant notamment sa relation avec C._ et son appréhension en présence d'un homme transportant une importante quantité de drogue. On ne saurait déduire de telles remarques que les premiers juges auraient constaté un problème psychiatrique quelconque ou une faiblesse d'esprit chez l'intéressé.
Le recourant se prévaut ensuite du témoignage de l'assistante sociale G._, laquelle aurait rapporté ses "difficultés de comportement". La prénommée a déclaré ce qui suit lors des débats de première instance (jugement du 9 novembre 2017, p. 9) :
"Je pense que [le recourant] avait envie de travailler mais il avait des difficultés de comportement lors des entretiens. Par difficultés de comportement, je veux dire qu'il avait des retards dans les rendez-vous ou par exemple son téléphone qui sonnait. Je ne considère pas [que le recourant] ait un problème d'illettrisme, même s'il a quelques difficultés en lecture et écriture. Il a effectivement à un moment sollicité de pouvoir se perfectionner en français. Pour vous répondre, il comprenait les choses administratives. Il comprenait probablement un peu moins bien que la moyenne des gens sur le plan administratif. Sur le plan de son fonctionnement psychique, nous avons remarqué [que le recourant] était un peu rigide et peu accessible au travail d'accompagnement, avec certainement des difficultés d'adaptation culturelle. Il avait par exemple du mal à comprendre que son mariage traditionnel en Afrique ne soit pas reconnu en Suisse. Il faudrait un accompagnement social pour l'aider, avec la difficulté qu'il est souvent en retard aux rendez-vous ou qu'il y a des absences. Je lui avais également suggéré une psychothérapie pour l'aider à gérer ses angoisses liées à sa situation familiale, mais il n'était pas preneur."
On peine à comprendre comment le recourant pourrait déduire de telles déclarations - qui relatent essentiellement sa nonchalance, quelques difficultés "sur le plan administratif" ou encore une certaine inadaptation culturelle - des soupçons de "sérieux troubles psychiques et probablement de troubles d'ordre cognitif voire de faiblesse d'esprit". Les comportements rapportés par ce témoignage ne correspondent en rien aux indices évoqués dans la jurisprudence topique en la matière (cf. consid. 3.1 supra).
Enfin, le recourant indique que durant les débats de première instance, à l'issue des plaidoiries, la parole lui a été donnée. Le procès-verbal mentionne à cet égard que la Présidente demande à l'intéressé s'il a quelque chose à ajouter pour sa défense, puis que celui-ci "s'exprime très longuement". Le recourant affirme que ses propos n'ont pas pu être protocolés, ceux-ci étant "à ce point incompréhensibles qu'aucun greffier ne serait parvenu à en rédiger un résumé". Le procès-verbal ne fait toutefois pas état de propos aberrants ou laissant paraître un trouble psychique chez le recourant. Au cours des débats de première instance, ce dernier a d'ailleurs été longuement interrogé et ses propos reproduits sur plusieurs pages de procès-verbal (cf. jugement du 9 novembre 2017, p. 4 s. et 7). Or, c'est en vain que l'on cherche, dans ces déclarations, le moindre indice permettant de douter de la responsabilité pénale de l'intéressé. Pour le surplus, le seul fait qu'un prévenu s'exprime longuement pour sa défense avant la clôture des débats ne laisse en rien présumer un éventuel trouble psychique ni une faiblesse d'esprit.
Compte tenu de ce qui précède, en l'absence de tout indice pertinent en la matière, la cour cantonale n'a aucunement violé le droit fédéral en refusant de soumettre le recourant à une expertise portant sur sa responsabilité pénale. Le grief doit être rejeté.
4.
Le recourant soutient que la motivation de l'autorité précédente relative à la fixation de la peine et à la révocation du sursis violerait son droit d'être entendu.
4.1. L'obligation de motiver, telle qu'elle découle du droit d'être entendu (art. 29 al. 2 Cst.; cf. aussi art. 3 al. 2 let. c et 107 CPP), est respectée lorsque le juge mentionne, au moins brièvement, les motifs qui l'ont guidé et sur lesquels il a fondé sa décision, de manière à ce que l'intéressé puisse se rendre compte de la portée de celle-ci et l'attaquer en connaissance de cause (<ref-ruling> consid. 3.4.3 p. 47 et les références citées).
Le juge dispose d'un large pouvoir d'appréciation dans le cadre de la fixation de la peine. Le Tribunal fédéral n'intervient que lorsque l'autorité cantonale a fixé une peine en dehors du cadre légal, si elle s'est fondée sur des critères étrangers à l'art. 47 CP, si des éléments d'appréciation importants n'ont pas été pris en compte ou, enfin, si la peine prononcée est exagérément sévère ou clémente au point de constituer un abus du pouvoir d'appréciation (<ref-ruling> consid. 5.6 p. 61). L'exercice de ce contrôle suppose que le juge exprime, dans sa décision, les éléments essentiels relatifs à l'acte ou à l'auteur dont il tient compte, de manière à ce que l'on puisse constater que tous les aspects pertinents ont été pris en considération et comment ils ont été appréciés, que ce soit dans un sens aggravant ou atténuant (art. 50 CP; <ref-ruling> consid. 2.1 p. 20 et les références citées). Le juge peut passer sous silence les éléments qui, sans abus du pouvoir d'appréciation, lui apparaissent non pertinents ou d'une importance mineure. La motivation doit justifier la peine prononcée, en permettant de suivre le raisonnement adopté. Un recours ne saurait toutefois être admis simplement pour améliorer ou compléter un considérant lorsque la décision rendue apparaît conforme au droit (<ref-ruling> consid. 5.6 p. 61; arrêt 6B_111/2015 du 3 mars 2016 consid. 2.2 non publié aux <ref-ruling>).
4.2. La cour cantonale a repris à son compte les considérations des premiers juges concernant la fixation de la peine, en particulier l'appréciation de la culpabilité du recourant, les éléments à charge et à décharge. Il en ressortait que la culpabilité de l'intéressé était très importante, eu égard à son implication dans un trafic international de stupéfiants, soit au transport d'une "mule" dans son véhicule. Le recourant avait livré des explications "fumeuses" lorsqu'il avait été confronté aux preuves accumulées contre lui et avait donc fait preuve d'une mauvaise collaboration. Il avait en outre été tenu compte de sa constante victimisation et de la récidive commise durant le délai d'épreuve, alors qu'il avait déjà été condamné pour des faits similaires. A décharge, le tribunal avait retenu ses ressources limitées, lesquelles avaient été rapportées par la témoin G._. Compte tenu de ces éléments, la cour cantonale a considéré qu'une peine privative de liberté de trois ans et demi était adéquate, au vu également de la révocation des sursis ayant été antérieurement octroyés au recourant.
4.3. Cette motivation satisfait aux exigences légales et jurisprudentielles précitées (cf. consid. 4.1 supra), celle-ci permettant en particulier de comprendre quels éléments ont été retenus à charge et à décharge pour la fixation de la peine. Contrairement à ce que suggère le recourant, l'autorité précédente n'avait pas à procéder à une "réduction de peine" en raison de ses moyens limités, dès lors qu'il s'agissait d'une circonstance entrant en considération pour la fixation de la sanction selon l'art. 47 CP et non, comme celui-ci l'aurait souhaité, d'un motif restreignant sa responsabilité pénale au sens de l'art. 19 CP. On ne voit pas en quoi cet élément aurait dû, comme le suggère l'intéressé, conduire la cour cantonale à lui infliger une peine compatible avec le sursis ou à renoncer à révoquer les sursis qui lui avaient été préalablement accordés. Pour le reste, on comprend de la motivation en question que la récidive justifiait une révocation des sursis antérieurs, dès lors que ceux-ci n'avaient pas été de nature à dissuader le recourant de commettre de nouvelles infractions. La peine privative de liberté prononcée étant supérieure à trois ans, un examen des conditions d'octroi du sursis, même partiel, ne se justifiait pas (cf. art. 42 al. 1 et 43 al. 1 CP). En définitive, la motivation de l'autorité précédente n'a pas violé le droit d'être entendu du recourant, étant précisé que ce dernier ne conteste pas, par ailleurs, la quotité de la peine privative de liberté lui ayant été infligée. Le grief doit être rejeté.
5.
Le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF), dont le montant sera toutefois fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 23 août 2018
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa